lishihai
2024-06-20 504f3e9bc274bcd6c7221e738802e0e5d4aef36f
controllers/product_controller.go
@@ -18,6 +18,8 @@
   "wms/pkg/mysqlx"
   "wms/pkg/structx"
   "wms/request"
   "wms/response"
   "wms/service"
)
type ProductController struct {
@@ -53,22 +55,40 @@
      return
   }
   //params.ID = utils.GetUUID()
   err := models.NewMaterialSearch().Create(&params)
   err := models.WithTransaction(func(tx *gorm.DB) error {
      if err := models.NewMaterialSearch().SetOrm(tx).Create(&params); err != nil {
         return err
      }
      materialAttachmentList := []*models.MaterialAttachment{}
      for _, v := range params.AttachmentIDs {
         ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v}
         materialAttachmentList = append(materialAttachmentList, ma)
      }
      if len(materialAttachmentList) > 0 {
         if err := models.NewMaterialAttachmentSearch().SetOrm(tx).CreateBatch(materialAttachmentList); err != nil {
            return err
         }
      }
      avs := make([]*models.AttributeValue, 0)
      for _, v := range params.Attributes {
         av := models.AttributeValue{
            Model:       gorm.Model{},
            EntityID:    params.ID,
            AttributeID: v.ID,
            Value:       v.Value,
         }
         avs = append(avs, &av)
      }
      if err := models.NewAttributeValueSearch().SetOrm(tx).CreateBatch(avs); err != nil {
         return err
      }
      return nil
   })
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "产品信息保存失败")
      return
   }
   materialAttachmentList := []*models.MaterialAttachment{}
   for _, v := range params.AttachmentIDs {
      ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v}
      materialAttachmentList = append(materialAttachmentList, ma)
   }
   if len(materialAttachmentList) > 0 {
      if err := models.NewMaterialAttachmentSearch().CreateBatch(materialAttachmentList); err != nil {
         util.ResponseFormat(c, code.SaveFail, "附件保存失败")
         return
      }
   }
   util.ResponseFormat(c, code.Success, "保存成功")
@@ -216,38 +236,64 @@
      util.ResponseFormat(c, code.RequestParamError, "产品信息更新失败")
      return
   }
   //更新在库的产品类型
   if params.CategoryId > 0 {
      find, _ := models.NewLocationProductAmountSearch().SetProductId(params.ID).Find()
      if len(find) > 0 {
         var ids []int
         for _, f := range find {
            if f.ProductCategoryID != params.CategoryId {
               ids = append(ids, f.Id)
   err = models.WithTransaction(func(tx *gorm.DB) error {
      //更新在库的产品类型
      if params.CategoryId > 0 {
         find, _ := models.NewLocationProductAmountSearch().SetProductId(params.ID).Find()
         if len(find) > 0 {
            var ids []int
            for _, f := range find {
               if f.ProductCategoryID != params.CategoryId {
                  ids = append(ids, f.Id)
               }
            }
            m := make(map[string]interface{})
            m["productCategoryId"] = params.CategoryId
            _ = models.NewLocationProductAmountSearch().SetOrm(tx).SetIds(ids).UpdateByMap(m)
         }
         m := make(map[string]interface{})
         m["productCategoryId"] = params.CategoryId
         _ = models.NewLocationProductAmountSearch().SetIds(ids).UpdateByMap(m)
      }
   }
      materialAttachmentList := []*models.MaterialAttachment{}
      for _, v := range params.AttachmentIDs {
         ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v}
         materialAttachmentList = append(materialAttachmentList, ma)
      }
      if err := models.NewMaterialAttachmentSearch().SetOrm(tx).SetMaterialID(params.ID).Delete(); err != nil {
         util.ResponseFormat(c, code.RequestParamError, "产品附件清除失败")
         return err
      }
      if len(materialAttachmentList) > 0 {
         if err := models.NewMaterialAttachmentSearch().SetOrm(tx).CreateBatch(materialAttachmentList); err != nil {
            util.ResponseFormat(c, code.RequestParamError, "产品信息更新失败")
            return err
         }
      }
   materialAttachmentList := []*models.MaterialAttachment{}
   for _, v := range params.AttachmentIDs {
      ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v}
      materialAttachmentList = append(materialAttachmentList, ma)
   }
   if err := models.NewMaterialAttachmentSearch().SetMaterialID(params.ID).Delete(); err != nil {
      util.ResponseFormat(c, code.RequestParamError, "产品附件清除失败")
      attributeValueSearch := models.NewAttributeValueSearch()
      //删除从新插入
      if err := attributeValueSearch.SetOrm(tx).SetEntityID(params.ID).Delete(); err != nil {
         return err
      }
      avs := make([]*models.AttributeValue, 0)
      for _, v := range params.Attributes {
         av := models.AttributeValue{
            Model:       gorm.Model{},
            EntityID:    params.ID,
            AttributeID: v.ID,
            Value:       v.Value,
         }
         avs = append(avs, &av)
      }
      if err := models.NewAttributeValueSearch().SetOrm(tx).CreateBatch(avs); err != nil {
         return err
      }
      return nil
   })
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "产品信息更新失败")
      return
   }
   if len(materialAttachmentList) > 0 {
      if err := models.NewMaterialAttachmentSearch().CreateBatch(materialAttachmentList); err != nil {
         util.ResponseFormat(c, code.RequestParamError, "产品信息更新失败")
         return
      }
   }
   util.ResponseFormat(c, code.Success, "更新成功")
}
@@ -510,7 +556,10 @@
   db := models.NewOperationSearch().Orm.
      Table("wms_operation").
      Select("wms_operation.id,wms_operation.number,wms_operation.source_number,wms_operation.status,wms_operation_details.from_location_id,wms_operation_details.to_location_id,wms_operation.operation_date,wms_operation.contacter_id,wms_operation.contacter_name,wms_operation.company_id,wms_operation.company_name,wms_operation.comment,wms_operation_details.product_id,material.name as product_name,material.unit,wms_operation_details.amount,wms_operation.base_operation_type").
      Select("wms_operation.id,wms_operation.number,wms_operation.source_number,wms_operation.status,wms_operation_details.from_location_id,"+
         "wms_operation_details.to_location_id,wms_operation.operation_date,wms_operation.contacter_id,wms_operation.contacter_name,"+
         "wms_operation.company_id,wms_operation.company_name,wms_operation.comment,wms_operation_details.product_id,"+
         "material.name as product_name,material.unit,wms_operation_details.amount,wms_operation.base_operation_type").
      InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").
      InnerJoins("inner join material on material.id=wms_operation_details.product_id").
      Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeDisuse)
@@ -827,3 +876,28 @@
   util.ResponseFormat(c, code.Success, "添加成功")
}
// InputProduct
//
//   @Tags      物料管理
//   @Summary   导入物料
//   @Produce   application/xlsx
//   @Success   200      {object}   util.Response    "成功"
//   @Router      /api-wms/v1/product/inputProduct [post]
func (slf ProductController) InputProduct(c *gin.Context) {
   file, _, err := c.Request.FormFile("file")
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   defer file.Close()
   resp := response.MaterialInputRes{InputCount: 0, ErrCount: 0, FileAddress: ""}
   userInfo := middleware.GetUserInfo(c)
   insertCount, err := service.InputMaterial(file, userInfo.Username)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   resp.InputCount = insertCount
   util.ResponseFormat(c, code.Success, resp)
}