link.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. package db
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "gorm.io/gorm"
  7. "reflect"
  8. "strconv"
  9. "strings"
  10. "time"
  11. "youngee_b_api/model/common_model"
  12. "youngee_b_api/model/gorm_model"
  13. "youngee_b_api/model/http_model"
  14. "youngee_b_api/pack"
  15. "youngee_b_api/util"
  16. "github.com/issue9/conv"
  17. "github.com/sirupsen/logrus"
  18. )
  19. // GetTaskLinkList 查询上传链接的task list
  20. func GetTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskLinkInfo, int64, error) {
  21. db := GetReadDB(ctx)
  22. // 查询Task表信息
  23. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  24. // 根据Project条件过滤
  25. conditionType := reflect.TypeOf(conditions).Elem()
  26. conditionValue := reflect.ValueOf(conditions).Elem()
  27. var platform_nickname string = ""
  28. for i := 0; i < conditionType.NumField(); i++ {
  29. field := conditionType.Field(i)
  30. tag := field.Tag.Get("condition")
  31. value := conditionValue.FieldByName(field.Name)
  32. if tag == "link_status" {
  33. fmt.Printf("link %+v", value.Interface() == int64(0))
  34. if value.Interface() == int64(0) {
  35. db = db.Where("task_stage = 12")
  36. } else {
  37. db = db.Where("task_stage > 12 and task_stage <> 16")
  38. }
  39. continue
  40. } else if !util.IsBlank(value) {
  41. if tag == "platform_nickname" {
  42. platform_nickname = fmt.Sprintf("%v", value.Interface())
  43. continue
  44. } else if tag == "project_id" || tag == "strategy_id" {
  45. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  46. }
  47. }
  48. }
  49. var taskInfos []gorm_model.YoungeeTaskInfo
  50. db = db.Model(gorm_model.YoungeeTaskInfo{})
  51. // 查询总数
  52. var totalTask int64
  53. if err := db.Count(&totalTask).Error; err != nil {
  54. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  55. return nil, 0, err
  56. }
  57. db.Order("task_id").Find(&taskInfos)
  58. // 查询任务id
  59. var taskIds []string
  60. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  61. for _, taskInfo := range taskInfos {
  62. taskIds = append(taskIds, taskInfo.TaskID)
  63. taskMap[taskInfo.TaskID] = taskInfo
  64. }
  65. db1 := GetReadDB(ctx)
  66. db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
  67. var LinkInfos []gorm_model.YounggeeLinkInfo
  68. db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
  69. if conditions.LinkStatus == int64(0) {
  70. db1 = db1.Where("is_review = 0").Find(&LinkInfos)
  71. } else {
  72. db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
  73. }
  74. LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
  75. for _, LinkInfo := range LinkInfos {
  76. LinkMap[LinkInfo.TaskID] = LinkInfo
  77. }
  78. // 查询总数
  79. var totalLink int64
  80. if err := db1.Count(&totalLink).Error; err != nil {
  81. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  82. return nil, 0, err
  83. }
  84. var misNum int64
  85. if totalLink > totalTask {
  86. misNum = totalLink - totalTask
  87. } else {
  88. misNum = totalTask - totalLink
  89. }
  90. logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
  91. // 查询该页数据
  92. limit := pageSize + misNum
  93. offset := pageSize * pageNum // assert pageNum start with 0
  94. err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  95. if err != nil {
  96. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  97. return nil, 0, err
  98. }
  99. var TaskLinks []*http_model.TaskLink
  100. var taskLinks []*http_model.TaskLinkInfo
  101. var newTaskLinks []*http_model.TaskLinkInfo
  102. for _, taskId := range taskIds {
  103. TaskLink := new(http_model.TaskLink)
  104. TaskLink.Talent = taskMap[taskId]
  105. TaskLink.Link = LinkMap[taskId]
  106. TaskLinks = append(TaskLinks, TaskLink)
  107. }
  108. taskLinks = pack.TaskLinkToTaskInfo(TaskLinks)
  109. for _, v := range taskLinks {
  110. if platform_nickname == "" {
  111. newTaskLinks = append(newTaskLinks, v)
  112. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  113. newTaskLinks = append(newTaskLinks, v)
  114. } else if strings.Contains(conv.MustString(v.TaskID), platform_nickname) {
  115. newTaskLinks = append(newTaskLinks, v)
  116. } else {
  117. totalTask--
  118. }
  119. }
  120. return newTaskLinks, totalTask, nil
  121. }
  122. // LinkOpinion 提交意见
  123. func LinkOpinion(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string, Enterpriseid string) error {
  124. var opid string
  125. var optype int
  126. switch operatetype {
  127. case 3:
  128. {
  129. opid = Enterpriseid
  130. optype = 1
  131. }
  132. case 4:
  133. {
  134. opid = operatorid
  135. optype = 2
  136. }
  137. }
  138. db := GetReadDB(ctx)
  139. err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": opid, "b_operator_type": optype}).Error
  140. if err != nil {
  141. logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
  142. return err
  143. }
  144. var project gorm_model.ProjectInfo
  145. err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
  146. if err != nil {
  147. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  148. return err
  149. }
  150. var link_default gorm_model.InfoAutoTask
  151. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&link_default).Error
  152. if err != nil {
  153. return err
  154. }
  155. duration := time.Duration(link_default.LinkBreach) * time.Hour
  156. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
  157. if err != nil {
  158. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  159. return err
  160. }
  161. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
  162. if err != nil {
  163. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  164. return err
  165. }
  166. return nil
  167. }
  168. // LinkOpinion 提交意见
  169. func LocalLinkOpinion(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string, Enterpriseid string) error {
  170. var opid string
  171. var optype int
  172. switch operatetype {
  173. case 3:
  174. {
  175. opid = Enterpriseid
  176. optype = 1
  177. }
  178. case 4:
  179. {
  180. opid = operatorid
  181. optype = 2
  182. }
  183. }
  184. db := GetReadDB(ctx)
  185. err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": opid, "b_operator_type": optype}).Error
  186. if err != nil {
  187. logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
  188. return err
  189. }
  190. var project gorm_model.YounggeeLocalLifeInfo
  191. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
  192. if err != nil {
  193. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  194. return err
  195. }
  196. var link_default gorm_model.InfoAutoTask
  197. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&link_default).Error
  198. if err != nil {
  199. return err
  200. }
  201. duration := time.Duration(link_default.LinkBreach) * time.Hour
  202. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
  203. if err != nil {
  204. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  205. return err
  206. }
  207. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 11}).Error
  208. if err != nil {
  209. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  210. return err
  211. }
  212. return nil
  213. }
  214. // AcceptLink 同意链接
  215. func AcceptLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int, Enterpriseid string) error {
  216. var opid string
  217. var optype int
  218. switch operatetype {
  219. case 3:
  220. {
  221. opid = Enterpriseid
  222. optype = 1
  223. }
  224. case 4:
  225. {
  226. opid = operatorid
  227. optype = 2
  228. }
  229. }
  230. db := GetReadDB(ctx)
  231. err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": opid, "b_operator_type": optype}).Error
  232. if err != nil {
  233. logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
  234. return err
  235. }
  236. var project gorm_model.ProjectInfo
  237. err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
  238. if err != nil {
  239. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  240. return err
  241. }
  242. taskstages := 13
  243. nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
  244. if isspecial == 1 {
  245. toolList := strings.Split(project.Tools, ",")
  246. for _, tool := range toolList {
  247. // 将 tool 转换为整数
  248. if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
  249. nextstage[t-1] = 1
  250. }
  251. }
  252. for i := 4; i < len(nextstage); i++ { // 从位置1开始
  253. if nextstage[i] == 1 {
  254. switch i {
  255. case 4:
  256. taskstages = 13
  257. case 5:
  258. taskstages = 15
  259. }
  260. break
  261. }
  262. }
  263. }
  264. var data_default gorm_model.InfoAutoTask
  265. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&data_default).Error
  266. if err != nil {
  267. return err
  268. }
  269. duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
  270. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
  271. if err != nil {
  272. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  273. return err
  274. }
  275. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: taskstages}).Error
  276. if err != nil {
  277. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  278. return err
  279. }
  280. return nil
  281. }
  282. // AcceptLink 同意链接
  283. func LocalAcceptLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int, Enterpriseid string) error {
  284. var opid string
  285. var optype int
  286. switch operatetype {
  287. case 3:
  288. {
  289. opid = Enterpriseid
  290. optype = 1
  291. }
  292. case 4:
  293. {
  294. opid = operatorid
  295. optype = 2
  296. }
  297. }
  298. db := GetReadDB(ctx)
  299. err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": opid, "b_operator_type": optype}).Error
  300. if err != nil {
  301. logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
  302. return err
  303. }
  304. var project gorm_model.YounggeeLocalLifeInfo
  305. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
  306. if err != nil {
  307. logrus.WithContext(ctx).Errorf("[Sketch db] Find YounggeeLocalLifeInfo error,err:%+v", err)
  308. return err
  309. }
  310. taskstages := 13
  311. nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
  312. if isspecial == 1 {
  313. toolList := strings.Split(project.Tools, ",")
  314. for _, tool := range toolList {
  315. // 将 tool 转换为整数
  316. if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
  317. nextstage[t-1] = 1
  318. }
  319. }
  320. for i := 4; i < len(nextstage); i++ { // 从位置1开始
  321. if nextstage[i] == 1 {
  322. switch i {
  323. case 4:
  324. taskstages = 13
  325. case 5:
  326. taskstages = 15
  327. }
  328. break
  329. }
  330. }
  331. }
  332. var data_default gorm_model.InfoAutoTask
  333. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&data_default).Error
  334. if err != nil {
  335. return err
  336. }
  337. duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
  338. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{LinkStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
  339. if err != nil {
  340. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
  341. return err
  342. }
  343. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: taskstages}).Error
  344. if err != nil {
  345. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
  346. return err
  347. }
  348. return nil
  349. }
  350. // RejectLink 不同意链接
  351. func RejectLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, Enterpriseid string) error {
  352. var opid string
  353. var optype int
  354. switch operatetype {
  355. case 3:
  356. {
  357. opid = Enterpriseid
  358. optype = 1
  359. }
  360. case 4:
  361. {
  362. opid = operatorid
  363. optype = 2
  364. }
  365. }
  366. db := GetReadDB(ctx)
  367. err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now(), "b_operator": opid, "b_operator_type": optype}).Error
  368. if err != nil {
  369. logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
  370. return err
  371. }
  372. var project gorm_model.ProjectInfo
  373. err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
  374. if err != nil {
  375. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  376. return err
  377. }
  378. var link_default gorm_model.InfoAutoTask
  379. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&link_default).Error
  380. if err != nil {
  381. return err
  382. }
  383. duration := time.Duration(link_default.LinkBreach) * time.Hour
  384. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
  385. if err != nil {
  386. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  387. return err
  388. }
  389. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
  390. if err != nil {
  391. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
  392. return err
  393. }
  394. return nil
  395. }
  396. // RejectLink 不同意链接
  397. func LocalRejectLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, Enterpriseid string) error {
  398. var opid string
  399. var optype int
  400. switch operatetype {
  401. case 3:
  402. {
  403. opid = Enterpriseid
  404. optype = 1
  405. }
  406. case 4:
  407. {
  408. opid = operatorid
  409. optype = 2
  410. }
  411. }
  412. db := GetReadDB(ctx)
  413. err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now(), "b_operator": opid, "b_operator_type": optype}).Error
  414. if err != nil {
  415. logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
  416. return err
  417. }
  418. var project gorm_model.YounggeeLocalLifeInfo
  419. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
  420. if err != nil {
  421. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  422. return err
  423. }
  424. var link_default gorm_model.InfoAutoTask
  425. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&link_default).Error
  426. if err != nil {
  427. return err
  428. }
  429. duration := time.Duration(link_default.LinkBreach) * time.Hour
  430. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
  431. if err != nil {
  432. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
  433. return err
  434. }
  435. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 11}).Error
  436. if err != nil {
  437. logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
  438. return err
  439. }
  440. return nil
  441. }
  442. // GetSpecialTaskLinkList 专项任务-查询上传链接的task list
  443. func GetSpecialTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskLinkInfo, int64, error) {
  444. db := GetReadDB(ctx)
  445. // 查询Task表信息
  446. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  447. // 根据Project条件过滤
  448. conditionType := reflect.TypeOf(conditions).Elem()
  449. conditionValue := reflect.ValueOf(conditions).Elem()
  450. var platform_nickname string = ""
  451. for i := 0; i < conditionType.NumField(); i++ {
  452. field := conditionType.Field(i)
  453. tag := field.Tag.Get("condition")
  454. value := conditionValue.FieldByName(field.Name)
  455. if tag == "link_status" {
  456. fmt.Printf("link %+v", value.Interface() == int64(0))
  457. if value.Interface() == int64(0) {
  458. db = db.Where("task_stage = 12")
  459. } else {
  460. db = db.Where("task_stage > 12 and task_stage <> 16")
  461. }
  462. continue
  463. } else if !util.IsBlank(value) {
  464. if tag == "platform_nickname" {
  465. platform_nickname = fmt.Sprintf("%v", value.Interface())
  466. continue
  467. } else if tag == "project_id" {
  468. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  469. }
  470. }
  471. }
  472. var taskInfos []gorm_model.YoungeeTaskInfo
  473. db = db.Model(gorm_model.YoungeeTaskInfo{})
  474. // 查询总数
  475. var totalTask int64
  476. if err := db.Count(&totalTask).Error; err != nil {
  477. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  478. return nil, 0, err
  479. }
  480. db.Order("task_id").Find(&taskInfos)
  481. // 查询任务id
  482. var taskIds []string
  483. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  484. for _, taskInfo := range taskInfos {
  485. taskIds = append(taskIds, taskInfo.TaskID)
  486. taskMap[taskInfo.TaskID] = taskInfo
  487. }
  488. db1 := GetReadDB(ctx)
  489. db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
  490. var LinkInfos []gorm_model.YounggeeLinkInfo
  491. db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
  492. if conditions.LinkStatus == int64(0) {
  493. db1 = db1.Where("is_review = 0").Find(&LinkInfos)
  494. } else {
  495. db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
  496. }
  497. LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
  498. for _, LinkInfo := range LinkInfos {
  499. LinkMap[LinkInfo.TaskID] = LinkInfo
  500. }
  501. // 查询总数
  502. var totalLink int64
  503. if err := db1.Count(&totalLink).Error; err != nil {
  504. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  505. return nil, 0, err
  506. }
  507. var misNum int64
  508. if totalLink > totalTask {
  509. misNum = totalLink - totalTask
  510. } else {
  511. misNum = totalTask - totalLink
  512. }
  513. logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
  514. // 查询该页数据
  515. limit := pageSize + misNum
  516. offset := pageSize * pageNum // assert pageNum start with 0
  517. err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  518. if err != nil {
  519. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  520. return nil, 0, err
  521. }
  522. var TaskLinks []*http_model.SpecialTaskLink
  523. var taskLinks []*http_model.SpecialTaskLinkInfo
  524. var newTaskLinks []*http_model.SpecialTaskLinkInfo
  525. for _, taskId := range taskIds {
  526. TaskLink := new(http_model.SpecialTaskLink)
  527. TaskLink.Talent = taskMap[taskId]
  528. TaskLink.Link = LinkMap[taskId]
  529. TaskLinks = append(TaskLinks, TaskLink)
  530. }
  531. taskLinks = pack.SpecialTaskLinkToTaskInfo(TaskLinks)
  532. for _, v := range taskLinks {
  533. if platform_nickname == "" {
  534. newTaskLinks = append(newTaskLinks, v)
  535. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  536. newTaskLinks = append(newTaskLinks, v)
  537. } else if strings.Contains(conv.MustString(v.TaskID), platform_nickname) {
  538. newTaskLinks = append(newTaskLinks, v)
  539. } else {
  540. totalTask--
  541. }
  542. }
  543. return newTaskLinks, totalTask, nil
  544. }
  545. // GetProjectTaskLinkInfo 返回链接
  546. func GetProjectTaskLinkInfo(ctx context.Context, taskId string, IsOk int) (string, error) {
  547. db := GetReadDB(ctx)
  548. var linkURL string
  549. query := db.Debug().Model(&gorm_model.YounggeeLinkInfo{})
  550. if taskId != "" {
  551. query = query.Where("task_id = ?", taskId)
  552. }
  553. if IsOk >= 0 { // 假设 IsOk 只能是 0 或 1,如果不是可以调整
  554. query = query.Where("is_ok = ?", IsOk)
  555. }
  556. err := query.Pluck("link_url", &linkURL).Error
  557. if err != nil {
  558. if errors.Is(err, gorm.ErrRecordNotFound) {
  559. return "", nil
  560. }
  561. logrus.WithContext(ctx).Errorf("[GetProjectTaskLinkInfo] error querying link_url: %+v", err)
  562. return "", err
  563. }
  564. return linkURL, nil
  565. }