| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | 
							- package model
 
- import (
 
- 	"fmt"
 
- 	"sort"
 
- 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/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"`
 
- }
 
 
  |