From 178d6e7507ef4806ca02692c4ee24bb98dba8362 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 19 三月 2024 19:19:46 +0800 Subject: [PATCH] 生丝检验部分逻辑修正 --- constvar/const.go | 6 + service/fineness.go | 93 +++++++++++++++++------------- models/fineness.go | 2 models/workshop_manage.go | 31 ++++++++++ service/workshop.go | 15 +++++ 5 files changed, 104 insertions(+), 43 deletions(-) diff --git a/constvar/const.go b/constvar/const.go index 1aa8b1b..df7a3f8 100644 --- a/constvar/const.go +++ b/constvar/const.go @@ -22,7 +22,7 @@ const ( LeftHalfCar CarFlag = iota + 1 //宸﹀崐杞� RightHalfCar //鍙冲崐杞� - AllCar //鍏ㄨ溅 + AllCar //鍏ㄨ溅缁撴潫 ) type CheckItem int @@ -42,3 +42,7 @@ BadFinenessGradeB = "badB" BadFinenessGradeC = "badC" ) + +const ( + EveryPersonCarCheckNumber = 2 //姣忎汉姣忚溅鎶芥浠芥暟 +) diff --git a/models/fineness.go b/models/fineness.go index 9767bc8..a323ce0 100644 --- a/models/fineness.go +++ b/models/fineness.go @@ -14,7 +14,7 @@ Number string `gorm:"type:varchar(255);not null;comment:缂栧彿" json:"number"` //缂栧彿 FinishDate string `gorm:"type:varchar(255);not null;comment:钀戒笣鏃堕棿" json:"finishDate"` //钀戒笣鏃堕棿 Workshop string `gorm:"type:varchar(255);not null;comment:杞﹂棿" json:"name"` //杞﹂棿 - WorkshopGroup string `gorm:"type:varchar(255);not null;comment:杞︾粍" json:"workshopGroup"` //杞︾粍 + WorkshopGroup int `gorm:"type:varchar(255);not null;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"` //鍥炴暟 diff --git a/models/workshop_manage.go b/models/workshop_manage.go index 6d920cb..dc5166b 100644 --- a/models/workshop_manage.go +++ b/models/workshop_manage.go @@ -49,11 +49,29 @@ return slf } +func (slf *WorkshopManageSearch) SetWorkshopNumber(workshopNumber string) *WorkshopManageSearch { + slf.WorkshopNumber = workshopNumber + return slf +} + +func (slf *WorkshopManageSearch) SetGroupNumber(groupNumber int) *WorkshopManageSearch { + slf.GroupNumber = groupNumber + return slf +} + func (slf *WorkshopManageSearch) build() *gorm.DB { db := slf.Orm.Table(slf.TableName()) if slf.ID > 0 { db = db.Where("id = ?", slf.ID) + } + + if slf.WorkshopNumber != "" { + db = db.Where("workshop_number = ?", slf.WorkshopNumber) + } + + if slf.GroupNumber != 0 { + db = db.Where("group_number = ?", slf.GroupNumber) } return db @@ -89,6 +107,19 @@ return records, total, nil } +func (slf *WorkshopManageSearch) FindAll() ([]*WorkshopManage, error) { + var ( + records = make([]*WorkshopManage, 0) + db = slf.build() + ) + + if err := db.Find(&records).Error; err != nil { + return records, fmt.Errorf("find records err: %v", err) + } + + return records, nil +} + func (slf *WorkshopManageSearch) Save(record *WorkshopManage) error { var db = slf.build() diff --git a/service/fineness.go b/service/fineness.go index fc3635b..e44e1ab 100644 --- a/service/fineness.go +++ b/service/fineness.go @@ -15,54 +15,65 @@ if err != nil { return err } - //鏁寸悊鎴愭楠岃〃鐨勬暟鎹粨鏋� - finenessRoundingItemMap := make(map[int]map[float32]*models.FinenessRoundingItem) - for _, item := range finenessRegister.FinenessList { - if finenessRoundingItemMap[item.Position] == nil { - finenessRoundingItemMap[item.Position] = make(map[float32]*models.FinenessRoundingItem, 0) + finenessCheckItems := make([]*models.FinenessCheckItem, 0) + var lastCarNo int + var roundingItemMap map[float32]*models.FinenessRoundingItem + var allFinenessList []decimal.Decimal + var personFinenessList []decimal.Decimal + var carCheckNumber = 0 //鍗曚釜car宸叉鏌ユ牱鏈暟 + endCarMap, err := GetWorkshopEndCarMap(finenessRegister.Workshop, finenessRegister.WorkshopGroup) + if err != nil { + return err + } + var item *models.FinenessCheckItem + var deviation decimal.Decimal + var finenessGrade string + for _, finenessItem := range finenessRegister.FinenessList { + roundedHalfFineness := ToRoundedHalfFineness(finenessItem.Fineness) + fineness := decimal.NewFromFloat32(roundedHalfFineness) + allFinenessList = append(allFinenessList, fineness) + personFinenessList = append(personFinenessList, fineness) + carCheckNumber++ + if carCheckNumber == constvar.EveryPersonCarCheckNumber { + carCheckNumber = 0 + if endCarMap[finenessItem.Position] { //璧板埌浜嗘煇涓汉鏈�鍚庣殑杞﹀彿,姣忎汉绠椾竴娆″亸宸拰绛夌骇 + deviation = utils.Deviation(personFinenessList) + finenessGrade = CalcFinenessGrade(item.Deviation, item.TotalDeviation, item.Cleanliness, item.Purity, item.TwiceChange, standardMap) + personFinenessList = personFinenessList[:0] + } } - roundedHalfFineness := ToRoundedHalfFineness(item.Fineness) - if finenessRoundingItemMap[item.Position][roundedHalfFineness] == nil { - finenessRoundingItemMap[item.Position][roundedHalfFineness] = &models.FinenessRoundingItem{ - Fineness: decimal.NewFromFloat32(roundedHalfFineness), + if lastCarNo != finenessItem.Position { //姣忎釜杞﹀彿瀛樹竴涓猰odels.FinenessCheckItem + roundingItems := make([]*models.FinenessRoundingItem, 0, len(roundingItemMap)) + for _, v := range roundingItemMap { + roundingItems = append(roundingItems, &models.FinenessRoundingItem{ + Fineness: v.Fineness, + Quantity: v.Quantity, + }) + } + item = &models.FinenessCheckItem{ + FinenessRegisterID: finenessRegister.ID, + Position: lastCarNo, + FinenessRoundingItem: roundingItems, + Deviation: deviation, + FinenessGrade: finenessGrade, + Remark: "", + } + + finenessCheckItems = append(finenessCheckItems, item) + lastCarNo = finenessItem.Position + roundingItemMap = make(map[float32]*models.FinenessRoundingItem, 0) + } + + if roundingItemMap[roundedHalfFineness] == nil { + roundingItemMap[roundedHalfFineness] = &models.FinenessRoundingItem{ + Fineness: fineness, Quantity: 1, } } else { - finenessRoundingItemMap[item.Position][roundedHalfFineness].Quantity++ + roundingItemMap[roundedHalfFineness].Quantity++ } } - finenessCheckItems := make([]*models.FinenessCheckItem, 0) - var allFinenessList []decimal.Decimal - var personEndFlag bool //璧板埌浜嗘煇涓汉鏈�鍚庣殑杞﹀彿 - var finenessList []decimal.Decimal - var step = 3 //涓存椂鎸変竴涓汉涓変釜杞﹀彿绠椼�� - for pos, roundingItemMap := range finenessRoundingItemMap { - roundingItems := make([]*models.FinenessRoundingItem, 0, len(roundingItemMap)) - for _, v := range roundingItemMap { - roundingItems = append(roundingItems, v) - finenessList = append(finenessList, v.Fineness) - allFinenessList = append(allFinenessList, v.Fineness) - } - item := &models.FinenessCheckItem{ - FinenessRegisterID: finenessRegister.ID, - Position: pos, - FinenessRoundingItem: roundingItems, - Remark: "", - } - if pos%step == 0 { - personEndFlag = true - } else { - personEndFlag = false - } - if personEndFlag { - item.Deviation = utils.Deviation(finenessList) - item.FinenessGrade = CalcFinenessGrade(item.Deviation, item.TotalDeviation, item.Cleanliness, item.Purity, item.TwiceChange, standardMap) - finenessList = finenessList[:0] - } - - finenessCheckItems = append(finenessCheckItems, item) - } finenessCheck := models.FinenessCheck{ FinenessRegisterID: finenessRegister.ID, AverageFineness: utils.Average(allFinenessList), diff --git a/service/workshop.go b/service/workshop.go new file mode 100644 index 0000000..e6a96f5 --- /dev/null +++ b/service/workshop.go @@ -0,0 +1,15 @@ +package service + +import "silkserver/models" + +func GetWorkshopEndCarMap(workshopNumber string, groupNumber int) (m map[int]bool, err error) { + records, err := models.NewWorkshopManageSearch().SetWorkshopNumber(workshopNumber).SetGroupNumber(groupNumber).FindAll() + if err != nil { + return + } + endCarMap := make(map[int]bool) + for _, record := range records { + endCarMap[record.EndCarNumber] = true + } + return +} -- Gitblit v1.8.0