sectask.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package db
  2. import (
  3. "context"
  4. "errors"
  5. "github.com/sirupsen/logrus"
  6. "gorm.io/gorm"
  7. "strings"
  8. "time"
  9. "youngee_b_api/model/gorm_model"
  10. "youngee_b_api/model/http_model"
  11. "youngee_b_api/pack"
  12. )
  13. func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, searchValue string, pageSize, pageNum int64) ([]*http_model.SecTaskInfo, int64, error) {
  14. db := GetReadDB(ctx)
  15. whereCondition := gorm_model.YounggeeSecTaskInfo{
  16. SelectionID: selectionId,
  17. TaskStatus: taskStatus,
  18. }
  19. db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where(whereCondition)
  20. // 查询总数
  21. var total int64
  22. var secTaskInfoList []*gorm_model.YounggeeSecTaskInfo
  23. if err := db.Count(&total).Error; err != nil {
  24. logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
  25. return nil, 0, err
  26. }
  27. // 查询该页数据
  28. limit := pageSize
  29. offset := pageSize * pageNum // assert pageNum start with 0
  30. err := db.Order("create_date desc").Limit(int(limit)).Offset(int(offset)).Find(&secTaskInfoList).Error
  31. if err != nil {
  32. logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
  33. return nil, 0, err
  34. }
  35. newSecTaskInfoList := pack.GormSecTaskListToHttpSecTaskList(secTaskInfoList)
  36. var resSecTaskInfoList []*http_model.SecTaskInfo
  37. if searchValue != "" {
  38. for _, v := range newSecTaskInfoList {
  39. if strings.Contains(v.SelectionId, searchValue) {
  40. resSecTaskInfoList = append(resSecTaskInfoList, v)
  41. } else if strings.Contains(v.PlatformNickname, searchValue) {
  42. resSecTaskInfoList = append(resSecTaskInfoList, v)
  43. } else {
  44. total--
  45. }
  46. }
  47. } else {
  48. resSecTaskInfoList = newSecTaskInfoList
  49. }
  50. return resSecTaskInfoList, total, nil
  51. }
  52. func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string) (bool, error) {
  53. db := GetWriteDB(ctx)
  54. // 1. 校验
  55. var count int64
  56. err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
  57. if err != nil {
  58. return false, err
  59. }
  60. if int64(len(taskIds)) == 0 || count != int64(len(taskIds)) {
  61. return false, errors.New("任务id有误")
  62. }
  63. // 2. 查询任务对应达人id(用于生成达人消息)
  64. var talentIds []string
  65. err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(talentIds).Error
  66. if err != nil {
  67. return false, err
  68. }
  69. // 3. 查询任务对应选品名称(用于生成达人消息)
  70. var selection gorm_model.YounggeeSelectionInfo
  71. err = db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Find(selection).Error
  72. if err != nil {
  73. return false, err
  74. }
  75. err = db.Transaction(func(tx *gorm.DB) error {
  76. // 2. 修改任务状态和任务阶段
  77. // 若选品不提供样品,则直接跳转执行阶段,否则进入发货阶段
  78. if selection.SampleMode == 3 {
  79. updateData := gorm_model.YounggeeSecTaskInfo{
  80. TaskStatus: 2,
  81. TaskStage: 6,
  82. SelectDate: time.Now(),
  83. LogisticsStatus: 1,
  84. }
  85. err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
  86. if err != nil {
  87. return err
  88. }
  89. } else {
  90. updateData := gorm_model.YounggeeSecTaskInfo{
  91. TaskStatus: 2,
  92. TaskStage: 8,
  93. SelectDate: time.Now(),
  94. LogisticsStatus: 3,
  95. AssignmentStatus: 1,
  96. }
  97. err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
  98. if err != nil {
  99. return err
  100. }
  101. }
  102. // 3. 生成达人消息
  103. for _, talendId := range talentIds {
  104. err = CreateMessage(ctx, 1, 1, talendId, selection.SelectionName)
  105. if err != nil {
  106. return err
  107. }
  108. }
  109. // 返回 nil 提交事务
  110. return nil
  111. })
  112. if err != nil {
  113. return false, err
  114. }
  115. return true, nil
  116. }
  117. func RefuseSecTaskCoop(ctx context.Context, taskIds []string) (bool, error) {
  118. db := GetWriteDB(ctx)
  119. // 1. 校验
  120. var count int64
  121. err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
  122. if err != nil {
  123. return false, err
  124. }
  125. if count != int64(len(taskIds)) {
  126. return false, errors.New("任务id有误")
  127. }
  128. // 查询任务对应达人id
  129. var talentIds []string
  130. err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(talentIds).Error
  131. if err != nil {
  132. return false, err
  133. }
  134. err = db.Transaction(func(tx *gorm.DB) error {
  135. // 2. 修改任务状态和任务阶段
  136. updateData := gorm_model.YounggeeSecTaskInfo{
  137. TaskStatus: 3,
  138. TaskStage: 5,
  139. CompleteDate: time.Now(),
  140. CompleteStatus: 3,
  141. }
  142. err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
  143. if err != nil {
  144. return err
  145. }
  146. // 返回 nil 提交事务
  147. return nil
  148. })
  149. if err != nil {
  150. return false, err
  151. }
  152. return true, nil
  153. }
  154. func UpdateSecTask(ctx context.Context, updateData gorm_model.YounggeeSecTaskInfo) (bool, error) {
  155. db := GetWriteDB(ctx)
  156. whereCondition := gorm_model.YounggeeSecTaskInfo{
  157. TaskID: updateData.TaskID,
  158. }
  159. err := db.Where(whereCondition).Updates(&updateData).Error
  160. if err != nil {
  161. return false, err
  162. }
  163. return true, nil
  164. }