Browse Source

mix: 混料和撒料数据

Yi 1 year ago
parent
commit
6bc364b0b8
4 changed files with 78 additions and 25 deletions
  1. 1 1
      migration/v0001_feedtemplet.sql
  2. 3 4
      models/group_data.go
  3. 34 8
      module/group.go
  4. 40 12
      service/group/group.go

+ 1 - 1
migration/v0001_feedtemplet.sql

@@ -30,7 +30,7 @@ ORDER BY  f.sort ASC;
 
 ALTER TABLE cowclass ADD COLUMN group_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT '集团端id';
 ALTER TABLE feedclass ADD COLUMN group_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT '集团端id';
-
+ALTER TABLE USER ADD COLUMN `imei` VARCHAR(255) DEFAULT NULL;
 
 ##  SELECT * FROM apisql WHERE sqlname  ='updatesysopt'
 ## 需要更新的语句如下sqlstr

+ 3 - 4
models/group_data.go

@@ -46,10 +46,9 @@ type AnalysisAccuracyRequest struct {
 }
 
 type MixedFodderDataList struct {
-	Iweight int64     `xorm:"iweight" json:"iweight"`
-	Oweight int64     `xorm:"oweight" json:"oweight"`
-	Lweight float64   `xorm:"lweight" json:"lweight"`
-	MyDate  time.Time `xorm:"mydate" json:"mydate"`
+	ActualWeightMinus float64   `xorm:"actualweightminus" json:"actualweightminus"`
+	Lweight           float64   `xorm:"lweight" json:"lweight"`
+	Date              time.Time `xorm:"date" json:"date"`
 }
 
 type MixedFodderCorrectDataList struct {

+ 34 - 8
module/group.go

@@ -29,16 +29,16 @@ func FeedFormulaIsModify(req *models.PastureFeedFormulaIsModifyRequest) error {
 	return nil
 }
 
-// MixedFodderData 混料准确率和撒料准确率
+// MixedFodderData 混料准确率
 func MixedFodderData(req *models.AnalysisAccuracyRequest) ([]*models.MixedFodderDataList, error) {
 	res := make([]*models.MixedFodderDataList, 0)
-	newSql := restful.Engine.NewSession().Table("downloadedplan").Alias("dp").
-		Select("dp.oweight,dp.lweight,dp.iweight,dp.mydate").
-		Join("LEFT", []string{"feedtemplet", "ft"}, "dp.tempid = ft.id").
-		Where("dp.pastureid = ?", req.PastureId)
+	newSql := restful.Engine.NewSession().Table("downloadplandtl1").Alias("dp1").
+		Select(" dp1.actualweightminus,dp1.lweight,dp1.date ").
+		Join("LEFT", []string{"feedtemplet", "ft"}, "dp1.fid = ft.id").
+		Where("dp1.pastureid = ?", req.PastureId)
 
 	if len(req.StartDate) > 0 && len(req.EndDate) > 0 {
-		newSql.And("dp.mydate >= ? and  dp.mydate <= ?", req.StartDate, req.EndDate)
+		newSql.And("dp1.date >= ? and  dp1.date <= ?", req.StartDate, req.EndDate)
 	}
 
 	if req.CattleParentCategoryId > 0 {
@@ -46,9 +46,35 @@ func MixedFodderData(req *models.AnalysisAccuracyRequest) ([]*models.MixedFodder
 	}
 
 	if req.FeedFormulaId > 0 {
-		newSql.And("dp.tempid = ?", req.FeedFormulaId)
+		newSql.And("dp1.fid = ?", req.FeedFormulaId)
 	}
-	if err := newSql.GroupBy("dp.mydate").OrderBy("dp.mydate").Find(&res); err != nil {
+	if err := newSql.GroupBy("dp1.date").OrderBy("dp1.date").Find(&res); err != nil {
+		return nil, err
+	}
+
+	return res, nil
+}
+
+// SprinkleFodderData 撒料准确率
+func SprinkleFodderData(req *models.AnalysisAccuracyRequest) ([]*models.MixedFodderDataList, error) {
+	res := make([]*models.MixedFodderDataList, 0)
+	newSql := restful.Engine.NewSession().Table("downloadplandtl2").Alias("dp2").
+		Select("dp2.actualweightminus , dp2.lweight,  dp2.date").
+		Join("LEFT", []string{"feedtemplet", "ft"}, "dp2.feedtempletid = ft.id").
+		Where("dp2.pastureid = ?", req.PastureId)
+
+	if len(req.StartDate) > 0 && len(req.EndDate) > 0 {
+		newSql.And("dp2.date >= ? and  dp2.date <= ?", req.StartDate, req.EndDate)
+	}
+
+	if req.CattleParentCategoryId > 0 {
+		newSql.And("ft.ccid = ?", req.CattleParentCategoryId)
+	}
+
+	if req.FeedFormulaId > 0 {
+		newSql.And("dp2.feedtempletid = ?", req.FeedFormulaId)
+	}
+	if err := newSql.GroupBy("dp2.date").OrderBy("dp2.date").Find(&res); err != nil {
 		return nil, err
 	}
 

+ 40 - 12
service/group/group.go

@@ -54,12 +54,18 @@ func AnalysisAccuracyService(req *models.AnalysisAccuracyRequest) (*models.Analy
 		SprinkleFodderCorrectRatio:  make([]*models.PastureAnalysisAccuracyDataValue, 0),
 	}
 
-	// 混料和撒料准确率
+	// 混料准确率
 	mixedFodderDataList, err := module.MixedFodderData(req)
 	if err != nil {
 		return nil, err
 	}
 
+	// 撒料准确率
+	sprinkleFodderDataList, err := module.SprinkleFodderData(req)
+	if err != nil {
+		return nil, err
+	}
+
 	// 混料正确率
 	mixedFodderCorrectDataList, err := module.MixedFodderCorrectData(req)
 	if err != nil {
@@ -71,41 +77,63 @@ func AnalysisAccuracyService(req *models.AnalysisAccuracyRequest) (*models.Analy
 
 	timeList := util.TimeBetween(req.StartDate, req.EndDate)
 	for _, dayTime := range timeList {
-		var mixedInfo, mixedCorrectInfo, sprinkleInfo bool
+		var mixedInfo, sprinkleInfo, mixedCorrectInfo, sprinkleCorrectInfo bool
 		for _, mixed := range mixedFodderDataList {
-			myDate := mixed.MyDate.Format(util.LayoutDateFormat)
+			myDate := mixed.Date.Format(util.LayoutDateFormat)
 			if myDate != dayTime {
 				continue
 			}
 			// 混料准确率
 			var mixedFodderAccurateRatio float64 = 0
-			if mixed.Lweight > 0 && mixed.Iweight > 0 {
-				mixedFodderAccurateRatio = float64(mixed.Iweight) / mixed.Lweight * 100
+			if mixed.Lweight > 0 && mixed.ActualWeightMinus > 0 {
+				if mixed.Lweight > mixed.ActualWeightMinus {
+					mixedFodderAccurateRatio = mixed.Lweight / mixed.ActualWeightMinus * 100
+				} else {
+					mixedFodderAccurateRatio = mixed.ActualWeightMinus / mixed.Lweight * 100
+				}
 			}
 			mixedValue := &models.PastureAnalysisAccuracyDataValue{
 				DayTime: dayTime,
 				Ratio:   mixedFodderAccurateRatio,
 			}
 			response.MixedFodderAccurateRatio = append(response.MixedFodderAccurateRatio, mixedValue)
+			mixedInfo = true
+		}
+		if !mixedInfo {
+			noInfo := &models.PastureAnalysisAccuracyDataValue{
+				DayTime: dayTime,
+				Ratio:   0,
+			}
+			response.MixedFodderAccurateRatio = append(response.MixedFodderAccurateRatio, noInfo)
+		}
 
+		for _, sprinkle := range sprinkleFodderDataList {
+			myDate := sprinkle.Date.Format(util.LayoutDateFormat)
+			if myDate != dayTime {
+				continue
+			}
 			// 撒料准确率
 			var sprinkleFodderAccurateRatio float64 = 0
-			if mixed.Lweight > 0 && mixed.Iweight > 0 {
-				sprinkleFodderAccurateRatio = float64(mixed.Oweight) / mixed.Lweight * 100
+			if sprinkle.Lweight > 0 && sprinkle.ActualWeightMinus > 0 {
+				if sprinkle.Lweight > sprinkle.ActualWeightMinus {
+					sprinkleFodderAccurateRatio = sprinkle.Lweight / sprinkle.ActualWeightMinus * 100
+				} else {
+					sprinkleFodderAccurateRatio = sprinkle.ActualWeightMinus / sprinkle.Lweight * 100
+				}
 			}
 			sprinkleValue := &models.PastureAnalysisAccuracyDataValue{
 				DayTime: dayTime,
 				Ratio:   sprinkleFodderAccurateRatio,
 			}
 			response.SprinkleFodderAccurateRatio = append(response.SprinkleFodderAccurateRatio, sprinkleValue)
-			mixedInfo = true
+			sprinkleInfo = true
 		}
-		if !mixedInfo {
+
+		if !sprinkleInfo {
 			noInfo := &models.PastureAnalysisAccuracyDataValue{
 				DayTime: dayTime,
 				Ratio:   0,
 			}
-			response.MixedFodderAccurateRatio = append(response.MixedFodderAccurateRatio, noInfo)
 			response.SprinkleFodderAccurateRatio = append(response.SprinkleFodderAccurateRatio, noInfo)
 		}
 
@@ -152,9 +180,9 @@ func AnalysisAccuracyService(req *models.AnalysisAccuracyRequest) (*models.Analy
 					Ratio:   float64(sprinkle.SprinkleCorrectNumber) / float64(sprinkle.UseSprinkleOptionNumber) * 100,
 				})
 			}
-			sprinkleInfo = true
+			sprinkleCorrectInfo = true
 		}
-		if !sprinkleInfo {
+		if !sprinkleCorrectInfo {
 			response.SprinkleFodderCorrectRatio = append(response.SprinkleFodderCorrectRatio, &models.PastureAnalysisAccuracyDataValue{
 				DayTime: dayTime,
 				Ratio:   0,