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"`
- }
|