project_task.go 46 KB

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