| | |
| | | for _, finenessItem := range finenessRegister.FinenessList { |
| | | roundedHalfFineness := ToRoundedHalfFineness(finenessItem.Fineness) |
| | | fineness := decimal.NewFromFloat32(roundedHalfFineness) |
| | | for i := 0; i < finenessItem.Quantity; i++ { |
| | | allFinenessList = append(allFinenessList, fineness) |
| | | } |
| | | personFinenessList = append(personFinenessList, fineness) |
| | | carCheckNumber++ |
| | | if carCheckNumber == constvar.EveryPersonCarCheckNumber { |
| | |
| | | if roundingItemMap[roundedHalfFineness] == nil { |
| | | roundingItemMap[roundedHalfFineness] = &models.FinenessRoundingItem{ |
| | | Fineness: fineness, |
| | | Quantity: 1, |
| | | Quantity: finenessItem.Quantity, |
| | | } |
| | | } else { |
| | | roundingItemMap[roundedHalfFineness].Quantity++ |
| | | roundingItemMap[roundedHalfFineness].Quantity += finenessItem.Quantity |
| | | } |
| | | } |
| | | |
| | |
| | | MarketProcessOrderNumber: "", |
| | | Inspector: "", |
| | | } |
| | | finenessCheck.TotalDeviation = 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 { |
| | |
| | | finenessCheck.FinenessGrade = CalcFinenessGrade(finenessCheck.Deviation, finenessCheck.TotalDeviation, finenessCheck.Cleanliness, finenessCheck.Purity, finenessCheck.TwiceChange, standardMap) |
| | | return |
| | | } |
| | | |
| | | 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) |
| | | } |