package model import ( "time" "gitee.com/xuyiping_admin/pkg/xerr" pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow" ) const DefaultUserId = 0 type DataWarning struct { Id int64 `json:"id"` PastureId int64 `json:"pastureId"` UserId int64 `json:"userId"` Kind pasturePb.DataWarningType_Kind `json:"kind"` KindName string `json:"kindName"` Name string `json:"name"` Description string `json:"description"` DataValue string `json:"dataValue"` DataUpdateAt int64 `json:"dataUpdateAt"` ConditionUpdateAt int64 `json:"conditionUpdateAt"` IsShow pasturePb.IsShow_Kind `json:"isShow"` CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` } func (d *DataWarning) TableName() string { return "data_warning" } func DataWarningInitData(pastureId int64, dataWarningList []*pasturePb.ConfigOptionsList) []*DataWarning { res := make([]*DataWarning, 0) for _, v := range dataWarningList { res = append(res, NewDataWarning( pastureId, DefaultUserId, pasturePb.DataWarningType_Kind(v.Value), pasturePb.IsShow_Ok, &DataWarning{ Name: v.Label, Description: v.Props, })) } return res } func (d *DataWarning) GetWarningColumn() (headers map[string]string, headerSort []string, err error) { switch d.Kind { case pasturePb.DataWarningType_Sale_Standard: headers = map[string]string{ "cowId": "编号", "earNumber": "牛号", "penName": "栏舍", "admissionAge": "在群天数", "lastWeightAtFormat": "最后称重时间", "currentWeight": "当前体重(kg)", "avgDailyWeight": "日增重(kg)", } headerSort = []string{ "cowId", "earNumber", "penName", "admissionAge", "lastWeightAtFormat", "currentWeight", "avgDailyWeight", } case pasturePb.DataWarningType_UnPregnant_Mating_Time: headers = map[string]string{ "cowId": "编号", "earNumber": "牛号", "penName": "栏舍", "birthAtFormat": "出生日期", "cowTypeName": "牛只类型", "dayAge": "日龄", "breedStatusName": "繁殖状态", "lastMatingAtFormat": "最近配种时间", "matingTimes": "配次", "abortionTimes": "流产次数", } headerSort = []string{ "cowId", "earNumber", "penName", "birthAtFormat", "cowTypeName", "dayAge", "breedStatusName", "lastMatingAtFormat", "matingTimes", "abortionTimes", } case pasturePb.DataWarningType_Abortion_Time: headers = map[string]string{ "cowId": "编号", "earNumber": "牛号", "penName": "栏舍", "lact": "胎次", "matingAge": "配后天数", "breedStatusName": "繁殖状态", "abortionTimes": "流产次数", "lastAbortionAtFormat": "流产时间", "matingTimes": "配次", } headerSort = []string{ "cowId", "earNumber", "penName", "lact", "breedStatusName", "matingAge", "abortionTimes", "lastAbortionAtFormat", "matingTimes", } case pasturePb.DataWarningType_Over_Age_UnPaired_Young: headers = map[string]string{ "cowId": "编号", "earNumber": "牛号", "penName": "栏舍", "birthAtFormat": "出生日期", "dayAge": "日龄", } headerSort = []string{ "cowId", "earNumber", "penName", "birthAtFormat", "dayAge", } case pasturePb.DataWarningType_Over_Age_UnPregnant_Young: headers = map[string]string{ "cowId": "编号", "earNumber": "牛号", "penName": "栏舍", "birthAtFormat": "出生日期", "dayAge": "日龄", "breedStatusName": "繁殖状态", "lastMatingAtFormat": "配种日期", "matingTimes": "配次", "abortionTimes": "流产次数", } headerSort = []string{ "cowId", "earNumber", "penName", "birthAtFormat", "dayAge", "breedStatusName", "lastMatingAtFormat", "matingTimes", "abortionTimes", } case pasturePb.DataWarningType_Over_Month_UnSale: headers = map[string]string{ "cowId": "编号", "earNumber": "牛号", "penName": "栏舍", "admissionAtFormat": "入场日期", "admissionAge": "在群天数", "avgDailyWeight": "平均日增重", "lastWeightAtFormat": "上次称重日期", "currentWeight": "上次体重", "cowKindName": "品种", } headerSort = []string{ "cowId", "earNumber", "penName", "admissionAtFormat", "admissionAge", "avgDailyWeight", "lastWeightAtFormat", "currentWeight", "cowKindName", } default: return nil, nil, xerr.Custom("暂不支持该预警数据") } return headers, headerSort, nil } func NewDataWarningList(pastureId, userId int64, req []*pasturePb.WarningDataSet, warningMap map[pasturePb.DataWarningType_Kind]*DataWarning) []*DataWarning { res := make([]*DataWarning, 0) isAdd := make(map[pasturePb.DataWarningType_Kind]bool) for _, v := range req { if _, ok := isAdd[v.Kind]; ok { continue } isAdd[v.Kind] = true defaultDataWarning := warningMap[v.Kind] res = append(res, NewDataWarning(pastureId, userId, v.Kind, v.IsShow, defaultDataWarning)) } return res } func NewDataWarning(pastureId, userId int64, Kind pasturePb.DataWarningType_Kind, isShow pasturePb.IsShow_Kind, defaultDataWarning *DataWarning) *DataWarning { kindName := pasturePb.DataWarningType_Kind_name[int32(Kind)] return &DataWarning{ PastureId: pastureId, UserId: userId, Kind: Kind, KindName: kindName, Name: defaultDataWarning.Name, Description: defaultDataWarning.Description, IsShow: isShow, } } type DataWarningSlice []*DataWarning func (d DataWarningSlice) ToPB() []*pasturePb.WarningDataShow { res := make([]*pasturePb.WarningDataShow, 0) for _, warningData := range d { if warningData.DataValue == "0" { continue } dataUpdateTimeFormat := "" if warningData.DataUpdateAt > 0 { dataUpdateTimeFormat = time.Unix(warningData.DataUpdateAt, 0).Local().Format(LayoutTime) } res = append(res, &pasturePb.WarningDataShow{ Name: warningData.Name, Number: warningData.DataValue, Describe: warningData.Description, DataUpdateTimeFormat: dataUpdateTimeFormat, Kind: warningData.Kind, }) } return res } type WarningDataPopResponse struct { Code int32 `json:"code"` Msg string `json:"msg"` Data *WarningPop `json:"data"` } type WarningPop struct { Title string `json:"title"` Kind pasturePb.DataWarningType_Kind `json:"kind"` Headers map[string]string `json:"headers"` HeaderSort []string `json:"headerSort"` Total int32 `json:"total"` Page int32 `json:"page"` PageSize int32 `json:"pageSize"` DataList interface{} `json:"list"` }