default.go 33 KB

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