zhangqian
2024-07-01 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5
controllers/location_product.go
@@ -1,8 +1,11 @@
package controllers
import (
   "errors"
   "github.com/gin-gonic/gin"
   "gorm.io/gorm"
   "strconv"
   "wms/constvar"
   "wms/extend/code"
   "wms/extend/util"
   "wms/models"
@@ -40,14 +43,44 @@
      util.ResponseFormat(c, code.RequestParamError, "请选择位置")
      return
   }
   if params.ProductId == "" {
      util.ResponseFormat(c, code.RequestParamError, "请选择产品")
   if params.RuleType != constvar.RuleType_Product && params.RuleType != constvar.RuleType_ProductCategory {
      util.ResponseFormat(c, code.RequestParamError, "ruleType异常")
      return
   }
   //if params.ProductCategoryID == 0 {
   //   util.ResponseFormat(c, code.RequestParamError, "请选择产品类别")
   //   return
   //}
   if params.RuleType == constvar.RuleType_Product {
      if params.ProductId == "" {
         util.ResponseFormat(c, code.RequestParamError, "请选择产品")
         return
      }
      if _, err := models.NewLocationProductSearch().SetProductId(params.ProductId).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
         if !errors.Is(err, gorm.ErrRecordNotFound) {
            util.ResponseFormat(c, code.RequestParamError, err.Error())
            return
         }
      } else {
         util.ResponseFormat(c, code.RequestParamError, "已存在该上家规则,请勿重复添加")
         return
      }
   }
   if params.RuleType == constvar.RuleType_ProductCategory {
      if params.ProductCategoryID == 0 {
         util.ResponseFormat(c, code.RequestParamError, "请选择产品类别")
         return
      }
      if _, err := models.NewLocationProductSearch().SetProductCategoryId(params.ProductCategoryID).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
         if !errors.Is(err, gorm.ErrRecordNotFound) {
            util.ResponseFormat(c, code.RequestParamError, err.Error())
            return
         }
      } else {
         util.ResponseFormat(c, code.RequestParamError, "已存在该上家规则,请勿重复添加")
         return
      }
   }
   if err := models.NewLocationProductSearch().Create(&params); err != nil {
      logx.Errorf("Operation create err: %v", err)
      util.ResponseFormat(c, code.SaveFail, "添加失败:"+err.Error())
@@ -64,7 +97,7 @@
// @Success   200 {object} util.Response   "成功"
// @Router    /api-wms/v1/locationProduct/list [post]
func (slf LocationProductController) List(c *gin.Context) {
   var params request.PageInfo
   var params request.QueryLocationProductConditon
   if err := c.BindJSON(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误:"+err.Error())
      return
@@ -76,6 +109,14 @@
   search := models.NewLocationProductSearch()
   search.SetPage(params.Page, params.PageSize)
   if params.ProductId != "" {
      search = search.SetProductId(params.ProductId)
   }
   if params.ProductCategoryId != 0 {
      search = search.SetProductCategoryId(params.ProductCategoryId)
   }
   list, total, err := search.SetPreload(true).SetOrder("created_at desc").FindByPage()
   if err != nil {
      util.ResponseFormat(c, code.RequestError, "查找失败:"+err.Error())
@@ -115,14 +156,44 @@
      util.ResponseFormat(c, code.RequestParamError, "请选择位置")
      return
   }
   if params.ProductId == "" {
      util.ResponseFormat(c, code.RequestParamError, "请选择产品")
   if params.RuleType != constvar.RuleType_Product && params.RuleType != constvar.RuleType_ProductCategory {
      util.ResponseFormat(c, code.RequestParamError, "ruleType异常")
      return
   }
   if params.ProductCategoryID == 0 {
      util.ResponseFormat(c, code.RequestParamError, "请选择产品类别")
      return
   if params.RuleType == constvar.RuleType_Product {
      if params.ProductId == "" {
         util.ResponseFormat(c, code.RequestParamError, "请选择产品")
         return
      }
      if rule, err := models.NewLocationProductSearch().SetProductId(params.ProductId).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
         if !errors.Is(err, gorm.ErrRecordNotFound) {
            util.ResponseFormat(c, code.RequestParamError, err.Error())
            return
         }
      } else if params.Id != rule.Id {
         util.ResponseFormat(c, code.RequestParamError, "已存在该上家规则,请勿重复添加")
         return
      }
   }
   if params.RuleType == constvar.RuleType_ProductCategory {
      if params.ProductCategoryID == 0 {
         util.ResponseFormat(c, code.RequestParamError, "请选择产品类别")
         return
      }
      if rule, err := models.NewLocationProductSearch().SetProductCategoryId(params.ProductCategoryID).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
         if !errors.Is(err, gorm.ErrRecordNotFound) {
            util.ResponseFormat(c, code.RequestParamError, err.Error())
            return
         }
      } else if params.Id != rule.Id {
         util.ResponseFormat(c, code.RequestParamError, "已存在该上家规则,请勿重复添加")
         return
      }
   }
   if err := models.NewLocationProductSearch().SetID(params.Id).Update(&params); err != nil {
      logx.Errorf("LocationProduct update err: %v", err)
      util.ResponseFormat(c, code.SaveFail, "修改失败:"+err.Error())
@@ -150,7 +221,6 @@
      util.ResponseFormat(c, code.RequestParamError, "id为0")
      return
   }
   //TODO:此处可能需要增加限制,如果该上架规则如果已经产生了库存数量,删除会造成库存查不到的影响
   if err := models.NewLocationProductSearch().SetID(id).Delete(); err != nil {
      logx.Errorf("LocationProduct delete err: %v", err)
      util.ResponseFormat(c, code.SaveFail, "删除失败:"+err.Error())