create_sop_node_logic.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package sop_node
  2. import (
  3. "context"
  4. "fmt"
  5. "wechat-api/ent/custom_types"
  6. "wechat-api/ent/sopstage"
  7. "wechat-api/internal/svc"
  8. "wechat-api/internal/types"
  9. "wechat-api/internal/utils/dberrorhandler"
  10. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  11. "github.com/zeromicro/go-zero/core/logx"
  12. )
  13. type CreateSopNodeLogic struct {
  14. ctx context.Context
  15. svcCtx *svc.ServiceContext
  16. logx.Logger
  17. }
  18. func NewCreateSopNodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateSopNodeLogic {
  19. return &CreateSopNodeLogic{
  20. ctx: ctx,
  21. svcCtx: svcCtx,
  22. Logger: logx.WithContext(ctx),
  23. }
  24. }
  25. func (l *CreateSopNodeLogic) CreateSopNode(req *types.SopNodeInfo) (*types.SopNodeCreateResp, error) {
  26. organizationId := l.ctx.Value("organizationId").(uint64)
  27. // 根据 id 关联查询处 task 信息,并判断 status 是否为 1
  28. data, err := l.svcCtx.DB.SopStage.Query().
  29. Where(sopstage.ID(*req.StageId)).
  30. WithSopTask().
  31. Only(l.ctx)
  32. if err != nil {
  33. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  34. }
  35. task := data.Edges.SopTask
  36. if task.Status != 1 || task.OrganizationID != organizationId {
  37. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  38. }
  39. fmt.Printf("req.ActionMessage: %+v\n", req.ActionMessage)
  40. var actionMessage []custom_types.Action
  41. if len(req.ActionMessage) > 0 {
  42. actionMessage = make([]custom_types.Action, len(req.ActionMessage))
  43. for i, condition := range req.ActionMessage {
  44. if condition.Type == 1 {
  45. actionMessage[i] = custom_types.Action{
  46. Type: condition.Type,
  47. Content: condition.Content,
  48. }
  49. } else {
  50. actionMessage[i] = custom_types.Action{
  51. Type: condition.Type,
  52. Content: condition.Content,
  53. Meta: &custom_types.Meta{
  54. Filename: condition.Meta.Filename,
  55. },
  56. }
  57. }
  58. }
  59. }
  60. var forward *custom_types.ActionForward
  61. if req.ActionForward != nil {
  62. forward = &custom_types.ActionForward{}
  63. forward.Wxid = req.ActionForward.Wxid
  64. var forwardAction []custom_types.Action
  65. if len(req.ActionForward.Action) > 0 {
  66. forwardAction = make([]custom_types.Action, len(req.ActionForward.Action))
  67. for i, condition := range req.ActionForward.Action {
  68. if condition.Type == 1 {
  69. forwardAction[i] = custom_types.Action{
  70. Type: condition.Type,
  71. Content: condition.Content,
  72. }
  73. } else {
  74. forwardAction[i] = custom_types.Action{
  75. Type: condition.Type,
  76. Content: condition.Content,
  77. Meta: &custom_types.Meta{
  78. Filename: condition.Meta.Filename,
  79. },
  80. }
  81. }
  82. }
  83. }
  84. forward.Action = forwardAction
  85. } else {
  86. forward = nil
  87. }
  88. createStmt := l.svcCtx.DB.SopNode.Create().
  89. SetNotNilStatus(req.Status).
  90. SetNotNilStageID(req.StageId).
  91. SetNotNilParentID(req.ParentId).
  92. SetNotNilName(req.Name).
  93. SetNotNilConditionType(req.ConditionType).
  94. SetNotNilConditionList(req.ConditionList).
  95. SetNotNilNoReplyCondition(req.NoReplyCondition).
  96. SetNotNilNoReplyUnit(req.NoReplyUnit).
  97. SetNotNilActionMessage(actionMessage).
  98. SetNotNilActionLabelAdd(req.ActionLabelAdd).
  99. SetNotNilActionLabelDel(req.ActionLabelDel)
  100. if forward != nil {
  101. createStmt.SetActionForward(forward)
  102. }
  103. newNode, err := createStmt.Save(l.ctx)
  104. if err != nil {
  105. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  106. }
  107. return &types.SopNodeCreateResp{BaseDataInfo: types.BaseDataInfo{Msg: errormsg.CreateSuccess}, Data: newNode.ID}, nil
  108. }