locallife_task.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822
  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 GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskListRequest) (*http_model.GetLocalTaskListData, error) {
  16. db := GetReadDB(ctx)
  17. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  18. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", request.ProjectId, request.CoopType)
  19. fmt.Println(query)
  20. // 构建查询条件
  21. if request.FeeFrom != nil {
  22. query = query.Where("fee_form = ?", request.FeeFrom)
  23. }
  24. if request.Type != nil {
  25. switch *request.Type {
  26. case 1:
  27. query = query.Where("supplier_id = 0 AND supplier_status = 0")
  28. case 2:
  29. query = query.Where("supplier_id !=0 AND supplier_status = 2")
  30. }
  31. }
  32. if request.TalentFromList != "" {
  33. citylist := strings.Split(request.TalentFromList, ",")
  34. query = query.Where("city in ?", citylist)
  35. }
  36. // 计算总数
  37. var total int64
  38. if err := query.Count(&total).Error; err != nil {
  39. return nil, err
  40. }
  41. // 添加分页逻辑
  42. pageSize := request.PageSize
  43. if pageSize == 0 {
  44. pageSize = 10
  45. }
  46. pageNum := request.PageNum
  47. if pageNum == 0 {
  48. pageNum = 1
  49. }
  50. offset := (pageNum - 1) * pageSize
  51. // 执行分页查询
  52. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  53. return nil, err
  54. }
  55. taskInfoPointers := make([]*http_model.LocaLTaskInfo, 0, len(projecrtaskinfo))
  56. for _, task := range projecrtaskinfo {
  57. var Time time.Time
  58. switch request.CoopType {
  59. case 1:
  60. Time = task.CreateDate
  61. case 2:
  62. Time = task.SelectDate //2 signedtime
  63. case 3:
  64. Time = task.CompleteDate
  65. }
  66. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  67. nickname, headurl := getTalentinfo(db, task.TalentId)
  68. Iscoop := getIscoop(db, task.TalentId, request.EnterPriseId)
  69. response := &http_model.LocaLTaskInfo{
  70. TaskId: task.TaskId,
  71. ProjectId: task.LocalId,
  72. TalentId: task.TalentId,
  73. FansNum: task.FansNum,
  74. DraftFee: task.DraftFee,
  75. Voteavg: task.VoteAvg,
  76. FeeFrom: task.FeeForm,
  77. TaskStage: task.TaskStage,
  78. Commentavg: task.CommitAvg,
  79. CurrentDefaultType: task.CurDefaultType,
  80. From: determineFrom(task.SupplierId, task.SupplierStatus),
  81. Boperator: boperator,
  82. CreateAt: Time,
  83. NickName: nickname,
  84. HeadUrl: headurl,
  85. ISCoop: Iscoop,
  86. Sprojectid: task.SLocalLifeId,
  87. City: task.City,
  88. }
  89. taskInfoPointers = append(taskInfoPointers, response)
  90. }
  91. return &http_model.GetLocalTaskListData{
  92. TaskList: taskInfoPointers,
  93. Total: conv.MustString(total, ""),
  94. }, nil
  95. }
  96. func PassLocalTaskCoop(ctx context.Context, req http_model.PasslocalTaskCoopRequest) (bool, error) {
  97. db := GetReadDB(ctx)
  98. var count int64
  99. fmt.Println("task_ids: ", req.TaskIds)
  100. err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
  101. fmt.Println("count: ", count)
  102. if err != nil {
  103. return false, err
  104. }
  105. if int64(len(req.TaskIds)) == 0 || count != int64(len(req.TaskIds)) {
  106. return false, errors.New("任务id有误")
  107. }
  108. // 2. 查询任务对应达人id(用于生成达人消息)
  109. var talentIds []string
  110. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", req.TaskIds).Select("talent_id").Find(&talentIds).Error
  111. if err != nil {
  112. return false, err
  113. }
  114. // 3. 查询任务对应project名称(用于生成达人消息)
  115. var project gorm_model.YounggeeLocalLifeInfo
  116. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&project).Error
  117. if err != nil {
  118. return false, err
  119. }
  120. var taskstages int
  121. if project.TaskForm == 1 {
  122. taskstages = 4
  123. } else {
  124. taskstages = 9
  125. }
  126. nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
  127. if req.IsSpecial == 1 {
  128. toolList := strings.Split(project.Tools, ",")
  129. for _, tool := range toolList {
  130. // 将 tool 转换为整数
  131. if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
  132. nextstage[t-1] = 1
  133. }
  134. }
  135. fmt.Println(nextstage)
  136. for i := 1; i < len(nextstage); i++ { // 从位置1开始
  137. if nextstage[i] == 1 {
  138. switch i {
  139. case 1:
  140. taskstages = 4
  141. case 2:
  142. taskstages = 9
  143. case 3:
  144. taskstages = 11
  145. case 4:
  146. taskstages = 13
  147. case 5:
  148. taskstages = 15
  149. }
  150. break
  151. }
  152. }
  153. }
  154. //4.根据达人来源改变状态、阶段、数目
  155. var tasks []gorm_model.YoungeeLocalTaskInfo
  156. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Find(&tasks).Error
  157. if err != nil {
  158. return false, err
  159. }
  160. err = db.Transaction(func(tx *gorm.DB) error {
  161. // 2. 修改任务状态和任务阶段
  162. for _, taskInfo := range tasks {
  163. if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 { //服务商招募数量+1
  164. updateData := gorm_model.YoungeeLocalTaskInfo{
  165. TaskStage: taskstages,
  166. TaskStatus: 2,
  167. UpdateAt: time.Now(),
  168. BOperator: req.OperatorId,
  169. BOperatorType: req.OperateType,
  170. SelectDate: time.Now(),
  171. }
  172. err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
  173. if err != nil {
  174. return err
  175. }
  176. //project招募数+1,预估成本+服务商价格
  177. var projectinfo gorm_model.YounggeeLocalLifeInfo
  178. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&projectinfo).Error
  179. if err != nil {
  180. return err
  181. }
  182. projectinfo.RecruitNum += 1
  183. projectinfo.EstimatedCost += taskInfo.SupportFee
  184. err = tx.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", req.ProjectId).Updates(projectinfo).Error
  185. if err != nil {
  186. return err
  187. }
  188. //服务商s_project已招募人数+1改成s_locallife
  189. var sprojectinfo gorm_model.YounggeeSProjectInfo
  190. err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", req.SProjectId).Find(&sprojectinfo).Error
  191. if err != nil {
  192. return err
  193. }
  194. sprojectinfo.RecruitNum += 1
  195. fmt.Println("......", projectinfo.RecruitNum)
  196. err = tx.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", req.SProjectId).Updates(sprojectinfo).Error
  197. if err != nil {
  198. return err
  199. } //
  200. }
  201. //if project.TaskForm != 1 { //素材分发
  202. // var draft_default gorm_model.InfoAutoTask
  203. // err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&draft_default).Error
  204. // if err != nil {
  205. // return err
  206. // }
  207. // duration := time.Duration(draft_default.DraftDefault) * time.Hour
  208. // upbreakdate := gorm_model.YoungeeLocalTaskInfo{
  209. // CurBreakAt: time.Now().Add(duration),
  210. // }
  211. // err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? ", taskInfo.TaskId).Updates(upbreakdate).Error
  212. // if err != nil {
  213. // return err
  214. // }
  215. //}
  216. if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 { //来源于公海
  217. updateData := gorm_model.YoungeeLocalTaskInfo{
  218. TaskStage: taskstages,
  219. TaskStatus: 2,
  220. UpdateAt: time.Now(),
  221. BOperator: req.OperatorId,
  222. BOperatorType: req.OperateType,
  223. SelectDate: time.Now(),
  224. }
  225. err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
  226. if err != nil {
  227. return err
  228. }
  229. //project招募数+1
  230. var projectinfo gorm_model.YounggeeLocalLifeInfo
  231. err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&projectinfo).Error
  232. if err != nil {
  233. return err
  234. }
  235. projectinfo.RecruitNum += 1
  236. err = tx.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", req.ProjectId).Updates(projectinfo).Error
  237. if err != nil {
  238. return err
  239. }
  240. }
  241. }
  242. // 4. 生成达人消息
  243. for _, talendId := range talentIds {
  244. err = CreateMessage(ctx, 1, 1, talendId, project.LocalName)
  245. if err != nil {
  246. return err
  247. }
  248. }
  249. // 返回 nil 提交事务
  250. return nil
  251. })
  252. if err != nil {
  253. return false, err
  254. }
  255. return true, nil
  256. }
  257. func RefuseLocalTaskCoop(ctx context.Context, req http_model.RefuselocalTaskCoopRequest) (bool, error) {
  258. db := GetWriteDB(ctx)
  259. // 1. 校验
  260. var count int64
  261. err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
  262. if err != nil {
  263. return false, err
  264. }
  265. if count != int64(len(req.TaskIds)) {
  266. return false, errors.New("任务id有误")
  267. }
  268. // 2. 查询任务对应达人id(用于生成达人消息)
  269. var talentIds []string
  270. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", req.TaskIds).Select("talent_id").Find(&talentIds).Error
  271. if err != nil {
  272. return false, err
  273. }
  274. var tasks []gorm_model.YoungeeLocalTaskInfo
  275. err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Find(&tasks).Error
  276. err = db.Transaction(func(tx *gorm.DB) error {
  277. // 2. 修改任务状态和任务阶段
  278. for _, taskInfo := range tasks {
  279. updateData := gorm_model.YoungeeLocalTaskInfo{
  280. TaskStage: 3,
  281. TaskStatus: 3,
  282. UpdateAt: time.Now(),
  283. BOperator: req.OperatorId,
  284. BOperatorType: req.OperateType,
  285. CompleteDate: time.Now(),
  286. }
  287. err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
  288. }
  289. if err != nil {
  290. return err
  291. }
  292. // 返回 nil 提交事务
  293. return nil
  294. })
  295. if err != nil {
  296. return false, err
  297. }
  298. return true, nil
  299. }
  300. func GetLocallifeData(ctx context.Context, req http_model.LocallifeDataRequest) (http_model.LocallifeDataResponse, error) {
  301. db := GetReadDB(ctx)
  302. var projectInfo gorm_model.YounggeeLocalLifeInfo
  303. // 查询项目基本信息
  304. if err := db.Where("local_id = ?", req.LocallifeId).First(&projectInfo).Error; err != nil {
  305. logrus.WithContext(ctx).Errorf("[Locallife db] GetLocallifeData error, err: %+v", err)
  306. return http_model.LocallifeDataResponse{}, err
  307. }
  308. fmt.Println("projectInfo---", projectInfo.LocalId)
  309. var projectTasks []gorm_model.YoungeeLocalTaskInfo
  310. if err := db.Where("local_id = ? AND task_status = ?", req.LocallifeId, 2).Find(&projectTasks).Error; err != nil {
  311. return http_model.LocallifeDataResponse{}, err
  312. }
  313. var totalTasks int64
  314. if err := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", req.LocallifeId, 2).Count(&totalTasks).Error; err != nil {
  315. return http_model.LocallifeDataResponse{}, err
  316. }
  317. // 初始化统计数据
  318. dateStats := make(map[string]int)
  319. fansCounts := map[int64]int{0: 0, 1: 0, 2: 0, 3: 0}
  320. feeCounts := map[int]int{1: 0, 2: 0, 3: 0}
  321. startDate := *projectInfo.CreatedAt
  322. endDate := time.Now()
  323. // 填充日期统计
  324. for d := startDate; d.Before(endDate) || d.Equal(endDate); d = d.Add(24 * time.Hour) {
  325. dateStats[d.Format("2006-01-02")] = 0
  326. }
  327. var totalCost float64
  328. var totalFans int
  329. var serverTaskCount float64
  330. var maleCount int64
  331. // 处理每个任务
  332. for _, task := range projectTasks {
  333. totalCost += task.DraftFee
  334. var talentInfo gorm_model.YoungeeTalentInfo
  335. // 查询达人信息
  336. if err := db.Where("id = ?", task.TalentId).First(&talentInfo).Error; err != nil {
  337. logrus.WithContext(ctx).Errorf("[Locallife db] GetLocallifeData error, err: %+v", err)
  338. return http_model.LocallifeDataResponse{}, err
  339. }
  340. // 统计性别
  341. if talentInfo.Sex == 1 {
  342. maleCount++
  343. }
  344. totalFans += task.FansNum
  345. // 统计来自服务商的任务
  346. if task.SupplierId != 0 && task.SupplierStatus == 2 {
  347. serverTaskCount++
  348. }
  349. // 稿费形式统计
  350. feeCounts[task.FeeForm]++
  351. // 统计粉丝数
  352. switch {
  353. case task.FansNum < 10000:
  354. fansCounts[0]++
  355. case task.FansNum < 100000:
  356. fansCounts[1]++
  357. case task.FansNum < 1000000:
  358. fansCounts[2]++
  359. default:
  360. fansCounts[3]++
  361. }
  362. SelectDate := task.SelectDate.Format("2006-01-02")
  363. if _, exists := dateStats[SelectDate]; exists {
  364. dateStats[SelectDate]++
  365. }
  366. }
  367. // 计算平均值
  368. var avgFansNum int
  369. if totalTasks > 0 {
  370. avgFansNum = totalFans / int(totalTasks)
  371. } else {
  372. avgFansNum = 0
  373. }
  374. var fromType float64
  375. if totalTasks > 0 {
  376. fromType = serverTaskCount / float64(totalTasks)
  377. } else {
  378. fromType = 0
  379. }
  380. var manRatio float64
  381. if totalTasks > 0 {
  382. manRatio = float64(maleCount) / float64(totalTasks)
  383. } else {
  384. manRatio = 0
  385. }
  386. // 构建响应
  387. res := http_model.LocallifeDataResponse{
  388. Recruittime: *projectInfo.PassAt,
  389. RecruitDDl: *projectInfo.RecruitDdl,
  390. AgreeNum: projectInfo.RecruitNum,
  391. ApplyNum: projectInfo.ApplyNum,
  392. DraftFee: totalCost,
  393. AvgFansNum: avgFansNum,
  394. FromType: fromType,
  395. ManRatio: manRatio,
  396. DateStats: dateStats,
  397. FeeMap: feeCounts,
  398. FansMap: fansCounts,
  399. }
  400. return res, nil
  401. }
  402. func GetLocalPreSketchList(ctx context.Context, request http_model.LocalPreSketchListRequest) (*http_model.GetLocalSketchTaskListData, error) {
  403. db := GetReadDB(ctx)
  404. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  405. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
  406. // 计算总数
  407. var total int64
  408. if err := query.Count(&total).Error; err != nil {
  409. return nil, err
  410. }
  411. // 添加分页逻辑
  412. pageSize := request.PageSize
  413. if pageSize == 0 {
  414. pageSize = 10
  415. }
  416. pageNum := request.PageNum
  417. if pageNum == 0 {
  418. pageNum = 1
  419. }
  420. offset := (pageNum - 1) * pageSize
  421. // 执行分页查询
  422. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  423. return nil, err
  424. }
  425. taskInfoPointers := make([]*http_model.LocalTasksketchInfo, 0, len(projecrtaskinfo))
  426. for _, task := range projecrtaskinfo {
  427. nickname, headurl := getTalentinfo(db, task.TalentId)
  428. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  429. taskinfo := &http_model.LocaLTaskInfo{
  430. TaskId: task.TaskId,
  431. ProjectId: task.LocalId,
  432. TalentId: task.TalentId,
  433. FansNum: task.FansNum,
  434. DraftFee: task.DraftFee,
  435. Voteavg: task.VoteAvg,
  436. FeeFrom: task.FeeForm,
  437. TaskStage: task.TaskStage,
  438. Commentavg: task.CommitAvg,
  439. CurrentDefaultType: task.CurDefaultType,
  440. From: determineFrom(task.SupplierId, task.SupplierStatus),
  441. NickName: nickname,
  442. HeadUrl: headurl,
  443. ISCoop: Iscoop,
  444. City: task.City,
  445. }
  446. response := &http_model.LocalTasksketchInfo{
  447. Task: taskinfo,
  448. DDl: task.CurBreakAt,
  449. }
  450. taskInfoPointers = append(taskInfoPointers, response)
  451. }
  452. return &http_model.GetLocalSketchTaskListData{
  453. TasksketchList: taskInfoPointers,
  454. Total: conv.MustString(total, ""),
  455. }, nil
  456. }
  457. func GetLocalSketchList(ctx context.Context, request http_model.LocalTasksketchlistRequest) (*http_model.GetsketchlocaltaskListData, error) {
  458. db := GetReadDB(ctx)
  459. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  460. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
  461. // 计算总数
  462. var total int64
  463. if err := query.Count(&total).Error; err != nil {
  464. return nil, err
  465. }
  466. // 添加分页逻辑
  467. pageSize := request.PageSize
  468. if pageSize == 0 {
  469. pageSize = 10
  470. }
  471. pageNum := request.PageNum
  472. if pageNum == 0 {
  473. pageNum = 1
  474. }
  475. offset := (pageNum - 1) * pageSize
  476. // 执行分页查询
  477. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  478. return nil, err
  479. }
  480. taskInfoPointers := make([]*http_model.LocalTasksketchinfo, 0, len(projecrtaskinfo))
  481. for _, task := range projecrtaskinfo {
  482. nickname, headurl := getTalentinfo(db, task.TalentId)
  483. taskinfo := &http_model.LocaLTaskInfo{
  484. TaskId: task.TaskId,
  485. ProjectId: task.LocalId,
  486. TalentId: task.TalentId,
  487. FansNum: task.FansNum,
  488. DraftFee: task.DraftFee,
  489. Voteavg: task.VoteAvg,
  490. FeeFrom: task.FeeForm,
  491. TaskStage: task.TaskStage,
  492. Commentavg: task.CommitAvg,
  493. CurrentDefaultType: task.CurDefaultType,
  494. From: determineFrom(task.SupplierId, task.SupplierStatus),
  495. NickName: nickname,
  496. HeadUrl: headurl,
  497. City: task.City,
  498. }
  499. var sketchinfo gorm_model.YounggeeSketchInfo
  500. err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&sketchinfo).Error
  501. if err != nil {
  502. return nil, err
  503. }
  504. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  505. response := &http_model.LocalTasksketchinfo{
  506. Task: taskinfo,
  507. SketchId: sketchinfo.SketchID,
  508. SubmitAt: sketchinfo.SubmitAt,
  509. AgreeAt: sketchinfo.AgreeAt,
  510. Operator: boperator,
  511. }
  512. taskInfoPointers = append(taskInfoPointers, response)
  513. }
  514. return &http_model.GetsketchlocaltaskListData{
  515. LocalTasksketchList: taskInfoPointers,
  516. Total: conv.MustString(total, ""),
  517. }, nil
  518. }
  519. func GetLocalPreLinkList(ctx context.Context, request http_model.LocalPreLinkListRequest) (*http_model.GetLocalPreLinkListData, error) {
  520. db := GetReadDB(ctx)
  521. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  522. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
  523. // 计算总数
  524. var total int64
  525. if err := query.Count(&total).Error; err != nil {
  526. return nil, err
  527. }
  528. // 添加分页逻辑
  529. pageSize := request.PageSize
  530. if pageSize == 0 {
  531. pageSize = 10
  532. }
  533. pageNum := request.PageNum
  534. if pageNum == 0 {
  535. pageNum = 1
  536. }
  537. offset := (pageNum - 1) * pageSize
  538. // 执行分页查询
  539. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  540. return nil, err
  541. }
  542. taskInfoPointers := make([]*http_model.LocalTasklinkinfo, 0, len(projecrtaskinfo))
  543. for _, task := range projecrtaskinfo {
  544. nickname, headurl := getTalentinfo(db, task.TalentId)
  545. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  546. taskinfo := &http_model.LocaLTaskInfo{
  547. TaskId: task.TaskId,
  548. ProjectId: task.LocalId,
  549. TalentId: task.TalentId,
  550. FansNum: task.FansNum,
  551. DraftFee: task.DraftFee,
  552. Voteavg: task.VoteAvg,
  553. FeeFrom: task.FeeForm,
  554. TaskStage: task.TaskStage,
  555. Commentavg: task.CommitAvg,
  556. CurrentDefaultType: task.CurDefaultType,
  557. From: determineFrom(task.SupplierId, task.SupplierStatus),
  558. NickName: nickname,
  559. HeadUrl: headurl,
  560. ISCoop: Iscoop,
  561. City: task.City,
  562. }
  563. response := &http_model.LocalTasklinkinfo{
  564. Task: taskinfo,
  565. DDl: task.CurBreakAt,
  566. }
  567. taskInfoPointers = append(taskInfoPointers, response)
  568. }
  569. return &http_model.GetLocalPreLinkListData{
  570. TasklinkList: taskInfoPointers,
  571. Total: conv.MustString(total, ""),
  572. }, nil
  573. }
  574. func GetLocalLinkList(ctx context.Context, request http_model.LocalTaskLinklistRequest) (*http_model.GetLocalTaskLinkListData, error) {
  575. db := GetReadDB(ctx)
  576. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  577. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
  578. // 计算总数
  579. var total int64
  580. if err := query.Count(&total).Error; err != nil {
  581. return nil, err
  582. }
  583. // 添加分页逻辑
  584. pageSize := request.PageSize
  585. if pageSize == 0 {
  586. pageSize = 10
  587. }
  588. pageNum := request.PageNum
  589. if pageNum == 0 {
  590. pageNum = 1
  591. }
  592. offset := (pageNum - 1) * pageSize
  593. // 执行分页查询
  594. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  595. return nil, err
  596. }
  597. taskInfoPointers := make([]*http_model.LocalTaskLinkinfo, 0, len(projecrtaskinfo))
  598. for _, task := range projecrtaskinfo {
  599. nickname, headurl := getTalentinfo(db, task.TalentId)
  600. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  601. taskinfo := &http_model.LocaLTaskInfo{
  602. TaskId: task.TaskId,
  603. ProjectId: task.LocalId,
  604. TalentId: task.TalentId,
  605. FansNum: task.FansNum,
  606. DraftFee: task.DraftFee,
  607. Voteavg: task.VoteAvg,
  608. FeeFrom: task.FeeForm,
  609. TaskStage: task.TaskStage,
  610. Commentavg: task.CommitAvg,
  611. CurrentDefaultType: task.CurDefaultType,
  612. From: determineFrom(task.SupplierId, task.SupplierStatus),
  613. NickName: nickname,
  614. HeadUrl: headurl,
  615. ISCoop: Iscoop,
  616. City: task.City,
  617. }
  618. var linkinfo gorm_model.YounggeeLinkInfo
  619. err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&linkinfo).Error
  620. if err != nil {
  621. return nil, err
  622. }
  623. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  624. response := &http_model.LocalTaskLinkinfo{
  625. Task: taskinfo,
  626. LinkId: linkinfo.LinkID,
  627. SubmitAt: linkinfo.SubmitAt,
  628. AgreeAt: linkinfo.AgreeAt,
  629. LinkUrl: linkinfo.LinkUrl,
  630. PhotoUrl: linkinfo.PhotoUrl,
  631. Operator: boperator,
  632. }
  633. taskInfoPointers = append(taskInfoPointers, response)
  634. }
  635. return &http_model.GetLocalTaskLinkListData{
  636. LocalTaskLinklist: taskInfoPointers,
  637. Total: conv.MustString(total, ""),
  638. }, nil
  639. }
  640. func GetLocalPreDataList(ctx context.Context, request http_model.LocalPreDataListRequest) (*http_model.GetLocalPreDataListData, error) {
  641. db := GetReadDB(ctx)
  642. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  643. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
  644. // 计算总数
  645. var total int64
  646. if err := query.Count(&total).Error; err != nil {
  647. return nil, err
  648. }
  649. // 添加分页逻辑
  650. pageSize := request.PageSize
  651. if pageSize == 0 {
  652. pageSize = 10
  653. }
  654. pageNum := request.PageNum
  655. if pageNum == 0 {
  656. pageNum = 1
  657. }
  658. offset := (pageNum - 1) * pageSize
  659. // 执行分页查询
  660. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  661. return nil, err
  662. }
  663. taskInfoPointers := make([]*http_model.LocalTaskdatainfo, 0, len(projecrtaskinfo))
  664. for _, task := range projecrtaskinfo {
  665. nickname, headurl := getTalentinfo(db, task.TalentId)
  666. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  667. taskinfo := &http_model.LocaLTaskInfo{
  668. TaskId: task.TaskId,
  669. ProjectId: task.LocalId,
  670. TalentId: task.TalentId,
  671. FansNum: task.FansNum,
  672. DraftFee: task.DraftFee,
  673. Voteavg: task.VoteAvg,
  674. FeeFrom: task.FeeForm,
  675. TaskStage: task.TaskStage,
  676. Commentavg: task.CommitAvg,
  677. CurrentDefaultType: task.CurDefaultType,
  678. From: determineFrom(task.SupplierId, task.SupplierStatus),
  679. NickName: nickname,
  680. HeadUrl: headurl,
  681. ISCoop: Iscoop,
  682. City: task.City,
  683. }
  684. response := &http_model.LocalTaskdatainfo{
  685. Task: taskinfo,
  686. DDl: task.CurBreakAt,
  687. }
  688. taskInfoPointers = append(taskInfoPointers, response)
  689. }
  690. return &http_model.GetLocalPreDataListData{
  691. TaskdataList: taskInfoPointers,
  692. Total: conv.MustString(total, ""),
  693. }, nil
  694. }
  695. func GetLocalDataList(ctx context.Context, request http_model.LocalTaskDatalistRequest) (*http_model.GetLocalTaskDatalistData, error) {
  696. db := GetReadDB(ctx)
  697. var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
  698. query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
  699. // 计算总数
  700. var total int64
  701. if err := query.Count(&total).Error; err != nil {
  702. return nil, err
  703. }
  704. // 添加分页逻辑
  705. pageSize := request.PageSize
  706. if pageSize == 0 {
  707. pageSize = 10
  708. }
  709. pageNum := request.PageNum
  710. if pageNum == 0 {
  711. pageNum = 1
  712. }
  713. offset := (pageNum - 1) * pageSize
  714. // 执行分页查询
  715. if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
  716. return nil, err
  717. }
  718. taskInfoPointers := make([]*http_model.LocalTaskDatainfo, 0, len(projecrtaskinfo))
  719. for _, task := range projecrtaskinfo {
  720. nickname, headurl := getTalentinfo(db, task.TalentId)
  721. Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
  722. taskinfo := &http_model.LocaLTaskInfo{
  723. TaskId: task.TaskId,
  724. ProjectId: task.LocalId,
  725. TalentId: task.TalentId,
  726. FansNum: task.FansNum,
  727. DraftFee: task.DraftFee,
  728. Voteavg: task.VoteAvg,
  729. FeeFrom: task.FeeForm,
  730. TaskStage: task.TaskStage,
  731. Commentavg: task.CommitAvg,
  732. CurrentDefaultType: task.CurDefaultType,
  733. From: determineFrom(task.SupplierId, task.SupplierStatus),
  734. NickName: nickname,
  735. HeadUrl: headurl,
  736. ISCoop: Iscoop,
  737. City: task.City,
  738. }
  739. var datainfo gorm_model.YounggeeDataInfo
  740. err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&datainfo).Error
  741. if err != nil {
  742. return nil, err
  743. }
  744. boperator := getBOperator(db, task.BOperator, task.BOperatorType)
  745. response := &http_model.LocalTaskDatainfo{
  746. Task: taskinfo,
  747. DataId: datainfo.DataID,
  748. SubmitAt: datainfo.SubmitAt,
  749. AgreeAt: datainfo.AgreeAt,
  750. PhotoUrl: datainfo.PhotoUrl,
  751. PlayNumber: datainfo.PlayNumber,
  752. LikeNumber: datainfo.LikeNumber,
  753. CollectNumber: datainfo.CollectNumber,
  754. CommentNumber: datainfo.CommentNumber,
  755. SettleAmount: task.SettleAmount,
  756. Breakrate: task.SketchBreakRate + task.LinkBreakRate + task.DataBreakRate,
  757. Operator: boperator,
  758. }
  759. taskInfoPointers = append(taskInfoPointers, response)
  760. }
  761. return &http_model.GetLocalTaskDatalistData{
  762. LocalTaskDatalist: taskInfoPointers,
  763. Total: conv.MustString(total, ""),
  764. }, nil
  765. }