|
@@ -13,12 +13,16 @@ import (
|
|
|
|
|
|
// SingleFactorInfantSurvivalRateAnalysis 单因素受胎率分析
|
|
|
func (s *StoreEntry) SingleFactorInfantSurvivalRateAnalysis(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) (*pasturePb.SingleFactorPregnancyRateResponse, error) {
|
|
|
+ userModel, err := s.GetUserModel(ctx)
|
|
|
+ if err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
startTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
|
if startTimeUnix == 0 || endTimeUnix == 0 || endTimeUnix <= startTimeUnix {
|
|
|
return nil, xerr.Custom("开始时间不能大于结束时间")
|
|
|
}
|
|
|
- var err error
|
|
|
list := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
chart := &pasturePb.SingleFactorPregnancyRateChart{
|
|
|
Headers: make([]string, 0),
|
|
@@ -29,27 +33,27 @@ func (s *StoreEntry) SingleFactorInfantSurvivalRateAnalysis(ctx context.Context,
|
|
|
}
|
|
|
switch req.AnalysisMethod {
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Cycle:
|
|
|
- list, err = s.SingleFactorAnalysisMethodCycle(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodCycle(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Months:
|
|
|
- list, err = s.SingleFactorAnalysisMethodMonths(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodMonths(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Mating_Times:
|
|
|
- list, err = s.SingleFactorAnalysisMethodMatingTimes(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodMatingTimes(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Breeding_Method:
|
|
|
- list, err = s.SingleFactorAnalysisMethodBreeding(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodBreeding(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Breeding_Company:
|
|
|
- list, err = s.SingleFactorAnalysisMethodBreedingCompany(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodBreedingCompany(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Operation:
|
|
|
- list, err = s.SingleFactorAnalysisMethodOperation(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodOperation(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Mating_Interval:
|
|
|
- list, err = s.SingleFactorAnalysisMethodMatingInterval(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodMatingInterval(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Bull:
|
|
|
- list, err = s.SingleFactorAnalysisMethodBull(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodBull(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Breeding_Cycle:
|
|
|
- list, err = s.SingleFactorAnalysisMethodBreedingCycle(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodBreedingCycle(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Week:
|
|
|
- list, err = s.SingleFactorAnalysisMethodWeek(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodWeek(userModel.AppPasture.Id, req)
|
|
|
case pasturePb.SingleFactorAnalysisMethod_Lact:
|
|
|
- list, err = s.SingleFactorAnalysisMethodLact(ctx, req)
|
|
|
+ list, err = s.SingleFactorAnalysisMethodLact(userModel.AppPasture.Id, req)
|
|
|
default:
|
|
|
return nil, xerr.Custom("错误的统计方式")
|
|
|
}
|
|
@@ -104,7 +108,7 @@ func (s *StoreEntry) SingleFactorInfantSurvivalRateAnalysis(ctx context.Context,
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodCycle(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodCycle(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
dateTimeRange, err := util.GetRangeDayByDays(req.StartDayTime, req.EndDayTime, req.Value)
|
|
|
if err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
@@ -131,11 +135,11 @@ func (s *StoreEntry) SingleFactorAnalysisMethodCycle(ctx context.Context, req *p
|
|
|
COUNT(DISTINCT CASE WHEN mating_result = %d AND mating_result_at > 0 THEN cow_id END) +
|
|
|
COUNT(DISTINCT CASE WHEN mating_result IN (%d, %d) THEN cow_id END)
|
|
|
) AS total_count -- 总数
|
|
|
- FROM event_mating WHERE status = %d AND reality_day BETWEEN %d AND %d
|
|
|
+ FROM event_mating WHERE pasture_id = %d AND status = %d AND reality_day BETWEEN %d AND %d
|
|
|
UNION ALL `, v[0], v[1], pasturePb.MatingResult_Pregnant, pasturePb.MatingResult_Empty, pasturePb.MatingResult_Abort,
|
|
|
pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch, pasturePb.MatingResult_Pregnant,
|
|
|
pasturePb.MatingResult_Empty, pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch,
|
|
|
- pasturePb.IsShow_Ok, startDayTimeUnix, endDayTimeUnix)
|
|
|
+ pastureId, pasturePb.IsShow_Ok, startDayTimeUnix, endDayTimeUnix)
|
|
|
}
|
|
|
|
|
|
if len(selectSql) > 0 {
|
|
@@ -149,7 +153,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodCycle(ctx context.Context, req *p
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodMonths(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodMonths(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
|
if startDayTimeUnix == 0 || endDayTimeUnix == 0 || endDayTimeUnix <= startDayTimeUnix {
|
|
@@ -174,6 +178,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodMonths(ctx context.Context, req *
|
|
|
pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch, pasturePb.MatingResult_Pregnant,
|
|
|
pasturePb.MatingResult_Empty, pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch).
|
|
|
Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
Where("reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix)
|
|
|
if req.CowType > 0 {
|
|
|
pref.Where("cow_type = ?", req.CowType)
|
|
@@ -210,12 +215,12 @@ func (s *StoreEntry) SingleFactorAnalysisMethodMonths(ctx context.Context, req *
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodMatingTimes(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodMatingTimes(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodBreeding(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodBreeding(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
@@ -244,6 +249,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodBreeding(ctx context.Context, req
|
|
|
pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch, pasturePb.MatingResult_Pregnant,
|
|
|
pasturePb.MatingResult_Empty, pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch,
|
|
|
).Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
Where("reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix).
|
|
|
Where("cow_type = ?", req.CowType).
|
|
|
Group("expose_estrus_type").
|
|
@@ -254,7 +260,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodBreeding(ctx context.Context, req
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodBreedingCompany(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodBreedingCompany(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
@@ -302,7 +308,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodBreedingCompany(ctx context.Conte
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if err := pref.Where("a.status = ?", pasturePb.IsShow_Ok).
|
|
|
+ if err := pref.Where("a.status = ?", pasturePb.IsShow_Ok).Where("pasture_id = ?", pastureId).
|
|
|
Where("a.reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix).
|
|
|
Group("b.producer").
|
|
|
Find(&res).Error; err != nil {
|
|
@@ -312,7 +318,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodBreedingCompany(ctx context.Conte
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodOperation(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodOperation(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
@@ -359,6 +365,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodOperation(ctx context.Context, re
|
|
|
}
|
|
|
|
|
|
if err := pref.Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
Where("reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix).
|
|
|
Group("operation_id").
|
|
|
Find(&res).Error; err != nil {
|
|
@@ -368,12 +375,12 @@ func (s *StoreEntry) SingleFactorAnalysisMethodOperation(ctx context.Context, re
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodMatingInterval(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodMatingInterval(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodBull(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodBull(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
@@ -421,6 +428,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodBull(ctx context.Context, req *pa
|
|
|
}
|
|
|
|
|
|
if err := pref.Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("pasture_id = ?").
|
|
|
Where("reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix).
|
|
|
Group("frozen_semen_number").
|
|
|
Find(&res).Error; err != nil {
|
|
@@ -430,12 +438,12 @@ func (s *StoreEntry) SingleFactorAnalysisMethodBull(ctx context.Context, req *pa
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodBreedingCycle(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodBreedingCycle(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodWeek(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodWeek(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
@@ -493,6 +501,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodWeek(ctx context.Context, req *pa
|
|
|
}
|
|
|
|
|
|
if err := pref.Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
Where("reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix).
|
|
|
Group("statistic_method").
|
|
|
Find(&res).Error; err != nil {
|
|
@@ -502,7 +511,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodWeek(ctx context.Context, req *pa
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SingleFactorAnalysisMethodLact(ctx context.Context, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
+func (s *StoreEntry) SingleFactorAnalysisMethodLact(pastureId int64, req *pasturePb.SingleFactorPregnancyRateRequest) ([]*pasturePb.SingleFactorPregnancyRateList, error) {
|
|
|
res := make([]*pasturePb.SingleFactorPregnancyRateList, 0)
|
|
|
startDayTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endDayTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
@@ -529,6 +538,7 @@ func (s *StoreEntry) SingleFactorAnalysisMethodLact(ctx context.Context, req *pa
|
|
|
}
|
|
|
|
|
|
if err := pref.Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
Where("reality_day BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix).
|
|
|
Group("lact").
|
|
|
Find(&res).Error; err != nil {
|
|
@@ -539,6 +549,10 @@ func (s *StoreEntry) SingleFactorAnalysisMethodLact(ctx context.Context, req *pa
|
|
|
}
|
|
|
|
|
|
func (s *StoreEntry) MultipleFactorAnalysis(ctx context.Context, req *pasturePb.MultiFactorPregnancyRateRequest) (*model.MultiFactorPregnancyRateResponse, error) {
|
|
|
+ userModel, err := s.GetUserModel(ctx)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
startTimeUnix := util.TimeParseLocalUnix(req.StartDayTime)
|
|
|
endTimeUnix := util.TimeParseLocalEndUnix(req.EndDayTime)
|
|
|
if startTimeUnix == 0 || endTimeUnix == 0 || endTimeUnix <= startTimeUnix {
|
|
@@ -586,6 +600,7 @@ func (s *StoreEntry) MultipleFactorAnalysis(ctx context.Context, req *pasturePb.
|
|
|
`, pasturePb.MatingResult_Pregnant, pasturePb.MatingResult_Empty, pasturePb.MatingResult_Abort,
|
|
|
pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch, pasturePb.MatingResult_Pregnant,
|
|
|
pasturePb.MatingResult_Empty, pasturePb.MatingResult_Unknown, pasturePb.MatingResult_ReMatch).
|
|
|
+ Where("pasture_id = ?", userModel.AppPasture.Id).
|
|
|
Where("status = ?", pasturePb.IsShow_Ok).
|
|
|
Where("cow_type = ?", req.CowType).
|
|
|
Where("reality_day BETWEEN ? AND ?", startTimeUnix, endTimeUnix)
|