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, "保存成功")
|
}
|