sketch.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "reflect"
  6. "strconv"
  7. "strings"
  8. "time"
  9. "youngee_b_api/model/common_model"
  10. "youngee_b_api/model/gorm_model"
  11. "youngee_b_api/model/http_model"
  12. "youngee_b_api/pack"
  13. "youngee_b_api/util"
  14. "github.com/issue9/conv"
  15. "github.com/sirupsen/logrus"
  16. )
  17. // GetTaskSketchList 查询上传初稿的task list
  18. func GetTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskSketchInfo, int64, error) {
  19. db := GetReadDB(ctx)
  20. // 查询Task表信息
  21. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  22. // 根据Project条件过滤
  23. conditionType := reflect.TypeOf(conditions).Elem()
  24. conditionValue := reflect.ValueOf(conditions).Elem()
  25. var platform_nickname string = ""
  26. for i := 0; i < conditionType.NumField(); i++ {
  27. field := conditionType.Field(i)
  28. tag := field.Tag.Get("condition")
  29. value := conditionValue.FieldByName(field.Name)
  30. if tag == "sketch_status" {
  31. fmt.Printf("sketch %+v", value.Interface() == int64(0))
  32. if value.Interface() == int64(0) {
  33. db = db.Where("task_stage = 10")
  34. } else {
  35. db = db.Where("task_stage > 10 and task_stage <> 16")
  36. }
  37. continue
  38. } else if !util.IsBlank(value) {
  39. if tag == "platform_nickname" {
  40. platform_nickname = fmt.Sprintf("%v", value.Interface())
  41. continue
  42. } else if tag == "project_id" || tag == "strategy_id" {
  43. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  44. }
  45. }
  46. }
  47. var taskInfos []gorm_model.YoungeeTaskInfo
  48. db = db.Model(gorm_model.YoungeeTaskInfo{})
  49. // 查询总数
  50. var totalTask int64
  51. if err := db.Count(&totalTask).Error; err != nil {
  52. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  53. return nil, 0, err
  54. }
  55. db.Order("task_id").Find(&taskInfos)
  56. // 查询任务id
  57. var taskIds []string
  58. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  59. for _, taskInfo := range taskInfos {
  60. taskIds = append(taskIds, taskInfo.TaskID)
  61. taskMap[taskInfo.TaskID] = taskInfo
  62. }
  63. db1 := GetReadDB(ctx)
  64. db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
  65. var SketchInfos []gorm_model.YounggeeSketchInfo
  66. db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
  67. if conditions.SketchStatus == int64(0) {
  68. db1 = db1.Where("is_review = 0").Find(&SketchInfos)
  69. } else {
  70. db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
  71. }
  72. fmt.Printf("初稿查询:%+v", SketchInfos)
  73. SketchMap := make(map[string]gorm_model.YounggeeSketchInfo)
  74. for _, SketchInfo := range SketchInfos {
  75. SketchMap[SketchInfo.TaskID] = SketchInfo
  76. }
  77. // 查询总数
  78. var totalSketch int64
  79. if err := db1.Count(&totalSketch).Error; err != nil {
  80. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  81. return nil, 0, err
  82. }
  83. var misNum int64
  84. if totalSketch > totalTask {
  85. misNum = totalSketch - totalTask
  86. } else {
  87. misNum = totalTask - totalSketch
  88. }
  89. logrus.Println("totalSketch,totalTalent,misNum:", totalSketch, totalTask, misNum)
  90. // 查询该页数据
  91. limit := pageSize + misNum
  92. offset := pageSize * pageNum // assert pageNum start with 0
  93. //fmt.Printf("limit %+v offset %+v \n", limit, offset)
  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 TaskSketches []*http_model.TaskSketch
  100. var taskSketches []*http_model.TaskSketchInfo
  101. var newTaskSketches []*http_model.TaskSketchInfo
  102. for _, taskId := range taskIds {
  103. TaskSketch := new(http_model.TaskSketch)
  104. TaskSketch.Talent = taskMap[taskId]
  105. TaskSketch.Sketch = SketchMap[taskId]
  106. TaskSketches = append(TaskSketches, TaskSketch)
  107. }
  108. taskSketches = pack.TaskSketchToTaskInfo(TaskSketches)
  109. for _, v := range taskSketches {
  110. if platform_nickname == "" {
  111. newTaskSketches = append(newTaskSketches, v)
  112. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  113. newTaskSketches = append(newTaskSketches, v)
  114. } else if strings.Contains(conv.MustString(v.TaskID), platform_nickname) {
  115. newTaskSketches = append(newTaskSketches, v)
  116. } else {
  117. totalTask--
  118. }
  119. }
  120. return newTaskSketches, totalTask, nil
  121. }
  122. // SketchOption 提交意见
  123. func SketchOption(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
  124. db := GetReadDB(ctx)
  125. fmt.Printf("初稿意见 %d %+v", TaskID, ReviseOpinion)
  126. err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
  127. if err != nil {
  128. logrus.WithContext(ctx).Errorf("[Sketch db] call RevisieOption error,err:%+v", err)
  129. return err
  130. }
  131. var project gorm_model.ProjectInfo
  132. err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
  133. if err != nil {
  134. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  135. return err
  136. }
  137. var draft_default gorm_model.InfoAutoTask
  138. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&draft_default).Error
  139. if err != nil {
  140. return err
  141. }
  142. duration := time.Duration(draft_default.DraftDefault) * time.Hour
  143. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
  144. if err != nil {
  145. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  146. return err
  147. }
  148. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
  149. if err != nil {
  150. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  151. return err
  152. }
  153. return nil
  154. }
  155. // AcceptSketch 同意初稿
  156. func AcceptSketch(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int) error {
  157. db := GetReadDB(ctx)
  158. err := db.Model(gorm_model.YounggeeSketchInfo{}).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": operatorid, "b_operator_type": operatetype}).Error
  159. if err != nil {
  160. logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
  161. return err
  162. }
  163. var project gorm_model.ProjectInfo
  164. err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
  165. if err != nil {
  166. logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
  167. return err
  168. }
  169. taskstages := 11
  170. nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
  171. if isspecial == 1 {
  172. toolList := strings.Split(project.Tools, ",")
  173. for _, tool := range toolList {
  174. // 将 tool 转换为整数
  175. if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
  176. nextstage[t-1] = 1
  177. }
  178. }
  179. for i := 3; i < len(nextstage); i++ { // 从位置1开始
  180. if nextstage[i] == 1 {
  181. switch i {
  182. case 3:
  183. taskstages = 11
  184. case 4:
  185. taskstages = 13
  186. case 5:
  187. taskstages = 15
  188. }
  189. break
  190. }
  191. }
  192. }
  193. var link_default gorm_model.InfoAutoTask
  194. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&link_default).Error
  195. if err != nil {
  196. return err
  197. }
  198. duration := time.Duration(link_default.LinkBreach) * time.Hour
  199. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
  200. if err != nil {
  201. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  202. return err
  203. }
  204. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: taskstages}).Error
  205. if err != nil {
  206. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  207. return err
  208. }
  209. return nil
  210. }
  211. // RejectSketch 不同意初稿
  212. func RejectSketch(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
  213. db := GetReadDB(ctx)
  214. err := db.Model(gorm_model.YounggeeSketchInfo{}).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": operatorid, "b_operator_type": operatetype}).Error
  215. if err != nil {
  216. logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
  217. return err
  218. }
  219. var project gorm_model.ProjectInfo
  220. err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
  221. if err != nil {
  222. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  223. return err
  224. }
  225. var draft_default gorm_model.InfoAutoTask
  226. err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&draft_default).Error
  227. if err != nil {
  228. return err
  229. }
  230. duration := time.Duration(draft_default.DraftDefault) * time.Hour
  231. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
  232. if err != nil {
  233. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  234. return err
  235. }
  236. err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
  237. if err != nil {
  238. logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
  239. return err
  240. }
  241. return nil
  242. }
  243. // FindPhoto
  244. func FindSketchInfo(ctx context.Context, TaskID string) (*gorm_model.YounggeeSketchInfo, error) {
  245. db := GetReadDB(ctx)
  246. var SketchInfo gorm_model.YounggeeSketchInfo
  247. err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_ok = 1", TaskID).Find(&SketchInfo).Error
  248. if err != nil {
  249. return nil, err
  250. }
  251. return &SketchInfo, nil
  252. }
  253. // FindPhoto
  254. func FindPhoto(ctx context.Context, SketchID int64) ([]gorm_model.YounggeeSketchPhoto, error) {
  255. db := GetReadDB(ctx)
  256. var SketchPhotos []gorm_model.YounggeeSketchPhoto
  257. err := db.Model(gorm_model.YounggeeSketchPhoto{}).Where("sketch_id=?", SketchID).Find(&SketchPhotos).Error
  258. if err != nil {
  259. return nil, err
  260. }
  261. return SketchPhotos, nil
  262. }
  263. // GetSpecialTaskSketchList 专项任务-查询上传初稿的task list
  264. func GetSpecialTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskSketchInfo, int64, error) {
  265. db := GetReadDB(ctx)
  266. // 查询Task表信息
  267. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  268. // 根据Project条件过滤
  269. conditionType := reflect.TypeOf(conditions).Elem()
  270. conditionValue := reflect.ValueOf(conditions).Elem()
  271. var platform_nickname string = ""
  272. for i := 0; i < conditionType.NumField(); i++ {
  273. field := conditionType.Field(i)
  274. tag := field.Tag.Get("condition")
  275. value := conditionValue.FieldByName(field.Name)
  276. if tag == "sketch_status" {
  277. fmt.Printf("sketch %+v", value.Interface() == int64(0))
  278. if value.Interface() == int64(0) {
  279. db = db.Where("task_stage = 10")
  280. } else {
  281. db = db.Where("task_stage > 10 and task_stage <> 16")
  282. }
  283. continue
  284. } else if !util.IsBlank(value) {
  285. if tag == "platform_nickname" {
  286. platform_nickname = fmt.Sprintf("%v", value.Interface())
  287. continue
  288. } else if tag == "project_id" {
  289. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  290. }
  291. }
  292. }
  293. var taskInfos []gorm_model.YoungeeTaskInfo
  294. db = db.Model(gorm_model.YoungeeTaskInfo{})
  295. // 查询总数
  296. var totalTask int64
  297. if err := db.Count(&totalTask).Error; err != nil {
  298. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  299. return nil, 0, err
  300. }
  301. db.Order("task_id").Find(&taskInfos)
  302. // 查询任务id
  303. var taskIds []string
  304. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  305. for _, taskInfo := range taskInfos {
  306. taskIds = append(taskIds, taskInfo.TaskID)
  307. taskMap[taskInfo.TaskID] = taskInfo
  308. }
  309. db1 := GetReadDB(ctx)
  310. db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
  311. var SketchInfos []gorm_model.YounggeeSketchInfo
  312. db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
  313. if conditions.SketchStatus == int64(0) {
  314. db1 = db1.Where("is_review = 0").Find(&SketchInfos)
  315. } else {
  316. db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
  317. }
  318. //fmt.Printf("初稿查询:%+v", SketchInfos)
  319. SketchMap := make(map[string]gorm_model.YounggeeSketchInfo)
  320. for _, SketchInfo := range SketchInfos {
  321. SketchMap[SketchInfo.TaskID] = SketchInfo
  322. }
  323. // 查询总数
  324. var totalSketch int64
  325. if err := db1.Count(&totalSketch).Error; err != nil {
  326. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  327. return nil, 0, err
  328. }
  329. //// 查询该页数据
  330. //limit := pageSize
  331. //offset := pageSize * pageNum // assert pageNum start with 0
  332. //err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  333. //
  334. //if err != nil {
  335. // logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  336. // return nil, 0, err
  337. //}
  338. var TaskSketches []*http_model.SpecialTaskSketch
  339. var taskSketches []*http_model.SpecialTaskSketchInfo
  340. var newTaskSketches []*http_model.SpecialTaskSketchInfo
  341. for _, taskId := range taskIds {
  342. TaskSketch := new(http_model.SpecialTaskSketch)
  343. TaskSketch.Talent = taskMap[taskId]
  344. TaskSketch.Sketch = SketchMap[taskId]
  345. TaskSketches = append(TaskSketches, TaskSketch)
  346. }
  347. taskSketches = pack.SpecialTaskSketchToTaskInfo(TaskSketches)
  348. for _, v := range taskSketches {
  349. if platform_nickname == "" {
  350. newTaskSketches = append(newTaskSketches, v)
  351. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  352. newTaskSketches = append(newTaskSketches, v)
  353. } else if strings.Contains(conv.MustString(v.TaskID), platform_nickname) {
  354. newTaskSketches = append(newTaskSketches, v)
  355. } else {
  356. totalTask--
  357. }
  358. }
  359. return newTaskSketches, totalTask, nil
  360. }