From 09fcc4ec56a1ce6c0fcb308348d8dd5e2c08d336 Mon Sep 17 00:00:00 2001 From: fyxc <fyxc@qq.com> Date: 星期四, 22 五月 2025 14:33:06 +0800 Subject: [PATCH] server commit files --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 236 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 178 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java index b70f987..1602251 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -57,6 +57,7 @@ private static final boolean DEBUG = false;//璋冭瘯妯″紡 + private List<JSONObject> socketReadResults = new ArrayList<>(); private List<JSONObject> socketResults = new ArrayList<>(); //鍘熷璁惧鏁版嵁 @@ -77,6 +78,7 @@ while (true) { try { listenSocketMessage(); + listenInit();//鐩戝惉鍒濆鍖栦簨浠� } catch (Exception e) { e.printStackTrace(); } @@ -106,7 +108,7 @@ continue; } - Object object = redisUtil.get(RedisKeyType.SHUTTLE.key + slave.getId()); + Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + slave.getId()); if (object == null) { continue; } @@ -120,6 +122,9 @@ // //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭 // shuttleAction.moveLoc(slave.getId()); + //婕旂ず妯″紡 + shuttleAction.demo(slave.getId()); + Thread.sleep(200); } catch (Exception e) { e.printStackTrace(); @@ -132,7 +137,6 @@ Thread otherThread = new Thread(() -> { while (true) { try { - listenInit();//鐩戝惉鍒濆鍖栦簨浠� saveLog();//淇濆瓨鏁版嵁 } catch (Exception e) { e.printStackTrace(); @@ -147,11 +151,14 @@ return; } - if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { + if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 1) { if (this.originDeviceData != null) { //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� //淇濆瓨鏁版嵁璁板綍 DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); + if (deviceDataLogService == null) { + return; + } DeviceDataLog deviceDataLog = new DeviceDataLog(); deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData)); deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol)); @@ -162,29 +169,8 @@ //鏇存柊閲囬泦鏃堕棿 shuttleProtocol.setDeviceDataLog(System.currentTimeMillis()); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); } - } - - //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴� - BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); - BasShuttle basShuttle = shuttleService.selectOne(new EntityWrapper<BasShuttle>() - .eq("shuttle_no", slave.getId())); - - if (basShuttle == null) { - basShuttle = new BasShuttle(); - //鍥涘悜绌挎杞﹀彿 - basShuttle.setShuttleNo(slave.getId()); - basShuttle.setStatus(1); - shuttleService.insert(basShuttle); - } - //浠诲姟鍙� - basShuttle.setWrkNo(shuttleProtocol.getTaskNo().intValue()); - //淇敼鏃堕棿 - basShuttle.setUpdateTime(new Date()); - //璁惧鐘舵�� - basShuttle.setDeviceStatus(JSON.toJSONString(shuttleProtocol)); - if (shuttleService.updateById(basShuttle)) { - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); } } @@ -209,7 +195,19 @@ } JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� - if (!socketResults.isEmpty() && socketResults.size() >= 5) { + + String msgType = result.getString("msgType"); + if ("responseMsg".equals(msgType)) { + JSONObject response = result.getJSONObject("response"); + JSONObject body = response.getJSONObject("body"); + if (body.containsKey("workingMode")) { + //read + socketReadResults.add(body); + return; + } + } + + if (!socketResults.isEmpty() && socketResults.size() >= 20) { socketResults.remove(0);//娓呯悊澶磋妭鐐� } socketResults.add(result);//娣诲姞鏁版嵁 @@ -218,7 +216,7 @@ } } - public JSONObject getRequestBody(String type) { + public JSONObject getRequestBody(String type, String taskId) { try { // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� JSONObject result = null; @@ -241,7 +239,14 @@ } if (!responseType.equals(type)) { - continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + continue;//鍝嶅簲绫诲瀷涓庤姹傜被鍨嬩笉涓�鑷达紝涓嶅湪璋冭瘯妯″紡涓� + } + + if (taskId != null) { + String responseTaskId = resultBody.get("taskId").toString(); + if (!responseTaskId.equals(taskId)) { + continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + } } result = socketResult; @@ -284,11 +289,24 @@ //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(slave.getId()); - JSONObject data = requestCommand(readStatusCommand); + requestCommandAsync(readStatusCommand);//璇锋眰鐘舵�� + + if (this.socketReadResults.isEmpty()) { + if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { + //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅绂荤嚎浜�1 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + } + return; + } + + JSONObject data = this.socketReadResults.get(0); + this.socketReadResults.remove(0); if (data == null) { if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅绂荤嚎浜�2 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); }else { @@ -315,13 +333,21 @@ shuttleProtocol.setRunDirection(data.getString("runDir") == null ? "none" : data.getString("runDir")); //鏄惁涓哄厖鐢电姸鎬� shuttleProtocol.setHasCharge(data.getInteger("chargState") == 1 ? true : false); + //杩愯閫熷害 + shuttleProtocol.setSpeed(data.getInteger("speed")); //*********璇诲彇鎵╁睍瀛楁********** InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend(); //绠″埗鐘舵�� extend.setSuspendState(data.getInteger("suspendState")); - //褰撳墠閫熷害 - extend.setSpeed(data.getInteger("speed")); + //鏈�楂樼數鑺數鍘�(mV) + extend.setMaxCellVoltage(data.getInteger("maxCellVoltage")); + //鏈�浣庣數鑺數鍘�(mV) + extend.setMinCellVoltage(data.getInteger("minCellVoltage")); + //鐢垫睜鐢靛帇 + extend.setVoltage(data.getInteger("voltage")); + //鍏呮斁鐢靛惊鐜鏁� + extend.setChargeCycleTimes(data.getInteger("chargeCycleTimes")); //鍓╀綑鐢甸噺 extend.setSurplusQuantity(data.getInteger("surplusQuantity")); //鎬荤數閲� @@ -333,13 +359,17 @@ ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue - if (shuttleProtocol.getDeviceStatus() == 1) { + if (shuttleProtocol.getDeviceStatus() == 0) { shuttleProtocol.setPakMk(true); } - if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 0) { + if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) { //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽 - shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + } + + if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) { + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); } this.originDeviceData = data; @@ -370,6 +400,9 @@ int removeIdx = -1; for (int i = 0; i < socketResults.size(); i++) { JSONObject socketResult = socketResults.get(i); + if (socketResult == null) { + continue; + } if (!socketResult.get("msgType").equals("requestMsg")) {//涓嶆槸璇锋眰鍐呭 continue; } @@ -380,6 +413,9 @@ String requestType = resultBody.getString("requestType"); Integer requestId = resultHeader.getInteger("requestId"); if (requestType.equals("init")) { + removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� + socketResults.remove(removeIdx); + Integer code = resultBody.getInteger("code"); //灏忚溅澶嶄綅璇锋眰 ShuttleCommand initCommand = getInitCommand(requestId, code); @@ -387,16 +423,10 @@ NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); JSONObject requestResult = requestCommand(httpCommand); - removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� - log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort())); OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort())); break; } - } - - if (removeIdx != -1) { - socketResults.remove(removeIdx); } } catch (Exception e) { e.printStackTrace(); @@ -462,13 +492,17 @@ } for (NyShuttleHttpCommand requestCommand : commandList) { - JSONObject result = requestCommand(requestCommand); - if (result == null) { - return response;//璇锋眰澶辫触 + while (true) { + JSONObject result = requestCommand(requestCommand); + if (result == null) { +// return response;//璇锋眰澶辫触 + continue;//璇锋眰澶辫触灏濊瘯閲嶆柊璇锋眰 + } + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + response.setMessage(JSON.toJSONString(result)); + response.setResult(true); + break; } - this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 - response.setMessage(JSON.toJSONString(result)); - response.setResult(true); } return response; } catch (Exception e) { @@ -576,6 +610,7 @@ && this.shuttleProtocol.getMode() == 1 && this.shuttleProtocol.getPakMk() && this.shuttleProtocol.getErrorCode().equals("0") + && this.shuttleProtocol.getTaskNo() == 0 && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id) @@ -707,13 +742,39 @@ } @Override + public boolean isFault() { + if (this.shuttleProtocol.getErrorCode() == null + || this.shuttleProtocol.getMode() == null + || this.shuttleProtocol.getExtend() == null + ) { + return false; + } + + if (this.shuttleProtocol.getMode() == 0) { + return true; + } + + if (!this.shuttleProtocol.getErrorCode().equals("0")) { + return true; + } + + InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); + + if (extend.getSuspendState() == 1) { + return true; + } + + return false; + } + + @Override public List<NavigateNode> getMoveAdvancePath() { ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); ArrayList<NavigateNode> path = new ArrayList<>(); if (shuttleProtocol.getTaskNo() != 0) { //瀛樺湪浠诲姟锛岃幏鍙栨寚浠� - Object object = redisUtil.get(RedisKeyType.SHUTTLE.key + shuttleProtocol.getTaskNo()); + Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo()); if (object != null) { ShuttleRedisCommand redisCommand = null; try { @@ -810,6 +871,19 @@ } @Override + public boolean enableDemo(boolean enable) { + shuttleProtocol.setDemo(enable); + return true; + } + + @Override + public boolean offerSystemMsg(String format, Object... arguments) { + String msg = News.replace(format, arguments); + shuttleProtocol.setSystemMsg(msg); + return true; + } + + @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(slave.getId(), taskNo); @@ -851,7 +925,7 @@ LocMastService locMastService = SpringUtils.getBean(LocMastService.class); LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() - .eq("code", distCodeNum)); + .eq("qr_code_value", distCodeNum)); if (locMast == null) { throw new CoolException("搴撲綅淇℃伅涓嶅瓨鍦�"); } @@ -946,8 +1020,7 @@ String mapStr = JSON.toJSONString(map); LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() - .eq("code", mapStr) - .eq("status", 1)); + .eq("qr_code_value", mapStr)); if (locMast == null) { throw new CoolException("鍦板潃鐮佷笉瀛樺湪"); } @@ -1062,17 +1135,20 @@ // System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); String requestType = null; + String taskId = null; try { requestType = httpCommand.getRequest().getBody().get("requestType").toString(); + taskId = httpCommand.getRequest().getBody().get("taskId").toString(); } catch (Exception e) { - return null; +// return null; + //taskId鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐� } // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� // 灏濊瘯10娆� JSONObject result = null; for (int i = 0; i < 10; i++) { - result = getRequestBody(requestType); + result = getRequestBody(requestType, taskId); if (result == null) { try { Thread.sleep(100); @@ -1084,6 +1160,22 @@ } } return result;//杩斿洖Body缁撴灉闆� + } + + private void requestCommandAsync(NyShuttleHttpCommand httpCommand) throws IOException { + if (this.socket == null) { + return; + } + + //鍘嬬缉鏁版嵁鍖� + JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); + data.remove("nodes"); + + // 鑾峰彇杈撳嚭娴� + OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream()); + writer.write(JSON.toJSONString(data) + "\r\n"); + writer.flush(); +// System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); } private JSONObject filterBodyData(JSONObject data) { @@ -1117,9 +1209,22 @@ // int x1 = Math.abs(y - 61) + 11; // //WCS绯荤粺X杞� => 鐗涚溂Y杞磋浆鎹㈠叕寮� // int y1 = x + 10; - int x1 = x + 10; - int y1 = y + 10; - return new int[]{y1, x1, z}; + +// int x1 = x + 10; +// int y1 = y + 10; + LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() + .eq("row1", x) + .eq("bay1", y) + .eq("lev1", z) + .eq("status", 1)); + if (locMast == null) { + return null; + } + + String qrCodeValue = locMast.getQrCodeValue(); + JSONObject data = JSON.parseObject(qrCodeValue); + return new int[]{data.getInteger("y"), data.getInteger("x"), z}; } @Data @@ -1132,9 +1237,24 @@ private Integer suspendState; /** - * 褰撳墠閫熷害锛屽崟浣峬m/s + * 鏈�楂樼數鑺數鍘�(mV) */ - private Integer speed; + private Integer maxCellVoltage; + + /** + * 鏈�浣庣數鑺數鍘�(mV)锛屼綆浜�2900mv闇�瑕佺珛鍗冲厖鐢� + */ + private Integer minCellVoltage; + + /** + * 鐢垫睜鐢靛帇锛坢V锛� + */ + private Integer voltage; + + /** + * 鍏呮斁鐢靛惊鐜鏁� + */ + private Integer chargeCycleTimes; /** * 鍓╀綑鐢甸噺/10(A) -- Gitblit v1.9.1