pcm-coordinator/internal/logic/adapters/createadapterlogic.go

103 lines
3.3 KiB
Go

package adapters
import (
"context"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/logx"
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc"
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/types"
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models"
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils"
"gorm.io/gorm"
"strconv"
"time"
)
type CreateAdapterLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewCreateAdapterLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateAdapterLogic {
return &CreateAdapterLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CreateAdapterLogic) CreateAdapter(req *types.AdapterCreateReq) (resp *types.AdapterResp, err error) {
adapter := types.AdapterInfo{}
existAdapter := types.AdapterResp{}
resp = &types.AdapterResp{}
utils.Convert(req, &adapter)
//check name
exist := l.svcCtx.DbEngin.Table("t_adapter").Where("name = ?", req.Name).First(&existAdapter).Error
if !errors.Is(exist, gorm.ErrRecordNotFound) {
resp = &existAdapter
return resp, errors.New("name already exists")
}
//check type
var arr = [...]string{"0", "1", "2"}
found := false
for _, str := range arr {
if str == req.Type {
found = true
break
}
}
if found == false {
return nil, errors.New("type not found")
}
//check resourceTypeDict
sql := `select t_dict_item.item_value
from t_dict
join t_dict_item on t_dict.id = t_dict_item.dict_id
where dict_code = 'adapter_type' and item_value = ?
and t_dict_item.parent_id != 0`
err = l.svcCtx.DbEngin.Raw(sql, req.ResourceType).First(&types.DictItemInfo{}).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, errors.New("resourceType error, please check!")
}
adapter.Id = utils.GenSnowflakeIDStr()
adapter.CreateTime = time.Now().Format("2006-01-02 15:04:05")
result := l.svcCtx.DbEngin.Table("t_adapter").Create(&adapter)
if result.Error != nil {
return resp, result.Error
}
_ = l.svcCtx.DbEngin.Table("t_adapter").Where("name = ?", req.Name).First(&existAdapter).Error
resp = &existAdapter
Tadapter := models.TAdapterInfo{}
if req.Type == "0" {
if req.ResourceType == "01" {
Tadapter.Id, _ = strconv.ParseInt(utils.GenSnowflakeIDStr(), 10, 64)
Tadapter.AdapterId, _ = strconv.ParseInt(resp.Id, 10, 64)
Tadapter.InfoName = "CloudInfoList"
l.svcCtx.DbEngin.Table("t_adapter_info").Create(&Tadapter)
resp.InfoName = "CloudInfoList"
} else if req.ResourceType == "02" {
Tadapter.Id, _ = strconv.ParseInt(utils.GenSnowflakeIDStr(), 10, 64)
Tadapter.AdapterId, _ = strconv.ParseInt(resp.Id, 10, 64)
Tadapter.InfoName = "VmInfoList"
l.svcCtx.DbEngin.Table("t_adapter_info").Create(&Tadapter)
resp.InfoName = "VmInfoList"
}
} else if req.Type == "1" {
Tadapter.Id, _ = strconv.ParseInt(utils.GenSnowflakeIDStr(), 10, 64)
Tadapter.AdapterId, _ = strconv.ParseInt(resp.Id, 10, 64)
Tadapter.InfoName = "AiInfoList"
l.svcCtx.DbEngin.Table("t_adapter_info").Create(&Tadapter)
resp.InfoName = "AiInfoList"
} else if req.Type == "2" {
Tadapter.Id, _ = strconv.ParseInt(utils.GenSnowflakeIDStr(), 10, 64)
Tadapter.AdapterId, _ = strconv.ParseInt(resp.Id, 10, 64)
Tadapter.InfoName = "HpcInfoList"
l.svcCtx.DbEngin.Table("t_adapter_info").Create(&Tadapter)
resp.InfoName = "HpcInfoList"
}
return resp, nil
}