|
@@ -61,7 +61,8 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
|
|
|
private ProductManager productManager;
|
|
|
private WarehouseOutMapper warehouseOutMapper;
|
|
|
private WarehouseOutItemManager warehouseOutItemManager;
|
|
|
- private LockedStockDetailManager lockedStockDetailManager;
|
|
|
+ private ItemSnCodeManager itemSnCodeManager;
|
|
|
+ private GoodsSnManager goodsSnManager;
|
|
|
|
|
|
/**
|
|
|
* 查询库存报损单分页列表数据
|
|
@@ -91,61 +92,19 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
|
|
|
.eq(ProductStockDO::getWarehouseId, stockDamageReportDTO.getWarehouseId())
|
|
|
.in(ProductStockDO::getProductId, collect));
|
|
|
StockDamageReport report = BeanUtil.copyProperties(stockDamageReportDTO, StockDamageReport.class);
|
|
|
+ for (StockDamageReportProductDTO dto : stockDamageReportDTO.getProductList()) {
|
|
|
+ ProductStockDO aDo = list.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
|
|
|
+ if (aDo.getActualStock() < dto.getReportNum()) {
|
|
|
+ throw new ServiceException("报损数量不能能大于库存数量");
|
|
|
+ }
|
|
|
+ }
|
|
|
//生成库存报损单编号
|
|
|
String sn = noGenerateManager.generate(NoBusinessTypeEnum.StockDamageReport);
|
|
|
report.setSn(sn);
|
|
|
save(report);
|
|
|
-
|
|
|
List<StockDamageReportProduct> bean = BeanUtils.toBean(stockDamageReportDTO.getProductList(), StockDamageReportProduct.class);
|
|
|
- bean.forEach(item ->item.setReportId(report.getId()));
|
|
|
+ bean.forEach(item -> item.setReportId(report.getId()));
|
|
|
stockDamageReportProductManager.saveBatch(bean);
|
|
|
-
|
|
|
-
|
|
|
- List<StockDTO> arrayList = new ArrayList<>();
|
|
|
- //保存凍結库存明细
|
|
|
- List<LockedStockDetailDO> detailDOS = new ArrayList<>();
|
|
|
- for (StockDamageReportProduct dto : bean) {
|
|
|
- ProductStockDO aDo = list.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
|
|
|
- if (aDo.getActualStock() < dto.getReportNum()) {
|
|
|
- throw new ServiceException("报损数量不能能大于可用库存数量");
|
|
|
- }
|
|
|
- StockDTO stockDTO = new StockDTO();
|
|
|
- stockDTO.setId(dto.getProductStockId());
|
|
|
- stockDTO.setNum(dto.getReportNum());
|
|
|
- arrayList.add(stockDTO);
|
|
|
- LockedStockDetailDO detailDO = new LockedStockDetailDO();
|
|
|
- detailDO.setProductStockId(dto.getProductStockId());
|
|
|
- detailDO.setOrderId(report.getId());
|
|
|
- detailDO.setOrderSn(report.getSn());
|
|
|
- detailDO.setOrderItemId(dto.getId());
|
|
|
- detailDO.setOrderType(DetailOrderTypeEnum.DAMAGE);
|
|
|
- detailDO.setLockedNum(dto.getReportNum());
|
|
|
- detailDO.setLockedTime(new Date());
|
|
|
- detailDOS.add(detailDO);
|
|
|
- }
|
|
|
- lockedStockDetailManager.saveBatch(detailDOS);
|
|
|
- productStockManager.updateLockedStock(arrayList);
|
|
|
- //生成出库单
|
|
|
- WarehouseOutDO outDO = new WarehouseOutDO();
|
|
|
- outDO.setType(WarehouseOutTypeEnum.DAMAGE_OUT);
|
|
|
- outDO.setOrderIdList(report.getId());
|
|
|
- outDO.setWarehouseId(report.getWarehouseId());
|
|
|
- outDO.setNotes("报损单生成的出货单");
|
|
|
- outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
|
|
|
- warehouseOutMapper.insert(outDO);
|
|
|
- //保存出库单明细
|
|
|
- List<WarehouseOutItemDO> beanList = BeanUtils.toBean(bean, WarehouseOutItemDO.class);
|
|
|
- beanList.forEach(item ->{
|
|
|
- item.setOrderItemId(item.getId());
|
|
|
- item.setOrderId(report.getId());
|
|
|
- item.setWarehouseOutId(outDO.getId());
|
|
|
- Integer num = stockDamageReportDTO.getProductList().stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getReportNum();
|
|
|
- item.setOutNum(num);
|
|
|
- });
|
|
|
- warehouseOutItemManager.saveBatch(beanList);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
@@ -246,28 +205,78 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
|
|
|
/**
|
|
|
* 库存报损单提交审核
|
|
|
*
|
|
|
- * @param ids 库存报损单主键ID集合
|
|
|
+ * @param id 库存报损单主键ID集合
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(value = "goodsTransactionManager", propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
|
|
- public void submit(List<Long> ids) {
|
|
|
- List<StockDamageReport> reports = this.lambdaQuery()
|
|
|
- .in(StockDamageReport::getId, ids)
|
|
|
- .list();
|
|
|
- if (reports == null || reports.size() == 0) {
|
|
|
- throw new ServiceException("要提交审核的库存报损单不存在");
|
|
|
+ public void submit(Long id, StockDamageReportDTO stockDamageReportDTO) {
|
|
|
+ StockDamageReport report = getById(id);
|
|
|
+ if (DamageinventoryEnum.HAS_HANDLE.equals(report.getStatus())) {
|
|
|
+ throw new ServiceException("该报损单已处理");
|
|
|
}
|
|
|
- //验证库存报损单状态是否可以提交审核
|
|
|
- for (StockDamageReport report : reports) {
|
|
|
- if (!StockDamageReportStatusEnum.NEW.name().equals(report.getStatus())) {
|
|
|
- throw new ServiceException("只有状态为未提交的库存报损单才可进行提交审核操作");
|
|
|
+ updateById(report);
|
|
|
+ for (StockDamageReportProductDTO aDo : stockDamageReportDTO.getProductList()) {
|
|
|
+ ProductDO manager = productManager.getById(aDo.getProductId());
|
|
|
+ if (manager.getHaveSn()) {
|
|
|
+ if (CollUtil.isEmpty(aDo.getSnCodeList())) {
|
|
|
+ throw new ServiceException(manager.getId() + ":有序列号的商品出库需要录入序列号");
|
|
|
+ }
|
|
|
+ if (aDo.getReportNum() != aDo.getSnCodeList().size()) {
|
|
|
+ throw new ServiceException(manager.getId() + ":出库的数量须和序列号的个数相等");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- //将库存报损单状态修改为已提交(待审核)
|
|
|
- this.lambdaUpdate()
|
|
|
- .set(StockDamageReport::getStatus, StockDamageReportStatusEnum.WAIT.name())
|
|
|
- .in(StockDamageReport::getId, ids)
|
|
|
- .update();
|
|
|
+ List<StockDTO> arrayList = new ArrayList<>();
|
|
|
+ //减实际库存
|
|
|
+ for (StockDamageReportProductDTO dto : stockDamageReportDTO.getProductList()) {
|
|
|
+ StockDTO stockDTO = new StockDTO();
|
|
|
+ stockDTO.setId(dto.getProductStockId());
|
|
|
+ stockDTO.setNum(-dto.getReportNum());
|
|
|
+ arrayList.add(stockDTO);
|
|
|
+ }
|
|
|
+ productStockManager.updateActualStock(arrayList, null);
|
|
|
+ //生成出库单
|
|
|
+ WarehouseOutDO outDO = new WarehouseOutDO();
|
|
|
+ outDO.setType(WarehouseOutTypeEnum.DAMAGE_OUT);
|
|
|
+ outDO.setOrderIdList(report.getId());
|
|
|
+ outDO.setWarehouseId(report.getWarehouseId());
|
|
|
+ outDO.setNotes("报损单生成的出货单");
|
|
|
+ outDO.setHasSubmit("Y");
|
|
|
+ outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
|
|
|
+ warehouseOutMapper.insert(outDO);
|
|
|
+ //保存出库单明细
|
|
|
+ List<WarehouseOutItemDO> beanList = BeanUtils.toBean(stockDamageReportDTO.getProductList(), WarehouseOutItemDO.class);
|
|
|
+ beanList.forEach(item -> {
|
|
|
+ item.setOrderItemId(item.getId());
|
|
|
+ item.setOrderId(report.getId());
|
|
|
+ item.setWarehouseOutId(outDO.getId());
|
|
|
+ Integer num = stockDamageReportDTO.getProductList().stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getReportNum();
|
|
|
+ item.setOutNum(num);
|
|
|
+ });
|
|
|
+ warehouseOutItemManager.saveBatch(beanList);
|
|
|
+ List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
|
|
|
+ //更爱序列号的状态
|
|
|
+ List<GoodsSnDO> list = new ArrayList<>();
|
|
|
+ //如果有序列号,保存序列号和入库单的关系,更爱序列号的状态
|
|
|
+ for (StockDamageReportProductDTO aDo : stockDamageReportDTO.getProductList()) {
|
|
|
+ if (CollUtil.isNotEmpty(aDo.getSnCodeList())) {
|
|
|
+ aDo.getSnCodeList().forEach(item -> {
|
|
|
+ ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
|
|
|
+ itemSnCodeDO.setItemId(aDo.getId());
|
|
|
+ itemSnCodeDO.setEntryOutHouseId(report.getWarehouseId());
|
|
|
+ itemSnCodeDO.setType("damage");
|
|
|
+ itemSnCodeDO.setSnCodeId(item.getId());
|
|
|
+ itemSnCodeDOS.add(itemSnCodeDO);
|
|
|
+ item.setStatus(SnCodeStatusEnum.DISABLE_USE);
|
|
|
+ item.setOutHouseId(outDO.getId());
|
|
|
+ item.setEntryHouseId(null);
|
|
|
+ list.add(item);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //保存序列号和子表的关系
|
|
|
+ itemSnCodeManager.saveBatch(itemSnCodeDOS);
|
|
|
+ goodsSnManager.updateBatchById(list);
|
|
|
}
|
|
|
|
|
|
/**
|