zhangqian
2024-06-14 da3e478917dea118df075357cbd2e6f10833d9c6
service/operation.go
@@ -286,21 +286,83 @@
}
// FinishOperationAdjust 完成库存调整
// 验证后生成入库单或出库单(库存减少生成出库单,库存增加生成入库单)
func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
   var inputDetails []*models.OperationDetails
   var outputDetails []*models.OperationDetails
   for _, v := range listDetails {
      if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
         locAmount.Amount = v.Amount
         if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
            return err
         if locAmount.Amount.Equal(v.Amount) {
            continue
         }
         if v.Amount.GreaterThan(locAmount.Amount) {
            inputDetails = append(inputDetails, &models.OperationDetails{
               ProductId:      v.ProductId,
               Amount:         v.Amount.Sub(locAmount.Amount),
               FromLocationID: v.FromLocationID,
               ToLocationID:   v.ToLocationID,
            })
         } else {
            outputDetails = append(outputDetails, &models.OperationDetails{
               ProductId:      v.ProductId,
               Amount:         locAmount.Amount.Sub(v.Amount),
               FromLocationID: v.ToLocationID,
               ToLocationID:   v.FromLocationID,
            })
         }
      } else {
         if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
            LocationId:        v.ToLocationID,
            ProductCategoryID: v.Product.CategoryId,
            ProductId:         v.ProductId,
            Amount:            v.Amount,
            CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
         }); err != nil {
         inputDetails = append(inputDetails, &models.OperationDetails{
            ProductId:      v.ProductId,
            Amount:         v.Amount,
            FromLocationID: v.FromLocationID,
            ToLocationID:   v.ToLocationID,
         })
      }
      //if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
      //   locAmount.Amount = v.Amount
      //   if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil {
      //      return err
      //   }
      //} else {
      //   if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{
      //      LocationId:        v.ToLocationID,
      //      ProductCategoryID: v.Product.CategoryId,
      //      ProductId:         v.ProductId,
      //      Amount:            v.Amount,
      //      CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
      //   }); err != nil {
      //      return err
      //   }
      //}
      if len(inputDetails) > 0 {
         operation := &models.Operation{
            Number:            strconv.FormatInt(time.Now().Unix(), 10),
            Status:            constvar.OperationStatus_Ready,
            OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
            Comment:           "库存盘点",
            BaseOperationType: constvar.BaseOperationTypeIncoming,
            Details:           inputDetails,
            LocationID:        inputDetails[0].FromLocationID,
            OperationTypeName: "库存调整",
         }
         if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil {
            return err
         }
      }
      if len(outputDetails) > 0 {
         operation := &models.Operation{
            Number:            strconv.FormatInt(time.Now().Unix(), 10),
            Status:            constvar.OperationStatus_Ready,
            OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
            Comment:           "库存盘点",
            BaseOperationType: constvar.BaseOperationTypeOutgoing,
            Details:           outputDetails,
            LocationID:        outputDetails[0].FromLocationID,
            OperationTypeName: "库存调整",
         }
         if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil {
            return err
         }
      }