| | |
| | | } |
| | | |
| | | 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 { |
| | |
| | | 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 { |
| | |
| | | // 保留一位小数,并在整数情况下在小数点后加一个零 |
| | | 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) |
| | | } |