default.go 32 KB

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