auto_task.go 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/issue9/conv"
  6. "time"
  7. "youngee_b_api/model/gorm_model"
  8. log "github.com/sirupsen/logrus"
  9. )
  10. func AutoUpdateStatus() error {
  11. db := GetReadDB(context.Background())
  12. // 查找所有到达招募截止时间的项目id
  13. var projectIds []string
  14. db = db.Debug().Model(gorm_model.ProjectInfo{}).Select("project_id").Where("project_status = 6").Find(&projectIds)
  15. //fmt.Println("projectIds",projectIds)
  16. if len(projectIds) != 0 {
  17. for _, projectId := range projectIds {
  18. db1 := GetReadDB(context.Background())
  19. db1 = db1.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 1", projectId).Update("task_status", 3)
  20. }
  21. }
  22. db1 := GetReadDB(context.Background())
  23. // 更新招募中项目状态为待支付
  24. err := db1.Debug().Model(gorm_model.ProjectInfo{}).
  25. Where("project_status = ? AND recruit_ddl < ?", 4, time.Now()).Update("project_status", 6).Error
  26. if err != nil {
  27. log.Println("DB AutoUpdateStatus error :", err)
  28. return err
  29. }
  30. return nil
  31. }
  32. func GetLastAutoTaskID() (int, error) {
  33. db := GetReadDB(context.Background())
  34. // 查找最后一个
  35. LastTask := gorm_model.InfoAutoTask{}
  36. result := db.Last(&LastTask)
  37. err := result.Error
  38. if err != nil {
  39. log.Println("DB GetLastAutoTaskID:", err)
  40. return 0, err
  41. }
  42. //fmt.Printf("auto task %+v %+v", result, LastTask)
  43. return LastTask.AutoTaskID, nil
  44. }
  45. func AutoUpdateApplyTimes() error {
  46. db := GetReadDB(context.Background())
  47. // 查询task表信息
  48. db = db.Debug().Model(gorm_model.YoungeeTalentInfo{})
  49. err := db.Where("1 = 1").Update("apply_num", 5).Error
  50. if err != nil {
  51. log.Println("DB AutoUpdateStatus error :", err)
  52. return err
  53. }
  54. return nil
  55. }
  56. func AutoCompleteSelection() error {
  57. db := GetReadDB(context.Background())
  58. // 查询selection表,查询所有到截至时间的选品项目
  59. var completedSelectionList []gorm_model.YounggeeSelectionInfo
  60. err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where("task_ddl < ?", time.Now()).Scan(&completedSelectionList).Error
  61. if err != nil {
  62. log.Println("DB AutoCompleteSelection error :", err)
  63. return err
  64. }
  65. // 遍历结束选品列表
  66. for _, v := range completedSelectionList {
  67. if v.SelectionStatus == 6 { // 若处于执行中阶段
  68. // 查询该选品下所有待结算任务
  69. var settleSecTaskList []gorm_model.YounggeeSecTaskInfo
  70. err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_stage = 9", v.SelectionID).Scan(&settleSecTaskList).Error
  71. if err != nil {
  72. log.Println("DB AutoCompleteSelection error :", err)
  73. return err
  74. }
  75. // 结算选品
  76. for _, w := range settleSecTaskList {
  77. // 更新任务信息
  78. updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
  79. TaskID: w.TaskID,
  80. TaskStage: 10,
  81. AssignmentStatus: 5,
  82. IsPayReward: 0,
  83. IsPayPayment: 0,
  84. CompleteDate: time.Now(),
  85. }
  86. _, err = UpdateSecTask(context.Background(), updateSecTaskData)
  87. if err != nil {
  88. log.Println("DB AutoCompleteSelection error :", err)
  89. return err
  90. }
  91. // 添加任务日志和达人消息
  92. err = CreateTaskLog(context.Background(), w.TaskID, "结算时间")
  93. if err != nil {
  94. log.Println("DB AutoCompleteSelection error :", err)
  95. }
  96. err = CreateMessageBySecTaskId(context.Background(), 5, 1, w.TaskID)
  97. if err != nil {
  98. log.Println("DB AutoCompleteSelection error :", err)
  99. return err
  100. }
  101. }
  102. // 计算结算金额,并返还剩余冻结资金
  103. var leftMoney float64 = conv.MustFloat64(v.EstimatedCost, 0) - conv.MustFloat64(v.SettlementAmount, 0)
  104. _, err = UpdateEnterpriseBalance(context.Background(), v.EnterpriseID, 0, leftMoney, -leftMoney)
  105. if err != nil {
  106. log.Println("DB AutoCompleteSelection error :", err)
  107. return err
  108. }
  109. // 更新选品阶段为已结案
  110. updateSelectionInfo := gorm_model.YounggeeSelectionInfo{
  111. SelectionID: v.SelectionID,
  112. SelectionStatus: 8,
  113. FinishAt: time.Now(),
  114. }
  115. err = UpdateSelection(context.Background(), updateSelectionInfo)
  116. if err != nil {
  117. log.Println("DB AutoCompleteSelection error :", err)
  118. return err
  119. }
  120. } else { // 否则
  121. // 更新选品阶段为失效,失效原因为逾期未支付
  122. updateSelectionInfo := gorm_model.YounggeeSelectionInfo{
  123. SelectionID: v.SelectionID,
  124. SelectionStatus: 7,
  125. FailReason: 1,
  126. FinishAt: time.Now(),
  127. }
  128. err = UpdateSelection(context.Background(), updateSelectionInfo)
  129. if err != nil {
  130. log.Println("DB AutoCompleteSelection error :", err)
  131. return err
  132. }
  133. }
  134. }
  135. return nil
  136. }
  137. // GetAutoDraftDefaultTask 品牌种草-商品寄拍 初稿超时违约
  138. func GetAutoDraftDefaultTask() error {
  139. fmt.Println("GetAutoDraftDefaultInPicTask Running")
  140. db := GetReadDB(context.Background())
  141. // 1. 根据种草任务形式取出对应的Project
  142. var projectInfos []*gorm_model.ProjectInfo
  143. projectInfoErr := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_form = ? ", 1, 1).Find(&projectInfos).Error
  144. if projectInfoErr != nil {
  145. return projectInfoErr
  146. }
  147. // 2. 构建查询map
  148. var projectIds []string
  149. projectIdToAutoTaskIdMap := map[string]int{} // 项目id 对 定时任务id 的map
  150. projectIdToAutoDefaultIdMap := map[string]int{} // 项目id 对 违约扣款设置id 的map
  151. taskIdToFeeFormMap := make(map[string]int) // taskId 对 稿费形式的 map
  152. TaskIdToProjectId := make(map[string]string) // taskId 对 项目id的 map
  153. var taskNeedModIds []string // 首次提交初稿的任务记录id
  154. var submitTaskNeedModIds []string // 修改后提交初稿的任务记录id
  155. for _, projectInfo := range projectInfos {
  156. projectIds = append(projectIds, projectInfo.ProjectID)
  157. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  158. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  159. }
  160. for _, projectId := range projectIds {
  161. db1 := GetReadDB(context.Background())
  162. var taskInfos []gorm_model.YoungeeTaskInfo
  163. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? AND logistics_status = 3", projectId, 2, 9, 0).Find(&taskInfos)
  164. for _, taskInfo := range taskInfos {
  165. TaskIdToProjectId[taskInfo.TaskID] = projectId
  166. taskNeedMod := gorm_model.YoungeeTaskInfo{}
  167. db2 := GetReadDB(context.Background())
  168. // 保存所有满足物流状态为 3 且 初稿上传状态为 1或 3 的任务记录的id
  169. db2.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskInfo.TaskID).First(&taskNeedMod)
  170. taskIdToFeeFormMap[taskInfo.TaskID] = taskInfo.FeeForm
  171. if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 1 {
  172. taskNeedModIds = append(taskNeedModIds, taskInfo.TaskID)
  173. }
  174. if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 3 {
  175. submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskID)
  176. }
  177. }
  178. }
  179. // 3. 对初次初稿未上传的操作
  180. for _, taskNeedModId := range taskNeedModIds {
  181. if taskNeedModId != "3601319242" {
  182. break
  183. }
  184. fmt.Println("Task right")
  185. // 获取taskId对应的autoTaskId
  186. autoTaskId := projectIdToAutoTaskIdMap[TaskIdToProjectId[taskNeedModId]]
  187. // 根据autoTaskId去查找对应的初稿违约小时数
  188. dbStart := GetReadDB(context.Background())
  189. var DraftDefaultInPic int32
  190. dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default").Where("auto_task_id = ?", autoTaskId).First(&DraftDefaultInPic)
  191. // 根据taskId查询taskInfo
  192. db3 := GetReadDB(context.Background())
  193. taskLogisticNeedMod := gorm_model.YoungeeTaskInfo{}
  194. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod)
  195. // 获取task对应的autoDefaultId 并取出违约扣款比例
  196. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  197. db6 := GetReadDB(context.Background())
  198. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
  199. var sketchDefaultRate int
  200. var sketchErrRate int
  201. // 稿费形式为产品置换
  202. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  203. sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
  204. sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
  205. // db6 := GetReadDB(context.Background())
  206. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
  207. } else {
  208. // 稿费形式为其他
  209. sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
  210. sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
  211. // db6 := GetReadDB(context.Background())
  212. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  213. }
  214. // 若无违约自动处理时间 则添加初稿违约自动处理时间
  215. if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.SketchMissingTime.IsZero() {
  216. dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInPic, "") + "h")
  217. db4 := GetReadDB(context.Background())
  218. t := taskLogisticNeedMod.SignedTime.Add(dd)
  219. db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{
  220. SketchMissingTime: t,
  221. })
  222. taskLogisticNeedMod.SketchMissingTime = t
  223. fmt.Println("已添加 品牌种草-商品寄拍-初次初稿未上传 初稿违约自动处理时间")
  224. fmt.Println(sketchDefaultRate, sketchErrRate)
  225. }
  226. // 判断是否超时违约
  227. if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.SketchMissingTime.Sub(time.Now()) <= 0 {
  228. fmt.Println("taskId: ", taskLogisticNeedMod.TaskID, "超时违约触发")
  229. taskInfo := gorm_model.YoungeeTaskInfo{}
  230. dbt := GetReadDB(context.Background())
  231. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Find(&taskInfo).Error
  232. if err2 != nil {
  233. return err2
  234. }
  235. // 计算违约扣款后的达人所得
  236. settleAmount := taskInfo.DraftFee * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
  237. if settleAmount <= 0 {
  238. settleAmount = 0.0
  239. }
  240. // 计算违约扣款后的服务商所得
  241. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
  242. if realServiceCharge <= 0 {
  243. realServiceCharge = 0.0
  244. }
  245. // 计算企业需要实际支付金额
  246. realPayment := settleAmount + realServiceCharge
  247. if realPayment <= 0 {
  248. realPayment = 0.0
  249. }
  250. db8 := GetReadDB(context.Background())
  251. fmt.Println("待更新的taskId: ", taskLogisticNeedMod.TaskID)
  252. db8.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Updates(
  253. map[string]interface{}{
  254. "sketch_missing_status": 1,
  255. "cur_default_type": 3,
  256. "sketch_break_rate": sketchDefaultRate,
  257. "settle_amount": settleAmount,
  258. "err_break_rate": sketchErrRate,
  259. "real_service_charge": realServiceCharge,
  260. "real_payment": realPayment,
  261. })
  262. createTaskLogErr := CreateTaskLog(context.Background(), taskLogisticNeedMod.TaskID, "初稿逾期")
  263. if createTaskLogErr != nil {
  264. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", createTaskLogErr)
  265. }
  266. createMessageByTaskIdErr := CreateMessageByTaskId(context.Background(), 22, 4, taskLogisticNeedMod.TaskID)
  267. if createMessageByTaskIdErr != nil {
  268. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", createMessageByTaskIdErr)
  269. }
  270. fmt.Println("已创建 品牌种草-商品寄拍-初次初稿未上传 初稿违约记录")
  271. }
  272. }
  273. // 4. 判断应该修改后上传的任务
  274. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  275. // 获取 autoTaskId 及其对应的限制时间
  276. db2 := GetReadDB(context.Background())
  277. var DraftDefaultInMv int32
  278. db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[TaskIdToProjectId[submitTaskNeedModId]]).First(&DraftDefaultInMv)
  279. dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
  280. // 查询违约扣款比例
  281. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  282. db6 := GetReadDB(context.Background())
  283. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  284. var sketchDefaultRate int
  285. var sketchErrRate int
  286. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  287. sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
  288. sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
  289. // db6 := GetReadDB(context.Background())
  290. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  291. } else {
  292. sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
  293. sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
  294. // db6 := GetReadDB(context.Background())
  295. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  296. }
  297. // 添加初稿违约自动处理时间
  298. db1 := GetReadDB(context.Background())
  299. var taskSketchInfo gorm_model.YounggeeSketchInfo
  300. db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 1", submitTaskNeedModId).Order("reject_at desc").First(&taskSketchInfo)
  301. if taskSketchInfo.AutoSketchBreakAt.IsZero() {
  302. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoSketchBreakAt: taskSketchInfo.RejectAt.Add(dd)}).Error
  303. if err4 != nil {
  304. return err4
  305. }
  306. taskSketchInfo.AutoSketchBreakAt = taskSketchInfo.RejectAt.Add(dd)
  307. fmt.Println("已添加 品牌种草-商品寄拍-修改后上传初稿未上传自动处理时间")
  308. }
  309. // 判断是否违约
  310. if taskSketchInfo.TaskID != "" && taskSketchInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
  311. db4 := GetReadDB(context.Background())
  312. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  313. TaskID: submitTaskNeedModId, ProjectID: TaskIdToProjectId[submitTaskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
  314. if err1 != nil {
  315. return err1
  316. }
  317. taskInfo := gorm_model.YoungeeTaskInfo{}
  318. dbt := GetReadDB(context.Background())
  319. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  320. if err2 != nil {
  321. return err2
  322. }
  323. // 计算违约扣款后的达人所得
  324. settleAmount := taskInfo.DraftFee * (1.0 - float64(sketchDefaultRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  325. if settleAmount <= 0 {
  326. settleAmount = 0.
  327. }
  328. // 计算违约扣款后的服务商所得
  329. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
  330. if realServiceCharge <= 0 {
  331. realServiceCharge = 0.0
  332. }
  333. // 计算企业需要实际支付金额
  334. realPayment := settleAmount + realServiceCharge
  335. if realPayment <= 0 {
  336. realPayment = 0.0
  337. }
  338. db3 := GetReadDB(context.Background())
  339. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  340. map[string]interface{}{
  341. "sketch_missing_status": 1,
  342. "cur_default_type": 3,
  343. "sketch_break_rate": sketchDefaultRate,
  344. "settle_amount": settleAmount,
  345. "err_break_rate": sketchErrRate,
  346. "real_service_charge": realServiceCharge,
  347. "real_payment": realPayment,
  348. }).Error
  349. if err2 != nil {
  350. return err2
  351. }
  352. createTaskLogErr := CreateTaskLog(context.Background(), submitTaskNeedModId, "初稿逾期")
  353. if createTaskLogErr != nil {
  354. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", createTaskLogErr)
  355. }
  356. createMessageByTaskIdErr := CreateMessageByTaskId(context.Background(), 22, 4, submitTaskNeedModId)
  357. if createMessageByTaskIdErr != nil {
  358. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", createMessageByTaskIdErr)
  359. }
  360. fmt.Println("创建已提交初稿的初稿违约记录")
  361. }
  362. }
  363. return nil
  364. }
  365. // GetAutoLinkDefaultTask 品牌种草 链接超时违约
  366. func GetAutoLinkDefaultTask() error {
  367. // 1. 筛选出可能链接超时违约的子任务,首次/修改
  368. db := GetReadDB(context.Background())
  369. var projectInfos []*gorm_model.ProjectInfo
  370. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
  371. if err != nil {
  372. return err
  373. }
  374. var projectIds []string
  375. // 任务id 对 项目id 的map
  376. taskIdToProjectIdMap := map[string]string{}
  377. // 项目id 对 定时任务id 的map
  378. projectIdToAutoTaskIdMap := map[string]int{}
  379. // 项目id 对 违约定时任务id 的map
  380. projectIdToAutoDefaultIdMap := map[string]int{}
  381. var taskIds []string
  382. // taskId 对 稿费形式的 map
  383. taskIdToFeeFormMap := make(map[string]int)
  384. for _, projectInfo := range projectInfos {
  385. projectIds = append(projectIds, projectInfo.ProjectID)
  386. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  387. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  388. var taskInfos []*gorm_model.YoungeeTaskInfo
  389. db1 := GetReadDB(context.Background())
  390. db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? ", projectInfo.ProjectID, 2, 11, 0).Find(&taskInfos)
  391. for _, taskInfo := range taskInfos {
  392. taskIdToProjectIdMap[taskInfo.TaskID] = projectInfo.ProjectID
  393. taskIds = append(taskIds, taskInfo.TaskID)
  394. taskIdToFeeFormMap[taskInfo.TaskID] = taskInfo.FeeForm
  395. }
  396. }
  397. // 首次提交链接的任务记录id
  398. var taskNeedModIds []string
  399. // 已提交链接的任务记录id
  400. var submitTaskNeedModIds []string
  401. for _, taskId := range taskIds {
  402. var taskInfo gorm_model.YoungeeTaskInfo
  403. db3 := GetReadDB(context.Background())
  404. // 保存所有链接上传状态为 1 且任务状态为12 的任务记录的id
  405. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
  406. if taskInfo.LinkStatus == 1 && taskInfo.TaskStage == 11 {
  407. taskNeedModIds = append(taskNeedModIds, taskId)
  408. }
  409. // 保存所有链接上传状态为 3 且任务状态为12 的任务记录的id
  410. if taskInfo.LinkStatus == 3 && taskInfo.TaskStage == 11 {
  411. submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
  412. }
  413. }
  414. // 2. 对于需要初次上传链接但是未上传的子任务
  415. for _, taskNeedModId := range taskNeedModIds {
  416. db2 := GetReadDB(context.Background())
  417. var linkBreach int32
  418. db2.Model(&gorm_model.InfoAutoTask{}).Select("link_breach").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&linkBreach)
  419. dd, _ := time.ParseDuration(conv.MustString(linkBreach, "") + "h")
  420. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  421. db6 := GetReadDB(context.Background())
  422. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
  423. var linkDefaultRate int
  424. var linkErrRate int
  425. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  426. linkDefaultRate = autoDefaultHandle.LinkReplaceTimeOut
  427. linkErrRate = autoDefaultHandle.LinkReplaceNotUpload
  428. // db6 := GetReadDB(context.Background())
  429. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out", "link_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  430. } else {
  431. linkDefaultRate = autoDefaultHandle.LinkOtherTimeOut
  432. linkErrRate = autoDefaultHandle.LinkOtherNotUpload
  433. // db6 := GetReadDB(context.Background())
  434. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out", "link_other_not_uploadsg").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  435. }
  436. db1 := GetReadDB(context.Background())
  437. var taskSketchInfo gorm_model.YounggeeSketchInfo
  438. db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskSketchInfo)
  439. dbTask := GetReadDB(context.Background())
  440. var taskInfoCurr gorm_model.YoungeeTaskInfo
  441. dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfoCurr)
  442. if taskInfoCurr.LinkMissingTime.IsZero() {
  443. // db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoLinkBreakAt: taskSketchInfo.AgreeAt.Add(dd)})
  444. dbTask.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{LinkMissingTime: taskSketchInfo.AgreeAt.Add(dd)})
  445. fmt.Println("已添加链接违约自动处理时间")
  446. } else {
  447. if taskInfoCurr.TaskID != "" && taskInfoCurr.LinkMissingTime.Sub(time.Now()) <= 0 {
  448. //db4 := GetReadDB(context.Background())
  449. //err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  450. // TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
  451. //if err1 != nil {
  452. // return err1
  453. //}
  454. taskInfo := gorm_model.YoungeeTaskInfo{}
  455. dbt := GetReadDB(context.Background())
  456. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  457. if err2 != nil {
  458. return err2
  459. }
  460. // 达人实际所得
  461. settleAmount := taskInfo.DraftFee * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  462. if settleAmount <= 0 {
  463. settleAmount = 0.0
  464. }
  465. // 服务商实际所得
  466. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+linkDefaultRate+taskInfo.ScriptBreakRate)/100)
  467. if realServiceCharge <= 0 {
  468. realServiceCharge = 0.0
  469. }
  470. // 企业实际支付
  471. realPayment := settleAmount + realServiceCharge
  472. if realPayment <= 0 {
  473. realPayment = 0.0
  474. }
  475. db3 := GetReadDB(context.Background())
  476. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  477. map[string]interface{}{
  478. "link_missing_status": 1,
  479. "cur_default_type": 5,
  480. "link_break_rate": linkDefaultRate,
  481. "settle_amount": settleAmount,
  482. "real_service_charge": realServiceCharge,
  483. "err_break_rate": linkErrRate,
  484. "real_payment": realPayment,
  485. }).Error
  486. if err2 != nil {
  487. return err2
  488. }
  489. err = CreateTaskLog(context.Background(), taskNeedModId, "链接逾期")
  490. if err != nil {
  491. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  492. }
  493. err = CreateMessageByTaskId(context.Background(), 23, 4, taskNeedModId)
  494. if err != nil {
  495. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  496. }
  497. fmt.Println("已创建链接违约记录")
  498. }
  499. }
  500. }
  501. // 3. 对于需要修改后上传的链接
  502. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  503. db2 := GetReadDB(context.Background())
  504. var LinkBreach int32
  505. db2.Model(&gorm_model.InfoAutoTask{}).Select("link_breach").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
  506. dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
  507. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  508. db6 := GetReadDB(context.Background())
  509. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  510. var linkDefaultRate int
  511. var linkErrRate int
  512. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  513. linkDefaultRate = autoDefaultHandle.LinkReplaceTimeOut
  514. linkErrRate = autoDefaultHandle.LinkReplaceNotUpload
  515. // db6 := GetReadDB(context.Background())
  516. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out", "link_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  517. } else {
  518. linkDefaultRate = autoDefaultHandle.LinkOtherTimeOut
  519. linkErrRate = autoDefaultHandle.LinkOtherNotUpload
  520. // db6 := GetReadDB(context.Background())
  521. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out", "link_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  522. }
  523. db1 := GetReadDB(context.Background())
  524. var taskLinkInfo gorm_model.YounggeeLinkInfo
  525. db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ?", submitTaskNeedModId).Order("reject_at desc").First(&taskLinkInfo)
  526. dbTask := GetReadDB(context.Background())
  527. var taskInfoCurr gorm_model.YoungeeTaskInfo
  528. dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfoCurr)
  529. if taskLinkInfo.AutoLinkBreakAt.IsZero() {
  530. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoLinkBreakAt: taskLinkInfo.RejectAt.Add(dd)}).Error
  531. if err4 != nil {
  532. return err4
  533. }
  534. taskInfoCurrErr := dbTask.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{LinkMissingTime: taskLinkInfo.RejectAt.Add(dd)}).Error
  535. if taskInfoCurrErr != nil {
  536. return taskInfoCurrErr
  537. }
  538. fmt.Println("已添加链接违约自动处理时间")
  539. } else {
  540. if taskLinkInfo.TaskID != "" && taskLinkInfo.AutoLinkBreakAt.Sub(time.Now()) <= 0 {
  541. //db4 := GetReadDB(context.Background())
  542. //err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  543. // TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
  544. //if err1 != nil {
  545. // return err1
  546. //}
  547. taskInfo := gorm_model.YoungeeTaskInfo{}
  548. dbt := GetReadDB(context.Background())
  549. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  550. if err2 != nil {
  551. return err2
  552. }
  553. // 达人实际所得
  554. settleAmount := taskInfo.DraftFee * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  555. if settleAmount <= 0 {
  556. settleAmount = 0.0
  557. }
  558. // 服务商实际所得
  559. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+linkDefaultRate+taskInfo.ScriptBreakRate)/100)
  560. if realServiceCharge <= 0 {
  561. realServiceCharge = 0.0
  562. }
  563. // 企业实际支付
  564. realPayment := settleAmount + realServiceCharge
  565. if realPayment <= 0 {
  566. realPayment = 0.0
  567. }
  568. db3 := GetReadDB(context.Background())
  569. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  570. map[string]interface{}{
  571. "link_missing_status": 1,
  572. "cur_default_type": 5,
  573. "link_break_rate": linkDefaultRate,
  574. "settle_amount": settleAmount,
  575. "real_service_charge": realServiceCharge,
  576. "err_break_rate": linkErrRate,
  577. "real_payment": realPayment,
  578. }).Error
  579. if err2 != nil {
  580. return err2
  581. }
  582. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "链接逾期")
  583. if err != nil {
  584. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  585. }
  586. err = CreateMessageByTaskId(context.Background(), 23, 4, submitTaskNeedModId)
  587. if err != nil {
  588. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  589. }
  590. fmt.Println("创建已提交链接的链接违约记录")
  591. }
  592. }
  593. }
  594. return nil
  595. }
  596. // GetAutoCaseCloseDefaultTask 品牌种草 数据超时违约
  597. func GetAutoCaseCloseDefaultTask() error {
  598. // 1. 筛选出可能数据违约的种草子任务 待上传/待修改
  599. db := GetReadDB(context.Background())
  600. var projectInfos []*gorm_model.ProjectInfo
  601. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
  602. if err != nil {
  603. return err
  604. }
  605. var projectIds []string
  606. // 任务id 对 项目id 的map
  607. taskIdToProjectIdMap := map[string]string{}
  608. // 项目id 对 定时任务id 的map
  609. projectIdToAutoTaskIdMap := map[string]int{}
  610. // 项目id 对 违约定时任务id 的map
  611. projectIdToAutoDefaultIdMap := map[string]int{}
  612. var taskIds []string
  613. for _, projectInfo := range projectInfos {
  614. projectIds = append(projectIds, projectInfo.ProjectID)
  615. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  616. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  617. var taskInfos []string
  618. db1 := GetReadDB(context.Background())
  619. db1.Select("task_id").Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? ", projectInfo.ProjectID, 2, 13, 0).Find(&taskInfos)
  620. for _, taskInfo := range taskInfos {
  621. taskIdToProjectIdMap[taskInfo] = projectInfo.ProjectID
  622. taskIds = append(taskIds, taskInfo)
  623. }
  624. }
  625. // 首次提交链接的任务记录id
  626. var taskNeedModIds []string
  627. // 已提交链接的任务记录id
  628. var submitTaskNeedModIds []string
  629. // taskId 对 稿费形式的 map
  630. taskIdToFeeFormMap := make(map[string]int)
  631. for _, taskId := range taskIds {
  632. var taskInfo gorm_model.YoungeeTaskInfo
  633. db3 := GetReadDB(context.Background())
  634. // 保存所有数据上传状态为 1 且任务状态为14 的任务记录的id
  635. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
  636. if taskInfo.DataStatus == 1 && taskInfo.TaskStage == 13 {
  637. taskNeedModIds = append(taskNeedModIds, taskId)
  638. }
  639. // 保存所有数据上传状态为 3 且任务状态为14 的任务记录的id
  640. if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 13 {
  641. submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
  642. }
  643. taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
  644. }
  645. // 2. 对待上传数据的子任务判断
  646. for _, taskNeedModId := range taskNeedModIds {
  647. db2 := GetReadDB(context.Background())
  648. var CaseCloseDefault int32
  649. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&CaseCloseDefault)
  650. dd, _ := time.ParseDuration(conv.MustString(CaseCloseDefault, "") + "h")
  651. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  652. db6 := GetReadDB(context.Background())
  653. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
  654. var dataDefaultRate int
  655. var dataErrRate int
  656. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  657. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  658. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  659. // db6 := GetReadDB(context.Background())
  660. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  661. } else {
  662. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  663. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  664. // db6 := GetReadDB(context.Background())
  665. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  666. }
  667. //fmt.Println("dataDefaultRate:", dataDefaultRate)
  668. db1 := GetReadDB(context.Background())
  669. var taskLinkInfo gorm_model.YounggeeLinkInfo
  670. db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskLinkInfo)
  671. dbTask := GetReadDB(context.Background())
  672. var taskInfoCurr gorm_model.YoungeeTaskInfo
  673. dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfoCurr)
  674. if taskInfoCurr.DataMissingTime.IsZero() {
  675. db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoDataBreakAt: taskLinkInfo.AgreeAt.Add(dd)})
  676. dbTask.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{DataMissingTime: taskLinkInfo.AgreeAt.Add(dd)})
  677. fmt.Println("已添加数据违约自动处理时间")
  678. } else {
  679. if taskInfoCurr.TaskID != "" && taskInfoCurr.DataMissingTime.Sub(time.Now()) <= 0 {
  680. //db4 := GetReadDB(context.Background())
  681. //err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  682. // TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  683. //if err1 != nil {
  684. // return err1
  685. //}
  686. taskInfo := gorm_model.YoungeeTaskInfo{}
  687. dbt := GetReadDB(context.Background())
  688. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  689. if err2 != nil {
  690. return err2
  691. }
  692. // 达人实际所得
  693. settleAmount := taskInfo.DraftFee * (1.0 - float64(dataDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  694. if settleAmount <= 0 {
  695. settleAmount = 0.0
  696. }
  697. // 服务商实际所得
  698. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+dataDefaultRate+taskInfo.ScriptBreakRate)/100)
  699. if realServiceCharge <= 0 {
  700. realServiceCharge = 0.0
  701. }
  702. // 企业实际支付
  703. realPayment := settleAmount + realServiceCharge
  704. if realPayment <= 0 {
  705. realPayment = 0.0
  706. }
  707. fmt.Println("settleAmount: ", settleAmount)
  708. db3 := GetReadDB(context.Background())
  709. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  710. map[string]interface{}{
  711. "data_missing_status": 1,
  712. "cur_default_type": 7,
  713. "sketch_break_rate": dataDefaultRate,
  714. "settle_amount": settleAmount,
  715. "err_break_rate": dataErrRate,
  716. "real_payment": realPayment,
  717. "real_service_charge": realServiceCharge,
  718. }).Error
  719. if err2 != nil {
  720. return err2
  721. }
  722. err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
  723. if err != nil {
  724. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  725. }
  726. err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
  727. if err != nil {
  728. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  729. }
  730. fmt.Println("已创建数据违约记录")
  731. }
  732. }
  733. }
  734. // 3. 针对待修改的子任务
  735. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  736. db2 := GetReadDB(context.Background())
  737. var LinkBreach int32
  738. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
  739. dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
  740. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  741. db6 := GetReadDB(context.Background())
  742. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  743. var dataDefaultRate int
  744. var dataErrRate int
  745. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  746. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  747. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  748. // db6 := GetReadDB(context.Background())
  749. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  750. } else {
  751. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  752. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  753. // db6 := GetReadDB(context.Background())
  754. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  755. }
  756. db1 := GetReadDB(context.Background())
  757. var taskDataInfo gorm_model.YounggeeDataInfo
  758. db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 1", submitTaskNeedModId).Order("reject_at desc").First(&taskDataInfo)
  759. if taskDataInfo.AutoDataBreakAt.IsZero() {
  760. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeDataInfo{AutoDataBreakAt: taskDataInfo.RejectAt.Add(dd)}).Error
  761. if err4 != nil {
  762. return err4
  763. }
  764. fmt.Println("已添加数据违约自动处理时间")
  765. } else {
  766. if taskDataInfo.TaskID != "" && taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
  767. db4 := GetReadDB(context.Background())
  768. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  769. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  770. if err1 != nil {
  771. return err1
  772. }
  773. taskInfo := gorm_model.YoungeeTaskInfo{}
  774. dbt := GetReadDB(context.Background())
  775. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  776. if err2 != nil {
  777. return err2
  778. }
  779. // 达人实际所得
  780. settleAmount := taskInfo.DraftFee * (1.0 - float64(dataDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  781. if settleAmount <= 0 {
  782. settleAmount = 0.0
  783. }
  784. // 服务商实际所得
  785. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+dataDefaultRate+taskInfo.ScriptBreakRate)/100)
  786. if realServiceCharge <= 0 {
  787. realServiceCharge = 0.0
  788. }
  789. // 企业实际支付
  790. realPayment := settleAmount + realServiceCharge
  791. if realPayment <= 0 {
  792. realPayment = 0.0
  793. }
  794. db3 := GetReadDB(context.Background())
  795. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  796. map[string]interface{}{
  797. "data_missing_status": 1,
  798. "cur_default_type": 7,
  799. "sketch_break_rate": dataDefaultRate,
  800. "settle_amount": settleAmount,
  801. "err_break_rate": dataErrRate,
  802. "real_payment": realPayment,
  803. "real_service_charge": realServiceCharge,
  804. }).Error
  805. if err2 != nil {
  806. return err2
  807. }
  808. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
  809. if err != nil {
  810. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  811. }
  812. err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
  813. if err != nil {
  814. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  815. }
  816. fmt.Println("创建已提交数据的数据违约记录")
  817. }
  818. }
  819. }
  820. return nil
  821. }