fuliqi
2024-09-01 ae9ede70c133e257baead8e36bc65063d5b5c3c9
系统优化+bug修复
15个文件已修改
115 ■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/dto/ScoreIndexDTO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/result/OSDResult.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/api/HK/HKApi.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/OsdTask.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/VideoTask.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/logback.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/dto/ScoreIndexDTO.java
@@ -12,5 +12,6 @@
    private String tableName;
    private Long deptId;
    private String date;
    private Integer examineTag;
    private List<String> quarter;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/result/OSDResult.java
@@ -35,7 +35,10 @@
     * 通道名(monitor的设备名)
     */
    private String name;
    /**
     * OSD4、5都可能为名字,两条一起比对
     */
    private String name2;
    //osd左下
    /**
     * 固、枪、路、西北
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java
@@ -3,18 +3,18 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.platform.domain.result.BaseResult;
import lombok.Data;
import org.springframework.data.mongodb.core.annotation.Collation;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
/**
 * python获取osd数据
 * 获取osd数据
 *
 * @author:xp
 * @date:2024/8/8 19:35
 */
@Data
@Collation("osd_check_result")
@Document(collection = "osd_check_result")
public class OsdCheckResult extends BaseResult {
    /**
ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
@@ -186,7 +186,7 @@
                    NET_TITLE_OSD_INFO[] stuOSD = title.stuOSD;
                    for (NET_TITLE_OSD_INFO osd : stuOSD) {
                        String osdStr = null;
                        osdStr = new String(osd.szText, StandardCharsets.UTF_8);
                        osdStr = new String(osd.szText, StandardCharsets.UTF_8).trim();
                        if (!StringUtils.isEmpty(osdStr)) {
                            osdResult.setOSD4(osdStr);
                        }
@@ -196,7 +196,7 @@
                    int num = 0;
                    for (NET_TITLE_OSD_INFO osd : stuOSD) {
                        String osdStr = null;
                        osdStr = new String(osd.szText, StandardCharsets.UTF_8);
                        osdStr = new String(osd.szText, StandardCharsets.UTF_8).trim();
                        if (!StringUtils.isEmpty(osdStr)) {
                            if(num ==0){
                                osdResult.setOSD1(osdStr);
@@ -206,6 +206,8 @@
                                osdResult.setOSD3(osdStr);
                            }else if(num ==3){
                                osdResult.setName(osdStr);
                            }else if(num ==4){
                                osdResult.setName2(osdStr);
                            }
                        }
                        num++;
ycl-server/src/main/java/com/ycl/api/HK/HKApi.java
@@ -66,17 +66,20 @@
                Node node = nodeList.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE && "TextOverlay".equals(tagName1)) {
                    Element element = (Element) node;
                    String id = element.getElementsByTagName("id").item(0).getTextContent();
                    String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent();
    //                log.info("TEXT : " + textContent);
                    if (i == 0) {
                    if ("1".equals(id)) {
                        osdResult.setOSD1(textContent);
                    } else if (i == 1) {
                    } else if ("2".equals(id)) {
                        osdResult.setOSD2(textContent);
                    } else if (i == 2) {
                    } else if ("3".equals(id)) {
                        osdResult.setOSD3(textContent);
                    } else if (i == 3) {
                    } else if ("4".equals(id)) {
                        osdResult.setName(textContent);
                    } else if (i == 4) {
                    } else if ("5".equals(id)) {
                        osdResult.setName2(textContent);
                    } else if ("7".equals(id)) {
                        osdResult.setOSD4(textContent);
                    }
                } else if (node.getNodeType() == Node.ELEMENT_NODE && "Time".equals(tagName1)) {
ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java
@@ -47,6 +47,7 @@
    //区域车辆点位在线指标的内部类
    private static class AreaStats {
        int totalCount = 0;
        int delayCount = 0;
        //0-180s
        int delayCount1 = 0;
        //180-300s
@@ -105,6 +106,7 @@
        //返回对象的引用,如果不存在会放入新的key,value
        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
        stats.totalCount += result.getDataCount();
        stats.delayCount += result.getDelayCount();
        stats.delayCount1 += result.getDataDelayCount1();
        stats.delayCount2 += result.getDataDelayCount2();
        stats.delayCount3 += result.getDataDelayCount3();
@@ -122,6 +124,7 @@
        //调用抓拍上传及时性计算方法
        Map<String, Object> param = new HashMap<>();
        param.put("totalCount", stats.totalCount);
        param.put("delayCount", stats.delayCount);
        param.put("delayCount1", stats.delayCount1);
        param.put("delayCount2", stats.delayCount2);
        param.put("delayCount3", stats.delayCount3);
ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java
@@ -42,6 +42,7 @@
    //区域人脸数据上传延迟指标的内部类
    private static class AreaStats {
        int totalCount = 0;
        int delayCount = 0;
        //0-180s
        int delayCount1 = 0;
        //180-300s
@@ -100,6 +101,7 @@
        //返回对象的引用,如果不存在会放入新的key,value
        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
        stats.totalCount += result.getDataCount();
        stats.delayCount += result.getDelayCount();
        stats.delayCount1 += result.getDataDelayCount1();
        stats.delayCount2 += result.getDataDelayCount2();
        stats.delayCount3 += result.getDataDelayCount3();
@@ -116,6 +118,7 @@
        //调用抓拍上传及时性计算方法
        Map<String, Object> param = new HashMap<>();
        param.put("totalCount", stats.totalCount);
        param.put("delayCount", stats.delayCount);
        param.put("delayCount1", stats.delayCount1);
        param.put("delayCount2", stats.delayCount2);
        param.put("delayCount3", stats.delayCount3);
ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
@@ -115,12 +115,15 @@
    //数据上传及时性
    public BigDecimal snapshopDelay(Map<String, Object> param) {
        BigDecimal totalCount = new BigDecimal((Integer) param.get("totalCount"));
        BigDecimal delayCount = new BigDecimal((Integer) param.get("delayCount"));
        BigDecimal delayCount1 = new BigDecimal((Integer) param.get("delayCount1"));
        BigDecimal delayCount2 = new BigDecimal((Integer) param.get("delayCount2"));
        BigDecimal delayCount3 = new BigDecimal((Integer) param.get("delayCount3"));
        BigDecimal result = BigDecimal.ZERO.compareTo(totalCount) == 0 ? BigDecimal.ZERO : delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE)
                .add(delayCount2.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.8")))
                .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6")));
        BigDecimal result = BigDecimal.ZERO.compareTo(totalCount) == 0 ? BigDecimal.ZERO :
                totalCount.subtract(delayCount).divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE)
                        .add(delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE))
                        .add(delayCount2.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.8")))
                        .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6")));
        return result.setScale(4, RoundingMode.HALF_UP);
    }
ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java
@@ -42,7 +42,6 @@
    //区域视频在线率的内部类
    private static class AreaStats {
        int totalSites = 0;
        int importantTotalSites = 0;
        int importantOsdAccuracySites = 0;
        int importantTimeAccuracySites = 0;
ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java
@@ -17,6 +17,7 @@
import io.swagger.annotations.ApiOperation;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.glassfish.jaxb.core.v2.TODO;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -99,7 +99,7 @@
                .setDate(checkScoreIndexDTO.getDate())
                .setQuarter(checkScoreIndexDTO.getQuarter());
        scoreIndexDTO.setParams(checkScoreIndexDTO.getParams());
        scoreIndexDTO.setExamineTag(checkScore.getExamineTag());
        //获当月份
        if(StringUtils.isEmpty(scoreIndexDTO.getDate()) && CollectionUtils.isEmpty(checkScoreIndexDTO.getQuarter())){
            //如果查询条件不含参数,查询积分对应创建时间
@@ -244,12 +244,14 @@
    @Override
    public void exportIndex(HttpServletResponse response,CheckScore checkScoreDTO) throws IOException {
        String date = checkScoreDTO.getDate();
        Integer examineTag = null;
        //如果请求参数时间为空,查这条记录的时间
        if(StringUtils.isEmpty(checkScoreDTO.getDate()) && CollectionUtils.isEmpty(checkScoreDTO.getQuarter())){
            CheckScore checkScore = getById(checkScoreDTO.getId());
            Date createTime = checkScore.getCreateTime();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
            date = formatter.format(createTime);
            examineTag = checkScore.getExamineTag();
        }
        /** 导三张sheet */
@@ -257,18 +259,27 @@
        CheckIndexCar checkIndexCar = new CheckIndexCar();
        checkIndexCar.setDate(date);
        checkIndexCar.setQuarter(checkScoreDTO.getQuarter());
        if(examineTag!=null) {
            checkIndexCar.setExamineTag(Short.parseShort(examineTag + ""));
        }
        List<CheckIndexCar> checkIndexCars = indexCarService.selectCheckIndexCarList(checkIndexCar);
        ExcelExp e1 = new ExcelExp("车辆考核指标数据",checkIndexCars,CheckIndexCar.class);
        //人脸
        CheckIndexFace checkIndexFace = new CheckIndexFace();
        checkIndexFace.setDate(date);
        checkIndexFace.setQuarter(checkScoreDTO.getQuarter());
        if(examineTag!=null) {
            checkIndexFace.setExamineTag(Short.parseShort(examineTag + ""));
        }
        List<CheckIndexFace> checkIndexFaces = indexFaceService.selectCheckIndexFaceList(checkIndexFace);
        ExcelExp e2 = new ExcelExp("人脸考核指标数据",checkIndexFaces,CheckIndexFace.class);
        //视频
        CheckIndexVideo checkIndexVideo = new CheckIndexVideo();
        checkIndexVideo.setDate(date);
        checkIndexVideo.setQuarter(checkScoreDTO.getQuarter());
        if(examineTag!=null) {
            checkIndexVideo.setExamineTag(Short.parseShort(examineTag + ""));
        }
        List<CheckIndexVideo> checkIndexVideos = indexVideoService.selectCheckIndexVideoList(checkIndexVideo);
        ExcelExp e3 = new ExcelExp("视频考核指标数据",checkIndexVideos,CheckIndexVideo.class);
ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -88,7 +88,7 @@
            );
            List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers);
            monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList());
            log.info("处理数据大小{}", monitors.size());
//            log.info("处理数据大小{}", monitors.size());
            for (TMonitor monitor : monitors) {
                executorService.submit(() -> {
                    if (DeviceType.HK.getType().equals(monitor.getDeviceType())) {
@@ -137,6 +137,7 @@
                //封装OsdCheckResult
                OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor);
                checkCorrect(osdResult, monitor, osdCheckResult);
                log.info("校验结果:{}",osdCheckResult);
                checkResults.add(osdCheckResult);
            }
            log.info("结果数据大小:{}", checkResults.size());
@@ -194,10 +195,17 @@
            }
        }
        //检查通道名是否正确
        //TODO:校验规则,这里暂时不比较全景和细节两字。
        if (!StringUtils.isEmpty(osdResult.getName()) && !StringUtils.isEmpty(monitor.getName())) {
            if (monitor.getName().equals(osdResult.getName())) {
            if (monitor.getName().equals(osdResult.getName()) || monitor.getName().replace("全景","细节").equals(osdResult.getName()) || monitor.getName().replace("细节","全景").equals(osdResult.getName())) {
                //OSD4和5都可能为名字、比较其中一条正确即可,正确了改为正确名字
                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct);
            } else {
                osdCheckResult.setOsdName(osdResult.getName());
            }else if (monitor.getName().equals(osdResult.getName2()) || monitor.getName().replace("全景","细节").equals(osdResult.getName2()) || monitor.getName().replace("细节","全景").equals(osdResult.getName2())) {
                //OSD4和5都可能为名字、比较其中一条正确即可,正确了改为正确名字
                osdCheckResult.setOsdName(osdResult.getName2());
                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct);
            }else {
                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error);
            }
        }
ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -27,6 +27,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -53,6 +54,7 @@
    private static final BigDecimal NUM = new BigDecimal("0.15");
    public void siteOnlineTask() {
        log.info("开始计算点位在线率");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算点位在线率和重点点位在线率和指挥图像在线率
        Query query = new Query();
@@ -62,9 +64,11 @@
        List<VideoOnlineResult> results = mongoTemplate.find(query, VideoOnlineResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_SiteOnline);
        calculator.calculate(results);
        log.info("结束计算点位在线率");
    }
    public void videoUsabilityTask() {
        log.info("开始计算录像可用率和重点录像可用率");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算录像可用率和重点录像可用率
        Query query = new Query();
@@ -74,15 +78,19 @@
        List<RecordMetaDSumResult> results = mongoTemplate.find(query, RecordMetaDSumResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_Usability);
        calculator.calculate(results);
        log.info("结束计算录像可用率和重点录像可用率");
    }
    public void oneMonitorFileTask() {
        log.info("开始计算一机一档注册率、档案考核比");
        //计算一机一档注册率、档案考核比
        List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList();
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_MonitorRegis_ArchiveRate);
        calculator.calculate(tMonitorVOS);
        log.info("结束计算一机一档注册率、档案考核比");
    }
    public void oneMonitorQualifyTask(){
        log.info("开始计算一机一档合格率");
        //计算一机一档合格率
        Date yesterday = DateUtils.addDays(new Date(), -1);
        Query query = new Query();
@@ -91,22 +99,27 @@
        List<MonitorQualifyResult> results = mongoTemplate.find(query, MonitorQualifyResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_MonitorQualify);
        calculator.calculate(results);
        log.info("结束计算一机一档合格率");
    }
    public void platformOnlineTask() {
        log.info("开始计算平台在线率");
        //计算平台在线率
        List<PlatformOnlineVO> list = platformOnlineMapper.yesterdayData(DateUtils.getMouthStart(new Date()), DateUtils.getMouthEnd(new Date()));
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_PlatformOnline);
        calculator.calculate(list);
        log.info("结束计算平台在线率");
    }
    public void osdTask() {
        log.info("开始计算Osd标注、时间准确率");
        //计算Osd标注、时间准确率
        Date yesterday = DateUtils.addDays(new Date(), -1);
//        Date yesterday = DateUtils.addDays(new Date(), -1);
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
                .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
        List<OsdCheckResult> results = mongoTemplate.find(query, OsdCheckResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_OsdTime);
        calculator.calculate(results);
        log.info("结束计算Osd标注、时间准确率");
    }
    /**
@@ -138,7 +151,7 @@
                    count++;
                }
            }
            imageResourceSecurity.setWeakPassword(BigDecimal.valueOf(score));
            imageResourceSecurity.setWeakPassword(BigDecimal.valueOf(score).divide(new BigDecimal(100),4, RoundingMode.HALF_UP));
            // 获取字典值-总数
            int onlineAssetsTotal = Integer.parseInt(DictUtils.getDictValue("online_assets_total", checkIndexVideo.getDeptName()));
            imageResourceSecurity.setRiskProperty(BigDecimal.valueOf(count / onlineAssetsTotal));
ycl-server/src/main/resources/logback.xml
@@ -11,7 +11,7 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- 系统日志输出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-info.log</file>
@@ -34,7 +34,7 @@
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
@@ -56,7 +56,7 @@
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 用户访问日志输出  -->
    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-user.log</file>
@@ -70,7 +70,7 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- 系统模块日志级别控制  -->
    <logger name="com.ycl" level="info" />
    <!-- Spring日志级别控制  -->
@@ -79,15 +79,17 @@
    <root level="info">
        <appender-ref ref="console" />
    </root>
    <!-- 设置 Spring Security 的日志级别为 DEBUG -->
    <logger name="org.springframework.security" level="DEBUG"/>
    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>
    <!--系统用户操作日志-->
    <logger name="sys-user" level="info">
        <appender-ref ref="sys-user"/>
    </logger>
</configuration>
</configuration>
ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
@@ -35,7 +35,7 @@
            <if test="deptId != null "> and tcs.dept_id = #{deptId}</if>
            ${params.dataScope}
        </where>
        order by create_time desc;
        order by create_time desc
    </select>
    <select id="selectCheckScoreById" parameterType="Long" resultMap="CheckScoreResult">
@@ -107,6 +107,9 @@
        select t.* from ${tableName} t
        left join sys_dept d on t.dept_id = d.dept_id
        where t.dept_id = #{deptId}
        <if test="examineTag != null">
            and examine_tag = #{examineTag}
        </if>
        <if test="date != null">
            and date_format(t.create_time,'%Y-%m') = #{date}
        </if>