locallife_task.go 38 KB

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