package sop_node import ( "context" "wechat-api/ent" "wechat-api/ent/custom_types" "wechat-api/ent/sopnode" "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 UpdateSopNodeLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewUpdateSopNodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateSopNodeLogic { return &UpdateSopNodeLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *UpdateSopNodeLogic) UpdateSopNode(req *types.SopNodeInfo) (*types.BaseMsgResp, error) { // 根据 id 关联查询处 task 信息,并判断 status 是否为 1 data, err := l.svcCtx.DB.SopNode.Query(). Where(sopnode.ID(*req.Id)). WithSopStage(func(query *ent.SopStageQuery) { query.WithSopTask() }). Only(l.ctx) if err != nil { return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) } task := data.Edges.SopStage.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.UpdateOneID(*req.Id). SetNotNilStatus(req.Status). SetNotNilStageID(req.StageId). SetNotNilParentID(req.ParentId). SetNotNilName(req.Name). SetNotNilConditionType(req.ConditionType). SetNotNilConditionList(req.ConditionList). SetNotNilActionMessage(actionMessage). SetNotNilActionLabel(req.ActionLabel). Exec(l.ctx) if err != nil { return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) } return &types.BaseMsgResp{Msg: errormsg.UpdateSuccess}, nil }