123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package model
- import (
- "fmt"
- "sort"
- "gitee.com/xuyiping_admin/pkg/logger/zaplog"
- "go.uber.org/zap"
- 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(detailsMap map[string]*IndicatorsDetails) *IndicatorComparison {
- res := &IndicatorComparison{
- Headers: make([]string, 0),
- List: make([]map[string]string, 0),
- }
- dateSet := make(map[string]struct{}) // 使用空结构体节省内存
- for _, v := range i {
- dateSet[v.Date] = struct{}{}
- }
- for date := range dateSet {
- res.Headers = append(res.Headers, date)
- }
- sort.Strings(res.Headers) // 确保日期顺序一致
- dataMap := make(map[string]map[string]string)
- for _, v := range i {
- details, ok := detailsMap[v.Kind]
- if !ok {
- zaplog.Error("detailsMap", zap.Any("Kind", v.Kind))
- continue
- }
- if data, exists := dataMap[details.Kind]; exists {
- data[v.Date] = v.Value
- } else {
- data = make(map[string]string)
- for _, date := range res.Headers {
- data[date] = "" // 初始化所有日期为空字符串
- }
- data[v.Date] = v.Value
- data["name"] = details.Name
- data["kind"] = details.Kind
- data["unit"] = details.Unit
- data["categoryType"] = fmt.Sprintf("%d", details.CategoryType)
- data["categoryName"] = details.CategoryName
- data["zh"] = details.Zh
- dataMap[details.Kind] = data
- }
- }
- 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"`
- }
|