| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 
							- package model
 
- import (
 
- 	"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 []*IndicatorsData
 
- func (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"`
 
- }
 
 
  |