| | |
| | | "sort" |
| | | ) |
| | | |
| | | // FinenessCheck 纤度检查 |
| | | func FinenessCheck(finenessRegister *models.FinenessRegister, standardMap map[string]*Standard, endCarMap map[int]bool, isNew bool) (err error) { |
| | | finenessCheckItems := make([]*models.FinenessCheckItem, 0) |
| | | var lastCarNo int |
| | | var allFinenessList []decimal.Decimal |
| | | var personFinenessList []decimal.Decimal |
| | | var carCheckNumber = 0 //单个car已检查样本数 |
| | | //var carCheckNumber = 0 //单个car已检查样本数 |
| | | |
| | | var item *models.FinenessCheckItem |
| | | var deviation, totalDeviation decimal.Decimal |
| | |
| | | lastCarNo = finenessRegister.FinenessList[0].Position |
| | | for _, finenessItem := range finenessRegister.FinenessList { |
| | | if lastCarNo != finenessItem.Position { //每个车号存一个models.FinenessCheckItem |
| | | carCheckNumber = 0 |
| | | //carCheckNumber = 0 |
| | | lastCarNo = finenessItem.Position |
| | | } |
| | | roundedHalfFineness := ToRoundedHalfFineness(finenessItem.Fineness) //类似四舍五入 |
| | |
| | | roundingItemMap[roundedHalfFineness].Quantity += finenessItem.Quantity |
| | | } |
| | | |
| | | carCheckNumber++ |
| | | if carCheckNumber == constvar.EveryPersonCarCheckNumber { //每人每车号取两个丝,所以每两个等于一个车号,存一行 models.FinenessCheckItem |
| | | carCheckNumber = 0 |
| | | if endCarMap[finenessItem.Position] { //走到了某个人最后的车号,每人算一次偏差和等级 |
| | | deviation = utils.Deviation(personFinenessList) |
| | | totalDeviation = utils.TotalDeviation(personFinenessList, utils.Average(personFinenessList)) |
| | | finenessGrade = CalcFinenessGrade(deviation, totalDeviation, decimal.Zero, decimal.Zero, decimal.Zero, standardMap) |
| | | personFinenessList = personFinenessList[:0] |
| | | } else { |
| | | deviation = decimal.Zero |
| | | totalDeviation = decimal.Zero |
| | | finenessGrade = "" |
| | | } |
| | | item = MakeFinenessCheckItem(roundingItemMap, finenessRegister.ID, lastCarNo, deviation, totalDeviation, finenessGrade) |
| | | finenessCheckItems = append(finenessCheckItems, item) |
| | | roundingItemMap = make(map[float32]*models.FinenessRoundingItem, 0) //重置 |
| | | //carCheckNumber++ |
| | | //if carCheckNumber == constvar.EveryPersonCarCheckNumber { //每人每车号取两个丝,所以每两个等于一个车号,存一行 models.FinenessCheckItem |
| | | // carCheckNumber = 0 |
| | | if endCarMap[finenessItem.Position] { //走到了某个人最后的车号,每人算一次偏差和等级 |
| | | deviation = utils.Deviation(personFinenessList) |
| | | totalDeviation = utils.TotalDeviation(personFinenessList, utils.Average(personFinenessList)) |
| | | finenessGrade = CalcFinenessGrade(deviation, totalDeviation, decimal.Zero, decimal.Zero, decimal.Zero, standardMap) |
| | | personFinenessList = personFinenessList[:0] |
| | | } else { |
| | | deviation = decimal.Zero |
| | | totalDeviation = decimal.Zero |
| | | finenessGrade = "" |
| | | } |
| | | item = MakeFinenessCheckItem(roundingItemMap, finenessRegister.ID, lastCarNo, deviation, totalDeviation, finenessGrade) |
| | | finenessCheckItems = append(finenessCheckItems, item) |
| | | roundingItemMap = make(map[float32]*models.FinenessRoundingItem, 0) //重置 |
| | | //} |
| | | } |
| | | |
| | | finenessCheck := models.FinenessCheck{ |
| | |
| | | return err |
| | | } |
| | | |
| | | // MakeFinenessCheckItem 纤度检查明细 |
| | | func MakeFinenessCheckItem(roundingItemMap map[float32]*models.FinenessRoundingItem, finenessRegisterID uint, position int, deviation, totalDeviation decimal.Decimal, finenessGrade string) *models.FinenessCheckItem { |
| | | roundingItems := make([]*models.FinenessRoundingItem, 0, len(roundingItemMap)) |
| | | for _, v := range roundingItemMap { |
| | |
| | | gradeRank int |
| | | } |
| | | |
| | | // CalcFinenessGrade 纤度等级 |
| | | func CalcFinenessGrade(deviation, totalDeviation, cleanliness, purity, twiceChange decimal.Decimal, standardMap map[string]*Standard) (gradeName string) { |
| | | checkItemGradeMap := make(map[constvar.CheckItem]string, 5) |
| | | gradeRanks := make([]gradeRank, 0) |
| | |
| | | return gradeRanks[0].gradeName |
| | | } |
| | | |
| | | // ToRoundedHalfFineness 小数处理(类似四舍五入) |
| | | func ToRoundedHalfFineness(fineness float32) float32 { |
| | | intPart := int(fineness) |
| | | diff := fineness - float32(intPart) |