From 2eb3f91b6f19fb684030c7773b94b824827bab87 Mon Sep 17 00:00:00 2001
From: xumiao <1365304440@qq.com>
Date: Tue, 15 Feb 2022 10:59:19 +0800
Subject: [PATCH] 任务状态维护

---
 src/main/java/com/huaheng/api/acs/controller/AgvTaskController.java                     |  4 ++++
 src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java                           | 31 ++++++++++++++++++++++++++-----
 src/main/java/com/huaheng/pc/config/pointPosition/service/PointPositionServiceImpl.java |  2 +-
 3 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/huaheng/api/acs/controller/AgvTaskController.java b/src/main/java/com/huaheng/api/acs/controller/AgvTaskController.java
index 21f4c74..d6a394d 100644
--- a/src/main/java/com/huaheng/api/acs/controller/AgvTaskController.java
+++ b/src/main/java/com/huaheng/api/acs/controller/AgvTaskController.java
@@ -161,6 +161,10 @@ public class AgvTaskController extends BaseController {
         if(pointPosition!=null&&StringUtils.isNotEmpty(pointPosition.getContainCode())){
              return AjaxResult.error("目标点位有托盘,请选择其他点位");
         }
+        AgvTask one = acsService.getOne(new LambdaQueryWrapper<AgvTask>().eq(AgvTask::getToPort, agvTask.getToPort()).lt(AgvTask::getStatus, QuantityConstant.TASK_STATUS_COMPLETED));
+        if(one!=null){
+            return AjaxResult.error("目标点位存在未完成的任务");
+        }
         return toAjax(acsService.updateById(agvTask));
     }
 
diff --git a/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java b/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java
index 8b99498..2439e7e 100644
--- a/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java
+++ b/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java
@@ -139,7 +139,8 @@ public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements Ac
             LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper=Wrappers.lambdaQuery();
             agvTaskLambdaQueryWrapper.eq(AgvTask::getToPort,task.getToPort())
                     .eq(AgvTask::getWarehouseCode,task.getWarehouseCode())
-                    .ge(AgvTask::getStatus,QuantityConstant.TASK_STATUS_RELEASE);
+                    .ge(AgvTask::getStatus,QuantityConstant.TASK_STATUS_RELEASE)
+                    .lt(AgvTask::getStatus,QuantityConstant.TASK_STATUS_COMPLETED);
             List<AgvTask> list = list(agvTaskLambdaQueryWrapper);
             if(list!=null&&list.size()>0){
                return AjaxResult.error("目标点位存在任务,请更换目标点位");
@@ -218,7 +219,8 @@ public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements Ac
                 default:
                     break;
             }
-            cancelPositionAndContainerStatus(agvTask);
+            cancelPositionStatus(agvTask);
+            cancelContainerStatus(agvTask);
         }
         return AjaxResult.success("取消任务成功!");
     }
@@ -301,8 +303,22 @@ public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements Ac
         agvTask.setId(taskNo);
         agvTask.setCarNo(carNo);
         agvTask.setStatus(Integer.parseInt(status));
+        AgvTask task = getById(taskNo);
+        if(task==null)return AjaxResult.error("任务号"+taskNo+"不存在");
+        if(task.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED))return AjaxResult.error("任务"+taskNo+"已经完成");
+        if(agvTask.getStatus().equals(QuantityConstant.TASK_STATUS_RUNNING)){
+            pointPositionService.updateStatus(task.getFromPort(),QuantityConstant.STATUS_POSITION_EMPTY,task.getWarehouseCode());
+            pointPositionService.setContainerCode(task.getFromPort(),null,task.getWarehouseCode());
+            updateById(agvTask);
+        }
         if(agvTask.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)){
-              cancelPositionAndContainerStatus(agvTask);
+            pointPositionService.updateStatus(task.getFromPort(),QuantityConstant.STATUS_POSITION_EMPTY,task.getWarehouseCode());
+            pointPositionService.updateStatus(task.getToPort(),QuantityConstant.STATUS_POSITION_SOME,task.getWarehouseCode());
+            pointPositionService.setContainerCode(task.getFromPort(),null,task.getWarehouseCode());
+            pointPositionService.setContainerCode(task.getToPort(),task.getContainerCode(),task.getWarehouseCode());
+            containerService.updateLocationCodeAndStatus(task.getContainerCode(),task.getToPort(),QuantityConstant.STATUS_CONTAINER_EMPTY,task.getWarehouseCode());
+            updateById(agvTask);
+            cancelContainerStatus(task);
         }
         if(!updateById(agvTask)){ throw new ServiceException("更新失败"); };
         return AjaxResult.success();
@@ -441,8 +457,8 @@ public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements Ac
         }
     }
 
-    //更新点位状态及容器状态
-    private void cancelPositionAndContainerStatus(AgvTask agvTask) {
+    //更新点位状态
+    private void cancelPositionStatus(AgvTask agvTask) {
         if (agvTask.getFromPort() != null) {
             //更新点位状态
             PointPosition pointPosition = pointPositionService.getOne(new LambdaQueryWrapper<PointPosition>().eq(PointPosition::getPositionName, agvTask.getFromPort()));
@@ -462,6 +478,10 @@ public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements Ac
 
             }
         }
+
+    }
+    //更新容器状态
+    private void cancelContainerStatus(AgvTask agvTask){
         LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getContainerCode, agvTask.getContainerCode());
         InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper);
@@ -477,6 +497,7 @@ public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements Ac
         containerService.update(container, containerUpdateWrapper);
     }
 
+
     //检查点位是否存在
     private AjaxResult checkPointPositionExist(AgvTask agvTask){
         PointPosition sourcePosition = pointPositionService.getPositionByCode(agvTask.getFromPort(), "CS0001");
diff --git a/src/main/java/com/huaheng/pc/config/pointPosition/service/PointPositionServiceImpl.java b/src/main/java/com/huaheng/pc/config/pointPosition/service/PointPositionServiceImpl.java
index a3c72ab..e9d916e 100644
--- a/src/main/java/com/huaheng/pc/config/pointPosition/service/PointPositionServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/pointPosition/service/PointPositionServiceImpl.java
@@ -33,7 +33,7 @@ public class PointPositionServiceImpl extends ServiceImpl<PointPositionMapper, P
 
     @Override
     public void setContainerCode(String positionName, String containerCode, String warehouseCode) {
-        if(StringUtils.isNotEmpty(positionName)&&StringUtils.isNotEmpty(containerCode)){
+        if(StringUtils.isNotEmpty(positionName)){
             pointPositionMapper.setContainerCode(positionName,containerCode,warehouseCode);
         }
     }
--
libgit2 0.22.2