default.go 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858
  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. db = GetReadDB(ctx)
  199. db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectId, taskInfo.StrategyId)
  200. err = db.Updates(map[string]interface{}{
  201. "total_offer": gorm.Expr("total_offer + ?", taskInfo.RealPayment)}).Error
  202. if err != nil {
  203. logrus.WithContext(ctx).Errorf("[ContractBreach] error update RecruitStrategy, err:%+v", err)
  204. return err
  205. }
  206. err = CreateTaskLog(context.Background(), taskInfo.TaskId, "解约时间")
  207. if err != nil {
  208. logrus.WithContext(context.Background()).Errorf("[ContractBreach] call CreateTaskLog error,err:%+v", err)
  209. }
  210. db4 := GetReadDB(ctx)
  211. if breakType == 1 {
  212. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  213. map[string]interface{}{
  214. "cur_default_type": 2,
  215. "task_stage": 16,
  216. "script_break_rate": 0}).Error
  217. taskInfo.ScriptBreakRate = 0
  218. } else if breakType == 2 {
  219. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  220. map[string]interface{}{
  221. "cur_default_type": 4,
  222. "task_stage": 16,
  223. "sketch_break_rate": 0}).Error
  224. taskInfo.SketchBreakRate = 0
  225. } else if breakType == 3 {
  226. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  227. map[string]interface{}{
  228. "cur_default_type": 6,
  229. "task_stage": 16,
  230. "link_break_rate": 0}).Error
  231. taskInfo.LinkBreakRate = 0
  232. } else if breakType == 4 {
  233. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  234. map[string]interface{}{
  235. "cur_default_type": 8,
  236. "task_stage": 16,
  237. "data_break_rate": 0}).Error
  238. taskInfo.DataBreakRate = 0
  239. }
  240. if err != nil {
  241. logrus.WithContext(ctx).Errorf("[ContractBreach] error update YoungeeTaskInfo, err:%+v", err)
  242. return err
  243. }
  244. settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate+taskInfo.ErrBreakRate)/100)
  245. if settleAmount <= 0 {
  246. settleAmount = 0.0
  247. }
  248. db5 := GetReadDB(ctx)
  249. err = db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(
  250. map[string]interface{}{"settle_amount": settleAmount, "withdraw_status": 2, "complete_status": 4, "complete_date": time.Now()}).Error
  251. if err != nil {
  252. logrus.WithContext(ctx).Errorf("[ContractBreach] error update YoungeeTaskInfo, err:%+v", err)
  253. return err
  254. }
  255. err = SetProjectFinish(context.Background(), taskInfo.ProjectId)
  256. if err != nil {
  257. logrus.WithContext(ctx).Errorf("[ContractBreach] call SetProjectFinish error, err:%+v", err)
  258. return err
  259. }
  260. } else {
  261. db4 := GetReadDB(ctx)
  262. if breakType == 1 {
  263. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 1}).Error
  264. } else if breakType == 2 {
  265. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 3}).Error
  266. } else if breakType == 3 {
  267. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 5}).Error
  268. } else if breakType == 4 {
  269. err = db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{CurDefaultType: 7}).Error
  270. }
  271. if err != nil {
  272. logrus.WithContext(ctx).Errorf("[ContractBreach] error update YoungeeTaskInfo, err:%+v", err)
  273. return err
  274. }
  275. }
  276. }
  277. if req.DefaultStatus == 5 {
  278. err = SetTalentIncome(context.Background(), taskIds)
  279. if err != nil {
  280. logrus.WithContext(ctx).Errorf("[ContractBreach] call SetTalentIncome error, err:%+v", err)
  281. return err
  282. }
  283. }
  284. return nil
  285. }
  286. func GetSketchInfoByTaskId(ctx context.Context, request *http_model.GetSketchInfoByTaskIdRequest) (*http_model.SketchInfoResponse, error) {
  287. db := GetReadDB(ctx)
  288. var sketchInfo gorm_model.YounggeeSketchInfo
  289. db.Debug().Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = 1", request.TaskId).Find(&sketchInfo)
  290. db2 := GetReadDB(ctx)
  291. sketchPhotoInfo := gorm_model.YounggeeSketchPhoto{}
  292. db2.Debug().Model(gorm_model.YounggeeSketchPhoto{}).Where("sketch_id = ?", sketchInfo.SketchID).Find(&sketchPhotoInfo)
  293. data := new(http_model.SketchInfoResponse)
  294. data.Type = int32(sketchPhotoInfo.Symbol)
  295. data.PhotoUrl = sketchPhotoInfo.PhotoUrl
  296. data.Content = sketchInfo.Content
  297. data.Title = sketchInfo.Title
  298. return data, nil
  299. }
  300. func BreachHandled(ctx context.Context, pageSize, pageNum int32, req *http_model.BreachHandledRequest, conditions *common_model.BreachHandledConditions) (*http_model.BreachHandledData, error) {
  301. db := GetReadDB(ctx)
  302. var contractInfos []*gorm_model.YoungeeContractInfo
  303. db = db.Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 4 OR default_status = 5")
  304. // 根据Project条件过滤
  305. conditionType := reflect.TypeOf(conditions).Elem()
  306. conditionValue := reflect.ValueOf(conditions).Elem()
  307. for i := 0; i < conditionType.NumField(); i++ {
  308. field := conditionType.Field(i)
  309. tag := field.Tag.Get("condition")
  310. value := conditionValue.FieldByName(field.Name)
  311. if !util.IsBlank(value) {
  312. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  313. }
  314. }
  315. if req.TaskId != 0 {
  316. db = db.Where("task_id = ?", req.TaskId)
  317. }
  318. var findProjectIds []string
  319. if req.ProjectName != "" {
  320. db1 := GetReadDB(ctx)
  321. db1.Model(gorm_model.ProjectInfo{}).Select("project_id").Where("project_name = ?", req.ProjectName).Find(&findProjectIds)
  322. var findTaskIds []string
  323. db2 := GetReadDB(ctx)
  324. db2.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id IN ?", findProjectIds).Find(&findTaskIds)
  325. db = db.Where("task_id IN ?", findTaskIds)
  326. }
  327. // 查询总数
  328. var total int64
  329. if err := db.Count(&total).Error; err != nil {
  330. logrus.WithContext(ctx).Errorf("[BreachHandled] error query mysql total, err:%+v", err)
  331. return nil, err
  332. }
  333. // 查询该页数据
  334. limit := pageSize
  335. offset := pageSize * pageNum // assert pageNum start with 0
  336. err := db.Order("terminate_at").Limit(int(limit)).Offset(int(offset)).Find(&contractInfos).Error
  337. if err != nil {
  338. logrus.WithContext(ctx).Errorf("[BreachHandled] error query mysql total, err:%+v", err)
  339. return nil, err
  340. }
  341. var taskIds []string
  342. for _, contractInfo := range contractInfos {
  343. taskIds = append(taskIds, contractInfo.TaskID)
  344. }
  345. taskIds = util.RemoveStrRepByMap(taskIds)
  346. taskIdToProjectMap := make(map[string]string)
  347. taskIdToTalentIdMap := make(map[string]string)
  348. taskIdToTaskInfoMap := make(map[string]gorm_model.YoungeeTaskInfo)
  349. var projectIds []string
  350. for _, taskId := range taskIds {
  351. db1 := GetReadDB(ctx)
  352. var taskInfo gorm_model.YoungeeTaskInfo
  353. db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo)
  354. taskIdToProjectMap[taskId] = taskInfo.ProjectId
  355. taskIdToTalentIdMap[taskId] = taskInfo.TalentId
  356. taskIdToTaskInfoMap[taskId] = taskInfo
  357. projectIds = append(projectIds, taskInfo.ProjectId)
  358. }
  359. projectIds = util.RemoveStrRepByMap(projectIds)
  360. var enterpriseIds []string
  361. projectIdToProjectInfoMap := make(map[string]gorm_model.ProjectInfo)
  362. for _, projectId := range projectIds {
  363. db1 := GetReadDB(ctx)
  364. projectInfo := gorm_model.ProjectInfo{}
  365. db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectInfo)
  366. projectIdToProjectInfoMap[projectInfo.ProjectID] = projectInfo
  367. enterpriseIds = append(enterpriseIds, projectInfo.EnterpriseID)
  368. }
  369. enterpriseIds = util.RemoveStrRepByMap(enterpriseIds)
  370. enterpriseIdToUserId := make(map[string]int64)
  371. var userIds []int64
  372. for _, enterpriseId := range enterpriseIds {
  373. db1 := GetReadDB(ctx)
  374. var userId int64
  375. db1.Model(gorm_model.Enterprise{}).Select("user_id").Where("enterprise_id = ?", enterpriseId).Find(&userId)
  376. enterpriseIdToUserId[enterpriseId] = userId
  377. userIds = append(userIds, userId)
  378. }
  379. userIdToUserPhone := make(map[int64]string)
  380. for _, userId := range userIds {
  381. db1 := GetReadDB(ctx)
  382. var userPhone string
  383. db1.Model(gorm_model.YounggeeUser{}).Select("phone").Where("id = ?", userId).Find(&userPhone)
  384. userIdToUserPhone[userId] = userPhone
  385. }
  386. talentIdToTalentPhoneMap := make(map[string]string)
  387. for _, v := range taskIdToTalentIdMap {
  388. if len(talentIdToTalentPhoneMap) == 0 {
  389. db1 := GetReadDB(ctx)
  390. var talentPhoneNumber string
  391. db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
  392. talentIdToTalentPhoneMap[v] = talentPhoneNumber
  393. }
  394. if _, ok := talentIdToTalentPhoneMap[v]; !ok {
  395. db1 := GetReadDB(ctx)
  396. var talentPhoneNumber string
  397. db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
  398. talentIdToTalentPhoneMap[v] = talentPhoneNumber
  399. }
  400. }
  401. var BreachHandledPreviews []*http_model.BreachHandledPreview
  402. for _, contractInfo := range contractInfos {
  403. BreachHandledPreview := new(http_model.BreachHandledPreview)
  404. BreachHandledPreview.ContractId = int32(contractInfo.ContractID)
  405. BreachHandledPreview.ProjectId = taskIdToProjectMap[contractInfo.TaskID]
  406. BreachHandledPreview.UserId = projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].EnterpriseID
  407. BreachHandledPreview.ProjectName = projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].ProjectName
  408. BreachHandledPreview.UserPhone = userIdToUserPhone[enterpriseIdToUserId[projectIdToProjectInfoMap[taskIdToProjectMap[contractInfo.TaskID]].EnterpriseID]]
  409. BreachHandledPreview.TaskId = contractInfo.TaskID
  410. BreachHandledPreview.TalentId = taskIdToTalentIdMap[contractInfo.TaskID]
  411. BreachHandledPreview.TalentPhone = talentIdToTalentPhoneMap[taskIdToTalentIdMap[contractInfo.TaskID]]
  412. BreachHandledPreview.TerminateReason = consts.GetBreakType(contractInfo.BreakType)
  413. BreachHandledPreview.HandleResult = consts.GetHandleResult(contractInfo.DefaultStatus)
  414. BreachHandledPreview.HandleAt = conv.MustString(contractInfo.HandleAt, "")[0:19]
  415. BreachHandledPreviews = append(BreachHandledPreviews, BreachHandledPreview)
  416. }
  417. var BreachHandledData http_model.BreachHandledData
  418. BreachHandledData.BreachHandledPreview = BreachHandledPreviews
  419. BreachHandledData.Total = total
  420. return &BreachHandledData, nil
  421. }
  422. func GetTaskDefaultReviewList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskDefaultReviewInfo, int64, error) {
  423. db := GetReadDB(ctx)
  424. // 查询Task表信息
  425. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  426. // 根据Project条件过滤
  427. conditionType := reflect.TypeOf(conditions).Elem()
  428. conditionValue := reflect.ValueOf(conditions).Elem()
  429. var platform_nickname string = ""
  430. for i := 0; i < conditionType.NumField(); i++ {
  431. field := conditionType.Field(i)
  432. tag := field.Tag.Get("condition")
  433. value := conditionValue.FieldByName(field.Name)
  434. if tag == "default_status" {
  435. fmt.Printf("default %+v", value.Interface() == int64(0))
  436. if value.Interface() == int64(0) {
  437. db = db.Where("cur_default_type = 1")
  438. } else if value.Interface() == int64(1) {
  439. db = db.Where("cur_default_type = 3")
  440. } else if value.Interface() == int64(2) {
  441. db = db.Where("cur_default_type = 5")
  442. }
  443. continue
  444. } else if !util.IsBlank(value) {
  445. if tag == "platform_nickname" {
  446. platform_nickname = fmt.Sprintf("%v", value.Interface())
  447. continue
  448. } else if tag == "project_id" || tag == "strategy_id" {
  449. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  450. }
  451. }
  452. }
  453. var taskInfos []gorm_model.YoungeeTaskInfo
  454. db = db.Model(gorm_model.YoungeeTaskInfo{})
  455. // 查询总数
  456. var totalTask int64
  457. if err := db.Count(&totalTask).Error; err != nil {
  458. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  459. return nil, 0, err
  460. }
  461. db.Order("task_id").Find(&taskInfos)
  462. // 查询任务id
  463. var taskIds []string
  464. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  465. for _, taskInfo := range taskInfos {
  466. taskIds = append(taskIds, taskInfo.TaskId)
  467. taskMap[taskInfo.TaskId] = taskInfo
  468. }
  469. db1 := GetReadDB(ctx)
  470. db1 = db1.Debug().Model(gorm_model.YoungeeContractInfo{})
  471. var DefaultReviewInfos []gorm_model.YoungeeContractInfo
  472. db1 = db1.Model(gorm_model.YoungeeContractInfo{}).Where("task_id IN ? AND (default_status = 1 OR default_status = 4)", taskIds)
  473. err := db1.Find(&DefaultReviewInfos).Error
  474. if err != nil {
  475. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  476. return nil, 0, err
  477. }
  478. DefaultReviewMap := make(map[string]gorm_model.YoungeeContractInfo)
  479. for _, DefaultReviewInfo := range DefaultReviewInfos {
  480. DefaultReviewMap[DefaultReviewInfo.TaskID] = DefaultReviewInfo
  481. }
  482. // 查询总数
  483. var totalDefaultReview int64
  484. if err := db1.Count(&totalDefaultReview).Error; err != nil {
  485. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  486. return nil, 0, err
  487. }
  488. // 查询该页数据
  489. limit := pageSize
  490. offset := pageSize * pageNum // assert pageNum start with 0
  491. err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  492. if err != nil {
  493. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  494. return nil, 0, err
  495. }
  496. var TaskDefaultReviews []*http_model.TaskDefaultReview
  497. var taskDefaultReviews []*http_model.TaskDefaultReviewInfo
  498. var newTaskDefaultReviews []*http_model.TaskDefaultReviewInfo
  499. for _, taskId := range taskIds {
  500. TaskDefaultReview := new(http_model.TaskDefaultReview)
  501. TaskDefaultReview.Talent = taskMap[taskId]
  502. TaskDefaultReview.Default = DefaultReviewMap[taskId]
  503. TaskDefaultReviews = append(TaskDefaultReviews, TaskDefaultReview)
  504. }
  505. taskDefaultReviews = pack.TaskDefaultReviewToTaskInfo(TaskDefaultReviews)
  506. for _, v := range taskDefaultReviews {
  507. if platform_nickname == "" {
  508. newTaskDefaultReviews = append(newTaskDefaultReviews, v)
  509. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  510. newTaskDefaultReviews = append(newTaskDefaultReviews, v)
  511. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  512. newTaskDefaultReviews = append(newTaskDefaultReviews, v)
  513. } else {
  514. totalTask--
  515. }
  516. }
  517. return newTaskDefaultReviews, totalTask, nil
  518. }
  519. func GetTaskDefaultDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskDefaultDataInfo, int64, error) {
  520. db := GetReadDB(ctx)
  521. // 查询Task表信息
  522. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  523. // 根据Project条件过滤
  524. conditionType := reflect.TypeOf(conditions).Elem()
  525. conditionValue := reflect.ValueOf(conditions).Elem()
  526. var platform_nickname string = ""
  527. for i := 0; i < conditionType.NumField(); i++ {
  528. field := conditionType.Field(i)
  529. tag := field.Tag.Get("condition")
  530. value := conditionValue.FieldByName(field.Name)
  531. if tag == "default_status" {
  532. if value.Interface() == int64(3) {
  533. db = db.Where("cur_default_type = 7")
  534. }
  535. continue
  536. } else if !util.IsBlank(value) {
  537. if tag == "platform_nickname" {
  538. platform_nickname = fmt.Sprintf("%v", value.Interface())
  539. continue
  540. } else if tag == "project_id" || tag == "strategy_id" {
  541. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  542. }
  543. }
  544. }
  545. var taskInfos []gorm_model.YoungeeTaskInfo
  546. db = db.Model(gorm_model.YoungeeTaskInfo{})
  547. // 查询总数
  548. var totalTask int64
  549. if err := db.Count(&totalTask).Error; err != nil {
  550. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  551. return nil, 0, err
  552. }
  553. db.Order("task_id").Find(&taskInfos)
  554. // 查询任务id
  555. var taskIds []string
  556. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  557. for _, taskInfo := range taskInfos {
  558. taskIds = append(taskIds, taskInfo.TaskId)
  559. taskMap[taskInfo.TaskId] = taskInfo
  560. }
  561. db1 := GetReadDB(ctx)
  562. db1 = db1.Debug().Model(gorm_model.YoungeeContractInfo{})
  563. var DefaultDataInfos []gorm_model.YoungeeContractInfo
  564. db1 = db1.Model(gorm_model.YoungeeContractInfo{}).Where("task_id IN ? AND (default_status = 1 OR default_status = 4)", taskIds)
  565. err := db1.Find(&DefaultDataInfos).Error
  566. DefaultDataMap := make(map[string]gorm_model.YoungeeContractInfo)
  567. for _, DefaultDataInfo := range DefaultDataInfos {
  568. DefaultDataMap[DefaultDataInfo.TaskID] = DefaultDataInfo
  569. }
  570. var LinkInfos []gorm_model.YounggeeLinkInfo
  571. db2 := GetReadDB(ctx)
  572. db2 = db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds).Find(&LinkInfos)
  573. LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
  574. for _, LinkInfo := range LinkInfos {
  575. LinkMap[LinkInfo.TaskID] = LinkInfo
  576. }
  577. // 查询总数
  578. var totalDefaultData int64
  579. if err := db2.Count(&totalDefaultData).Error; err != nil {
  580. logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
  581. return nil, 0, err
  582. }
  583. // 查询该页数据
  584. limit := pageSize
  585. offset := pageSize * pageNum // assert pageNum start with 0
  586. err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  587. if err != nil {
  588. logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
  589. return nil, 0, err
  590. }
  591. var TaskDefaultDatas []*http_model.TaskDefaultData
  592. var taskDefaultDatas []*http_model.TaskDefaultDataInfo
  593. var newTaskDefaultDatas []*http_model.TaskDefaultDataInfo
  594. for _, taskId := range taskIds {
  595. TaskDefaultData := new(http_model.TaskDefaultData)
  596. TaskDefaultData.Talent = taskMap[taskId]
  597. TaskDefaultData.Default = DefaultDataMap[taskId]
  598. TaskDefaultData.Link = LinkMap[taskId]
  599. TaskDefaultDatas = append(TaskDefaultDatas, TaskDefaultData)
  600. }
  601. taskDefaultDatas = pack.TaskDefaultDataToTaskInfo(TaskDefaultDatas)
  602. for _, v := range taskDefaultDatas {
  603. if platform_nickname == "" {
  604. newTaskDefaultDatas = append(newTaskDefaultDatas, v)
  605. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  606. newTaskDefaultDatas = append(newTaskDefaultDatas, v)
  607. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  608. newTaskDefaultDatas = append(newTaskDefaultDatas, v)
  609. } else {
  610. totalTask--
  611. }
  612. }
  613. return newTaskDefaultDatas, totalTask, nil
  614. }
  615. func GetTaskTerminatingList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskTerminatingInfo, int64, error) {
  616. db := GetReadDB(ctx)
  617. var taskIds1 []string
  618. var totalTerminating int64
  619. var TerminatingInfos []gorm_model.YoungeeContractInfo
  620. db = db.Model(gorm_model.YoungeeContractInfo{})
  621. err := db.Where("default_status = 3 AND project_id = ?", projectID).Find(&TerminatingInfos).Error
  622. if err != nil {
  623. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  624. return nil, 0, err
  625. }
  626. TerminatingMap := make(map[string]gorm_model.YoungeeContractInfo)
  627. for _, TerminatingInfo := range TerminatingInfos {
  628. taskIds1 = append(taskIds1, TerminatingInfo.TaskID)
  629. TerminatingMap[TerminatingInfo.TaskID] = TerminatingInfo
  630. }
  631. if err := db.Count(&totalTerminating).Error; err != nil {
  632. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  633. return nil, 0, err
  634. }
  635. db1 := GetReadDB(ctx)
  636. // 查询Task表信息
  637. db1 = db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_id in ?", taskIds1)
  638. // 根据Project条件过滤
  639. conditionType := reflect.TypeOf(conditions).Elem()
  640. conditionValue := reflect.ValueOf(conditions).Elem()
  641. var platform_nickname string = ""
  642. for i := 0; i < conditionType.NumField(); i++ {
  643. field := conditionType.Field(i)
  644. tag := field.Tag.Get("condition")
  645. value := conditionValue.FieldByName(field.Name)
  646. if tag == "default_status" {
  647. if value.Interface() == int64(4) {
  648. db1 = db1.Where("cur_default_type = 9")
  649. }
  650. continue
  651. } else if !util.IsBlank(value) {
  652. if tag == "platform_nickname" {
  653. platform_nickname = fmt.Sprintf("%v", value.Interface())
  654. continue
  655. } else if tag == "project_id" || tag == "strategy_id" {
  656. if tag == "strategy_id" {
  657. fmt.Println("strategy_id:", value.Interface())
  658. }
  659. db1 = db1.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  660. }
  661. }
  662. }
  663. var taskInfos []gorm_model.YoungeeTaskInfo
  664. // db1 = db1.Model(gorm_model.YoungeeTaskInfo{})
  665. // 查询总数
  666. var totalTask int64
  667. if err := db1.Count(&totalTask).Error; err != nil {
  668. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  669. return nil, 0, err
  670. }
  671. db1.Order("task_id").Find(&taskInfos)
  672. // 查询任务id
  673. var taskIds []string
  674. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  675. for _, taskInfo := range taskInfos {
  676. taskIds = append(taskIds, taskInfo.TaskId)
  677. taskMap[taskInfo.TaskId] = taskInfo
  678. }
  679. var misNum int64
  680. if totalTerminating > totalTask {
  681. misNum = totalTerminating - totalTask
  682. } else {
  683. misNum = totalTask - totalTerminating
  684. }
  685. //logrus.Println("totalTerminating,totalTalent,misNum:", totalTerminating, totalTask, misNum)
  686. // 查询该页数据
  687. limit := pageSize + misNum
  688. offset := pageSize * pageNum // assert pageNum start with 0
  689. err = db1.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  690. if err != nil {
  691. logrus.WithContext(ctx).Errorf("[GetTaskTerminatingList] error query mysql total, err:%+v", err)
  692. return nil, 0, err
  693. }
  694. var TaskTerminatings []*http_model.TaskTerminating
  695. var taskTerminatings []*http_model.TaskTerminatingInfo
  696. var newTaskTerminatings []*http_model.TaskTerminatingInfo
  697. for _, taskId := range taskIds {
  698. TaskTerminating := new(http_model.TaskTerminating)
  699. TaskTerminating.Talent = taskMap[taskId]
  700. TaskTerminating.Default = TerminatingMap[taskId]
  701. TaskTerminatings = append(TaskTerminatings, TaskTerminating)
  702. }
  703. taskTerminatings = pack.TaskTerminatingToTaskInfo(TaskTerminatings)
  704. for _, v := range taskTerminatings {
  705. if platform_nickname == "" {
  706. newTaskTerminatings = append(newTaskTerminatings, v)
  707. } else if strings.Contains(v.PlatformNickname, platform_nickname) {
  708. newTaskTerminatings = append(newTaskTerminatings, v)
  709. } else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
  710. newTaskTerminatings = append(newTaskTerminatings, v)
  711. } else {
  712. totalTask--
  713. }
  714. }
  715. return newTaskTerminatings, totalTask, nil
  716. }
  717. func GetTaskTerminatedList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskTerminatedInfo, int64, error) {
  718. db := GetReadDB(ctx)
  719. // 查询Task表信息
  720. db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
  721. // 根据Project条件过滤
  722. conditionType := reflect.TypeOf(conditions).Elem()
  723. conditionValue := reflect.ValueOf(conditions).Elem()
  724. var platformNickname string = ""
  725. for i := 0; i < conditionType.NumField(); i++ {
  726. field := conditionType.Field(i)
  727. tag := field.Tag.Get("condition")
  728. value := conditionValue.FieldByName(field.Name)
  729. if tag == "default_status" {
  730. fmt.Printf("default %+v", value.Interface() == int64(0))
  731. if value.Interface() == int64(5) {
  732. db = db.Where("complete_status = 4")
  733. }
  734. continue
  735. } else if !util.IsBlank(value) {
  736. if tag == "platform_nickname" {
  737. platformNickname = fmt.Sprintf("%v", value.Interface())
  738. continue
  739. } else if tag == "project_id" || tag == "strategy_id" {
  740. db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
  741. }
  742. }
  743. }
  744. var taskInfos []gorm_model.YoungeeTaskInfo
  745. db = db.Model(gorm_model.YoungeeTaskInfo{})
  746. // 查询总数
  747. var totalTask int64
  748. if err := db.Count(&totalTask).Error; err != nil {
  749. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql total, err:%+v", err)
  750. return nil, 0, err
  751. }
  752. db.Order("task_id").Find(&taskInfos)
  753. // 查询任务id
  754. var taskIds []string
  755. taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
  756. for _, taskInfo := range taskInfos {
  757. taskIds = append(taskIds, taskInfo.TaskId)
  758. taskMap[taskInfo.TaskId] = taskInfo
  759. }
  760. db1 := GetReadDB(ctx)
  761. db1 = db1.Debug().Model(gorm_model.YoungeeContractInfo{})
  762. var TerminatedInfos []gorm_model.YoungeeContractInfo
  763. db1 = db1.Model(gorm_model.YoungeeContractInfo{}).Where("task_id IN ? AND (default_status = 1 OR default_status = 5)", taskIds)
  764. err1 := db1.Find(&TerminatedInfos).Error
  765. if err1 != nil {
  766. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql find, err:%+v", err1)
  767. return nil, 0, err1
  768. }
  769. TerminatedMap := make(map[string]gorm_model.YoungeeContractInfo)
  770. for _, TerminatedInfo := range TerminatedInfos {
  771. fmt.Printf("TerminatedInfo%#v", TerminatedInfo)
  772. TerminatedMap[TerminatedInfo.TaskID] = TerminatedInfo
  773. }
  774. // 查询总数
  775. var totalTerminated int64
  776. if err := db1.Count(&totalTerminated).Error; err != nil {
  777. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql total, err:%+v", err)
  778. return nil, 0, err
  779. }
  780. // 查询该页数据
  781. limit := pageSize
  782. offset := pageSize * pageNum // assert pageNum start with 0
  783. err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
  784. if err != nil {
  785. logrus.WithContext(ctx).Errorf("[GetTaskTerminatedList] error query mysql total, err:%+v", err)
  786. return nil, 0, err
  787. }
  788. var TaskTerminateds []*http_model.TaskTerminated
  789. var taskTerminateds []*http_model.TaskTerminatedInfo
  790. var newTaskTerminateds []*http_model.TaskTerminatedInfo
  791. for _, taskId := range taskIds {
  792. TaskTerminated := new(http_model.TaskTerminated)
  793. TaskTerminated.Talent = taskMap[taskId]
  794. TaskTerminated.Default = TerminatedMap[taskId]
  795. TaskTerminateds = append(TaskTerminateds, TaskTerminated)
  796. }
  797. taskTerminateds = pack.TaskTerminatedToTaskInfo(TaskTerminateds)
  798. for _, v := range taskTerminateds {
  799. if platformNickname == "" {
  800. newTaskTerminateds = append(newTaskTerminateds, v)
  801. } else if strings.Contains(v.PlatformNickname, platformNickname) {
  802. newTaskTerminateds = append(newTaskTerminateds, v)
  803. } else if strings.Contains(conv.MustString(v.TaskID, ""), platformNickname) {
  804. newTaskTerminateds = append(newTaskTerminateds, v)
  805. } else {
  806. totalTask--
  807. }
  808. }
  809. return newTaskTerminateds, totalTask, nil
  810. }