|
|
@@ -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;
|
|
|
}
|
|
|
|
|
|
|