operate.go 111 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433
  1. package db
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "log"
  7. "reflect"
  8. "strconv"
  9. "time"
  10. "youngee_m_api/model/common_model"
  11. "youngee_m_api/model/gorm_model"
  12. "youngee_m_api/model/http_model"
  13. "youngee_m_api/util"
  14. "github.com/caixw/lib.go/conv"
  15. "github.com/sirupsen/logrus"
  16. "github.com/tidwall/gjson"
  17. "gorm.io/gorm"
  18. )
  19. func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingRequest) (string, string, error) {
  20. db := GetReadDB(ctx)
  21. project_type, fee_form, platform, fans_low, fans_up, service_charge, service_rate := req.ProjectType, req.ManuscriptForm, req.Platform, req.FansLow, req.FansHigh, req.ServiceCharge, req.ServiceRate*10
  22. var IsExclusive, IsExclusive2, IsExclusive3, IsExclusive1 gorm_model.InfoPricingStrategy
  23. err := db.Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
  24. if err == nil {
  25. return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
  26. }
  27. err = db.Where(" fee_form = ? && platform = ? && fans_low < ? && fans_up > ?", fee_form, platform, fans_low, fans_low).First(&IsExclusive1).Error
  28. if err == nil {
  29. return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
  30. }
  31. err = db.Where(" fee_form = ? && platform = ? && fans_low < ? && fans_up > ?", fee_form, platform, fans_up, fans_up).First(&IsExclusive2).Error
  32. if err == nil {
  33. return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
  34. }
  35. err = db.Where(" fee_form = ? && platform = ? && fans_low >= ? && fans_up <= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive3).Error
  36. if err == nil {
  37. return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
  38. }
  39. var newStrategy gorm_model.InfoPricingStrategy
  40. var strategyInfo gorm_model.InfoPricingStrategy
  41. getMonth := time.Now().Format("01") //获取月
  42. getDay := time.Now().Day() //获取日
  43. dayString := ""
  44. if getDay < 10 {
  45. dayString = conv.MustString(getDay, "")
  46. dayString = "0" + dayString
  47. } else {
  48. dayString = conv.MustString(getDay, "")
  49. }
  50. monthAndDay := conv.MustString(getMonth, "") + dayString
  51. err = db.Where(fmt.Sprintf(" strategyId like '%s%%'", monthAndDay)).Last(&strategyInfo).Error
  52. num := 1
  53. if strategyInfo.StrategyId != "" {
  54. num = conv.MustInt(strategyInfo.StrategyId[4:6], 0)
  55. num = num + 1 //获取日
  56. } else {
  57. num = 1
  58. }
  59. numString := ""
  60. if num < 10 {
  61. numString = conv.MustString(num, "")
  62. numString = "0" + numString
  63. } else {
  64. numString = conv.MustString(num, "")
  65. }
  66. newStrategy.StrategyId = monthAndDay + numString
  67. newStrategy.Status = 0
  68. newStrategy.FansLow = fans_low
  69. newStrategy.FansUp = fans_up
  70. newStrategy.ProjectType = conv.MustInt64(project_type, 0)
  71. newStrategy.ServiceCharge = conv.MustFloat64(service_charge, 0)
  72. newStrategy.Platform = conv.MustInt64(platform, 0)
  73. newStrategy.FeeForm = conv.MustInt64(fee_form, 0)
  74. newStrategy.ServiceRate = conv.MustInt64(service_rate, 0)
  75. newStrategy.CreateAt = time.Now()
  76. newStrategy.UpdateAt = time.Now()
  77. err = db.Create(&newStrategy).Error
  78. if err != nil {
  79. return "创建失败", "", err
  80. }
  81. return "创建成功", monthAndDay + numString, nil
  82. }
  83. func CreateYoungeeStrategy(ctx context.Context, req *http_model.AddYoungeeRequest) (string, string, error) {
  84. db := GetReadDB(ctx)
  85. project_type, task_type, platform, content_type, reason, cash := req.ProjectType, req.TaskType, req.Platform, req.ContentType, req.Reason, req.Cash
  86. var IsExclusive gorm_model.InfoYoungeeStrategy
  87. err := db.Where(" platform = ? ").First(&IsExclusive).Error
  88. if err == nil {
  89. return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
  90. }
  91. var newStrategy gorm_model.InfoYoungeeStrategy
  92. var strategyInfo gorm_model.InfoYoungeeStrategy
  93. getMonth := time.Now().Format("01") //获取月
  94. getDay := time.Now().Day() //获取日
  95. dayString := ""
  96. if getDay < 10 {
  97. dayString = conv.MustString(getDay, "")
  98. dayString = "0" + dayString
  99. } else {
  100. dayString = conv.MustString(getDay, "")
  101. }
  102. monthAndDay := conv.MustString(getMonth, "") + dayString
  103. err = db.Where(fmt.Sprintf(" strategyId like '%s%%'", monthAndDay)).Last(&strategyInfo).Error
  104. num := 1
  105. if strategyInfo.StrategyId != "" {
  106. num = conv.MustInt(strategyInfo.StrategyId[4:6], 0)
  107. num = num + 1 //获取日
  108. } else {
  109. num = 1
  110. }
  111. numString := ""
  112. if num < 10 {
  113. numString = conv.MustString(num, "")
  114. numString = "0" + numString
  115. } else {
  116. numString = conv.MustString(num, "")
  117. }
  118. newStrategy.StrategyId = monthAndDay + numString
  119. newStrategy.Status = 0
  120. newStrategy.ProjectType = conv.MustInt64(project_type, 0)
  121. newStrategy.TaskType = conv.MustInt64(task_type, 0)
  122. newStrategy.Platform = conv.MustInt64(platform, 0)
  123. newStrategy.ContentType = conv.MustInt(content_type, 0)
  124. newStrategy.Reason = conv.MustInt(reason, 0)
  125. //newStrategy.Points = conv.MustFloat64(points, 0)
  126. newStrategy.Cash = conv.MustFloat64(cash, 0)
  127. newStrategy.CreateAt = time.Now()
  128. err = db.Create(&newStrategy).Error
  129. if err != nil {
  130. return "创建失败", "", err
  131. }
  132. return "创建成功", monthAndDay + numString, nil
  133. }
  134. func SearchPricing(ctx context.Context, pageSize, pageNum int32, conditions *common_model.PricingConditions) ([]*gorm_model.InfoPricingStrategy, int64, error) {
  135. db := GetReadDB(ctx)
  136. db = db.Model(gorm_model.InfoPricingStrategy{})
  137. // 根据 查询条件过滤
  138. conditionType := reflect.TypeOf(conditions).Elem()
  139. conditionValue := reflect.ValueOf(conditions).Elem()
  140. for i := 0; i < conditionType.NumField(); i++ {
  141. field := conditionType.Field(i)
  142. tag := field.Tag.Get("condition")
  143. value := conditionValue.FieldByName(field.Name)
  144. if !util.IsBlank(value) && tag != "update_at" {
  145. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  146. } else if tag == "update_at" && value.Interface() != nil {
  147. db = db.Where(fmt.Sprintf("update_at like '%s%%'", value.Interface()))
  148. }
  149. }
  150. // 查询总数
  151. var total int64
  152. var PricingDatas []*gorm_model.InfoPricingStrategy
  153. if err := db.Count(&total).Error; err != nil {
  154. logrus.WithContext(ctx).Errorf("[SearchPricing] error query mysql total, err:%+v", err)
  155. return nil, 0, err
  156. }
  157. // 查询该页数据
  158. limit := pageSize
  159. offset := pageSize * pageNum // assert pageNum start with 0
  160. err := db.Order("update_at desc").Limit(int(limit)).Offset(int(offset)).Find(&PricingDatas).Error
  161. if err != nil {
  162. logrus.WithContext(ctx).Errorf("[SearchPricing] error query mysql find, err:%+v", err)
  163. return nil, 0, err
  164. }
  165. return PricingDatas, total, nil
  166. }
  167. func SearchYoungee(ctx context.Context, pageSize, pageNum int32, conditions *common_model.YoungeeConditions) ([]*gorm_model.InfoYoungeeStrategy, int64, error) {
  168. db := GetReadDB(ctx)
  169. db = db.Model(gorm_model.InfoYoungeeStrategy{})
  170. // 根据 查询条件过滤
  171. conditionType := reflect.TypeOf(conditions).Elem()
  172. conditionValue := reflect.ValueOf(conditions).Elem()
  173. for i := 0; i < conditionType.NumField(); i++ {
  174. field := conditionType.Field(i)
  175. tag := field.Tag.Get("condition")
  176. value := conditionValue.FieldByName(field.Name)
  177. if !util.IsBlank(value) {
  178. fmt.Println("tag:", tag)
  179. db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  180. }
  181. }
  182. // 查询总数
  183. var total int64
  184. var YoungeeDatas []*gorm_model.InfoYoungeeStrategy
  185. if err := db.Count(&total).Error; err != nil {
  186. logrus.WithContext(ctx).Errorf("[SearchYoungee] error query mysql total, err:%+v", err)
  187. return nil, 0, err
  188. }
  189. // 查询该页数据
  190. limit := pageSize
  191. offset := pageSize * pageNum // assert pageNum start with 0
  192. err := db.Order("content_type desc").Limit(int(limit)).Offset(int(offset)).Find(&YoungeeDatas).Error
  193. if err != nil {
  194. logrus.WithContext(ctx).Errorf("[SearchYoungee] error query mysql find, err:%+v", err)
  195. return nil, 0, err
  196. }
  197. return YoungeeDatas, total, nil
  198. }
  199. func ModifyPricing(ctx context.Context, req *http_model.ModifyPricingRequest) (int, error) {
  200. db := GetReadDB(ctx)
  201. strategyId := req.StrategyId
  202. db = db.Model(gorm_model.InfoPricingStrategy{})
  203. project_type, fee_form, platform, fans_low, fans_up, service_charge, service_rate := req.ProjectType, req.FeeForm, req.Platform, req.FansLow, req.FansHigh, req.ServiceCharge, req.ServiceRate*10
  204. var IsExclusive, IsExclusive2, IsExclusive3, IsExclusive1 int64
  205. err := db.Debug().Where("strategyId <> ? && fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", strategyId, fee_form, platform, fans_low, fans_up).Count(&IsExclusive).Error
  206. if IsExclusive != 0 {
  207. return 1, nil
  208. }
  209. err = db.Debug().Where("strategyId <> ? && fee_form = ? && platform = ? && fans_low < ? && fans_up > ?", strategyId, fee_form, platform, fans_low, fans_low).Count(&IsExclusive1).Error
  210. if IsExclusive1 != 0 {
  211. return 1, nil
  212. }
  213. err = db.Debug().Where("strategyId <> ? && fee_form = ? && platform = ? && fans_low < ? && fans_up > ?", strategyId, fee_form, platform, fans_up, fans_up).Count(&IsExclusive2).Error
  214. if IsExclusive2 != 0 {
  215. return 1, nil
  216. }
  217. err = db.Debug().Where("strategyId <> ? && fee_form = ? && platform = ? && fans_low >= ? && fans_up <= ?", strategyId, fee_form, platform, fans_low, fans_up).Count(&IsExclusive3).Error
  218. if IsExclusive3 != 0 {
  219. return 1, nil
  220. }
  221. if err != nil {
  222. fmt.Printf("[ModifyPricing] error query mysql find, err:%+v", err)
  223. logrus.WithContext(ctx).Errorf("[ModifyPricing] error query mysql find, err:%+v", err)
  224. return 2, err
  225. }
  226. //fmt.Printf("service_rate:%+v", service_rate)
  227. db1 := GetReadDB(ctx).Model(gorm_model.InfoPricingStrategy{}).Where("strategyId = ?", strategyId)
  228. err1 := db1.Updates(map[string]interface{}{
  229. "project_type": project_type, "service_rate": service_rate, "fee_form": fee_form,
  230. "platform": platform, "fans_low": fans_low, "fans_up": fans_up, "service_charge": service_charge,
  231. }).Error
  232. if err1 != nil {
  233. fmt.Printf("[ModifyPricing] error query mysql update, err:%+v", err)
  234. logrus.WithContext(ctx).Errorf("[ModifyPricing] error query mysql update, err:%+v", err)
  235. return 2, err
  236. }
  237. return 0, nil
  238. }
  239. func UpdateAutoTaskTime(ctx context.Context, time int32, num int32) error {
  240. db := GetReadDB(ctx)
  241. var autoTaskInfo gorm_model.InfoAutoTask
  242. err := db.Model(gorm_model.InfoAutoTask{}).Last(&autoTaskInfo).Error
  243. if err != nil {
  244. logrus.WithContext(ctx).Errorf("[UpdateAutoTaskTime] error get Last mysql, err:%+v", err)
  245. return err
  246. }
  247. switch num {
  248. case 1:
  249. autoTaskInfo.SignInOffline = time
  250. case 2:
  251. autoTaskInfo.SignInVirtual = time
  252. case 3:
  253. autoTaskInfo.ReviewInMv = time
  254. case 4:
  255. autoTaskInfo.ReviewUnlimited = time
  256. case 5:
  257. autoTaskInfo.Postreview = time
  258. case 6:
  259. autoTaskInfo.CaseClose = time
  260. case 7:
  261. autoTaskInfo.Invalid = time
  262. case 8:
  263. autoTaskInfo.DraftDefaultInPic = time
  264. case 9:
  265. autoTaskInfo.DraftDefaultInMv = time
  266. case 10:
  267. autoTaskInfo.ScriptDefault = time
  268. case 11:
  269. autoTaskInfo.LinkBreach = time
  270. case 12:
  271. autoTaskInfo.CaseCloseDefault = time
  272. case 13:
  273. autoTaskInfo.SelectionInvalid = time
  274. }
  275. autoTaskInfo.AutoTaskID += 1
  276. err = db.Model(gorm_model.InfoAutoTask{}).Create(&autoTaskInfo).Error
  277. if err != nil {
  278. logrus.WithContext(ctx).Errorf("[UpdateAutoTaskTime] error Create mysql, err:%+v", err)
  279. return err
  280. }
  281. return nil
  282. }
  283. func UpdateAutoDefaultRate(ctx context.Context, rate int, num int32) error {
  284. db := GetReadDB(ctx)
  285. autoDefaultRateInfo := gorm_model.InfoAutoDefaultHandle{}
  286. err := db.Model(&gorm_model.InfoAutoDefaultHandle{}).Last(&autoDefaultRateInfo).Error
  287. if err != nil {
  288. logrus.WithContext(ctx).Errorf("[UpdateAutoDefaultRate] error get Last mysql, err:%+v", err)
  289. return err
  290. }
  291. switch num {
  292. case 1:
  293. autoDefaultRateInfo.SketchReplaceNotUpload = rate
  294. case 2:
  295. autoDefaultRateInfo.SketchReplaceTimeOut = rate
  296. case 3:
  297. autoDefaultRateInfo.SketchOtherNotUpload = rate
  298. case 4:
  299. autoDefaultRateInfo.SketchOtherTimeOut = rate
  300. case 5:
  301. autoDefaultRateInfo.ScriptReplaceNotUpload = rate
  302. case 6:
  303. autoDefaultRateInfo.ScriptReplaceTimeOut = rate
  304. case 7:
  305. autoDefaultRateInfo.ScriptOtherNotUpload = rate
  306. case 8:
  307. autoDefaultRateInfo.ScriptOtherTimeOut = rate
  308. case 9:
  309. autoDefaultRateInfo.LinkReplaceNotUpload = rate
  310. case 10:
  311. autoDefaultRateInfo.LinkReplaceTimeOut = rate
  312. case 11:
  313. autoDefaultRateInfo.LinkOtherNotUpload = rate
  314. case 12:
  315. autoDefaultRateInfo.LinkOtherTimeOut = rate
  316. case 13:
  317. autoDefaultRateInfo.DataReplaceNotUpload = rate
  318. case 14:
  319. autoDefaultRateInfo.DataReplaceTimeOut = rate
  320. case 15:
  321. autoDefaultRateInfo.DataOtherNotUpload = rate
  322. case 16:
  323. autoDefaultRateInfo.DataOtherTimeOut = rate
  324. }
  325. autoDefaultRateInfo.AutoDefaultID += 1
  326. err = db.Model(&gorm_model.InfoAutoDefaultHandle{}).Create(autoDefaultRateInfo).Error
  327. if err != nil {
  328. logrus.WithContext(ctx).Errorf("[UpdateAutoDefaultRate] error Create mysql, err:%+v", err)
  329. return err
  330. }
  331. return nil
  332. }
  333. func GetSignInOfflineTask(projectForm int32) error {
  334. db := GetReadDB(context.Background())
  335. var projectInfos []*gorm_model.ProjectInfo
  336. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_form = ? AND project_status = 9", 1, projectForm).Find(&projectInfos).Error
  337. if err != nil {
  338. return err
  339. }
  340. projectIdMap := make(map[string]int64)
  341. taskIDs := make(map[string]string)
  342. var projectIds []string
  343. var taskIds []string
  344. var t int32
  345. for _, projectInfo := range projectInfos {
  346. autoTaskId := projectInfo.AutoTaskID
  347. dbStart := GetReadDB(context.Background())
  348. var autoTaskInfo gorm_model.InfoAutoTask
  349. dbStart.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", autoTaskId).First(&autoTaskInfo)
  350. // fmt.Println("t:", autoTaskInfo.SignInOffline)
  351. if projectForm == 3 {
  352. t = autoTaskInfo.SignInOffline
  353. } else {
  354. t = autoTaskInfo.SignInVirtual
  355. }
  356. projectIds = append(projectIds, projectInfo.ProjectID)
  357. if _, ok := projectIdMap[projectInfo.ProjectID]; !ok {
  358. projectIdMap[projectInfo.ProjectID] = projectInfo.ContentType
  359. db1 := GetReadDB(context.Background())
  360. var taskInfos []gorm_model.YoungeeTaskInfo
  361. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND logistics_status = ? AND task_stage = 5", projectInfo.ProjectID, 2).Find(&taskInfos)
  362. //fmt.Println("taskInfos", taskInfos)
  363. for _, taskInfo := range taskInfos {
  364. //fmt.Println("TaskId", taskInfo.TaskId)
  365. if _, ok1 := taskIDs[taskInfo.TaskId]; !ok1 {
  366. taskIds = append(taskIds, taskInfo.TaskId)
  367. taskIDs[taskInfo.TaskId] = taskInfo.ProjectId
  368. var logisticInfo gorm_model.YoungeeTaskLogistics
  369. db2 := GetReadDB(context.Background())
  370. db2.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskInfo.TaskId).Find(&logisticInfo)
  371. dd, _ := time.ParseDuration(conv.MustString(t, "") + "h")
  372. if logisticInfo.AutoSignAt == nil || logisticInfo.AutoSignAt.IsZero() {
  373. var t1 time.Time
  374. if logisticInfo.ThingsType == 3 {
  375. t1 = logisticInfo.ExplorestoreEndtime.Add(dd)
  376. } else {
  377. t1 = logisticInfo.DeliveryTime.Add(dd)
  378. }
  379. db5 := GetReadDB(context.Background())
  380. db5.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticInfo.LogisticsID).
  381. Updates(&gorm_model.YoungeeTaskLogistics{AutoSignAt: &t1})
  382. fmt.Println("已添加自动签收时间")
  383. }
  384. }
  385. }
  386. }
  387. }
  388. var logisticInfos []gorm_model.YoungeeTaskLogistics
  389. db3 := GetReadDB(context.Background())
  390. err = db3.Model(gorm_model.YoungeeTaskLogistics{}).Where("auto_sign_at <= ? AND task_id IN ?", time.Now(), taskIds).Find(&logisticInfos).Error
  391. if err != nil {
  392. log.Println("DB AutoGetSignInOfflineTask error :", err)
  393. return err
  394. }
  395. var signedTaskId []string
  396. for _, logisticInfo := range logisticInfos {
  397. signedTaskId = append(signedTaskId, logisticInfo.TaskID)
  398. if logisticInfo.Status == 0 {
  399. if logisticInfo.ThingsType == 3 {
  400. t := time.Now()
  401. db6 := GetReadDB(context.Background())
  402. db6.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticInfo.LogisticsID).Updates(
  403. &gorm_model.YoungeeTaskLogistics{SignedTime: &t, Status: 1})
  404. } else {
  405. db6 := GetReadDB(context.Background())
  406. t := time.Now()
  407. db6.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticInfo.LogisticsID).Updates(
  408. &gorm_model.YoungeeTaskLogistics{SignedTime: &t, Status: 1})
  409. }
  410. err = CreateTaskLog(context.Background(), logisticInfo.TaskID, "签收时间")
  411. if err != nil {
  412. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  413. }
  414. err = CreateMessageByTaskId(context.Background(), 9, 2, logisticInfo.TaskID)
  415. if err != nil {
  416. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  417. }
  418. fmt.Println("已更新签收时间")
  419. }
  420. }
  421. signedTaskId = util.RemoveStrRepByMap(signedTaskId)
  422. //fmt.Println("signedTaskId", signedTaskId)
  423. for _, taskID := range signedTaskId {
  424. //fmt.Println("taskID", taskID)
  425. db4 := GetReadDB(context.Background())
  426. taskNeedMod := gorm_model.YoungeeTaskInfo{}
  427. db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Find(&taskNeedMod)
  428. if projectIdMap[taskIDs[taskID]] == 1 {
  429. if taskNeedMod.LogisticsStatus == 2 && taskNeedMod.TaskStage == 5 {
  430. db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 9})
  431. fmt.Println("内容形式为图片的项目 已修改任务状态为待传初稿 及物流状态为已签收")
  432. }
  433. } else if projectIdMap[taskIDs[taskID]] == 2 {
  434. if taskNeedMod.LogisticsStatus == 2 && taskNeedMod.TaskStage == 5 {
  435. db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 7})
  436. fmt.Println("内容形式为视频的项目 已修改任务状态为待传脚本 及物流状态为已签收")
  437. }
  438. }
  439. }
  440. return nil
  441. }
  442. func GetAutoReviewTask(contentType int32) error {
  443. db := GetReadDB(context.Background())
  444. var projectInfos []*gorm_model.ProjectInfo
  445. if contentType == 2 {
  446. // 项目内容形式为视频
  447. // 1. 补全scriptInfo表中的自动审核脚本时间
  448. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? AND project_status = 9", 1, contentType).Find(&projectInfos).Error
  449. if err != nil {
  450. return err
  451. }
  452. var projectIds []string
  453. projectIdToAutoTaskIdMap := map[string]int{}
  454. for _, projectInfo := range projectInfos {
  455. projectIds = append(projectIds, projectInfo.ProjectID)
  456. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  457. }
  458. //fmt.Println("projectIds:", projectIds)
  459. db1 := GetReadDB(context.Background())
  460. for _, projectId := range projectIds {
  461. // 获取 autoTaskId 及其对应的限制时间、
  462. autoTaskId := projectIdToAutoTaskIdMap[projectId]
  463. dbStart := GetReadDB(context.Background())
  464. var ReviewInMv int32
  465. dbStart.Model(gorm_model.InfoAutoTask{}).Select("review_in_mv").Where("auto_task_id = ?", autoTaskId).First(&ReviewInMv)
  466. //fmt.Println("t:", autoTaskInfo.ReviewInMv)
  467. // 获取 projectId 对应的 taskId 及添加脚本自动审核时间
  468. var taskInfos []gorm_model.YoungeeTaskInfo
  469. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage = 8", projectId).Find(&taskInfos)
  470. for _, taskInfo := range taskInfos {
  471. //fmt.Println("TaskID:", taskInfo.TaskId)
  472. db2 := GetReadDB(context.Background())
  473. var scriptInfos gorm_model.YounggeeScriptInfo
  474. db2.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&scriptInfos)
  475. dd, _ := time.ParseDuration(conv.MustString(ReviewInMv, "") + "h")
  476. if scriptInfos.AutoAgreeAt.IsZero() {
  477. db3 := GetReadDB(context.Background())
  478. db3.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ?", taskInfo.TaskId).
  479. Updates(&gorm_model.YounggeeScriptInfo{AutoAgreeAt: scriptInfos.SubmitAt.Add(dd)})
  480. fmt.Println("已添加脚本自动审核时间")
  481. }
  482. }
  483. }
  484. //fmt.Println("taskId:", taskId)
  485. // 2. 查询scriptInfo表中应该被自动审稿的脚本
  486. var newScriptInfos []gorm_model.YounggeeScriptInfo
  487. db3 := GetReadDB(context.Background())
  488. err = db3.Model(gorm_model.YounggeeScriptInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Find(&newScriptInfos).Error
  489. if err != nil {
  490. log.Println("DB GetAutoReviewTask error in script:", err)
  491. return err
  492. }
  493. // 记录其task_id
  494. var taskIds []string
  495. for _, scriptInfo := range newScriptInfos {
  496. taskIds = append(taskIds, scriptInfo.TaskID)
  497. }
  498. // 3. 执行审核脚本操作
  499. // 1). 更新scriptInfo表
  500. db4 := GetReadDB(context.Background())
  501. err = db4.Model(gorm_model.YounggeeScriptInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Updates(
  502. &gorm_model.YounggeeScriptInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1}).Error
  503. if err != nil {
  504. log.Println("DB GetAutoReviewTask error in script:", err)
  505. return err
  506. }
  507. var num int64
  508. db4.Model(gorm_model.YounggeeScriptInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Count(&num)
  509. if num != 0 {
  510. fmt.Println("自动审核脚本:已更新scriptInfo表")
  511. }
  512. // 2).更新taskInfo表
  513. db5 := GetReadDB(context.Background())
  514. err = db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", taskIds).Updates(
  515. &gorm_model.YoungeeTaskInfo{ScriptStatus: 5, TaskStage: 9}).Error
  516. if err != nil {
  517. log.Println("DB GetAutoReviewTask error in script:", err)
  518. return err
  519. }
  520. for _, taskId := range taskIds {
  521. err = CreateTaskLog(context.Background(), taskId, "脚本通过")
  522. if err != nil {
  523. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  524. }
  525. err = CreateMessageByTaskId(context.Background(), 2, 1, taskId)
  526. if err != nil {
  527. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  528. }
  529. }
  530. if len(taskIds) != 0 {
  531. fmt.Println("以下任务状态需要变更:", taskIds)
  532. fmt.Println("自动审核脚本:已更新taskInfo表,任务阶段为待传链接 及脚本上传状态为已通过")
  533. }
  534. return nil
  535. } else {
  536. // 项目内容形式为图文
  537. // 1. 补全sketchInfo表中的自动审核初稿时间
  538. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_status = 9", 1).Find(&projectInfos).Error
  539. if err != nil {
  540. return err
  541. }
  542. var projectIds []string
  543. projectIdToAutoTaskIdMap := map[string]int{}
  544. for _, projectInfo := range projectInfos {
  545. projectIds = append(projectIds, projectInfo.ProjectID)
  546. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  547. }
  548. //fmt.Println("projectIds:", projectIds)
  549. db1 := GetReadDB(context.Background())
  550. for _, projectId := range projectIds {
  551. // 获取 autoTaskId 及其对应的限制时间、
  552. autoTaskId := projectIdToAutoTaskIdMap[projectId]
  553. dbStart := GetReadDB(context.Background())
  554. var ReviewUnlimited int32
  555. dbStart.Model(gorm_model.InfoAutoTask{}).Select("review_unlimited").Where("auto_task_id = ?", autoTaskId).First(&ReviewUnlimited)
  556. //fmt.Println("t:", autoTaskInfo.ReviewUnlimited)
  557. var taskInfos []gorm_model.YoungeeTaskInfo
  558. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage = 10", projectId).Find(&taskInfos)
  559. for _, taskInfo := range taskInfos {
  560. db2 := GetReadDB(context.Background())
  561. var sketchInfo gorm_model.YounggeeSketchInfo
  562. db2.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&sketchInfo)
  563. dd, _ := time.ParseDuration(conv.MustString(ReviewUnlimited, "") + "h")
  564. if sketchInfo.AutoAgreeAt.IsZero() {
  565. db3 := GetReadDB(context.Background())
  566. db3.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ?", sketchInfo.TaskID).Updates(&gorm_model.YounggeeSketchInfo{
  567. AutoAgreeAt: sketchInfo.SubmitAt.Add(dd),
  568. })
  569. fmt.Println("已添加初稿自动审核时间")
  570. }
  571. }
  572. }
  573. // 2. 查询sketchInfo表中应该被自动审稿的初稿
  574. var newSketchInfos []gorm_model.YounggeeSketchInfo
  575. db3 := GetReadDB(context.Background())
  576. err = db3.Model(gorm_model.YounggeeSketchInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Find(&newSketchInfos).Error
  577. if err != nil {
  578. log.Println("DB GetAutoReviewTask error in sketch:", err)
  579. return err
  580. }
  581. // 记录其task_id
  582. var taskIds []string
  583. for _, sketchInfo := range newSketchInfos {
  584. taskIds = append(taskIds, sketchInfo.TaskID)
  585. }
  586. // 3. 执行审核初稿操作
  587. // 1). 更新sketchInfo表
  588. db4 := GetReadDB(context.Background())
  589. err = db4.Model(gorm_model.YounggeeSketchInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Updates(
  590. &gorm_model.YounggeeSketchInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1}).Error
  591. if err != nil {
  592. log.Println("DB GetAutoReviewTask error in sketch:", err)
  593. return err
  594. }
  595. var num int64
  596. db4.Model(gorm_model.YounggeeSketchInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Count(&num)
  597. if num != 0 {
  598. fmt.Println("自动审核初稿:已更新sketchInfo表")
  599. }
  600. // 2).更新taskInfo表
  601. db5 := GetReadDB(context.Background())
  602. err = db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", taskIds).Updates(
  603. &gorm_model.YoungeeTaskInfo{SketchStatus: 5, TaskStage: 11}).Error
  604. if err != nil {
  605. log.Println("DB GetAutoReviewTask error in sketch:", err)
  606. return err
  607. }
  608. for _, taskId := range taskIds {
  609. err = CreateTaskLog(context.Background(), taskId, "初稿通过")
  610. if err != nil {
  611. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  612. }
  613. err = CreateMessageByTaskId(context.Background(), 3, 1, taskId)
  614. if err != nil {
  615. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  616. }
  617. }
  618. if len(taskIds) != 0 {
  619. fmt.Println("以下任务状态需要变更:", taskIds)
  620. fmt.Println("自动审核初稿:已更新taskInfo表,任务阶段为待传链接 及初稿上传状态为已通过")
  621. }
  622. return nil
  623. }
  624. }
  625. func GetAutoPostReviewTask() error {
  626. // 1. 补全linkInfo表中的自动审核链接时间
  627. db := GetReadDB(context.Background())
  628. var projectInfos []*gorm_model.ProjectInfo
  629. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_status = 9", 1).Find(&projectInfos).Error
  630. if err != nil {
  631. return err
  632. }
  633. var projectIds []string
  634. projectIdToAutoTaskIdMap := map[string]int{}
  635. for _, projectInfo := range projectInfos {
  636. projectIds = append(projectIds, projectInfo.ProjectID)
  637. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  638. }
  639. //fmt.Println("projectIds:", projectIds)
  640. db1 := GetReadDB(context.Background())
  641. for _, projectId := range projectIds {
  642. // 获取 autoTaskId 及其对应的限制时间、
  643. autoTaskId := projectIdToAutoTaskIdMap[projectId]
  644. dbStart := GetReadDB(context.Background())
  645. var Postreview int32
  646. dbStart.Model(gorm_model.InfoAutoTask{}).Select("postreview").Where("auto_task_id = ?", autoTaskId).First(&Postreview)
  647. //fmt.Println("t:", autoTaskInfo.Postreview)
  648. var taskInfos []gorm_model.YoungeeTaskInfo
  649. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage = 12", projectId).Find(&taskInfos)
  650. for _, taskInfo := range taskInfos {
  651. db2 := GetReadDB(context.Background())
  652. var linkInfos gorm_model.YounggeeLinkInfo
  653. db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&linkInfos)
  654. dd, _ := time.ParseDuration(conv.MustString(Postreview, "") + "h")
  655. if linkInfos.AutoAgreeAt.IsZero() && linkInfos.IsSubmit == 1 {
  656. db3 := GetReadDB(context.Background())
  657. db3.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ?", linkInfos.TaskID).Updates(&gorm_model.YounggeeLinkInfo{AutoAgreeAt: linkInfos.SubmitAt.Add(dd)})
  658. fmt.Println("已添加链接自动审核时间")
  659. }
  660. }
  661. }
  662. // 2. 查询linkInfo表中应该被自动审稿的链接
  663. var newLinkInfos []gorm_model.YounggeeLinkInfo
  664. db3 := GetReadDB(context.Background())
  665. err = db3.Model(gorm_model.YounggeeLinkInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Find(&newLinkInfos).Error
  666. if err != nil {
  667. log.Println("DB GetAutoPostReviewTask error in link:", err)
  668. return err
  669. }
  670. // 记录其task_id
  671. var taskIds []string
  672. for _, linkInfo := range newLinkInfos {
  673. taskIds = append(taskIds, linkInfo.TaskID)
  674. }
  675. // 3. 执行审核链接操作
  676. // 1). 更新linkInfo表
  677. db4 := GetReadDB(context.Background())
  678. err = db4.Model(gorm_model.YounggeeLinkInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Updates(
  679. &gorm_model.YounggeeLinkInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1}).Error
  680. if err != nil {
  681. log.Println("DB GetAutoPostReviewTask error in link:", err)
  682. return err
  683. }
  684. var num int64
  685. db4.Model(gorm_model.YounggeeLinkInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Count(&num)
  686. if num != 0 {
  687. fmt.Println("自动审核链接:已更新linkInfo表")
  688. }
  689. // 2).更新taskInfo表
  690. db5 := GetReadDB(context.Background())
  691. err = db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", taskIds).Updates(
  692. &gorm_model.YoungeeTaskInfo{LinkStatus: 5, TaskStage: 13}).Error
  693. if err != nil {
  694. log.Println("DB GetAutoPostReviewTask error in link:", err)
  695. return err
  696. }
  697. for _, taskId := range taskIds {
  698. err = CreateTaskLog(context.Background(), taskId, "链接通过")
  699. if err != nil {
  700. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  701. }
  702. err = CreateMessageByTaskId(context.Background(), 4, 1, taskId)
  703. if err != nil {
  704. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  705. }
  706. }
  707. if len(taskIds) != 0 {
  708. fmt.Println("以下任务状态需要变更:", taskIds)
  709. fmt.Println("自动审核链接:已更新taskInfo表,任务阶段为待传链接 及链接上传状态为已通过")
  710. }
  711. return nil
  712. }
  713. func GetAutoCaseCloseTask() error {
  714. // 1. 补全dataInfo表中的自动审核数据时间
  715. db := GetReadDB(context.Background())
  716. var projectInfos []*gorm_model.ProjectInfo
  717. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_status = 9", 1).Find(&projectInfos).Error
  718. if err != nil {
  719. return err
  720. }
  721. var projectIds []string
  722. projectIdToAutoTaskIdMap := map[string]int{}
  723. for _, projectInfo := range projectInfos {
  724. projectIds = append(projectIds, projectInfo.ProjectID)
  725. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  726. }
  727. //fmt.Println("projectIds:", projectIds)
  728. db1 := GetReadDB(context.Background())
  729. for _, projectId := range projectIds {
  730. // 获取 autoTaskId 及其对应的限制时间、
  731. autoTaskId := projectIdToAutoTaskIdMap[projectId]
  732. dbStart := GetReadDB(context.Background())
  733. var CaseClose int32
  734. dbStart.Model(gorm_model.InfoAutoTask{}).Select("case_close").Where("auto_task_id = ?", autoTaskId).First(&CaseClose)
  735. //fmt.Println("t:", autoTaskInfo.CaseClose)
  736. var taskInfos []gorm_model.YoungeeTaskInfo
  737. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage = 14", projectId).Find(&taskInfos)
  738. for _, taskInfo := range taskInfos {
  739. db2 := GetReadDB(context.Background())
  740. var dataInfos gorm_model.YounggeeDataInfo
  741. db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&dataInfos)
  742. dd, _ := time.ParseDuration(conv.MustString(CaseClose, "") + "h")
  743. if dataInfos.AutoAgreeAt.IsZero() && dataInfos.IsSubmit == 1 {
  744. db3 := GetReadDB(context.Background())
  745. db3.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ?", dataInfos.TaskID).Updates(&gorm_model.YounggeeDataInfo{AutoAgreeAt: dataInfos.SubmitAt.Add(dd)})
  746. fmt.Println("已添加数据自动审核时间")
  747. }
  748. }
  749. }
  750. // 2. 查询dataInfo表中应该被自动审稿的数据
  751. var newDataInfos []gorm_model.YounggeeDataInfo
  752. db3 := GetReadDB(context.Background())
  753. err = db3.Model(gorm_model.YounggeeDataInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Find(&newDataInfos).Error
  754. if err != nil {
  755. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  756. return err
  757. }
  758. // 记录其task_id
  759. taskIdToDataInfoMap := map[string]gorm_model.YounggeeDataInfo{}
  760. taskIdToTaskInfoMap := map[string]gorm_model.YoungeeTaskInfo{}
  761. var taskIds []string
  762. db6 := GetReadDB(context.Background())
  763. for _, dataInfo := range newDataInfos {
  764. taskIdToDataInfoMap[dataInfo.TaskID] = dataInfo
  765. taskIds = append(taskIds, dataInfo.TaskID)
  766. taskInfo := gorm_model.YoungeeTaskInfo{}
  767. err = db6.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", dataInfo.TaskID).Find(&taskInfo).Error
  768. if err != nil {
  769. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  770. return err
  771. }
  772. taskIdToTaskInfoMap[dataInfo.TaskID] = taskInfo
  773. }
  774. // 3. 执行审核数据操作
  775. // 1). 更新dataInfo表
  776. db4 := GetReadDB(context.Background())
  777. err = db4.Model(gorm_model.YounggeeDataInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Updates(
  778. &gorm_model.YounggeeDataInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1}).Error
  779. if err != nil {
  780. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  781. return err
  782. }
  783. var num int64
  784. db4.Model(gorm_model.YounggeeDataInfo{}).Where("auto_agree_at <= ? AND is_submit = ? AND is_review = ? ", time.Now(), 1, 0).Count(&num)
  785. if num != 0 {
  786. fmt.Println("自动审核数据:已更新dataInfo表")
  787. }
  788. // 2).更新taskInfo表
  789. db5 := GetReadDB(context.Background())
  790. err = db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", taskIds).Updates(
  791. &gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteDate: time.Now(), CompleteStatus: 2, WithdrawStatus: 2}).Error
  792. if err != nil {
  793. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  794. return err
  795. }
  796. for _, taskId := range taskIds {
  797. err = CreateTaskLog(context.Background(), taskId, "数据通过")
  798. if err != nil {
  799. logrus.WithContext(context.Background()).Errorf("[auto] call CreateTaskLog error,err:%+v", err)
  800. }
  801. err = CreateMessageByTaskId(context.Background(), 5, 1, taskId)
  802. if err != nil {
  803. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  804. }
  805. }
  806. err = SetTalentIncome(context.Background(), taskIds)
  807. if err != nil {
  808. logrus.WithContext(context.Background()).Errorf("[auto] call SetTalentIncome error,err:%+v", err)
  809. }
  810. if len(taskIds) != 0 {
  811. fmt.Println("以下任务状态需要变更:", taskIds)
  812. fmt.Println("自动审核数据:已更新taskInfo表,任务阶段为待传数据 及数据上传状态为已通过")
  813. }
  814. // 3). 创建任务收益并更新recruitStrategy表
  815. for _, taskId := range taskIds {
  816. taskInfo := taskIdToTaskInfoMap[taskId]
  817. dataInfo := taskIdToDataInfoMap[taskId]
  818. db7 := GetReadDB(context.Background())
  819. //查询project_info
  820. projectInfo := gorm_model.ProjectInfo{}
  821. err1 := db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectId).Scan(&projectInfo).Error
  822. if err1 != nil {
  823. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  824. return err1
  825. }
  826. // 2. 创建任务收益
  827. var productStruct gorm_model.YounggeeProduct
  828. if err = json.Unmarshal([]byte(projectInfo.ProductSnap), &productStruct); err != nil {
  829. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  830. return err
  831. }
  832. t := time.Now()
  833. income := gorm_model.YounggeeTalentIncome{
  834. TalentID: taskInfo.TalentId,
  835. ProjectID: taskInfo.ProjectId,
  836. SectaskID: taskInfo.TaskId,
  837. BrandName: productStruct.BrandName,
  838. TaskName: projectInfo.ProjectName,
  839. Income: strconv.FormatFloat(taskInfo.SettleAmount, 'f', 10, 32),
  840. IncomeType: 1,
  841. WithdrawStatus: 1,
  842. IncomeAt: &t,
  843. WithdrawAt: nil,
  844. }
  845. err = CreateIncome(context.Background(), income, nil)
  846. if err != nil {
  847. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  848. return err
  849. }
  850. // 更新招募策略
  851. db7 = db7.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectId, taskInfo.StrategyId)
  852. fansCount, _ := strconv.Atoi(conv.MustString(gjson.Get(taskInfo.TalentPlatformInfoSnap, "fans_count"), ""))
  853. err = db7.Updates(map[string]interface{}{
  854. "fan_number": gorm.Expr("fan_number + ?", fansCount),
  855. "play_number": gorm.Expr("play_number + ?", dataInfo.PlayNumber),
  856. "like_number": gorm.Expr("like_number + ?", dataInfo.LikeNumber),
  857. "collect_number": gorm.Expr("collect_number + ?", dataInfo.CollectNumber),
  858. "comment_number": gorm.Expr("comment_number + ?", dataInfo.CommentNumber),
  859. "finish_number": gorm.Expr("finish_number + 1"),
  860. "total_offer": gorm.Expr("total_offer + ?", taskInfo.RealPayment)}).Error
  861. if err != nil {
  862. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  863. return err
  864. }
  865. }
  866. // 4. 判断是否全部任务已结案,若已全部结案则触发项目结案
  867. // 查询 task_stage < 15 的任务数量
  868. for _, projectInfo := range projectInfos {
  869. var unFinishedTaskNumber int64
  870. db8 := GetReadDB(context.Background())
  871. err = db8.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage < 15", projectInfo.ProjectID).Count(&unFinishedTaskNumber).Error
  872. if err != nil {
  873. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  874. return err
  875. }
  876. var finishedNum int64
  877. db8.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).Count(&finishedNum)
  878. if unFinishedTaskNumber == 0 && finishedNum != 0 {
  879. // 若为0则触发项目结案
  880. db9 := GetReadDB(context.Background())
  881. // 2. 释放企业账户因项目冻结的资金
  882. // 1). 计算剩余资金
  883. var allPayment float64
  884. var realPayment float64
  885. err = db9.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).
  886. Pluck("COALESCE(SUM(all_payment), 0) as allPayment", &allPayment).Error
  887. if err != nil {
  888. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  889. return err
  890. }
  891. err = db9.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).
  892. Pluck("COALESCE(SUM(real_payment), 0) as realPayment", &realPayment).Error
  893. if err != nil {
  894. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  895. return err
  896. }
  897. fmt.Println("企业应支付金额总计:", allPayment, "实际支付总计:", realPayment)
  898. // 2). 释放剩余资金
  899. err = db9.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", projectInfo.EnterpriseID).Updates(
  900. map[string]interface{}{
  901. "frozen_balance": gorm.Expr("frozen_balance - ?", allPayment),
  902. "balance": gorm.Expr("balance - ?", realPayment),
  903. "available_balance": gorm.Expr("available_balance + ?", allPayment-realPayment)}).Error
  904. if err != nil {
  905. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  906. return err
  907. }
  908. // 1. 更新项目状态为已结束
  909. t := time.Now()
  910. err := db9.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectInfo.ProjectID).
  911. Updates(map[string]interface{}{"project_status": 10, "payment_amount": realPayment, "finish_at": &t}).Error
  912. if err != nil {
  913. log.Println("DB GetAutoCaseCloseTask error in data:", err)
  914. return err
  915. }
  916. }
  917. }
  918. return nil
  919. }
  920. // GetAutoInvalidTask 全流程项目失效自动处理
  921. func GetAutoInvalidTask() error {
  922. // 获取数据库链接
  923. db := GetReadDB(context.Background())
  924. // 指针类型数组 *gorm_model.ProjectInfo类型
  925. var projectInfos []*gorm_model.ProjectInfo
  926. // 查出来全部待支付状态的全流程项目
  927. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_status = ? ", 1, 6).Find(&projectInfos).Error
  928. if err != nil {
  929. return err
  930. }
  931. // string型数组projectIds
  932. var projectIds []string
  933. // 空map "项目1":1
  934. projectIdToAutoTaskIdMap := map[string]int{}
  935. // 获取所有未支付的全流程项目ID与map{项目id:自动处理id}
  936. for _, projectInfo := range projectInfos {
  937. projectIds = append(projectIds, projectInfo.ProjectID)
  938. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  939. }
  940. // 对于所有的未支付的全流程项目
  941. for _, projectId := range projectIds {
  942. // 获取 autoTaskId 及其对应的限制时间
  943. autoTaskId := projectIdToAutoTaskIdMap[projectId]
  944. dbStart := GetReadDB(context.Background())
  945. var Invalid int32
  946. dbStart.Model(gorm_model.InfoAutoTask{}).Select("invalid").Where("auto_task_id = ?", autoTaskId).First(&Invalid)
  947. //fmt.Println("t:", autoTaskInfo.Invalid)
  948. db1 := GetReadDB(context.Background())
  949. project := gorm_model.ProjectInfo{}
  950. db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).First(&project)
  951. //if project.AutoFailAt.IsZero() {
  952. // dd, _ := time.ParseDuration(conv.MustString(Invalid, "") + "h")
  953. // t := project.RecruitDdl.Add(dd)
  954. // db2 := GetReadDB(context.Background())
  955. // db2.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(&gorm_model.ProjectInfo{AutoFailAt: &t})
  956. // fmt.Println("已添加失效自动处理时间")
  957. //}
  958. dd, _ := time.ParseDuration(conv.MustString(Invalid, "") + "h")
  959. project.RecruitDdl.Add(dd)
  960. t := project.RecruitDdl.Add(dd)
  961. //fmt.Println("已存在的失效时间是否跟要添加的相等", project.AutoFailAt.Equal(t))
  962. if project.AutoFailAt == nil || project.AutoFailAt.IsZero() {
  963. db3 := GetReadDB(context.Background())
  964. db3.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(&gorm_model.ProjectInfo{AutoFailAt: &t})
  965. fmt.Println("已添加全流程项目失效自动处理时间")
  966. }
  967. projectNeedMod := gorm_model.ProjectInfo{}
  968. db2 := GetReadDB(context.Background())
  969. db2 = db2.Where("project_id = ?", projectId).First(&projectNeedMod)
  970. fmt.Println("全流程项目失效自动处理时间为:", projectNeedMod.AutoFailAt)
  971. // 失效自动处理的时间不为空
  972. if !projectNeedMod.AutoFailAt.IsZero() || projectNeedMod.AutoFailAt != nil {
  973. fmt.Printf("全流程项目 %v 失效自动处理时间不为空\n", projectNeedMod.ProjectID)
  974. fmt.Println("距离失效自动处理时间还有:,全流程项目当前状态为", projectNeedMod.AutoFailAt.Sub(time.Now()), projectNeedMod.ProjectStatus)
  975. // 已经过了失效自动处理的时间 ProjectStatus == 8代表失效
  976. if projectNeedMod.AutoFailAt.Sub(time.Now()) <= 0 && projectNeedMod.ProjectStatus < 8 {
  977. db4 := GetReadDB(context.Background())
  978. t := time.Now()
  979. err1 := db4.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(&gorm_model.ProjectInfo{ProjectStatus: 8, FinishAt: &t, FailReason: 1}).Error
  980. if err1 != nil {
  981. return err1
  982. }
  983. fmt.Println("已更新全流程项目状态为超时未支付的失效状态")
  984. dbT := GetReadDB(context.TODO())
  985. dbT.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
  986. }
  987. }
  988. }
  989. return nil
  990. }
  991. // GetAutoSelectionInvalidTask 选品项目的失效自动处理
  992. func GetAutoSelectionInvalidTask() error {
  993. println("GetAutoSelectionInvalidTask is running ====-=-0=-0=-0=-0=--------=")
  994. db := GetReadDB(context.Background())
  995. var selectioninfos []*gorm_model.YounggeeSelectionInfo
  996. err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_status= ? AND task_mode = ? ", 4, 1).Find(&selectioninfos).Error
  997. if err != nil {
  998. return err
  999. }
  1000. var selectionIds []string
  1001. selectionIdToAutoTaskIdMap := map[string]int{}
  1002. for _, selectionInfo := range selectioninfos {
  1003. selectionIds = append(selectionIds, selectionInfo.SelectionID)
  1004. selectionIdToAutoTaskIdMap[selectionInfo.SelectionID] = int(selectionInfo.AutoTaskID)
  1005. }
  1006. for _, selectionId := range selectionIds {
  1007. autoTaskId := selectionIdToAutoTaskIdMap[selectionId]
  1008. dbStart := GetReadDB(context.Background())
  1009. var SelectionInvalid int32
  1010. dbStart.Model(gorm_model.InfoAutoTask{}).Select("selectioninvalid").Where("auto_task_id = ?", autoTaskId).First(&SelectionInvalid)
  1011. db1 := GetReadDB(context.Background())
  1012. selection := gorm_model.YounggeeSelectionInfo{}
  1013. db1.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).First(&selection)
  1014. dd, _ := time.ParseDuration(conv.MustString(SelectionInvalid, "") + "h")
  1015. selection.PassAt.Add(dd)
  1016. t := selection.PassAt.Add(dd)
  1017. if selection.AutoFailAt == nil || selection.AutoFailAt.IsZero() {
  1018. db3 := GetReadDB(context.Background())
  1019. db3.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Updates(&gorm_model.YounggeeSelectionInfo{AutoFailAt: &t})
  1020. fmt.Println("已添加选品任务失效自动处理时间")
  1021. }
  1022. selectionNeedMod := gorm_model.YounggeeSelectionInfo{}
  1023. db2 := GetReadDB(context.Background())
  1024. db2 = db2.Where("selection_id = ? ", selectionIds).First(&selectionNeedMod)
  1025. fmt.Println("选品项目失效自动处理时间为:", selectionNeedMod.AutoFailAt)
  1026. if !selectionNeedMod.AutoFailAt.IsZero() || selectionNeedMod.AutoFailAt != nil {
  1027. fmt.Printf("选品项目 %v 失效自动处理时间不为空\n", selectionNeedMod.SelectionID)
  1028. fmt.Println("距离失效自动处理时间还有:,选品项目当前状态为", selectionNeedMod.AutoFailAt.Sub(time.Now()), selectionNeedMod.SelectionStatus)
  1029. if selectionNeedMod.AutoFailAt.Sub(time.Now()) <= 0 && selectionNeedMod.SelectionStatus < 5 {
  1030. db4 := GetReadDB(context.Background())
  1031. t := time.Now()
  1032. err1 := db4.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Updates(&gorm_model.YounggeeSelectionInfo{SelectionStatus: 7, FinishAt: &t, FailReason: 1}).Error
  1033. if err1 != nil {
  1034. return err
  1035. }
  1036. fmt.Println("已更新选品项目状态为超时未支付的失效状态")
  1037. dbT := GetReadDB(context.TODO())
  1038. dbT.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? ", selectionIds).Updates(gorm_model.YounggeeSecTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
  1039. }
  1040. }
  1041. }
  1042. return nil
  1043. }
  1044. // GetAutoDraftDefaultInPicTask 图文-初稿超时违约判断
  1045. func GetAutoDraftDefaultInPicTask() error {
  1046. db := GetReadDB(context.Background())
  1047. var projectInfos []*gorm_model.ProjectInfo
  1048. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? ", 1, 1).Find(&projectInfos).Error
  1049. if err != nil {
  1050. return err
  1051. }
  1052. var projectIds []string
  1053. projectIdToAutoTaskIdMap := map[string]int{} // 项目id 对 定时任务id 的map
  1054. projectIdToAutoDefaultIdMap := map[string]int{} // 项目id 对 违约扣款设置id 的map
  1055. taskIdToFeeFormMap := make(map[string]int) // taskId 对 稿费形式的 map
  1056. TaskIdToProjectId := make(map[string]string) // taskId 对 项目id的 map
  1057. var taskNeedModIds []string // 首次提交初稿的任务记录id
  1058. var submitTaskNeedModIds []string // 修改后提交初稿的任务记录id
  1059. // 构造map及list
  1060. for _, projectInfo := range projectInfos {
  1061. projectIds = append(projectIds, projectInfo.ProjectID)
  1062. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  1063. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  1064. }
  1065. for _, projectId := range projectIds {
  1066. db1 := GetReadDB(context.Background())
  1067. var taskInfos []gorm_model.YoungeeTaskInfo
  1068. 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)
  1069. for _, taskInfo := range taskInfos {
  1070. TaskIdToProjectId[taskInfo.TaskId] = projectId
  1071. taskNeedMod := gorm_model.YoungeeTaskInfo{}
  1072. db2 := GetReadDB(context.Background())
  1073. // 保存所有满足物流状态为 3 且 初稿上传状态为 1或 3 的任务记录的id
  1074. db2.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskInfo.TaskId).First(&taskNeedMod)
  1075. taskIdToFeeFormMap[taskInfo.TaskId] = taskInfo.FeeForm
  1076. if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 1 {
  1077. taskNeedModIds = append(taskNeedModIds, taskInfo.TaskId)
  1078. }
  1079. if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 3 {
  1080. submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskId)
  1081. }
  1082. }
  1083. }
  1084. // 判断应首次上传初稿的任务
  1085. for _, taskNeedModId := range taskNeedModIds {
  1086. // 获取 autoTaskId 及其对应的限制时间
  1087. autoTaskId := projectIdToAutoTaskIdMap[TaskIdToProjectId[taskNeedModId]]
  1088. dbStart := GetReadDB(context.Background())
  1089. var DraftDefaultInPic int32
  1090. dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default_in_pic").Where("auto_task_id = ?", autoTaskId).First(&DraftDefaultInPic)
  1091. db3 := GetReadDB(context.Background())
  1092. taskLogisticNeedMod := gorm_model.YoungeeTaskLogistics{}
  1093. db3.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod)
  1094. // 查询违约扣款比例
  1095. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1096. db6 := GetReadDB(context.Background())
  1097. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
  1098. var sketchDefaultRate int
  1099. var sketchErrRate int
  1100. if taskIdToFeeFormMap[taskNeedModId] == 1 { // 稿费形式为产品置换
  1101. sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
  1102. sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
  1103. // db6 := GetReadDB(context.Background())
  1104. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
  1105. } else { // 稿费形式为其他
  1106. sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
  1107. sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
  1108. // db6 := GetReadDB(context.Background())
  1109. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1110. }
  1111. // 添加初稿违约自动处理时间
  1112. if taskLogisticNeedMod.Status == 1 && taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.AutoSketchBreakAt == nil || taskLogisticNeedMod.AutoSketchBreakAt.IsZero() {
  1113. dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInPic, "") + "h")
  1114. db4 := GetReadDB(context.Background())
  1115. t := taskLogisticNeedMod.SignedTime.Add(dd)
  1116. db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskLogistics{
  1117. AutoSketchBreakAt: &t,
  1118. })
  1119. taskLogisticNeedMod.AutoSketchBreakAt = &t
  1120. fmt.Println("已添加图片初稿违约自动处理时间")
  1121. }
  1122. // 判断是否超时违约
  1123. if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
  1124. // 超时违约处理
  1125. db5 := GetReadDB(context.Background())
  1126. err1 := db5.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1127. TaskID: taskLogisticNeedMod.TaskID, ProjectID: TaskIdToProjectId[taskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1128. if err1 != nil {
  1129. return err1
  1130. }
  1131. taskInfo := gorm_model.YoungeeTaskInfo{}
  1132. dbt := GetReadDB(context.Background())
  1133. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Find(&taskInfo).Error
  1134. if err2 != nil {
  1135. return err2
  1136. }
  1137. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
  1138. if settleAmount <= 0 {
  1139. settleAmount = 0.0
  1140. }
  1141. realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
  1142. if realPayment <= 0 {
  1143. realPayment = 0.0
  1144. }
  1145. db8 := GetReadDB(context.Background())
  1146. db8.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Updates(
  1147. map[string]interface{}{
  1148. "cur_default_type": 3,
  1149. "sketch_break_rate": sketchDefaultRate,
  1150. "settle_amount": settleAmount,
  1151. "err_break_rate": sketchErrRate,
  1152. "real_payment": realPayment,
  1153. })
  1154. err = CreateTaskLog(context.Background(), taskLogisticNeedMod.TaskID, "初稿逾期")
  1155. if err != nil {
  1156. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1157. }
  1158. err = CreateMessageByTaskId(context.Background(), 22, 4, taskLogisticNeedMod.TaskID)
  1159. if err != nil {
  1160. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1161. }
  1162. fmt.Println("已创建图文类型的初稿违约记录")
  1163. }
  1164. }
  1165. // 判断应修改后上传初稿的任务
  1166. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  1167. // 获取 autoTaskId 及其对应的限制时间
  1168. db2 := GetReadDB(context.Background())
  1169. var DraftDefaultInMv int32
  1170. db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[TaskIdToProjectId[submitTaskNeedModId]]).First(&DraftDefaultInMv)
  1171. dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
  1172. // 查询违约扣款比例
  1173. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1174. db6 := GetReadDB(context.Background())
  1175. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  1176. var sketchDefaultRate int
  1177. var sketchErrRate int
  1178. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  1179. sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
  1180. sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
  1181. // db6 := GetReadDB(context.Background())
  1182. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1183. } else {
  1184. sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
  1185. sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
  1186. // db6 := GetReadDB(context.Background())
  1187. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1188. }
  1189. // 添加初稿违约自动处理时间
  1190. db1 := GetReadDB(context.Background())
  1191. var taskSketchInfo gorm_model.YounggeeSketchInfo
  1192. db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 1", submitTaskNeedModId).Order("reject_at desc").First(&taskSketchInfo)
  1193. if taskSketchInfo.AutoSketchBreakAt.IsZero() {
  1194. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoSketchBreakAt: taskSketchInfo.RejectAt.Add(dd)}).Error
  1195. if err4 != nil {
  1196. return err4
  1197. }
  1198. taskSketchInfo.AutoSketchBreakAt = taskSketchInfo.RejectAt.Add(dd)
  1199. fmt.Println("已添加图文形式的初稿违约自动处理时间")
  1200. }
  1201. // 判断是否违约
  1202. if taskSketchInfo.TaskID != "" && taskSketchInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
  1203. db4 := GetReadDB(context.Background())
  1204. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1205. TaskID: submitTaskNeedModId, ProjectID: TaskIdToProjectId[submitTaskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1206. if err1 != nil {
  1207. return err1
  1208. }
  1209. taskInfo := gorm_model.YoungeeTaskInfo{}
  1210. dbt := GetReadDB(context.Background())
  1211. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  1212. if err2 != nil {
  1213. return err2
  1214. }
  1215. settleAmount := taskInfo.TaskReward * (1.0 - float64(sketchDefaultRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  1216. if settleAmount <= 0 {
  1217. settleAmount = 0.
  1218. }
  1219. realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
  1220. if realPayment <= 0 {
  1221. realPayment = 0.0
  1222. }
  1223. db3 := GetReadDB(context.Background())
  1224. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  1225. map[string]interface{}{
  1226. "cur_default_type": 3,
  1227. "sketch_break_rate": sketchDefaultRate,
  1228. "settle_amount": settleAmount,
  1229. "err_break_rate": sketchErrRate,
  1230. "real_payment": realPayment,
  1231. }).Error
  1232. if err2 != nil {
  1233. return err2
  1234. }
  1235. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "初稿逾期")
  1236. if err != nil {
  1237. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1238. }
  1239. err = CreateMessageByTaskId(context.Background(), 22, 4, submitTaskNeedModId)
  1240. if err != nil {
  1241. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1242. }
  1243. fmt.Println("创建已提交初稿的图文类型的初稿违约记录")
  1244. }
  1245. }
  1246. return nil
  1247. }
  1248. // GetAutoDraftDefaultInMvTask 视频-初稿超时违约判断
  1249. func GetAutoDraftDefaultInMvTask() error {
  1250. db := GetReadDB(context.Background())
  1251. var projectInfos []*gorm_model.ProjectInfo
  1252. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? ", 1, 2).Find(&projectInfos).Error
  1253. if err != nil {
  1254. return err
  1255. }
  1256. var projectIds []string
  1257. // 任务id 对 项目id 的map
  1258. taskIdToProjectIdMap := map[string]string{}
  1259. // 项目id 对 定时任务id 的map
  1260. projectIdToAutoTaskIdMap := map[string]int{}
  1261. // 项目 id 对 违约定时任务 id 的 map
  1262. projectIdToAutoDefaultIdMap := map[string]int{}
  1263. // taskId 对 稿费形式的 map
  1264. taskIdToFeeFormMap := make(map[string]int)
  1265. var videoTaskIds []string
  1266. // 构造map及list
  1267. for _, projectInfo := range projectInfos {
  1268. projectIds = append(projectIds, projectInfo.ProjectID)
  1269. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  1270. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  1271. var videoTaskInfos []*gorm_model.YoungeeTaskInfo
  1272. db1 := GetReadDB(context.Background())
  1273. db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? AND logistics_status = 3",
  1274. projectInfo.ProjectID, 2, 9, 0).Find(&videoTaskInfos)
  1275. for _, videoTaskInfo := range videoTaskInfos {
  1276. taskIdToProjectIdMap[videoTaskInfo.TaskId] = projectInfo.ProjectID
  1277. taskIdToFeeFormMap[videoTaskInfo.TaskId] = videoTaskInfo.FeeForm
  1278. videoTaskIds = append(videoTaskIds, videoTaskInfo.TaskId)
  1279. }
  1280. }
  1281. // 首次提交初稿的任务记录id
  1282. var videoTaskNeedModIds []string
  1283. // 已提交初稿的任务记录id
  1284. var submitVideoTaskNeedModIds []string
  1285. for _, videoTaskId := range videoTaskIds {
  1286. var taskInfo gorm_model.YoungeeTaskInfo
  1287. db3 := GetReadDB(context.Background())
  1288. // 保存所有初稿上传状态为 1 且任务阶段为9 的任务记录的id
  1289. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskId).First(&taskInfo)
  1290. if taskInfo.SketchStatus == 1 && taskInfo.TaskStage == 9 {
  1291. videoTaskNeedModIds = append(videoTaskNeedModIds, videoTaskId)
  1292. }
  1293. // 保存所有初稿上传状态为 3 且任务阶段为9 的任务记录的id
  1294. if taskInfo.SketchStatus == 3 && taskInfo.TaskStage == 9 {
  1295. submitVideoTaskNeedModIds = append(submitVideoTaskNeedModIds, videoTaskId)
  1296. }
  1297. }
  1298. // 判断应首次提交初稿的任务
  1299. for _, videoTaskNeedModId := range videoTaskNeedModIds {
  1300. db2 := GetReadDB(context.Background())
  1301. var DraftDefaultInMv int32
  1302. db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).First(&DraftDefaultInMv)
  1303. dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
  1304. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1305. db6 := GetReadDB(context.Background())
  1306. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&autoDefaultHandle)
  1307. var sketchDefaultRate int
  1308. var sketchErrRate int
  1309. if taskIdToFeeFormMap[videoTaskNeedModId] == 1 {
  1310. sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
  1311. sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
  1312. // db6 := GetReadDB(context.Background())
  1313. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1314. } else {
  1315. sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
  1316. sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
  1317. // db6 := GetReadDB(context.Background())
  1318. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1319. }
  1320. db1 := GetReadDB(context.Background())
  1321. var taskScriptInfo gorm_model.YounggeeScriptInfo
  1322. db1.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ? AND is_ok = ?", videoTaskNeedModId, 1).Find(&taskScriptInfo)
  1323. if taskScriptInfo.AutoSketchBreakAt.IsZero() {
  1324. db1.Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YounggeeScriptInfo{AutoSketchBreakAt: taskScriptInfo.AgreeAt.Add(dd)})
  1325. taskScriptInfo.AutoSketchBreakAt = taskScriptInfo.AgreeAt.Add(dd)
  1326. fmt.Println("已添加视频形式的初稿违约自动处理时间")
  1327. }
  1328. if taskScriptInfo.TaskID != "" && taskScriptInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
  1329. db4 := GetReadDB(context.Background())
  1330. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1331. TaskID: videoTaskNeedModId, ProjectID: taskIdToProjectIdMap[videoTaskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1332. if err1 != nil {
  1333. return err1
  1334. }
  1335. taskInfo := gorm_model.YoungeeTaskInfo{}
  1336. dbt := GetReadDB(context.Background())
  1337. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Find(&taskInfo).Error
  1338. if err2 != nil {
  1339. return err2
  1340. }
  1341. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
  1342. if settleAmount <= 0 {
  1343. settleAmount = 0.0
  1344. }
  1345. realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
  1346. if realPayment <= 0 {
  1347. realPayment = 0.0
  1348. }
  1349. db3 := GetReadDB(context.Background())
  1350. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(
  1351. map[string]interface{}{
  1352. "cur_default_type": 3,
  1353. "sketch_break_rate": sketchDefaultRate,
  1354. "settle_amount": settleAmount,
  1355. "err_break_rate": sketchErrRate,
  1356. "real_payment": realPayment,
  1357. }).Error
  1358. if err2 != nil {
  1359. return err2
  1360. }
  1361. err = CreateTaskLog(context.Background(), videoTaskNeedModId, "初稿逾期")
  1362. if err != nil {
  1363. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1364. }
  1365. err = CreateMessageByTaskId(context.Background(), 22, 4, videoTaskNeedModId)
  1366. if err != nil {
  1367. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1368. }
  1369. fmt.Println("已创建视频类型的初稿违约记录")
  1370. }
  1371. }
  1372. // 判断应修改后上传初稿的任务
  1373. for _, submitVideoTaskNeedModId := range submitVideoTaskNeedModIds {
  1374. db2 := GetReadDB(context.Background())
  1375. var DraftDefaultInMv int32
  1376. db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).First(&DraftDefaultInMv)
  1377. dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
  1378. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1379. db6 := GetReadDB(context.Background())
  1380. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&autoDefaultHandle)
  1381. var sketchDefaultRate int
  1382. var sketchErrRate int
  1383. if taskIdToFeeFormMap[submitVideoTaskNeedModId] == 1 {
  1384. sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
  1385. sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
  1386. // db6 := GetReadDB(context.Background())
  1387. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1388. } else {
  1389. sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
  1390. sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
  1391. // db6 := GetReadDB(context.Background())
  1392. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
  1393. }
  1394. db1 := GetReadDB(context.Background())
  1395. var taskSketchInfo gorm_model.YounggeeSketchInfo
  1396. db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 1", submitVideoTaskNeedModId).Order("reject_at desc").First(&taskSketchInfo)
  1397. if taskSketchInfo.AutoSketchBreakAt.IsZero() {
  1398. err4 := db1.Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoSketchBreakAt: taskSketchInfo.RejectAt.Add(dd)}).Error
  1399. if err4 != nil {
  1400. return err4
  1401. }
  1402. taskSketchInfo.AutoSketchBreakAt = taskSketchInfo.RejectAt.Add(dd)
  1403. fmt.Println("已添加视频形式的初稿违约自动处理时间")
  1404. }
  1405. if taskSketchInfo.TaskID != "" && taskSketchInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
  1406. db4 := GetReadDB(context.Background())
  1407. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1408. TaskID: submitVideoTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitVideoTaskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1409. if err1 != nil {
  1410. return err1
  1411. }
  1412. taskInfo := gorm_model.YoungeeTaskInfo{}
  1413. dbt := GetReadDB(context.Background())
  1414. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Find(&taskInfo).Error
  1415. if err2 != nil {
  1416. return err2
  1417. }
  1418. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
  1419. if settleAmount <= 0 {
  1420. settleAmount = 0.0
  1421. }
  1422. realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
  1423. if realPayment <= 0 {
  1424. realPayment = 0.0
  1425. }
  1426. db3 := GetReadDB(context.Background())
  1427. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(
  1428. map[string]interface{}{
  1429. "cur_default_type": 3,
  1430. "sketch_break_rate": sketchDefaultRate,
  1431. "settle_amount": settleAmount,
  1432. "err_break_rate": sketchErrRate,
  1433. "real_payment": realPayment,
  1434. }).Error
  1435. if err2 != nil {
  1436. return err2
  1437. }
  1438. err = CreateTaskLog(context.Background(), submitVideoTaskNeedModId, "初稿逾期")
  1439. if err != nil {
  1440. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1441. }
  1442. err = CreateMessageByTaskId(context.Background(), 22, 4, submitVideoTaskNeedModId)
  1443. if err != nil {
  1444. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1445. }
  1446. fmt.Println("创建已提交初稿的视频类型的初稿违约记录")
  1447. }
  1448. }
  1449. return nil
  1450. }
  1451. // GetAutoScriptDefaultTask 脚本超时违约判断
  1452. func GetAutoScriptDefaultTask() error {
  1453. db := GetReadDB(context.Background())
  1454. var projectInfos []*gorm_model.ProjectInfo
  1455. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ?", 1, 2).Find(&projectInfos).Error
  1456. if err != nil {
  1457. return err
  1458. }
  1459. var projectIds []string
  1460. // 任务id 对 项目id 的map
  1461. taskIdToProjectIdMap := map[string]string{}
  1462. // 项目id 对 定时任务id 的map
  1463. projectIdToAutoTaskIdMap := map[string]int{}
  1464. // 项目id 对 违约定时任务id 的map
  1465. projectIdToAutoDefaultIdMap := map[string]int{}
  1466. // taskId 对 稿费形式的 map
  1467. taskIdToFeeFormMap := make(map[string]int)
  1468. // 首次提交脚本的任务记录id
  1469. var videoTaskNeedModIds []string
  1470. // 已提交脚本的任务记录id
  1471. var submitVideoTaskNeedModIds []string
  1472. var videoTaskIds []string
  1473. // 构造map及list
  1474. for _, projectInfo := range projectInfos {
  1475. projectIds = append(projectIds, projectInfo.ProjectID)
  1476. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  1477. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  1478. var videoTaskInfos []*gorm_model.YoungeeTaskInfo
  1479. db1 := GetReadDB(context.Background())
  1480. db1.Model(&gorm_model.YoungeeTaskInfo{}).
  1481. Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? AND logistics_status = 3", projectInfo.ProjectID, 2, 7, 0).Find(&videoTaskInfos)
  1482. for _, videoTaskInfo := range videoTaskInfos {
  1483. taskIdToProjectIdMap[videoTaskInfo.TaskId] = projectInfo.ProjectID
  1484. taskIdToFeeFormMap[videoTaskInfo.TaskId] = videoTaskInfo.FeeForm
  1485. videoTaskIds = append(videoTaskIds, videoTaskInfo.TaskId)
  1486. }
  1487. }
  1488. for _, videoTaskId := range videoTaskIds {
  1489. var taskInfo gorm_model.YoungeeTaskInfo
  1490. db3 := GetReadDB(context.Background())
  1491. // 保存所有脚本上传状态为 1 且任务状态为8 的任务记录的id
  1492. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskId).First(&taskInfo)
  1493. if taskInfo.ScriptStatus == 1 && taskInfo.TaskStage == 7 {
  1494. videoTaskNeedModIds = append(videoTaskNeedModIds, videoTaskId)
  1495. }
  1496. // 保存所有脚本上传状态为 3 且任务状态为8 的任务记录的id
  1497. if taskInfo.ScriptStatus == 3 && taskInfo.TaskStage == 7 {
  1498. submitVideoTaskNeedModIds = append(submitVideoTaskNeedModIds, videoTaskId)
  1499. }
  1500. }
  1501. // 判断应首次上传脚本的任务
  1502. for _, videoTaskNeedModId := range videoTaskNeedModIds {
  1503. db2 := GetReadDB(context.Background())
  1504. var ScriptDefault int32
  1505. db2.Model(&gorm_model.InfoAutoTask{}).Select("script_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).First(&ScriptDefault)
  1506. dd, _ := time.ParseDuration(conv.MustString(ScriptDefault, "") + "h")
  1507. db1 := GetReadDB(context.Background())
  1508. var taskLogisticInfo gorm_model.YoungeeTaskLogistics
  1509. db1.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", videoTaskNeedModId).Find(&taskLogisticInfo)
  1510. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1511. db6 := GetReadDB(context.Background())
  1512. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&autoDefaultHandle)
  1513. //fmt.Printf("autoDefaultHandle%+v\n", autoDefaultHandle)
  1514. var scriptDefaultRate int
  1515. var scriptErrRate int
  1516. if taskIdToFeeFormMap[videoTaskNeedModId] == 1 {
  1517. scriptDefaultRate = autoDefaultHandle.ScriptReplaceTimeOut
  1518. scriptErrRate = autoDefaultHandle.ScriptReplaceNotUpload
  1519. // db6 := GetReadDB(context.Background())
  1520. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out", "script_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&scriptDefaultRate, &scriptErrRate)
  1521. } else {
  1522. scriptDefaultRate = autoDefaultHandle.ScriptOtherTimeOut
  1523. scriptErrRate = autoDefaultHandle.ScriptOtherNotUpload
  1524. // db6 := GetReadDB(context.Background())
  1525. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out", "script_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&scriptDefaultRate, &scriptErrRate)
  1526. }
  1527. if taskLogisticInfo.AutoScriptBreakAt == nil || taskLogisticInfo.AutoScriptBreakAt.IsZero() {
  1528. t := taskLogisticInfo.SignedTime.Add(dd)
  1529. db1.Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YoungeeTaskLogistics{AutoScriptBreakAt: &t})
  1530. fmt.Println("已添加视频形式的脚本违约自动处理时间")
  1531. if taskLogisticInfo.Status == 1 && taskLogisticInfo.TaskID != "" && taskLogisticInfo.SignedTime.Add(dd).Sub(time.Now()) <= 0 {
  1532. db4 := GetReadDB(context.Background())
  1533. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1534. TaskID: videoTaskNeedModId, ProjectID: taskIdToProjectIdMap[videoTaskNeedModId], BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1535. if err1 != nil {
  1536. return err1
  1537. }
  1538. taskInfo := gorm_model.YoungeeTaskInfo{}
  1539. dbt := GetReadDB(context.Background())
  1540. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Find(&taskInfo).Error
  1541. if err2 != nil {
  1542. return err2
  1543. }
  1544. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+scriptDefaultRate)/100)
  1545. if settleAmount <= 0 {
  1546. settleAmount = 0.0
  1547. }
  1548. realPayment := taskInfo.AllPayment * (1.0 - float64(scriptErrRate)/100)
  1549. if realPayment <= 0 {
  1550. realPayment = 0.0
  1551. }
  1552. db3 := GetReadDB(context.Background())
  1553. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(
  1554. map[string]interface{}{
  1555. "cur_default_type": 1,
  1556. "sketch_break_rate": scriptDefaultRate,
  1557. "settle_amount": settleAmount,
  1558. "err_break_rate": scriptErrRate,
  1559. "real_payment": realPayment,
  1560. }).Error
  1561. if err2 != nil {
  1562. return err2
  1563. }
  1564. err = CreateTaskLog(context.Background(), videoTaskNeedModId, "脚本逾期")
  1565. if err != nil {
  1566. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1567. }
  1568. err = CreateMessageByTaskId(context.Background(), 21, 4, videoTaskNeedModId)
  1569. if err != nil {
  1570. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1571. }
  1572. fmt.Println("创建时已违约则创建视频类型的脚本违约记录")
  1573. }
  1574. } else {
  1575. if taskLogisticInfo.Status == 1 && taskLogisticInfo.TaskID != "" && taskLogisticInfo.AutoScriptBreakAt.Sub(time.Now()) <= 0 {
  1576. db4 := GetReadDB(context.Background())
  1577. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1578. TaskID: videoTaskNeedModId, ProjectID: taskIdToProjectIdMap[videoTaskNeedModId], BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1579. if err1 != nil {
  1580. return err1
  1581. }
  1582. taskInfo := gorm_model.YoungeeTaskInfo{}
  1583. dbt := GetReadDB(context.Background())
  1584. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Find(&taskInfo).Error
  1585. if err2 != nil {
  1586. return err2
  1587. }
  1588. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+scriptDefaultRate)/100)
  1589. if settleAmount <= 0 {
  1590. settleAmount = 0.0
  1591. }
  1592. realPayment := taskInfo.AllPayment * (1.0 - float64(scriptErrRate)/100)
  1593. if realPayment <= 0 {
  1594. realPayment = 0.0
  1595. }
  1596. fmt.Printf("脚本未上传扣款率: %+v\nrealPayment:%+v\n", scriptErrRate, realPayment)
  1597. db3 := GetReadDB(context.Background())
  1598. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(
  1599. map[string]interface{}{
  1600. "cur_default_type": 1,
  1601. "script_break_rate": scriptDefaultRate,
  1602. "settle_amount": settleAmount,
  1603. "err_break_rate": scriptErrRate,
  1604. "real_payment": realPayment,
  1605. }).Error
  1606. if err2 != nil {
  1607. return err2
  1608. }
  1609. err = CreateTaskLog(context.Background(), videoTaskNeedModId, "脚本逾期")
  1610. if err != nil {
  1611. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1612. }
  1613. err = CreateMessageByTaskId(context.Background(), 21, 4, videoTaskNeedModId)
  1614. if err != nil {
  1615. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1616. }
  1617. fmt.Println("已创建视频类型的脚本违约记录")
  1618. }
  1619. }
  1620. }
  1621. // 根据最近一次拒绝时间判断当前是否违约
  1622. for _, submitVideoTaskNeedModId := range submitVideoTaskNeedModIds {
  1623. db2 := GetReadDB(context.Background())
  1624. var ScriptDefault int32
  1625. db2.Model(&gorm_model.InfoAutoTask{}).Select("script_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).First(&ScriptDefault)
  1626. dd, _ := time.ParseDuration(conv.MustString(ScriptDefault, "") + "h")
  1627. db1 := GetReadDB(context.Background())
  1628. var taskScriptInfo gorm_model.YounggeeScriptInfo
  1629. db1.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ? and is_review = 1", submitVideoTaskNeedModId).Order("reject_at desc").First(&taskScriptInfo)
  1630. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1631. db6 := GetReadDB(context.Background())
  1632. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&autoDefaultHandle)
  1633. var scriptDefaultRate int
  1634. var scriptErrRate int
  1635. if taskIdToFeeFormMap[submitVideoTaskNeedModId] == 1 {
  1636. scriptDefaultRate = autoDefaultHandle.ScriptReplaceTimeOut
  1637. scriptErrRate = autoDefaultHandle.ScriptReplaceNotUpload
  1638. // db6 := GetReadDB(context.Background())
  1639. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out", "script_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&scriptDefaultRate, &scriptErrRate)
  1640. } else {
  1641. scriptDefaultRate = autoDefaultHandle.ScriptOtherTimeOut
  1642. scriptErrRate = autoDefaultHandle.ScriptOtherNotUpload
  1643. // db6 := GetReadDB(context.Background())
  1644. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out", "script_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&scriptDefaultRate, &scriptErrRate)
  1645. }
  1646. if taskScriptInfo.AutoScriptBreakAt.IsZero() {
  1647. err4 := db1.Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YounggeeScriptInfo{AutoScriptBreakAt: taskScriptInfo.RejectAt.Add(dd)}).Error
  1648. if err4 != nil {
  1649. return err4
  1650. }
  1651. fmt.Println("已添加视频形式的脚本违约自动处理时间")
  1652. if taskScriptInfo.TaskID != "" && taskScriptInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
  1653. db4 := GetReadDB(context.Background())
  1654. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1655. TaskID: submitVideoTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitVideoTaskNeedModId], BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1656. if err1 != nil {
  1657. return err1
  1658. }
  1659. taskInfo := gorm_model.YoungeeTaskInfo{}
  1660. dbt := GetReadDB(context.Background())
  1661. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Find(&taskInfo).Error
  1662. if err2 != nil {
  1663. return err2
  1664. }
  1665. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+scriptDefaultRate)/100)
  1666. if settleAmount <= 0 {
  1667. settleAmount = 0.0
  1668. }
  1669. realPayment := taskInfo.AllPayment * (1.0 - float64(scriptErrRate)/100)
  1670. if realPayment <= 0 {
  1671. realPayment = 0.0
  1672. }
  1673. db3 := GetReadDB(context.Background())
  1674. err3 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(
  1675. map[string]interface{}{
  1676. "cur_default_type": 1,
  1677. "script_break_rate": scriptDefaultRate,
  1678. "settle_amount": settleAmount,
  1679. "err_break_rate": scriptErrRate,
  1680. "real_payment": realPayment,
  1681. }).Error
  1682. if err3 != nil {
  1683. return err3
  1684. }
  1685. err = CreateTaskLog(context.Background(), submitVideoTaskNeedModId, "脚本逾期")
  1686. if err != nil {
  1687. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1688. }
  1689. err = CreateMessageByTaskId(context.Background(), 21, 4, submitVideoTaskNeedModId)
  1690. if err != nil {
  1691. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1692. }
  1693. fmt.Println("创建时已违约则创建已提交脚本的视频类型的脚本违约记录")
  1694. }
  1695. } else {
  1696. if taskScriptInfo.TaskID != "" && taskScriptInfo.AutoScriptBreakAt.Sub(time.Now()) <= 0 {
  1697. db4 := GetReadDB(context.Background())
  1698. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1699. TaskID: submitVideoTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitVideoTaskNeedModId], BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1700. if err1 != nil {
  1701. return err1
  1702. }
  1703. taskInfo := gorm_model.YoungeeTaskInfo{}
  1704. dbt := GetReadDB(context.Background())
  1705. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Find(&taskInfo).Error
  1706. if err2 != nil {
  1707. return err2
  1708. }
  1709. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+scriptDefaultRate)/100)
  1710. if settleAmount <= 0 {
  1711. settleAmount = 0.0
  1712. }
  1713. realPayment := taskInfo.AllPayment * (1.0 - float64(scriptErrRate)/100)
  1714. if realPayment <= 0 {
  1715. realPayment = 0.0
  1716. }
  1717. db3 := GetReadDB(context.Background())
  1718. err3 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(
  1719. map[string]interface{}{
  1720. "cur_default_type": 1,
  1721. "sketch_break_rate": scriptDefaultRate,
  1722. "settle_amount": settleAmount,
  1723. "err_break_rate": scriptErrRate,
  1724. "real_payment": realPayment,
  1725. }).Error
  1726. if err3 != nil {
  1727. return err3
  1728. }
  1729. err = CreateTaskLog(context.Background(), submitVideoTaskNeedModId, "脚本逾期")
  1730. if err != nil {
  1731. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1732. }
  1733. err = CreateMessageByTaskId(context.Background(), 21, 4, submitVideoTaskNeedModId)
  1734. if err != nil {
  1735. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1736. }
  1737. fmt.Println("创建已提交脚本的视频类型的脚本违约记录")
  1738. }
  1739. }
  1740. }
  1741. return nil
  1742. }
  1743. // GetAutoLinkBreachTask 链接超时违约判断
  1744. func GetAutoLinkBreachTask() error {
  1745. db := GetReadDB(context.Background())
  1746. var projectInfos []*gorm_model.ProjectInfo
  1747. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
  1748. if err != nil {
  1749. return err
  1750. }
  1751. var projectIds []string
  1752. // 任务id 对 项目id 的map
  1753. taskIdToProjectIdMap := map[string]string{}
  1754. // 项目id 对 定时任务id 的map
  1755. projectIdToAutoTaskIdMap := map[string]int{}
  1756. // 项目id 对 违约定时任务id 的map
  1757. projectIdToAutoDefaultIdMap := map[string]int{}
  1758. var taskIds []string
  1759. // taskId 对 稿费形式的 map
  1760. taskIdToFeeFormMap := make(map[string]int)
  1761. for _, projectInfo := range projectInfos {
  1762. projectIds = append(projectIds, projectInfo.ProjectID)
  1763. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  1764. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  1765. var taskInfos []*gorm_model.YoungeeTaskInfo
  1766. db1 := GetReadDB(context.Background())
  1767. 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)
  1768. for _, taskInfo := range taskInfos {
  1769. taskIdToProjectIdMap[taskInfo.TaskId] = projectInfo.ProjectID
  1770. taskIds = append(taskIds, taskInfo.TaskId)
  1771. taskIdToFeeFormMap[taskInfo.TaskId] = taskInfo.FeeForm
  1772. }
  1773. }
  1774. // 首次提交链接的任务记录id
  1775. var taskNeedModIds []string
  1776. // 已提交链接的任务记录id
  1777. var submitTaskNeedModIds []string
  1778. for _, taskId := range taskIds {
  1779. var taskInfo gorm_model.YoungeeTaskInfo
  1780. db3 := GetReadDB(context.Background())
  1781. // 保存所有链接上传状态为 1 且任务状态为12 的任务记录的id
  1782. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
  1783. if taskInfo.LinkStatus == 1 && taskInfo.TaskStage == 11 {
  1784. taskNeedModIds = append(taskNeedModIds, taskId)
  1785. }
  1786. // 保存所有链接上传状态为 3 且任务状态为12 的任务记录的id
  1787. if taskInfo.LinkStatus == 3 && taskInfo.TaskStage == 11 {
  1788. submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
  1789. }
  1790. }
  1791. for _, taskNeedModId := range taskNeedModIds {
  1792. db2 := GetReadDB(context.Background())
  1793. var linkBreach int32
  1794. db2.Model(&gorm_model.InfoAutoTask{}).Select("link_breach").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&linkBreach)
  1795. dd, _ := time.ParseDuration(conv.MustString(linkBreach, "") + "h")
  1796. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1797. db6 := GetReadDB(context.Background())
  1798. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
  1799. var linkDefaultRate int
  1800. var linkErrRate int
  1801. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  1802. linkDefaultRate = autoDefaultHandle.LinkReplaceTimeOut
  1803. linkErrRate = autoDefaultHandle.LinkReplaceNotUpload
  1804. // db6 := GetReadDB(context.Background())
  1805. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out", "link_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  1806. } else {
  1807. linkDefaultRate = autoDefaultHandle.LinkOtherTimeOut
  1808. linkErrRate = autoDefaultHandle.LinkOtherNotUpload
  1809. // db6 := GetReadDB(context.Background())
  1810. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out", "link_other_not_uploadsg").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  1811. }
  1812. db1 := GetReadDB(context.Background())
  1813. var taskSketchInfo gorm_model.YounggeeSketchInfo
  1814. db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskSketchInfo)
  1815. if taskSketchInfo.AutoLinkBreakAt.IsZero() {
  1816. db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoLinkBreakAt: taskSketchInfo.AgreeAt.Add(dd)})
  1817. fmt.Println("已添加链接违约自动处理时间")
  1818. if taskSketchInfo.TaskID != "" && taskSketchInfo.AgreeAt.Add(dd).Sub(time.Now()) <= 0 {
  1819. db4 := GetReadDB(context.Background())
  1820. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1821. TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1822. if err1 != nil {
  1823. return err1
  1824. }
  1825. taskInfo := gorm_model.YoungeeTaskInfo{}
  1826. dbt := GetReadDB(context.Background())
  1827. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  1828. if err2 != nil {
  1829. return err2
  1830. }
  1831. settleAmount := taskInfo.TaskReward * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  1832. if settleAmount <= 0 {
  1833. settleAmount = 0.0
  1834. }
  1835. realPayment := taskInfo.AllPayment * (1.0 - float64(linkErrRate)/100)
  1836. if realPayment <= 0 {
  1837. realPayment = 0.0
  1838. }
  1839. db3 := GetReadDB(context.Background())
  1840. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  1841. map[string]interface{}{
  1842. "cur_default_type": 5,
  1843. "link_break_rate": linkDefaultRate,
  1844. "settle_amount": settleAmount,
  1845. "err_break_rate": linkErrRate,
  1846. "real_payment": realPayment,
  1847. }).Error
  1848. if err2 != nil {
  1849. return err2
  1850. }
  1851. err = CreateTaskLog(context.Background(), taskNeedModId, "链接逾期")
  1852. if err != nil {
  1853. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1854. }
  1855. err = CreateMessageByTaskId(context.Background(), 23, 4, taskNeedModId)
  1856. if err != nil {
  1857. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1858. }
  1859. fmt.Println("创建时已违约则创建链接违约记录")
  1860. }
  1861. } else {
  1862. if taskSketchInfo.TaskID != "" && taskSketchInfo.AutoLinkBreakAt.Sub(time.Now()) <= 0 {
  1863. db4 := GetReadDB(context.Background())
  1864. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1865. TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1866. if err1 != nil {
  1867. return err1
  1868. }
  1869. taskInfo := gorm_model.YoungeeTaskInfo{}
  1870. dbt := GetReadDB(context.Background())
  1871. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  1872. if err2 != nil {
  1873. return err2
  1874. }
  1875. settleAmount := taskInfo.TaskReward * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  1876. if settleAmount <= 0 {
  1877. settleAmount = 0.0
  1878. }
  1879. realPayment := taskInfo.AllPayment * (1.0 - float64(linkErrRate)/100)
  1880. if realPayment <= 0 {
  1881. realPayment = 0.0
  1882. }
  1883. db3 := GetReadDB(context.Background())
  1884. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  1885. map[string]interface{}{
  1886. "cur_default_type": 5,
  1887. "link_break_rate": linkDefaultRate,
  1888. "settle_amount": settleAmount,
  1889. "err_break_rate": linkErrRate,
  1890. "real_payment": realPayment,
  1891. }).Error
  1892. if err2 != nil {
  1893. return err2
  1894. }
  1895. err = CreateTaskLog(context.Background(), taskNeedModId, "链接逾期")
  1896. if err != nil {
  1897. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1898. }
  1899. err = CreateMessageByTaskId(context.Background(), 23, 4, taskNeedModId)
  1900. if err != nil {
  1901. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1902. }
  1903. fmt.Println("已创建链接违约记录")
  1904. }
  1905. }
  1906. }
  1907. // 根据最近一次拒绝时间判断当前是否违约
  1908. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  1909. db2 := GetReadDB(context.Background())
  1910. var LinkBreach int32
  1911. db2.Model(&gorm_model.InfoAutoTask{}).Select("link_breach").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
  1912. dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
  1913. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  1914. db6 := GetReadDB(context.Background())
  1915. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  1916. var linkDefaultRate int
  1917. var linkErrRate int
  1918. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  1919. linkDefaultRate = autoDefaultHandle.LinkReplaceTimeOut
  1920. linkErrRate = autoDefaultHandle.LinkReplaceNotUpload
  1921. // db6 := GetReadDB(context.Background())
  1922. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out", "link_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  1923. } else {
  1924. linkDefaultRate = autoDefaultHandle.LinkOtherTimeOut
  1925. linkErrRate = autoDefaultHandle.LinkOtherNotUpload
  1926. // db6 := GetReadDB(context.Background())
  1927. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out", "link_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
  1928. }
  1929. db1 := GetReadDB(context.Background())
  1930. var taskLinkInfo gorm_model.YounggeeLinkInfo
  1931. db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ?", submitTaskNeedModId).Order("reject_at desc").First(&taskLinkInfo)
  1932. if taskLinkInfo.AutoLinkBreakAt.IsZero() {
  1933. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoLinkBreakAt: taskLinkInfo.RejectAt.Add(dd)}).Error
  1934. if err4 != nil {
  1935. return err4
  1936. }
  1937. fmt.Println("已添加链接违约自动处理时间")
  1938. if taskLinkInfo.TaskID != "" && taskLinkInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
  1939. db4 := GetReadDB(context.Background())
  1940. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1941. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1942. if err1 != nil {
  1943. return err1
  1944. }
  1945. taskInfo := gorm_model.YoungeeTaskInfo{}
  1946. dbt := GetReadDB(context.Background())
  1947. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  1948. if err2 != nil {
  1949. return err2
  1950. }
  1951. settleAmount := taskInfo.TaskReward * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  1952. if settleAmount <= 0 {
  1953. settleAmount = 0.0
  1954. }
  1955. realPayment := taskInfo.AllPayment * (1.0 - float64(linkErrRate)/100)
  1956. if realPayment <= 0 {
  1957. realPayment = 0.0
  1958. }
  1959. db3 := GetReadDB(context.Background())
  1960. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  1961. map[string]interface{}{
  1962. "cur_default_type": 5,
  1963. "link_break_rate": linkDefaultRate,
  1964. "settle_amount": settleAmount,
  1965. "err_break_rate": linkErrRate,
  1966. "real_payment": realPayment,
  1967. }).Error
  1968. if err2 != nil {
  1969. return err2
  1970. }
  1971. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "链接逾期")
  1972. if err != nil {
  1973. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  1974. }
  1975. err = CreateMessageByTaskId(context.Background(), 23, 4, submitTaskNeedModId)
  1976. if err != nil {
  1977. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  1978. }
  1979. fmt.Println("创建时已违约则创建已提交链接的链接违约记录")
  1980. }
  1981. } else {
  1982. if taskLinkInfo.TaskID != "" && taskLinkInfo.AutoLinkBreakAt.Sub(time.Now()) <= 0 {
  1983. db4 := GetReadDB(context.Background())
  1984. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  1985. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
  1986. if err1 != nil {
  1987. return err1
  1988. }
  1989. taskInfo := gorm_model.YoungeeTaskInfo{}
  1990. dbt := GetReadDB(context.Background())
  1991. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  1992. if err2 != nil {
  1993. return err2
  1994. }
  1995. settleAmount := taskInfo.TaskReward * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
  1996. if settleAmount <= 0 {
  1997. settleAmount = 0.0
  1998. }
  1999. realPayment := taskInfo.AllPayment * (1.0 - float64(linkErrRate)/100)
  2000. if realPayment <= 0 {
  2001. realPayment = 0.0
  2002. }
  2003. db3 := GetReadDB(context.Background())
  2004. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  2005. map[string]interface{}{
  2006. "cur_default_type": 5,
  2007. "sketch_break_rate": linkDefaultRate,
  2008. "settle_amount": settleAmount,
  2009. "err_break_rate": linkErrRate,
  2010. "real_payment": realPayment,
  2011. }).Error
  2012. if err2 != nil {
  2013. return err2
  2014. }
  2015. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "链接逾期")
  2016. if err != nil {
  2017. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  2018. }
  2019. err = CreateMessageByTaskId(context.Background(), 23, 4, submitTaskNeedModId)
  2020. if err != nil {
  2021. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  2022. }
  2023. fmt.Println("创建已提交链接的链接违约记录")
  2024. }
  2025. }
  2026. }
  2027. return nil
  2028. }
  2029. // GetAutoCaseCloseDefaultTask 数据超时违约判断
  2030. func GetAutoCaseCloseDefaultTask() error {
  2031. db := GetReadDB(context.Background())
  2032. var projectInfos []*gorm_model.ProjectInfo
  2033. err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
  2034. if err != nil {
  2035. return err
  2036. }
  2037. var projectIds []string
  2038. // 任务id 对 项目id 的map
  2039. taskIdToProjectIdMap := map[string]string{}
  2040. // 项目id 对 定时任务id 的map
  2041. projectIdToAutoTaskIdMap := map[string]int{}
  2042. // 项目id 对 违约定时任务id 的map
  2043. projectIdToAutoDefaultIdMap := map[string]int{}
  2044. var taskIds []string
  2045. for _, projectInfo := range projectInfos {
  2046. projectIds = append(projectIds, projectInfo.ProjectID)
  2047. projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
  2048. projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
  2049. var taskInfos []string
  2050. db1 := GetReadDB(context.Background())
  2051. 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)
  2052. for _, taskInfo := range taskInfos {
  2053. taskIdToProjectIdMap[taskInfo] = projectInfo.ProjectID
  2054. taskIds = append(taskIds, taskInfo)
  2055. }
  2056. }
  2057. // 首次提交链接的任务记录id
  2058. var taskNeedModIds []string
  2059. // 已提交链接的任务记录id
  2060. var submitTaskNeedModIds []string
  2061. // taskId 对 稿费形式的 map
  2062. taskIdToFeeFormMap := make(map[string]int)
  2063. for _, taskId := range taskIds {
  2064. var taskInfo gorm_model.YoungeeTaskInfo
  2065. db3 := GetReadDB(context.Background())
  2066. // 保存所有数据上传状态为 1 且任务状态为14 的任务记录的id
  2067. db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
  2068. if taskInfo.DataStatus == 1 && taskInfo.TaskStage == 13 {
  2069. taskNeedModIds = append(taskNeedModIds, taskId)
  2070. }
  2071. // 保存所有数据上传状态为 3 且任务状态为14 的任务记录的id
  2072. if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 13 {
  2073. submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
  2074. }
  2075. taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
  2076. }
  2077. for _, taskNeedModId := range taskNeedModIds {
  2078. db2 := GetReadDB(context.Background())
  2079. var CaseCloseDefault int32
  2080. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&CaseCloseDefault)
  2081. dd, _ := time.ParseDuration(conv.MustString(CaseCloseDefault, "") + "h")
  2082. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  2083. db6 := GetReadDB(context.Background())
  2084. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
  2085. var dataDefaultRate int
  2086. var dataErrRate int
  2087. if taskIdToFeeFormMap[taskNeedModId] == 1 {
  2088. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  2089. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  2090. // db6 := GetReadDB(context.Background())
  2091. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  2092. } else {
  2093. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  2094. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  2095. // db6 := GetReadDB(context.Background())
  2096. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  2097. }
  2098. //fmt.Println("dataDefaultRate:", dataDefaultRate)
  2099. db1 := GetReadDB(context.Background())
  2100. var taskLinkInfo gorm_model.YounggeeLinkInfo
  2101. db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskLinkInfo)
  2102. if taskLinkInfo.AutoDataBreakAt.IsZero() {
  2103. db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoDataBreakAt: taskLinkInfo.AgreeAt.Add(dd)})
  2104. fmt.Println("已添加数据违约自动处理时间")
  2105. if taskLinkInfo.TaskID != "" && taskLinkInfo.AgreeAt.Add(dd).Sub(time.Now()) <= 0 {
  2106. db4 := GetReadDB(context.Background())
  2107. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  2108. TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  2109. if err1 != nil {
  2110. return err1
  2111. }
  2112. taskInfo := gorm_model.YoungeeTaskInfo{}
  2113. dbt := GetReadDB(context.Background())
  2114. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  2115. if err2 != nil {
  2116. return err2
  2117. }
  2118. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  2119. if settleAmount <= 0 {
  2120. settleAmount = 0.0
  2121. }
  2122. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  2123. if realPayment <= 0 {
  2124. realPayment = 0.0
  2125. }
  2126. db3 := GetReadDB(context.Background())
  2127. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  2128. map[string]interface{}{
  2129. "cur_default_type": 7,
  2130. "data_break_rate": dataDefaultRate,
  2131. "settle_amount": settleAmount,
  2132. "err_break_rate": dataErrRate,
  2133. "real_payment": realPayment,
  2134. }).Error
  2135. if err2 != nil {
  2136. return err2
  2137. }
  2138. err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
  2139. if err != nil {
  2140. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  2141. }
  2142. err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
  2143. if err != nil {
  2144. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  2145. }
  2146. fmt.Println("创建时已违约则创建数据违约记录")
  2147. }
  2148. } else {
  2149. if taskLinkInfo.TaskID != "" && taskLinkInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
  2150. db4 := GetReadDB(context.Background())
  2151. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  2152. TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  2153. if err1 != nil {
  2154. return err1
  2155. }
  2156. taskInfo := gorm_model.YoungeeTaskInfo{}
  2157. dbt := GetReadDB(context.Background())
  2158. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
  2159. if err2 != nil {
  2160. return err2
  2161. }
  2162. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  2163. if settleAmount <= 0 {
  2164. settleAmount = 0.0
  2165. }
  2166. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  2167. if realPayment <= 0 {
  2168. realPayment = 0.0
  2169. }
  2170. fmt.Println("settleAmount: ", settleAmount)
  2171. db3 := GetReadDB(context.Background())
  2172. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
  2173. map[string]interface{}{
  2174. "cur_default_type": 7,
  2175. "sketch_break_rate": dataDefaultRate,
  2176. "settle_amount": settleAmount,
  2177. "err_break_rate": dataErrRate,
  2178. "real_payment": realPayment,
  2179. }).Error
  2180. if err2 != nil {
  2181. return err2
  2182. }
  2183. err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
  2184. if err != nil {
  2185. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  2186. }
  2187. err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
  2188. if err != nil {
  2189. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  2190. }
  2191. fmt.Println("已创建数据违约记录")
  2192. }
  2193. }
  2194. }
  2195. // 根据最近一次拒绝时间判断当前是否违约
  2196. for _, submitTaskNeedModId := range submitTaskNeedModIds {
  2197. db2 := GetReadDB(context.Background())
  2198. var LinkBreach int32
  2199. db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
  2200. dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
  2201. autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
  2202. db6 := GetReadDB(context.Background())
  2203. db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
  2204. var dataDefaultRate int
  2205. var dataErrRate int
  2206. if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
  2207. dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
  2208. dataErrRate = autoDefaultHandle.DataReplaceNotUpload
  2209. // db6 := GetReadDB(context.Background())
  2210. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  2211. } else {
  2212. dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
  2213. dataErrRate = autoDefaultHandle.DataOtherNotUpload
  2214. // db6 := GetReadDB(context.Background())
  2215. // db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
  2216. }
  2217. db1 := GetReadDB(context.Background())
  2218. var taskDataInfo gorm_model.YounggeeDataInfo
  2219. db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 1", submitTaskNeedModId).Order("reject_at desc").First(&taskDataInfo)
  2220. if taskDataInfo.AutoDataBreakAt.IsZero() {
  2221. err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeDataInfo{AutoDataBreakAt: taskDataInfo.RejectAt.Add(dd)}).Error
  2222. if err4 != nil {
  2223. return err4
  2224. }
  2225. fmt.Println("已添加数据违约自动处理时间")
  2226. if taskDataInfo.TaskID != "" && taskDataInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
  2227. db4 := GetReadDB(context.Background())
  2228. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  2229. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  2230. if err1 != nil {
  2231. return err1
  2232. }
  2233. taskInfo := gorm_model.YoungeeTaskInfo{}
  2234. dbt := GetReadDB(context.Background())
  2235. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  2236. if err2 != nil {
  2237. return err2
  2238. }
  2239. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  2240. if settleAmount <= 0 {
  2241. settleAmount = 0.0
  2242. }
  2243. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  2244. if realPayment <= 0 {
  2245. realPayment = 0.0
  2246. }
  2247. db3 := GetReadDB(context.Background())
  2248. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  2249. map[string]interface{}{
  2250. "cur_default_type": 7,
  2251. "data_break_rate": dataDefaultRate,
  2252. "settle_amount": settleAmount,
  2253. "err_break_rate": dataErrRate,
  2254. "real_payment": realPayment,
  2255. }).Error
  2256. if err2 != nil {
  2257. return err2
  2258. }
  2259. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
  2260. if err != nil {
  2261. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  2262. }
  2263. err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
  2264. if err != nil {
  2265. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  2266. }
  2267. fmt.Println("创建时已违约则创建已提交数据的数据违约记录")
  2268. }
  2269. } else {
  2270. if taskDataInfo.TaskID != "" && taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
  2271. db4 := GetReadDB(context.Background())
  2272. err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
  2273. TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
  2274. if err1 != nil {
  2275. return err1
  2276. }
  2277. taskInfo := gorm_model.YoungeeTaskInfo{}
  2278. dbt := GetReadDB(context.Background())
  2279. err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
  2280. if err2 != nil {
  2281. return err2
  2282. }
  2283. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
  2284. if settleAmount <= 0 {
  2285. settleAmount = 0.0
  2286. }
  2287. realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
  2288. if realPayment <= 0 {
  2289. realPayment = 0.0
  2290. }
  2291. db3 := GetReadDB(context.Background())
  2292. err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
  2293. map[string]interface{}{
  2294. "cur_default_type": 7,
  2295. "data_break_rate": dataDefaultRate,
  2296. "settle_amount": settleAmount,
  2297. "err_break_rate": dataErrRate,
  2298. "real_payment": realPayment,
  2299. }).Error
  2300. if err2 != nil {
  2301. return err2
  2302. }
  2303. err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
  2304. if err != nil {
  2305. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
  2306. }
  2307. err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
  2308. if err != nil {
  2309. logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
  2310. }
  2311. fmt.Println("创建已提交数据的数据违约记录")
  2312. }
  2313. }
  2314. }
  2315. return nil
  2316. }
  2317. func GetHours(ctx context.Context) (*http_model.Hours, error) {
  2318. db := GetReadDB(ctx)
  2319. infoAuto := gorm_model.InfoAutoTask{}
  2320. err := db.Model(gorm_model.InfoAutoTask{}).Last(&infoAuto).Error
  2321. if err != nil {
  2322. return nil, err
  2323. }
  2324. Hours := http_model.Hours{}
  2325. Hours.DraftDefaultInPic = infoAuto.DraftDefaultInPic
  2326. Hours.DraftDefaultInMv = infoAuto.DraftDefaultInMv
  2327. Hours.ScriptDefault = infoAuto.ScriptDefault
  2328. Hours.Invalid = infoAuto.Invalid
  2329. Hours.LinkBreach = infoAuto.LinkBreach
  2330. Hours.CaseClose = infoAuto.CaseClose
  2331. Hours.CaseCloseDefault = infoAuto.CaseCloseDefault
  2332. Hours.ReviewInMv = infoAuto.ReviewInMv
  2333. Hours.ReviewUnlimited = infoAuto.ReviewUnlimited
  2334. Hours.PostReview = infoAuto.Postreview
  2335. Hours.SignInVirtual = infoAuto.SignInVirtual
  2336. Hours.SignInOffline = infoAuto.SignInOffline
  2337. return &Hours, err
  2338. }
  2339. func GetPercents(ctx context.Context) (*http_model.Percents, error) {
  2340. db := GetReadDB(ctx)
  2341. percentsInfo := gorm_model.InfoAutoDefaultHandle{}
  2342. err := db.Model(gorm_model.InfoAutoDefaultHandle{}).Last(&percentsInfo).Error
  2343. if err != nil {
  2344. return nil, err
  2345. }
  2346. Percents := http_model.Percents{}
  2347. Percents.DataReplaceNotUpload = percentsInfo.DataReplaceNotUpload
  2348. Percents.DataReplaceTimeOut = percentsInfo.DataReplaceTimeOut
  2349. Percents.DataOtherTimeOut = percentsInfo.DataOtherTimeOut
  2350. Percents.DataOtherNotUpload = percentsInfo.DataOtherNotUpload
  2351. Percents.LinkReplaceTimeOut = percentsInfo.LinkReplaceTimeOut
  2352. Percents.LinkReplaceNotUpload = percentsInfo.LinkReplaceNotUpload
  2353. Percents.LinkOtherTimeOut = percentsInfo.LinkOtherTimeOut
  2354. Percents.LinkOtherNotUpload = percentsInfo.LinkOtherNotUpload
  2355. Percents.ScriptReplaceTimeOut = percentsInfo.ScriptReplaceTimeOut
  2356. Percents.ScriptReplaceNotUpload = percentsInfo.ScriptReplaceNotUpload
  2357. Percents.ScriptOtherNotUpload = percentsInfo.ScriptOtherNotUpload
  2358. Percents.ScriptOtherTimeOut = percentsInfo.ScriptOtherTimeOut
  2359. Percents.SketchReplaceTimeOut = percentsInfo.SketchReplaceTimeOut
  2360. Percents.SketchOtherNotUpload = percentsInfo.SketchOtherNotUpload
  2361. Percents.SketchOtherTimeOut = percentsInfo.SketchOtherTimeOut
  2362. Percents.SketchReplaceNotUpload = percentsInfo.SketchReplaceNotUpload
  2363. return &Percents, err
  2364. }