finish.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/tidwall/gjson"
  6. "reflect"
  7. "strings"
  8. "youngee_m_api/model/common_model"
  9. "youngee_m_api/model/gorm_model"
  10. "youngee_m_api/model/http_model"
  11. "youngee_m_api/pack"
  12. "youngee_m_api/util"
  13. "github.com/caixw/lib.go/conv"
  14. "github.com/sirupsen/logrus"
  15. )
  16. func GetTaskFinishList(ctx context.Context, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskFinishInfo, int64, error) {
  17. db := GetReadDB(ctx)
  18. // 查询Task表信息
  19. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_stage = 15")
  20. // 根据Project条件过滤
  21. conditionType := reflect.TypeOf(conditions).Elem()
  22. conditionValue := reflect.ValueOf(conditions).Elem()
  23. var platform_nickname string = ""
  24. for i := 0; i < conditionType.NumField(); i++ {
  25. field := conditionType.Field(i)
  26. tag := field.Tag.Get("condition")
  27. value := conditionValue.FieldByName(field.Name)
  28. if !util.IsBlank(value) {
  29. if tag == "platform_nickname" {
  30. platform_nickname = fmt.Sprintf("%v", value.Interface())
  31. continue
  32. } else if tag == "project_id" || tag == "strategy_id" {
  33. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  34. }
  35. }
  36. }
  37. var taskInfos []gorm_model.YoungeeTaskInfo
  38. db = db.Model(gorm_model.YoungeeTaskInfo{})
  39. // 查询总数
  40. var totalTask int64
  41. if err := db.Count(&totalTask).Error; err != nil {
  42. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  43. return nil, 0, err
  44. }
  45. db.Order("task_id").Find(&taskInfos)
  46. // 查询任务id
  47. var taskIds []string
  48. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  49. for _, taskInfo := range taskInfos {
  50. taskIds = append(taskIds, taskInfo.TaskId)
  51. taskMap[taskInfo.TaskId] = taskInfo
  52. }
  53. db1 := GetReadDB(ctx)
  54. db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
  55. var DataInfos []gorm_model.YounggeeDataInfo
  56. db1 = db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds)
  57. err := db1.Find(&DataInfos).Error
  58. DataMap := make(map[string]gorm_model.YounggeeDataInfo)
  59. for _, DataInfo := range DataInfos {
  60. DataMap[DataInfo.TaskID] = DataInfo
  61. }
  62. var LinkInfos []gorm_model.YounggeeLinkInfo
  63. db2 := GetReadDB(ctx)
  64. db2 = db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds).Find(&LinkInfos)
  65. LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
  66. for _, LinkInfo := range LinkInfos {
  67. LinkMap[LinkInfo.TaskID] = LinkInfo
  68. }
  69. // 查询总数
  70. var totalData int64
  71. if err := db2.Count(&totalData).Error; err != nil {
  72. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  73. return nil, 0, err
  74. }
  75. var misNum int64
  76. if totalData > totalTask {
  77. misNum = totalData - totalTask
  78. } else {
  79. misNum = totalTask - totalData
  80. }
  81. logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
  82. // 查询该页数据
  83. limit := pageSize + misNum
  84. offset := pageSize * pageNum // assert pageNum start with 0
  85. err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  86. if err != nil {
  87. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  88. return nil, 0, err
  89. }
  90. var TaskFinishs []*http_model.TaskFinish
  91. var taskDatas []*http_model.TaskFinishInfo
  92. var newTaskFinishs []*http_model.TaskFinishInfo
  93. for _, taskId := range taskIds {
  94. TaskFinish := new(http_model.TaskFinish)
  95. TaskFinish.Talent = taskMap[taskId]
  96. TaskFinish.Data = DataMap[taskId]
  97. TaskFinish.Link = LinkMap[taskId]
  98. TaskFinishs = append(TaskFinishs, TaskFinish)
  99. }
  100. taskDatas = pack.TaskFinishToTaskInfo(TaskFinishs)
  101. for _, v := range taskDatas {
  102. if platform_nickname == "" {
  103. newTaskFinishs = append(newTaskFinishs, v)
  104. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  105. newTaskFinishs = append(newTaskFinishs, v)
  106. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  107. newTaskFinishs = append(newTaskFinishs, v)
  108. } else {
  109. totalTask--
  110. }
  111. }
  112. return newTaskFinishs, totalTask, nil
  113. }
  114. func GetFinishData(ctx context.Context, projectID int64) ([]*gorm_model.RecruitStrategy, error) {
  115. var finishRecruitStrategy []*gorm_model.RecruitStrategy
  116. db := GetReadDB(ctx)
  117. // 查询Task表信息
  118. err := db.Debug().Model(gorm_model.RecruitStrategy{}).Where("project_id = ?", projectID).Scan(&finishRecruitStrategy).Order("strategy_id").Error
  119. if err != nil {
  120. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  121. return nil, err
  122. }
  123. return finishRecruitStrategy, nil
  124. }
  125. func GetSpecialTaskFinishList(ctx context.Context, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskFinishDataInfo, int64, error) {
  126. db := GetReadDB(ctx)
  127. // 查询Task表信息
  128. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_stage = 15")
  129. // 根据Project条件过滤
  130. conditionType := reflect.TypeOf(conditions).Elem()
  131. conditionValue := reflect.ValueOf(conditions).Elem()
  132. var platform_nickname string = ""
  133. for i := 0; i < conditionType.NumField(); i++ {
  134. field := conditionType.Field(i)
  135. tag := field.Tag.Get("condition")
  136. value := conditionValue.FieldByName(field.Name)
  137. if !util.IsBlank(value) {
  138. if tag == "platform_nickname" {
  139. platform_nickname = fmt.Sprintf("%v", value.Interface())
  140. continue
  141. } else if tag == "project_id" || tag == "strategy_id" {
  142. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  143. }
  144. }
  145. }
  146. var taskInfos []gorm_model.YoungeeTaskInfo
  147. db = db.Model(gorm_model.YoungeeTaskInfo{})
  148. // 查询总数
  149. var totalTask int64
  150. if err := db.Count(&totalTask).Error; err != nil {
  151. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  152. return nil, 0, err
  153. }
  154. db.Order("task_id").Find(&taskInfos)
  155. // 查询任务id
  156. var taskIds []string
  157. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  158. for _, taskInfo := range taskInfos {
  159. taskIds = append(taskIds, taskInfo.TaskId)
  160. taskMap[taskInfo.TaskId] = taskInfo
  161. }
  162. db1 := GetReadDB(ctx)
  163. db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
  164. var DataInfos []gorm_model.YounggeeDataInfo
  165. db1 = db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds)
  166. err := db1.Find(&DataInfos).Error
  167. DataMap := make(map[string]gorm_model.YounggeeDataInfo)
  168. for _, DataInfo := range DataInfos {
  169. DataMap[DataInfo.TaskID] = DataInfo
  170. }
  171. var LinkInfos []gorm_model.YounggeeLinkInfo
  172. db2 := GetReadDB(ctx)
  173. db2 = db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds).Find(&LinkInfos)
  174. LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
  175. for _, LinkInfo := range LinkInfos {
  176. LinkMap[LinkInfo.TaskID] = LinkInfo
  177. }
  178. // 查询总数
  179. var totalData int64
  180. if err := db2.Count(&totalData).Error; err != nil {
  181. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  182. return nil, 0, err
  183. }
  184. var misNum int64
  185. if totalData > totalTask {
  186. misNum = totalData - totalTask
  187. } else {
  188. misNum = totalTask - totalData
  189. }
  190. logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
  191. // 查询该页数据
  192. limit := pageSize + misNum
  193. offset := pageSize * pageNum // assert pageNum start with 0
  194. err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  195. if err != nil {
  196. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  197. return nil, 0, err
  198. }
  199. var TaskFinishs []*http_model.SpecialTaskFinishData
  200. var taskDatas []*http_model.SpecialTaskFinishDataInfo
  201. var newTaskFinishs []*http_model.SpecialTaskFinishDataInfo
  202. for _, taskId := range taskIds {
  203. TaskFinish := new(http_model.SpecialTaskFinishData)
  204. TaskFinish.Talent = taskMap[taskId]
  205. TaskFinish.Data = DataMap[taskId]
  206. TaskFinish.Link = LinkMap[taskId]
  207. TaskFinishs = append(TaskFinishs, TaskFinish)
  208. }
  209. taskDatas = pack.SpecialTaskFinishDataToTaskInfo(TaskFinishs)
  210. for _, v := range taskDatas {
  211. if platform_nickname == "" {
  212. newTaskFinishs = append(newTaskFinishs, v)
  213. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  214. newTaskFinishs = append(newTaskFinishs, v)
  215. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  216. newTaskFinishs = append(newTaskFinishs, v)
  217. } else {
  218. totalTask--
  219. }
  220. }
  221. return newTaskFinishs, totalTask, nil
  222. }
  223. func GetSpecialFinishDataNumber(ctx context.Context, projectId string) (*http_model.GetSpecialFinishDataData, error) {
  224. db := GetReadDB(ctx)
  225. // 查询Task表信息
  226. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_stage = 15")
  227. var taskInfos []gorm_model.YoungeeTaskInfo
  228. // 查询总数
  229. var totalTask int64
  230. if err := db.Count(&totalTask).Error; err != nil {
  231. logrus.WithContext(ctx).Errorf("[GetSpecialFinishDataNumber] error query mysql total, err:%+v", err)
  232. return nil, err
  233. }
  234. db.Order("task_id").Find(&taskInfos)
  235. // 查询任务id
  236. var taskIds []string
  237. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  238. for _, taskInfo := range taskInfos {
  239. taskIds = append(taskIds, taskInfo.TaskId)
  240. taskMap[taskInfo.TaskId] = taskInfo
  241. }
  242. db1 := GetReadDB(ctx)
  243. db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
  244. var DataInfos []gorm_model.YounggeeDataInfo
  245. db1 = db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds)
  246. err := db1.Find(&DataInfos).Error
  247. if err != nil {
  248. logrus.WithContext(ctx).Errorf("[GetSpecialFinishDataNumber] error query mysql total, err:%+v", err)
  249. return nil, err
  250. }
  251. DataMap := make(map[string]gorm_model.YounggeeDataInfo)
  252. for _, DataInfo := range DataInfos {
  253. DataMap[DataInfo.TaskID] = DataInfo
  254. }
  255. taskFinishData := http_model.GetSpecialFinishDataData{
  256. FinishNumber: totalTask,
  257. FanNumber: 0,
  258. PlayNumber: 0,
  259. LikeNumber: 0,
  260. CommentNumber: 0,
  261. CollectNumber: 0,
  262. }
  263. for _, taskId := range taskIds {
  264. fans := conv.MustString(gjson.Get(taskMap[taskId].TalentPlatformInfoSnap, "fans_count"), "")
  265. taskFinishData.FanNumber += conv.MustInt(fans, 0)
  266. taskFinishData.PlayNumber += DataMap[taskId].PlayNumber
  267. taskFinishData.LikeNumber += DataMap[taskId].LikeNumber
  268. taskFinishData.CollectNumber += DataMap[taskId].CollectNumber
  269. taskFinishData.CommentNumber += DataMap[taskId].CommentNumber
  270. }
  271. return &taskFinishData, nil
  272. }