sop_task_start_logic.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package sop_task
  2. import (
  3. "context"
  4. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  5. "wechat-api/ent/messagerecords"
  6. "wechat-api/internal/utils/dberrorhandler"
  7. "wechat-api/internal/svc"
  8. "wechat-api/internal/types"
  9. "github.com/zeromicro/go-zero/core/logx"
  10. )
  11. type SopTaskStartLogic struct {
  12. logx.Logger
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. }
  16. func NewSopTaskStartLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SopTaskStartLogic {
  17. return &SopTaskStartLogic{
  18. Logger: logx.WithContext(ctx),
  19. ctx: ctx,
  20. svcCtx: svcCtx}
  21. }
  22. func (l *SopTaskStartLogic) SopTaskStart(req *types.IDReq) (resp *types.BaseMsgResp, err error) {
  23. // 开始事务
  24. tx, err := l.svcCtx.DB.Tx(context.Background())
  25. if err != nil {
  26. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  27. }
  28. // 根据 id 查询 task 信息,如果 Status 的值不为 1,则不允许修改
  29. task, err := tx.SopTask.Get(l.ctx, req.Id)
  30. if err != nil {
  31. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  32. }
  33. if task.Status != 2 && task.Status != 4 {
  34. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  35. }
  36. err = l.svcCtx.DB.SopTask.UpdateOneID(req.Id).
  37. SetStatus(3).
  38. Exec(l.ctx)
  39. if err != nil {
  40. _ = tx.Rollback()
  41. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  42. }
  43. // 查询task的所有sop_stages
  44. for _, stage := range task.Edges.TaskStages {
  45. // 更新最旧的 p.Number 条 status 值为 1 或 4 的 message_records 记录的 status 为 2
  46. messages, _ := tx.MessageRecords.Query().
  47. Where(messagerecords.Status(5), messagerecords.SourceType(3), messagerecords.SourceID(stage.ID)).
  48. All(l.ctx)
  49. for _, m := range messages {
  50. _, err := tx.MessageRecords.UpdateOneID(m.ID).SetStatus(1).Save(l.ctx)
  51. if err != nil {
  52. _ = tx.Rollback()
  53. }
  54. }
  55. }
  56. return &types.BaseMsgResp{Msg: errormsg.UpdateSuccess}, nil
  57. }