default.go 33 KB

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