work_order_master.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package model
  2. import (
  3. "encoding/json"
  4. "kpt-pasture/http/util"
  5. "strconv"
  6. "strings"
  7. "time"
  8. "github.com/hibiken/asynq"
  9. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  10. )
  11. const (
  12. QueueWorkOrder = "workOrder"
  13. TaskWorkOrder = "event:workOrder"
  14. )
  15. func AsynqQueueWorkOrder() asynq.Option {
  16. return asynq.Queue(QueueWorkOrder)
  17. }
  18. type WorkOrderMaster struct {
  19. Id int64 `json:"id"`
  20. Name string `json:"name"`
  21. CategoryId pasturePb.WorkOrderCategory_Kind `json:"categoryId"`
  22. CategoryName string `json:"categoryName"`
  23. Priority pasturePb.Priority_Kind `json:"priority"`
  24. Frequency pasturePb.WorkOrderFrequency_Kind `json:"frequency"`
  25. ExecTime string `json:"execTime"`
  26. SubscribeUnit pasturePb.WorkOrderSubscribeUnit_Kind `json:"subscribeUnit"`
  27. ExecPersons string `json:"execPersons"`
  28. ExecPersonNames string `json:"execPersonsNames"`
  29. WeekMonthValue string `json:"WeekMonthValue"`
  30. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  31. Photos string `json:"photos"`
  32. Remarks string `json:"remarks"`
  33. OperationId int64 `json:"operationId"`
  34. OperationName string `json:"operationName"`
  35. CreatedAt int64 `json:"createdAt"`
  36. UpdatedAt int64 `json:"updatedAt"`
  37. }
  38. func (w *WorkOrderMaster) TableName() string {
  39. return "work_order_master"
  40. }
  41. func NewWorkOrderMaster(
  42. req *pasturePb.WorkOrderList,
  43. curUser *SystemUser,
  44. systemUserList []*SystemUser,
  45. workOrderCategoryMap map[pasturePb.WorkOrderCategory_Kind]string,
  46. ) *WorkOrderMaster {
  47. execPersonNames := make([]string, 0)
  48. if len(req.ExecPersons) > 0 {
  49. for _, vv := range systemUserList {
  50. for _, v := range req.ExecPersons {
  51. if int32(vv.Id) != v {
  52. continue
  53. }
  54. execPersonNames = append(execPersonNames, vv.Name)
  55. }
  56. for _, depId := range req.ExecDepartmental {
  57. if int64(depId) != vv.DeptId {
  58. continue
  59. }
  60. execPersonNames = append(execPersonNames, vv.Name)
  61. }
  62. }
  63. }
  64. weekMonthValue := ""
  65. if req.Frequency == pasturePb.WorkOrderFrequency_Weekly || req.Frequency == pasturePb.WorkOrderFrequency_Monthly {
  66. weekMonthValue = util.Int32SliceToString(req.WeekMonthValue, ",")
  67. }
  68. return &WorkOrderMaster{
  69. Name: req.Name,
  70. CategoryId: req.CategoryId,
  71. CategoryName: workOrderCategoryMap[req.CategoryId],
  72. Priority: req.Priority,
  73. ExecTime: req.ExecTime,
  74. SubscribeUnit: req.SubscribeUnit,
  75. ExecPersons: util.Int32SliceToString(req.ExecPersons, ","),
  76. ExecPersonNames: strings.Join(execPersonNames, ","),
  77. WeekMonthValue: weekMonthValue,
  78. IsShow: req.IsShow,
  79. Photos: strings.Join(req.Photos, ","),
  80. Frequency: req.Frequency,
  81. Remarks: req.Remarks,
  82. OperationId: curUser.Id,
  83. OperationName: curUser.Name,
  84. }
  85. }
  86. type TaskWorkOrderPayload struct {
  87. WorkOrderId int64 `json:"workOrderId"`
  88. }
  89. func NewTaskWorkOrderOption(processAt int64) []asynq.Option {
  90. return []asynq.Option{
  91. asynq.MaxRetry(3),
  92. AsynqQueueWorkOrder(),
  93. asynq.ProcessAt(time.Unix(processAt, 64)),
  94. }
  95. }
  96. func NewTaskWorkOrderPayload(id int64, execTime time.Duration) *asynq.Task {
  97. payload, _ := json.Marshal(TaskWorkOrderPayload{
  98. WorkOrderId: id,
  99. })
  100. processAt := time.Now().Add(execTime).Unix()
  101. return asynq.NewTask(TaskWorkOrder, payload, NewTaskWorkOrderOption(processAt)...)
  102. }
  103. type WorkOrderMasterSlice []*WorkOrderMaster
  104. func (w WorkOrderMasterSlice) ToPB(
  105. priorityMap map[pasturePb.Priority_Kind]string,
  106. frequencyMap map[pasturePb.WorkOrderFrequency_Kind]string,
  107. subscribeUnitMap map[pasturePb.WorkOrderSubscribeUnit_Kind]string,
  108. weekMap map[pasturePb.Week_Kind]string,
  109. monthMap map[int32]string,
  110. ) []*pasturePb.WorkOrderList {
  111. res := make([]*pasturePb.WorkOrderList, len(w))
  112. for i, v := range w {
  113. execPersons, weekMonthValue := make([]int32, 0), make([]int32, 0)
  114. weekMonthValueName := make([]string, 0)
  115. if len(v.ExecPersons) > 0 {
  116. for _, personId := range strings.Split(v.ExecPersons, ",") {
  117. p, _ := strconv.Atoi(personId)
  118. execPersons = append(execPersons, int32(p))
  119. }
  120. }
  121. if len(v.WeekMonthValue) > 0 {
  122. for _, week := range strings.Split(v.WeekMonthValue, ",") {
  123. k, _ := strconv.Atoi(week)
  124. if v.Frequency == pasturePb.WorkOrderFrequency_Weekly {
  125. weekMonthValueName = append(weekMonthValueName, weekMap[pasturePb.Week_Kind(k)])
  126. }
  127. if v.Frequency == pasturePb.WorkOrderFrequency_Monthly {
  128. weekMonthValueName = append(weekMonthValueName, monthMap[int32(k)])
  129. }
  130. weekMonthValue = append(weekMonthValue, int32(k))
  131. }
  132. }
  133. res[i] = &pasturePb.WorkOrderList{
  134. Id: int32(v.Id),
  135. Name: v.Name,
  136. CategoryId: v.CategoryId,
  137. CategoryName: v.CategoryName,
  138. Priority: v.Priority,
  139. PriorityName: priorityMap[v.Priority],
  140. Frequency: v.Frequency,
  141. FrequencyName: frequencyMap[v.Frequency],
  142. ExecTime: v.ExecTime,
  143. SubscribeUnit: v.SubscribeUnit,
  144. SubscribeUnitName: subscribeUnitMap[v.SubscribeUnit],
  145. ExecPersons: execPersons,
  146. ExecPersonsNames: strings.Split(v.ExecPersonNames, ","),
  147. IsShow: v.IsShow,
  148. Photos: strings.Split(v.Photos, ","),
  149. WeekMonthValue: weekMonthValue,
  150. WeekMonthValueName: weekMonthValueName,
  151. Remarks: v.Remarks,
  152. OperatorId: int32(v.OperationId),
  153. OperatorName: v.OperationName,
  154. CreatedAt: int32(v.CreatedAt),
  155. UpdatedAt: int32(v.UpdatedAt),
  156. }
  157. }
  158. return res
  159. }