default.go 34 KB

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