project_task.go 43 KB

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