zy-acs-common/src/main/java/com/zy/acs/common/constant/RedisConstant.java
@@ -5,6 +5,10 @@ */ public class RedisConstant { public static final String AGV_PATH_UP_FLAG = "AGV_PATH_UP_FLAG"; public static final String AGV_PATH_DOWN_FLAG = "AGV_PATH_DOWN_FLAG"; public static final String AGV_CMD_DOWN_FLAG = "AGV_CMD_DOWN_FLAG"; public static final String AGV_CMD_UP_FLAG = "AGV_CMD_UP_FLAG"; zy-acs-flow/src/map/header/FakeFab.jsx
@@ -16,9 +16,21 @@ const handleToggle = () => { getFakeSign(null, (res) => { setFakeSign(!res, (updatedSign) => { setFakeRun(updatedSign); }); let pass = true; if (!res) { const pwd = prompt("please enter password:"); if (pwd === 'xltys1995') { pass = true; } else { pass = false; alert('Incorrect password'); } } if (pass) { setFakeSign(!res, (updatedSign) => { setFakeRun(updatedSign); }); } }); } zy-acs-gateway/src/main/java/com/zy/acs/gateway/handler/AgvPackageServerHandler.java
@@ -44,7 +44,7 @@ AGV_01_UP agv_01_up = (AGV_01_UP) pac.getBody().getMessageBody(); redis.setObject(RedisConstant.AGV_CMD_UP_FLAG redis.setObject(RedisConstant.AGV_PATH_UP_FLAG , pac.getHeader().getUniqueNo() + "_" + agv_01_up.getSerialNo() , agv_01_up); zy-acs-gateway/src/main/java/com/zy/acs/gateway/listen/MessageListener.java
@@ -2,18 +2,16 @@ import com.alibaba.fastjson.JSON; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.domain.AgvCommand; import com.zy.acs.common.domain.AgvProtocol; import com.zy.acs.gateway.config.SystemProperties; import com.zy.acs.gateway.domain.AgvPackage; import com.zy.acs.gateway.job.DispatcherPublisher; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.Cools; import com.zy.acs.gateway.config.SystemProperties; import com.zy.acs.gateway.job.DispatcherPublisher; import com.zy.acs.gateway.utils.ProtocolUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -39,19 +37,18 @@ private void start(){ thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { AgvProtocol protocol = redis.pop(RedisConstant.AGV_CMD_DOWN_FLAG); if (null != protocol){ AgvProtocol protocol = redis.pop(RedisConstant.AGV_PATH_DOWN_FLAG); if (null != protocol) { if (systemProperties.isPrintPacLog()) { log.info("监听器 >>> {}", JSON.toJSONString(protocol)); } if (!StringUtils.isEmpty(protocol.getAgvNo())){ if (!Cools.isEmpty(protocol.getAgvNo())) { publisher.publish(ProtocolUtils.installDownProtocol(protocol)); } } // 间隔 try { Thread.sleep(1000); Thread.sleep(500); } catch (Exception ignore) {} } }); zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvCmdService.java
@@ -12,6 +12,7 @@ import com.zy.acs.common.domain.protocol.IMessageBody; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.common.utils.RequestSupport; import com.zy.acs.manager.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,6 +30,8 @@ @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private ConfigService configService; public BaseResult<?> executeAgvActionCmd(AgvAction agvAction) { @@ -38,6 +41,11 @@ String serialNo = agvAction.getSerialNo(); AgvProtocol protocol = AgvProtocol.build(agvAction.getAgvNo()).setMessageBody(agvAction.beMesBody(serialNo)); // fake if (configService.getVal("fakeSign", Boolean.class)) { return BaseResult.ok(); } return this.requestProcess(serialNo, protocol , (RequestSupport<AGV_01_UP>) result -> result.getSerialNo().equals(serialNo)); @@ -74,7 +82,7 @@ @SuppressWarnings("all") private IMessageBody executeRequest(String serialNo, AgvProtocol protocol) throws TimeoutException { redis.push(RedisConstant.AGV_CMD_DOWN_FLAG, protocol); redis.push(RedisConstant.AGV_PATH_DOWN_FLAG, protocol); IMessageBody messageBody = null; @@ -82,8 +90,8 @@ // 获取响应 long startTime = System.currentTimeMillis(); while ((System.currentTimeMillis() - startTime) < RedisConstant.CMD_TIMEOUT_LIMIT) { if ((messageBody = redis.getObject(RedisConstant.AGV_CMD_UP_FLAG, redisKey)) != null){ redis.deleteObject(RedisConstant.AGV_CMD_UP_FLAG, redisKey); if ((messageBody = redis.getObject(RedisConstant.AGV_PATH_UP_FLAG, redisKey)) != null){ redis.deleteObject(RedisConstant.AGV_PATH_UP_FLAG, redisKey); return messageBody; } try{ zy-acs-manager/src/main/java/com/zy/acs/manager/fake/FakeController.java
@@ -8,6 +8,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.PostConstruct; /** * Created by vincent on 11/9/2024 */ @@ -18,6 +20,11 @@ @Autowired private ConfigService configService; @PostConstruct public void init() { configService.setVal("fakeSign", Boolean.FALSE); } @GetMapping("/sign/get") public R getSign() { return R.ok().add(configService.getVal("fakeSign", Boolean.class)); zy-acs-manager/src/main/java/com/zy/acs/manager/fake/FakeProcessor.java
@@ -1,10 +1,20 @@ package com.zy.acs.manager.fake; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.domain.AgvProtocol; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.manager.manager.entity.Agv; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.enums.StatusType; import com.zy.acs.manager.manager.service.AgvDetailService; import com.zy.acs.manager.manager.service.AgvService; import com.zy.acs.manager.system.service.ConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; /** * Created by vincent on 11/9/2024 @@ -12,23 +22,55 @@ @Component public class FakeProcessor { private final RedisSupport redis = RedisSupport.defaultRedisSupport; @Autowired private AgvService agvService; @Autowired private AgvDetailService agvDetailService; @Autowired private ConfigService configService; /** * 1.AgvDataService.dataProcess [ agvDetail: vol, code, agvAngle, agvStatus ] * 2.MainService.upDataSubscribe * 3.AgvCmdService.executeRequest * 3.AgvCmdService.executeRequest {@link com.zy.acs.manager.core.service.AgvCmdService#executeAgvActionCmd} * 4.AgvServiceImpl.judgeOnline * 5. */ @Scheduled(cron = "0/1 * * * * ? ") public void process() { Boolean fakeSign = configService.getVal("fakeSign", Boolean.class); if (null == fakeSign || !fakeSign) { return; } List<Agv> agvList = agvService.list(new LambdaQueryWrapper<Agv>().eq(Agv::getStatus, StatusType.ENABLE.val)); for (Agv agv : agvList) { AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); this.processOnline(agv); } } private void processOnline(Agv agv) { redis.setObject(RedisConstant.AGV_ONLINE_FLAG, agv.getUuid(), 1, 30); } private void responseTheRequest() { AgvProtocol protocol = redis.pop(RedisConstant.AGV_PATH_DOWN_FLAG); if (null != protocol) { try { Thread.sleep(100); } catch (InterruptedException ignore) {} // redis.setObject(RedisConstant.AGV_PATH_UP_FLAG // , protocol.getAgvNo() + "_" + agv_01_up.getSerialNo() // , agv_01_up); } } } zy-acs-manager/src/main/java/com/zy/acs/manager/fake/FakeService.java
@@ -13,13 +13,5 @@ @Autowired private ConfigService configService; public boolean fakeStartup() { return configService.setVal("fakeSign", Boolean.TRUE); } public boolean fakeShutdown() { return configService.setVal("fakeSign", Boolean.FALSE); } }