data_waring.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package model
  2. import (
  3. "time"
  4. "gitee.com/xuyiping_admin/pkg/xerr"
  5. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  6. )
  7. const DefaultUserId = 0
  8. type DataWarning struct {
  9. Id int64 `json:"id"`
  10. PastureId int64 `json:"pastureId"`
  11. UserId int64 `json:"userId"`
  12. Kind pasturePb.DataWarningType_Kind `json:"kind"`
  13. Name string `json:"name"`
  14. Description string `json:"description"`
  15. DataValue string `json:"dataValue"`
  16. DataUpdateAt int64 `json:"dataUpdateAt"`
  17. ConditionUpdateAt int64 `json:"conditionUpdateAt"`
  18. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  19. CreatedAt int64 `json:"createdAt"`
  20. UpdatedAt int64 `json:"updatedAt"`
  21. }
  22. func (d *DataWarning) TableName() string {
  23. return "data_warning"
  24. }
  25. func (d *DataWarning) GetWarningColumn() (headers map[string]string, headerSort []string, err error) {
  26. switch d.Kind {
  27. case pasturePb.DataWarningType_Sale_Standard:
  28. headers = map[string]string{
  29. "cowId": "编号",
  30. "earNumber": "牛号",
  31. "penName": "栏舍",
  32. "admissionAge": "在群天数",
  33. "lastWeightAtFormat": "最后称重时间",
  34. "currentWeight": "当前体重(kg)",
  35. "avgDailyWeight": "日增重(kg)",
  36. }
  37. headerSort = []string{
  38. "cowId",
  39. "earNumber",
  40. "penName",
  41. "admissionAge",
  42. "lastWeightAtFormat",
  43. "currentWeight",
  44. "avgDailyWeight",
  45. }
  46. case pasturePb.DataWarningType_UnPregnant_Mating_Time:
  47. headers = map[string]string{
  48. "cowId": "编号",
  49. "earNumber": "牛号",
  50. "penName": "栏舍",
  51. "birthAtFormat": "出生日期",
  52. "cowTypeName": "牛只类型",
  53. "dayAge": "日龄",
  54. "breedStatusName": "繁殖状态",
  55. "lastMatingAtFormat": "最近配种时间",
  56. "matingTimes": "配次",
  57. "abortionTimes": "流产次数",
  58. }
  59. headerSort = []string{
  60. "cowId",
  61. "earNumber",
  62. "penName",
  63. "birthAtFormat",
  64. "cowTypeName",
  65. "dayAge",
  66. "breedStatusName",
  67. "lastMatingAtFormat",
  68. "matingTimes",
  69. "abortionTimes",
  70. }
  71. case pasturePb.DataWarningType_Abortion_Time:
  72. headers = map[string]string{
  73. "cowId": "编号",
  74. "earNumber": "牛号",
  75. "penName": "栏舍",
  76. "lact": "胎次",
  77. "matingAge": "配后天数",
  78. "breedStatusName": "繁殖状态",
  79. "abortionTimes": "流产次数",
  80. "lastAbortionAtFormat": "流产时间",
  81. "matingTimes": "配次",
  82. }
  83. headerSort = []string{
  84. "cowId",
  85. "earNumber",
  86. "penName",
  87. "lact",
  88. "breedStatusName",
  89. "matingAge",
  90. "abortionTimes",
  91. "lastAbortionAtFormat",
  92. "matingTimes",
  93. }
  94. case pasturePb.DataWarningType_Over_Age_UnPaired_Young:
  95. headers = map[string]string{
  96. "cowId": "编号",
  97. "earNumber": "牛号",
  98. "penName": "栏舍",
  99. "birthAtFormat": "出生日期",
  100. "dayAge": "日龄",
  101. }
  102. headerSort = []string{
  103. "cowId",
  104. "earNumber",
  105. "penName",
  106. "birthAtFormat",
  107. "dayAge",
  108. }
  109. case pasturePb.DataWarningType_Over_Age_UnPregnant_Young:
  110. headers = map[string]string{
  111. "cowId": "编号",
  112. "earNumber": "牛号",
  113. "penName": "栏舍",
  114. "birthAtFormat": "出生日期",
  115. "dayAge": "日龄",
  116. "breedStatusName": "繁殖状态",
  117. "lastMatingAtFormat": "配种日期",
  118. "matingTimes": "配次",
  119. "abortionTimes": "流产次数",
  120. }
  121. headerSort = []string{
  122. "cowId",
  123. "earNumber",
  124. "penName",
  125. "birthAtFormat",
  126. "dayAge",
  127. "breedStatusName",
  128. "lastMatingAtFormat",
  129. "matingTimes",
  130. "abortionTimes",
  131. }
  132. case pasturePb.DataWarningType_Over_Month_UnSale:
  133. headers = map[string]string{
  134. "cowId": "编号",
  135. "earNumber": "牛号",
  136. "penName": "栏舍",
  137. "admissionAtFormat": "入场日期",
  138. "admissionAge": "在群天数",
  139. "avgDailyWeight": "平均日增重",
  140. "lastWeightAtFormat": "上次称重日期",
  141. "currentWeight": "上次体重",
  142. "cowKindName": "品种",
  143. }
  144. headerSort = []string{
  145. "cowId",
  146. "earNumber",
  147. "penName",
  148. "admissionAtFormat",
  149. "admissionAge",
  150. "avgDailyWeight",
  151. "lastWeightAtFormat",
  152. "currentWeight",
  153. "cowKindName",
  154. }
  155. default:
  156. return nil, nil, xerr.Custom("暂不支持该预警数据")
  157. }
  158. return headers, headerSort, nil
  159. }
  160. func NewDataWarningList(pastureId, userId int64, req []*pasturePb.WarningDataSet, warningMap map[pasturePb.DataWarningType_Kind]*DataWarning) []*DataWarning {
  161. res := make([]*DataWarning, 0)
  162. isAdd := make(map[pasturePb.DataWarningType_Kind]bool)
  163. for _, v := range req {
  164. if _, ok := isAdd[v.Kind]; ok {
  165. continue
  166. }
  167. isAdd[v.Kind] = true
  168. defaultDataWarning := warningMap[v.Kind]
  169. res = append(res, NewDataWarning(pastureId, userId, v.Kind, v.IsShow, defaultDataWarning))
  170. }
  171. return res
  172. }
  173. func NewDataWarning(pastureId, userId int64, Kind pasturePb.DataWarningType_Kind, isShow pasturePb.IsShow_Kind, defaultDataWarning *DataWarning) *DataWarning {
  174. return &DataWarning{
  175. PastureId: pastureId,
  176. UserId: userId,
  177. Kind: Kind,
  178. Name: defaultDataWarning.Name,
  179. Description: defaultDataWarning.Description,
  180. IsShow: isShow,
  181. }
  182. }
  183. type DataWarningSlice []*DataWarning
  184. func (d DataWarningSlice) ToPB() []*pasturePb.WarningDataShow {
  185. res := make([]*pasturePb.WarningDataShow, 0)
  186. for _, warningData := range d {
  187. if warningData.IsShow != pasturePb.IsShow_Ok || warningData.DataValue == "0" {
  188. continue
  189. }
  190. dataUpdateTimeFormat := ""
  191. if warningData.DataUpdateAt > 0 {
  192. dataUpdateTimeFormat = time.Unix(warningData.DataUpdateAt, 0).Local().Format(LayoutTime)
  193. }
  194. res = append(res, &pasturePb.WarningDataShow{
  195. Name: warningData.Name,
  196. Number: warningData.DataValue,
  197. Describe: warningData.Description,
  198. DataUpdateTimeFormat: dataUpdateTimeFormat,
  199. Kind: warningData.Kind,
  200. })
  201. }
  202. return res
  203. }
  204. type WarningDataPopResponse struct {
  205. Code int32 `json:"code"`
  206. Msg string `json:"msg"`
  207. Data *WarningPop `json:"data"`
  208. }
  209. type WarningPop struct {
  210. Title string `json:"title"`
  211. Kind pasturePb.DataWarningType_Kind `json:"kind"`
  212. Headers map[string]string `json:"headers"`
  213. HeaderSort []string `json:"headerSort"`
  214. Total int32 `json:"total"`
  215. Page int32 `json:"page"`
  216. PageSize int32 `json:"pageSize"`
  217. DataList interface{} `json:"list"`
  218. }