2021与蓝度共同重构项目,服务端
Van333
2022-12-05 694d691291f6ee89061fdbb9fd451ecb5519b69b
在线状态由map改成redis,定时保持emqx链接
已修改9个文件
已添加1个文件
已重命名1个文件
已复制1个文件
327 ■■■■■ 文件已修改
sandu-common/src/main/resources/logback-spring.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/callback/StatusMqttCallBack.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/client/KeepEMQXClient.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/client/MqttClientCreate.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/controller/localMQTTTestController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-xm_lj.yml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-xm_local.yml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/resources/logback-spring.xml
@@ -74,13 +74,13 @@
        </root>
    </springProfile>
    <springProfile name="xm">
    <springProfile name="xm_local">
        <root level="info" >
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
    <!-- ç”Ÿäº§çŽ¯å¢ƒ. æ—¥å¿—级别为WARN且写日志文件-->
    <springProfile name="prod,docker">
    <springProfile name="prod,docker,xm_lj">
        <root level="warn">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="ASYNC"/>
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/callback/StatusMqttCallBack.java
@@ -10,6 +10,7 @@
import com.sandu.ximon.admin.manager.iot.amqp.processor.c3ChargingProcessor;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
import com.sandu.ximon.admin.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.springframework.stereotype.Component;
@@ -34,7 +35,8 @@
    private static final String localMqttConnectStatusDisconnected = "disconnected";
    public static final Map<String, Integer> localMqttConnectStatusMap = new ConcurrentHashMap<>();
    public static final String localMqttConnectStatus = "localMqttConnectStatus.";
    protected final static ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor(
@@ -56,7 +58,7 @@
    protected void handleReceiveMessage(String topic, String message) {
        EXECUTOR_SERVICE.submit(() -> processMessage(topic,message));
        log.info("接收到消息---StatusMqttCallBack:topic={},message={}", topic, message);
//        log.info("接收到消息---StatusMqttCallBack:topic={},message={}", topic, message);
    }
@@ -69,17 +71,15 @@
            String mac = topic.split("/")[4];
            String status = topic.split("/")[5];
            System.out.println("----------------------");
            System.out.println(mac);
            System.out.println(status);
            if (status.equals(localMqttConnectStatusConnected)){
                // è®¾å¤‡æ•°æ®ä¸ŠæŠ¥
                localMqttConnectStatusMap.put(mac,1);
                boolean set = RedisUtils.getBean().set(localMqttConnectStatus + mac, 1);
                log.error("设备上线------,mac:{},上线,{}",mac,set);
            }
            else if (status.equals(localMqttConnectStatusDisconnected)){
                localMqttConnectStatusMap.put(mac,0);
                boolean set = RedisUtils.getBean().set(localMqttConnectStatus+mac,0);
                log.error("设备下线------,mac:{},下线.{}",mac,set);
            }
        } catch (Exception e) {
            e.printStackTrace();
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/client/KeepEMQXClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.sandu.ximon.admin.localMQTT.client;
import com.sandu.ximon.admin.localMQTT.config.MqttConfig;
import com.sandu.ximon.admin.localMQTT.model.MqttClientVO;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author van
 * @version 1.0
 * msg:
 * @date 2022/11/29 13:46
 */
@Slf4j
@EnableScheduling
@Component
public class KeepEMQXClient {
    @Autowired
    private MqttConfig mqttConfig;
    @Resource
    private MqttClientManager mqttClientManager;
    @Scheduled(cron = "*/30 * * * * * ")
    public void keepClient()  {
        List<MqttClientVO> mqttClientList = mqttConfig.getClientList();
        for (MqttClientVO mqttClientVO : mqttClientList) {
            //创建客户端,客户端ID:demo,回调类跟客户端ID一致
            MqttClient mqttClient = MqttClientManager.getInstance().getMqttClientById(mqttClientVO.getClientId());
            if (null == mqttClient) {
                log.error("Not exist mqttClient where it's clientId is {}", mqttClientVO.getClientId());
                mqttClientManager.createMqttClient(mqttClientVO.getClientId(), mqttClientVO.getSubscribeTopic(), mqttClientVO.getUserName(), mqttClientVO.getPassword());
                System.out.println(mqttClient.getClientId() + "重新创建完成");
            }
            else {
                try {
                    mqttClient.publish("v1/devices/keepAlive", new MqttMessage() );
                } catch (MqttException e) {
                    log.error("mqttClient.getClientId()..发送消息失败...........");
                    mqttClientManager.createMqttClient(mqttClientVO.getClientId(), mqttClientVO.getSubscribeTopic(), mqttClientVO.getUserName(), mqttClientVO.getPassword());
                    log.error("创建."+mqttClient.getClientId()+".成功...........");
                }
            }
        }}
}
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/client/MqttClientCreate.java
@@ -34,18 +34,19 @@
     */
    public static final Map<String, MqttClient> MQTT_CLIENT_MAP = new ConcurrentHashMap<>();
    /**
     * åˆ›å»ºMQTT客户端
     */
    @PostConstruct
    public void createMqttClient() {
        System.out.println("createMqttClient");
        List<MqttClientVO> mqttClientList = mqttConfig.getClientList();
        for (MqttClientVO mqttClient : mqttClientList) {
            //创建客户端,客户端ID:demo,回调类跟客户端ID一致
            System.out.println(mqttClient.getClientId());
            mqttClientManager.createMqttClient(mqttClient.getClientId(), mqttClient.getSubscribeTopic(), mqttClient.getUserName(), mqttClient.getPassword());
            System.out.println(mqttClient.getClientId()+"创建完成");
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/controller/localMQTTTestController.java
@@ -1,12 +1,13 @@
package com.sandu.ximon.admin.localMQTT.controller;
import com.sandu.ximon.admin.localMQTT.util.MqttClientUtil;
import com.sandu.ximon.admin.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatus;
import static java.lang.Thread.sleep;
/**
@@ -24,7 +25,7 @@
    @RequestMapping("/test")
    public String localMQTT() throws InterruptedException {
        for (int i = 0; i < 100; i++) {
        for (int i = 0; i < 1000; i++) {
            /*
            * å¼€ç¯100
@@ -40,29 +41,48 @@
            * 5分钟
            * FEA501000CFE210004FFFF012C4A7824285825CB53
            * */
//            å¼€10
            String result1 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
                            "FEA501000BFE010003FFFF0AA542FD69D4E6194E");
            log.info("开灯返回结果:"+result1);
            sleep(5000);
//            å…³
            String result2 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
                    "FEA501000BFE0100030001007130ECA9150640E6");
            log.info("关灯返回结果:"+result2);
            sleep(5000);
////            å¼€10
//            String result1 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
//                            "FEA501000BFE010003FFFF0AA542FD69D4E6194E");
//            log.info("开灯返回结果:"+result1);
//            sleep(5000);
////            å…³
//            String result2 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
//                    "FEA501000BFE0100030001007130ECA9150640E6");
//            log.info("关灯返回结果:"+result2);
//            sleep(5000);
////            å¿ƒè·³æŸ¥è¯¢
            String result3 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
                    "FEA501000AFE110002FFFF26008FBE3DAC7C0D");
            log.info("心跳查询返回结果:"+result3);
            sleep(3000);
            String result4 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
                    "FEA501001AFE230012FE23000A00017F1019647F111E005428F600EC64EC194EA28A7C");
            log.info("定时任务返回结果:"+result4);
            sleep(3000);
//            String result3 = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff",
//                    "FEA501000AFE110002FFFF26008FBE3DAC7C0D");
//            log.info("心跳查询返回结果:"+result3);
//            sleep(1000);
//            String result = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff",
//                    "FEA501000CFE210004FFFF001E9BB444E9C75BDB49");
//            log.info("心跳设置返回结果:"+result);
//            sleep(1000);
////            è®¾ç½®å¿ƒè·³30秒
//            String result4 = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff",
//                    "FEA501000AFE110002FFFF26008FBE3DAC7C0D");
//            log.info("心跳查询返回结果:"+result4);
//            sleep(1000);
//            String result5 = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff",
//                    "FEA501000CFE210004FFFF001E9BB444E9C75BDB49");
//            log.info("心跳查询返回结果:"+result5);
//            sleep(1000);
//            String result4 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff",
//                    "FEA501001AFE230012FE23000A00017F1019647F111E005428F600EC64EC194EA28A7C");
//            log.info("定时任务返回结果:"+result4);
//            sleep(3000);
            System.out.println("链接状态:---"+i+"---:");
            System.out.println(localMqttConnectStatusMap.get("363832544e5008ff3a32ffff"));
            sleep(3000);
            boolean set = RedisUtils.getBean().set(localMqttConnectStatus+"363832544e5008ff4734ffff",0);
            System.out.println(set);
            System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff"));
            System.out.println("1".equals(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff")));
            System.out.println("------------");
//            System.out.println("链接状态:---"+i+"---:");
//            System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff"));
            sleep(1000);
        }
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -18,6 +18,7 @@
import com.sandu.ximon.admin.manager.iot.rrpc.topic.IBaseTopic;
import com.sandu.ximon.admin.manager.iot.rrpc.topic.ICustomizeTopic;
import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -26,7 +27,8 @@
import java.util.List;
import java.util.Map;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatus;
/**
 * @author chenjiantian
@@ -195,11 +197,10 @@
            BatchGetDeviceStateResponse.DeviceStatus deviceStatus = new BatchGetDeviceStateResponse.DeviceStatus();
                    deviceStatus.setDeviceName(l);
            if (localMqttConnectStatusMap.get(l)!=null &&
                    localMqttConnectStatusMap.get(l)== 0){
                deviceStatus.setStatus("OFFLINE");
            }else {
            if ("1".equals(RedisUtils.getBean().get(localMqttConnectStatus+l))){
                deviceStatus.setStatus("ONLINE");
            }else {
                deviceStatus.setStatus("OFFLINE");
            }
            statusList.add(deviceStatus);
        });
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
@@ -53,7 +53,28 @@
        System.out.println("nvInit(sdk åˆå§‹åŒ–):");
        System.out.println(instance.nvInit(rootDir, companyInfo));
        StatusVO searchVO = new StatusVO();
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
        CountDownLatch countDownLatch1 = new CountDownLatch(1);
        instance.nvSearchTerminalAsync(new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
                searchVO.setStatusCode(code);
                searchVO.setStatusData(data);
                loginInfo = data;
                System.out.println("\nViplexCore æœç´¢ code:" + code);
                System.out.println("\nViplexCore æœç´¢ data:" + data);
                countDownLatch1.countDown();
            }
        });
        try {
            countDownLatch1.await(10000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
//        login("MZVA51930N2113017308");
    }
@@ -78,28 +99,6 @@
     * 5:公网SDK登录
     */
    public StatusVO login(String sn, Integer loginType) {
        StatusVO searchVO = new StatusVO();
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
        CountDownLatch countDownLatch1 = new CountDownLatch(1);
        instance.nvSearchTerminalAsync(new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
                searchVO.setStatusCode(code);
                searchVO.setStatusData(data);
                loginInfo = data;
                System.out.println("\nViplexCore æœç´¢ code:" + code);
                System.out.println("\nViplexCore æœç´¢ data:" + data);
                countDownLatch1.countDown();
            }
        });
        try {
            countDownLatch1.await(10000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (loginSn.get(sn) != null && loginSn.get(sn) && loginType == 0) {
            return new StatusVO(0);
@@ -945,15 +944,18 @@
                        newNova.setScreenShot(data);
                    }
                    countDownLatch.countDown();
                    try {
                        countDownLatch.await(5000, TimeUnit.MILLISECONDS);
                    } catch (InterruptedException ex) {
                        throw new RuntimeException(ex);
                    }
                }
            });
        });
        try {
            countDownLatch.await(30000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return param.getScreenShotList();
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -51,7 +51,6 @@
import java.util.*;
import java.util.stream.Collectors;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap;
/**
 * @author chenjiantian
@@ -88,6 +87,14 @@
                light.setLight2Percent(heartBeatDataPackage.getLight2Percent());
                save(light);
                log.info("新增路灯");
                Pole pole = new Pole();
                pole.setDeviceCode(deviceName);
                pole.setPoleName(deviceName);
                pole.setDeviceType(0);
                pole.setPoleCode(SpringContextHolder.getBean(PoleService.class).generatePoleCode());
                boolean result = SpringContextHolder.getBean(PoleService.class).saveOrUpdate(pole);
                log.info("新增灯杆:"+result);
            }
            redisService.set(LightKey.REPORT_MAC.key(deviceName), 1, LightKey.REPORT_MAC.expireSeconds());
        } else {
@@ -1032,22 +1039,22 @@
    public void timeSynchronizationInitiative(String deviceCode, String lightAddress) {
        //单灯信息
        Light light = getLight(deviceCode);
//        if (light == null) {
//            log.error("单灯主动同步时间请求异常,单灯信息不存在!");
//            return;
//        }
        if (light == null) {
            log.error("单灯主动同步时间请求异常,单灯信息不存在!");
            return;
        }
        //单灯任务信息
        LightTaskPoleRelation lightTaskPoleRelation = SpringContextHolder.getBean(LightTaskPoleRelationService.class)
                .getOne(Wrappers.lambdaQuery(LightTaskPoleRelation.class)
                        .eq(LightTaskPoleRelation::getDeviceCode, deviceCode).eq(LightTaskPoleRelation::getLightAddress, lightAddress));
//        LightTaskPoleRelation lightTaskPoleRelation = SpringContextHolder.getBean(LightTaskPoleRelationService.class)
//                .getOne(Wrappers.lambdaQuery(LightTaskPoleRelation.class)
//                        .eq(LightTaskPoleRelation::getDeviceCode, deviceCode).eq(LightTaskPoleRelation::getLightAddress, lightAddress));
        LightTask lightTask = null;
        //灯头没有任务
        if (lightTaskPoleRelation != null) {
            if (lightTaskPoleRelation.getDeviceScheduled() != null) {
                lightTask = JSONObject.parseObject(lightTaskPoleRelation.getDeviceScheduled(), LightTask.class);
            }
        }
//        //灯头没有任务
//        if (lightTaskPoleRelation != null) {
//            if (lightTaskPoleRelation.getDeviceScheduled() != null) {
//                lightTask = JSONObject.parseObject(lightTaskPoleRelation.getDeviceScheduled(), LightTask.class);
//            }
//        }
        timeSynchronization(light, lightAddress, lightTask);
@@ -1060,16 +1067,18 @@
     * @param lightTask å•灯任务实体(为空标识单灯没有定时任务)
     */
    public void timeSynchronization(Light light, String lightAddress, LightTask lightTask) {
        lightTask = null;
        LightTask finalLightTask = lightTask;
        new Thread(new Runnable() {
            @Override
            public void run() {
                //获取当前时间时、分
                Calendar cal = Calendar.getInstance();
                if (lightTask != null) {
                    String closeOrder = lightTask.getCloseOrder();
                    String openOrder = lightTask.getOpenOrder();
                    String controlOrder = lightTask.getControlOrder() == null ? null : lightTask.getControlOrder();
                if (finalLightTask != null) {
                    String closeOrder = finalLightTask.getCloseOrder();
                    String openOrder = finalLightTask.getOpenOrder();
                    String controlOrder = finalLightTask.getControlOrder() == null ? null : finalLightTask.getControlOrder();
                    List<String> timeList = new ArrayList<>();
                    timeList.add(openOrder.substring(0, 4));
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -60,7 +60,6 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap;
/**
 * ç¯æ†ç›¸å…³
@@ -1066,20 +1065,7 @@
                }
            }
        }
//        List<DeviceStatus> statusList = new ArrayList<>();
//
//        deviceCodeList.forEach(l -> {
//                    DeviceStatus deviceStatus = new DeviceStatus();
//                    deviceStatus.setDeviceCode(l);
//
//            if (localMqttConnectStatusMap.get(l)!=null &&
//                    localMqttConnectStatusMap.get(l)== 1){
//                deviceStatus.setStatus(1);
//            }else {
//                deviceStatus.setStatus(0);
//            }
//            statusList.add(deviceStatus);
//        });
        return statusList;
    }
ximon-admin/src/main/resources/application-xm_lj.yml
copy from ximon-admin/src/main/resources/application-xm.yml copy to ximon-admin/src/main/resources/application-xm_lj.yml
Îļþ´Ó ximon-admin/src/main/resources/application-xm.yml ¸´ÖÆ
@@ -1,16 +1,17 @@
spring:
#  ä¸½æ±Ÿæœ¬åœ°éƒ¨ç½²é¡¹ç›®
  datasource:
    # æ•°æ®åº“用户名
    username: root
    # æ•°æ®åº“密码
    password: zhxm2512209
    url: jdbc:mysql://39.103.154.108:2512/xm_dev?useUnicode=true&autoReconnect=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://127.0.0.1:2512/xm?useUnicode=true&autoReconnect=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      connection-init-sqls: set names utf8mb4
      driver-class-name: com.mysql.cj.jdbc.Driver
  redis:
    host: 39.103.154.108
    host: 127.0.0.1
    password: zhxm2512209
    port: 6379
    database: 0
@@ -32,7 +33,7 @@
    #************************本地上传文件配置************************
  upload:
    #文件服务器路径
    upload-root-path: E:\file\novafile
    upload-root-path: D:\project20000\file\
    storage: local
    #服务器文件前缀
    real-url: http://localhost/
@@ -45,7 +46,7 @@
  isOpen: false
minio:
  endpoint: 47.106.172.9
  endpoint: 10.10.1.100
  port: 9000
  accessKey: minioadmin
  secretKey: zhxm2512209
@@ -85,15 +86,20 @@
#新诺瓦
new-nova:
  #依赖地址
  string-path: C:\Users\Administrator\Desktop\novaWin\bin\viplexcore.dll
  string-path: D:\project20000\file\novaWin\bin\viplexcore.dll
  #节目生成路径
  out-put-path: D:\project20000\file\temp
new-nova-file:
  upload:
    #文件服务器路径
    upload-root-path: E:\file\novafile
    upload-root-path: D:\project20000\file\
    storage: local
    #服务器文件前缀
    real-url: http://localhost/
    file-url: http://10.10.1.100:20017/file/
    #诺瓦截屏存放路径   æ–‡ä»¶å¤¹å¿…须存在  ä¸”是服务器文件路径(upload-root-path)下的子文件夹
    screen-shot-path: D:\project20000\file\screenShot\
customer:
  mqtt:
@@ -109,7 +115,7 @@
        password: zhxm2512209
        #下发主题
        publishTopic: v1/devices/request/
#监听上下线
      #监听上下线
      - clientId: java_server_status
        #监听主题
        subscribeTopic: $SYS/brokers/+/clients/#
@@ -119,3 +125,4 @@
        password: zhxm2512209
        #下发主题
        publishTopic: v1/devices/request/
ximon-admin/src/main/resources/application-xm_local.yml
ÎļþÃû´Ó ximon-admin/src/main/resources/application-xm.yml ÐÞ¸Ä
@@ -1,4 +1,5 @@
spring:
#  å¸Œæ¢¦æœ¬åœ°å¼€å‘
  datasource:
    # æ•°æ®åº“用户名
    username: root
@@ -32,7 +33,7 @@
    #************************本地上传文件配置************************
  upload:
    #文件服务器路径
    upload-root-path: E:\file\novafile
    upload-root-path: D:\file\
    storage: local
    #服务器文件前缀
    real-url: http://localhost/
@@ -85,15 +86,20 @@
#新诺瓦
new-nova:
  #依赖地址
  string-path: C:\Users\Administrator\Desktop\novaWin\bin\viplexcore.dll
  string-path: D:\file\novaWin\bin\viplexcore.dll
  #节目生成路径
  out-put-path: D:\file\temp
new-nova-file:
  upload:
    #文件服务器路径
    upload-root-path: E:\file\novafile
    upload-root-path: D:\file\
    storage: local
    #服务器文件前缀
    real-url: http://localhost/
    file-url: http://192.168.0.12:20017/file/
    #诺瓦截屏存放路径   æ–‡ä»¶å¤¹å¿…须存在  ä¸”是服务器文件路径(upload-root-path)下的子文件夹
    screen-shot-path: D:\file\screenShot\
customer:
  mqtt:
@@ -109,7 +115,7 @@
        password: zhxm2512209
        #下发主题
        publishTopic: v1/devices/request/
#监听上下线
      #监听上下线
      - clientId: java_server_status
        #监听主题
        subscribeTopic: $SYS/brokers/+/clients/#
@@ -119,3 +125,4 @@
        password: zhxm2512209
        #下发主题
        publishTopic: v1/devices/request/
ximon-admin/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: xm
    active: xm_local
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8