From 0f69561e397093b5165c4aac58530721d5c62178 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期一, 25 十一月 2024 11:03:16 +0800 Subject: [PATCH] #led --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java | 271 ++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 191 insertions(+), 80 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java index a8a9ae9..ee3af41 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java @@ -9,6 +9,7 @@ import com.zy.asrs.framework.common.SpringUtils; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.common.ExecuteSupport; +import com.zy.asrs.wcs.core.action.ShuttleAction; import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam; import com.zy.asrs.wcs.core.entity.BasShuttle; import com.zy.asrs.wcs.core.entity.Loc; @@ -30,6 +31,7 @@ import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.entity.DeviceDataLog; +import com.zy.asrs.wcs.rcs.model.CommandResponse; import com.zy.asrs.wcs.rcs.model.command.NyShuttleHttpCommand; import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType; import com.zy.asrs.wcs.rcs.model.enums.SlaveType; @@ -62,6 +64,9 @@ private List<JSONObject> socketResults = new ArrayList<>(); + //鍘熷璁惧鏁版嵁 + private Object originDeviceData; + public NyShuttleThread(Device device, RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; @@ -75,18 +80,125 @@ //鐩戝惉娑堟伅骞跺瓨鍌� Thread innerThread = new Thread(() -> { while (true) { - listenSocketMessage(); + try { + listenSocketMessage(); + } catch (Exception e) { + e.printStackTrace(); + } } }); innerThread.start(); - while (true) { - try { - read(); - Thread.sleep(500); - } catch (Exception e) { - log.error("ShuttleThread Fail", e); + //璁惧璇诲彇 + Thread readThread = new Thread(() -> { + while (true) { + try { + read(); + Thread.sleep(50); + } catch (Exception e) { + log.error("ShuttleThread Fail", e); + } } + }); + readThread.start(); + + //璁惧鎵ц + Thread executeThread = new Thread(() -> { + while (true) { + try { + ShuttleAction shuttleAction = SpringUtils.getBean(ShuttleAction.class); + if (shuttleAction == null) { + continue; + } + + Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_FLAG + device.getDeviceNo()); + if (object == null) { + continue; + } + + Integer taskNo = Integer.valueOf(String.valueOf(object)); + if (taskNo != 0) { + //瀛樺湪浠诲姟闇�瑕佹墽琛� + boolean result = shuttleAction.executeWork(device, taskNo); + } + + //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭 + shuttleAction.moveLoc(device); + + Thread.sleep(200); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + executeThread.start(); + + //鍏朵粬浠诲姟 + Thread otherThread = new Thread(() -> { + while (true) { + try { + listenInit();//鐩戝惉鍒濆鍖栦簨浠� + saveLog();//淇濆瓨鏁版嵁 + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + otherThread.start(); + } + + private void saveLog() { + if (shuttleProtocol == null) { + return; + } + + if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { + if (this.originDeviceData != null) { + //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� + //淇濆瓨鏁版嵁璁板綍 + DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); + DeviceDataLog deviceDataLog = new DeviceDataLog(); + deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData)); + deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); + deviceDataLog.setType(String.valueOf(SlaveType.Shuttle)); + deviceDataLog.setDeviceNo(String.valueOf(shuttleProtocol.getShuttleNo())); + deviceDataLog.setCreateTime(new Date()); + deviceDataLog.setHostId(device.getHostId()); + deviceDataLogService.save(deviceDataLog); + + //鏇存柊閲囬泦鏃堕棿 + shuttleProtocol.setDeviceDataLog(System.currentTimeMillis()); + } + } + + //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴� + BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); + BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>() + .eq(BasShuttle::getShuttleNo, device.getDeviceNo()) + .eq(BasShuttle::getHostId, device.getHostId())); + + if (basShuttle == null) { + basShuttle = new BasShuttle(); + //鍥涘悜绌挎杞﹀彿 + basShuttle.setShuttleNo(Integer.valueOf(device.getDeviceNo())); + basShuttle.setStatus(1); + basShuttle.setDeleted(0); + basShuttle.setHostId(device.getHostId()); + basShuttle.setDeviceId(device.getId().intValue()); + shuttleService.save(basShuttle); + }else { + Integer shuttleId = basShuttle.getId(); + basShuttle = new BasShuttle(); + basShuttle.setId(shuttleId); + } + //浠诲姟鍙� + basShuttle.setTaskNo(shuttleProtocol.getTaskNo().intValue()); + //淇敼鏃堕棿 + basShuttle.setUpdateTime(new Date()); + //璁惧鐘舵�� + basShuttle.setProtocol(JSON.toJSONString(shuttleProtocol)); + if (shuttleService.updateById(basShuttle)) { + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo())); } } @@ -167,7 +279,6 @@ this.connect(); } readStatus(); - listenInit();//鐩戝惉鍒濆鍖栦簨浠� } catch (Exception e) { e.printStackTrace(); OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戣鍙栧洓鍚戠┛姊溅鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort())); @@ -246,47 +357,9 @@ shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); } - if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { - //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� - //淇濆瓨鏁版嵁璁板綍 - DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); - DeviceDataLog deviceDataLog = new DeviceDataLog(); - deviceDataLog.setOriginData(JSON.toJSONString(data)); - deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); - deviceDataLog.setType(String.valueOf(SlaveType.Shuttle)); - deviceDataLog.setDeviceNo(String.valueOf(shuttleProtocol.getShuttleNo())); - deviceDataLog.setCreateTime(new Date()); - deviceDataLog.setHostId(device.getHostId()); - deviceDataLogService.save(deviceDataLog); + this.originDeviceData = data; - //鏇存柊閲囬泦鏃堕棿 - shuttleProtocol.setDeviceDataLog(System.currentTimeMillis()); - } - - //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴� - BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); - BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>() - .eq(BasShuttle::getShuttleNo, device.getDeviceNo()) - .eq(BasShuttle::getHostId, device.getHostId())); - if (basShuttle == null) { - basShuttle = new BasShuttle(); - //鍥涘悜绌挎杞﹀彿 - basShuttle.setShuttleNo(Integer.valueOf(device.getDeviceNo())); - basShuttle.setStatus(1); - basShuttle.setDeleted(0); - basShuttle.setHostId(device.getHostId()); - basShuttle.setDeviceId(device.getId().intValue()); - shuttleService.save(basShuttle); - } - //浠诲姟鍙� - basShuttle.setTaskNo(shuttleProtocol.getTaskNo().intValue()); - //淇敼鏃堕棿 - basShuttle.setUpdateTime(new Date()); - //璁惧鐘舵�� - basShuttle.setProtocol(JSON.toJSONString(shuttleProtocol)); - if (shuttleService.updateById(basShuttle)) { - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo())); - } + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo())); } } catch (Exception e) { e.printStackTrace(); @@ -323,7 +396,6 @@ Integer requestId = resultHeader.getInteger("requestId"); if (requestType.equals("init")) { Integer code = resultBody.getInteger("code"); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", code, device.getId(), device.getIp(), device.getPort())); //灏忚溅澶嶄綅璇锋眰 ShuttleCommand initCommand = getInitCommand(requestId, code); //鍙戝嚭璇锋眰 @@ -331,6 +403,9 @@ JSONObject requestResult = requestCommand(httpCommand); removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� + + log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", device.getId(), code, device.getIp(), device.getPort())); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", device.getId(), code, device.getIp(), device.getPort())); break; } } @@ -362,12 +437,14 @@ } @Override - public boolean movePath(List<NavigateNode> nodes, Integer taskNo) { - return true; + public CommandResponse movePath(List<NavigateNode> nodes, Integer taskNo) { + CommandResponse response = new CommandResponse(true); + return response; } @Override - public boolean move(ShuttleCommand command) { + public CommandResponse move(ShuttleCommand command) { + CommandResponse response = new CommandResponse(false); try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); @@ -406,70 +483,86 @@ for (NyShuttleHttpCommand requestCommand : commandList) { JSONObject result = requestCommand(requestCommand); -// if (result == null) { -// return false;//璇锋眰澶辫触 -// } + if (result == null) { + return response;//璇锋眰澶辫触 + } this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + response.setMessage(JSON.toJSONString(result)); + response.setResult(true); } - return true; - } catch (IOException e) { - return false; + return response; + } catch (Exception e) { + e.printStackTrace(); + response.setMessage(e.getMessage()); + return response; } } @Override - public boolean lift(ShuttleCommand command) { + public CommandResponse lift(ShuttleCommand command) { + CommandResponse response = new CommandResponse(false); try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject result = requestCommand(httpCommand); if (result == null) { - return false;//璇锋眰澶辫触 + return response;//璇锋眰澶辫触 } this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 - return true; - } catch (IOException e) { - return false; + response.setMessage(JSON.toJSONString(result)); + response.setResult(true); + return response; + } catch (Exception e) { + e.printStackTrace(); + return response; } } @Override - public boolean charge(ShuttleCommand command) { + public CommandResponse charge(ShuttleCommand command) { + CommandResponse response = new CommandResponse(false); try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject result = requestCommand(httpCommand); if (result == null) { - return false;//璇锋眰澶辫触 + return response;//璇锋眰澶辫触 } this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 - return true; - } catch (IOException e) { - return false; + response.setMessage(JSON.toJSONString(result)); + response.setResult(true); + return response; + } catch (Exception e) { + e.printStackTrace(); + return response; } } @Override - public boolean reset(ShuttleCommand command) { + public CommandResponse reset(ShuttleCommand command) { setSyncTaskNo(0); setProtocolStatus(ShuttleProtocolStatusType.IDLE); enableMoveLoc(null, false); - return true; + return new CommandResponse(true, JSON.toJSONString(command)); } @Override - public boolean updateLocation(ShuttleCommand command) { + public CommandResponse updateLocation(ShuttleCommand command) { + CommandResponse response = new CommandResponse(false); try { //鍙戝嚭璇锋眰 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject result = requestCommand(httpCommand); if (result == null) { - return false;//璇锋眰澶辫触 + return response;//璇锋眰澶辫触 } this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 - return true; - } catch (IOException e) { - return false; + response.setMessage(JSON.toJSONString(result)); + response.setResult(true); + return response; + } catch (Exception e) { + e.printStackTrace(); + return response; } } @@ -595,7 +688,7 @@ return false; } - if (this.shuttleProtocol.getDeviceStatus() == 1 && this.shuttleProtocol.getHasCharge()) { + if (this.shuttleProtocol.getDeviceStatus() == 0 && this.shuttleProtocol.getHasCharge()) { //杩愯涓� && 鍏呯數涓� return true; } @@ -720,6 +813,15 @@ } @Override + public boolean requestWaiting() { + if (this.shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.IDLE)) { + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + return true; + } + return false; + } + + @Override public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) { NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); NyShuttleHttpCommand httpStandard = getHttpStandard(Integer.parseInt(device.getDeviceNo()), taskNo); @@ -727,9 +829,10 @@ ArrayList<HashMap<String, Object>> path = new ArrayList<>(); + Integer taskId = getTaskId(); HashMap<String, Object> body = new HashMap<>(); body.put("requestType", "move");//绉诲姩鍛戒护 - body.put("taskId", getTaskId());//TaskID闇�瑕侀殢鏈� + body.put("taskId", taskId);//TaskID闇�瑕侀殢鏈� // body.put("start", navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(startCodeNum, device.getHostId())));//璧风偣 // body.put("target", navigateNodeToNyPointNode(NavigatePositionConvert.codeToNode(distCodeNum, device.getHostId())));//缁堢偣 body.put("path", path); @@ -772,6 +875,7 @@ command.setBody(JSON.toJSONString(httpStandard)); command.setMode(ShuttleCommandModeType.MOVE.id); command.setTargetLocNo(loc.getLocNo()); + command.setTaskNo(taskId); return command; } @@ -780,9 +884,10 @@ NyShuttleHttpCommand httpStandard = getHttpStandard(Integer.parseInt(device.getDeviceNo()), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); + Integer taskId = getTaskId();//TaskID闇�瑕侀殢鏈� HashMap<String, Object> body = new HashMap<>(); body.put("requestType", lift ? "liftUp" : "liftDown");//椤跺崌鎴栦笅闄嶅懡浠� - body.put("taskId", getTaskId());//TaskID闇�瑕侀殢鏈� + body.put("taskId", taskId); request.setBody(body); httpStandard.setRequest(request); @@ -791,6 +896,7 @@ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id); + command.setTaskNo(taskId); return command; } @@ -799,9 +905,10 @@ NyShuttleHttpCommand httpStandard = getHttpStandard(Integer.parseInt(device.getDeviceNo()), taskNo); NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); + Integer taskId = getTaskId();//TaskID闇�瑕侀殢鏈� HashMap<String, Object> body = new HashMap<>(); body.put("requestType", charge ? "charge" : "stopCharge");//鍏呯數鎴栧仠姝㈠厖鐢� - body.put("taskId", getTaskId());//TaskID闇�瑕侀殢鏈� + body.put("taskId", taskId); request.setBody(body); httpStandard.setRequest(request); @@ -810,6 +917,7 @@ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id); + command.setTaskNo(taskId); return command; } @@ -829,6 +937,7 @@ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id); + command.setTaskNo(taskNo); return command; } @@ -883,6 +992,7 @@ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); command.setBody(JSON.toJSONString(httpStandard)); command.setMode(ShuttleCommandModeType.RESET.id); + command.setTaskNo(taskNo); return command; } @@ -983,8 +1093,9 @@ } catch (Exception e) { e.printStackTrace(); } + }else { + break; } - break; } return result;//杩斿洖Body缁撴灉闆� } -- Gitblit v1.9.1