Junjie
14 小时以前 5ef79791cf93200c938b09dbd2461a7775391825
src/main/java/com/zy/core/network/ZyStationConnectDriver.java
@@ -29,6 +29,8 @@
    private static final ZyStationFakeSegConnect zyStationFakeSegConnect = new ZyStationFakeSegConnect();
    private static final ZyStationV4FakeSegConnect zyStationV4FakeSegConnect = new ZyStationV4FakeSegConnect();
    private static final long SEND_LOCK_WARN_MS = 3_000L;
    private static final long SEND_COST_WARN_MS = 5_000L;
    private volatile boolean connected = false;
    private volatile boolean connecting = false;
@@ -160,9 +162,12 @@
        if (!connected || connecting || connectApi == null) {
            return new CommandResponse(false, "设备未连接,命令下发失败");
        }
        long lockWaitStart = System.currentTimeMillis();
        int waitRounds = 0;
        while (true) {
            Object lock = redisUtil.get(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
            if(lock != null) {
                waitRounds++;
                try {
                    Thread.sleep(500);
                }catch (Exception e) {
@@ -173,9 +178,31 @@
                break;
            }
        }
        CommandResponse commandResponse = connectApi.sendCommand(deviceConfig.getDeviceNo(), command);
        redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
        return commandResponse;
        long lockWaitCost = System.currentTimeMillis() - lockWaitStart;
        if (lockWaitCost >= SEND_LOCK_WARN_MS) {
            log.warn("输送命令等待全局发送锁超时,deviceNo={}, taskNo={}, stationId={}, targetStaNo={}, waitMs={}, waitRounds={}",
                    deviceConfig == null ? null : deviceConfig.getDeviceNo(),
                    command == null ? null : command.getTaskNo(),
                    command == null ? null : command.getStationId(),
                    command == null ? null : command.getTargetStaNo(),
                    lockWaitCost,
                    waitRounds);
        }
        long sendStart = System.currentTimeMillis();
        try {
            return connectApi.sendCommand(deviceConfig.getDeviceNo(), command);
        } finally {
            redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
            long sendCostMs = System.currentTimeMillis() - sendStart;
            if (sendCostMs >= SEND_COST_WARN_MS) {
                log.warn("输送命令底层发送耗时过长,deviceNo={}, taskNo={}, stationId={}, targetStaNo={}, sendCostMs={}",
                        deviceConfig == null ? null : deviceConfig.getDeviceNo(),
                        command == null ? null : command.getTaskNo(),
                        command == null ? null : command.getStationId(),
                        command == null ? null : command.getTargetStaNo(),
                        sendCostMs);
            }
        }
    }
    public CommandResponse sendOriginCommand(String address, short[] data) {