zhangqian
2024-04-30 7dd6097d42d6d6f254a84ab0111bac70f0358660
加一些注释
3个文件已修改
74 ■■■■ 已修改文件
service/fineness.go 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/silk_rank.go 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/mathx.go 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
}
service/silk_rank.go
@@ -26,8 +26,8 @@
type ValueType int
const (
    ValueTypeSmallerBetter ValueType = 0 //值按升序排名(值越大,等级越高)
    ValueTypeGreaterBetter ValueType = 1 //值按降序排名(值越小,等级越低)
    ValueTypeSmallerBetter ValueType = 0 //值按升序排名(值越小,等级越高)
    ValueTypeGreaterBetter ValueType = 1 //值按降序排名(值越大,等级越高)
)
var sortTypeMap = map[constvar.CheckItem]ValueType{
utils/mathx.go
@@ -1,7 +1,11 @@
package utils
import "github.com/shopspring/decimal"
import (
    "github.com/shopspring/decimal"
    "sort"
)
// Average 取平均值
func Average(numbers []decimal.Decimal) decimal.Decimal {
    if len(numbers) == 0 {
        return decimal.Decimal{}
@@ -16,6 +20,7 @@
    return sum.Div(decimal.NewFromInt(int64(len(numbers))))
}
// Deviation 偏差
func Deviation(numbers []decimal.Decimal) decimal.Decimal {
    if len(numbers) == 0 || len(numbers) == 1 {
        return decimal.Decimal{}
@@ -28,3 +33,32 @@
    }
    return diffSquaredSum.Div(decimal.NewFromInt(int64(len(numbers))))
}
// TotalDeviation 总差
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 := Average(minPart)
    maxAverage := Average(maxPart)
    minDiff := minAverage.Sub(average).Abs()
    maxDiff := maxAverage.Sub(average).Abs()
    return decimal.Max(minDiff, maxDiff)
}