package controllers import ( "errors" "github.com/gin-gonic/gin" "github.com/shopspring/decimal" "gorm.io/gorm" "silkserver/controllers/request" "silkserver/controllers/response" "silkserver/extend/code" "silkserver/extend/util" "silkserver/models" "silkserver/pkg/convertx" "silkserver/pkg/logx" "silkserver/pkg/structx" "silkserver/service" "strings" ) type FinenessController struct{} // RegisterAdd // @Tags 纤度登记 // @Summary 纤度登记添加 // @Produce application/json // @Param object body request.AddFinenessRegister true "字典信息" // @Param Authorization header string true "token" // @Success 200 {object} util.Response "成功" // @Router /api-jl/v1/fineness/register [post] func (slf FinenessController) RegisterAdd(c *gin.Context) { var reqParams request.AddFinenessRegister var params models.FinenessRegister if err := c.BindJSON(&reqParams); err != nil { logx.Errorf("RegisterAdd 参数解析失败:%v", err.Error()) util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误") return } if err := structx.AssignTo(reqParams, ¶ms); err != nil { logx.Errorf("RegisterAdd 数据转换错误:%v", err.Error()) util.ResponseFormat(c, code.RequestParamError, "数据转换错误") return } 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 } endCarMap, err := service.GetWorkshopEndCarMap(params.WorkshopNumber, params.WorkshopGroup) if len(endCarMap) == 0 { util.ResponseFormat(c, code.RequestParamError, "该车间未配置车号,请在车间管理中配置!") return } isNew := params.ID == 0 err = models.WithTransaction(func(db *gorm.DB) error { search := models.NewFinenessRegisterSearch().SetOrm(db) if !isNew { // id不为空 if err := models.NewFinenessItemSearch().SetOrm(db).SetFinenessRegisterID(params.ID).Delete(); err != nil { return err } return search.Save(¶ms) } return search.Create(¶ms) }) if err != nil { util.ResponseFormat(c, code.RequestParamError, "保存失败") return } err = service.FinenessCheck(¶ms, silkStandard, endCarMap, isNew) if err != nil { logx.Errorf("service.FinenessCheck err:%v, finenessRegister:%+v", err, params) util.ResponseFormat(c, code.RequestParamError, "生成检验表失败") return } util.ResponseFormat(c, code.Success, params) } 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 { return errors.New("编码重复") } } else { old, err := models.NewFinenessRegisterSearch().SetID(params.ID).First() if err != nil { return errors.New("记录不存在") } if old.Number != params.Number { return errors.New("编码不能修改") } } return nil } // RegisterList // @Tags 纤度登记 // @Summary 纤度登记列表 // @Produce application/json // @Param object query request.GetFinenessRegisterList true "查询参数" // @Success 200 {object} util.ResponseList{data=[]models.FinenessRegister} "成功" // @Router /api-jl/v1/fineness/register [get] func (slf FinenessController) RegisterList(c *gin.Context) { var params request.GetFinenessRegisterList if err := c.ShouldBindQuery(¶ms); err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } list, total, err := models.NewFinenessRegisterSearch().SetKeyword(params.Keyword).SetPage(params.Page, params.PageSize).SetOrder("id desc").Find() if err != nil { util.ResponseFormat(c, code.RequestParamError, "查找失败") return } util.ResponseFormatList(c, code.Success, list, total) } // RegisterInfo // @Tags 纤度登记 // @Summary 纤度登记详情 // @Produce application/json // @Param id path string true "字典信息" // @Success 200 {object} util.ResponseList{data=models.FinenessRegister} "成功" // @Router /api-jl/v1/fineness/register/{id} [get] func (slf FinenessController) RegisterInfo(c *gin.Context) { idStr := c.Param("id") if idStr == "0" || idStr == "" { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } id := convertx.StringToUInt(idStr) if id == 0 { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } info, err := models.NewFinenessRegisterSearch().SetID(id).SetPreload().First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "查找失败") return } util.ResponseFormat(c, code.Success, info) } // RegisterDelete // @Tags 纤度登记 // @Summary 纤度登记删除 // @Produce application/json // @Param id path string true "字典信息" // @Success 200 {object} util.Response "成功" // @Router /api-jl/v1/fineness/register/{id} [delete] func (slf FinenessController) RegisterDelete(c *gin.Context) { idStr := c.Param("id") if idStr == "0" || idStr == "" { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } id := convertx.StringToUInt(idStr) if id == 0 { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } err := models.WithTransaction(func(db *gorm.DB) error { if err := models.NewFinenessItemSearch().SetOrm(db).SetFinenessRegisterID(id).Delete(); err != nil { return err } return models.NewFinenessRegisterSearch().SetOrm(db).SetID(id).Delete() }) if err != nil { util.ResponseFormat(c, code.RequestParamError, "删除失败") return } util.ResponseFormat(c, code.UpdateSuccess, "删除成功") } // CheckList // @Tags 纤度检验 // @Summary 纤度检验列表 // @Produce application/json // @Param object query request.GetFinenessRegisterList true "查询参数" // @Success 200 {object} util.ResponseList{data=[]models.FinenessCheck} "成功" // @Router /api-jl/v1/fineness/check [get] func (slf FinenessController) CheckList(c *gin.Context) { var params request.GetFinenessRegisterList if err := c.ShouldBindQuery(¶ms); err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } list, total, err := models.NewFinenessCheckSearch().SetPage(params.Page, params.PageSize).SetPreload().SetOrder("id desc").Find() if err != nil { util.ResponseFormat(c, code.RequestParamError, "查找失败") return } util.ResponseFormatList(c, code.Success, list, total) } // CheckInfo // @Tags 纤度检验 // @Summary 纤度检验详情 // @Produce application/json // @Param id path string true "纤度检验ID" // @Success 200 {object} util.ResponseList{data=response.FinenessCheckInfo} "成功" // @Router /api-jl/v1/fineness/check/{id} [get] func (slf FinenessController) CheckInfo(c *gin.Context) { idStr := c.Param("id") if idStr == "0" || idStr == "" { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } id := convertx.StringToUInt(idStr) if id == 0 { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } info, err := models.NewFinenessCheckSearch().SetID(id).SetPreload().First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "查找失败") return } resp := new(response.FinenessCheckInfo) resp.Info = info resp.Items, err = models.NewFinenessCheckItemSearch().SetFinenessRegisterID(info.FinenessRegisterID).FindAll() if err != nil { util.ResponseFormat(c, code.RequestParamError, "查找失败") return } util.ResponseFormat(c, code.Success, resp) } // CheckInfoByFinenessID // @Tags 纤度检验 // @Summary 根据纤度登记ID获取纤度检验详情 // @Produce application/json // @Param id path string true "纤度登记ID" // @Success 200 {object} util.ResponseList{data=response.FinenessCheckInfo} "成功" // @Router /api-jl/v1/fineness/checkFinenessID/{id} [get] func (slf FinenessController) CheckInfoByFinenessID(c *gin.Context) { idStr := c.Param("id") if idStr == "0" || idStr == "" { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } id := convertx.StringToUInt(idStr) if id == 0 { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } info, err := models.NewFinenessCheckSearch().SetFinenessRegisterID(id).SetPreload().First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "检查表查找失败") return } resp := new(response.FinenessCheckInfo) resp.Info = info resp.Items, err = models.NewFinenessCheckItemSearch().SetFinenessRegisterID(info.FinenessRegisterID).FindAll() if err != nil { util.ResponseFormat(c, code.RequestParamError, "检查详情表查找失败") return } util.ResponseFormat(c, code.Success, resp) } // CheckDelete // @Tags 纤度检验 // @Summary 纤度检验删除 // @Produce application/json // @Param id path string true "字典信息" // @Success 200 {object} util.Response "成功" // @Router /api-jl/v1/fineness/check/{id} [delete] func (slf FinenessController) CheckDelete(c *gin.Context) { idStr := c.Param("id") if idStr == "0" || idStr == "" { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } id := convertx.StringToUInt(idStr) if id == 0 { util.ResponseFormat(c, code.RequestParamError, "空的记录id") return } check, err := models.NewFinenessCheckSearch().SetID(id).First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "检验记录不存在") return } err = models.WithTransaction(func(db *gorm.DB) error { err := models.NewFinenessCheckSearch().SetOrm(db).SetID(id).Delete() if err != nil { return err } return models.NewFinenessCheckItemSearch().SetOrm(db).SetFinenessRegisterID(check.FinenessRegisterID).Delete() }) if err != nil { util.ResponseFormat(c, code.RequestParamError, "删除失败") return } util.ResponseFormat(c, code.UpdateSuccess, "删除成功") } // CheckEdit // @Tags 纤度检验 // @Summary 纤度检验修改 // @Produce application/json // @Param object body response.FinenessCheckInfo true "参数" // @Param Authorization header string true "token" // @Success 200 {object} util.Response "成功" // @Router /api-jl/v1/fineness/check [PUT] func (slf FinenessController) CheckEdit(c *gin.Context) { var params response.FinenessCheckInfo if err := c.BindJSON(¶ms); err != nil { util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误") return } if params.Info == nil || params.Info.FinenessRegisterID == 0 || len(params.Items) == 0 { util.ResponseFormat(c, code.RequestParamError, "参数缺失") return } _, err := models.NewFinenessCheckSearch().SetID(params.Info.ID).First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "检验记录不存在") return } check := params.Info finenessRegister, err := models.NewFinenessRegisterSearch().SetID(check.FinenessRegisterID).First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "纤度登记不存在") return } specArr := strings.Split(finenessRegister.Spec, "/") start, _ := decimal.NewFromString(specArr[0]) end, _ := decimal.NewFromString(specArr[1]) standardMap, err := service.GetSilkRankStandard(start, end) if err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } check.FinenessGrade = service.CalcFinenessGrade(check.Deviation, check.TotalDeviation, check.Cleanliness, check.Purity, check.TwiceChange, standardMap) items := params.Items for _, item := range items { if item.FinenessGrade != "" { item.FinenessGrade = service.CalcFinenessGrade(item.Deviation, item.TotalDeviation, item.Cleanliness, item.Purity, item.TwiceChange, standardMap) } } err = models.WithTransaction(func(db *gorm.DB) error { err = models.NewFinenessCheckSearch().SetOrm(db).Save(params.Info) if err != nil { return err } for _, item := range items { if item.FinenessGrade == "" { continue } err = models.NewFinenessCheckItemSearch().SetOrm(db).SetID(item.ID).UpdateByMap(map[string]interface{}{"fineness_grade": item.FinenessGrade}) if err != nil { return err } } return nil }) if err != nil { util.ResponseFormat(c, code.SaveFail, "保存失败") return } util.ResponseFormat(c, code.Success, "保存成功") }