From 9d8ae2357274abd88be1338352bf855bcdfe66de Mon Sep 17 00:00:00 2001
From: youjie <272855983@qq.com>
Date: Fri, 16 Jun 2023 11:35:02 +0800
Subject: [PATCH] 完善生成任务 锁定容器和库位

---
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java |  4 +++-
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java    | 57 ++++++++++++++++++++++-----------------------------------
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java                       | 49 +++++++++++++++----------------------------------
 3 files changed, 40 insertions(+), 70 deletions(-)

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 54ce4b0..09b1e93 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
@@ -34,6 +34,7 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailServ
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
+import org.jeecg.modules.wms.task.taskHeader.entity.TaskLockEntity;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
 import org.jeecg.utils.StringUtils;
@@ -513,7 +514,8 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         if (!result.isSuccess()) {
             return result;
         }
-        String zoneCode = location.getZoneCode();
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setPreTaskNo(preTaskNo);
         taskHeader.setTaskType(taskType);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
index 225a78e..58db1cb 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
@@ -27,6 +27,7 @@ import org.jeecg.modules.wms.stocktaking.cycleCountHeader.entity.CycleCountHeade
 import org.jeecg.modules.wms.stocktaking.cycleCountHeader.service.impl.CycleCountHeaderServiceImpl;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
+import org.jeecg.modules.wms.task.taskHeader.entity.TaskLockEntity;
 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl;
 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl;
 import org.jeecg.utils.StringUtils;
@@ -198,6 +199,7 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap
      * @return
      */
     @Override
+    @Transactional
     public Result createCycleCoutTaskByDetailId(Integer cycleCoutDetailId, String toPort, String warehouseCode) {
         /* 任务主表中存在库位,在盘点明细中生成任务时,不同的容器生成不同的主任务 */
         // 校验有没有相同容器正在执行任务.
@@ -214,32 +216,27 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap
         if (childList.size() < 1) {
             return Result.error("盘点明细没有子单");
         }
-        Location location = locationService.getLocationByCode(cycleCountDetail.getLocationCode(), warehouseCode);
-        if (!location.getStatus().equals(QuantityConstant.STATUS_LOCATION_EMPTY)) {
-            return Result.error(cycleCountDetail.getLocationCode() + "库位不在空闲状态,请先完成其他任务,操作失败!");
-        }
-        if (StringUtils.isEmpty(location.getContainerCode())) {
-            return Result.error(cycleCountDetail.getLocationCode() + "库位中没有容器,操作失败!");
-        }
-
-        // 生成任务同时锁定库位
-        boolean success = locationService.updateStatus(location.getCode(), QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
-        if (!success) {
-            throw new JeecgBootException("更新库位状态失败");
+        String containerCode = cycleCountDetail.getContainerCode();
+        String fromLocationCode = cycleCountDetail.getLocationCode();
+        String toLocationCode = QuantityConstant.EMPTY_STRING;
+        String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
+        int taskLocationRule = Integer.parseInt(value);
+        if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
+            toLocationCode = fromLocationCode;
         }
-        // 生成任务同时锁定容器
-        success = containerServiceImpl.updateStatus(location.getContainerCode(), QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
-        if (!success) {
-            throw new JeecgBootException("更新容器状态失败");
+        Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CYCLECOUNT, containerCode, fromLocationCode, toLocationCode,
+            warehouseCode);
+        if (!result.isSuccess()) {
+            return result;
         }
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
         // 每个明细单生成一张主任务,子单就是任务明细。
         TaskHeader task = new TaskHeader();
         task.setWarehouseCode(warehouseCode);
         task.setCompanyCode(cycleCountDetail.getCompanyCode());
         task.setShipmentContainerHeaderId(cycleCountDetail.getId());// 明细ID写入主任务
-        if (location != null) {
-            task.setZoneCode(location.getZoneCode());
-        }
+        task.setZoneCode(zoneCode);
         task.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_CYCLECOUNT);
         task.setTaskType(QuantityConstant.TASK_TYPE_CYCLECOUNT);
         task.setContainerCode(cycleCountDetail.getContainerCode());
@@ -250,15 +247,9 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap
         task.setShipmentContainerHeaderId(cycleCoutDetailId);
         task.setSequence(1);
         task.setShipmentOrder(System.currentTimeMillis());
-
-        String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
-        int taskLocationRule = Integer.parseInt(value);
-        if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
-            task.setToLocationCode(cycleCountDetail.getLocationCode());
-        }
+        task.setToLocationCode(toLocationCode);
         if (taskHeaderService.save(task)) {
             // 锁定库位状态
-            locationService.updateStatus(location.getContainerCode(), QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
             cycleCountDetail.setTaskHeaderId(task.getId()); // 盘点明细修改状态task数据源
         } else {
             throw new JeecgBootException("盘点任务主表生成失败!");
@@ -308,15 +299,11 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap
         cycleCountHeader.setStatusCyc(QuantityConstant.CYCLECOUNT_STATUS_BUILDTASK);
         cycleCountHeaderService.updateById(cycleCountHeader);
 
-//		LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
-//		lambdaQueryWrapper.eq(InventoryDetail::getContainerCode,task.getContainerCode());
-//		List<InventoryDetail> inventoryDetails = inventoryDetailService.list(lambdaQueryWrapper);
-
-        Result<Integer> result = new Result<Integer>();
-        result.setCode(200);
-        result.setMessage("盘点任务生成成功");
-        result.setResult(cycleCountHeader.getId());
-        return result;
+//        Result<Integer> result = new Result<Integer>();
+//        result.setCode(200);
+//        result.setMessage("盘点任务生成成功");
+//        result.setResult(cycleCountHeader.getId());
+        return Result.OK("盘点任务生成成功", cycleCountHeader.getId());
     }
 
     @Override
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 01bd362..0253246 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
@@ -259,12 +259,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!result.isSuccess()) {
             return result;
         }
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
         // 4. 判断源库位旁边有托盘但是没有任务,那么不允许移库
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setWarehouseCode(warehouseCode);
         taskHeader.setTaskType(QuantityConstant.TASK_TYPE_TRANSFER);
         taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_TRANSFER_POSITION);
-        taskHeader.setZoneCode(fromLocation.getZoneCode());
+        taskHeader.setZoneCode(zoneCode);
         taskHeader.setContainerCode(fromLocation.getContainerCode());
         taskHeader.setFromLocationCode(fromLocationCode);
         taskHeader.setToLocationCode(toLocationCode);
@@ -303,23 +305,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
             toLocationCode = fromLocationCode;
         }
-        if (StringUtils.isEmpty(fromLocationCode)) {
-            return Result.error("创建出库查看任务时,容器不在库位上");
-        }
-        Location location = locationService.getLocationByCode(fromLocationCode, warehouseCode);
-        if (location == null) {
-            return Result.error("创建出库查看任务时,没有找到库位:" + fromLocationCode);
-        }
-        String zoneCode = location.getZoneCode();
-        Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode);
-        if (port == null) {
-            return Result.error("创建出库查看任务时,没有找到出库口:" + toPortCode);
-        }
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CHECK_OUT, containerCode, fromLocationCode, toLocationCode,
             warehouseCode);
         if (!result.isSuccess()) {
             return result;
         }
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
+        Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode);
+        if (port == null) {
+            throw new JeecgBootException("创建出库查看任务时,没有找到出库口:" + toPortCode);
+        }
         boolean success = false;
         LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
         inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getWarehouseCode, warehouseCode)
@@ -477,16 +473,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("创建空托盘组入库任务时,仓库编码为空");
         }
         log.info("开始创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode);
-        String zoneCode = null;
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT, containerCode,
             QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             return result;
         }
-        if (StringUtils.isNotEmpty(toLocationCode)) {
-            Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);
-            zoneCode = toLocation.getZoneCode();
-        }
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setWarehouseCode(warehouseCode);
         taskHeader.setContainerCode(containerCode);
@@ -521,16 +514,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!result.isSuccess()) {
             return result;
         }
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
         Container container = containerService.getContainerByCode(containerCode, warehouseCode);
         String fromLocationCode = container.getLocationCode();
-        Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
-        if (fromLocation == null) {
-            return Result.error("创建空托盘组出库任务时, 没有找到库位:" + fromLocationCode);
-        }
-        String zoneCode = fromLocation.getZoneCode();
-        if (StringUtils.isEmpty(zoneCode)) {
-            return Result.error("创建空托盘组出库任务时, 库区为空");
-        }
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setWarehouseCode(warehouseCode);
         taskHeader.setZoneCode(zoneCode);
@@ -960,14 +947,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!result.isSuccess()) {
             return result;
         }
-        Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
-        if (fromLocation == null) {
-            return Result.error("创建空托盘出库时, 起始库位为空");
-        }
-        String zoneCode = fromLocation.getZoneCode();
-        if (StringUtils.isEmpty(zoneCode)) {
-            return Result.error("创建空托盘出库时, 起始库位的库区为空");
-        }
+        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        String zoneCode = taskLockEntity.getZoneCode();
         Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode);
         if (port == null) {
             return Result.error("创建空托盘出库时, 没有找到出库口" + toPortCode);
--
libgit2 0.22.2