data_waring.go 7.5 KB

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