koushanshan пре 2 година
родитељ
комит
345321d35d
1 измењених фајлова са 41 додато и 22 уклоњено
  1. 41 22
      src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java

+ 41 - 22
src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java

@@ -165,7 +165,7 @@ public class InventoryService extends BaseService<Inventory> {
         //赋值
         for (InOutRecordVO inOutRecordVO : inOutRecordVOList) {
             //业务单据
-            inOutRecordVO.setBiznisType(Constant.InventoryDocCode.INTOBOUND.getValue());
+            inOutRecordVO.setBiznisType(Constant.InventoryDocCode.INTOBOUND.getTableName());
             //业务单ID
             inOutRecordVO.setBiznisId(inOutRecordVO.getIntoId());
             //业务单明细ID
@@ -194,7 +194,7 @@ public class InventoryService extends BaseService<Inventory> {
         //赋值
         for (InOutRecordVO inOutRecordVO : inOutRecordVOList) {
             //业务单据
-            inOutRecordVO.setBiznisType(Constant.InventoryDocCode.OUTBOUND.getValue());
+            inOutRecordVO.setBiznisType(Constant.InventoryDocCode.OUTBOUND.getTableName());
             //业务单ID
             inOutRecordVO.setBiznisId(inOutRecordVO.getOutId());
             //业务单明细ID
@@ -249,12 +249,12 @@ public class InventoryService extends BaseService<Inventory> {
             if (inventoryBatchVO.getBiznisItemId() == null || "".equals(inventoryBatchVO.getBiznisItemId())) {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FROM_ITEM_ID_IS_NULL.getMessage());
             }
-            //入库价不为空
-            if (inventoryBatchVO.getPriceInto() == null) {
+            //库存业务类型是盘亏出库 不校验 入库价不为空
+            if (inventoryBatchVO.getPriceInto() == null && !Constant.InventoryDocCode.INVENTORY_LOSS.getValue().equals(inventoryBatchVO.getInventoryDocCode())){
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.COST_PRICE_IS_NULL.getMessage());
             }
-            //数量不为空
-            if (inventoryBatchVO.getIntoQty() == null) {
+            //数量不为空 并且 >0
+            if (inventoryBatchVO.getIntoQty() == null && inventoryBatchVO.getIntoQty().compareTo(BigDecimal.ZERO)>0) {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.QTY_IS_NULL.getMessage());
             }
             //金额不为空
@@ -330,19 +330,14 @@ public class InventoryService extends BaseService<Inventory> {
             else {
                 //仓库Id赋值
                 inOutRecordVO.setInvId(inventoryResponse.getInvId());
-                //新建库存流水
-                this.insertInboundRecord(inOutRecordVO);
+                //根据类型判断是新建库存批次还是更新库存批次
+                inOutRecordVO = this.checkInsertOrUpdateInventoryBatch(inOutRecordVO);
                 //跟新库存数据
                 Inventory inventory = new Inventory();
                 //库存资产
                 inventory.setCostAmt(inOutRecordVO.getIntoAmt());
                 //实体转换
                 InventoryVO inventoryVO = inventoryConvert.convertToVO(inventory);
-                //如果是出库 需要在出库成本插入数据
-                if (Constant.InventoryType.OUTBOUND.getName().equals(inOutRecordVO.getInventoryType())) {
-                    //出库成本
-                    this.insertOutboundItemCost(inOutRecordVO);
-                }
                 //采购退货入库  或者  是出库但不是销售退货出库
                 if(Constant.InventoryDocCode.PURCHASE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode())  ||
                         (Constant.InventoryType.OUTBOUND.getName().equals(inOutRecordVO.getInventoryType()) &&  ! Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()))
@@ -370,8 +365,6 @@ public class InventoryService extends BaseService<Inventory> {
                     //库存资产
                     inventory.setCostAmt(inOutRecordVO.getIntoAmt().negate());
                 }
-                //根据类型判断是新建库存批次还是更新库存批次
-                this.checkInsertOrUpdateInventoryBatch(inOutRecordVO);
                 //修改库存金额、数量相关字段
                 int countRow = inventoryMapper.updateAmountAndQuantity(inventoryVO);
                 //数量超出
@@ -393,7 +386,7 @@ public class InventoryService extends BaseService<Inventory> {
     @Transactional(
             rollbackFor = {Exception.class}
     )
-    public void checkInsertOrUpdateInventoryBatch(InOutRecordVO inOutRecordVO) {
+    public InOutRecordVO checkInsertOrUpdateInventoryBatch(InOutRecordVO inOutRecordVO) {
         //region 新建 入库并且不是采购退货入库 或者是销售退货出库 走新建
         if(Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) ||
                 (Constant.InventoryType.INBOUND.getName().equals(inOutRecordVO.getInventoryType()) &&
@@ -412,8 +405,10 @@ public class InventoryService extends BaseService<Inventory> {
             //查询库存批次明细  按照时间排序(正序)
             List<InventoryBatchResponse> inventoryBatchResponseList = inventoryBatchMapper.selectAmountAndQuantity(new InventoryBatchQuery().setInvId(inOutRecordVO.getInvId()));
             if (inventoryBatchResponseList.size() > 0) {
-                BigDecimal qty = inOutRecordVO.getIntoQty();
-                BigDecimal amt = inOutRecordVO.getIntoAmt();
+                //数量
+                BigDecimal qty = inOutRecordVO.getIntoQty().abs();
+                //金额
+                BigDecimal amt = BigDecimal.ZERO;
                 for (InventoryBatchResponse inventoryBatchResponse : inventoryBatchResponseList) {
                     InventoryBatchVO inventoryBatchVO = new InventoryBatchVO();
                     //判断是否为最后一次扣减当前条库存
@@ -428,6 +423,14 @@ public class InventoryService extends BaseService<Inventory> {
                         //清零标识
                         inventoryBatchVO.setZeroFlag(true);
                         inventoryBatchMapper.updateAmountAndQuantity(inventoryBatchVO);
+                        //金额  = 传入数量 * 库存批次明细存货单价
+                        amt = inventoryBatchVO.getInvQty().multiply(inventoryBatchResponse.getCostPrice());
+                        inOutRecordVO.setCostPrice(inventoryBatchResponse.getCostPrice());
+                        inOutRecordVO.setIntoAmt(inOutRecordVO.getIntoQty().multiply(inventoryBatchResponse.getCostPrice()));
+                        //出库成本
+                        this.insertOutboundItemCost(inOutRecordVO);
+                        //新建库存流水
+                        this.insertInboundRecord(inOutRecordVO);
                         break;
                     }
                     //不是
@@ -439,10 +442,18 @@ public class InventoryService extends BaseService<Inventory> {
                             //库存数量
                             inventoryBatchVO.setInvQty(inOutRecordVO.getIntoQty());
                             //存货资产
-                            inventoryBatchVO.setCostAmt(inOutRecordVO.getIntoAmt());
+                            inventoryBatchVO.setCostAmt( inventoryBatchVO.getInvQty().multiply(inventoryBatchResponse.getCostPrice()));
                             //清零标识
                             inventoryBatchVO.setZeroFlag(true);
                             inventoryBatchMapper.updateAmountAndQuantity(inventoryBatchVO);
+                            //金额  = 传入数量 * 库存批次明细存货单价
+                            amt = inventoryBatchVO.getInvQty().multiply(inventoryBatchResponse.getCostPrice());
+                            inOutRecordVO.setCostPrice(inventoryBatchResponse.getCostPrice());
+                            inOutRecordVO.setIntoAmt(inOutRecordVO.getIntoQty().multiply(inventoryBatchResponse.getCostPrice()));
+                            //出库成本
+                            this.insertOutboundItemCost(inOutRecordVO);
+                            //新建库存流水
+                            this.insertInboundRecord(inOutRecordVO);
                             break;
                         }
                         //当前条库存批次明细不够出库
@@ -450,24 +461,32 @@ public class InventoryService extends BaseService<Inventory> {
                             //主键赋值
                             inventoryBatchVO.setBatchId(inventoryBatchResponse.getBatchId());
                             //库存数量
-                            inventoryBatchVO.setInvQty(inOutRecordVO.getIntoQty());
+                            inventoryBatchVO.setInvQty(inventoryBatchResponse.getInvQty());
                             //存货资产
-                            inventoryBatchVO.setCostAmt(inOutRecordVO.getIntoAmt());
+                            inventoryBatchVO.setCostAmt(inventoryBatchResponse.getCostAmt());
                             //清零标识
                             inventoryBatchVO.setZeroFlag(true);
                             //修改数量金额
                             inventoryBatchMapper.updateAmountAndQuantity(inventoryBatchVO);
                             //数量、金额每次更新完要重新运算
                             qty = qty.subtract(inventoryBatchResponse.getInvQty());
-                            amt = amt.subtract(inventoryBatchResponse.getCostAmt());
+                            amt = amt.add(inventoryBatchResponse.getInvQty().multiply(inventoryBatchResponse.getCostPrice()));
+                            inOutRecordVO.setCostPrice(inventoryBatchResponse.getCostPrice());
+                            inOutRecordVO.setIntoAmt(inventoryBatchResponse.getInvQty().multiply(inventoryBatchResponse.getCostPrice()));
+                            //出库成本
+                            this.insertOutboundItemCost(inOutRecordVO);
+                            //新建库存流水
+                            this.insertInboundRecord(inOutRecordVO);
                         }
                     }
                 }
+                inOutRecordVO.setIntoAmt(amt);
             }else{
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CAN_OUTBOUND_QUANTITY_INSUFFICIENT.getMessage());
             }
         }
         //endregion
+        return  inOutRecordVO;
     }