zhangqian
2024-04-30 7dd6097d42d6d6f254a84ab0111bac70f0358660
service/fineness.go
@@ -44,11 +44,11 @@
      }
      carCheckNumber++
      if carCheckNumber == constvar.EveryPersonCarCheckNumber {
      if carCheckNumber == constvar.EveryPersonCarCheckNumber { //每人每车号取两个丝,所以每两个等于一个车号,存一行 models.FinenessCheckItem
         carCheckNumber = 0
         if endCarMap[finenessItem.Position] { //走到了某个人最后的车号,每人算一次偏差和等级
            deviation = utils.Deviation(personFinenessList)
            totalDeviation = TotalDeviation(personFinenessList, utils.Average(personFinenessList))
            totalDeviation = utils.TotalDeviation(personFinenessList, utils.Average(personFinenessList))
            finenessGrade = CalcFinenessGrade(deviation, totalDeviation, decimal.Zero, decimal.Zero, decimal.Zero, standardMap)
            personFinenessList = personFinenessList[:0]
         } else {
@@ -73,7 +73,7 @@
      MarketProcessOrderNumber: "",
      Inspector:                "",
   }
   finenessCheck.TotalDeviation = TotalDeviation(allFinenessList, finenessCheck.AverageFineness)
   finenessCheck.TotalDeviation = utils.TotalDeviation(allFinenessList, finenessCheck.AverageFineness)
   finenessCheck.FinenessGrade = CalcFinenessGrade(finenessCheck.Deviation, finenessCheck.TotalDeviation, finenessCheck.Cleanliness, finenessCheck.Purity, finenessCheck.TwiceChange, standardMap)
   err = models.WithTransaction(func(db *gorm.DB) error {
@@ -229,32 +229,4 @@
   // 保留一位小数,并在整数情况下在小数点后加一个零
   result = float32(math.Round(float64(result)*10) / 10)
   return result
}
func TotalDeviation(numbers []decimal.Decimal, average decimal.Decimal) decimal.Decimal {
   if len(numbers) < 2 {
      return decimal.Zero
   }
   n := len(numbers)
   ratio := decimal.NewFromFloat(0.02)
   length := decimal.NewFromInt(int64(n)).Mul(ratio).Ceil().IntPart()
   if length >= int64(n) {
      return decimal.Zero
   }
   sort.Slice(numbers, func(i, j int) bool {
      return numbers[i].LessThan(numbers[j])
   })
   minPart := numbers[:length-1]
   maxPart := numbers[length:]
   minAverage := utils.Average(minPart)
   maxAverage := utils.Average(maxPart)
   minDiff := minAverage.Sub(average).Abs()
   maxDiff := maxAverage.Sub(average).Abs()
   return decimal.Max(minDiff, maxDiff)
}