sectask.go 5.6 KB

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