From 8ef2bb5e46d84594e6ed632c07ea0b47a1bf6c4d Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 11 十二月 2024 16:15:17 +0800
Subject: [PATCH] #path similarity

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskController.java |  232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 227 insertions(+), 5 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskController.java
index dec5eff..2a51fe1 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskController.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskController.java
@@ -1,25 +1,48 @@
-package com.zy.asrs.wcs.system.controller;
+package com.zy.asrs.wcs.core.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.wcs.common.annotation.OperationLog;
 import com.zy.asrs.wcs.common.domain.BaseParam;
 import com.zy.asrs.wcs.common.domain.KeyValVo;
 import com.zy.asrs.wcs.common.domain.PageParam;
+import com.zy.asrs.wcs.core.domain.param.ShuttleCommandParam;
+import com.zy.asrs.wcs.core.domain.param.ShuttleCommandRollbackParam;
+import com.zy.asrs.wcs.core.domain.param.ShuttleCommandUpdateCompleteParam;
+import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.core.entity.MotionLog;
 import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.wcs.core.entity.TaskLog;
+import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.command.ShuttleAssignCommand;
+import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
+import com.zy.asrs.wcs.core.model.command.ShuttleRedisCommand;
+import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
+import com.zy.asrs.wcs.core.model.enums.TaskStsType;
+import com.zy.asrs.wcs.core.service.MotionLogService;
+import com.zy.asrs.wcs.core.service.MotionService;
+import com.zy.asrs.wcs.core.service.TaskLogService;
 import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.core.utils.RedisUtil;
+import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
+import com.zy.asrs.wcs.system.controller.BaseController;
 import com.zy.asrs.wcs.utils.ExcelUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RestController
 @RequestMapping("/api")
@@ -27,6 +50,16 @@
 
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private TaskLogService taskLogService;
+    @Autowired
+    private MotionService motionService;
+    @Autowired
+    private MotionLogService motionLogService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ObjectMapper objectMapper;
 
     @PreAuthorize("hasAuthority('core:task:list')")
     @PostMapping("/task/page")
@@ -98,4 +131,193 @@
         ExcelUtil.build(ExcelUtil.create(taskService.list(), Task.class), response);
     }
 
+    @PreAuthorize("hasAuthority('core:task:complete')")
+    @OperationLog("鎵嬪姩瀹屾垚浠诲姟")
+    @PostMapping("/task/complete/{id}")
+    @Transactional
+    public synchronized R complete(@PathVariable Long id) {
+        Task task = taskService.getById(id);
+        if (task == null) {
+            return R.error("浠诲姟涓嶅瓨鍦�");
+        }
+        switch (TaskStsType.query(task.getTaskSts())) {
+            case NEW_INBOUND:
+            case ANALYZE_INBOUND:
+            case EXECUTE_INBOUND:
+                task.setTaskSts(TaskStsType.COMPLETE_INBOUND.sts);
+                break;
+            case NEW_OUTBOUND:
+            case ANALYZE_OUTBOUND:
+            case EXECUTE_OUTBOUND:
+                task.setTaskSts(TaskStsType.COMPLETE_OUTBOUND.sts);
+                break;
+            case NEW_CHARGE:
+            case ANALYZE_CHARGE:
+            case EXECUTE_CHARGE:
+                task.setTaskSts(TaskStsType.CHARGE_WORKING.sts);
+                break;
+            case NEW_MOVE:
+            case ANALYZE_MOVE:
+            case EXECUTE_MOVE:
+                task.setTaskSts(TaskStsType.COMPLETE_MOVE.sts);
+                break;
+            case NEW_MANUAL:
+            case ANALYZE_MANUAL:
+            case EXECUTE_MANUAL:
+                task.setTaskSts(TaskStsType.COMPLETE_MANUAL.sts);
+                break;
+            default:
+                return R.error("褰撳墠鐘舵�佷笉鍙瀹屾垚");
+        }
+        task.setUpdateTime(new Date());
+        task.setUpdateBy(getLoginUserId());
+        if (!taskService.updateById(task)) {
+            return R.error("瀹屾垚澶辫触");
+        }
+        return R.ok("浠诲姟瀹屾垚");
+    }
+
+    @PreAuthorize("hasAuthority('core:task:cancel')")
+    @OperationLog("鎵嬪姩鍙栨秷浠诲姟")
+    @PostMapping("/task/cancel/{id}")
+    @Transactional
+    public synchronized R cancel(@PathVariable Long id) {
+        Task task = taskService.getById(id);
+        if (task == null) {
+            return R.error("浠诲姟涓嶅瓨鍦�");
+        }
+
+        //鍒涘缓鍘嗗彶妗�
+        TaskLog taskLog = new TaskLog();
+        taskLog.sync(task);
+        taskLog.setUpdateTime(new Date());
+        taskLog.setUpdateBy(getLoginUserId());
+        taskLog.setHostId(null);
+        taskLogService.save(taskLog);
+
+        List<Motion> motions = motionService.list(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId()));
+        for (Motion motion : motions) {
+            //鍒涘缓鍔ㄤ綔鍘嗗彶妗�
+            MotionLog motionLog = new MotionLog();
+            motionLog.sync(motion);
+            motionLog.setUpdateTime(new Date());
+            motionLog.setHostId(null);
+            motionLogService.save(motionLog);
+        }
+
+        //鍒犻櫎婧愪换鍔�
+        taskService.removeById(task.getId());
+        //鍒犻櫎鍔ㄤ綔
+        motionService.remove(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId()));
+
+        return R.ok("鍙栨秷鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('core:task:list')")
+    @PostMapping("/task/shuttleCommand")
+    public R shuttleCommand(@RequestBody ShuttleCommandParam param) {
+        Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + param.getTaskNo());
+        if (object == null) {
+            return R.ok();
+        }
+
+        ShuttleRedisCommand redisCommand = null;
+        try {
+            redisCommand = objectMapper.readValue(String.valueOf(object), ShuttleRedisCommand.class);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+
+        if (redisCommand == null) {
+            return R.ok();
+        }
+
+        HashMap<String, Object> hashMap = new HashMap<>();
+        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+        List<ShuttleCommand> commands = assignCommand.getCommands();
+        Integer commandStep = redisCommand.getCommandStep();//褰撳墠姝ュ簭
+
+        ArrayList<JSONObject> list = new ArrayList<>();
+        int index = 0;
+        for (ShuttleCommand command : commands) {
+            JSONObject data = JSON.parseObject(JSON.toJSONString(command));
+            data.put("index", index++);
+            data.put("commandStep", commandStep);
+
+            ShuttleCommandModeType type = ShuttleCommandModeType.get(command.getMode());
+            if (type == null) {
+                data.put("mode$", command.getMode());
+            }else {
+                data.put("mode$", type.desc);
+            }
+
+            if (command.getNodes() != null) {
+                List<NavigateNode> nodes = command.getNodes();
+                NavigateNode start = nodes.get(0);
+                NavigateNode target = nodes.get(nodes.size() - 1);
+                data.put("start", Utils.getLocNo(start.getX(), start.getY(), start.getZ()));
+                data.put("target", Utils.getLocNo(target.getX(), target.getY(), target.getZ()));
+            }
+
+            list.add(data);
+        }
+
+
+        hashMap.put("total", commands.size());
+        hashMap.put("records", list);
+        hashMap.put("commandStep", commandStep);
+        return R.ok().add(hashMap);
+    }
+
+    @PreAuthorize("hasAuthority('core:task:list')")
+    @PostMapping("/task/shuttleCommand/completeSwitch")
+    public R shuttleCommandCompleteSwitch(@RequestBody ShuttleCommandUpdateCompleteParam param) {
+        Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + param.getTaskNo());
+        if (object == null) {
+            return R.error("鎸囦护涓嶅瓨鍦�");
+        }
+
+        ShuttleRedisCommand redisCommand = null;
+        try {
+            redisCommand = objectMapper.readValue(String.valueOf(object), ShuttleRedisCommand.class);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+
+        if (redisCommand == null) {
+            return R.error("鎸囦护涓嶅瓨鍦�");
+        }
+
+        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+        List<ShuttleCommand> commands = assignCommand.getCommands();
+        ShuttleCommand command = commands.get(param.getIndex());
+        command.setComplete(param.getComplete());
+
+        redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + param.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect));
+        return R.ok();
+    }
+
+    @PreAuthorize("hasAuthority('core:task:list')")
+    @PostMapping("/task/shuttleCommand/commandRollback")
+    public R shuttleCommandRollback(@RequestBody ShuttleCommandRollbackParam param) {
+        Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + param.getTaskNo());
+        if (object == null) {
+            return R.error("鎸囦护涓嶅瓨鍦�");
+        }
+
+        ShuttleRedisCommand redisCommand = null;
+        try {
+            redisCommand = objectMapper.readValue(String.valueOf(object), ShuttleRedisCommand.class);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+
+        if (redisCommand == null) {
+            return R.error("鎸囦护涓嶅瓨鍦�");
+        }
+
+        redisCommand.setCommandStep(param.getIndex());
+        redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + param.getTaskNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect));
+        return R.ok();
+    }
 }

--
Gitblit v1.9.1