From 68e4513231bfd7371ef7414cad4dcb348cf5469b Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期五, 12 四月 2024 16:11:22 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/silk/silkServer

---
 service/fineness.go             |   37 ++++++++++++++++++++++++++++++++++---
 controllers/request/fineness.go |   14 +++++++-------
 models/fineness_item.go         |    2 +-
 3 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/controllers/request/fineness.go b/controllers/request/fineness.go
index 0c3dbf9..ed2ee9b 100644
--- a/controllers/request/fineness.go
+++ b/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"`      //鍚堣
 }
 
diff --git a/models/fineness_item.go b/models/fineness_item.go
index 5b74633..fb73857 100644
--- a/models/fineness_item.go
+++ b/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"`      //绾ゅ害鍚堣
 	}
 
diff --git a/service/fineness.go b/service/fineness.go
index 4731d49..52ea7f8 100644
--- a/service/fineness.go
+++ b/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)
+}

--
Gitblit v1.8.0