data_waring.go 7.3 KB

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