auto_task.go 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  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 taskInfoCurr.LinkMissingTime.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 taskInfoCurr.TaskID != "" && taskInfoCurr.LinkMissingTime.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. /*
  597. func GetAutoCaseCloseDefaultTask() error {
  598. db := GetReadDB(context.Background())
  599. var projectInfos []*gorm_model.ProjectInfo
  600. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
  601. if err != nil {
  602. return err
  603. }
  604. var projectIds []string
  605. // 任务id 对 项目id 的map
  606. taskIdToProjectIdMap := map[string]string{}
  607. // 项目id 对 定时任务id 的map
  608. projectIdToAutoTaskIdMap := map[string]int{}
  609. // 项目id 对 违约定时任务id 的map
  610. projectIdToAutoDefaultIdMap := map[string]int{}
  611. var taskIds []string
  612. for _, projectInfo := range projectInfos {
  613. projectIds = append(projectIds, projectInfo.ProjectID)
  614. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  615. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  616. var taskInfos []string
  617. db1 := GetReadDB(context.Background())
  618. 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)
  619. for _, taskInfo := range taskInfos {
  620. taskIdToProjectIdMap[taskInfo] = projectInfo.ProjectID
  621. taskIds = append(taskIds, taskInfo)
  622. }
  623. }
  624. // 首次提交链接的任务记录id
  625. var taskNeedModIds []string
  626. // 已提交链接的任务记录id
  627. var submitTaskNeedModIds []string
  628. // taskId 对 稿费形式的 map
  629. taskIdToFeeFormMap := make(map[string]int)
  630. for _, taskId := range taskIds {
  631. var taskInfo gorm_model.YoungeeTaskInfo
  632. db3 := GetReadDB(context.Background())
  633. // 保存所有数据上传状态为 1 且任务状态为14 的任务记录的id
  634. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
  635. if taskInfo.DataStatus == 1 && taskInfo.TaskStage == 13 {
  636. taskNeedModIds = append(taskNeedModIds, taskId)
  637. }
  638. // 保存所有数据上传状态为 3 且任务状态为14 的任务记录的id
  639. if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 13 {
  640. submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
  641. }
  642. taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
  643. }
  644. for _, taskNeedModId := range taskNeedModIds {
  645. db2 := GetReadDB(context.Background())
  646. var CaseCloseDefault int32
  647. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&CaseCloseDefault)
  648. dd, _ := time.ParseDuration(conv.MustString(CaseCloseDefault, "") + "h")
  649. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  650. db6 := GetReadDB(context.Background())
  651. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
  652. var dataDefaultRate int
  653. var dataErrRate int
  654. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  655. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  656. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  657. // db6 := GetReadDB(context.Background())
  658. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  659. } else {
  660. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  661. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  662. // db6 := GetReadDB(context.Background())
  663. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  664. }
  665. //fmt.Println("dataDefaultRate:", dataDefaultRate)
  666. db1 := GetReadDB(context.Background())
  667. var taskLinkInfo gorm_model.YounggeeLinkInfo
  668. db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskLinkInfo)
  669. if taskLinkInfo.AutoDataBreakAt.IsZero() {
  670. db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoDataBreakAt: taskLinkInfo.AgreeAt.Add(dd)})
  671. fmt.Println("已添加数据违约自动处理时间")
  672. if taskLinkInfo.TaskID != "" && taskLinkInfo.AgreeAt.Add(dd).Sub(time.Now()) <= 0 {
  673. db4 := GetReadDB(context.Background())
  674. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  675. TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  676. if err1 != nil {
  677. return err1
  678. }
  679. taskInfo := gorm_model.YoungeeTaskInfo{}
  680. dbt := GetReadDB(context.Background())
  681. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  682. if err2 != nil {
  683. return err2
  684. }
  685. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  686. if settleAmount <= 0 {
  687. settleAmount = 0.0
  688. }
  689. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  690. if realPayment <= 0 {
  691. realPayment = 0.0
  692. }
  693. db3 := GetReadDB(context.Background())
  694. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  695. map[string]interface{}{
  696. "cur_default_type": 7,
  697. "data_break_rate": dataDefaultRate,
  698. "settle_amount": settleAmount,
  699. "err_break_rate": dataErrRate,
  700. "real_payment": realPayment,
  701. }).Error
  702. if err2 != nil {
  703. return err2
  704. }
  705. err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
  706. if err != nil {
  707. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  708. }
  709. err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
  710. if err != nil {
  711. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  712. }
  713. fmt.Println("创建时已违约则创建数据违约记录")
  714. }
  715. } else {
  716. if taskLinkInfo.TaskID != "" && taskLinkInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
  717. db4 := GetReadDB(context.Background())
  718. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  719. TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  720. if err1 != nil {
  721. return err1
  722. }
  723. taskInfo := gorm_model.YoungeeTaskInfo{}
  724. dbt := GetReadDB(context.Background())
  725. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  726. if err2 != nil {
  727. return err2
  728. }
  729. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  730. if settleAmount <= 0 {
  731. settleAmount = 0.0
  732. }
  733. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  734. if realPayment <= 0 {
  735. realPayment = 0.0
  736. }
  737. fmt.Println("settleAmount: ", settleAmount)
  738. db3 := GetReadDB(context.Background())
  739. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  740. map[string]interface{}{
  741. "cur_default_type": 7,
  742. "sketch_break_rate": dataDefaultRate,
  743. "settle_amount": settleAmount,
  744. "err_break_rate": dataErrRate,
  745. "real_payment": realPayment,
  746. }).Error
  747. if err2 != nil {
  748. return err2
  749. }
  750. err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
  751. if err != nil {
  752. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  753. }
  754. err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
  755. if err != nil {
  756. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  757. }
  758. fmt.Println("已创建数据违约记录")
  759. }
  760. }
  761. }
  762. // 根据最近一次拒绝时间判断当前是否违约
  763. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  764. db2 := GetReadDB(context.Background())
  765. var LinkBreach int32
  766. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
  767. dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
  768. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  769. db6 := GetReadDB(context.Background())
  770. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  771. var dataDefaultRate int
  772. var dataErrRate int
  773. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  774. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  775. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  776. // db6 := GetReadDB(context.Background())
  777. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  778. } else {
  779. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  780. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  781. // db6 := GetReadDB(context.Background())
  782. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  783. }
  784. db1 := GetReadDB(context.Background())
  785. var taskDataInfo gorm_model.YounggeeDataInfo
  786. db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 1", submitTaskNeedModId).Order("reject_at desc").First(&taskDataInfo)
  787. if taskDataInfo.AutoDataBreakAt.IsZero() {
  788. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeDataInfo{AutoDataBreakAt: taskDataInfo.RejectAt.Add(dd)}).Error
  789. if err4 != nil {
  790. return err4
  791. }
  792. fmt.Println("已添加数据违约自动处理时间")
  793. if taskDataInfo.TaskID != "" && taskDataInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
  794. db4 := GetReadDB(context.Background())
  795. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  796. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  797. if err1 != nil {
  798. return err1
  799. }
  800. taskInfo := gorm_model.YoungeeTaskInfo{}
  801. dbt := GetReadDB(context.Background())
  802. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  803. if err2 != nil {
  804. return err2
  805. }
  806. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  807. if settleAmount <= 0 {
  808. settleAmount = 0.0
  809. }
  810. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  811. if realPayment <= 0 {
  812. realPayment = 0.0
  813. }
  814. db3 := GetReadDB(context.Background())
  815. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  816. map[string]interface{}{
  817. "cur_default_type": 7,
  818. "data_break_rate": dataDefaultRate,
  819. "settle_amount": settleAmount,
  820. "err_break_rate": dataErrRate,
  821. "real_payment": realPayment,
  822. }).Error
  823. if err2 != nil {
  824. return err2
  825. }
  826. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
  827. if err != nil {
  828. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  829. }
  830. err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
  831. if err != nil {
  832. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  833. }
  834. fmt.Println("创建时已违约则创建已提交数据的数据违约记录")
  835. }
  836. } else {
  837. if taskDataInfo.TaskID != "" && taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
  838. db4 := GetReadDB(context.Background())
  839. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  840. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  841. if err1 != nil {
  842. return err1
  843. }
  844. taskInfo := gorm_model.YoungeeTaskInfo{}
  845. dbt := GetReadDB(context.Background())
  846. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  847. if err2 != nil {
  848. return err2
  849. }
  850. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  851. if settleAmount <= 0 {
  852. settleAmount = 0.0
  853. }
  854. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  855. if realPayment <= 0 {
  856. realPayment = 0.0
  857. }
  858. db3 := GetReadDB(context.Background())
  859. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  860. map[string]interface{}{
  861. "cur_default_type": 7,
  862. "data_break_rate": dataDefaultRate,
  863. "settle_amount": settleAmount,
  864. "err_break_rate": dataErrRate,
  865. "real_payment": realPayment,
  866. }).Error
  867. if err2 != nil {
  868. return err2
  869. }
  870. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
  871. if err != nil {
  872. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  873. }
  874. err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
  875. if err != nil {
  876. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  877. }
  878. fmt.Println("创建已提交数据的数据违约记录")
  879. }
  880. }
  881. }
  882. return nil
  883. }
  884. */
  885. // GetAutoCaseCloseDefaultTask 品牌种草 数据超时违约
  886. func GetAutoCaseCloseDefaultTask() error {
  887. // 1. 筛选出可能数据违约的种草子任务 待上传/待修改
  888. db := GetReadDB(context.Background())
  889. var projectInfos []*gorm_model.ProjectInfo
  890. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
  891. if err != nil {
  892. return err
  893. }
  894. var projectIds []string
  895. // 任务id 对 项目id 的map
  896. taskIdToProjectIdMap := map[string]string{}
  897. // 项目id 对 定时任务id 的map
  898. projectIdToAutoTaskIdMap := map[string]int{}
  899. // 项目id 对 违约定时任务id 的map
  900. projectIdToAutoDefaultIdMap := map[string]int{}
  901. var taskIds []string
  902. for _, projectInfo := range projectInfos {
  903. projectIds = append(projectIds, projectInfo.ProjectID)
  904. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  905. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  906. var taskInfos []string
  907. db1 := GetReadDB(context.Background())
  908. 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)
  909. for _, taskInfo := range taskInfos {
  910. taskIdToProjectIdMap[taskInfo] = projectInfo.ProjectID
  911. taskIds = append(taskIds, taskInfo)
  912. }
  913. }
  914. // 首次提交链接的任务记录id
  915. var taskNeedModIds []string
  916. // 已提交链接的任务记录id
  917. var submitTaskNeedModIds []string
  918. // taskId 对 稿费形式的 map
  919. taskIdToFeeFormMap := make(map[string]int)
  920. for _, taskId := range taskIds {
  921. var taskInfo gorm_model.YoungeeTaskInfo
  922. db3 := GetReadDB(context.Background())
  923. // 保存所有数据上传状态为 1 且任务状态为14 的任务记录的id
  924. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
  925. if taskInfo.DataStatus == 1 && taskInfo.TaskStage == 13 {
  926. taskNeedModIds = append(taskNeedModIds, taskId)
  927. }
  928. // 保存所有数据上传状态为 3 且任务状态为14 的任务记录的id
  929. if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 13 {
  930. submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
  931. }
  932. taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
  933. }
  934. // 2. 对待上传数据的子任务判断
  935. for _, taskNeedModId := range taskNeedModIds {
  936. db2 := GetReadDB(context.Background())
  937. var CaseCloseDefault int32
  938. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&CaseCloseDefault)
  939. dd, _ := time.ParseDuration(conv.MustString(CaseCloseDefault, "") + "h")
  940. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  941. db6 := GetReadDB(context.Background())
  942. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
  943. var dataDefaultRate int
  944. var dataErrRate int
  945. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  946. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  947. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  948. // db6 := GetReadDB(context.Background())
  949. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  950. } else {
  951. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  952. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  953. // db6 := GetReadDB(context.Background())
  954. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  955. }
  956. //fmt.Println("dataDefaultRate:", dataDefaultRate)
  957. db1 := GetReadDB(context.Background())
  958. var taskLinkInfo gorm_model.YounggeeLinkInfo
  959. db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskLinkInfo)
  960. dbTask := GetReadDB(context.Background())
  961. var taskInfoCurr gorm_model.YoungeeTaskInfo
  962. dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfoCurr)
  963. if taskInfoCurr.DataMissingTime.IsZero() {
  964. // db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoDataBreakAt: taskLinkInfo.AgreeAt.Add(dd)})
  965. dbTask.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{DataMissingTime: taskLinkInfo.AgreeAt.Add(dd)})
  966. fmt.Println("已添加数据违约自动处理时间")
  967. } else {
  968. if taskInfoCurr.TaskID != "" && taskInfoCurr.DataMissingTime.Sub(time.Now()) <= 0 {
  969. //db4 := GetReadDB(context.Background())
  970. //err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  971. // TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  972. //if err1 != nil {
  973. // return err1
  974. //}
  975. taskInfo := gorm_model.YoungeeTaskInfo{}
  976. dbt := GetReadDB(context.Background())
  977. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  978. if err2 != nil {
  979. return err2
  980. }
  981. // 达人实际所得
  982. settleAmount := taskInfo.DraftFee * (1.0 - float64(dataDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  983. if settleAmount <= 0 {
  984. settleAmount = 0.0
  985. }
  986. // 服务商实际所得
  987. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+dataDefaultRate+taskInfo.ScriptBreakRate)/100)
  988. if realServiceCharge <= 0 {
  989. realServiceCharge = 0.0
  990. }
  991. // 企业实际支付
  992. realPayment := settleAmount + realServiceCharge
  993. if realPayment <= 0 {
  994. realPayment = 0.0
  995. }
  996. fmt.Println("settleAmount: ", settleAmount)
  997. db3 := GetReadDB(context.Background())
  998. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  999. map[string]interface{}{
  1000. "data_missing_status": 1,
  1001. "cur_default_type": 7,
  1002. "sketch_break_rate": dataDefaultRate,
  1003. "settle_amount": settleAmount,
  1004. "err_break_rate": dataErrRate,
  1005. "real_payment": realPayment,
  1006. "real_service_charge": realServiceCharge,
  1007. }).Error
  1008. if err2 != nil {
  1009. return err2
  1010. }
  1011. err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
  1012. if err != nil {
  1013. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1014. }
  1015. err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
  1016. if err != nil {
  1017. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1018. }
  1019. fmt.Println("已创建数据违约记录")
  1020. }
  1021. }
  1022. }
  1023. // 3. 针对待修改的子任务
  1024. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  1025. db2 := GetReadDB(context.Background())
  1026. var LinkBreach int32
  1027. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
  1028. dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
  1029. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1030. db6 := GetReadDB(context.Background())
  1031. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  1032. var dataDefaultRate int
  1033. var dataErrRate int
  1034. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  1035. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  1036. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  1037. // db6 := GetReadDB(context.Background())
  1038. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  1039. } else {
  1040. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  1041. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  1042. // db6 := GetReadDB(context.Background())
  1043. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  1044. }
  1045. db1 := GetReadDB(context.Background())
  1046. var taskDataInfo gorm_model.YounggeeDataInfo
  1047. db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 1", submitTaskNeedModId).Order("reject_at desc").First(&taskDataInfo)
  1048. if taskDataInfo.AutoDataBreakAt.IsZero() {
  1049. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeDataInfo{AutoDataBreakAt: taskDataInfo.RejectAt.Add(dd)}).Error
  1050. if err4 != nil {
  1051. return err4
  1052. }
  1053. fmt.Println("已添加数据违约自动处理时间")
  1054. } else {
  1055. if taskDataInfo.TaskID != "" && taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
  1056. db4 := GetReadDB(context.Background())
  1057. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1058. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1059. if err1 != nil {
  1060. return err1
  1061. }
  1062. taskInfo := gorm_model.YoungeeTaskInfo{}
  1063. dbt := GetReadDB(context.Background())
  1064. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  1065. if err2 != nil {
  1066. return err2
  1067. }
  1068. // 达人实际所得
  1069. settleAmount := taskInfo.DraftFee * (1.0 - float64(dataDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  1070. if settleAmount <= 0 {
  1071. settleAmount = 0.0
  1072. }
  1073. // 服务商实际所得
  1074. realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+dataDefaultRate+taskInfo.ScriptBreakRate)/100)
  1075. if realServiceCharge <= 0 {
  1076. realServiceCharge = 0.0
  1077. }
  1078. // 企业实际支付
  1079. realPayment := settleAmount + realServiceCharge
  1080. if realPayment <= 0 {
  1081. realPayment = 0.0
  1082. }
  1083. db3 := GetReadDB(context.Background())
  1084. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  1085. map[string]interface{}{
  1086. "data_missing_status": 1,
  1087. "cur_default_type": 7,
  1088. "sketch_break_rate": dataDefaultRate,
  1089. "settle_amount": settleAmount,
  1090. "err_break_rate": dataErrRate,
  1091. "real_payment": realPayment,
  1092. "real_service_charge": realServiceCharge,
  1093. }).Error
  1094. if err2 != nil {
  1095. return err2
  1096. }
  1097. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
  1098. if err != nil {
  1099. log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1100. }
  1101. err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
  1102. if err != nil {
  1103. log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1104. }
  1105. fmt.Println("创建已提交数据的数据违约记录")
  1106. }
  1107. }
  1108. }
  1109. return nil
  1110. }