|
@@ -339,7 +339,7 @@ func (s *StoreEntry) BehaviorCurveApp(ctx context.Context, req *pasturePb.CowBeh
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- data := model.NeckActiveHabitSlice(neckActiveHabitList).ToPBApp(req.CurveNameList)
|
|
|
+ data := model.NeckActiveHabitSlice(neckActiveHabitList).ToPBApp()
|
|
|
eventMapList := s.EventTypeMap(userModel)
|
|
|
for k, v := range eventMapList {
|
|
|
if k == pasturePb.EventType_Enter || k == pasturePb.EventType_Body_Score || k == pasturePb.EventType_Birth ||
|
|
@@ -413,3 +413,62 @@ func (s *StoreEntry) BehaviorCurveApp(ctx context.Context, req *pasturePb.CowBeh
|
|
|
Data: data,
|
|
|
}, nil
|
|
|
}
|
|
|
+
|
|
|
+func (s *StoreEntry) BehaviorCurveGroupComparison(ctx context.Context, req *pasturePb.CowBehaviorCurveRequest) (*pasturePb.BehaviorCurveGroupComparisonResponse, error) {
|
|
|
+ userModel, err := s.GetUserModel(ctx)
|
|
|
+ if err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ if req.Days > model.NeckRingDataDays+10 {
|
|
|
+ messageId, _ := userModel.LanguageContent.Localize(&i18n.LocalizeConfig{
|
|
|
+ MessageID: "validate.neckRingAppDays",
|
|
|
+ })
|
|
|
+ return nil, xerr.Customf(messageId)
|
|
|
+ }
|
|
|
+
|
|
|
+ cowInfo, err := s.GetCowEventByEarNumber(ctx, userModel.AppPasture.Id, req.EarNumber)
|
|
|
+ if err != nil {
|
|
|
+ messageId, _ := userModel.LanguageContent.Localize(&i18n.LocalizeConfig{
|
|
|
+ MessageID: "auth.errorCow",
|
|
|
+ TemplateData: map[string]interface{}{"earNumber": req.EarNumber},
|
|
|
+ })
|
|
|
+ return nil, xerr.Customf(messageId)
|
|
|
+ }
|
|
|
+
|
|
|
+ nowTime := time.Now().Local()
|
|
|
+ endDataTime := nowTime.Format(model.LayoutDate2)
|
|
|
+ startDataTime := nowTime.AddDate(0, 0, int(-req.Days)+1).Format(model.LayoutDate2)
|
|
|
+
|
|
|
+ dayRange, err := util.GetDaysBetween(startDataTime, endDataTime)
|
|
|
+ if err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(dayRange) <= 0 {
|
|
|
+ messageId, _ := userModel.LanguageContent.Localize(&i18n.LocalizeConfig{
|
|
|
+ MessageID: "auth.errorDateRange",
|
|
|
+ })
|
|
|
+ return nil, xerr.Customf(messageId)
|
|
|
+ }
|
|
|
+
|
|
|
+ dataTimeList := make([]string, 0)
|
|
|
+ for _, v := range dayRange {
|
|
|
+ for i := 0; i <= 23; i++ {
|
|
|
+ if i%2 == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ dataTimeList = append(dataTimeList, fmt.Sprintf("%s %02d", v, i))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ q1, q3 := s.CowIQR(cowInfo, req.CurveName, dayRange, dataTimeList)
|
|
|
+ return &pasturePb.BehaviorCurveGroupComparisonResponse{
|
|
|
+ Code: http.StatusOK,
|
|
|
+ Msg: "ok",
|
|
|
+ Data: &pasturePb.CowNeckRingGroupComparisonData{
|
|
|
+ IQR1: q1,
|
|
|
+ IQR3: q3,
|
|
|
+ DateTime: dataTimeList,
|
|
|
+ },
|
|
|
+ }, nil
|
|
|
+}
|