From d9505e143cdf452c3a33752b380ee1b3a410601d Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期四, 16 十月 2025 14:48:52 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/controller/ConsoleController.java | 313 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 210 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java index 1607c01..1c61d5e 100644 --- a/src/main/java/com/zy/asrs/controller/ConsoleController.java +++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java @@ -1,32 +1,57 @@ package com.zy.asrs.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.R; -import com.zy.core.properties.SystemProperties; -import com.zy.asrs.domain.enums.SiteStatusType; import com.zy.asrs.domain.param.SystemSwitchParam; -import com.zy.asrs.domain.vo.*; -import com.zy.common.CodeRes; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import com.zy.asrs.entity.BasMap; +import com.zy.asrs.entity.DeviceConfig; +import com.zy.asrs.entity.LocMast; +import com.zy.asrs.service.BasMapService; +import com.zy.asrs.service.DeviceConfigService; +import com.zy.asrs.service.LocMastService; +import com.zy.asrs.utils.Utils; +import com.zy.common.model.MapNode; +import com.zy.common.model.NavigateNode; +import com.zy.common.model.enums.NavigationMapType; +import com.zy.common.utils.NavigateMapData; +import com.zy.common.utils.RedisUtil; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.RedisKeyType; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.command.ShuttleRedisCommand; +import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.properties.SystemProperties; +import com.zy.core.thread.ShuttleThread; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.concurrent.atomic.AtomicInteger; +import javax.servlet.http.HttpServletRequest; +import java.util.*; /** * 涓绘帶鍥炬帴鍙� * Created by vincent on 2020-06-01 */ +@Slf4j @RestController @RequestMapping("/console") public class ConsoleController { - public static AtomicInteger integer = new AtomicInteger(); + @Autowired + private BasMapService basMapService; + @Autowired + private RedisUtil redisUtil; + @Autowired + private NavigateMapData navigateMapData; + @Autowired + private LocMastService locMastService; + @Autowired + private DeviceConfigService deviceConfigService; @PostMapping("/system/running/status") @ManagerAuth(memo = "绯荤粺杩愯鐘舵��") @@ -48,115 +73,197 @@ return R.error("鍙d护閿欒"); } } - Thread.sleep(2000L); + Thread.sleep(200L); SystemProperties.WCS_RUNNING_STATUS.set(param.getOperatorType()==1?Boolean.TRUE:Boolean.FALSE); return R.ok().add(Cools.add("status", SystemProperties.WCS_RUNNING_STATUS.get())); } - @PostMapping("/site/detail") - @ManagerAuth(memo = "杈撻�佽澶囨暟鎹鎯�") - public R siteDetail(@RequestParam String siteId){ - if (Cools.isEmpty(siteId)){ - return R.parse(CodeRes.EMPTY); + /** + * 鑾峰彇鍦板浘妤煎眰鏁版嵁 + */ + @GetMapping("/map/lev/list") + @ManagerAuth + public R getMapLevList() { + List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true)); + ArrayList<Integer> levList = new ArrayList<>(); + for (BasMap basMap : basMaps) { + levList.add(basMap.getLev()); } - SiteDetailVo vo = new SiteDetailVo(); - vo.setDevpNo(siteId); - vo.setWorkNo("9998"); - vo.setWorkStatus("2.璁惧涓婄Щ鍔�"); - vo.setAutoing("Y"); - vo.setLoading("Y"); - vo.setCanining("N"); - vo.setCanouting("Y"); - vo.setIoType("1.鍏ュ簱"); - vo.setSourceStaNo("2303"); - vo.setStaNo("2410"); - vo.setSourceStock(""); - vo.setStock(""); - return R.ok().add(vo); + return R.ok().add(levList); } - @PostMapping("/crn/detail") - @ManagerAuth(memo = "鍫嗗灈鏈鸿澶囨暟鎹鎯�") - public R crnDetail(@RequestParam String crnNo){ - if (Cools.isEmpty(crnNo)){ - return R.parse(CodeRes.EMPTY); + /** + * 鑾峰彇鍦板浘鏁版嵁 + */ + @GetMapping("/map/{lev}/auth") + @ManagerAuth + public R getMapFromRedis(@PathVariable Integer lev) { + Object data = redisUtil.get(RedisKeyType.MAP.key + lev); + if (data == null) { + return R.error(); } - CrnDetailVo vo = new CrnDetailVo(); - vo.setCrnNo(crnNo); - vo.setWorkNo("3387"); - vo.setSourceStaNo("2303"); - vo.setStaNo("2410"); - vo.setWorkStatus("3.鍚婅溅鍏ュ簱涓�"); - vo.setIoType("1.鍏ュ簱"); - vo.setSourceStock(""); - vo.setStock("05050040"); - vo.setCrnStatus("鍙栬揣涓�"); - vo.setError("0"); - return R.ok().add(vo); + + List<List<MapNode>> arrayList = (List<List<MapNode>>) data; + List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.getMapTypes(NavigationMapType.NONE, NavigationMapType.PATH_LOCK), arrayList, lev, null, null);//杩囨护鍦板浘鏁版嵁 + return R.ok().add(lists); } - @Deprecated - @PostMapping("/site/update") - @ManagerAuth(memo = "杈撻�佽澶囨暟鎹慨鏀�") - public R updateSite(){ + /** + * 鑾峰彇搴撲綅鍦板浘鏁版嵁 + */ + @GetMapping("/locMap/{lev}/auth") + @ManagerAuth + public R getLocMap(@PathVariable Integer lev) { + Object data = redisUtil.get(RedisKeyType.MAP.key + lev); + if (data == null) { + return R.error(); + } + + List<List<MapNode>> arrayList = (List<List<MapNode>>) data; + List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.getMapTypes(NavigationMapType.NONE), arrayList, lev, null, null);//杩囨护鍦板浘鏁版嵁 + + //鑾峰彇褰撳墠妤煎眰搴撲綅鏁版嵁 + List<LocMast> locMasts = locMastService.selectLocByLev(lev); + for (LocMast locMast : locMasts) { + Integer row = locMast.getRow1(); + Integer bay = locMast.getBay1(); + + List<MapNode> list = lists.get(row); + MapNode mapNode = list.get(bay); + + mapNode.setLocSts(locMast.getLocSts()); + mapNode.setLocNo(locMast.getLocNo()); + + //鏇存柊list + list.set(bay, mapNode); + lists.set(row, list); + } + return R.ok().add(lists); + } + + /** + * 閲嶇疆redis涓殑鍦板浘锛屽皢鍗犵敤鐨勫簱浣嶅叏閮ㄨВ闄� + */ + @GetMapping("/map/resetMap/auth") + @ManagerAuth + public R resetMapToRedis() { + List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true)); + for (BasMap basMap : basMaps) { + Integer lev = basMap.getLev(); + redisUtil.del(RedisKeyType.MAP.key + lev); + } return R.ok(); } - @Deprecated - @PostMapping("/crn/update") - @ManagerAuth(memo = "鍫嗗灈鏈烘暟鎹慨鏀�") - public R updateCrn(){ + /** + * 閲嶇疆redis涓殑鍦板浘锛屽皢鍗犵敤鐨勫簱浣嶅叏閮ㄨВ闄� + */ + @GetMapping("/map/resetMap/{lev}") + @ManagerAuth(memo = "閲嶇疆Redis鍦板浘") + public R resetMapToRedisByLev(@PathVariable Integer lev, HttpServletRequest request) { + redisUtil.del(RedisKeyType.MAP.key + lev); return R.ok(); } - /****************************************************************/ - /************************** 瀹炴椂鏁版嵁 ******************************/ - /****************************************************************/ + /** + * 鑾峰彇棰勮璺緞 + */ + @GetMapping("/getMoveAdvancePath/{lev}/auth") + @ManagerAuth + public R getMoveAdvancePath(@PathVariable Integer lev) { + HashMap<String, Object> pathMap = new HashMap<>(); - @PostMapping("/latest/data/site") - @ManagerAuth(memo = "绔欑偣瀹炴椂鏁版嵁") - public R siteLatestData(){ - List<SiteLatestDataVo> vos = new ArrayList<>(); - for (int i = 1; i<=32; i++){ - SiteLatestDataVo vo = new SiteLatestDataVo(); - vo.setSiteId(String.valueOf(i)); - vo.setWorkNo("9998"); - SiteStatusType type = SiteStatusType.values()[new Random().nextInt(SiteStatusType.values().length)]; - vo.setSiteStatus(type); - vos.add(vo); - } - return R.ok().add(vos); - } - - @PostMapping("/latest/data/crn") - @ManagerAuth(memo = "鍫嗗灈鏈哄疄鏃舵暟鎹�") - public R crnLatestData(){ - List<CrnLatestDataVo> vos = new ArrayList<>(); - for (int i =1; i<=2; i++){ - CrnLatestDataVo vo = new CrnLatestDataVo(); - vo.setCrnId(i); - vo.setOffset((double) new Random().nextInt(560)); - vos.add(vo); - } - return R.ok().add(vos); - } - - @PostMapping("/latest/data/barcode") - @ManagerAuth(memo = "鏉$爜鎵弿浠疄鏃舵暟鎹�") - public R barcodeLatestData(){ - integer.getAndIncrement(); - List<BarcodeDataVo> list = new ArrayList<>(); - for (int i=1;i<=1;i++){ - BarcodeDataVo vo = new BarcodeDataVo(); - vo.setBarcodeId("1"); - if (integer.get()%5 != 0) { - vo.setCodeValue("0"); - } else { - vo.setCodeValue(String.valueOf(new Random().nextInt(5000))); + List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Shuttle))); + for (DeviceConfig deviceConfig : shuttleList) { + // 鑾峰彇鍥涘悜绌挎杞︿俊鎭� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, deviceConfig.getDeviceNo()); + if (shuttleThread == null) { + continue; } - list.add(vo); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null || shuttleProtocol.getShuttleNo()==null) { + continue; + } + + if (shuttleProtocol.getCurrentLocNo() == null) { + continue; + } + + if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != lev) { + continue; + } + + if (shuttleProtocol.getTaskNo() == 0) { + + } + + //瀛樺湪浠诲姟锛岃幏鍙栨寚浠� + Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo()); + if (object != null) { + ShuttleRedisCommand redisCommand = JSON.parseObject(object.toString(), ShuttleRedisCommand.class); + List<NavigateNode> nodes = redisCommand.getAssignCommand().getNodes();//绌挎杞﹂璁¤矾寰� + + for (NavigateNode node : nodes) { + String locNo = Utils.getLocNo(node.getX(), node.getY(), node.getZ()); + + List<Integer> shuttleNoList = new ArrayList<>(); + Object tmp = pathMap.get(locNo); + if(tmp != null) { + shuttleNoList = (List<Integer>) tmp; + } + + if (!shuttleNoList.contains(shuttleProtocol.getShuttleNo())) { + shuttleNoList.add(shuttleProtocol.getShuttleNo()); + } + + pathMap.put(locNo, shuttleNoList); + } + } } - return R.ok().add(list); + + List<HashMap<String, Object>> pathList = new ArrayList<>(); + for (Map.Entry<String, Object> entry : pathMap.entrySet()) { + String locNo = entry.getKey(); + Object shuttleNoList = entry.getValue(); + + HashMap<String, Object> map = new HashMap<>(); + map.put("locNo", locNo); + map.put("x", Utils.getRow(locNo)); + map.put("y", Utils.getBay(locNo)); + map.put("z", Utils.getLev(locNo)); + map.put("shuttleNoList", shuttleNoList); + pathList.add(map); + } + return R.ok().add(pathList); + } + + /** + * 鑾峰彇閿佸畾璺緞 + */ + @GetMapping("/getLockPath/{lev}/auth") + @ManagerAuth + public R getLockPath(@PathVariable Integer lev) { + HashMap<String, Object> lockMap = new HashMap<>(); + Object o = redisUtil.get(RedisKeyType.LOCK_MAP_NODES.key + lev); + if (o != null) { + lockMap = (HashMap<String, Object>) o; + } + + List<HashMap<String, Object>> lockList = new ArrayList<>(); + for (Map.Entry<String, Object> entry : lockMap.entrySet()) { + String locNo = entry.getKey(); + Object shuttleNo = entry.getValue(); + + HashMap<String, Object> map = new HashMap<>(); + map.put("locNo", locNo); + map.put("x", Utils.getRow(locNo)); + map.put("y", Utils.getBay(locNo)); + map.put("z", Utils.getLev(locNo)); + map.put("shuttleNo", shuttleNo); + lockList.add(map); + } + return R.ok().add(lockList); } } -- Gitblit v1.9.1