zhangqian
2024-07-05 d91f181819984ed68d928bec6e926da6566e7a3f
service/operation.go
@@ -4,6 +4,7 @@
   "errors"
   "fmt"
   "github.com/gin-gonic/gin"
   "github.com/mitchellh/mapstructure"
   "github.com/shopspring/decimal"
   "gorm.io/gorm"
   "strconv"
@@ -138,16 +139,17 @@
         if locAmount, aok := mapLocAmount[strconv.Itoa(roleProduct.LocationId)+v.ProductId]; aok {
            locAmount.Amount = locAmount.Amount.Add(v.Amount)
            if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
               return res.Error
            if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
               return err
            }
         } else {
            if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
            if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
               LocationId:        roleProduct.LocationId,
               ProductCategoryID: v.Product.CategoryId,
               ProductId:         v.ProductId,
               Amount:            v.Amount,
               CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
               WarehouseId:       operation.WarehouseId,
            }); err != nil {
               return err
            }
@@ -164,16 +166,17 @@
            if locAmount, aok := mapLocAmount[strconv.Itoa(roleCategory.LocationId)+v.ProductId]; aok {
               locAmount.Amount = locAmount.Amount.Add(v.Amount)
               if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
                  return res.Error
               if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
                  return err
               }
            } else {
               if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
               if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
                  LocationId:        roleCategory.LocationId,
                  ProductCategoryID: v.Product.CategoryId,
                  ProductId:         v.ProductId,
                  Amount:            v.Amount,
                  CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
                  WarehouseId:       operation.WarehouseId,
               }); err != nil {
                  return err
               }
@@ -181,16 +184,18 @@
         } else {
            if locAmount, aok := mapLocAmount[strconv.Itoa(operation.LocationID)+v.ProductId]; aok {
               locAmount.Amount = locAmount.Amount.Add(v.Amount)
               if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
                  return res.Error
               locAmount.ID = uint(locAmount.Id)
               if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
                  return err
               }
            } else {
               if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
               if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
                  LocationId:        operation.LocationID,
                  ProductCategoryID: v.Product.CategoryId,
                  ProductId:         v.ProductId,
                  Amount:            v.Amount,
                  CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
                  WarehouseId:       operation.WarehouseId,
               }); err != nil {
                  return err
               }
@@ -239,14 +244,18 @@
            return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Product.Name, locAmount.Amount.String(), v.Amount.String()))
         }
         locAmount.Amount = locAmount.Amount.Sub(v.Amount)
         if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil {
         if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
            return err
         }
      } else {
         return errors.New("当前仓库没有该产品,请先入库")
      }
      if v.IsInternalOutput {
         internalInputDetails = append(internalInputDetails, v)
         var inputDetail models.OperationDetails
         mapstructure.Decode(v, &inputDetail)
         inputDetail.Id = 0
         inputDetail.OperationID = 0
         internalInputDetails = append(internalInputDetails, &inputDetail)
      }
   }
   if len(internalInputDetails) > 0 {
@@ -327,7 +336,7 @@
         if locAmount.Amount.Equal(v.Amount) {
            continue
         }
         if v.Amount.GreaterThan(locAmount.Amount) {
         if v.Amount.GreaterThan(locAmount.Amount) { //todo 改成stockAmount
            inputDetails = append(inputDetails, &models.OperationDetails{
               ProductId:        v.ProductId,
               Amount:           v.Amount.Sub(locAmount.Amount),