fuliqi
2024-09-20 118be4ee52ea71cfc3d8ab702bc1702aa4286335
运行监控导出优化
8个文件已修改
118 ■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/form/VideoExportForm.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/CarTask.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/FaceTask.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/MonitorTask.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/VideoTask.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/form/VideoExportForm.java
@@ -3,6 +3,7 @@
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import java.util.List;
@@ -12,4 +13,32 @@
    private String month;
    @NotEmpty(message = "部门不能为空")
    private List<Integer> deptIds;
    // 0/1/2/3 省厅、重点点位、重点指挥图像、部级
    private List<Integer> tags;
    //设备类型 1/2/3 视频、车辆、人脸
    private Integer cameraFunType;
    private Boolean provinceTag;
    private Boolean importantTag;
    private Boolean importantCommandImageTag;
    private Boolean deptTag;
    //装配tag查询条件
    public static void convertTags(VideoExportForm form){
        List<Integer> tags = form.getTags();
        if(!CollectionUtils.isEmpty(tags)){
            if(tags.contains(0)){
                form.setProvinceTag(true);
            }
            if(tags.contains(1)){
                form.setImportantTag(true);
            }
            if(tags.contains(2)){
                form.setImportantCommandImageTag(true);
            }
            if(tags.contains(3)){
                form.setDeptTag(true);
            }
        }
    }
}
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.form.VideoExportForm;
import com.ycl.platform.domain.query.DashboardQuery;
import com.ycl.platform.domain.query.DataCenterQuery;
import com.ycl.platform.domain.query.HomeQuery;
@@ -173,5 +174,5 @@
     * @param tMonitor 设备资产
     * @return 设备资产集合
     */
    public List<TMonitorResult> selectMonitorResult(@Param("cameraFunType") Short cameraFunType,@Param("deptIds") List<Integer> deptIds);
    public List<TMonitorResult> selectMonitorResult(VideoExportForm exportForm);
}
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -387,7 +387,9 @@
    @Override
    public void exportVideoTotal(HttpServletResponse response, VideoExportForm exportForm) throws IOException {
        List<ExcelExp> mysheet = new ArrayList<>();
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds());
        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+""));
        VideoExportForm.convertTags(exportForm);
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
        Query query = getQuery(deviceIds, exportForm.getMonth());
        //月份每日在线数据
@@ -469,11 +471,15 @@
    @Override
    public void exportVideoOnline(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException {
        List<ExcelExp> mysheet = new ArrayList<>();
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds());
        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+""));
        VideoExportForm.convertTags(exportForm);
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
        Query query = getQuery(deviceIds, exportForm.getMonth());
        //月份每日在线数据
        List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
        //全量表
        List<VideoDailyExp> totalExps = new ArrayList<>();
        for (Integer deptId : exportForm.getDeptIds()) {
            List<VideoDailyExp> videoDailyExps = new ArrayList<>();
            //从数据库集合筛选部门数据
@@ -488,13 +494,22 @@
                videoDailyExp.setSerialNumber(result.getNo());
                videoDailyExp.setDeviceName(result.getName());
                videoDailyExp.setArea(areaDeptEnum == null ? "未知" : areaDeptEnum.getName());
                videoDailyExp.setTag("" + (result.getProvinceTag() ? "省厅" : "") + (result.getImportantTag() ? "、重点点位" : "") + (result.getImportantCommandImageTag() ? "、重点指挥图像" : "") + (result.getDeptTag() ? "、部级" : ""));
                String tag ="" + (result.getProvinceTag() ? "省厅、" : "") + (result.getImportantTag() ? "重点点位、" : "") + (result.getImportantCommandImageTag() ? "重点指挥图像、" : "") + (result.getDeptTag() ? "部级、" : "");
                // 删除字符串末尾的“、”
                if (tag.endsWith("、")) {
                    tag = tag.substring(0, tag.length() - 1);
                }
                videoDailyExp.setTag(tag);
                setOnlineDaily(videoDailyExp, result, onlines);
                videoDailyExps.add(videoDailyExp);
                //全量表
                totalExps.add(videoDailyExp);
            }
            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "未知" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class);
            mysheet.add(excelExp);
        }
        ExcelExp excelExp = new ExcelExp("全量", totalExps, VideoDailyExp.class);
        mysheet.add(excelExp);
        ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet);
        util.exportExcelManySheet(response, mysheet);
    }
@@ -506,11 +521,15 @@
    @Override
    public void exportVideoRecord(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException {
        List<ExcelExp> mysheet = new ArrayList<>();
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds());
        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+""));
        VideoExportForm.convertTags(exportForm);
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
        Query query = getQuery(deviceIds, exportForm.getMonth());
        //月份每日录像线数据
        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //全量表
        List<VideoDailyExp> totalExps = new ArrayList<>();
        for (Integer deptId : exportForm.getDeptIds()) {
            List<VideoDailyExp> videoDailyExps = new ArrayList<>();
            //从数据库集合筛选部门数据
@@ -525,13 +544,23 @@
                videoDailyExp.setSerialNumber(result.getNo());
                videoDailyExp.setDeviceName(result.getName());
                videoDailyExp.setArea(areaDeptEnum == null ? "未知" : areaDeptEnum.getName());
                videoDailyExp.setTag("" + (result.getProvinceTag() ? "省厅" : "") + (result.getImportantTag() ? "、重点点位" : "") + (result.getImportantCommandImageTag() ? "、重点指挥图像" : "") + (result.getDeptTag() ? "、部级" : ""));
                String tag ="" + (result.getProvinceTag() ? "省厅、" : "") + (result.getImportantTag() ? "重点点位、" : "") + (result.getImportantCommandImageTag() ? "重点指挥图像、" : "") + (result.getDeptTag() ? "部级、" : "");
                // 删除字符串末尾的“、”
                if (tag.endsWith("、")) {
                    tag = tag.substring(0, tag.length() - 1);
                }
                videoDailyExp.setTag(tag);
                setRecordDaily(videoDailyExp, result, records);
                //区县表
                videoDailyExps.add(videoDailyExp);
                //全量表
                totalExps.add(videoDailyExp);
            }
            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "未知" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class);
            mysheet.add(excelExp);
        }
        ExcelExp excelExp = new ExcelExp("全量", totalExps, VideoDailyExp.class);
        mysheet.add(excelExp);
        ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet);
        util.exportExcelManySheet(response, mysheet);
    }
@@ -542,11 +571,15 @@
    @Override
    public void exportVideoLoseTime(HttpServletResponse response, VideoExportForm exportForm) throws NoSuchFieldException, IllegalAccessException, IOException {
        List<ExcelExp> mysheet = new ArrayList<>();
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds());
        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+""));
        VideoExportForm.convertTags(exportForm);
        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
        Query query = getQuery(deviceIds, exportForm.getMonth());
        //月份每日录像线数据
        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //全量表
        List<VideoDailyExp> totalExps = new ArrayList<>();
        for (Integer deptId : exportForm.getDeptIds()) {
            List<VideoDailyExp> videoDailyExps = new ArrayList<>();
            //从数据库集合筛选部门数据
@@ -561,13 +594,22 @@
                videoDailyExp.setSerialNumber(result.getNo());
                videoDailyExp.setDeviceName(result.getName());
                videoDailyExp.setArea(areaDeptEnum == null ? "未知" : areaDeptEnum.getName());
                videoDailyExp.setTag("" + (result.getProvinceTag() ? "省厅" : "") + (result.getImportantTag() ? "、重点点位" : "") + (result.getImportantCommandImageTag() ? "、重点指挥图像" : "") + (result.getDeptTag() ? "、部级" : ""));
                String tag ="" + (result.getProvinceTag() ? "省厅、" : "") + (result.getImportantTag() ? "重点点位、" : "") + (result.getImportantCommandImageTag() ? "重点指挥图像、" : "") + (result.getDeptTag() ? "部级、" : "");
                // 删除字符串末尾的“、”
                if (tag.endsWith("、")) {
                    tag = tag.substring(0, tag.length() - 1);
                }
                videoDailyExp.setTag(tag);
                setLoseDaily(videoDailyExp, result, records);
                videoDailyExps.add(videoDailyExp);
                //全量表
                totalExps.add(videoDailyExp);
            }
            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "未知" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class);
            mysheet.add(excelExp);
        }
        ExcelExp excelExp = new ExcelExp("全量", totalExps, VideoDailyExp.class);
        mysheet.add(excelExp);
        ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet);
        util.exportExcelManySheet(response, mysheet);
    }
ycl-server/src/main/java/com/ycl/task/CarTask.java
@@ -5,6 +5,7 @@
import com.ycl.calculate.CalculationStrategy;
import com.ycl.factory.IndexCalculationFactory;
import com.ycl.platform.domain.entity.YwPoint;
import com.ycl.platform.domain.form.VideoExportForm;
import com.ycl.platform.domain.result.HK.*;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
@@ -43,7 +44,9 @@
    private YwPointMapper pointMapper;
    public void siteOnlineTask() {
        log.info("开始计算点位在线率");
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Car,null);
        VideoExportForm form = new VideoExportForm();
        form.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Car+""));
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(form);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline);
        calculator.calculate(tMonitorResults);
        log.info("结束计算视图库对接稳定性");
ycl-server/src/main/java/com/ycl/task/FaceTask.java
@@ -3,6 +3,7 @@
import com.ycl.calculate.CalculationStrategy;
import com.ycl.factory.IndexCalculationFactory;
import com.ycl.platform.domain.form.VideoExportForm;
import com.ycl.platform.domain.result.HK.*;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
@@ -39,7 +40,9 @@
    public void siteOnlineTask() {
        log.info("开始计算点位在线率");
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Face,null);
        VideoExportForm form = new VideoExportForm();
        form.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Face+""));
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(form);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline);
        calculator.calculate(tMonitorResults);
        log.info("结束计算视图库对接稳定性");
ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -62,10 +62,9 @@
    private RedisTemplate redisTemplate;
    //同步点位在线率到mongo
    //TODO:加定时任务12.过开始
    public void siteOnline() {
        log.info("开始同步点位在线率到mongo");
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(null,null);
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(null);
        if (!CollectionUtils.isEmpty(tMonitorResults)) {
            //如果存在之前的数据先删除
            Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -6,6 +6,7 @@
import com.ycl.platform.domain.entity.CheckIndexVideo;
import com.ycl.platform.domain.entity.ImageResourceSecurity;
import com.ycl.platform.domain.entity.ImageResourceSecurityDetail;
import com.ycl.platform.domain.form.VideoExportForm;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.result.UY.*;
import com.ycl.platform.domain.vo.PlatformOnlineVO;
@@ -57,7 +58,9 @@
    public void siteOnlineTask() {
        log.info("开始计算点位在线率");
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video,null);
        VideoExportForm form = new VideoExportForm();
        form.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+""));
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(form);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_SiteOnline);
        calculator.calculate(tMonitorResults);
        log.info("结束计算点位在线率");
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -182,6 +182,18 @@
                #{deptId}
            </foreach>
            </if>
            <if test="provinceTag!=null">
                and p.province_tag = #{provinceTag}
            </if>
            <if test="importantTag!=null">
                and p.important_tag = #{importantTag}
            </if>
            <if test="importantCommandImageTag!=null">
                and p.important_command_image_tag = #{importantCommandImageTag}
            </if>
            <if test="deptTag!=null">
                and p.dept_tag =#{deptTag}
            </if>
        </where>
    </select>
    <select id="selectTMonitorById" parameterType="Long" resultType="com.ycl.platform.domain.vo.TMonitorVO">