| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | package modelimport (	"fmt"	"sort"	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow")const (	AllCow            = "all_cow"	AdultCow          = "adult_cow"	CalvingInterval   = "calving_interval"	OutputNumber      = "output_number"	InputNumber       = "input_number"	SalesVolume       = "sales_volume"	CalvingNumber     = "calving_number"	AdultAbortionRate = "adult_abortion_rate"	YouthAbortionRate = "youth_abortion_rate"	AllDieNumber      = "all_die_number"	DiseaseNumber     = "disease_number"	CureNumber        = "cure_number"	OutNumber         = "out_number"	CalfDieNumber     = "calf_die_number"	LactationCow      = "lactation_cow"	DryMilkCow        = "dry_milk_cow"	ReserveCow        = "reserve_cow")type IndicatorsData struct {	Id           int64                        `json:"id"`	PastureId    int64                        `json:"pastureId"`	CategoryType pasturePb.IndicatorType_Kind `json:"categoryType"`	CategoryName string                       `json:"categoryName"`	Date         string                       `json:"date"`	Kind         string                       `json:"kind"`	Value        string                       `json:"value"`	CreatedAt    int64                        `json:"createdAt"`	UpdatedAt    int64                        `json:"updatedAt"`}func (d *IndicatorsData) TableName() string {	return "indicators_data"}type IndicatorsDataSlice []*IndicatorsDatafunc (i IndicatorsDataSlice) ToPB(header, kinds []string, detailsMap map[string]*IndicatorsDetails) *IndicatorComparison {	res := &IndicatorComparison{		Headers: header,		List:    make([]map[string]string, 0),	}	if len(header) <= 0 || len(detailsMap) <= 0 || len(kinds) <= 0 || len(i) <= 0 {		return res	}	sort.Strings(res.Headers) // 确保日期顺序一致	indicatorsDataMap := make(map[string]*IndicatorsData)	for _, v := range i {		indicatorsDataMap[fmt.Sprintf("%s-%s", v.Kind, v.Date)] = v	}	dataMap := make(map[string]map[string]string)	for _, kind := range kinds {		if dataMap[kind] == nil {			dataMap[kind] = make(map[string]string)		}		details := detailsMap[kind]		dataMap[kind] = map[string]string{			"name":         details.Name,			"kind":         details.Kind,			"unit":         details.Unit,			"categoryType": fmt.Sprintf("%d", details.CategoryType),			"categoryName": details.CategoryName,			"zh":           details.Zh,		}		for _, v := range header {			pref := fmt.Sprintf("%s-%s", kind, v)			indicators, ok := indicatorsDataMap[pref]			if ok {				dataMap[kind][v] = indicators.Value			} else {				dataMap[kind][v] = ""			}		}	}	for _, data := range dataMap {		res.List = append(res.List, data)	}	return res}type IndicatorsComparisonResponse struct {	Code int32                `json:"code"`	Msg  string               `json:"msg"`	Data *IndicatorComparison `json:"data"`}type IndicatorComparison struct {	Headers []string            `json:"headers"`	List    []map[string]string `json:"list"`}
 |