controllers/request/fineness.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/fineness_item.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service/fineness.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
controllers/request/fineness.go
@@ -5,25 +5,25 @@ ) type AddFinenessRegister struct { ID uint `json:"id"` //id 添加时传0 ID uint `json:"id"` //id 添加时传0 Number string `gorm:"type:varchar(255);not null;comment:编号" json:"number"` //编号 FinishDate string `gorm:"type:varchar(255);not null;comment:落丝时间" json:"finishDate"` //落丝时间 FinishDate string `gorm:"type:varchar(255);not null;comment:落丝时间" json:"finishDate"` //落丝时间 Workshop string `gorm:"type:varchar(255);not null;comment:车间" json:"name"` //车间 WorkshopGroup int `gorm:"type:int(11);not null;default:0;comment:车组" json:"workshopGroup"` //车组 Market string `gorm:"type:varchar(255);not null;comment:庄口" json:"market"` //庄口 Spec string `gorm:"type:varchar(255);not null;comment:规格" json:"spec"` //规格 Circle uint8 `gorm:"not null;comment:回数" json:"circle"` //回数 TotalCircle uint8 `gorm:"not null;comment:总回数" json:"totalCircle"` //总回数 FinenessList []FinenessItem `json:"finenessList"` //纤度数组 SumFineness decimal.Decimal `gorm:"type:decimal(12,2);not null;comment:合计纤度" json:"sumFineness"` //合计纤度 SumQuantity decimal.Decimal `gorm:"type:decimal(12,2);not null;comment:合计数量" json:"sumQuantity"` //合计数量 TotalCircle uint8 `gorm:"not null;comment:总回数" json:"totalCircle"` //总回数 FinenessList []FinenessItem `json:"finenessList"` //纤度数组 SumFineness decimal.Decimal `gorm:"type:decimal(12,2);not null;comment:合计纤度" json:"sumFineness"` //合计纤度 SumQuantity decimal.Decimal `gorm:"type:decimal(12,2);not null;comment:合计数量" json:"sumQuantity"` //合计数量 Position int `gorm:"not null;default:0;comment:车号" json:"position"` //最后一个车号 } type FinenessItem struct { Position int8 `json:"position"` //车号 Fineness float32 `json:"fineness"` //纤度 Quantity decimal.Decimal `json:"quantity"` //数量 Quantity int `json:"quantity"` //数量 Sum decimal.Decimal `json:"sum"` //合计 } models/fineness_item.go
@@ -14,7 +14,7 @@ FinenessRegisterID uint `json:"finenessRegisterID"` Position int `json:"position"` //车号 Fineness float32 `json:"fineness"` //纤度 Quantity decimal.Decimal `json:"quantity"` //数量 Quantity int `json:"quantity"` //数量 Sum decimal.Decimal `json:"sum"` //纤度合计 } service/fineness.go
@@ -31,7 +31,9 @@ for _, finenessItem := range finenessRegister.FinenessList { roundedHalfFineness := ToRoundedHalfFineness(finenessItem.Fineness) fineness := decimal.NewFromFloat32(roundedHalfFineness) allFinenessList = append(allFinenessList, fineness) for i := 0; i < finenessItem.Quantity; i++ { allFinenessList = append(allFinenessList, fineness) } personFinenessList = append(personFinenessList, fineness) carCheckNumber++ if carCheckNumber == constvar.EveryPersonCarCheckNumber { @@ -67,10 +69,10 @@ if roundingItemMap[roundedHalfFineness] == nil { roundingItemMap[roundedHalfFineness] = &models.FinenessRoundingItem{ Fineness: fineness, Quantity: 1, Quantity: finenessItem.Quantity, } } else { roundingItemMap[roundedHalfFineness].Quantity++ roundingItemMap[roundedHalfFineness].Quantity += finenessItem.Quantity } } @@ -85,6 +87,7 @@ 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 { @@ -231,3 +234,31 @@ 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) }