2021与蓝度共同重构项目,服务端
liuhaonan
2022-08-04 681d31e1de290eebd5f5ecb0a0e07a2a66cd01ae
changes
已修改7个文件
已添加3个文件
已删除5个文件
653 ■■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/NormalProgramDto.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerProgram.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerSchedule.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerSchedulePlans.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerWidget.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerWidgetType.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/ProgramDto.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/ProgramPush.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/WeatherDto.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/WeatherProgram.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/WratherPage.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PlayPlanNvService.java 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxProgramAPIUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java
@@ -65,12 +65,19 @@
        return ResponseUtil.success(playPlanNvService.deletePlan(plianIds));
    }
    @PostMapping(value = "/push/{plianId}", produces = "application/json;charset=UTF-8")
    public ResponseVO<Object> pushToLed(@PathVariable Long plianId, @RequestBody List<NovaPushResultVO> playerIds) {
    /**
     * å®šæ—¶èŠ‚ç›®
     *
     * @param planId
     * @param playerIds
     * @return
     */
    @PostMapping(value = "/push/{planId}", produces = "application/json;charset=UTF-8")
    public ResponseVO<Object> pushToLed(@PathVariable Long planId, @RequestBody List<NovaPushResultVO> playerIds) {
        if (!permissionConfig.check(MenuEnum.LED_N_PLAY_PLAN_PUSH.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        return ResponseUtil.success(playPlanNvService.pushToLed(plianId, playerIds));
        return ResponseUtil.success(playPlanNvService.pushToLed(planId, playerIds));
    }
@@ -83,6 +90,13 @@
    }
    /**
     * å®žæ—¶èŠ‚ç›®
     *
     * @param pid
     * @param playerIds
     * @return
     */
    @PostMapping(value = "/pushProgram/{pid}", produces = "application/json;charset=UTF-8")
    public ResponseVO<Object> pushProgram(@PathVariable Long pid, @RequestBody List<NovaPushResultVO> playerIds) {
        if (!permissionConfig.check(MenuEnum.LED_N_PLAY_PLAN_PUSH.getCode())) {
@@ -91,21 +105,6 @@
        return ResponseUtil.success(playPlanNvService.pushProgram(pid, playerIds));
    }
    @PostMapping(value = "/pushWeather/{pid}", produces = "application/json;charset=UTF-8")
    public ResponseVO<Object> pushWeather(@PathVariable Long pid, @RequestBody List<NovaPushResultVO> playerIds) {
        if (!permissionConfig.check(MenuEnum.LED_N_PLAY_PLAN_PUSH.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        return ResponseUtil.success(playPlanNvService.pushProgram(pid, playerIds));
    }
    @PostMapping(value = "/pushWeatherPlan/{id}", produces = "application/json;charset=UTF-8")
    public ResponseVO<Object> pushWeatherPlan(@PathVariable Long id, @RequestBody List<NovaPushResultVO> playerIds) {
        if (!permissionConfig.check(MenuEnum.LED_N_PLAY_PLAN_PUSH.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        return ResponseUtil.success(playPlanNvService.pushWeatherToLed(id, playerIds));
    }
    @GetMapping("/listPlan")
    public ResponseVO<Object> list(BaseConditionVO baseConditionVO,
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/NormalProgramDto.java
ÎļþÒÑɾ³ý
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerProgram.java
@@ -5,7 +5,6 @@
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
 * æ™®é€šèŠ‚ç›®
@@ -16,9 +15,9 @@
    //  éœ€è¦å¤„理的播放器ID集合,最多支持100个播放器同时处理
    private List<String> playerIds;
    //  æ’­æ”¾æ—¶é—´æŽ’期,如果为空,会全天24小时循环播放
    private  Map schedule;
    private PlayerSchedule schedule;
    //  éœ€è¦æ’­æ”¾çš„页面内容集合
    private  List<ProgramDto> pages ;
    private List<PlayerPage> pages;
    //  èŠ‚ç›®ä¸‹è½½è¿›åº¦é€šçŸ¥æŽ¥å£ï¼Œä¼šé€šè¿‡æ­¤æŽ¥å£å°†èŠ‚ç›®çš„ä¸‹è½½è¿›åº¦å‘ç»™å®¢æˆ·ï¼ŒæŽ¥å£çš„å“åº”æ—¶é—´ä¸èƒ½è¶…è¿‡3s
    private String noticeUrl;
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.admin.dto.nova;
import lombok.Data;
import java.util.List;
@Data
public class PlayerSchedule {
    //  æ’­æ”¾å¼€å§‹æ—¥æœŸï¼Œå¦‚:2020-04-12
    private String startDate;
    //  æ’­æ”¾ç»“束日期 ,如:2020-12-22
    private String endDate;
    //  å…·ä½“播放计划
    private List<PlayerSchedulePlans> plans;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerSchedulePlans.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.admin.dto.nova;
import lombok.Data;
import java.util.List;
@Data
public class PlayerSchedulePlans {
    //  å‘¨å†…的播放日期,0-周日,1-周一,2-周二,3-周三,4-周四,5-周五,6-周六
    private List<Integer> weekDays;
    //  å…·ä½“当日开始时间,如:08:00
    private String startTime;
    //  å…·ä½“当日的结束时间,如:18:00
    private String endTime;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerWidget.java
@@ -19,6 +19,7 @@
    //HTML - ç½‘页媒体
    //STREAM_MEDIA - æµåª’体
    //BOX - çª—口
    //WEATHER - ç®€æ˜“天气组件
    private PlayerWidgetType type;
    //  å›¾ç‰‡å’Œè§†é¢‘为必填项,内容为图片或视频的md5值
    private String md5;
@@ -46,6 +47,46 @@
    private List<PlayerMedia> mediaList;
    //  html组件离线播放媒体(定制功能)
    private PlayerOffline offline;
    private String address;
    private Double latitude;
    private Double longitude;
    private Integer width;
    private Integer height;
    private Integer refreshPeriod;
    private Integer fontSize;
    private Boolean bold;
    private Boolean italic;
    private Boolean underline;
    private String color;
    private Integer tempUnit;
    private Integer unitSymbol;
    private Boolean weatherEnable;
    private Boolean tempEnable;
    private Boolean windEnable;
    private Boolean humidEnable;
    private Boolean currentTempEnable;
    private Boolean isShowInOneLine;
    public PlayerWidget generateMediaWidget (String widgetName,
             Integer zIndex,
@@ -150,4 +191,7 @@
        return this;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/PlayerWidgetType.java
@@ -10,6 +10,7 @@
     * HTML - ç½‘页媒体
     * STREAM_MEDIA - æµåª’体
     * BOX - çª—口
     * WEATHER - ç®€æ˜“天气组件
     */
    PICTURE,
    VIDEO,
@@ -17,6 +18,8 @@
    SIMPLE_RSS,
    HTML,
    STREAM_MEDIA,
    BOX
    BOX,
    WEATHER
}
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/ProgramDto.java
ÎļþÒÑɾ³ý
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/ProgramPush.java
ÎļþÒÑɾ³ý
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/WeatherDto.java
ÎļþÒÑɾ³ý
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/WeatherProgram.java
ÎļþÒÑɾ³ý
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/nova/WratherPage.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.sandu.ximon.admin.dto.nova;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author LiuHaoNan
 * @date 2022/8/4
 */
@NoArgsConstructor
@Data
public class WratherPage {
    private Integer zIndex;
    private String type;
    private String address;
    private Double latitude;
    private Double longitude;
    private Integer width;
    private Integer height;
    private Integer refreshPeriod;
    private Integer fontSize;
    private Boolean bold;
    private Boolean italic;
    private Boolean underline;
    private String color;
    private Integer tempUnit;
    private Integer unitSymbol;
    private Boolean weatherEnable;
    private Boolean tempEnable;
    private Boolean windEnable;
    private Boolean humidEnable;
    private Boolean currentTempEnable;
    private Boolean isShowInOneLine;
    private Integer duration;
    private PlayerLayout layout;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PlayPlanNvService.java
@@ -11,9 +11,9 @@
import com.sandu.ximon.admin.dto.PlanDto;
import com.sandu.ximon.admin.dto.SchedulesDTO;
import com.sandu.ximon.admin.dto.nova.*;
import com.sandu.ximon.admin.entity.Plans;
import com.sandu.ximon.admin.param.PlayPlanParam;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.LogUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.admin.utils.VnnoxAPIUtil;
import com.sandu.ximon.admin.utils.VnnoxProgramAPIUtil;
@@ -24,6 +24,7 @@
import com.sandu.ximon.dao.domain.*;
import com.sandu.ximon.dao.mapper.PlayPlanNvMapper;
import lombok.AllArgsConstructor;
import org.aspectj.weaver.ast.Var;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -167,6 +168,7 @@
    /**
     * æŽ¨é€å®šæ—¶èŠ‚ç›®
     *
     * @param planId
     * @param nova
     * @return
@@ -194,18 +196,20 @@
        //获取节目实体
        List<ProgramDto> programDtos = JSON.parseArray(pushToLed.getPages(), ProgramDto.class);
        List<PlayerPage> programDtos = JSON.parseArray(pushToLed.getPages(), PlayerPage.class);
        programDtos.forEach(
                programDto -> {
                    programDto.getWidgets().forEach(
                            widget -> {
                                if (!PlayerWidgetType.WEATHER.equals(widget.getType())) {
                                String url = widget.getUrl();
                                LEDProgramFile one = fileService.getOne(Wrappers.lambdaQuery(LEDProgramFile.class).eq(LEDProgramFile::getFileUrl, url));
                                if (one == null) {
                                    throw new BusinessException("节目文件已失效");
                                }
                                widget.setMd5(one.getMd5());
                                widget.setSize(one.getSize());
                                    widget.setSize(Long.parseLong(one.getSize()));
                                }
                            }
                    );
                }
@@ -214,20 +218,21 @@
        program.setPages(programDtos);
        //获取节目定时实体
        program.setSchedule((JSON.parseObject(pushToLed.getSchedule(), Map.class)));
        Map map = JSON.parseObject(pushToLed.getSchedule(), Map.class);
        map.get("plans");
        List<Plans> plans = JSON.parseArray(map.get("plans").toString(), Plans.class);
        plans.forEach(p -> {
            //删除后两位字符串
            p.setStartTime(p.getStartTime().substring(0, p.getStartTime().length() - 3));
            p.setEndTime(p.getEndTime().substring(0, p.getEndTime().length() - 3));
        });
        System.out.println(plans + "plans11111");
        map.put("plans", plans);
        program.setSchedule(map);
        PlayerSchedule playerSchedule = JSON.parseObject(pushToLed.getSchedule(), PlayerSchedule.class);
        //删除时间的后三位
        List<PlayerSchedulePlans> plans = playerSchedule.getPlans();
        plans.forEach(
                plan -> {
                    plan.setStartTime(plan.getStartTime().substring(0, plan.getStartTime().length() - 3));
                    plan.setEndTime(plan.getEndTime().substring(0, plan.getEndTime().length() - 3));
                }
        );
        program.setSchedule(playerSchedule);
        program.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
        LogUtils.error("节目内容+++++++++++" + JSON.toJSONString(program));
        VnnoxResultResponse vnnoxResultResponse = vnnoxProgramAPIUtil.normalProgram(program);
        vnnoxAPIUtil.volChange(playerIds, Integer.valueOf(pushToLed.getVolume()).intValue());
@@ -428,30 +433,38 @@
            playerIds.add(n.getPlayerId());
        });
        ProgramPush program = new ProgramPush();
        List<ProgramDto> programDtos = JSON.parseArray(pages, ProgramDto.class);
        PlayerProgram program = new PlayerProgram();
        List<PlayerPage> programDtos = JSON.parseArray(pages, PlayerPage.class);
        programDtos.forEach(
                programDto -> {
                    programDto.getWidgets().forEach(
                            widget -> {
                                if (!PlayerWidgetType.WEATHER.equals(widget.getType())) {
                                String url = widget.getUrl();
                                LEDProgramFile one = fileService.getOne(Wrappers.lambdaQuery(LEDProgramFile.class).eq(LEDProgramFile::getFileUrl, url));
                                if (one == null) {
                                    throw new BusinessException("节目文件已失效");
                                }
                                widget.setMd5(one.getMd5());
                                widget.setSize(one.getSize());
                                    widget.setSize(Long.parseLong(one.getSize()));
                                }else {
                                    //WratherPage
                                    System.out.println(widget+"widget");
                                }
                            }
                    );
                }
        );
        program.setPlayerIds(playerIds);
        //获取节目实体
        program.setPages(programDtos);
        program.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
        VnnoxResultResponse vnnoxResultResponse = vnnoxProgramAPIUtil.pushProgram(program);
        if (vnnoxResultResponse == null || vnnoxResultResponse.getData() == null) {
            throw new BusinessException("推送失败");
        }
        List<String> success = new ArrayList<>();
        List<String> fail = new ArrayList<>();
@@ -499,103 +512,5 @@
        return result;
    }
    /**
     * å®šæ—¶æŽ¨é€å¤©æ°”
     * @param planId
     * @param nova
     * @return
     */
    public Map<String, Object> pushWeatherToLed(Long planId, List<NovaPushResultVO> nova) {
        if (nova == null) {
            throw new BusinessException("请选择正确的LED屏");
        }
        PushToLed pushToLed = playPlanMapper.pushToLed(planId);
        if (pushToLed.getPages() == null) {
            throw new BusinessException("节目内容丢失");
        }
        PlayPlanNv byId = getById(planId);
        if (pushToLed == null) {
            throw new BusinessException("未找到该播放计划");
        }
        List<String> playerIds = new ArrayList<>();
        nova.forEach(n -> {
            playerIds.add(n.getPlayerId());
        });
        WeatherProgram program = new WeatherProgram();
        program.setPlayerIds(playerIds);
        //获取节目实体
        List<WeatherDto> programDtos = JSON.parseArray(pushToLed.getPages(), WeatherDto.class);
        program.setPages(programDtos);
        //获取节目定时实体
        program.setSchedule((JSON.parseObject(pushToLed.getSchedule(), Map.class)));
        Map map = JSON.parseObject(pushToLed.getSchedule(), Map.class);
        map.get("plans");
        List<Plans> plans = JSON.parseArray(map.get("plans").toString(), Plans.class);
        plans.forEach(p -> {
            //删除后两位字符串
            p.setStartTime(p.getStartTime().substring(0, p.getStartTime().length() - 3));
            p.setEndTime(p.getEndTime().substring(0, p.getEndTime().length() - 3));
        });
        map.put("plans", plans);
        program.setSchedule(map);
        program.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
        VnnoxResultResponse vnnoxResultResponse = vnnoxProgramAPIUtil.pushWeather(program);
        vnnoxAPIUtil.volChange(playerIds, Integer.valueOf(pushToLed.getVolume()).intValue());
        List<String> success = new ArrayList<>();
        List<String> fail = new ArrayList<>();
        if (vnnoxResultResponse.getData() != null) {
            success = vnnoxResultResponse.getData().getSuccess();
            fail = vnnoxResultResponse.getData().getFail();
        }
        //拼接成功失败的结果
        Map<String, Object> result = new HashMap<>();
        List<NovaPushResultVO> successList = new ArrayList<>();
        List<NovaPushResultVO> faileList = new ArrayList<>();
        List<String> finalSuccess = success;
        List<String> finalFail = fail;
        nova.forEach(n -> {
            if (finalSuccess.contains(n.getPlayerId())) {
                successList.add(n);
            } else if (finalFail.contains(n.getPlayerId())) {
                faileList.add(n);
            }
        });
        result.put("success", successList);
        result.put("fail", faileList);
        /**
         * è¯ºç“¦æŽ¨é€èŠ‚ç›®æ—¥å¿—è®°å½•å¼€å§‹
         */
        List<LedPlayerEntity> list = SpringContextHolder.getBean(LedPlayerEntityService.class)
                .list(Wrappers.lambdaQuery(LedPlayerEntity.class).in(LedPlayerEntity::getId, nova.stream().map(NovaPushResultVO::getPlayerId).toArray()));
        List<String> listCode = new ArrayList<>();
        for (LedPlayerEntity temp : list) {
            listCode.add(temp.getSn());
        }
        String content = "{节目ID:" + planId
                + ", èŠ‚ç›®åç§°ï¼š" + byId.getName()
                + "}," + " æŽ¨é€ç»“果:" + result
                + " }";
        StoreOperationRecordsUtils.storeOperationData(listCode, null, "诺瓦推送播放计划", content);
        /**
         * è¯ºç“¦æŽ¨é€èŠ‚ç›®æ—¥å¿—è®°å½•ç»“æŸ
         */
        return result;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxProgramAPIUtil.java
@@ -2,7 +2,9 @@
import com.alibaba.fastjson.JSON;
import com.sandu.ximon.admin.config.VnnoxUrl;
import com.sandu.ximon.admin.dto.nova.*;
import com.sandu.ximon.admin.dto.nova.AirDataProgram;
import com.sandu.ximon.admin.dto.nova.PlayerProgram;
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 org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +24,7 @@
    /**
     * å¤§æ°”信息推送
     *
     * @param
     * @return
     */
@@ -40,13 +43,14 @@
    /**
     * æ™®é€šèŠ‚ç›®æ’­æ”¾
     *
     * @param
     * @return
     */
    public VnnoxResultResponse normalProgram(PlayerProgram program) {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.NORMAL_PROGRAM),
                VnnoxUrl.getUrl(VnnoxUrl.WEATHER),
                program.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
@@ -57,13 +61,14 @@
    /**
     * å®žæ—¶èŠ‚ç›®æ’­æ”¾
     *
     * @param
     * @return
     */
    public VnnoxResultResponse pushProgram(ProgramPush program) {
    public VnnoxResultResponse pushProgram(PlayerProgram program) {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.NORMAL_PROGRAM),
                VnnoxUrl.getUrl(VnnoxUrl.WEATHER),
                program.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
@@ -75,6 +80,7 @@
    /**
     * å®šæ—¶èŠ‚ç›®æ’­æ”¾
     *
     * @param program
     * @return
     */
@@ -89,22 +95,6 @@
    }
    /**
     * å¤©æ°”
     * @param program
     * @return
     */
    public VnnoxResultResponse pushWeather(WeatherProgram program) {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.WEATHER),
                program.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        System.out.println(program.toJson());
        LogUtils.error("天气节目播放response:"+result);
        return JSON.parseObject(result,VnnoxResultResponse.class);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java
@@ -92,7 +92,6 @@
    public static String PostWithHeader (String URL, String json, CommonHeader header) {
        System.out.println(json);
        System.out.println("****************************************");
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost post = new HttpPost(URL);