package sop_node import ( "context" "wechat-api/ent/custom_types" "wechat-api/ent/sopstage" "wechat-api/internal/svc" "wechat-api/internal/types" "wechat-api/internal/utils/dberrorhandler" "github.com/suyuan32/simple-admin-common/msg/errormsg" "github.com/zeromicro/go-zero/core/logx" ) type CreateSopNodeLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewCreateSopNodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateSopNodeLogic { return &CreateSopNodeLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *CreateSopNodeLogic) CreateSopNode(req *types.SopNodeInfo) (*types.BaseMsgResp, error) { // 根据 id 关联查询处 task 信息,并判断 status 是否为 1 data, err := l.svcCtx.DB.SopStage.Query(). Where(sopstage.ID(*req.StageId)). WithSopTask(). Only(l.ctx) if err != nil { return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) } task := data.Edges.SopTask if task.Status != 1 { return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) } actionMessage := make([]custom_types.Action, len(req.ActionMessage)) for i, condition := range req.ActionMessage { actionMessage[i] = custom_types.Action{ Type: condition.Type, Content: condition.Content, } } _, err = l.svcCtx.DB.SopNode.Create(). SetNotNilStatus(req.Status). SetNotNilStageID(req.StageId). SetNotNilParentID(req.ParentId). SetNotNilName(req.Name). SetNotNilConditionType(req.ConditionType). SetNotNilConditionList(req.ConditionList). SetNotNilActionMessage(actionMessage). SetNotNilActionLabel(req.ActionLabel). Save(l.ctx) if err != nil { return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) } return &types.BaseMsgResp{Msg: errormsg.CreateSuccess}, nil }