diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java index 4ca2b97..a402b51 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java @@ -20,4 +20,6 @@ public interface IHuahengMultiHandlerService { Result combination(CombinationParam combinationParam); Result cancelCombine(Integer id); + + Result autoCombination(String shipmentCode, String warehouseCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java index ab89228..bc954de 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java @@ -117,4 +117,16 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem return result; } + @Override + public Result autoCombination(String shipmentCode, String warehouseCode) { + Result result = handleMultiProcess("combination", new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = shipmentCombinationService.autoCombination(shipmentCode, warehouseCode); + return result; + } + }); + return result; + } + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java index d492035..3dfb3ef 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java @@ -48,4 +48,6 @@ public interface IInventoryDetailService extends IService<InventoryDetail> { */ boolean updateTaskQtyById(BigDecimal taskQty, int id); + boolean updateQtyAndTaskQtyAndLocationCode(BigDecimal qty, BigDecimal taskQty, String locationCode, int id); + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java index 7ca8af2..cb9ca4e 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java @@ -32,4 +32,6 @@ public interface IInventoryHeaderService extends IService<InventoryHeader> { boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id); boolean updateContainerStatusById(String containerStatus, Integer id); + + boolean updateContainerStatusAndLocationCode(String containerStatus, String locationCode, Integer id); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java index afb132b..ae53e93 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java @@ -116,7 +116,18 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe InventoryDetail inventoryDetail = new InventoryDetail(); inventoryDetail.setTaskQty(taskQty); inventoryDetail.setId(id); - boolean success = updateById(inventoryDetail); + boolean success = this.updateById(inventoryDetail); + return success; + } + + @Override + public boolean updateQtyAndTaskQtyAndLocationCode(BigDecimal qty, BigDecimal taskQty, String locationCode, int id) { + InventoryDetail inventoryDetail = new InventoryDetail(); + inventoryDetail.setQty(qty); + inventoryDetail.setTaskQty(taskQty); + inventoryDetail.setLocationCode(locationCode); + inventoryDetail.setId(id); + boolean success = this.updateById(inventoryDetail); return success; } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java index 348aec7..10e8925 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java @@ -115,4 +115,14 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe return success; } + @Override + public boolean updateContainerStatusAndLocationCode(String containerStatus, String locationCode, Integer id) { + InventoryHeader inventoryHeader = new InventoryHeader(); + inventoryHeader.setId(id); + inventoryHeader.setContainerStatus(containerStatus); + inventoryHeader.setLocationCode(locationCode); + boolean success = inventoryHeaderService.updateById(inventoryHeader); + return success; + } + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java index a4e694f..29e2fd8 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java @@ -88,7 +88,7 @@ public class ShipmentCombinationController { public Result autoCombination(@RequestBody ShipmentHeader shipmentHeader) { String shipmentCode = shipmentHeader.getCode(); String warehouseCode = shipmentHeader.getWarehouseCode(); - return shipmentCombinationService.autoCombination(shipmentCode, warehouseCode); + return huahengMultiHandlerService.autoCombination(shipmentCode, warehouseCode); } /** diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java index e25c379..bb7d478 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java @@ -123,6 +123,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi @Override @Transactional(rollbackFor = JeecgBootException.class) public Result autoCombination(String shipmentCode, String warehouseCode) { + log.info("开始自动配盘,单号" + shipmentCode); LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getWarehouseCode, warehouseCode).eq(ShipmentHeader::getCode, shipmentCode); ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderLambdaQueryWrapper); @@ -148,6 +149,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi throw new JeecgBootException(result.getMessage()); } } + log.info("完成自动配盘,单号" + shipmentCode); if (over) { return Result.error("出库单已经配盘", null); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index f56d900..1936da0 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -885,7 +885,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Override @Transactional(rollbackFor = Exception.class) public Result cancelTask(Integer taskId) { - TaskHeader taskHeader = getById(taskId); + TaskHeader taskHeader = this.getById(taskId); if (taskHeader == null) { return Result.error("任务" + taskId + "未找到,执行中止"); } @@ -967,7 +967,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Override @Transactional(rollbackFor = Exception.class) public Result<TaskHeader> createEmptyIn(String containerCode, String toLocationCode, String warehouseCode) { - log.info("开始创建空托入库任务"); + log.info("开始创建空托入库任务" + containerCode); if (StringUtils.isEmpty(containerCode)) { return Result.error("创建空托盘入库时, 托盘号为空"); } @@ -1030,6 +1030,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Override @Transactional(rollbackFor = Exception.class) public Result createEmptyOut(String containerCode, String toPortCode, String warehouseCode) { + log.info("开始创建空托出库任务" + containerCode); if (StringUtils.isEmpty(containerCode)) { return Result.error("创建空托盘出库时, 托盘号为空"); } @@ -1080,6 +1081,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); taskHeader.setToPortCode(toPortCode); success = taskHeaderService.save(taskHeader); + log.info("完成创建空托出库任务" + containerCode); if (!success) { throw new JeecgBootException("创建空托盘出库时,保存任务失败"); } @@ -1305,6 +1307,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (taskHeader == null) { return Result.error("完成出库任务未找到,执行中止"); } + log.info("开始完成出库任务,任务号:" + taskHeader.getId()); String warehouseCode = taskHeader.getWarehouseCode(); String fromLocationCode = taskHeader.getFromLocationCode(); String toLocationCode = taskHeader.getToLocationCode(); @@ -1317,21 +1320,22 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.ok("完成出库任务,(" + taskHeader.getId() + ")任务已经是完成的!"); } if (taskDetailList.isEmpty()) { - throw new JeecgBootException("完成出库任务,任务明细为空"); + return Result.error("完成出库任务,任务明细为空"); } if (StringUtils.isEmpty(fromLocationCode)) { - throw new JeecgBootException("完成出库任务" + taskHeader.getId() + "没有起始库位,执行中止"); + return Result.error("完成出库任务" + taskHeader.getId() + "没有起始库位,执行中止"); } if (StringUtils.isEmpty(toLocationCode) && taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) { - throw new JeecgBootException("完成出库任务,任务" + taskHeader.getId() + "没有目的库位,执行中止"); + return Result.error("完成出库任务,任务" + taskHeader.getId() + "没有目的库位,执行中止"); } InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode); if (inventoryHeader == null) { - throw new JeecgBootException("完成出库任务,出库任务" + taskHeader.getId() + "没有找到库存头"); + return Result.error("完成出库任务,出库任务" + taskHeader.getId() + "没有找到库存头"); } List<InventoryTransaction> inventoryTransactionList = new ArrayList<>(); List<Integer> shipmentIdList = new ArrayList<>(); List<ShipmentDetail> shipmentDetailList = new ArrayList<>(); + List<ShipmentDetail> shipmentDetailList1 = new ArrayList<>(); for (TaskDetail taskDetail : taskDetailList) { ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getById(taskDetail.getShipmentContainerDetailId()); if (shipmentContainerDetail == null) { @@ -1342,20 +1346,28 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成出库任务, 出库任务没有找到出库详情" + taskDetail.getShipmentDetailId()); } taskDetail.setShipmentCode(shipmentDetail.getShipmentCode()); + int shipmentDetailId = shipmentDetail.getId(); + int status = QuantityConstant.SHIPMENT_HEADER_COMPLETED; if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) == 0) { - shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_COMPLETED); + status = QuantityConstant.SHIPMENT_HEADER_COMPLETED; } else if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) > 0) { - shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_OFF_SHELF); + status = QuantityConstant.SHIPMENT_HEADER_OFF_SHELF; } else if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) < 0) { throw new JeecgBootException("完成出库任务时, 出库单 单据数量不能小于配盘数量"); } shipmentDetailList.add(shipmentDetail); + shipmentDetail = new ShipmentDetail(); + shipmentDetail.setId(shipmentDetailId); + shipmentDetail.setStatus(status); + shipmentDetailList1.add(shipmentDetail); InventoryDetail inventoryDetail = inventoryDetailService.getById(taskDetail.getFromInventoryDetailId()); if (inventoryDetail == null) { throw new JeecgBootException("完成出库任务,出库任务没有找到库存详情" + taskDetail.getFromInventoryDetailId()); } - inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().subtract(taskDetail.getQty())); - inventoryDetail.setQty(inventoryDetail.getQty().subtract(taskDetail.getQty())); + BigDecimal taskQty = inventoryDetail.getTaskQty().subtract(taskDetail.getQty()); + BigDecimal qty = inventoryDetail.getQty().subtract(taskDetail.getQty()); + inventoryDetail.setTaskQty(taskQty); + inventoryDetail.setQty(qty); inventoryDetail.setLocationCode(toLocationCode); // 扣减后的库存不能小于0 if (inventoryDetail.getQty().compareTo(BigDecimal.ZERO) < 0) { @@ -1370,7 +1382,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成出库任务,删除库存详情失败"); } } else { - success = inventoryDetailService.updateById(inventoryDetail); + success = inventoryDetailService.updateQtyAndTaskQtyAndLocationCode(qty, taskQty, toLocationCode, inventoryDetail.getId()); if (!success) { throw new JeecgBootException("完成出库任务,更新库存详情失败"); } @@ -1409,7 +1421,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY); inventoryHeader.setLocationCode(toLocationCode); - success = inventoryHeaderService.updateById(inventoryHeader); + success = inventoryHeaderService.updateContainerStatusAndLocationCode(QuantityConstant.STATUS_CONTAINER_EMPTY, toLocationCode, inventoryHeader.getId()); if (!success) { throw new JeecgBootException("完成出库任务,更新库存头失败"); } @@ -1419,7 +1431,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成出库任务,保存库存详情失败"); } taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); - success = taskHeaderService.updateById(taskHeader); + success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); if (!success) { throw new JeecgBootException("完成出库任务,保存任务头失败"); } @@ -1440,9 +1452,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("完成分拣出库任务,更新源库位失败"); } - success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); - if (!success) { - throw new JeecgBootException("完成分拣出库任务,更新目标库位失败"); + if (StringUtils.isNotEmpty(fromLocationCode) && !fromLocationCode.equals(toLocationCode)) { + success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); + if (!success) { + throw new JeecgBootException("完成分拣出库任务,更新目标库位失败"); + } } success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, inventoryDetailList.size() == 0 ? QuantityConstant.STATUS_CONTAINER_FILL_EMPTY : QuantityConstant.STATUS_CONTAINER_FILL_SOME, warehouseCode); @@ -1455,12 +1469,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成出库任务,获取出库组盘头失败"); } shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_FINISHED); - success = shipmentContainerHeaderService.updateById(shipmentContainerHeader); + success = shipmentContainerHeaderService.updateStatusById(QuantityConstant.SHIPMENT_CONTAINER_FINISHED, shipmentContainerHeader.getId()); if (!success) { throw new JeecgBootException("完成出库任务,更新出库组盘头失败"); } if (inventoryDetailList.size() != 0) { - if (!combineInventoryDetail(taskHeader)) { + if (!taskHeaderService.combineInventoryDetail(taskHeader)) { throw new JeecgBootException("合并入库库存失败"); } } @@ -1487,6 +1501,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea LogRecordContext.putVariable("extraJsonString1", JSON.toJSONString(taskDetailList)); LogRecordContext.putVariable("shipmentDetailList", shipmentDetailList); LogRecordContext.putVariable("extraJsonString2", JSON.toJSONString(shipmentDetailList)); + log.info("完成出库任务,任务号:" + taskHeader.getId()); return Result.ok("完成出库任务"); } @@ -1854,6 +1869,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea String containerCode = taskHeader.getContainerCode(); String toPortCode = taskHeader.getToPortCode(); String zoneCode = taskHeader.getZoneCode(); + log.info("开始完成空托盘出库任务" + taskHeader.getId()); if (StringUtils.isEmpty(containerCode)) { return Result.error("完成空托盘出库任务时, 托盘号为空"); } @@ -1888,8 +1904,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("完成空托盘出库任务时, 更新库位的容器编码和状态失败"); } - taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); - success = taskHeaderService.updateById(taskHeader); + success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); + log.info("完成空托盘出库任务" + taskHeader.getId()); if (!success) { throw new JeecgBootException("完成空托盘出库任务时, 更新任务失败"); }