From dc3f9cc91759823ce59486f19b138be4b296a0f1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 28 四月 2026 09:43:28 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/controller/OpenController.java |  188 ++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 163 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 3325ec3..e421c08 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -1,15 +1,18 @@
 package com.zy.asrs.controller;
 
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.core.common.Cools;
 import com.core.common.R;
 import com.core.exception.CoolException;
+import com.zy.asrs.domain.Result.CancelTaskBatchResult;
 import com.zy.asrs.domain.param.*;
+import com.core.annotations.ManagerAuth;
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.DeviceConfigService;
 import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.RuntimeConfigService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.common.annotations.OpenApiLog;
 import com.zy.common.service.CommonService;
@@ -20,6 +23,7 @@
 import com.zy.core.model.protocol.DualCrnProtocol;
 import com.zy.core.model.protocol.RgvProtocol;
 import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.network.fake.FakeConfigKeys;
 import com.zy.core.thread.CrnThread;
 import com.zy.core.thread.DualCrnThread;
 import com.zy.core.thread.RgvThread;
@@ -34,9 +38,11 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 @Slf4j
 @RestController
@@ -59,6 +65,8 @@
     private ConfigService configService;
     @Autowired
     private DeviceConfigService deviceConfigService;
+    @Autowired
+    private RuntimeConfigService runtimeConfigService;
 
     // 绉诲簱浠诲姟
     @PostMapping("/createLocMoveTask")
@@ -110,19 +118,11 @@
         if (param == null) {
             return R.error("鍙傛暟涓嶈兘涓虹┖");
         }
-
-        List<CreateOutTaskParam> taskList = param.getTaskList();
-        if (taskList == null || taskList.size() == 0) {
-            return R.error("浠诲姟鍒楄〃涓嶈兘涓虹┖");
+        boolean result = commonService.createOutTaskBatch(param);
+        if (result) {
+            return R.ok();
         }
-
-        for (CreateOutTaskParam createOutTaskParam : taskList) {
-            if (createOutTaskParam == null) {
-                throw new CoolException("浠诲姟鍙傛暟涓嶈兘涓虹┖");
-            }
-            commonService.createOutTask(createOutTaskParam);
-        }
-        return R.ok();
+        return R.error("鐢熸垚鎵归噺鍑哄簱浠诲姟澶辫触");
     }
 
     @PostMapping("/completeTask")
@@ -151,13 +151,59 @@
         return R.error("浠诲姟鍙栨秷澶辫触");
     }
 
+    @PostMapping("/manualRollbackTask")
+    @OpenApiLog(memo = "浠诲姟浜哄伐鍥炴粴")
+    public R manualRollbackTask(@RequestBody ManualRollbackTaskParam param) {
+        if (param == null) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        boolean rollback = commonService.manualRollbackTask(param);
+        if (rollback) {
+            return R.ok();
+        }
+        return R.error("浠诲姟浜哄伐鍥炴粴澶辫触");
+    }
+
+    @PostMapping("/cancelTaskBatch")
+    @OpenApiLog(memo = "浠诲姟鎵归噺鍙栨秷")
+    public R cancelTaskBatch(@RequestBody CancelTaskBatchParam param) {
+        if (param == null) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        CancelTaskBatchResult result = commonService.cancelTaskBatch(param);
+        return R.ok().add(result);
+    }
+
+    @PostMapping("/updateTaskPriorityAndBatchSeq")
+    @OpenApiLog(memo = "淇敼浠诲姟浼樺厛绾у拰鎵规搴忓彿")
+    public R updateTaskPriorityAndBatchSeq(@RequestBody UpdateTaskPriorityAndBatchSeqParam param) {
+        if (param == null) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        boolean result = commonService.updateTaskPriorityAndBatchSeq(param);
+        if (result) {
+            return R.ok();
+        }
+        return R.error("淇敼浠诲姟浼樺厛绾у拰鎵规搴忓彿澶辫触");
+    }
+
+    @PostMapping("/cancelOutTaskBatchInfo")
+    @OpenApiLog(memo = "鍙栨秷鍑哄簱浠诲姟鎵规鍜屾壒娆″簭鍙�")
+    public R cancelOutTaskBatchInfo(@RequestBody CancelTaskBatchParam param) {
+        if (param == null) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        CancelTaskBatchResult result = commonService.cancelOutTaskBatchInfo(param);
+        return R.ok().add(result);
+    }
+
     @PostMapping("/deviceStatus")
     // @OpenApiLog(memo = "鑾峰彇璁惧鐘舵��")
     public R getDeviceStatus() {
         HashMap<String, Object> map = new HashMap<>();
         // 鑾峰彇鍫嗗灈鏈烘暟鎹�
         ArrayList<CrnProtocol> crnProtocols = new ArrayList<>();
-        List<DeviceConfig> crnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> crnList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Crn)));
         for (DeviceConfig device : crnList) {
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, device.getDeviceNo());
@@ -174,7 +220,7 @@
 
         // 鑾峰彇RGV鏁版嵁
         ArrayList<RgvProtocol> rgvProtocols = new ArrayList<>();
-        List<DeviceConfig> rgvList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> rgvList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Rgv)));
         for (DeviceConfig device : rgvList) {
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, device.getDeviceNo());
@@ -191,7 +237,7 @@
 
         // 鑾峰彇鍙屽伐浣嶅爢鍨涙満鏁版嵁
         ArrayList<DualCrnProtocol> dualCrnProtocols = new ArrayList<>();
-        List<DeviceConfig> dualCrnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> dualCrnList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.DualCrn)));
         for (DeviceConfig device : dualCrnList) {
             DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, device.getDeviceNo());
@@ -208,7 +254,7 @@
 
         // 鑾峰彇杈撻�佺珯鐐规暟鎹�
         ArrayList<StationProtocol> stationProtocols = new ArrayList<>();
-        List<DeviceConfig> stationList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> stationList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Devp)));
         for (DeviceConfig device : stationList) {
             StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, device.getDeviceNo());
@@ -234,7 +280,7 @@
     public R getStationStatus(@RequestBody GetStationStatusParam param) {
         // 鑾峰彇杈撻�佺珯鐐规暟鎹�
         List<StationProtocol> stationProtocols = new ArrayList<>();
-        List<DeviceConfig> devpList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> devpList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Devp))
         );
         for (DeviceConfig device : devpList) {
@@ -284,7 +330,7 @@
     @OpenApiLog(memo = "鑾峰彇鍏ㄩ儴搴撲綅淇℃伅")
     public R getAllLocInformation(@RequestBody GetAllLocInformationParam param) {
         List<HashMap<String, Object>> list = new ArrayList<>();
-        EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
+        QueryWrapper<LocMast> wrapper = new QueryWrapper<>();
 
         if (!Cools.isEmpty(param.getRow())) {
             wrapper.eq("row1", param.getRow());
@@ -294,7 +340,7 @@
             wrapper.eq("lev1", param.getLev());
         }
 
-        List<LocMast> locMasts = locMastService.selectList(wrapper);
+        List<LocMast> locMasts = locMastService.list(wrapper);
         if (locMasts.isEmpty()) {
             return R.ok().add(list);
         }
@@ -316,7 +362,7 @@
     @PostMapping("/queryTask")
     @OpenApiLog(memo = "鏌ヨ浠诲姟")
     public R queryTask(@RequestBody QueryTaskParam param) {
-        EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
+        QueryWrapper<WrkMast> wrapper = new QueryWrapper<>();
         if (param.getTaskNo() != null) {
             wrapper.eq("wms_wrk_no", param.getTaskNo());
         }
@@ -328,7 +374,7 @@
             }
             wrapper.eq("io_type", ioType.id);
         }
-        List<WrkMast> wrkMasts = wrkMastService.selectList(wrapper);
+        List<WrkMast> wrkMasts = wrkMastService.list(wrapper);
         return R.ok().add(wrkMasts);
     }
 
@@ -345,13 +391,22 @@
         return R.ok().add(map);
     }
 
+    @PostMapping("/runtimeConfig/update")
+    @OpenApiLog(memo = "淇敼杩愯鍙傛暟")
+    public R updateRuntimeConfig(@RequestBody RuntimeConfigUpdateParam param) {
+        if (param == null || param.getConfigMap() == null || param.getConfigMap().isEmpty()) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        return R.ok().add(runtimeConfigService.updateRuntimeConfig(param.getConfigMap()));
+    }
+
     @GetMapping("/getFakeSystemRunStatus")
     public R getFakeSystemRunStatus() {
         HashMap<String, Object> map = new HashMap<>();
         if (mainProcessPlugin.contains("Fake")) {
             map.put("running", false);
             map.put("isFake", true);
-            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "enableFake"));
+            Config config = configService.getOne(new QueryWrapper<Config>().eq("code", "enableFake"));
             if (config != null) {
                 if (config.getValue().equals("Y")) {
                     map.put("running", true);
@@ -366,7 +421,7 @@
     @PostMapping("/startFakeSystem")
     @OpenApiLog(memo = "鍚姩浠跨湡妯℃嫙")
     public R startFakeSystem() {
-        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "enableFake"));
+        Config config = configService.getOne(new QueryWrapper<Config>().eq("code", "enableFake"));
         if (config != null) {
             config.setValue("Y");
             configService.updateById(config);
@@ -377,7 +432,7 @@
     @PostMapping("/stopFakeSystem")
     @OpenApiLog(memo = "鍋滄浠跨湡妯℃嫙")
     public R stopFakeSystem() {
-        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "enableFake"));
+        Config config = configService.getOne(new QueryWrapper<Config>().eq("code", "enableFake"));
         if (config != null) {
             config.setValue("N");
             configService.updateById(config);
@@ -385,4 +440,87 @@
         return R.ok();
     }
 
+    @GetMapping("/fakeConfig/auth")
+    @ManagerAuth
+    public R getFakeConfig() {
+        LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+        for (String key : FakeConfigKeys.ALL_KEYS) {
+            String defaultValue = FakeConfigKeys.DEFAULTS.get(key);
+            map.put(key, configService.getConfigValue(key, defaultValue));
+        }
+        return R.ok().add(map);
+    }
+
+    @PostMapping("/fakeConfig/save/auth")
+    @ManagerAuth
+    public R saveFakeConfig(@RequestBody FakeConfigSaveParam param) {
+        if (param == null || param.getConfigMap() == null || param.getConfigMap().isEmpty()) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        Set<String> allowKeys = FakeConfigKeys.ALL_KEYS;
+        Map<String, String> normalizedMap = new LinkedHashMap<>();
+        for (Map.Entry<String, Object> entry : param.getConfigMap().entrySet()) {
+            String key = entry.getKey();
+            if (!allowKeys.contains(key)) {
+                return R.error("涓嶆敮鎸佺殑閰嶇疆椤�: " + key);
+            }
+            normalizedMap.put(key, normalizeFakeConfigValue(key, entry.getValue()));
+        }
+        validateFakeCrnLaserConfig(normalizedMap);
+        for (Map.Entry<String, String> entry : normalizedMap.entrySet()) {
+            if (!configService.saveConfigValue(entry.getKey(), entry.getValue())) {
+                return R.error("淇濆瓨澶辫触: " + entry.getKey());
+            }
+        }
+        configService.refreshSystemConfigCache();
+        return getFakeConfig();
+    }
+
+    private void validateFakeCrnLaserConfig(Map<String, String> normalizedMap) {
+        long bayMin = resolveFakeLongValue(normalizedMap, FakeConfigKeys.FAKE_CRN_BAY_MIN);
+        long bayMax = resolveFakeLongValue(normalizedMap, FakeConfigKeys.FAKE_CRN_BAY_MAX);
+        long laserMin = resolveFakeLongValue(normalizedMap, FakeConfigKeys.FAKE_CRN_LASER_MIN);
+        long laserMax = resolveFakeLongValue(normalizedMap, FakeConfigKeys.FAKE_CRN_LASER_MAX);
+        if (bayMax <= bayMin) {
+            throw new CoolException("鍫嗗灈鏈� bay 鏈�澶у�煎繀椤诲ぇ浜庢渶灏忓��");
+        }
+        if (laserMax <= laserMin) {
+            throw new CoolException("鍫嗗灈鏈洪暛灏勬渶澶у�煎繀椤诲ぇ浜庢渶灏忓��");
+        }
+    }
+
+    private long resolveFakeLongValue(Map<String, String> normalizedMap, String key) {
+        String value = normalizedMap.get(key);
+        if (value == null) {
+            value = configService.getConfigValue(key, FakeConfigKeys.DEFAULTS.get(key));
+        }
+        return Long.parseLong(value);
+    }
+
+    private String normalizeFakeConfigValue(String key, Object rawValue) {
+        if (rawValue == null) {
+            throw new CoolException(key + " 鍙傛暟涓嶈兘涓虹┖");
+        }
+        String value = String.valueOf(rawValue).trim();
+        if (FakeConfigKeys.BOOLEAN_KEYS.contains(key)) {
+            if (!"Y".equalsIgnoreCase(value) && !"N".equalsIgnoreCase(value)) {
+                throw new CoolException(key + " 浠呮敮鎸� Y/N");
+            }
+            return value.toUpperCase();
+        }
+        if (FakeConfigKeys.LONG_KEYS.contains(key)) {
+            long parsed;
+            try {
+                parsed = Long.parseLong(value);
+            } catch (Exception e) {
+                throw new CoolException(key + " 蹇呴』涓洪潪璐熸暣鏁�");
+            }
+            if (parsed < 0) {
+                throw new CoolException(key + " 蹇呴』涓洪潪璐熸暣鏁�");
+            }
+            return String.valueOf(parsed);
+        }
+        throw new CoolException("涓嶆敮鎸佺殑閰嶇疆椤�: " + key);
+    }
+
 }

--
Gitblit v1.9.1