From 39a729e911ca4e5fb1c629fabf71cc3cf02dade8 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期六, 12 十月 2024 16:37:19 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java | 165 ++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 116 insertions(+), 49 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 19e3251..56f00c1 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; @@ -62,6 +63,9 @@ private List<JSONObject> socketResults = new ArrayList<>(); + //鍘熷璁惧鏁版嵁 + private Object originDeviceData; + public NyShuttleThread(Device device, RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; @@ -75,18 +79,118 @@ //鐩戝惉娑堟伅骞跺瓨鍌� 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); + } 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); + } + //浠诲姟鍙� + 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 +271,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 +349,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 +388,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 +395,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; } } -- Gitblit v1.9.1