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