same_time.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package model
  2. import (
  3. "encoding/json"
  4. "sort"
  5. "strings"
  6. "gitee.com/xuyiping_admin/pkg/logger/zaplog"
  7. "go.uber.org/zap"
  8. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  9. )
  10. const WeekTypeSeparator = "|"
  11. type SameTime struct {
  12. Id int64 `json:"id"`
  13. PastureId int64 `json:"pastureId"`
  14. Name string `json:"name"`
  15. WeekType string `json:"weekType"`
  16. CowType pasturePb.SameTimeCowType_Kind `json:"cowType"`
  17. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  18. PostpartumDaysStart int32 `json:"postpartumDaysStart"`
  19. PostpartumDaysEnd int32 `json:"postpartumDaysEnd"`
  20. CollateNodes string `json:"collateNodes"`
  21. Remarks string `json:"remarks"`
  22. OperationId int64 `json:"operationId"`
  23. CreatedAt int64 `json:"createdAt"`
  24. UpdatedAt int64 `json:"updatedAt"`
  25. }
  26. func (e *SameTime) TableName() string {
  27. return "same_time"
  28. }
  29. func NewSameTime(pastureId int64, currentUser *SystemUser, req *pasturePb.SearchSameTimeList) *SameTime {
  30. var collateNodes []byte
  31. if len(req.CollateNodes) > 0 {
  32. collateNodes, _ = json.Marshal(req.CollateNodes)
  33. }
  34. weekType := ""
  35. if len(req.WeekType) > 0 {
  36. sort.Slice(req.WeekType, func(i, j int) bool {
  37. return req.WeekType[i] < req.WeekType[j]
  38. })
  39. for _, v := range req.WeekType {
  40. weekType += v.String() + WeekTypeSeparator
  41. }
  42. }
  43. if len(weekType) > 0 {
  44. weekType = weekType[:len(weekType)-1]
  45. }
  46. return &SameTime{
  47. PastureId: pastureId,
  48. Name: req.Name,
  49. WeekType: weekType,
  50. CowType: req.CowType,
  51. IsShow: pasturePb.IsShow_Ok,
  52. PostpartumDaysStart: req.PostpartumDaysStart,
  53. PostpartumDaysEnd: req.PostpartumDaysEnd,
  54. CollateNodes: string(collateNodes),
  55. Remarks: req.Remarks,
  56. OperationId: currentUser.Id,
  57. }
  58. }
  59. type SameTimeSlice []*SameTime
  60. func (e SameTimeSlice) ToPB(
  61. weekMap map[pasturePb.Week_Kind]string,
  62. sameTimeCowTypeMap map[pasturePb.SameTimeCowType_Kind]string,
  63. systemUserList []*SystemUser,
  64. ) []*pasturePb.SearchSameTimeList {
  65. res := make([]*pasturePb.SearchSameTimeList, len(e))
  66. for i, v := range e {
  67. operationName := ""
  68. for _, u := range systemUserList {
  69. if u.Id != v.OperationId {
  70. continue
  71. }
  72. operationName = u.Name
  73. }
  74. collectionNodes := make([]*pasturePb.CollateNode, 0)
  75. if err := json.Unmarshal([]byte(v.CollateNodes), &collectionNodes); err != nil {
  76. zaplog.Error("json.Unmarshal SameTimeSlice.ToPB error", zap.Any("err", err))
  77. }
  78. weekType := make([]pasturePb.Week_Kind, 0)
  79. weekName := ""
  80. for _, w := range strings.Split(v.WeekType, WeekTypeSeparator) {
  81. wt := pasturePb.Week_Kind(pasturePb.Week_Kind_value[w])
  82. weekType = append(weekType, wt)
  83. weekName += weekMap[wt] + WeekTypeSeparator
  84. }
  85. if len(weekName) > 0 {
  86. weekName = weekName[:len(weekName)-1]
  87. }
  88. res[i] = &pasturePb.SearchSameTimeList{
  89. Id: int32(v.Id),
  90. Name: v.Name,
  91. WeekType: weekType,
  92. WeekName: weekName,
  93. CowType: v.CowType,
  94. CowTypeName: sameTimeCowTypeMap[v.CowType],
  95. IsShow: v.IsShow,
  96. PostpartumDaysStart: v.PostpartumDaysStart,
  97. PostpartumDaysEnd: v.PostpartumDaysEnd,
  98. CollateNodes: collectionNodes,
  99. Remarks: v.Remarks,
  100. OperationId: int32(v.OperationId),
  101. OperationName: operationName,
  102. CreatedAt: int32(v.CreatedAt),
  103. UpdatedAt: int32(v.UpdatedAt),
  104. }
  105. }
  106. return res
  107. }