zhangqian
2024-04-29 8b6e1e99dfbfe9c5324ba161cfbd742cd5dd5499
根据规格取纤度等级标准
4个文件已修改
148 ■■■■■ 已修改文件
controllers/fineness.go 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/raw_silk_rank_standard.go 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/fineness.go 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/silk_rank.go 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/fineness.go
@@ -3,6 +3,7 @@
import (
    "errors"
    "github.com/gin-gonic/gin"
    "github.com/shopspring/decimal"
    "gorm.io/gorm"
    "silkserver/controllers/request"
    "silkserver/controllers/response"
@@ -13,6 +14,7 @@
    "silkserver/pkg/logx"
    "silkserver/pkg/structx"
    "silkserver/service"
    "strings"
)
type FinenessController struct{}
@@ -39,7 +41,15 @@
        return
    }
    silkStandard, err := service.GetSilkRankStandard()
    if err := slf.ParamsCheck(params); err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        return
    }
    specArr := strings.Split(params.Spec, "/")
    start, _ := decimal.NewFromString(specArr[0])
    end, _ := decimal.NewFromString(specArr[1])
    silkStandard, err := service.GetSilkRankStandard(start, end)
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        return
@@ -47,12 +57,7 @@
    endCarMap, err := service.GetWorkshopEndCarMap(params.WorkshopNumber, params.WorkshopGroup)
    if len(endCarMap) == 0 {
        util.ResponseFormat(c, code.RequestParamError, "请对该车间和车组进行车号设置")
        return
    }
    if err := slf.ParamsCheck(params); err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        util.ResponseFormat(c, code.RequestParamError, "该车间未配置车号,请在车间管理中配置!")
        return
    }
@@ -72,6 +77,7 @@
    })
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "保存失败")
        return
    }
    err = service.FinenessCheck(&params, silkStandard, endCarMap, isNew)
@@ -85,6 +91,29 @@
}
func (slf FinenessController) ParamsCheck(params models.FinenessRegister) (err error) {
    if params.Spec == "" || !strings.Contains(params.Spec, "/") {
        return errors.New("规格格式不正确")
    }
    specArr := strings.Split(params.Spec, "/")
    _, err = decimal.NewFromString(specArr[0])
    if err != nil {
        return errors.New("规格格式不正确")
    }
    _, err = decimal.NewFromString(specArr[1])
    if err != nil {
        return errors.New("规格格式不正确")
    }
    if params.WorkshopNumber == "" || params.WorkshopGroup == 0 {
        return errors.New("车间车组参数缺失")
    }
    if len(params.FinenessList) == 0 {
        return errors.New("纤度列表缺失")
    }
    if params.ID == 0 {
        _, err = models.NewFinenessRegisterSearch().SetNumber(params.Number).First()
        if err != gorm.ErrRecordNotFound {
@@ -301,6 +330,11 @@
        return
    }
    if params.FinenessRegisterID == 0 {
        util.ResponseFormat(c, code.RequestParamError, "参数缺失")
        return
    }
    err = service.FinenessReCheck(&params)
    if err != nil {
        logx.Errorf("service.FinenessReCheck err:%v, finenessCheck:%+v", err, params)
models/raw_silk_rank_standard.go
@@ -49,6 +49,11 @@
    return slf
}
func (slf *RawSilkRankStandardSearch) SetFineness(start, end decimal.Decimal) *RawSilkRankStandardSearch {
    slf.StartFineness, slf.EndFineness = start, end
    return slf
}
func (slf *RawSilkRankStandardSearch) build() *gorm.DB {
    db := slf.Orm.Table(slf.TableName())
@@ -56,6 +61,10 @@
        db = db.Where("id = ?", slf.ID)
    }
    if !slf.StartFineness.IsZero() || !slf.EndFineness.IsZero() {
        db = db.Where("start_fineness = ? and end_fineness = ?", slf.StartFineness, slf.EndFineness)
    }
    return db
}
service/fineness.go
@@ -8,6 +8,7 @@
    "silkserver/models"
    "silkserver/utils"
    "sort"
    "strings"
)
func FinenessCheck(finenessRegister *models.FinenessRegister, standardMap map[string]*Standard, endCarMap map[int]bool, isNew bool) (err error) {
@@ -21,44 +22,18 @@
    var deviation decimal.Decimal
    var finenessGrade string
    var roundingItemMap = make(map[float32]*models.FinenessRoundingItem, 0)
    lastCarNo = finenessRegister.FinenessList[0].Position
    for _, finenessItem := range finenessRegister.FinenessList {
        roundedHalfFineness := ToRoundedHalfFineness(finenessItem.Fineness)
        if lastCarNo != finenessItem.Position { //每个车号存一个models.FinenessCheckItem
            carCheckNumber = 0
            lastCarNo = finenessItem.Position
        }
        roundedHalfFineness := ToRoundedHalfFineness(finenessItem.Fineness) //类似四舍五入
        fineness := decimal.NewFromFloat32(roundedHalfFineness)
        for i := 0; i < finenessItem.Quantity; i++ {
            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]
            }
        }
        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,
                FinenessRoundingItems: 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,
@@ -66,6 +41,22 @@
            }
        } else {
            roundingItemMap[roundedHalfFineness].Quantity += finenessItem.Quantity
        }
        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]
            } else {
                deviation = decimal.Zero
                finenessGrade = ""
            }
            item = MakeFinenessCheckItem(roundingItemMap, finenessRegister.ID, lastCarNo, deviation, finenessGrade)
            finenessCheckItems = append(finenessCheckItems, item)
            roundingItemMap = make(map[float32]*models.FinenessRoundingItem, 0) //重置
        }
    }
@@ -113,6 +104,26 @@
    return err
}
func MakeFinenessCheckItem(roundingItemMap map[float32]*models.FinenessRoundingItem, finenessRegisterID uint, position int, deviation decimal.Decimal, finenessGrade string) *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:    finenessRegisterID,
        Position:              position,
        FinenessRoundingItems: roundingItems,
        Deviation:             deviation,
        FinenessGrade:         finenessGrade,
        Remark:                "",
    }
    return item
}
type gradeRank struct {
    gradeName string
    gradeRank int
@@ -122,9 +133,6 @@
    checkItemGradeMap := make(map[constvar.CheckItem]string, 5)
    gradeRanks := make([]gradeRank, 0)
    for _, st := range standardMap {
        if st.StartFineness.GreaterThan(deviation) || st.EndFineness.LessThan(deviation) {
            continue
        }
        grade := ""
        for _, pair := range st.ValueList {
            switch st.CheckItem {
@@ -220,7 +228,14 @@
}
func FinenessReCheck(finenessCheck *models.FinenessCheck) (err error) {
    standardMap, err := GetSilkRankStandard()
    finenessRegister, err := models.NewFinenessRegisterSearch().SetID(finenessCheck.FinenessRegisterID).First()
    if err != nil {
        return err
    }
    specArr := strings.Split(finenessRegister.Spec, "/")
    start, _ := decimal.NewFromString(specArr[0])
    end, _ := decimal.NewFromString(specArr[1])
    standardMap, err := GetSilkRankStandard(start, end)
    if err != nil {
        return err
    }
service/silk_rank.go
@@ -38,8 +38,8 @@
    constvar.CheckItemMaxDeviation: SortTypeAsc,
}
func GetSilkRankStandard() (map[string]*Standard, error) {
    rankStandards, err := models.NewRawSilkRankStandardSearch().FindNotTotal()
func GetSilkRankStandard(startFineness, endFineness decimal.Decimal) (map[string]*Standard, error) {
    rankStandards, err := models.NewRawSilkRankStandardSearch().SetFineness(startFineness, endFineness).FindNotTotal()
    if err != nil {
        return nil, err
    }