default.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. "reflect"
  6. "strings"
  7. "time"
  8. "youngee_m_api/consts"
  9. "youngee_m_api/model/common_model"
  10. "youngee_m_api/model/gorm_model"
  11. "youngee_m_api/model/http_model"
  12. "youngee_m_api/pack"
  13. "youngee_m_api/util"
  14. "github.com/caixw/lib.go/conv"
  15. "github.com/sirupsen/logrus"
  16. "gorm.io/gorm"
  17. )
  18. func CountDefaultNum(ctx context.Context) (error, *http_model.CountNumOfDefaultsResponse) {
  19. db := GetReadDB(ctx)
  20. var contractInfos []gorm_model.YoungeeContractInfo
  21. err := db.Debug().Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 3").Find(&contractInfos).Error
  22. if err != nil {
  23. return err, nil
  24. }
  25. DraftDefaultNum, ScriptDefaultNum, LinkDefaultNum, DataDefaultNum := 0, 0, 0, 0
  26. for _, contractInfo := range contractInfos {
  27. if contractInfo.BreakType == 1 {
  28. ScriptDefaultNum++
  29. } else if contractInfo.BreakType == 2 {
  30. DraftDefaultNum++
  31. } else if contractInfo.BreakType == 3 {
  32. LinkDefaultNum++
  33. } else {
  34. DataDefaultNum++
  35. }
  36. }
  37. data := &http_model.CountNumOfDefaultsResponse{}
  38. data.ScriptDefaultNum = int32(ScriptDefaultNum)
  39. data.DraftDefaultNum = int32(DraftDefaultNum)
  40. data.LinkDefaultNum = int32(LinkDefaultNum)
  41. data.DataDefaultNum = int32(DataDefaultNum)
  42. return nil, data
  43. }
  44. func BreachPending(ctx context.Context, pageSize, pageNum int32, req *http_model.BreachPendingRequest) (*http_model.BreachPendingData, error) {
  45. db := GetReadDB(ctx)
  46. var contractInfos []*gorm_model.YoungeeContractInfo
  47. db = db.Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 3")
  48. if req.DefaultType != 0 {
  49. db = db.Where("break_type = ?", req.DefaultType)
  50. }
  51. if req.TaskId != "" {
  52. db = db.Where("task_id = ?", req.TaskId)
  53. }
  54. var findProjectIds []int64
  55. if req.ProjectName != "" {
  56. db1 := GetReadDB(ctx)
  57. db1.Model(gorm_model.ProjectInfo{}).Select("project_id").Where("project_name = ?", req.ProjectName).Find(&findProjectIds)
  58. var findTaskIds []int
  59. db2 := GetReadDB(ctx)
  60. db2.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id IN ?", findProjectIds).Find(&findTaskIds)
  61. db = db.Where("task_id IN ?", findTaskIds)
  62. }
  63. // 查询总数
  64. var total int64
  65. if err := db.Count(&total).Error; err != nil {
  66. logrus.WithContext(ctx).Errorf("[BreachPending] error query mysql total, err:%+v", err)
  67. return nil, err
  68. }
  69. // 查询该页数据
  70. limit := pageSize
  71. offset := pageSize * pageNum // assert pageNum start with 0
  72. err := db.Order("terminate_at").Limit(int(limit)).Offset(int(offset)).Find(&contractInfos).Error
  73. if err != nil {
  74. logrus.WithContext(ctx).Errorf("[BreachPending] error query mysql total, err:%+v", err)
  75. return nil, err
  76. }
  77. var taskIds []string
  78. for _, contractInfo := range contractInfos {
  79. taskIds = append(taskIds, contractInfo.TaskID)
  80. }
  81. taskIds = util.RemoveStrRepByMap(taskIds)
  82. taskIdToProjectMap := make(map[string]string)
  83. taskIdToTalentIdMap := make(map[string]string)
  84. taskIdToTaskInfoMap := make(map[string]gorm_model.YoungeeTaskInfo)
  85. var projectIds []string
  86. for _, taskId := range taskIds {
  87. db1 := GetReadDB(ctx)
  88. var taskInfo gorm_model.YoungeeTaskInfo
  89. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo)
  90. taskIdToProjectMap[taskId] = taskInfo.ProjectId
  91. taskIdToTalentIdMap[taskId] = taskInfo.TalentId
  92. taskIdToTaskInfoMap[taskId] = taskInfo
  93. projectIds = append(projectIds, taskInfo.ProjectId)
  94. }
  95. projectIds = util.RemoveStrRepByMap(projectIds)
  96. var enterpriseIds []string
  97. projectIdToProjectInfoMap := make(map[string]gorm_model.ProjectInfo)
  98. for _, projectId := range projectIds {
  99. db1 := GetReadDB(ctx)
  100. projectInfo := gorm_model.ProjectInfo{}
  101. db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectInfo)
  102. projectIdToProjectInfoMap[projectInfo.ProjectID] = projectInfo
  103. enterpriseIds = append(enterpriseIds, projectInfo.EnterpriseID)
  104. }
  105. enterpriseIds = util.RemoveStrRepByMap(enterpriseIds)
  106. enterpriseIdToUserId := make(map[string]int64)
  107. var userIds []int64
  108. for _, enterpriseId := range enterpriseIds {
  109. db1 := GetReadDB(ctx)
  110. var userId int64
  111. db1.Model(gorm_model.Enterprise{}).Select("user_id").Where("enterprise_id = ?", enterpriseId).Find(&userId)
  112. enterpriseIdToUserId[enterpriseId] = userId
  113. userIds = append(userIds, userId)
  114. }
  115. userIdToUserPhone := make(map[int64]string)
  116. for _, userId := range userIds {
  117. db1 := GetReadDB(ctx)
  118. var userPhone string
  119. db1.Model(gorm_model.YounggeeUser{}).Select("phone").Where("id = ?", userId).Find(&userPhone)
  120. userIdToUserPhone[userId] = userPhone
  121. }
  122. talentIdToTalentPhoneMap := make(map[string]string)
  123. for _, v := range taskIdToTalentIdMap {
  124. if len(talentIdToTalentPhoneMap) == 0 {
  125. db1 := GetReadDB(ctx)
  126. var talentPhoneNumber string
  127. db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
  128. talentIdToTalentPhoneMap[v] = talentPhoneNumber
  129. }
  130. if _, ok := talentIdToTalentPhoneMap[v]; !ok {
  131. db1 := GetReadDB(ctx)
  132. var talentPhoneNumber string
  133. db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
  134. talentIdToTalentPhoneMap[v] = talentPhoneNumber
  135. }
  136. }
  137. taskIdToDefaultInfo := make(map[string]string)
  138. if req.DefaultType == 4 {
  139. for _, taskId := range taskIds {
  140. db1 := GetReadDB(ctx)
  141. var link string
  142. db1.Debug().Model(gorm_model.YounggeeLinkInfo{}).Select("link_url").Where("task_id = ? AND is_ok = 1", taskId).Find(&link)
  143. taskIdToDefaultInfo[taskId] = link
  144. }
  145. }
  146. var BreachPendingPreviews []*http_model.BreachPendingPreview
  147. for _, contractInfo := range contractInfos {
  148. BreachPendingPreview := new(http_model.BreachPendingPreview)
  149. BreachPendingPreview.ContractId = int32(contractInfo.ContractID)
  150. BreachPendingPreview.ProjectId = taskIdToProjectMap[contractInfo.TaskID]
  151. BreachPendingPreview.UserId = projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].EnterpriseID
  152. BreachPendingPreview.ProjectName = projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].ProjectName
  153. BreachPendingPreview.UserPhone = userIdToUserPhone[enterpriseIdToUserId[projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].EnterpriseID]]
  154. BreachPendingPreview.TaskId = contractInfo.TaskID
  155. BreachPendingPreview.TalentId = taskIdToTalentIdMap[contractInfo.TaskID]
  156. BreachPendingPreview.TalentPhone = talentIdToTalentPhoneMap[taskIdToTalentIdMap[contractInfo.TaskID]]
  157. BreachPendingPreview.LinkInfo = taskIdToDefaultInfo[contractInfo.TaskID]
  158. BreachPendingPreview.Price = taskIdToTaskInfoMap[contractInfo.TaskID].AllPayment
  159. BreachPendingPreview.SettlementAmount = taskIdToTaskInfoMap[contractInfo.TaskID].RealPayment
  160. BreachPendingPreview.DefaultAt = conv.MustString(contractInfo.BreakAt, "")[0:19]
  161. BreachPendingPreview.TerminateAt = conv.MustString(contractInfo.TerminateAt, "")[0:19]
  162. BreachPendingPreviews = append(BreachPendingPreviews, BreachPendingPreview)
  163. }
  164. var BreachPendingData http_model.BreachPendingData
  165. BreachPendingData.BreachPendingPreview = BreachPendingPreviews
  166. BreachPendingData.Total = total
  167. return &BreachPendingData, nil
  168. }
  169. func ContractBreach(ctx context.Context, req *http_model.ContractBreachRequest) error {
  170. db := GetReadDB(ctx)
  171. var breakType int
  172. db.Model(gorm_model.YoungeeContractInfo{}).Select("break_type").Where("contract_id IN ?", req.ContractIds).Find(&breakType)
  173. t := time.Now()
  174. err := db.Debug().Where("contract_id IN ?", req.ContractIds).Updates(&gorm_model.YoungeeContractInfo{DefaultStatus: int(req.DefaultStatus), HandleAt: &t}).Error
  175. if err != nil {
  176. logrus.WithContext(ctx).Errorf("[ContractBreach] error query mysql total, err:%+v", err)
  177. return err
  178. }
  179. var taskIds []string
  180. db.Model(gorm_model.YoungeeContractInfo{}).Select("task_id").Where("contract_id IN ?", req.ContractIds).Find(&taskIds)
  181. for _, taskId := range taskIds {
  182. if req.DefaultStatus == 5 {
  183. var taskInfo gorm_model.YoungeeTaskInfo
  184. var enterpriseId string
  185. db1 := GetReadDB(ctx)
  186. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo)
  187. db2 := GetReadDB(ctx)
  188. db2.Model(gorm_model.ProjectInfo{}).Select("enterprise_id").Where("project_id = ?", taskInfo.ProjectId).Find(&enterpriseId)
  189. db3 := GetReadDB(ctx)
  190. err := db3.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", enterpriseId).Updates(
  191. map[string]interface{}{
  192. "frozen_balance": gorm.Expr("frozen_balance - ?", taskInfo.RealPayment),
  193. "available_balance": gorm.Expr("available_balance + ?", taskInfo.RealPayment)}).Error
  194. if err != nil {
  195. logrus.WithContext(ctx).Errorf("[ContractBreach] error update Enterprise, err:%+v", err)
  196. return err
  197. }
  198. db4 := GetReadDB(ctx)
  199. if breakType == 1 {
  200. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  201. map[string]interface{}{
  202. "cur_default_type": 2,
  203. "task_stage": 16,
  204. "script_break_rate": 0}).Error
  205. taskInfo.ScriptBreakRate = 0
  206. } else if breakType == 2 {
  207. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  208. map[string]interface{}{
  209. "cur_default_type": 4,
  210. "task_stage": 16,
  211. "sketch_break_rate": 0}).Error
  212. taskInfo.SketchBreakRate = 0
  213. } else if breakType == 3 {
  214. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  215. map[string]interface{}{
  216. "cur_default_type": 6,
  217. "task_stage": 16,
  218. "link_break_rate": 0}).Error
  219. taskInfo.LinkBreakRate = 0
  220. } else if breakType == 4 {
  221. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  222. map[string]interface{}{
  223. "cur_default_type": 8,
  224. "task_stage": 16,
  225. "data_break_rate": 0}).Error
  226. taskInfo.DataBreakRate = 0
  227. }
  228. if err != nil {
  229. logrus.WithContext(ctx).Errorf("[ContractBreach] error update YoungeeTaskInfo, err:%+v", err)
  230. return err
  231. }
  232. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate+taskInfo.ErrBreakRate)/100)
  233. if settleAmount <= 0 {
  234. settleAmount = 0.0
  235. }
  236. db5 := GetReadDB(ctx)
  237. err = db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  238. map[string]interface{}{"settle_amount": settleAmount}).Error
  239. if err != nil {
  240. logrus.WithContext(ctx).Errorf("[ContractBreach] error update YoungeeTaskInfo, err:%+v", err)
  241. return err
  242. }
  243. err = SetProjectFinish(context.Background(), taskInfo.ProjectId)
  244. if err != nil {
  245. logrus.WithContext(ctx).Errorf("[ContractBreach] call SetProjectFinish error, err:%+v", err)
  246. return err
  247. }
  248. } else {
  249. db4 := GetReadDB(ctx)
  250. if breakType == 1 {
  251. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 1}).Error
  252. } else if breakType == 2 {
  253. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 3}).Error
  254. } else if breakType == 3 {
  255. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 5}).Error
  256. } else if breakType == 4 {
  257. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 7}).Error
  258. }
  259. if err != nil {
  260. logrus.WithContext(ctx).Errorf("[ContractBreach] error update YoungeeTaskInfo, err:%+v", err)
  261. return err
  262. }
  263. }
  264. }
  265. if req.DefaultStatus == 5 {
  266. err = SetTalentIncome(context.Background(), taskIds)
  267. if err != nil {
  268. logrus.WithContext(ctx).Errorf("[ContractBreach] call SetTalentIncome error, err:%+v", err)
  269. return err
  270. }
  271. }
  272. return nil
  273. }
  274. func GetSketchInfoByTaskId(ctx context.Context, request *http_model.GetSketchInfoByTaskIdRequest) (*http_model.SketchInfoResponse, error) {
  275. db := GetReadDB(ctx)
  276. var sketchInfo gorm_model.YounggeeSketchInfo
  277. db.Debug().Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = 1", request.TaskId).Find(&sketchInfo)
  278. db2 := GetReadDB(ctx)
  279. sketchPhotoInfo := gorm_model.YounggeeSketchPhoto{}
  280. db2.Debug().Model(gorm_model.YounggeeSketchPhoto{}).Where("sketch_id = ?", sketchInfo.SketchID).Find(&sketchPhotoInfo)
  281. data := new(http_model.SketchInfoResponse)
  282. data.Type = int32(sketchPhotoInfo.Symbol)
  283. data.PhotoUrl = sketchPhotoInfo.PhotoUrl
  284. data.Content = sketchInfo.Content
  285. data.Title = sketchInfo.Title
  286. return data, nil
  287. }
  288. func BreachHandled(ctx context.Context, pageSize, pageNum int32, req *http_model.BreachHandledRequest, conditions *common_model.BreachHandledConditions) (*http_model.BreachHandledData, error) {
  289. db := GetReadDB(ctx)
  290. var contractInfos []*gorm_model.YoungeeContractInfo
  291. db = db.Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 4 OR default_status = 5")
  292. // 根据Project条件过滤
  293. conditionType := reflect.TypeOf(conditions).Elem()
  294. conditionValue := reflect.ValueOf(conditions).Elem()
  295. for i := 0; i < conditionType.NumField(); i++ {
  296. field := conditionType.Field(i)
  297. tag := field.Tag.Get("condition")
  298. value := conditionValue.FieldByName(field.Name)
  299. if !util.IsBlank(value) {
  300. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  301. }
  302. }
  303. if req.TaskId != 0 {
  304. db = db.Where("task_id = ?", req.TaskId)
  305. }
  306. var findProjectIds []string
  307. if req.ProjectName != "" {
  308. db1 := GetReadDB(ctx)
  309. db1.Model(gorm_model.ProjectInfo{}).Select("project_id").Where("project_name = ?", req.ProjectName).Find(&findProjectIds)
  310. var findTaskIds []string
  311. db2 := GetReadDB(ctx)
  312. db2.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id IN ?", findProjectIds).Find(&findTaskIds)
  313. db = db.Where("task_id IN ?", findTaskIds)
  314. }
  315. // 查询总数
  316. var total int64
  317. if err := db.Count(&total).Error; err != nil {
  318. logrus.WithContext(ctx).Errorf("[BreachHandled] error query mysql total, err:%+v", err)
  319. return nil, err
  320. }
  321. // 查询该页数据
  322. limit := pageSize
  323. offset := pageSize * pageNum // assert pageNum start with 0
  324. err := db.Order("terminate_at").Limit(int(limit)).Offset(int(offset)).Find(&contractInfos).Error
  325. if err != nil {
  326. logrus.WithContext(ctx).Errorf("[BreachHandled] error query mysql total, err:%+v", err)
  327. return nil, err
  328. }
  329. var taskIds []string
  330. for _, contractInfo := range contractInfos {
  331. taskIds = append(taskIds, contractInfo.TaskID)
  332. }
  333. taskIds = util.RemoveStrRepByMap(taskIds)
  334. taskIdToProjectMap := make(map[string]string)
  335. taskIdToTalentIdMap := make(map[string]string)
  336. taskIdToTaskInfoMap := make(map[string]gorm_model.YoungeeTaskInfo)
  337. var projectIds []string
  338. for _, taskId := range taskIds {
  339. db1 := GetReadDB(ctx)
  340. var taskInfo gorm_model.YoungeeTaskInfo
  341. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo)
  342. taskIdToProjectMap[taskId] = taskInfo.ProjectId
  343. taskIdToTalentIdMap[taskId] = taskInfo.TalentId
  344. taskIdToTaskInfoMap[taskId] = taskInfo
  345. projectIds = append(projectIds, taskInfo.ProjectId)
  346. }
  347. projectIds = util.RemoveStrRepByMap(projectIds)
  348. var enterpriseIds []string
  349. projectIdToProjectInfoMap := make(map[string]gorm_model.ProjectInfo)
  350. for _, projectId := range projectIds {
  351. db1 := GetReadDB(ctx)
  352. projectInfo := gorm_model.ProjectInfo{}
  353. db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectInfo)
  354. projectIdToProjectInfoMap[projectInfo.ProjectID] = projectInfo
  355. enterpriseIds = append(enterpriseIds, projectInfo.EnterpriseID)
  356. }
  357. enterpriseIds = util.RemoveStrRepByMap(enterpriseIds)
  358. enterpriseIdToUserId := make(map[string]int64)
  359. var userIds []int64
  360. for _, enterpriseId := range enterpriseIds {
  361. db1 := GetReadDB(ctx)
  362. var userId int64
  363. db1.Model(gorm_model.Enterprise{}).Select("user_id").Where("enterprise_id = ?", enterpriseId).Find(&userId)
  364. enterpriseIdToUserId[enterpriseId] = userId
  365. userIds = append(userIds, userId)
  366. }
  367. userIdToUserPhone := make(map[int64]string)
  368. for _, userId := range userIds {
  369. db1 := GetReadDB(ctx)
  370. var userPhone string
  371. db1.Model(gorm_model.YounggeeUser{}).Select("phone").Where("id = ?", userId).Find(&userPhone)
  372. userIdToUserPhone[userId] = userPhone
  373. }
  374. talentIdToTalentPhoneMap := make(map[string]string)
  375. for _, v := range taskIdToTalentIdMap {
  376. if len(talentIdToTalentPhoneMap) == 0 {
  377. db1 := GetReadDB(ctx)
  378. var talentPhoneNumber string
  379. db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
  380. talentIdToTalentPhoneMap[v] = talentPhoneNumber
  381. }
  382. if _, ok := talentIdToTalentPhoneMap[v]; !ok {
  383. db1 := GetReadDB(ctx)
  384. var talentPhoneNumber string
  385. db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
  386. talentIdToTalentPhoneMap[v] = talentPhoneNumber
  387. }
  388. }
  389. var BreachHandledPreviews []*http_model.BreachHandledPreview
  390. for _, contractInfo := range contractInfos {
  391. BreachHandledPreview := new(http_model.BreachHandledPreview)
  392. BreachHandledPreview.ContractId = int32(contractInfo.ContractID)
  393. BreachHandledPreview.ProjectId = taskIdToProjectMap[contractInfo.TaskID]
  394. BreachHandledPreview.UserId = projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].EnterpriseID
  395. BreachHandledPreview.ProjectName = projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].ProjectName
  396. BreachHandledPreview.UserPhone = userIdToUserPhone[enterpriseIdToUserId[projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].EnterpriseID]]
  397. BreachHandledPreview.TaskId = contractInfo.TaskID
  398. BreachHandledPreview.TalentId = taskIdToTalentIdMap[contractInfo.TaskID]
  399. BreachHandledPreview.TalentPhone = talentIdToTalentPhoneMap[taskIdToTalentIdMap[contractInfo.TaskID]]
  400. BreachHandledPreview.TerminateReason = consts.GetBreakType(contractInfo.BreakType)
  401. BreachHandledPreview.HandleResult = consts.GetHandleResult(contractInfo.DefaultStatus)
  402. BreachHandledPreview.HandleAt = conv.MustString(contractInfo.HandleAt, "")[0:19]
  403. BreachHandledPreviews = append(BreachHandledPreviews, BreachHandledPreview)
  404. }
  405. var BreachHandledData http_model.BreachHandledData
  406. BreachHandledData.BreachHandledPreview = BreachHandledPreviews
  407. BreachHandledData.Total = total
  408. return &BreachHandledData, nil
  409. }
  410. func GetTaskDefaultReviewList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskDefaultReviewInfo, int64, error) {
  411. db := GetReadDB(ctx)
  412. // 查询Task表信息
  413. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  414. // 根据Project条件过滤
  415. conditionType := reflect.TypeOf(conditions).Elem()
  416. conditionValue := reflect.ValueOf(conditions).Elem()
  417. var platform_nickname string = ""
  418. for i := 0; i < conditionType.NumField(); i++ {
  419. field := conditionType.Field(i)
  420. tag := field.Tag.Get("condition")
  421. value := conditionValue.FieldByName(field.Name)
  422. if tag == "default_status" {
  423. fmt.Printf("default %+v", value.Interface() == int64(0))
  424. if value.Interface() == int64(0) {
  425. db = db.Where("cur_default_type = 1")
  426. } else if value.Interface() == int64(1) {
  427. db = db.Where("cur_default_type = 3")
  428. } else if value.Interface() == int64(2) {
  429. db = db.Where("cur_default_type = 5")
  430. }
  431. continue
  432. } else if !util.IsBlank(value) {
  433. if tag == "platform_nickname" {
  434. platform_nickname = fmt.Sprintf("%v", value.Interface())
  435. continue
  436. } else if tag == "project_id" || tag == "strategy_id" {
  437. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  438. }
  439. }
  440. }
  441. var taskInfos []gorm_model.YoungeeTaskInfo
  442. db = db.Model(gorm_model.YoungeeTaskInfo{})
  443. // 查询总数
  444. var totalTask int64
  445. if err := db.Count(&totalTask).Error; err != nil {
  446. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  447. return nil, 0, err
  448. }
  449. db.Order("task_id").Find(&taskInfos)
  450. // 查询任务id
  451. var taskIds []string
  452. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  453. for _, taskInfo := range taskInfos {
  454. taskIds = append(taskIds, taskInfo.TaskId)
  455. taskMap[taskInfo.TaskId] = taskInfo
  456. }
  457. db1 := GetReadDB(ctx)
  458. db1 = db1.Debug().Model(gorm_model.YoungeeContractInfo{})
  459. var DefaultReviewInfos []gorm_model.YoungeeContractInfo
  460. db1 = db1.Model(gorm_model.YoungeeContractInfo{}).Where("task_id IN ? AND (default_status = 1 OR default_status = 4)", taskIds)
  461. err := db1.Find(&DefaultReviewInfos).Error
  462. if err != nil {
  463. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  464. return nil, 0, err
  465. }
  466. DefaultReviewMap := make(map[string]gorm_model.YoungeeContractInfo)
  467. for _, DefaultReviewInfo := range DefaultReviewInfos {
  468. DefaultReviewMap[DefaultReviewInfo.TaskID] = DefaultReviewInfo
  469. }
  470. // 查询总数
  471. var totalDefaultReview int64
  472. if err := db1.Count(&totalDefaultReview).Error; err != nil {
  473. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  474. return nil, 0, err
  475. }
  476. // 查询该页数据
  477. limit := pageSize
  478. offset := pageSize * pageNum // assert pageNum start with 0
  479. err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  480. if err != nil {
  481. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  482. return nil, 0, err
  483. }
  484. var TaskDefaultReviews []*http_model.TaskDefaultReview
  485. var taskDefaultReviews []*http_model.TaskDefaultReviewInfo
  486. var newTaskDefaultReviews []*http_model.TaskDefaultReviewInfo
  487. for _, taskId := range taskIds {
  488. TaskDefaultReview := new(http_model.TaskDefaultReview)
  489. TaskDefaultReview.Talent = taskMap[taskId]
  490. TaskDefaultReview.Default = DefaultReviewMap[taskId]
  491. TaskDefaultReviews = append(TaskDefaultReviews, TaskDefaultReview)
  492. }
  493. taskDefaultReviews = pack.TaskDefaultReviewToTaskInfo(TaskDefaultReviews)
  494. for _, v := range taskDefaultReviews {
  495. if platform_nickname == "" {
  496. newTaskDefaultReviews = append(newTaskDefaultReviews, v)
  497. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  498. newTaskDefaultReviews = append(newTaskDefaultReviews, v)
  499. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  500. newTaskDefaultReviews = append(newTaskDefaultReviews, v)
  501. } else {
  502. totalTask--
  503. }
  504. }
  505. return newTaskDefaultReviews, totalTask, nil
  506. }
  507. func GetTaskDefaultDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskDefaultDataInfo, int64, error) {
  508. db := GetReadDB(ctx)
  509. // 查询Task表信息
  510. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  511. // 根据Project条件过滤
  512. conditionType := reflect.TypeOf(conditions).Elem()
  513. conditionValue := reflect.ValueOf(conditions).Elem()
  514. var platform_nickname string = ""
  515. for i := 0; i < conditionType.NumField(); i++ {
  516. field := conditionType.Field(i)
  517. tag := field.Tag.Get("condition")
  518. value := conditionValue.FieldByName(field.Name)
  519. if tag == "default_status" {
  520. if value.Interface() == int64(3) {
  521. db = db.Where("cur_default_type = 7")
  522. }
  523. continue
  524. } else if !util.IsBlank(value) {
  525. if tag == "platform_nickname" {
  526. platform_nickname = fmt.Sprintf("%v", value.Interface())
  527. continue
  528. } else if tag == "project_id" || tag == "strategy_id" {
  529. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  530. }
  531. }
  532. }
  533. var taskInfos []gorm_model.YoungeeTaskInfo
  534. db = db.Model(gorm_model.YoungeeTaskInfo{})
  535. // 查询总数
  536. var totalTask int64
  537. if err := db.Count(&totalTask).Error; err != nil {
  538. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  539. return nil, 0, err
  540. }
  541. db.Order("task_id").Find(&taskInfos)
  542. // 查询任务id
  543. var taskIds []string
  544. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  545. for _, taskInfo := range taskInfos {
  546. taskIds = append(taskIds, taskInfo.TaskId)
  547. taskMap[taskInfo.TaskId] = taskInfo
  548. }
  549. db1 := GetReadDB(ctx)
  550. db1 = db1.Debug().Model(gorm_model.YoungeeContractInfo{})
  551. var DefaultDataInfos []gorm_model.YoungeeContractInfo
  552. db1 = db1.Model(gorm_model.YoungeeContractInfo{}).Where("task_id IN ? AND (default_status = 1 OR default_status = 4)", taskIds)
  553. err := db1.Find(&DefaultDataInfos).Error
  554. DefaultDataMap := make(map[string]gorm_model.YoungeeContractInfo)
  555. for _, DefaultDataInfo := range DefaultDataInfos {
  556. DefaultDataMap[DefaultDataInfo.TaskID] = DefaultDataInfo
  557. }
  558. var LinkInfos []gorm_model.YounggeeLinkInfo
  559. db2 := GetReadDB(ctx)
  560. db2 = db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds).Find(&LinkInfos)
  561. LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
  562. for _, LinkInfo := range LinkInfos {
  563. LinkMap[LinkInfo.TaskID] = LinkInfo
  564. }
  565. // 查询总数
  566. var totalDefaultData int64
  567. if err := db2.Count(&totalDefaultData).Error; err != nil {
  568. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  569. return nil, 0, err
  570. }
  571. // 查询该页数据
  572. limit := pageSize
  573. offset := pageSize * pageNum // assert pageNum start with 0
  574. err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  575. if err != nil {
  576. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  577. return nil, 0, err
  578. }
  579. var TaskDefaultDatas []*http_model.TaskDefaultData
  580. var taskDefaultDatas []*http_model.TaskDefaultDataInfo
  581. var newTaskDefaultDatas []*http_model.TaskDefaultDataInfo
  582. for _, taskId := range taskIds {
  583. TaskDefaultData := new(http_model.TaskDefaultData)
  584. TaskDefaultData.Talent = taskMap[taskId]
  585. TaskDefaultData.Default = DefaultDataMap[taskId]
  586. TaskDefaultData.Link = LinkMap[taskId]
  587. TaskDefaultDatas = append(TaskDefaultDatas, TaskDefaultData)
  588. }
  589. taskDefaultDatas = pack.TaskDefaultDataToTaskInfo(TaskDefaultDatas)
  590. for _, v := range taskDefaultDatas {
  591. if platform_nickname == "" {
  592. newTaskDefaultDatas = append(newTaskDefaultDatas, v)
  593. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  594. newTaskDefaultDatas = append(newTaskDefaultDatas, v)
  595. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  596. newTaskDefaultDatas = append(newTaskDefaultDatas, v)
  597. } else {
  598. totalTask--
  599. }
  600. }
  601. return newTaskDefaultDatas, totalTask, nil
  602. }
  603. func GetTaskTerminatingList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskTerminatingInfo, int64, error) {
  604. db := GetReadDB(ctx)
  605. var taskIds1 []string
  606. var totalTerminating int64
  607. var TerminatingInfos []gorm_model.YoungeeContractInfo
  608. db = db.Model(gorm_model.YoungeeContractInfo{})
  609. err := db.Where("default_status = 3 AND project_id = ?", projectID).Find(&TerminatingInfos).Error
  610. if err != nil {
  611. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  612. return nil, 0, err
  613. }
  614. TerminatingMap := make(map[string]gorm_model.YoungeeContractInfo)
  615. for _, TerminatingInfo := range TerminatingInfos {
  616. taskIds1 = append(taskIds1, TerminatingInfo.TaskID)
  617. TerminatingMap[TerminatingInfo.TaskID] = TerminatingInfo
  618. }
  619. if err := db.Count(&totalTerminating).Error; err != nil {
  620. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  621. return nil, 0, err
  622. }
  623. db1 := GetReadDB(ctx)
  624. // 查询Task表信息
  625. db1 = db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_id in ?", taskIds1)
  626. // 根据Project条件过滤
  627. conditionType := reflect.TypeOf(conditions).Elem()
  628. conditionValue := reflect.ValueOf(conditions).Elem()
  629. var platform_nickname string = ""
  630. for i := 0; i < conditionType.NumField(); i++ {
  631. field := conditionType.Field(i)
  632. tag := field.Tag.Get("condition")
  633. value := conditionValue.FieldByName(field.Name)
  634. if tag == "default_status" {
  635. if value.Interface() == int64(4) {
  636. db1 = db1.Where("cur_default_type = 9")
  637. }
  638. continue
  639. } else if !util.IsBlank(value) {
  640. if tag == "platform_nickname" {
  641. platform_nickname = fmt.Sprintf("%v", value.Interface())
  642. continue
  643. } else if tag == "project_id" || tag == "strategy_id" {
  644. if tag == "strategy_id" {
  645. fmt.Println("strategy_id:", value.Interface())
  646. }
  647. db1 = db1.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  648. }
  649. }
  650. }
  651. var taskInfos []gorm_model.YoungeeTaskInfo
  652. // db1 = db1.Model(gorm_model.YoungeeTaskInfo{})
  653. // 查询总数
  654. var totalTask int64
  655. if err := db1.Count(&totalTask).Error; err != nil {
  656. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  657. return nil, 0, err
  658. }
  659. db1.Order("task_id").Find(&taskInfos)
  660. // 查询任务id
  661. var taskIds []string
  662. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  663. for _, taskInfo := range taskInfos {
  664. taskIds = append(taskIds, taskInfo.TaskId)
  665. taskMap[taskInfo.TaskId] = taskInfo
  666. }
  667. var misNum int64
  668. if totalTerminating > totalTask {
  669. misNum = totalTerminating - totalTask
  670. } else {
  671. misNum = totalTask - totalTerminating
  672. }
  673. //logrus.Println("totalTerminating,totalTalent,misNum:", totalTerminating, totalTask, misNum)
  674. // 查询该页数据
  675. limit := pageSize + misNum
  676. offset := pageSize * pageNum // assert pageNum start with 0
  677. err = db1.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  678. if err != nil {
  679. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  680. return nil, 0, err
  681. }
  682. var TaskTerminatings []*http_model.TaskTerminating
  683. var taskTerminatings []*http_model.TaskTerminatingInfo
  684. var newTaskTerminatings []*http_model.TaskTerminatingInfo
  685. for _, taskId := range taskIds {
  686. TaskTerminating := new(http_model.TaskTerminating)
  687. TaskTerminating.Talent = taskMap[taskId]
  688. TaskTerminating.Default = TerminatingMap[taskId]
  689. TaskTerminatings = append(TaskTerminatings, TaskTerminating)
  690. }
  691. taskTerminatings = pack.TaskTerminatingToTaskInfo(TaskTerminatings)
  692. for _, v := range taskTerminatings {
  693. if platform_nickname == "" {
  694. newTaskTerminatings = append(newTaskTerminatings, v)
  695. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  696. newTaskTerminatings = append(newTaskTerminatings, v)
  697. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  698. newTaskTerminatings = append(newTaskTerminatings, v)
  699. } else {
  700. totalTask--
  701. }
  702. }
  703. return newTaskTerminatings, totalTask, nil
  704. }
  705. func GetTaskTerminatedList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskTerminatedInfo, int64, error) {
  706. db := GetReadDB(ctx)
  707. // 查询Task表信息
  708. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  709. // 根据Project条件过滤
  710. conditionType := reflect.TypeOf(conditions).Elem()
  711. conditionValue := reflect.ValueOf(conditions).Elem()
  712. var platformNickname string = ""
  713. for i := 0; i < conditionType.NumField(); i++ {
  714. field := conditionType.Field(i)
  715. tag := field.Tag.Get("condition")
  716. value := conditionValue.FieldByName(field.Name)
  717. if tag == "default_status" {
  718. fmt.Printf("default %+v", value.Interface() == int64(0))
  719. if value.Interface() == int64(5) {
  720. db = db.Where("complete_status = 4")
  721. }
  722. continue
  723. } else if !util.IsBlank(value) {
  724. if tag == "platform_nickname" {
  725. platformNickname = fmt.Sprintf("%v", value.Interface())
  726. continue
  727. } else if tag == "project_id" || tag == "strategy_id" {
  728. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  729. }
  730. }
  731. }
  732. var taskInfos []gorm_model.YoungeeTaskInfo
  733. db = db.Model(gorm_model.YoungeeTaskInfo{})
  734. // 查询总数
  735. var totalTask int64
  736. if err := db.Count(&totalTask).Error; err != nil {
  737. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql total, err:%+v", err)
  738. return nil, 0, err
  739. }
  740. db.Order("task_id").Find(&taskInfos)
  741. // 查询任务id
  742. var taskIds []string
  743. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  744. for _, taskInfo := range taskInfos {
  745. taskIds = append(taskIds, taskInfo.TaskId)
  746. taskMap[taskInfo.TaskId] = taskInfo
  747. }
  748. db1 := GetReadDB(ctx)
  749. db1 = db1.Debug().Model(gorm_model.YoungeeContractInfo{})
  750. var TerminatedInfos []gorm_model.YoungeeContractInfo
  751. db1 = db1.Model(gorm_model.YoungeeContractInfo{}).Where("task_id IN ? AND (default_status = 1 OR default_status = 4)", taskIds)
  752. err1 := db1.Find(&TerminatedInfos).Error
  753. if err1 != nil {
  754. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql find, err:%+v", err1)
  755. return nil, 0, err1
  756. }
  757. TerminatedMap := make(map[string]gorm_model.YoungeeContractInfo)
  758. for _, TerminatedInfo := range TerminatedInfos {
  759. TerminatedMap[TerminatedInfo.TaskID] = TerminatedInfo
  760. }
  761. // 查询总数
  762. var totalTerminated int64
  763. if err := db1.Count(&totalTerminated).Error; err != nil {
  764. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql total, err:%+v", err)
  765. return nil, 0, err
  766. }
  767. // 查询该页数据
  768. limit := pageSize
  769. offset := pageSize * pageNum // assert pageNum start with 0
  770. err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  771. if err != nil {
  772. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql total, err:%+v", err)
  773. return nil, 0, err
  774. }
  775. var TaskTerminateds []*http_model.TaskTerminated
  776. var taskTerminateds []*http_model.TaskTerminatedInfo
  777. var newTaskTerminateds []*http_model.TaskTerminatedInfo
  778. for _, taskId := range taskIds {
  779. TaskTerminated := new(http_model.TaskTerminated)
  780. TaskTerminated.Talent = taskMap[taskId]
  781. TaskTerminated.Default = TerminatedMap[taskId]
  782. TaskTerminateds = append(TaskTerminateds, TaskTerminated)
  783. }
  784. taskTerminateds = pack.TaskTerminatedToTaskInfo(TaskTerminateds)
  785. for _, v := range taskTerminateds {
  786. if platformNickname == "" {
  787. newTaskTerminateds = append(newTaskTerminateds, v)
  788. } else if strings.Contains(v.PlatformNickname, platformNickname) {
  789. newTaskTerminateds = append(newTaskTerminateds, v)
  790. } else if strings.Contains(conv.MustString(v.TaskID, ""), platformNickname) {
  791. newTaskTerminateds = append(newTaskTerminateds, v)
  792. } else {
  793. totalTask--
  794. }
  795. }
  796. return newTaskTerminateds, totalTask, nil
  797. }