locallife_task.go 43 KB

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