| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | package modelimport (	"fmt"	"sort"	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow")const (	AllCow                           = "all_cow"                               // 全群牛头数	AdultCow                         = "adult_cow"                             // 成母牛头数	AvgCalvingInterval               = "avg_calving_interval"                  // 产犊间隔	OutputNumber                     = "output_number"                         // 出栏量(销售)	InputNumber                      = "input_number"                          // 入栏量(购入)	SalesVolume                      = "sales_volume"                          // 销售额	FattenCattleNumber               = "fatten_cattle_number"                  // 育肥牛头数	CalvingNumber                    = "calving_number"                        // 产犊事件总数	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"                           // 后备牛头数	FirstBornSurvivalRate            = "first_born_survival_rate"              // 头胎牛接产成活率	FirstBornDeathRate               = "first_born_death_rate"                 // 头胎牛接产死亡率	MultiparitySurvivalRate          = "multiparity_survival_rate"             // 成母牛接产成活率	MultiparityDeathRate             = "multiparity_death_rate"                // 成母牛接产死亡率	AvgAgeFirstMate                  = "avg_age_first_mate"                    // 平均首配日龄	YouthPregnantRate                = "youth_pregnant_rate"                   // 后备牛怀孕率	MultiparityPregnantRate          = "multiparity_pregnant_rate"             // 成母牛怀孕率	MultipartyFirstCheckRate         = "multiparty_first_check_rate"           //成母牛初检有胎率	MultipartySecondCheckRate        = "multiparty_second_check_rate"          // 成母牛复检有胎率	YouthFirstCheckRate              = "youth_first_check_rate"                // 后备牛初检有胎率	YouthSecondCheckRate             = "youth_second_check_rate"               // 后备牛复检有胎率	ForbiddenCowNumber               = "forbidden_cow_number"                  // 禁配牛总数	AvgRegistrationDays              = "avg_registration_days"                 // 平均配准天数	AvgPregnancyDays                 = "avg_pregnancy_days"                    // 平均怀孕天数	AvgGestationalAge                = "avg_gestational_age"                   // 平均受孕日龄	Month17UnPregnancyRate           = "month17_un_pregnancy_rate"             // 17月未孕比例	Month20UnPregnancyRate           = "month20_un_pregnancy_rate"             // 20月未孕比例	Multiparty150DaysUnPregnancyRate = "multiparty_150_days_un_pregnancy_rate" // 成母牛150天未孕比例	MultipartyAbortionNumber         = "multiparty_abortion_number"            // 成母牛流产头数	MultipartyAbortionRate           = "multiparty_abortion_rate"              // 成母牛流产率(全)	MultipartyPregnancyNumber        = "multiparty_pregnancy_number"           // 成母牛怀孕头数	MultipartyOutNumber              = "multiparty_out_number"                 // 成母牛淘汰头数	MultipartyDieNumber              = "multiparty_die_number"                 // 成母牛死亡头数	Calving60DieRate                 = "calving60_die_rate"                    // 产后60天死亡率	Calving60OutRate                 = "calving60_out_rate"                    // 产后60天淘汰率	AvgDepartureWeight               = "avg_departure_weight"                  // 出栏均重	AvgSlaughterCycle                = "avg_slaughter_cycle"                   // 平均出栏周期	SurvivalLiveRate                 = "survival_live_rate"                    // 接产成活率	StillbirthRate                   = "stillbirth_rate"                       // 死胎率	FemaleCalfRate                   = "female_calf_rate"                      // 母犊率	WeaningDailyWeight               = "weaning_daily_weight"                  // 断奶日增重	Day60DieRate                     = "day60_die_rate"                        // 60日龄死亡率	AdultPrematureBirthRate          = "adult_premature_birth_rate"            // 成母牛早产率	YouthPrematureBirthRate          = "youth_premature_birth_rate"            // 青年牛早产率	LessThan6monthCalfNumber         = "less_than_6month_calf_number"          // <6月龄犊牛头数	AdultCowsPregnancyRate           = "adult_cows_pregnancy_rate"             // 成母牛受胎率	Lact1PregnancyRate               = "lact1_pregnancy_rate"                  // 1胎受胎率	Lact2PregnancyRate               = "lact2_pregnancy_rate"                  // 2胎受孕率	Lact3PregnancyRate               = "lact3_pregnancy_rate"                  // >=3胎受孕率	FirstMatingPregnancyRate         = "first_mating_pregnancy_rate"           // 第1次配种受胎率	SecondMatingPregnancyRate        = "second_mating_pregnancy_rate"          // 第2次配种受胎率	Day75DayMatingRate               = "day75_day_mating_rate"                 // 75天配种率(在群)	Day75DMonthMatingRate            = "day75_month_mating_rate"               // 75天配种率(月度)	AvgAdultCowEmptyNumber           = "avg_adult_cow_empty_number"            // 成母牛平均空怀天数	AdultCowPregnantCheckOkRate      = "adult_cow_pregnant_check_ok_rate"      // 成母牛孕检怀孕比	YouthCowPregnantCheckOkRate      = "youth_cow_pregnant_check_ok_rate"      // 后备牛孕检怀孕比	AdultCowForbiddenMatingRate      = "adult_cow_forbidden_mating_rate"       // 成母牛禁配占比	YouthCowForbiddenMatingRate      = "youth_cow_forbidden_mating_rate"       // 青年牛禁配占比	AdultCowForbiddenMatingNumber    = "adult_cow_forbidden_mating_number"     // 成母牛禁配事件数	YouthCowForbiddenMatingNumber    = "youth_cow_forbidden_mating_number"     // 后备牛禁配事件数	NoPregnant110SecondMatingRate    = "no_pregnant110_second_mating_rate"     // 110天未孕成母牛二次参配率)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"`}
 |