zhangqian
2024-03-19 178d6e7507ef4806ca02692c4ee24bb98dba8362
生丝检验部分逻辑修正
1个文件已添加
4个文件已修改
147 ■■■■ 已修改文件
constvar/const.go 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/fineness.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/workshop_manage.go 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/fineness.go 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/workshop.go 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 //每人每车抽检份数
)
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"`                          //回数
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()
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 { //每个车号存一个models.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),
service/workshop.go
New file
@@ -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
}