locallife_task.go 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381
  1. package db
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/issue9/conv"
  7. "gorm.io/gorm"
  8. "strconv"
  9. "strings"
  10. "time"
  11. "youngee_m_api/model/gorm_model"
  12. "youngee_m_api/model/http_model"
  13. )
  14. func GetLocalRecruittime(ctx context.Context, request http_model.GetLocalRecruitTimeRequest) (*http_model.GetLocalRecruitTimeResponse, error) {
  15. db := GetReadDB(ctx)
  16. var localinfo gorm_model.YounggeeLocalLifeInfo
  17. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).Find(&localinfo).Error
  18. var result http_model.GetLocalRecruitTimeResponse
  19. if err != nil {
  20. return &result, err
  21. }
  22. result.RecruitTime = localinfo.RecruitDdl.Format("2006-01-02 15:04:05")
  23. return &result, nil
  24. }
  25. func GetLocalTalentstatusCount(db *gorm.DB, request http_model.GetLocalTalentstatusNumRequest, status int) (int64, error) {
  26. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", request.ProjectId, status)
  27. // 计算总数
  28. var total int64
  29. if err := query.Count(&total).Error; err != nil {
  30. return 0, err
  31. }
  32. return total, nil
  33. }
  34. func GetLocalTalentstatusNumCount(ctx context.Context, request http_model.GetLocalTalentstatusNumRequest) (*http_model.GetLocalTalentstatusNumResponse, error) {
  35. db := GetReadDB(ctx)
  36. var unoperatenum, agreetalentnum, refusetalentnum int64
  37. unoperatenum, _ = GetLocalTalentstatusCount(db, request, 1)
  38. agreetalentnum, _ = GetLocalTalentstatusCount(db, request, 2)
  39. refusetalentnum, _ = GetLocalTalentstatusCount(db, request, 3)
  40. count := &http_model.GetLocalTalentstatusNumResponse{
  41. UnoperateTalentnum: unoperatenum,
  42. AgreeTalentnum: agreetalentnum,
  43. RefuseTalentnum: refusetalentnum,
  44. }
  45. return count, nil
  46. }
  47. func GetLocalTalentstatusNum(db *gorm.DB, request http_model.GetLocalTalentstatusCountRequest, status int) (int64, error) {
  48. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, status)
  49. var total int64
  50. if err := query.Count(&total).Error; err != nil {
  51. return 0, err
  52. }
  53. return total, nil
  54. }
  55. func GetLocalTalentstatusCountNum(ctx context.Context, request http_model.GetLocalTalentstatusCountRequest) (*http_model.GetLocalTalentstatusCountResponse, error) {
  56. db := GetReadDB(ctx)
  57. var unoperatenum, agreetalentnum, refusetalentnum int64
  58. unoperatenum, _ = GetLocalTalentstatusNum(db, request, request.TaskStage)
  59. agreetalentnum, _ = GetLocalTalentstatusNum(db, request, request.TaskStage+1)
  60. refusetalentnum, _ = GetLocalTalentstatusNum(db, request, request.TaskStage+2)
  61. count := &http_model.GetLocalTalentstatusCountResponse{
  62. UnoperateTalentnum: unoperatenum,
  63. AgreeTalentnum: agreetalentnum,
  64. RefuseTalentnum: refusetalentnum,
  65. }
  66. return count, nil
  67. }
  68. func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskListRequest) (*http_model.GetLocalTaskListData, error) {
  69. db := GetReadDB(ctx)
  70. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  71. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", request.ProjectId, request.CoopType)
  72. var localinfo gorm_model.YounggeeLocalLifeInfo
  73. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  74. if err != nil {
  75. return &http_model.GetLocalTaskListData{}, err
  76. }
  77. // 构建查询条件
  78. if request.FeeFrom != nil {
  79. query = query.Where("fee_form = ?", request.FeeFrom)
  80. }
  81. if request.Type != nil {
  82. switch *request.Type {
  83. case 1:
  84. query = query.Where("supplier_id = 0 AND supplier_status = 0")
  85. case 2:
  86. query = query.Where("supplier_id !=0 AND supplier_status = 2")
  87. }
  88. }
  89. if request.Others != "" {
  90. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  91. }
  92. if request.TalentFromList != "" {
  93. provinceList := strings.Split(request.TalentFromList, ",") // 解析传入的省份列表
  94. query = query.Where("SUBSTRING_INDEX(city, ' ', 1) IN (?)", provinceList) // 提取城市字段中的省份并进行匹配
  95. }
  96. // 计算总数
  97. var total int64
  98. if err := query.Count(&total).Error; err != nil {
  99. return nil, err
  100. }
  101. // 添加分页逻辑
  102. pageSize := request.PageSize
  103. if pageSize == 0 {
  104. pageSize = 10
  105. }
  106. pageNum := request.PageNum
  107. if pageNum == 0 {
  108. pageNum = 1
  109. }
  110. offset := (pageNum - 1) * pageSize
  111. // 处理多字段排序逻辑
  112. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  113. for i := 0; i < len(request.SortField); i++ {
  114. field := request.SortField[i]
  115. order := request.SortOrder[i]
  116. switch field {
  117. case "fansnum":
  118. if order == "asc" {
  119. query = query.Order("fans_num asc")
  120. } else {
  121. query = query.Order("fans_num desc")
  122. }
  123. case "voteavg":
  124. if order == "asc" {
  125. query = query.Order("vote_avg asc")
  126. } else {
  127. query = query.Order("vote_avg desc")
  128. }
  129. case "commentavg":
  130. if order == "asc" {
  131. query = query.Order("commit_avg asc")
  132. } else {
  133. query = query.Order("commit_avg desc")
  134. }
  135. case "collectnum":
  136. if order == "asc" {
  137. query = query.Order("collect_num asc")
  138. } else {
  139. query = query.Order("collect_num desc")
  140. }
  141. }
  142. }
  143. } else {
  144. // Default sorting if no valid sort parameters
  145. query = query.Order("task_status asc").Order("task_stage asc")
  146. }
  147. // 执行分页查询
  148. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  149. return nil, err
  150. }
  151. taskInfoPointers := make([]*http_model.LocaLTaskInfo, 0, len(projecrtaskinfo))
  152. for _, task := range projecrtaskinfo {
  153. var Time time.Time
  154. switch request.CoopType {
  155. case 1:
  156. Time = task.CreateDate
  157. case 2:
  158. Time = task.SelectDate //2 signedtime
  159. case 3:
  160. Time = task.CompleteDate
  161. }
  162. var listtime, stageintro string
  163. switch task.TaskStage {
  164. case 4:
  165. {
  166. listtime = task.SelectDate.Format("2006-01-02 15:04:05")
  167. stageintro = "执行开始时间"
  168. }
  169. case 5:
  170. {
  171. listtime = task.ReserveTime.Format("2006-01-02 15:04:05")
  172. stageintro = "达人探店时间预约申请时间"
  173. }
  174. case 6:
  175. {
  176. listtime = task.ExploreTime.Format("2006-01-02 15:04:05")
  177. stageintro = "达人探店时间预约申请时间"
  178. }
  179. case 9:
  180. {
  181. listtime = task.CurBreakAt.Format("2006-01-02 15:04:05")
  182. stageintro = "初稿上传截止时间"
  183. }
  184. case 10:
  185. {
  186. var sketchinfo gorm_model.YounggeeSketchInfo
  187. err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&sketchinfo).Error
  188. if err != nil {
  189. return nil, err
  190. }
  191. listtime = sketchinfo.CreateAt.Format("2006-01-02 15:04:05")
  192. stageintro = "达人上传初稿时间" //
  193. }
  194. case 11:
  195. {
  196. listtime = task.CurBreakAt.Format("2006-01-02 15:04:05")
  197. stageintro = " 链接上传截止时间"
  198. }
  199. case 12:
  200. {
  201. var linkinfo gorm_model.YounggeeLinkInfo
  202. err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&linkinfo).Error
  203. if err != nil {
  204. return nil, err
  205. }
  206. listtime = linkinfo.CreateAt.Format("2006-01-02 15:04:05")
  207. stageintro = "达人上传链接时间"
  208. }
  209. case 13:
  210. {
  211. listtime = task.CurBreakAt.Format("2006-01-02 15:04:05")
  212. stageintro = "数据待传截止时间"
  213. }
  214. case 14:
  215. {
  216. var datainfo gorm_model.YounggeeDataInfo
  217. err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&datainfo).Error
  218. if err != nil {
  219. return nil, err
  220. }
  221. var auto_task_finish gorm_model.InfoAutoTask
  222. db.Model(&gorm_model.InfoAutoTask{}).Where("enterprise_id = ?", request.EnterPriseId).First(&auto_task_finish)
  223. // 将小时数转换为 Duration 后相加
  224. resultTime := datainfo.CreateAt.Add(time.Duration(auto_task_finish.TaskFinishAuto) * time.Hour)
  225. listtime = resultTime.Format("2006-01-02 15:04:05")
  226. stageintro = "品牌最晚结算时间"
  227. }
  228. case 15:
  229. {
  230. listtime = task.CompleteDate.Format("2006-01-02 15:04:05")
  231. stageintro = "品牌结算时间"
  232. }
  233. case 16:
  234. {
  235. listtime = task.CancelTime.Format("2006-01-02 15:04:05")
  236. stageintro = "解约时间"
  237. }
  238. }
  239. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  240. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  241. Iscoop := getIscoop(db, task.TalentId, request.EnterPriseId)
  242. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  243. response := &http_model.LocaLTaskInfo{
  244. TaskId: task.TaskId,
  245. ProjectId: task.LocalId,
  246. TalentId: task.TalentId,
  247. FansNum: fans,
  248. DraftFee: task.DraftFee,
  249. Voteavg: voteavg,
  250. FeeFrom: task.FeeForm,
  251. TaskStage: task.TaskStage,
  252. Commentavg: 0,
  253. CollectNum: 0,
  254. CurrentDefaultType: task.CurDefaultType,
  255. From: determineFrom(task.SupplierId, task.SupplierStatus),
  256. SType: s_type,
  257. SName: s_name,
  258. Boperator: boperator,
  259. CreateAt: Time.Format("2006-01-02 15:04:05"),
  260. NickName: nickname,
  261. HeadUrl: headurl,
  262. ISCoop: Iscoop,
  263. Gender: gender,
  264. Sprojectid: task.SLocalLifeId,
  265. City: task.City,
  266. StageIntro: stageintro,
  267. ListTime: listtime,
  268. }
  269. taskInfoPointers = append(taskInfoPointers, response)
  270. }
  271. return &http_model.GetLocalTaskListData{
  272. TaskList: taskInfoPointers,
  273. Total: conv.MustString(total, ""),
  274. }, nil
  275. }
  276. func PassLocalTaskCoop(ctx context.Context, req http_model.PasslocalTaskCoopRequest) (bool, error) {
  277. db := GetReadDB(ctx)
  278. var count int64
  279. err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
  280. if err != nil {
  281. return false, err
  282. }
  283. if int64(len(req.TaskIds)) == 0 || count != int64(len(req.TaskIds)) {
  284. return false, errors.New("任务id有误")
  285. }
  286. // 2. 查询任务对应达人id(用于生成达人消息)
  287. var talentIds []string
  288. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", req.TaskIds).Select("talent_id").Find(&talentIds).Error
  289. if err != nil {
  290. return false, err
  291. }
  292. // 3. 查询任务对应project名称(用于生成达人消息)
  293. var project gorm_model.YounggeeLocalLifeInfo
  294. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&project).Error
  295. if err != nil {
  296. return false, err
  297. }
  298. var taskstages int
  299. if project.TaskForm == 1 {
  300. taskstages = 4
  301. } else {
  302. taskstages = 9
  303. }
  304. nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
  305. if req.IsSpecial == 1 {
  306. toolList := strings.Split(project.Tools, ",")
  307. for _, tool := range toolList {
  308. // 将 tool 转换为整数
  309. if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
  310. nextstage[t-1] = 1
  311. }
  312. }
  313. fmt.Println(nextstage)
  314. for i := 1; i < len(nextstage); i++ { // 从位置1开始
  315. if nextstage[i] == 1 {
  316. switch i {
  317. case 1:
  318. taskstages = 4
  319. case 2:
  320. taskstages = 9
  321. case 3:
  322. taskstages = 11
  323. case 4:
  324. taskstages = 13
  325. case 5:
  326. taskstages = 15
  327. }
  328. break
  329. }
  330. }
  331. }
  332. var opid string
  333. var optype int
  334. opid = req.OperatorId
  335. optype = 3
  336. //4.根据达人来源改变状态、阶段、数目
  337. var tasks []gorm_model.YoungeeLocalTaskInfo
  338. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Find(&tasks).Error
  339. if err != nil {
  340. return false, err
  341. }
  342. err = db.Transaction(func(tx *gorm.DB) error {
  343. // 2. 修改任务状态和任务阶段
  344. for _, taskInfo := range tasks {
  345. if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 { //服务商招募数量+1
  346. updateData := gorm_model.YoungeeLocalTaskInfo{
  347. TaskStage: taskstages,
  348. TaskStatus: 2,
  349. UpdateAt: time.Now(),
  350. BOperator: opid,
  351. BOperatorType: optype,
  352. SelectDate: time.Now(),
  353. }
  354. err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
  355. if err != nil {
  356. return err
  357. }
  358. //project招募数+1,预估成本+服务商价格
  359. var projectinfo gorm_model.YounggeeLocalLifeInfo
  360. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&projectinfo).Error
  361. if err != nil {
  362. return err
  363. }
  364. projectinfo.RecruitNum += 1
  365. projectinfo.NeedPay += taskInfo.SupportFee
  366. err = tx.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", req.ProjectId).Updates(projectinfo).Error
  367. if err != nil {
  368. return err
  369. }
  370. //服务商s_project已招募人数+1改成s_locallife
  371. var sprojectinfo gorm_model.YounggeeSProjectInfo
  372. err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", taskInfo.SLocalLifeId).Find(&sprojectinfo).Error
  373. if err != nil {
  374. return err
  375. }
  376. sprojectinfo.RecruitNum += 1
  377. fmt.Println("......", projectinfo.RecruitNum)
  378. err = tx.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", taskInfo.SLocalLifeId).Updates(sprojectinfo).Error
  379. if err != nil {
  380. return err
  381. } //
  382. }
  383. //if project.TaskForm != 1 { //素材分发
  384. // var draft_default gorm_model.InfoAutoTask
  385. // err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&draft_default).Error
  386. // if err != nil {
  387. // return err
  388. // }
  389. // duration := time.Duration(draft_default.DraftDefault) * time.Hour
  390. // upbreakdate := gorm_model.YoungeeLocalTaskInfo{
  391. // CurBreakAt: time.Now().Add(duration),
  392. // }
  393. // err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? ", taskInfo.TaskId).Updates(upbreakdate).Error
  394. // if err != nil {
  395. // return err
  396. // }
  397. //}
  398. if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 { //来源于公海
  399. updateData := gorm_model.YoungeeLocalTaskInfo{
  400. TaskStage: taskstages,
  401. TaskStatus: 2,
  402. UpdateAt: time.Now(),
  403. BOperator: opid,
  404. BOperatorType: optype,
  405. SelectDate: time.Now(),
  406. }
  407. err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
  408. if err != nil {
  409. return err
  410. }
  411. //project招募数+1
  412. var projectinfo gorm_model.YounggeeLocalLifeInfo
  413. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&projectinfo).Error
  414. if err != nil {
  415. return err
  416. }
  417. projectinfo.RecruitNum += 1
  418. projectinfo.NeedPay += taskInfo.SupportFee
  419. err = tx.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", req.ProjectId).Updates(projectinfo).Error
  420. if err != nil {
  421. return err
  422. }
  423. }
  424. }
  425. // 4. 生成达人消息
  426. for _, talendId := range talentIds {
  427. err = CreateMessage(ctx, 1, 1, talendId, project.LocalName)
  428. if err != nil {
  429. return err
  430. }
  431. }
  432. for _, taskid := range req.TaskIds {
  433. err = CreateTaskLog(ctx, taskid, "已确认合作")
  434. if err != nil {
  435. return err
  436. }
  437. }
  438. // 返回 nil 提交事务
  439. return nil
  440. })
  441. if err != nil {
  442. return false, err
  443. }
  444. return true, nil
  445. }
  446. func RefuseLocalTaskCoop(ctx context.Context, req http_model.RefuselocalTaskCoopRequest) (bool, error) {
  447. db := GetWriteDB(ctx)
  448. // 1. 校验
  449. var count int64
  450. err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
  451. if err != nil {
  452. return false, err
  453. }
  454. if count != int64(len(req.TaskIds)) {
  455. return false, errors.New("任务id有误")
  456. }
  457. var opid string
  458. var optype int
  459. opid = req.OperatorId
  460. optype = 3
  461. // 2. 查询任务对应达人id(用于生成达人消息)
  462. var talentIds []string
  463. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", req.TaskIds).Select("talent_id").Find(&talentIds).Error
  464. if err != nil {
  465. return false, err
  466. }
  467. var tasks []gorm_model.YoungeeLocalTaskInfo
  468. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Find(&tasks).Error
  469. err = db.Transaction(func(tx *gorm.DB) error {
  470. // 2. 修改任务状态和任务阶段
  471. for _, taskInfo := range tasks {
  472. updateData := gorm_model.YoungeeLocalTaskInfo{
  473. TaskStage: 3,
  474. TaskStatus: 3,
  475. UpdateAt: time.Now(),
  476. BOperator: opid,
  477. BOperatorType: optype,
  478. CompleteDate: time.Now(),
  479. }
  480. err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
  481. }
  482. if err != nil {
  483. return err
  484. }
  485. for _, taskid := range req.TaskIds {
  486. err = CreateTaskLog(ctx, taskid, "已拒绝合作")
  487. if err != nil {
  488. return err
  489. }
  490. }
  491. // 返回 nil 提交事务
  492. return nil
  493. })
  494. if err != nil {
  495. return false, err
  496. }
  497. return true, nil
  498. }
  499. //func GetLocallifeData(ctx context.Context, req http_model.LocallifeDataRequest) (http_model.LocallifeDataResponse, error) {
  500. // db := GetReadDB(ctx)
  501. // var projectInfo gorm_model.YounggeeLocalLifeInfo
  502. // // 查询项目基本信息
  503. // if err := db.Where("local_id = ?", req.LocallifeId).First(&projectInfo).Error; err != nil {
  504. // logrus.WithContext(ctx).Errorf("[Locallife db] GetLocallifeData error, err: %+v", err)
  505. // return http_model.LocallifeDataResponse{}, err
  506. // }
  507. // fmt.Println("projectInfo---", projectInfo.LocalId)
  508. // var projectTasks []gorm_model.YoungeeLocalTaskInfo
  509. // if err := db.Where("local_id = ? AND task_status = ?", req.LocallifeId, 2).Find(&projectTasks).Error; err != nil {
  510. // return http_model.LocallifeDataResponse{}, err
  511. // }
  512. //
  513. // var totalTasks int64
  514. // if err := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", req.LocallifeId, 2).Count(&totalTasks).Error; err != nil {
  515. // return http_model.LocallifeDataResponse{}, err
  516. // }
  517. //
  518. // // 初始化统计数据
  519. // dateStats := make(map[string]int)
  520. // fansCounts := map[int64]int{0: 0, 1: 0, 2: 0, 3: 0}
  521. // feeCounts := map[int]int{1: 0, 2: 0, 3: 0}
  522. // startDate := *projectInfo.CreatedAt
  523. // endDate := time.Now()
  524. //
  525. // // 填充日期统计
  526. // for d := startDate; d.Before(endDate) || d.Equal(endDate); d = d.Add(24 * time.Hour) {
  527. // dateStats[d.Format("2006-01-02")] = 0
  528. // }
  529. //
  530. // var totalCost float64
  531. // var totalFans int
  532. // var serverTaskCount float64
  533. // var maleCount int64
  534. //
  535. // // 处理每个任务
  536. // for _, task := range projectTasks {
  537. // totalCost += task.DraftFee
  538. // var talentInfo gorm_model.YoungeeTalentInfo
  539. //
  540. // // 查询达人信息
  541. // if err := db.Where("id = ?", task.TalentId).First(&talentInfo).Error; err != nil {
  542. // logrus.WithContext(ctx).Errorf("[Locallife db] GetLocallifeData error, err: %+v", err)
  543. // return http_model.LocallifeDataResponse{}, err
  544. // }
  545. //
  546. // // 统计性别
  547. // if talentInfo.Sex == 1 {
  548. // maleCount++
  549. // }
  550. // totalFans += task.FansNum
  551. //
  552. // // 统计来自服务商的任务
  553. // if task.SupplierId != 0 && task.SupplierStatus == 2 {
  554. // serverTaskCount++
  555. // }
  556. //
  557. // // 稿费形式统计
  558. // feeCounts[task.FeeForm]++
  559. //
  560. // // 统计粉丝数
  561. // switch {
  562. // case task.FansNum < 10000:
  563. // fansCounts[0]++
  564. // case task.FansNum < 100000:
  565. // fansCounts[1]++
  566. // case task.FansNum < 1000000:
  567. // fansCounts[2]++
  568. // default:
  569. // fansCounts[3]++
  570. // }
  571. //
  572. // SelectDate := task.SelectDate.Format("2006-01-02")
  573. // if _, exists := dateStats[SelectDate]; exists {
  574. // dateStats[SelectDate]++
  575. // }
  576. // }
  577. //
  578. // // 计算平均值
  579. // var avgFansNum int
  580. // if totalTasks > 0 {
  581. // avgFansNum = totalFans / int(totalTasks)
  582. // } else {
  583. // avgFansNum = 0
  584. // }
  585. //
  586. // var fromType float64
  587. // if totalTasks > 0 {
  588. // fromType = serverTaskCount / float64(totalTasks)
  589. // } else {
  590. // fromType = 0
  591. // }
  592. //
  593. // var manRatio float64
  594. // if totalTasks > 0 {
  595. // manRatio = float64(maleCount) / float64(totalTasks)
  596. // } else {
  597. // manRatio = 0
  598. // }
  599. // // 构建响应
  600. // res := http_model.LocallifeDataResponse{
  601. // Recruittime: *projectInfo.PassAt,
  602. // RecruitDDl: *projectInfo.RecruitDdl,
  603. // AgreeNum: projectInfo.RecruitNum,
  604. // ApplyNum: projectInfo.ApplyNum,
  605. // DraftFee: totalCost,
  606. // AvgFansNum: avgFansNum,
  607. // FromType: fromType,
  608. // ManRatio: manRatio,
  609. // DateStats: dateStats,
  610. // FeeMap: feeCounts,
  611. // FansMap: fansCounts,
  612. // }
  613. // return res, nil
  614. //}
  615. func GetLocalPreSketchList(ctx context.Context, request http_model.LocalPreSketchListRequest) (*http_model.GetLocalSketchTaskListData, error) {
  616. db := GetReadDB(ctx)
  617. var localinfo gorm_model.YounggeeLocalLifeInfo
  618. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  619. if err != nil {
  620. return &http_model.GetLocalSketchTaskListData{}, err
  621. }
  622. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  623. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
  624. if request.Others != "" {
  625. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  626. }
  627. // 计算总数
  628. var total int64
  629. if err := query.Count(&total).Error; err != nil {
  630. return nil, err
  631. }
  632. // 添加分页逻辑
  633. pageSize := request.PageSize
  634. if pageSize == 0 {
  635. pageSize = 10
  636. }
  637. pageNum := request.PageNum
  638. if pageNum == 0 {
  639. pageNum = 1
  640. }
  641. offset := (pageNum - 1) * pageSize
  642. // 执行分页查询
  643. // 处理多字段排序逻辑
  644. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  645. for i := 0; i < len(request.SortField); i++ {
  646. field := request.SortField[i]
  647. order := request.SortOrder[i]
  648. switch field {
  649. case "fansnum":
  650. if order == "asc" {
  651. query = query.Order("fans_num asc")
  652. } else {
  653. query = query.Order("fans_num desc")
  654. }
  655. case "voteavg":
  656. if order == "asc" {
  657. query = query.Order("vote_avg asc")
  658. } else {
  659. query = query.Order("vote_avg desc")
  660. }
  661. case "commentavg":
  662. if order == "asc" {
  663. query = query.Order("commit_avg asc")
  664. } else {
  665. query = query.Order("commit_avg desc")
  666. }
  667. case "collectnum":
  668. if order == "asc" {
  669. query = query.Order("view_num asc")
  670. } else {
  671. query = query.Order("view_num desc")
  672. }
  673. }
  674. }
  675. } else {
  676. // Default sorting if no valid sort parameters
  677. query = query.Order("task_status asc").Order("task_stage asc")
  678. }
  679. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  680. return nil, err
  681. }
  682. taskInfoPointers := make([]*http_model.LocalTasksketchInfo, 0, len(projecrtaskinfo))
  683. for _, task := range projecrtaskinfo {
  684. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  685. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  686. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  687. taskinfo := &http_model.LocaLTaskInfo{
  688. TaskId: task.TaskId,
  689. ProjectId: task.LocalId,
  690. TalentId: task.TalentId,
  691. FansNum: fans,
  692. DraftFee: task.DraftFee,
  693. Voteavg: voteavg,
  694. FeeFrom: task.FeeForm,
  695. TaskStage: task.TaskStage,
  696. Commentavg: 0,
  697. CurrentDefaultType: task.CurDefaultType,
  698. From: determineFrom(task.SupplierId, task.SupplierStatus),
  699. SType: s_type,
  700. SName: s_name,
  701. NickName: nickname,
  702. HeadUrl: headurl,
  703. Gender: gender,
  704. CollectNum: 0,
  705. ISCoop: Iscoop,
  706. City: task.City,
  707. }
  708. response := &http_model.LocalTasksketchInfo{
  709. Task: taskinfo,
  710. DDl: task.CurBreakAt.Format("2006-01-02 15:04:05"),
  711. }
  712. taskInfoPointers = append(taskInfoPointers, response)
  713. }
  714. return &http_model.GetLocalSketchTaskListData{
  715. TasksketchList: taskInfoPointers,
  716. Total: conv.MustString(total, ""),
  717. }, nil
  718. }
  719. func GetLocalSketchList(ctx context.Context, request http_model.LocalTasksketchlistRequest) (*http_model.GetsketchlocaltaskListData, error) {
  720. db := GetReadDB(ctx)
  721. var localinfo gorm_model.YounggeeLocalLifeInfo
  722. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  723. if err != nil {
  724. return &http_model.GetsketchlocaltaskListData{}, err
  725. }
  726. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  727. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? ", request.ProjectId)
  728. switch request.ScriptStatus {
  729. case 10:
  730. query = query.Where("task_stage = 10")
  731. case 11:
  732. query = query.Where(" task_stage >= 11")
  733. }
  734. if request.Others != "" {
  735. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  736. }
  737. // 计算总数
  738. var total int64
  739. if err := query.Count(&total).Error; err != nil {
  740. return nil, err
  741. }
  742. // 添加分页逻辑
  743. pageSize := request.PageSize
  744. if pageSize == 0 {
  745. pageSize = 10
  746. }
  747. pageNum := request.PageNum
  748. if pageNum == 0 {
  749. pageNum = 1
  750. }
  751. offset := (pageNum - 1) * pageSize
  752. // 执行分页查询
  753. // 处理多字段排序逻辑
  754. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  755. for i := 0; i < len(request.SortField); i++ {
  756. field := request.SortField[i]
  757. order := request.SortOrder[i]
  758. switch field {
  759. case "fansnum":
  760. if order == "asc" {
  761. query = query.Order("fans_num asc")
  762. } else {
  763. query = query.Order("fans_num desc")
  764. }
  765. case "voteavg":
  766. if order == "asc" {
  767. query = query.Order("vote_avg asc")
  768. } else {
  769. query = query.Order("vote_avg desc")
  770. }
  771. case "commentavg":
  772. if order == "asc" {
  773. query = query.Order("commit_avg asc")
  774. } else {
  775. query = query.Order("commit_avg desc")
  776. }
  777. case "collectnum":
  778. if order == "asc" {
  779. query = query.Order("view_num asc")
  780. } else {
  781. query = query.Order("view_num desc")
  782. }
  783. }
  784. }
  785. } else {
  786. // Default sorting if no valid sort parameters
  787. query = query.Order("task_status asc").Order("task_stage asc")
  788. }
  789. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  790. return nil, err
  791. }
  792. taskInfoPointers := make([]*http_model.LocalTasksketchinfo, 0, len(projecrtaskinfo))
  793. for _, task := range projecrtaskinfo {
  794. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  795. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  796. taskinfo := &http_model.LocaLTaskInfo{
  797. TaskId: task.TaskId,
  798. ProjectId: task.LocalId,
  799. TalentId: task.TalentId,
  800. FansNum: fans,
  801. DraftFee: task.DraftFee,
  802. Voteavg: voteavg,
  803. FeeFrom: task.FeeForm,
  804. TaskStage: task.TaskStage,
  805. Commentavg: 0,
  806. CollectNum: 0,
  807. CurrentDefaultType: task.CurDefaultType,
  808. SType: s_type,
  809. SName: s_name,
  810. From: determineFrom(task.SupplierId, task.SupplierStatus),
  811. NickName: nickname,
  812. Gender: gender,
  813. HeadUrl: headurl,
  814. City: task.City,
  815. }
  816. var sketchinfo gorm_model.YounggeeSketchInfo
  817. switch request.ScriptStatus {
  818. case 10:
  819. err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0 ", task.TaskId).First(&sketchinfo).Error
  820. if err != nil {
  821. return nil, err
  822. }
  823. case 11:
  824. err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_ok = 1", task.TaskId).First(&sketchinfo).Error
  825. if err != nil {
  826. return nil, err
  827. }
  828. }
  829. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  830. response := &http_model.LocalTasksketchinfo{
  831. Task: taskinfo,
  832. SketchId: sketchinfo.SketchID,
  833. SubmitAt: sketchinfo.CreateAt.Format("2006-01-02 15:04:05"),
  834. AgreeAt: sketchinfo.AgreeAt.Format("2006-01-02 15:04:05"),
  835. SketchType: sketchinfo.Type,
  836. Operator: boperator,
  837. }
  838. taskInfoPointers = append(taskInfoPointers, response)
  839. }
  840. return &http_model.GetsketchlocaltaskListData{
  841. LocalTasksketchList: taskInfoPointers,
  842. Total: conv.MustString(total, ""),
  843. }, nil
  844. }
  845. func GetLocalPreLinkList(ctx context.Context, request http_model.LocalPreLinkListRequest) (*http_model.GetLocalPreLinkListData, error) {
  846. db := GetReadDB(ctx)
  847. var localinfo gorm_model.YounggeeLocalLifeInfo
  848. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  849. if err != nil {
  850. return &http_model.GetLocalPreLinkListData{}, err
  851. }
  852. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  853. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
  854. if request.Others != "" {
  855. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  856. }
  857. // 计算总数
  858. var total int64
  859. if err := query.Count(&total).Error; err != nil {
  860. return nil, err
  861. }
  862. // 添加分页逻辑
  863. pageSize := request.PageSize
  864. if pageSize == 0 {
  865. pageSize = 10
  866. }
  867. pageNum := request.PageNum
  868. if pageNum == 0 {
  869. pageNum = 1
  870. }
  871. offset := (pageNum - 1) * pageSize
  872. // 执行分页查询
  873. // 处理多字段排序逻辑
  874. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  875. for i := 0; i < len(request.SortField); i++ {
  876. field := request.SortField[i]
  877. order := request.SortOrder[i]
  878. switch field {
  879. case "fansnum":
  880. if order == "asc" {
  881. query = query.Order("fans_num asc")
  882. } else {
  883. query = query.Order("fans_num desc")
  884. }
  885. case "voteavg":
  886. if order == "asc" {
  887. query = query.Order("vote_avg asc")
  888. } else {
  889. query = query.Order("vote_avg desc")
  890. }
  891. case "commentavg":
  892. if order == "asc" {
  893. query = query.Order("commit_avg asc")
  894. } else {
  895. query = query.Order("commit_avg desc")
  896. }
  897. case "collectnum":
  898. if order == "asc" {
  899. query = query.Order("view_num asc")
  900. } else {
  901. query = query.Order("view_num desc")
  902. }
  903. }
  904. }
  905. } else {
  906. // Default sorting if no valid sort parameters
  907. query = query.Order("task_status asc").Order("task_stage asc")
  908. }
  909. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  910. return nil, err
  911. }
  912. taskInfoPointers := make([]*http_model.LocalTasklinkinfo, 0, len(projecrtaskinfo))
  913. for _, task := range projecrtaskinfo {
  914. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  915. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  916. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  917. taskinfo := &http_model.LocaLTaskInfo{
  918. TaskId: task.TaskId,
  919. ProjectId: task.LocalId,
  920. TalentId: task.TalentId,
  921. FansNum: fans,
  922. DraftFee: task.DraftFee,
  923. Voteavg: voteavg,
  924. FeeFrom: task.FeeForm,
  925. TaskStage: task.TaskStage,
  926. Commentavg: 0,
  927. CollectNum: 0,
  928. CurrentDefaultType: task.CurDefaultType,
  929. From: determineFrom(task.SupplierId, task.SupplierStatus),
  930. SType: s_type,
  931. SName: s_name,
  932. NickName: nickname,
  933. HeadUrl: headurl,
  934. Gender: gender,
  935. ISCoop: Iscoop,
  936. City: task.City,
  937. }
  938. response := &http_model.LocalTasklinkinfo{
  939. Task: taskinfo,
  940. DDl: task.CurBreakAt.Format("2006-01-02 15:04:05"),
  941. }
  942. taskInfoPointers = append(taskInfoPointers, response)
  943. }
  944. return &http_model.GetLocalPreLinkListData{
  945. TasklinkList: taskInfoPointers,
  946. Total: conv.MustString(total, ""),
  947. }, nil
  948. }
  949. func GetLocalLinkList(ctx context.Context, request http_model.LocalTaskLinklistRequest) (*http_model.GetLocalTaskLinkListData, error) {
  950. db := GetReadDB(ctx)
  951. var localinfo gorm_model.YounggeeLocalLifeInfo
  952. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  953. if err != nil {
  954. return &http_model.GetLocalTaskLinkListData{}, err
  955. }
  956. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  957. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? ", request.ProjectId)
  958. switch request.LinkStatus {
  959. case "12":
  960. query = query.Where("task_stage = 12")
  961. case "13":
  962. query = query.Where(" task_stage >= 13")
  963. }
  964. if request.Others != "" {
  965. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  966. }
  967. // 计算总数
  968. var total int64
  969. if err := query.Count(&total).Error; err != nil {
  970. return nil, err
  971. }
  972. // 添加分页逻辑
  973. pageSize := request.PageSize
  974. if pageSize == 0 {
  975. pageSize = 10
  976. }
  977. pageNum := request.PageNum
  978. if pageNum == 0 {
  979. pageNum = 1
  980. }
  981. offset := (pageNum - 1) * pageSize
  982. // 执行分页查询
  983. // 处理多字段排序逻辑
  984. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  985. for i := 0; i < len(request.SortField); i++ {
  986. field := request.SortField[i]
  987. order := request.SortOrder[i]
  988. switch field {
  989. case "fansnum":
  990. if order == "asc" {
  991. query = query.Order("fans_num asc")
  992. } else {
  993. query = query.Order("fans_num desc")
  994. }
  995. case "voteavg":
  996. if order == "asc" {
  997. query = query.Order("vote_avg asc")
  998. } else {
  999. query = query.Order("vote_avg desc")
  1000. }
  1001. case "commentavg":
  1002. if order == "asc" {
  1003. query = query.Order("commit_avg asc")
  1004. } else {
  1005. query = query.Order("commit_avg desc")
  1006. }
  1007. case "collectnum":
  1008. if order == "asc" {
  1009. query = query.Order("view_num asc")
  1010. } else {
  1011. query = query.Order("view_num desc")
  1012. }
  1013. }
  1014. }
  1015. } else {
  1016. // Default sorting if no valid sort parameters
  1017. query = query.Order("task_status asc").Order("task_stage asc")
  1018. }
  1019. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  1020. return nil, err
  1021. }
  1022. taskInfoPointers := make([]*http_model.LocalTaskLinkinfo, 0, len(projecrtaskinfo))
  1023. for _, task := range projecrtaskinfo {
  1024. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  1025. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  1026. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  1027. taskinfo := &http_model.LocaLTaskInfo{
  1028. TaskId: task.TaskId,
  1029. ProjectId: task.LocalId,
  1030. TalentId: task.TalentId,
  1031. FansNum: fans,
  1032. DraftFee: task.DraftFee,
  1033. Voteavg: voteavg,
  1034. FeeFrom: task.FeeForm,
  1035. TaskStage: task.TaskStage,
  1036. Commentavg: 0,
  1037. CollectNum: 0,
  1038. CurrentDefaultType: task.CurDefaultType,
  1039. From: determineFrom(task.SupplierId, task.SupplierStatus),
  1040. SType: s_type,
  1041. SName: s_name,
  1042. NickName: nickname,
  1043. HeadUrl: headurl,
  1044. Gender: gender,
  1045. ISCoop: Iscoop,
  1046. City: task.City,
  1047. }
  1048. var linkinfo gorm_model.YounggeeLinkInfo
  1049. switch request.LinkStatus {
  1050. case "12":
  1051. err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0 ", task.TaskId).First(&linkinfo).Error
  1052. if err != nil {
  1053. return nil, err
  1054. }
  1055. case "13":
  1056. err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_ok = 1", task.TaskId).First(&linkinfo).Error
  1057. if err != nil {
  1058. return nil, err
  1059. }
  1060. }
  1061. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  1062. response := &http_model.LocalTaskLinkinfo{
  1063. Task: taskinfo,
  1064. LinkId: linkinfo.LinkID,
  1065. SubmitAt: linkinfo.CreateAt.Format("2006-01-02 15:04:05"),
  1066. AgreeAt: linkinfo.AgreeAt.Format("2006-01-02 15:04:05"),
  1067. LinkUrl: linkinfo.LinkUrl,
  1068. PhotoUrl: linkinfo.PhotoUrl,
  1069. Operator: boperator,
  1070. }
  1071. taskInfoPointers = append(taskInfoPointers, response)
  1072. }
  1073. return &http_model.GetLocalTaskLinkListData{
  1074. LocalTaskLinklist: taskInfoPointers,
  1075. Total: conv.MustString(total, ""),
  1076. }, nil
  1077. }
  1078. func GetLocalPreDataList(ctx context.Context, request http_model.LocalPreDataListRequest) (*http_model.GetLocalPreDataListData, error) {
  1079. db := GetReadDB(ctx)
  1080. var localinfo gorm_model.YounggeeLocalLifeInfo
  1081. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  1082. if err != nil {
  1083. return &http_model.GetLocalPreDataListData{}, err
  1084. }
  1085. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  1086. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
  1087. if request.Others != "" {
  1088. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  1089. }
  1090. // 计算总数
  1091. var total int64
  1092. if err := query.Count(&total).Error; err != nil {
  1093. return nil, err
  1094. }
  1095. // 添加分页逻辑
  1096. pageSize := request.PageSize
  1097. if pageSize == 0 {
  1098. pageSize = 10
  1099. }
  1100. pageNum := request.PageNum
  1101. if pageNum == 0 {
  1102. pageNum = 1
  1103. }
  1104. offset := (pageNum - 1) * pageSize
  1105. // 执行分页查询
  1106. // 处理多字段排序逻辑
  1107. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  1108. for i := 0; i < len(request.SortField); i++ {
  1109. field := request.SortField[i]
  1110. order := request.SortOrder[i]
  1111. switch field {
  1112. case "fansnum":
  1113. if order == "asc" {
  1114. query = query.Order("fans_num asc")
  1115. } else {
  1116. query = query.Order("fans_num desc")
  1117. }
  1118. case "voteavg":
  1119. if order == "asc" {
  1120. query = query.Order("vote_avg asc")
  1121. } else {
  1122. query = query.Order("vote_avg desc")
  1123. }
  1124. case "commentavg":
  1125. if order == "asc" {
  1126. query = query.Order("commit_avg asc")
  1127. } else {
  1128. query = query.Order("commit_avg desc")
  1129. }
  1130. case "collectnum":
  1131. if order == "asc" {
  1132. query = query.Order("view_num asc")
  1133. } else {
  1134. query = query.Order("view_num desc")
  1135. }
  1136. }
  1137. }
  1138. } else {
  1139. // Default sorting if no valid sort parameters
  1140. query = query.Order("task_status asc").Order("task_stage asc")
  1141. }
  1142. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  1143. return nil, err
  1144. }
  1145. taskInfoPointers := make([]*http_model.LocalTaskdatainfo, 0, len(projecrtaskinfo))
  1146. for _, task := range projecrtaskinfo {
  1147. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  1148. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  1149. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  1150. taskinfo := &http_model.LocaLTaskInfo{
  1151. TaskId: task.TaskId,
  1152. ProjectId: task.LocalId,
  1153. TalentId: task.TalentId,
  1154. FansNum: fans,
  1155. DraftFee: task.DraftFee,
  1156. Voteavg: voteavg,
  1157. FeeFrom: task.FeeForm,
  1158. TaskStage: task.TaskStage,
  1159. Commentavg: 0,
  1160. CollectNum: 0,
  1161. CurrentDefaultType: task.CurDefaultType,
  1162. From: determineFrom(task.SupplierId, task.SupplierStatus),
  1163. SType: s_type,
  1164. SName: s_name,
  1165. NickName: nickname,
  1166. HeadUrl: headurl,
  1167. Gender: gender,
  1168. ISCoop: Iscoop,
  1169. City: task.City,
  1170. }
  1171. response := &http_model.LocalTaskdatainfo{
  1172. Task: taskinfo,
  1173. DDl: task.CurBreakAt.Format("2006-01-02 15:04:05"),
  1174. }
  1175. taskInfoPointers = append(taskInfoPointers, response)
  1176. }
  1177. return &http_model.GetLocalPreDataListData{
  1178. TaskdataList: taskInfoPointers,
  1179. Total: conv.MustString(total, ""),
  1180. }, nil
  1181. }
  1182. func GetLocalDataList(ctx context.Context, request http_model.LocalTaskDatalistRequest) (*http_model.GetLocalTaskDatalistData, error) {
  1183. db := GetReadDB(ctx)
  1184. var localinfo gorm_model.YounggeeLocalLifeInfo
  1185. err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).First(&localinfo).Error
  1186. if err != nil {
  1187. return &http_model.GetLocalTaskDatalistData{}, err
  1188. }
  1189. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  1190. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
  1191. if request.Others != "" {
  1192. query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
  1193. }
  1194. // 计算总数
  1195. var total int64
  1196. if err := query.Count(&total).Error; err != nil {
  1197. return nil, err
  1198. }
  1199. // 添加分页逻辑
  1200. pageSize := request.PageSize
  1201. if pageSize == 0 {
  1202. pageSize = 10
  1203. }
  1204. pageNum := request.PageNum
  1205. if pageNum == 0 {
  1206. pageNum = 1
  1207. }
  1208. offset := (pageNum - 1) * pageSize
  1209. // 执行分页查询
  1210. // 处理多字段排序逻辑
  1211. if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
  1212. for i := 0; i < len(request.SortField); i++ {
  1213. field := request.SortField[i]
  1214. order := request.SortOrder[i]
  1215. switch field {
  1216. case "fansnum":
  1217. if order == "asc" {
  1218. query = query.Order("fans_num asc")
  1219. } else {
  1220. query = query.Order("fans_num desc")
  1221. }
  1222. case "voteavg":
  1223. if order == "asc" {
  1224. query = query.Order("vote_avg asc")
  1225. } else {
  1226. query = query.Order("vote_avg desc")
  1227. }
  1228. case "commentavg":
  1229. if order == "asc" {
  1230. query = query.Order("commit_avg asc")
  1231. } else {
  1232. query = query.Order("commit_avg desc")
  1233. }
  1234. case "collectnum":
  1235. if order == "asc" {
  1236. query = query.Order("view_num asc")
  1237. } else {
  1238. query = query.Order("view_num desc")
  1239. }
  1240. }
  1241. }
  1242. } else {
  1243. // Default sorting if no valid sort parameters
  1244. query = query.Order("task_status asc").Order("task_stage asc")
  1245. }
  1246. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  1247. return nil, err
  1248. }
  1249. taskInfoPointers := make([]*http_model.LocalTaskDatainfo, 0, len(projecrtaskinfo))
  1250. for _, task := range projecrtaskinfo {
  1251. nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.OpenId)
  1252. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  1253. s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus, localinfo.LocalType)
  1254. taskinfo := &http_model.LocaLTaskInfo{
  1255. TaskId: task.TaskId,
  1256. ProjectId: task.LocalId,
  1257. TalentId: task.TalentId,
  1258. FansNum: fans,
  1259. DraftFee: task.DraftFee,
  1260. Voteavg: voteavg,
  1261. FeeFrom: task.FeeForm,
  1262. TaskStage: task.TaskStage,
  1263. Commentavg: 0,
  1264. CollectNum: 0,
  1265. CurrentDefaultType: task.CurDefaultType,
  1266. From: determineFrom(task.SupplierId, task.SupplierStatus),
  1267. SType: s_type,
  1268. SName: s_name,
  1269. NickName: nickname,
  1270. HeadUrl: headurl,
  1271. Gender: gender,
  1272. ISCoop: Iscoop,
  1273. City: task.City,
  1274. }
  1275. var datainfo gorm_model.YounggeeDataInfo
  1276. switch request.DataStatus {
  1277. case "14":
  1278. err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0 ", task.TaskId).First(&datainfo).Error
  1279. if err != nil {
  1280. return nil, err
  1281. }
  1282. case "15":
  1283. err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_ok = 1", task.TaskId).First(&datainfo).Error
  1284. if err != nil {
  1285. return nil, err
  1286. }
  1287. }
  1288. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  1289. response := &http_model.LocalTaskDatainfo{
  1290. Task: taskinfo,
  1291. DataId: datainfo.DataID,
  1292. SubmitAt: datainfo.CreateAt.Format("2006-01-02 15:04:05"),
  1293. AgreeAt: datainfo.AgreeAt.Format("2006-01-02 15:04:05"),
  1294. PhotoUrl: datainfo.PhotoUrl,
  1295. PlayNumber: datainfo.PlayNumber,
  1296. LikeNumber: datainfo.LikeNumber,
  1297. CollectNumber: datainfo.CollectNumber,
  1298. CommentNumber: datainfo.CommentNumber,
  1299. SettleAmount: task.SettleAmount,
  1300. Breakrate: task.SketchBreakRate + task.LinkBreakRate + task.DataBreakRate,
  1301. Operator: boperator,
  1302. }
  1303. taskInfoPointers = append(taskInfoPointers, response)
  1304. }
  1305. return &http_model.GetLocalTaskDatalistData{
  1306. LocalTaskDatalist: taskInfoPointers,
  1307. Total: conv.MustString(total, ""),
  1308. }, nil
  1309. }
  1310. func UpdateLocallife(ctx context.Context, project gorm_model.YounggeeLocalLifeInfo) (*string, error) {
  1311. db := GetReadDB(ctx)
  1312. err := db.Model(&project).Updates(project).Error
  1313. if err != nil {
  1314. return nil, err
  1315. }
  1316. return &project.LocalId, nil
  1317. }