123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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" // 产犊事件总数
- AdultAbortionRate = "adult_abortion_rate" //成母牛流产率(全)
- 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" // 青年牛早产率
- )
- 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"`
- }
|