zhangqian
2024-07-29 eae158f8d95df5f49c4e36d5b9ad00b62dbad9ec
service/operation.go
@@ -125,6 +125,7 @@
   var details []*models.OperationDetails
   for k, v := range listDetails {
      listDetails[k].Product.Amount = listDetails[k].Product.Amount.Add(v.Amount)
      listDetails[k].Product.MoreUnitList = AddMoreUnit(listDetails[k].Product.MoreUnitList, v.MoreUnitList)
      if err := tx.Save(&listDetails[k].Product).Error; err != nil {
         return err
      }
@@ -133,6 +134,7 @@
         detail := &models.OperationDetails{
            ProductId:      v.ProductId,
            Amount:         v.Amount,
            MoreUnitList:   v.MoreUnitList,
            FromLocationID: roleProduct.AreaId,
            ToLocationID:   roleProduct.LocationId,
         }
@@ -140,6 +142,7 @@
         if locAmount, aok := mapLocAmount[strconv.Itoa(roleProduct.LocationId)+v.ProductId]; aok {
            locAmount.Amount = locAmount.Amount.Add(v.Amount)
            locAmount.MoreUnitList = AddMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
            if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
               return err
            }
@@ -149,6 +152,7 @@
               ProductCategoryID: v.Product.CategoryId,
               ProductId:         v.ProductId,
               Amount:            v.Amount,
               MoreUnitList:      v.MoreUnitList,
               CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
               WarehouseId:       operation.WarehouseId,
            }); err != nil {
@@ -160,6 +164,7 @@
            detail := &models.OperationDetails{
               ProductId:      v.ProductId,
               Amount:         v.Amount,
               MoreUnitList:   v.MoreUnitList,
               FromLocationID: roleCategory.AreaId,
               ToLocationID:   roleCategory.LocationId,
            }
@@ -167,6 +172,7 @@
            if locAmount, aok := mapLocAmount[strconv.Itoa(roleCategory.LocationId)+v.ProductId]; aok {
               locAmount.Amount = locAmount.Amount.Add(v.Amount)
               locAmount.MoreUnitList = AddMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
               if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
                  return err
               }
@@ -176,6 +182,7 @@
                  ProductCategoryID: v.Product.CategoryId,
                  ProductId:         v.ProductId,
                  Amount:            v.Amount,
                  MoreUnitList:      v.MoreUnitList,
                  CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
                  WarehouseId:       operation.WarehouseId,
               }); err != nil {
@@ -185,6 +192,7 @@
         } else {
            if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
               locAmount.Amount = locAmount.Amount.Add(v.Amount)
               locAmount.MoreUnitList = AddMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
               locAmount.ID = uint(locAmount.Id)
               if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil {
                  return err
@@ -195,6 +203,7 @@
                  ProductCategoryID: v.Product.CategoryId,
                  ProductId:         v.ProductId,
                  Amount:            v.Amount,
                  MoreUnitList:      v.MoreUnitList,
                  CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
                  WarehouseId:       operation.WarehouseId,
               }); err != nil {
@@ -236,6 +245,9 @@
      if v.Product.Amount.LessThan(v.Amount) {
         return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Product.Name, v.Product.Amount.String(), v.Amount.String()))
      }
      if !MoreUnitIsEnough(v.Product.MoreUnitList, v.MoreUnitList) {
         return errors.New(fmt.Sprintf("产品:%v, 多单位数量不够,无法完成出库操作", v.Product.Name))
      }
      listDetails[k].Product.Amount = listDetails[k].Product.Amount.Sub(v.Amount)
      if err := models.NewMaterialSearch().SetOrm(tx).Save(&listDetails[k].Product); err != nil {
         return err
@@ -245,7 +257,11 @@
         if locAmount.Amount.LessThan(v.Amount) {
            return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Product.Name, locAmount.Amount.String(), v.Amount.String()))
         }
         if !MoreUnitIsEnough(locAmount.MoreUnitList, v.MoreUnitList) {
            return errors.New(fmt.Sprintf("产品:%v, 多单位数量不够,无法完成出库操作", v.Product.Name))
         }
         locAmount.Amount = locAmount.Amount.Sub(v.Amount)
         locAmount.MoreUnitList = SubMoreUnit(locAmount.MoreUnitList, v.MoreUnitList)
         if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
            return err
         }
@@ -293,6 +309,8 @@
      outputDetails = append(outputDetails, &models.OperationDetails{
         ProductId:        v.ProductId,
         Amount:           v.Amount,
         MoreUnitList:     v.MoreUnitList,
         DealerType:       v.DealerType,
         FromLocationID:   v.FromLocationID,
         ToLocationID:     v.ToLocationID,
         TotalGrossWeight: v.TotalGrossWeight,