event_sale.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package model
  2. import (
  3. "strings"
  4. "time"
  5. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  6. )
  7. type EventSale struct {
  8. Id int64 `json:"id"`
  9. PastureId int64 `json:"pastureId"`
  10. DealerId int32 `json:"dealerId"`
  11. DealerName string `json:"dealerName"`
  12. SalePrice float64 `json:"salePrice"`
  13. SaleAllWeight int32 `json:"saleAllWeight"`
  14. SaleAllAmount int64 `json:"saleAllAmount"`
  15. SaleCowCount int32 `json:"saleCowCount"`
  16. SaleKind pasturePb.SalesType_Kind `json:"saleKind"`
  17. OutReasonsKind pasturePb.OutReasons_Kind `json:"outReasonsKind"`
  18. OutReasonsName string `json:"outReasonsName"`
  19. SaleAt int64 `json:"saleAt"`
  20. SaleTicker string `json:"saleTicker"`
  21. QuarantineReport string `json:"quarantineReport"`
  22. Remarks string `json:"remarks"`
  23. OperationId int64 `json:"operationId"`
  24. OperationName string `json:"operationName"`
  25. MessageId int64 `json:"messageId"`
  26. MessageName string `json:"messageName"`
  27. CreatedAt int64 `json:"createdAt"`
  28. UpdatedAt int64 `json:"updatedAt"`
  29. }
  30. func (e *EventSale) TableName() string {
  31. return "event_sale"
  32. }
  33. func NewEventSale(pastureId int64, dealerInfo *SaleDealer, req *pasturePb.EventCowSale, operationUser, currUser *SystemUser) *EventSale {
  34. return &EventSale{
  35. PastureId: pastureId,
  36. DealerId: dealerInfo.Id,
  37. DealerName: dealerInfo.Name,
  38. SalePrice: float64(req.SalePrice),
  39. SaleAllWeight: int32(req.SaleAllWeight * 1000),
  40. SaleAllAmount: int64(req.SaleAllPrice * 100),
  41. SaleCowCount: int32(len(req.EarNumbers)),
  42. SaleKind: req.SalesType,
  43. OutReasonsKind: req.OutReasonsKind,
  44. OutReasonsName: req.OutReasonsName,
  45. SaleAt: int64(req.SaleAt),
  46. SaleTicker: strings.Join(req.SaleTicket, ","),
  47. QuarantineReport: strings.Join(req.QuarantineReport, ","),
  48. Remarks: req.Remarks,
  49. OperationId: operationUser.Id,
  50. OperationName: operationUser.Name,
  51. MessageId: currUser.Id,
  52. MessageName: currUser.Name,
  53. }
  54. }
  55. type EventSaleSlice []*EventSale
  56. func (e EventSaleSlice) ToPB(eventSaleCarMap map[int64][]*EventSaleCar, eventSaleCowMap map[int64][]*EventSaleCow) []*pasturePb.EventCowSale {
  57. res := make([]*pasturePb.EventCowSale, len(e))
  58. for i, v := range e {
  59. saleVehicleItems := make([]*pasturePb.SaleVehicleItem, 0)
  60. if eventSaleCarItems, ok := eventSaleCarMap[v.Id]; ok {
  61. for _, item := range eventSaleCarItems {
  62. es, weighbridgePhotos, vehiclePhotos := make([]string, 0), make([]string, 0), make([]string, 0)
  63. if item.EarNumbers != "" {
  64. es = strings.Split(item.EarNumbers, ",")
  65. }
  66. if item.WeighbridgePhotos != "" {
  67. weighbridgePhotos = strings.Split(item.WeighbridgePhotos, ",")
  68. }
  69. if item.CarPhotos != "" {
  70. vehiclePhotos = strings.Split(item.CarPhotos, ",")
  71. }
  72. saleVehicleItem := &pasturePb.SaleVehicleItem{
  73. CarNumber: item.CarNumber,
  74. CowCount: item.CowCount,
  75. CowWeight: float32(item.CowWeight) / 1000,
  76. OutboundTicket: item.OutboundTicket,
  77. WeighbridgePhotos: weighbridgePhotos,
  78. VehiclePhotos: vehiclePhotos,
  79. EarNumbers: es,
  80. }
  81. saleVehicleItems = append(saleVehicleItems, saleVehicleItem)
  82. }
  83. }
  84. earNumbers := make([]string, 0)
  85. saleCount := int32(0)
  86. if cowList, ok := eventSaleCowMap[v.Id]; ok {
  87. for _, cow := range cowList {
  88. earNumbers = append(earNumbers, cow.EarNumber)
  89. saleCount++
  90. }
  91. }
  92. res[i] = &pasturePb.EventCowSale{
  93. DealerId: v.DealerId,
  94. DealerName: v.DealerName,
  95. SaleAt: int32(v.SaleAt),
  96. EarNumbers: earNumbers,
  97. SalesType: v.SaleKind,
  98. OutReasonsKind: v.OutReasonsKind,
  99. OutReasonsName: v.OutReasonsName,
  100. SaleAllWeight: float32(v.SaleAllWeight) / 1000,
  101. SaleAllPrice: float32(v.SaleAllAmount) / 100,
  102. SalePrice: float32(v.SalePrice),
  103. OperationId: int32(v.OperationId),
  104. OperationName: v.OperationName,
  105. Remarks: v.Remarks,
  106. SaleTicket: strings.Split(v.SaleTicker, ","),
  107. QuarantineReport: strings.Split(v.QuarantineReport, ","),
  108. SaleVehicleItems: saleVehicleItems,
  109. SaleCount: saleCount,
  110. }
  111. }
  112. return res
  113. }
  114. func (e EventSaleSlice) ToPB2(monthRang []string) *pasturePb.OutNumber {
  115. res := &pasturePb.OutNumber{
  116. Month: monthRang,
  117. Number: make([]int32, 0),
  118. Name: "近6个月的出栏量 ",
  119. }
  120. for i, m := range monthRang {
  121. for _, v := range e {
  122. month := time.Unix(v.SaleAt, 0).Format(LayoutMonth)
  123. if month == m {
  124. res.Number[i] += v.SaleCowCount
  125. }
  126. }
  127. }
  128. return res
  129. }
  130. type EventSaleModel struct {
  131. CowList []*Cow
  132. SalesType pasturePb.SalesType_Kind
  133. SaleAt int64
  134. EventSaleCarList []*EventSaleCar
  135. EventSaleCowList []*EventSaleCow
  136. NeckRingList []*NeckRing
  137. EventCowLog []*EventCowLog
  138. }