2021与蓝度共同重构项目,服务端
liuhaonan
2022-09-26 17e18047a47f43187f590a045b1aebe130459292
changes
已修改17个文件
已添加3个文件
618 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LedPlayerEntityMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/BroadcastAPI.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/BroadcastIP.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/redis/DeviceRedisKey.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeService.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java 194 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/XiXunPlayerService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/LightTaskRelationVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/RedisDeviceStatus.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-local.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application.yml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java
@@ -15,7 +15,22 @@
    boolean saveLed(LedPlayerEntity ledPlayerEntity);
    List<LedPlayerEntity> ledPlayerEntityList(String keyword, Long userid);
    /**
     * ç”¨äºŽé™¤åˆ—表展示以外的(新增了分组操作  ä¸ºä¸å½±å“å…¶ä»–  æ–°å¢žledListByGroupId)
     * @param keyword
     * @param userId
     * @return
     */
    List<LedPlayerEntity> ledPlayerEntityList(String keyword, Long userId);
    /**
     * ç”¨äºŽåˆ—表展示
     * @param keyword
     * @param userId
     * @param groupId
     * @return
     */
    List<LedPlayerEntity> ledListByGroupId(String keyword, Long userId,Long groupId);
    List<LedPlayerEntity> ledPlayerEntityListOnBinding(String keyword, Long userid);
dao/src/main/resources/mapper/LedPlayerEntityMapper.xml
@@ -26,7 +26,8 @@
    <select id="ledPlayerEntityList" resultType="com.sandu.ximon.dao.domain.LedPlayerEntity">
        SELECT
        t1.*, t2.pole_id,
        t1.*,
        t2.pole_id,
        t3.pole_name
        FROM
        led t1
@@ -34,13 +35,14 @@
        AND t2.device_type = 1
        LEFT JOIN pole t3 ON t3.id = t2.pole_id
        <where>
            1=1
            <if test="keyword != null and keyword != ''">
                AND t1.name LIKE CONCAT(CONCAT('%', #{keyword}), '%')
                OR t1.sn LIKE CONCAT(CONCAT('%', #{keyword}), '%')
                OR t1.id LIKE CONCAT(CONCAT('%', #{keyword}), '%')
            </if>
            <if test="userid != null">
                AND (t3.user_id = #{userid} OR t3.client_id = #{userid})
            <if test="userId != null">
                AND (t3.user_id = #{userId} OR t3.client_id = #{userId})
            </if>
        </where>
    </select>
@@ -79,6 +81,33 @@
            AND (t2.user_id = #{clientId} OR t2.client_id = #{clientId})
        </if>
    </select>
    <select id="ledListByGroupId" resultType="com.sandu.ximon.dao.domain.LedPlayerEntity">
        SELECT
        t1.*,
        t2.pole_id,
        t3.pole_name
        FROM
        led t1
        LEFT JOIN pole_binding t2 ON t1.sn = t2.device_code
        AND t2.device_type = 1
        LEFT JOIN pole t3 ON t3.id = t2.pole_id
        LEFT JOIN led_nova_group_relation t4 ON t4.nova_id = t1.id
        LEFT JOIN led_nova_group t5 ON t5.group_id = t4.nova_group_id
        <where>
            1=1
            <if test="groupId != null">
                AND t5.group_id=#{groupId}
            </if>
            <if test="keyword != null and keyword != ''">
                AND t1.name LIKE CONCAT(CONCAT('%', #{keyword}), '%')
                OR t1.sn LIKE CONCAT(CONCAT('%', #{keyword}), '%')
                OR t1.id LIKE CONCAT(CONCAT('%', #{keyword}), '%')
            </if>
            <if test="userId != null">
                AND (t3.user_id = #{userId} OR t3.client_id = #{userId})
            </if>
        </where>
    </select>
</mapper>
ximon-admin/src/main/java/com/sandu/ximon/admin/config/BroadcastAPI.java
@@ -1,7 +1,7 @@
package com.sandu.ximon.admin.config;
/**
 * éŸ³æŸ±api
 * éŸ³æŸ±api地址
 */
public enum BroadcastAPI {
@@ -29,10 +29,12 @@
    DEL_TASK("/del_task"),
    ADD_REGION("/add_region"),
    GET_REGION_LIST("/get_region_list");;
    GET_REGION_LIST("/get_region_list");
    private static final String SERVER = "http://47.106.172.9:8000";//todo  æå–到配置文件
    //    private String service;
//
//    private static  String SERVER = "http://47.106.172.9:8000";
    BroadcastAPI(String url) {
        this.url = url;
    }
@@ -40,8 +42,7 @@
    private String url;
    public String getUrl() {
        return SERVER + url;
        return BroadcastIP.getServerIP() + url;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/config/BroadcastIP.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.sandu.ximon.admin.config;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @author LiuHaoNan
 * @date 2022/9/26
 */
@Component
public class BroadcastIP implements InitializingBean {
    private static  String SERVER;
    @Value("${broadcastApi.serviceUrl}")
    private String server;
    @Override
    public void afterPropertiesSet() throws Exception {
        SERVER = server;
    }
    public static String getServerIP() {
        return SERVER;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java
@@ -32,15 +32,18 @@
    private String screenShotNotifyUrl;
    @Value("${nova-conf.status-notify-url}")
    private String statusNotifyUrl;
    @Value("${nova-conf.username}")
    private String userName;
    @Value("${nova-conf.password}")
    private String passWord;
    public static String NOTIFY_URL;
    public static String SCREEN_SHOT_NOTIFY_URL;
    public static String STATUS_NOTIFY_URL;
    public static String STATUS_NOTIFY_URL1;
    public static final String username = "zhxm";
    public static final String password = "xm2512209.";
    public static String username;
    public static String password;
    public static final Gson GSON = new Gson();
@@ -52,7 +55,10 @@
        SCREEN_SHOT_NOTIFY_URL = screenShotNotifyUrl;
        STATUS_NOTIFY_URL = statusNotifyUrl;
        System.out.println(STATUS_NOTIFY_URL);
        username = userName;
        password = passWord;
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java
@@ -189,19 +189,27 @@
    @GetMapping("/list")
    public ResponseVO<Object> list(BaseConditionVO baseConditionVO, @RequestParam(value = "keyword", required = false) String keyword, @RequestParam(value = "order", required = false) Integer order, @RequestParam(value = "seq", required = false) Integer seq) {
    public ResponseVO<Object> list(BaseConditionVO baseConditionVO,
                                   @RequestParam(value = "keyword", required = false) String keyword,
                                   @RequestParam(value = "order", required = false) Integer order,
                                   @RequestParam(value = "seq", required = false) Integer seq,
                                   @RequestParam(value = "groupId", required = false) Long groupId) {
        if (!permissionConfig.check(MenuEnum.LED_LIST.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        return ResponseUtil.successPage(ledPlayerEntityService.ledPlayerEntityList(baseConditionVO, keyword, order, seq));
        return ResponseUtil.successPage(ledPlayerEntityService.ledPlayerEntityList(baseConditionVO, keyword, order, seq, groupId));
    }
    @GetMapping("/onLineList")
    public ResponseVO<Object> onLineList(BaseConditionVO baseConditionVO, @RequestParam(value = "keyword", required = false) String keyword, @RequestParam(value = "order", required = false) Integer order, @RequestParam(value = "seq", required = false) Integer seq) {
    public ResponseVO<Object> onLineList(BaseConditionVO baseConditionVO,
                                         @RequestParam(value = "keyword", required = false) String keyword,
                                         @RequestParam(value = "order", required = false) Integer order,
                                         @RequestParam(value = "seq", required = false) Integer seq,
                                         @RequestParam(value = "groupId", required = false) Long groupId) {
        if (!permissionConfig.check(MenuEnum.LED_LIST.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        List<LedPlayerEntity> list = ledPlayerEntityService.ledPlayerEntityList(baseConditionVO, keyword, order, seq);
        List<LedPlayerEntity> list = ledPlayerEntityService.ledPlayerEntityList(baseConditionVO, keyword, order, seq, groupId);
        List<LedPlayerEntity> entities = vnnoxService.setCacheInfo(vnnoxAPIUtil.syncCurrentInfo(list));
        List<LedPlayerEntity> online = new ArrayList<>();
        for (LedPlayerEntity ledPlayer : entities) {
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/mainboard/MainBoardInvokeSyncService.java
@@ -1,22 +1,10 @@
package com.sandu.ximon.admin.manager.iot.rrpc.mainboard;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.iot.model.v20180120.InvokeThingServiceResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.sandu.common.execption.BusinessException;
import com.sandu.ximon.admin.manager.iot.amqp.MqttMainBoardConfig;
import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.BaseInvokeSyncService;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.InvokeParam;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.WrapResponseCommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils;
import org.springframework.beans.BeanUtils;
import java.util.Map;
/**
 * @author chenjiantian
ximon-admin/src/main/java/com/sandu/ximon/admin/redis/DeviceRedisKey.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.sandu.ximon.admin.redis;
/**
 * @author LiuHaoNan
 * @date 2022/9/26
 */
public class DeviceRedisKey {
    /**
     * éŸ³æŸ±
     */
    public static final String IP_BROADCAST = "volume.";
    /**
     * æ‘„像头
     */
    public static final String MONITOR = "monitor.";
    /**
     * å•灯
     */
    public static final String LIGHT_DEVICE = "lightDevice.";
    /**
     * å……电桩
     */
    public static final String C3M = "c3m.";
    /**
     * å¤§æ°”
     */
    public static final String AIR = "air.";
    /**
     * å†œè€•
     */
    public static final String AIR_NONGGENG = "airNongGeng.";
    /**
     * ç†™æ±›
     */
    public static final String XIXUN = "led_xixun.";
    /**
     * è¯ºç“¦
     */
    public static final String NOVA = "led_nova.";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -9,6 +9,7 @@
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.config.C3mRedisConfig;
import com.sandu.ximon.admin.dto.ChargingDto;
import com.sandu.ximon.admin.dto.TerminalDto;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3OperationReportInnerFrame;
@@ -21,9 +22,11 @@
import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
import com.sandu.ximon.admin.param.C3ChargingAddParam;
import com.sandu.ximon.admin.param.C3ChargingParam;
import com.sandu.ximon.admin.redis.DeviceRedisKey;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.*;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.admin.vo.RedisDeviceStatus;
import com.sandu.ximon.dao.bo.C3ChargingBo;
import com.sandu.ximon.dao.domain.*;
import com.sandu.ximon.dao.enums.OrderByEnums;
@@ -53,6 +56,7 @@
    private final C3mChargingChargeService c3mChargingChargeService;
    private final PoleBindingService bindingService;
    private final PoleService poleService;
    private final RedisUtils redisUtils;
    /**
     * ä¿å­˜ä¸ŠæŠ¥C3充电设备心跳数据
@@ -142,7 +146,7 @@
        System.out.println("设置费率开始");
        C3mCharging c3mCharging1 = getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getMcuUdid, mcuUdid).last("limit 1"));
        List<C3mChargingCharge> list = c3mChargingChargeService.list(Wrappers.lambdaQuery(C3mChargingCharge.class).eq(C3mChargingCharge::getC3Id, c3mCharging1.getC3Id()));
        if (list == null && list.size() == 0) {//费率表中没有此充电桩数据时  æ·»åŠ é»˜è®¤è´¹çŽ‡
        if (list.size() == 0) {//费率表中没有此充电桩数据时  æ·»åŠ é»˜è®¤è´¹çŽ‡
            c3mChargingChargeService.initCharge((c3mCharging1.getC3Id()).intValue());
        }
        String rateState = setRate(newC3Mac, list, true);
@@ -1163,4 +1167,28 @@
    }
    /**
     * å‘Redis中存入设备状态
     */
    public void setCacheData() {
        list().forEach(
                device -> {
                    RedisDeviceStatus deviceStatus = new RedisDeviceStatus();
                    deviceStatus.setDeviceId(device.getC3Id().toString());
                    if (device != null) {
                        A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage beatDataPackage = ReadTheHeartbeatPackage(device.getC3Id(), false);
                        if (beatDataPackage != null) {
                            //在线状态 1.空闲 2.充电中 3.充电中断,等待服务器确认 4.充电结束,等待服务器确认 5.有故障 6.与充电桩对接中
                            deviceStatus.setStatus(Integer.valueOf(beatDataPackage.getStatusBit()));
                        }else{
                        }
                    }
                    redisUtils.set(DeviceRedisKey.IP_BROADCAST + device.getC3Id(), deviceStatus);
                }
        );
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeService.java
@@ -8,10 +8,13 @@
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.dto.TerminalDto;
import com.sandu.ximon.admin.param.BroadcastTerminalV2Param;
import com.sandu.ximon.admin.redis.DeviceRedisKey;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.admin.utils.TerminalAPIUtils;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.admin.vo.RedisDeviceStatus;
import com.sandu.ximon.dao.bo.BroadcastTerminalV2EntityBo;
import com.sandu.ximon.dao.domain.BroadcastTerminalV2Entity;
import com.sandu.ximon.dao.enums.AdministratorEnums;
@@ -29,6 +32,8 @@
    @Autowired
    private IPBroadcastMapper broadcastTerminalV2EntityMapper;
    @Autowired
    private RedisUtils redisUtils;
    /**
     * åŒæ­¥ç»ˆç«¯
@@ -196,7 +201,7 @@
                if (bean.getId().equals(terminalDto.getId())) {
                    bean.setStatus(terminalDto.getStatus());
                    bean.setIp(terminalDto.getIp());
                    bean.setVolumn(terminalDto.getVolumn());
                    bean.setVolumn(terminalDto.getVolume());
                    bean.setDefaultVolumn(terminalDto.getDefaultVolumn());
                    bean.setPower(terminalDto.getPower());
                    bean.setDefaultPower(terminalDto.getDefaultPower());
@@ -335,6 +340,41 @@
    public static Object getInfo() {
        return TerminalAPIUtils.getTerminalInfo(23);
        return TerminalAPIUtils.getTerminalInfo(25);
    }
    /**
     * å‘Redis中存入设备状态
     */
    public void setCacheData() {
        //服务器所有音柱信息
        List<TerminalDto> list = TerminalAPIUtils.getTerminalList();
        list.forEach(
                device -> {
                    RedisDeviceStatus deviceStatus = new RedisDeviceStatus();
                    deviceStatus.setDeviceId(device.getId().toString());
                    if (device != null) {
                        //空闲 1、   å·¥ä½œä¸­ 2 æˆ–者 4、     æ–­çº¿ 0,    æŠ¥ é”™ 8
                        switch (device.getStatus()) {
                            case 1:
                            case 2:
                            case 4:
                                deviceStatus.setStatus(0);
                                break;
                            case 0:
                                deviceStatus.setStatus(1);
                                break;
                            case 8:
                                deviceStatus.setStatus(0);
                                break;
                            default:
                                deviceStatus.setStatus(1);
                        }
                    }
                    redisUtils.set(DeviceRedisKey.IP_BROADCAST + device.getId(), deviceStatus);
                }
        );
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java
@@ -125,7 +125,7 @@
     * @param seq
     * @return
     */
    public List<LedPlayerEntity> ledPlayerEntityList(BaseConditionVO baseConditionVO, String keyword, Integer order, Integer seq) {
    public List<LedPlayerEntity> ledPlayerEntityList(BaseConditionVO baseConditionVO, String keyword, Integer order, Integer seq, Long groupId) {
        //排序字段
        String orderByResult = OrderByEnums.VNNOX_ID.getCode();
        //正序、倒叙
@@ -163,9 +163,9 @@
        List<LedPlayerEntity> list;
        //超管
        if (SecurityUtils.getClientId() == null) {
            list = ledPlayerEntityMapper.ledPlayerEntityList(keyword, null);
            list = ledPlayerEntityMapper.ledListByGroupId(keyword, null, groupId);
        } else {
            list = ledPlayerEntityMapper.ledPlayerEntityList(keyword, SecurityUtils.getUserId());
            list = ledPlayerEntityMapper.ledListByGroupId(keyword, SecurityUtils.getUserId(), groupId);
        }
        return SpringContextHolder.getBean(VnnoxService.class).setCacheInfo(vnnoxAPIUtil.syncCurrentInfo(list));
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -22,11 +22,14 @@
import com.sandu.ximon.admin.param.LightControlParam;
import com.sandu.ximon.admin.param.LightPowerSettingParam;
import com.sandu.ximon.admin.param.LightRemarkParam;
import com.sandu.ximon.admin.redis.DeviceRedisKey;
import com.sandu.ximon.admin.redis.LightKey;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.admin.vo.ControlLightCommandVO;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.admin.vo.RedisDeviceStatus;
import com.sandu.ximon.dao.bo.LightBo;
import com.sandu.ximon.dao.bo.PoleTaskLightPowerBo;
import com.sandu.ximon.dao.domain.*;
@@ -40,9 +43,10 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -59,6 +63,7 @@
    private final LightReportDataService lightReportDataService;
    private final PoleBindingService bindingService;
    private final PoleService poleService;
    private final RedisUtils redisUtils;
    /**
     * å½•入当前设备码的路灯数据
@@ -301,151 +306,6 @@
         */
        return resultList;
    }
    /**
     * å•灯节能率
     *
     * @return
     */
    public List controlEnergySaving() {
        //获取到正在执行的任务列表
        List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listTask();
        LocalDateTime now = LocalDateTime.now();
        List<LightTaskDto> list1 = new ArrayList<>();
        List<LightTaskDto> list2 = new ArrayList<>();
        List<LightTaskDto> list3 = new ArrayList<>();
        List<LightTaskDto> list4 = new ArrayList<>();
        List<LightTaskDto> list5 = new ArrayList<>();
        List<LightTaskDto> list6 = new ArrayList<>();
        List<LightTaskDto> list7 = new ArrayList<>();
        for (LightTaskDto lightTaskDto : lightTaskDtos) {
            List<Integer> weekList = lightTaskDto.getWeekList();
            for (Integer one : weekList) {
                switch (one) {
                    case 1:
                        list1.add(lightTaskDto);
                        break;
                    case 2:
                        list2.add(lightTaskDto);
                        break;
                    case 4:
                        list3.add(lightTaskDto);
                        break;
                    case 8:
                        list4.add(lightTaskDto);
                        break;
                    case 16:
                        list5.add(lightTaskDto);
                        break;
                    case 32:
                        list6.add(lightTaskDto);
                        break;
                    case 64:
                        list7.add(lightTaskDto);
                        break;
                    default:
                }
            }
        }
        //获取当前星期几 1-7
        int currentWeekValue = now.getDayOfWeek().getValue();
        Map map;
        List<Map> temp = new ArrayList<>();
        //获取日期 ç²¾ç¡®åˆ°å¤©
        LocalDateTime localDateTime = now.with(LocalTime.MIN);
        for (int i = 1; i < 8; i++) {
            currentWeekValue--;
            if (currentWeekValue < 1) {
                currentWeekValue = 7;
            }
            map = new LinkedHashMap();
            map.put("time", localDateTime.minusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            map.put("value", getlist(currentWeekValue));
            temp.add(map);
        }
        return temp;
    }
    /**
     * å•灯能耗
     *
     * @return
     */
    public List controlEnergy() {
        //获取到正在执行的任务列表
        List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listTask();
        LocalDateTime now = LocalDateTime.now();
        List<LightTaskDto> list1 = new ArrayList<>();
        List<LightTaskDto> list2 = new ArrayList<>();
        List<LightTaskDto> list3 = new ArrayList<>();
        List<LightTaskDto> list4 = new ArrayList<>();
        List<LightTaskDto> list5 = new ArrayList<>();
        List<LightTaskDto> list6 = new ArrayList<>();
        List<LightTaskDto> list7 = new ArrayList<>();
        for (LightTaskDto lightTaskDto : lightTaskDtos) {
            List<Integer> weekList = lightTaskDto.getWeekList();
            System.out.println(weekList + "===========================");
            for (Integer one : weekList) {
                switch (one) {
                    case 1:
                        list1.add(lightTaskDto);
                        break;
                    case 2:
                        list2.add(lightTaskDto);
                        break;
                    case 4:
                        list3.add(lightTaskDto);
                        break;
                    case 8:
                        list4.add(lightTaskDto);
                        break;
                    case 16:
                        list5.add(lightTaskDto);
                        break;
                    case 32:
                        list6.add(lightTaskDto);
                        break;
                    case 64:
                        list7.add(lightTaskDto);
                        break;
                    default:
                }
            }
        }
        Integer currentWeekValue = now.getDayOfWeek().getValue();
        Map map;
        List<Map> temp = new ArrayList<>();
        //获取当前日期  æ ¼å¼ä¸ºyyyy-MM-dd
        LocalDateTime localDateTime = now.with(LocalTime.MIN);
        for (int i = 1; i < 8; i++) {
            currentWeekValue--;
            if (currentWeekValue < 1) {
                currentWeekValue = 7;
            }
            map = new LinkedHashMap();
            map.put("time", localDateTime.minusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            map.put("value", getlistEnergy(currentWeekValue));
            temp.add(map);
        }
        return temp;
    }
@@ -1063,4 +923,42 @@
        });
        return updateBatchById(lights);
    }
    /**
     * å‘Redis中存入设备状态
     */
    public void setCacheData() {
        List<String> collect = list().stream().map(Light::getDeviceCode).collect(Collectors.toList());
        List<List<String>> split = CollectionUtil.split(collect, 100);
        List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = null;
        List<RedisDeviceStatus> statusList = null;
        for (List<String> splist : split) {
            deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(splist);
            if (deviceStatuses != null) {
                for (BatchGetDeviceStateResponse.DeviceStatus deviceStatus : deviceStatuses) {
                    RedisDeviceStatus device = new RedisDeviceStatus();
                    device.setDeviceId(deviceStatus.getDeviceName());
                    if ("ONLINE".equals(deviceStatus.getStatus())) {
                        device.setStatus(0);
                    } else if ("OFFLINE".equals(deviceStatus.getStatus())) {
                        device.setStatus(1);
                    } else {
                        device.setStatus(2);
                    }
                    statusList.add(device);
                }
            }
        }
        statusList.forEach(status -> {
            redisUtils.set(DeviceRedisKey.LIGHT_DEVICE + status.getDeviceId(), status);
        });
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
@@ -83,7 +83,6 @@
        if (!"0001".equals(param.getLightAddress()) && !"0002".equals(param.getLightAddress())) {
            throw new BusinessException("灯头地址格式不正确");
        }
//        LightTask lightTask = getById(null);
        int week = 0;
@@ -144,12 +143,6 @@
        newPoleMap.forEach(
                commend -> {
                    //开关灯时间
//                    String s = newLightTask.getOpenOrder() + newLightTask.getCloseOrder();
//                    if (newLightTask.getControlOrder() != null) {
//                        //控灯时间
//                        s = s + newLightTask.getControlOrder();
//                    }
//                    // æ›´æ–°ç³»ç»Ÿå®šæ—¶
                    commend.setSysScheduled(JSON.toJSONString(newLightTask));
                    System.out.println(commend.getIssueStatus() + "状态");
                    if (commend.getIssueStatus() == 0) {
@@ -213,6 +206,9 @@
        if (StrUtil.length(param.getControlOrder()) % LightTaskParam.REQUEST_ORDER_LENGTH != 0) {
            throw new BusinessException("灯控命令格式不正确");
        }
        if (!"0001".equals(param.getLightAddress()) && !"0002".equals(param.getLightAddress())) {
            throw new BusinessException("灯头地址格式不正确");
        }
        LightTask newLightTask = getById(taskId);
        if (newLightTask == null) {
            throw new BusinessException("找不到路灯任务");
@@ -224,7 +220,6 @@
            week |= w;
        }
//        LightTask newLightTask = new LightTask();
        newLightTask.setTaskName(param.getTaskName());
        newLightTask.setClientId(clientService.getClientId(SecurityUtils.getUserId()));
@@ -340,8 +335,29 @@
        all.addAll(newPoleFail);
        all.addAll(oldPoleSuccess);
        all.addAll(oldPoleFail);
        all.addAll(closePoleSuccess);
        all.addAll(closePoleFail);
        if (closePoleFail.size() != 0) {
            List<LightTaskPoleRelation> colesFail = new ArrayList<>();
            //原来任务中本身就下发失败的任务  å³ç¡¬ä»¶å®šæ—¶ä¸ºç©º    ç¼–辑后进行关灯操作   å¯ç›´æŽ¥å‰”除任务关系
            closePoleFail.forEach(
                    close -> {
                        relations.forEach(
                                task -> {
                                    System.out.println(task.getLightAddress().equals(close.getLightAddress()) + "   addressResult");
                                    System.out.println(close.getLightAddress() + "   close.getLightAddress()");
                                    if (task.getLightAddress().equals(close.getLightAddress()) && task.getDeviceCode().equals(close.getDeviceCode())
                                            && task.getDeviceScheduled() != null && !task.getDeviceScheduled().isEmpty()) {
                                        colesFail.add(close);
                                    }
                                }
                        );
                        all.addAll(colesFail);
                    }
            );
        }
        if (!all.isEmpty()) {
            List<LightTaskPoleRelation> finalOldRelation = relations;
@@ -359,6 +375,7 @@
                                    //下发成功  æ›´æ–°ç³»ç»Ÿå®šæ—¶å’Œç¡¬ä»¶å®šæ—¶
                                    commend.setDeviceScheduled(JSON.toJSONString(newLightTask));
                                }
                            }
                        });
@@ -369,19 +386,14 @@
        //编辑前后所有的灯杆ID集合
        poleIdList.addAll(oldList);
        List<Long> longs = new ArrayList<>();
        //去重
        List<Long> collect = poleIdList.stream().distinct().collect(Collectors.toList());
//        for (Long item : poleIdList) {
//            if (!poleIdList.contains(item)) {
//                longs.add(item);
//            }
//        }
        if (!collect.isEmpty()) {
            lightTaskPoleRelationService.remove(Wrappers.lambdaQuery(LightTaskPoleRelation.class)
                    .in(LightTaskPoleRelation::getPoleId, collect).eq(LightTaskPoleRelation::getLightAddress, newLightTask.getLightAdress()));
        }
        if (!all.isEmpty()) {
            b = lightTaskPoleRelationService.saveBatch(all);
@@ -715,6 +727,10 @@
                        lightTaskRelationVO.setLightAddress(relation.getLightAddress());
                        lightTaskRelationVO.setIssueStatus(relation.getIssueStatus());
                        lightTaskRelationVO.setPoleId(relation.getPoleId());
                        Pole byId = poleService.getById(relation.getPoleId());
                        if (byId != null) {
                            lightTaskRelationVO.setPoleName(byId.getPoleName());
                        }
                        LightTaskVO sys = JSONObject.parseObject(relation.getSysScheduled(), LightTaskVO.class);
                        sys.setWeekList(TaskOrderUtil.parseLightWeek2List(sys.getWeek()));
@@ -790,11 +806,21 @@
     * ä¸‹å‘单个灯杆的任务
     */
    public boolean issueLightTask(LightTaskIssueParam param) {
        LightTask lightTask = getById(param.getTaskId());
        LightTaskPoleRelation relation = lightTaskPoleRelationService.getOne(Wrappers.lambdaQuery(LightTaskPoleRelation.class)
                .eq(LightTaskPoleRelation::getPoleId, param.getPoleId()).eq(LightTaskPoleRelation::getTaskId, param.getTaskId()));
        if (relation == null) {
            throw new BusinessException("找不到任务关系,无法补发");
        }
        LightTask lightTask = JSONObject.parseObject(relation.getSysScheduled(), LightTask.class);
//        LightTask lightTask = getById(param.getTaskId());
        if (lightTask == null) {
            throw new BusinessException("找不到任务");
        }
        //转换帧指令
        String framePayload = buildControlFramePayload(lightTask.getOpenOrder(), lightTask.getCloseOrder(), lightTask.getControlOrder(), lightTask.getWeek());
        //发送rrpc  å¾—到发送结果
        List<LightTaskPoleRelation> lightTaskPoleRelationList = sendControllerFrame(lightTask, ListUtil.toList(param.getPoleId()), framePayload, lightTask.getLightAdress());
        /**
@@ -813,11 +839,17 @@
        if (CollectionUtil.isNotEmpty(lightTaskPoleRelationList)) {
            return lightTaskPoleRelationService.update(lightTaskPoleRelationList.get(0), Wrappers.lambdaUpdate(LightTaskPoleRelation.class).eq(LightTaskPoleRelation::getPoleId, param.getPoleId()).eq(LightTaskPoleRelation::getTaskId, param.getTaskId()));
            LightTaskPoleRelation lightTaskPoleRelation = lightTaskPoleRelationList.get(0);
            if (lightTaskPoleRelation.getIssueStatus() == 0) {
                //下发成功  æ›´æ–°ç¡¬ä»¶å®šæ—¶  è¿”回成功
                relation.setDeviceScheduled(JSON.toJSONString(lightTaskPoleRelation));
                lightTaskPoleRelationService.updateById(relation);
                return true;
            } else {
                return false;
            }
        }
        return true;
        return false;
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java
@@ -10,9 +10,11 @@
import com.sandu.ximon.admin.config.RealtimeServerBean;
import com.sandu.ximon.admin.entity.*;
import com.sandu.ximon.admin.param.PoleBindingParam;
import com.sandu.ximon.admin.redis.DeviceRedisKey;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.*;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.admin.vo.RedisDeviceStatus;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.domain.PoleLightemitEntity;
import com.sandu.ximon.dao.enums.OrderByEnums;
@@ -53,6 +55,9 @@
    @Autowired
    LedSFileService xiXunFileService;
    @Autowired
    RedisUtils redisUtils;
    @PostConstruct
    public void init() {
@@ -562,4 +567,23 @@
        Map map = JSON.parseObject(requestBody, Map.class);
        return map;
    }
    /**
     * å‘Redis中存入设备状态
     */
    public void setCacheData() {
        list().forEach(
                xiXun -> {
                    RedisDeviceStatus deviceStatus = new RedisDeviceStatus();
                    boolean ledOnLine = lightemitUtils.getLedOnLine(xiXun.getLightemitControlCode());
                    if (ledOnLine) {
                        deviceStatus.setStatus(0);
                    } else {
                        deviceStatus.setStatus(1);
                    }
                    redisUtils.set(DeviceRedisKey.XIXUN + xiXun.getLightemitControlCode(), deviceStatus);
                }
        );
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/XiXunPlayerService.java
@@ -366,7 +366,6 @@
        Integer screenHeight = Integer.parseInt(lightemitUtils.getScreenHeight(lightemitControlCode));
        String size = String.valueOf(screenHeight / 18);
        //字幕主体拼接
        //TODO
        String body =
                "<head><style type=\"text/css\">body{background-color:#000;}</style></head>" +
                        "<p style=\"font-size:" + size + "px;line-height:17px;color:#fff\">" +
@@ -409,19 +408,6 @@
                    lightemitUtils.clearPlayerTask(lightemitControlCode);
                    //推送最后命令
                    lightemitUtils.sendLastCommand(lightemitControlCode);
                    /**
                     * ç†™æ±›å¤§æ°”数据推送日志记录开始
                     //                     */
//                    String content = "{设备code:" + lightemitControlCode
//                            + ", æŽ¨é€å†…容:" + body
//                            + " }";
//                    List<String> listCode = new ArrayList<>();
//                    listCode.add(lightemitControlCode);
//                    StoreOperationRecordsUtils.storeOperationData(listCode, null, "熙汛大气数据推送", content);
                    /**
                     * ç†™æ±›å¤§æ°”数据推送日志记录结束
                     */
                }
            }, 60 * 1000);
        }
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/LightTaskRelationVO.java
@@ -1,7 +1,5 @@
package com.sandu.ximon.admin.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.sandu.ximon.dao.domain.LightTask;
import lombok.Data;
/**
@@ -11,8 +9,8 @@
@Data
public class LightTaskRelationVO {
    private  Long poleId;
    private Long poleId;
    private String poleName;
    private String lightAddress;
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/RedisDeviceStatus.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.sandu.ximon.admin.vo;
import lombok.Data;
/**
 * @author LiuHaoNan
 * @date 2022/9/26
 * Redis中的设备状态实体
 */
@Data
public class RedisDeviceStatus {
    private String deviceId;
    /**
     * è®¾å¤‡çŠ¶æ€  0在线  1离线  2故障
     */
    private Integer status;
}
ximon-admin/src/main/resources/application-local.yml
@@ -65,4 +65,4 @@
nova-conf:   #诺瓦回调
  notify-url: http://112.74.63.130:20017/serv/vnnox/progress
  screen-shot-notify-url: http://112.74.63.130:20017/serv/vnnox/screenshot
  status-notify-url: http://112.74.63.130:20017/serv/vnnox/asyncStatus
  status-notify-url: http://112.74.63.130:20017/serv/vnnox/asyncStatus
ximon-admin/src/main/resources/application-prod.yml
@@ -1,4 +1,4 @@
# ç”Ÿäº§é…ç½®æ–‡ä»¶ ä¸»æœº  39.103.154.108
# ç”Ÿäº§é…ç½®æ–‡ä»¶ ä¸»æœº  39.103.154.108   127.0.0.1
server:
    port: 20018
spring:
ximon-admin/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
       active: prod
    active: prod
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
@@ -22,17 +22,12 @@
logging:
  file:
    path: logs
wx:
  pay:
    appId: dsd #微信公众号或者小程序等的appid
    mchId: dsdsd #微信支付商户号
    mchKey: dsd #微信支付商户密钥
# led屏幕服务器地址(更改需要同时更改)
realtime-server:
#  command: http://101.132.131.91:8081/payload/
#  url: http://101.132.131.91:8081/
  #  command: http://101.132.131.91:8081/payload/
  #  url: http://101.132.131.91:8081/
  command: http://112.74.63.130:20018/command/
  url: http://112.74.63.130:20018/
@@ -48,3 +43,14 @@
  secretKey: zhxm2512209
  secure: false
#音柱服务器地址
broadcastApi:
  serviceUrl: http://47.106.172.9:8000
nova-conf: #诺瓦账号密码
  username: zhxm
  password: xm2512209.
#主板rrpc通信PRODUCT_KEY
#rrpc:
#  key: a1JsfPG4iKW