|
@@ -9,6 +9,9 @@ import (
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
+ "gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
|
+ "go.uber.org/zap"
|
|
|
+
|
|
|
"gitee.com/xuyiping_admin/pkg/xerr"
|
|
|
|
|
|
pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
|
|
@@ -403,7 +406,19 @@ func (s *StoreEntry) AbortionRate(ctx context.Context, req *pasturePb.AbortionRa
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) TwentyonePregnantRate(ctx context.Context, req *pasturePb.TwentyOnePregnantRateRequest) (*pasturePb.TwentyOnePregnantRateResponse, error) {
|
|
|
+func (s *StoreEntry) TwentyOnePregnantRate(ctx context.Context, req *pasturePb.TwentyOnePregnantRateRequest) (*pasturePb.TwentyOnePregnantRateResponse, error) {
|
|
|
+ startUnix := util.TimeParseLocalUnix(req.StartDate)
|
|
|
+ endUnix := util.TimeParseLocalUnix(req.EndDate)
|
|
|
+
|
|
|
+ if startUnix > endUnix {
|
|
|
+ return nil, xerr.Customf("开始时间不能大于结束时间: %s ~ %d", req.StartDate, req.EndDate)
|
|
|
+ }
|
|
|
+
|
|
|
+ nowDateTime := time.Now()
|
|
|
+ if endUnix > nowDateTime.Unix() {
|
|
|
+ return nil, xerr.Customf("结束时间不能大于当前时间: %s ~ %s", req.EndDate, nowDateTime.Format(model.LayoutDate2))
|
|
|
+ }
|
|
|
+
|
|
|
dataRange, err := util.Get21DayPeriods(req.StartDate, req.EndDate)
|
|
|
if err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
@@ -418,9 +433,9 @@ func (s *StoreEntry) TwentyonePregnantRate(ctx context.Context, req *pasturePb.T
|
|
|
systemBasicName := ""
|
|
|
switch req.CowType {
|
|
|
case pasturePb.CowType_Breeding_Calf:
|
|
|
- systemBasicName = "proactively_stop_breeding_for_adult"
|
|
|
+ systemBasicName = model.ProactivelyStopBreedingForAdult
|
|
|
case pasturePb.CowType_Reserve_Calf:
|
|
|
- systemBasicName = "proactively_stop_breeding_for_backup"
|
|
|
+ systemBasicName = model.ProactivelyStopBreedingForBackup
|
|
|
default:
|
|
|
return nil, xerr.Customf("不支持的牛只类型: %d", req.CowType)
|
|
|
}
|
|
@@ -430,17 +445,31 @@ func (s *StoreEntry) TwentyonePregnantRate(ctx context.Context, req *pasturePb.T
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- stopBreedingDay := systemBasic.MinValue
|
|
|
-
|
|
|
- fmt.Println(stopBreedingDay)
|
|
|
+ stopBreedingDay := systemBasic.MinValue * 86400
|
|
|
+ dateCowList := make([][]*model.Cow, len(dataRange))
|
|
|
|
|
|
- for _, v := range dataRange {
|
|
|
+ twentyOnePregnantRateList := make([]*pasturePb.TwentyOnePregnantRateList, 0)
|
|
|
+ for i, v := range dataRange {
|
|
|
middleDay, err := util.GetRangeDayMiddleDay(v, 11)
|
|
|
if err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
-
|
|
|
- chart.Header = append(chart.Header, middleDay)
|
|
|
+ middleDayUnix := util.TimeParseLocalEndUnix(middleDay)
|
|
|
+ chart.Header = append(chart.Header, fmt.Sprintf("%s ~ %s", v[0], v[1]))
|
|
|
+ cowList := s.TwentyonePregnantCowList(ctx, req.CowType, stopBreedingDay, middleDayUnix, []int64{})
|
|
|
+ twentyOnePregnantRateList = append(twentyOnePregnantRateList, &pasturePb.TwentyOnePregnantRateList{
|
|
|
+ StartDay: v[0],
|
|
|
+ EndDay: v[1],
|
|
|
+ ShouldBreedCount: int32(len(cowList)),
|
|
|
+ RealityBreedCount: 0,
|
|
|
+ BreedRate: 0,
|
|
|
+ ShouldPregnantCount: 0,
|
|
|
+ RealityPregnantCount: 0,
|
|
|
+ PregnantRate: 0,
|
|
|
+ RealityAbortionCount: 0,
|
|
|
+ AbortionRate: 0,
|
|
|
+ })
|
|
|
+ dateCowList[i] = cowList
|
|
|
}
|
|
|
|
|
|
return &pasturePb.TwentyOnePregnantRateResponse{
|
|
@@ -449,11 +478,44 @@ func (s *StoreEntry) TwentyonePregnantRate(ctx context.Context, req *pasturePb.T
|
|
|
Data: &pasturePb.TwentyOnePregnantRateData{
|
|
|
Chart: chart,
|
|
|
Table: &pasturePb.TwentyOnePregnantRateTable{
|
|
|
- List: nil,
|
|
|
- Total: 0,
|
|
|
- PageSize: 0,
|
|
|
- Page: 0,
|
|
|
+ List: twentyOnePregnantRateList,
|
|
|
+ Total: int32(len(dataRange)),
|
|
|
},
|
|
|
},
|
|
|
}, nil
|
|
|
}
|
|
|
+
|
|
|
+// TwentyonePregnantCowList 21天牛只停配期牛只列表
|
|
|
+func (s *StoreEntry) TwentyonePregnantCowList(
|
|
|
+ ctx context.Context,
|
|
|
+ cowType pasturePb.CowType_Kind,
|
|
|
+ stopBreedingDay int32,
|
|
|
+ middleDay int64,
|
|
|
+ notInCow []int64,
|
|
|
+) []*model.Cow {
|
|
|
+ cowList := make([]*model.Cow, 0)
|
|
|
+ switch cowType {
|
|
|
+ case pasturePb.CowType_Reserve_Calf:
|
|
|
+ pref := s.DB.Model(new(model.Cow)).
|
|
|
+ Where("cow_type = ?", cowType).
|
|
|
+ Where("admission_status = ?", pasturePb.AdmissionStatus_Admission).
|
|
|
+ Where("is_pregnant = ?", pasturePb.IsShow_No).
|
|
|
+ Where("lact = ?", 0).
|
|
|
+ Where("birth_at + ? < ?", stopBreedingDay, middleDay)
|
|
|
+ if len(notInCow) > 0 {
|
|
|
+ pref = pref.Where("id NOT IN ?", notInCow)
|
|
|
+ }
|
|
|
+ if err := pref.Find(&cowList).Error; err != nil {
|
|
|
+ zaplog.Error("TwentyonePregnantCowList",
|
|
|
+ zap.Any("cowType", cowType),
|
|
|
+ zap.Any("stopBreedingDay", stopBreedingDay),
|
|
|
+ zap.Any("middleDay", middleDay),
|
|
|
+ zap.Any("notInCow", notInCow),
|
|
|
+ )
|
|
|
+ }
|
|
|
+ case pasturePb.CowType_Breeding_Calf:
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return cowList
|
|
|
+}
|