2021与蓝度共同重构项目,服务端
liuhaonan
2022-09-15 60fc84976142a9019effbbb79c4d43bc4a4a3b36
changes
已修改5个文件
已添加2个文件
254 ■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/PushAirDataToNovaParam.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxProgramAPIUtil.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/NovaWeatherVO.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java
@@ -17,6 +17,8 @@
    public static String CHANGE_BRIGHTNESS = "/v1/player/immediateControl/brightness";
    //  æ™®é€šèŠ‚ç›®
    public static String NORMAL_PROGRAM = "/v1/player/program/normal";
    //推送天气使用 å•页紧急任务
    public static String EMERGENCY_PROGRAM = "/v1/player/program/emergency";
    //  æˆªå›¾
    public static String SCREEN_SHOT = "/v1/player/control/screenshot";
    //  é‡å¯
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java
@@ -6,15 +6,13 @@
import com.github.pagehelper.PageHelper;
import com.sandu.common.domain.CommonPage;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.security.annotation.AnonymousAccess;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.dto.DeviceStatus;
import com.sandu.ximon.admin.dto.DeviceStatusDto;
import com.sandu.ximon.admin.param.PoleBindParam;
import com.sandu.ximon.admin.param.PoleBindingParam;
import com.sandu.ximon.admin.param.PoleParam;
import com.sandu.ximon.admin.param.PoleStatesParam;
import com.sandu.ximon.admin.param.*;
import com.sandu.ximon.admin.security.PermissionConfig;
import com.sandu.ximon.admin.service.AirEquipmentService;
import com.sandu.ximon.admin.service.IpVolumeService;
@@ -388,12 +386,15 @@
    /**
     * æŽ¨é€å¤§æ°”设备到诺瓦
     */
    @GetMapping("/pushAidDataToNova/{poleId}")
    public ResponseVO<Object> pushAirDataToNova(@PathVariable Long poleId) {
    @GetMapping("/pushAidDataToNova")
    public ResponseVO<Object> pushAirDataToNova(@RequestBody @Validated PushAirDataToNovaParam param) {
        if (!permissionConfig.check(MenuEnum.PUSH_AIR_DATA_TO_NOVA.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        return ResponseUtil.success(poleService.pushAirDataToNova(poleId));
        if (param.getDuration() <= 0 || param.getDuration() > 86400000) {
            throw new BusinessException("播放时间需大于零且小于86400000 !");
        }
        return ResponseUtil.success(poleService.pushAirDataToNova(param));
    }
    /**
ximon-admin/src/main/java/com/sandu/ximon/admin/param/PushAirDataToNovaParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.sandu.ximon.admin.param;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
 * @author LiuHaoNan
 * @date 2022/9/15
 * æŽ¨é€å¤§æ°”数据到熙讯参数接收
 */
@Data
public class PushAirDataToNovaParam {
    @NotNull(message = "灯杆时间不能为空")
    private Long poleId;
        @NotNull(message = "播放时间(毫秒)不能为空且大于0")
//    @Min(value = 0, message = "播放时间(毫秒)不能为空且大于0")
    private Long duration;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -32,6 +32,7 @@
import com.sandu.ximon.admin.param.PoleBindingParam;
import com.sandu.ximon.admin.param.PoleParam;
import com.sandu.ximon.admin.param.PoleStatesParam;
import com.sandu.ximon.admin.param.PushAirDataToNovaParam;
import com.sandu.ximon.admin.redis.LightKey;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.LightemitUtils;
@@ -937,7 +938,8 @@
    /**
     * æŽ¨é€å¤§æ°”监测数据到novaLED
     */
    public VnnoxResult pushAirDataToNova(Long poleId) {
    public VnnoxResult pushAirDataToNova(PushAirDataToNovaParam param) {
        Long poleId=param.getPoleId();
        Pole pole = getById(poleId);
        PoleBinding air = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 3));
        PoleBinding nova = poleBindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId).eq(PoleBinding::getDeviceType, 1));
@@ -954,7 +956,8 @@
        //获取大气监测数据
        A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage data = SpringContextHolder.getBean(AirDataService.class).getDataByPoleid(poleId);
        //推送数据
        return SpringContextHolder.getBean(VnnoxService.class).publishWaterData(LED.getPlayerId(), data);
//        return SpringContextHolder.getBean(VnnoxService.class).publishWaterData(LED.getPlayerId(),param.getDuration(), data);
        return SpringContextHolder.getBean(VnnoxService.class).WaterData(LED.getPlayerId(),param.getDuration(), data);
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java
@@ -18,6 +18,7 @@
import com.sandu.ximon.admin.utils.response.VnnoxResultResponse;
import com.sandu.ximon.admin.vo.NovaPushResultVO;
import com.sandu.ximon.admin.vo.NovaScreenShorUrlVO;
import com.sandu.ximon.admin.vo.NovaWeatherVO;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import com.sandu.ximon.dao.domain.LedPlayerInfoEntity;
import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity;
@@ -563,35 +564,27 @@
    }
    public VnnoxResult publishWaterData(String playerId, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
    public VnnoxResult WaterData(String playerId, Long duration, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
        List<String> playerIds = new ArrayList<>();
        playerIds.add(playerId);
        AirDataProgram playerProgram = new AirDataProgram();
        NovaWeatherVO playerProgram = new NovaWeatherVO();
        playerProgram.setPlayerIds(playerIds);
        PlayerPage playerPage = new PlayerPage();
        playerPage.setName("AirData page");
        List<PlayerWidget> widgetList = generateWaterAndSensorWidget(poleSensorEntity);
        playerPage.setWidgets(widgetList);
        List<PlayerPage> list = new ArrayList<>();
        list.add(playerPage);
        playerProgram.setPages(list);
        playerProgram.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
        /**
         * è¯ºç“¦æŽ¨é€å¤§æ°”数据 æ—¥å¿—记录开始
         ////         */
//        String content = "{诺瓦playerId:" + playerId + ",节目内容:" + JSON.toJSONString(playerProgram) + " }";
//        StoreOperationRecordsUtils.storeOperationData(null, null, "大气数据推送到诺瓦", content);
        /**
         * è¯ºç“¦æŽ¨é€å¤§æ°”数据 æ—¥å¿—记录结束
         */
        return vnnoxProgramAPIUtil.normalProgram(playerProgram).getData();
        NovaWeatherVO.AttributeDTO attributeDTO = new NovaWeatherVO.AttributeDTO();
        attributeDTO.setDuration(duration);
        playerProgram.setAttribute(attributeDTO);
        List<NovaWeatherVO.PageDTO.WidgetsDTO> widgets = setWeather(duration, poleSensorEntity);
        NovaWeatherVO.PageDTO page = new NovaWeatherVO.PageDTO();
        page.setWidgets(widgets);
        playerProgram.setPage(page);
        return vnnoxProgramAPIUtil.emergencyProgram(playerProgram).getData();
    }
    private List<PlayerWidget> generateWaterAndSensorWidget(A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
    private List<NovaWeatherVO.PageDTO.WidgetsDTO> setWeather(Long duration, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
        List widgetList = new ArrayList<>();
        List<NovaWeatherVO.PageDTO.WidgetsDTO> widgets = new ArrayList<>();
        List<String> list = new ArrayList<>();
        if (Objects.nonNull(poleSensorEntity)) {
            list.add("环境监测:");
@@ -601,11 +594,49 @@
            list.add("pm10:" + poleSensorEntity.getPm10() + "μg/m³");
            list.add("甲醛:" + poleSensorEntity.getEch2o() + "μg/m³");
            list.add("CO2:" + poleSensorEntity.getCo2() + "ppm");
        } else {
            list.add("大气设备不在线");
            list.add("目前是固定数据:");
            list.add("环境监测:");
            list.add("温度: 40°");
            list.add("湿度: 60%");
            list.add("pm25:0.58 Î¼g/m³");
            list.add("pm10:0.58 Î¼g/m³");
            list.add("甲醛:99.9 Î¼g/m³");
            list.add("CO2:200 ppm");
        }
        widgetList.add(new PlayerWidget().generateScrollUpTextWidget("weather", 1, 100000L, list, "#FFFFFF", 15, new PlayerLayout("0%", "5%", "100%", "100%")));
        return widgetList;
        List<NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO> lines = new ArrayList<>();
        list.forEach(
                txt -> {
                    List<NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO.TextAttributesDTO> textAttributes = new ArrayList<>();
                    NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO linesDTO = new NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO();
                    NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO.TextAttributesDTO textAttributesDTO = new NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO.TextAttributesDTO();
                    textAttributesDTO.setContent(txt);
                    textAttributes.add(textAttributesDTO);
                    System.out.println(txt + "文本内容");
                    linesDTO.setTextAttributes(textAttributes);
                    lines.add(linesDTO);
                }
        );
        NovaWeatherVO.PageDTO.WidgetsDTO widgetsDTO = new NovaWeatherVO.PageDTO.WidgetsDTO();
        NovaWeatherVO.PageDTO.WidgetsDTO.ScrollAttributeDTO scrollAttribute = new NovaWeatherVO.PageDTO.WidgetsDTO.ScrollAttributeDTO();
        NovaWeatherVO.PageDTO.WidgetsDTO.LayoutDTO layout = new NovaWeatherVO.PageDTO.WidgetsDTO.LayoutDTO();
        widgetsDTO.setScrollAttribute(scrollAttribute);
        widgetsDTO.setLayout(layout);
        widgetsDTO.setLines(lines);
        widgetsDTO.setDuration(duration);
        widgets.add(widgetsDTO);
        System.out.println(lines + "播放内容");
        return widgets;
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxProgramAPIUtil.java
@@ -7,6 +7,7 @@
import com.sandu.ximon.admin.dto.nova.ProgramSchedule;
import com.sandu.ximon.admin.utils.request.CommonHeader;
import com.sandu.ximon.admin.utils.response.VnnoxResultResponse;
import com.sandu.ximon.admin.vo.NovaWeatherVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -28,7 +29,25 @@
     * @param
     * @return
     */
    public VnnoxResultResponse normalProgram(AirDataProgram program) {
    public VnnoxResultResponse emergencyProgram(NovaWeatherVO program) {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.EMERGENCY_PROGRAM),
                program.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        System.out.println(program.toJson());
        LogUtils.error("节目播放response:" + result);
        return JSON.parseObject(result, VnnoxResultResponse.class);
    }
    /**
     * å¤§æ°”信息推送
     *
     * @param
     * @return
     */
    public VnnoxResultResponse emergencyProgram(AirDataProgram program) {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.NORMAL_PROGRAM),
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/NovaWeatherVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
package com.sandu.ximon.admin.vo;
import com.sandu.ximon.admin.config.VnnoxConstant;
import com.sandu.ximon.admin.utils.request.VnnoxRequest;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
 * @author LiuHaoNan
 * @date 2022/9/15
 */
@NoArgsConstructor
@Data
public class NovaWeatherVO implements VnnoxRequest {
    private List<String> playerIds;
    private AttributeDTO attribute;
    private PageDTO page;
    @NoArgsConstructor
    @Data
    public static class AttributeDTO {
        private String spotsType = "IMMEDIATELY";
        private String normalProgramStatus = "PAUSE";
        private Long duration;
    }
    @Data
    public static class PageDTO {
        private String name = "weateher_page";
        private List<WidgetsDTO> widgets;
        @NoArgsConstructor
        @Data
        public static class WidgetsDTO {
            private String type = "ARCH_TEXT";
            private String displayType = "SCROLL";
            private String backgroundColor = "#00000000";
            private ScrollAttributeDTO scrollAttribute;
            private Long duration;
            private List<LinesDTO> lines;
            private LayoutDTO layout;
            @NoArgsConstructor
            @Data
            public static class ScrollAttributeDTO {
                private String animation = "MARQUEE_UP";
                private Integer speed = 1;
            }
            @NoArgsConstructor
            @Data
            public static class LayoutDTO {
                private String x = "0%";
                private String y = "5%";
                private String width = "100%";
                private String height = "100%";
            }
            @NoArgsConstructor
            @Data
            public static class LinesDTO {
                private List<TextAttributesDTO> textAttributes;
                @NoArgsConstructor
                @Data
                public static class TextAttributesDTO {
                    private String content;
                    private Integer fontSize = 15;
                    private String textColor = "#FFFFFF";
                    private Boolean isUnderline = false;
                }
            }
        }
    }
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}