fuliqi
2025-01-08 491d524a992817e164ecc6f24a771ab9ce0f0379
工单:故障类型图像质量合并
8个文件已修改
149 ■■■■ 已修改文件
ycl-common/src/main/java/enumeration/ErrorType.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/enumeration/ErrorType.java
@@ -17,20 +17,20 @@
    //通用
//    PLATFORM_OFFLINE("PLATFORMOFFLINE", "平台离线","COMMON"),
//    SEVER_INTERRUPT("SEVERINTERRUPT", "服务中断","COMMON"),
    DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线","COMMON"),
    POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误","COMMON"),
    DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线","COMMON",false),
    POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误","COMMON",false),
    //视频
    CLOCK_SKEW("CLOCKSKEW", "时钟偏差","VIDEO"),
    SIGNAL_LOSS("SIGNALMISS", "信号缺失","VIDEO"),
    SCREEN_COLOR_DEVIATION("SCREENCOLOR", "画面偏色","VIDEO"),
    SNOW_STORM("SCREENSNOW", "雪花干扰","VIDEO"),
    STRIPE_INTERFERENCE("SCREENSTRIP", "条纹干扰","VIDEO"),
    SCREEN_OCCLUSION("SCREENSHADE", "画面遮挡","VIDEO"),
    ABNORMAL_CLARITY("SCREENBLUR", "清晰度异常","VIDEO"),
    CLOCK_SKEW("CLOCKSKEW", "时钟偏差","VIDEO",true),
    SIGNAL_LOSS("SIGNALMISS", "信号缺失","VIDEO",true),
    SCREEN_COLOR_DEVIATION("SCREENCOLOR", "画面偏色","VIDEO",true),
    SNOW_STORM("SCREENSNOW", "雪花干扰","VIDEO",true),
    STRIPE_INTERFERENCE("SCREENSTRIP", "条纹干扰","VIDEO",true),
    SCREEN_OCCLUSION("SCREENSHADE", "画面遮挡","VIDEO",true),
    ABNORMAL_CLARITY("SCREENBLUR", "清晰度异常","VIDEO",true),
    //新增的图像异常,合并前面所有异常类型
    ABNORMAL_PIC("ABNORMALPIC", "图像异常","VIDEO"),
    ABNORMAL_PIC("ABNORMALPIC", "图像异常","VIDEO",false),
//    ABNORMAL_BRIGHTNESS("SCREENLIGHT", "亮度异常","VIDEO"),
    OSD_ERROR("OSD", "osd异常","VIDEO"),
    OSD_ERROR("OSD", "osd异常","VIDEO",false),
//    VIDEO_LOSS("VIDEOMISS", "录像缺失","VIDEO"),
//    VIDEO_NONE("NOVIDEO", "无录像","VIDEO"),
//    POINT_INFO_MISS("POINTINFOMISS", "点位信息不全","COMMON"),
@@ -42,16 +42,16 @@
    // 阈值
    //车辆人脸通用
    CLOCK_RIGHT("CLOCK_RIGHT", "时钟准确率异常","CARORFACE"),
    LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "长时间无数据","CARORFACE"),
    DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "数据及时性异常","CARORFACE"),
    NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "不唯一数据量异常","CARORFACE"),
    UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "白天未识别数据量异常","CARORFACE"),
    CLOCK_RIGHT("CLOCK_RIGHT", "时钟准确率异常","CARORFACE",false),
    LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "长时间无数据","CARORFACE",false),
    DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "数据及时性异常","CARORFACE",false),
    NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "不唯一数据量异常","CARORFACE",false),
    UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "白天未识别数据量异常","CARORFACE",false),
    //车辆
    CAR_SIX("CAR_SIX", "车辆六项属性不完整","CAR"),
    CAR_SIX("CAR_SIX", "车辆六项属性不完整","CAR",false),
    //人脸
    MODELING_FAIL("MODELING_FAIL", "建模失败率异常","FACE"),
    FACE_LOW("FACE_LOW", "人脸低分率异常","FACE"),
    MODELING_FAIL("MODELING_FAIL", "建模失败率异常","FACE",false),
    FACE_LOW("FACE_LOW", "人脸低分率异常","FACE",false),
    ;
    private String value;
@@ -59,17 +59,21 @@
    private String desc;
    private String category;
    //false表示在使用,true表示只做翻译不做返回字典
    private Boolean deleted;
    ErrorType(String value, String desc,String category) {
    ErrorType(String value, String desc,String category,Boolean deleted) {
        this.value = value;
        this.desc = desc;
        this.category = category;
        this.deleted = deleted;
    }
    // 根据分类获取错误类型列表
    public static List<ErrorType> getErrorTypesByCategory(String category) {
        return Arrays.stream(values())
                .filter(errorType -> errorType.getCategory() == category)
                .filter(errorType -> errorType.getCategory() == category && !errorType.getDeleted())
                .collect(Collectors.toList());
    }
ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java
@@ -31,6 +31,7 @@
     * 故障类型
     */
    private String errorType;
    private List<String> errorTypeList;
    /**
     * 工单id
ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java
@@ -39,6 +39,7 @@
     * 故障类型
     */
    private String errorType;
    private List<String> errorTypeList;
    /**
     * 状态
ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
@@ -43,6 +43,7 @@
     * 故障类型
     */
    private String errorType;
    private List<String> errorTypeList;
    /**
     * 故障类型
     */
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -348,15 +348,15 @@
        List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48);
        // 即将要添加的错误类型
        List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96);
        if(!CollectionUtils.isEmpty(inDatabaseWorkOrderList)){
        if (!CollectionUtils.isEmpty(inDatabaseWorkOrderList)) {
            WorkOrder workOrderInDB = inDatabaseWorkOrderList.get(0);
            List<String> errorNameList = workOrderInDB.getErrorTypeList();
            List<String> errorTypes = entity.getErrorTypeList();
            if(errorNameList.containsAll(errorTypes)){
            if (errorNameList.containsAll(errorTypes)) {
                return Result.error("已有同种故障类型工单");
            }else {
            } else {
                for (String errorType : errorTypes) {
                    if(!errorNameList.contains(errorType)){
                    if (!errorNameList.contains(errorType)) {
                        // 错误类型不一样,就新增一个错误类型,并且重置工单状态为待处理
                        WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
                        workOrderErrorType.setWorkOrderNo(workOrderInDB.getWorkOrderNo());
@@ -394,7 +394,7 @@
                }
            }
            return Result.ok("添加成功");
        }else {
        } else {
            //数据库没有正在进行的工单
            //查redis今日工单数量
            int workOrderNum = 0;
@@ -421,7 +421,7 @@
            workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
            if (baseMapper.insert(entity) > 0) {
                return Result.ok("添加成功");
            }else {
            } else {
                return Result.error("添加失败");
            }
        }
@@ -660,6 +660,20 @@
        }
        if (query.getStart() != null) query.setStart(DateUtils.getDayStart(query.getStart()));
        if (query.getEnd() != null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
        if (query.getErrorType() != null) {
            List<String> errorTypeList = new ArrayList<>();
            errorTypeList.add(query.getErrorType());
            if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) {
                //List添加之前几种工单类型
                errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue());
                errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue());
                errorTypeList.add(ErrorType.SNOW_STORM.getValue());
                errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue());
                errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue());
                errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue());
            }
            query.setErrorTypeList(errorTypeList);
        }
        baseMapper.page(page, query);
        if (!CollectionUtils.isEmpty(page.getRecords())) {
            page.getRecords().stream().forEach(item -> {
@@ -1119,6 +1133,7 @@
    /**
     * 工单导出的逻辑
     * 标签:同一个ip标签合在一起,针对离线工单(ip相同就不会生成工单),方便运维处理
     *
     * @param query
     * @return
     */
@@ -1129,8 +1144,22 @@
        }
        if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00");
        if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59");
        if (query.getErrorType() != null) {
            List<String> errorTypeList = new ArrayList<>();
            errorTypeList.add(query.getErrorType());
            if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) {
                //List添加之前几种工单类型
                errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue());
                errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue());
                errorTypeList.add(ErrorType.SNOW_STORM.getValue());
                errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue());
                errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue());
                errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue());
            }
            query.setErrorTypeList(errorTypeList);
        }
        List<WorkOrderVO> export = baseMapper.export(query);
        if(CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>();
        if (CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>();
        List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList());
        //查出相同ip的设备、并查出标签
        List<TMonitorResult> monitorVOS = monitorMapper.getByIp(ips);
@@ -1145,7 +1174,7 @@
                tMonitorResult.setDynamicColumnList(map.get(pointId));
            }
        }
        export.forEach(result->{
        export.forEach(result -> {
            StringBuilder dynamicTag = new StringBuilder("");
            Boolean provinceTagVideo = false;
            Boolean provinceTagCar = false;
@@ -1156,13 +1185,13 @@
            List<String> dynamicTags = new ArrayList<>();
            for (TMonitorResult tagVO : monitorVOS) {
                //省厅标签通过ip判断 (运维要求)
                if(tagVO.getIp().equals(result.getIp())){
                    if(tagVO.getProvinceTagVideo()) provinceTagVideo = true;
                    if(tagVO.getProvinceTagCar()) provinceTagCar = true;
                    if(tagVO.getProvinceTagFace()) provinceTagFace = true;
                    if(tagVO.getImportantTag()) importantTag = true;
                    if(tagVO.getImportantCommandImageTag()) importantCommandImageTag = true;
                    if(tagVO.getDeptTag()) deptTag = true;
                if (tagVO.getIp().equals(result.getIp())) {
                    if (tagVO.getProvinceTagVideo()) provinceTagVideo = true;
                    if (tagVO.getProvinceTagCar()) provinceTagCar = true;
                    if (tagVO.getProvinceTagFace()) provinceTagFace = true;
                    if (tagVO.getImportantTag()) importantTag = true;
                    if (tagVO.getImportantCommandImageTag()) importantCommandImageTag = true;
                    if (tagVO.getDeptTag()) deptTag = true;
                }
                //动态列根据国标判断
                if (tagVO.getNo().equals(result.getSerialNumber())) {
@@ -1170,7 +1199,8 @@
                    if (!CollectionUtils.isEmpty(tagVO.getDynamicColumnList())) {
                        List<DynamicColumnVO> dynamicColumnList = tagVO.getDynamicColumnList();
                        for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
                            if(!dynamicTags.contains(dynamicColumnVO.getColumnValue())) dynamicTags.add(dynamicColumnVO.getColumnValue());
                            if (!dynamicTags.contains(dynamicColumnVO.getColumnValue()))
                                dynamicTags.add(dynamicColumnVO.getColumnValue());
                        }
                    }
                }
@@ -1178,7 +1208,7 @@
            for (String tag : dynamicTags) {
                dynamicTag.append(tag).append("、");
            }
            StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "省厅视频、" : "")+(provinceTagCar ? "省厅车辆、" : "")+(provinceTagFace ? "省厅人脸、" : "") + (importantTag ? "重点点位、" : "") + (importantCommandImageTag ? "重点指挥图像、" : "") + (deptTag ? "部级、" : ""));
            StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "省厅视频、" : "") + (provinceTagCar ? "省厅车辆、" : "") + (provinceTagFace ? "省厅人脸、" : "") + (importantTag ? "重点点位、" : "") + (importantCommandImageTag ? "重点指挥图像、" : "") + (deptTag ? "部级、" : ""));
            if (tag.toString().endsWith("、")) {
                tag = new StringBuilder(tag.substring(0, tag.length() - 1));
            }
ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java
@@ -23,6 +23,7 @@
import com.ycl.system.page.PageUtil;
import com.ycl.utils.DateUtils;
import com.ycl.utils.SecurityUtils;
import enumeration.ErrorType;
import lombok.RequiredArgsConstructor;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.BeanUtils;
@@ -222,6 +223,20 @@
        if(query.getEnd()!=null) {
            query.setEnd(DateUtils.getDayEnd(query.getEnd()));
        }
        if (query.getErrorType() != null) {
            List<String> errorTypeList = new ArrayList<>();
            errorTypeList.add(query.getErrorType());
            if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) {
                //List添加之前几种工单类型
                errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue());
                errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue());
                errorTypeList.add(ErrorType.SNOW_STORM.getValue());
                errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue());
                errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue());
                errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue());
            }
            query.setErrorTypeList(errorTypeList);
        }
        List<YwUnit> ywUnits = baseMapper.selectList(null);
        List<YwUnitVO> lists = ywUnits.stream().map(item -> {
            YwUnitVO vo = new YwUnitVO();
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -68,12 +68,15 @@
        <if test="query.unitId != null">
            AND wo.unit_id = #{query.unitId}
        </if>
        <if test="query.errorType != null and query.errorType != ''">
        <if test="query.errorTypeList != null and query.errorTypeList.size>0">
            AND (EXISTS (
            SELECT 1
            FROM t_work_order_error_type twoet
            WHERE twoet.work_order_no = wo.work_order_no
            AND twoet.error_name = #{query.errorType}
            AND twoet.error_name in
            <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType">
                        #{errorType}
            </foreach>
            ))
        </if>
        <if test="query.keyword != null and query.keyword != ''">
@@ -142,12 +145,15 @@
        <if test="query.start != null and query.end != null">
            AND wo.create_time BETWEEN #{query.start} AND #{query.end}
        </if>
        <if test="query.errorType != null and query.errorType !='' ">
        <if test="query.errorTypeList != null and query.errorTypeList.size>0">
            AND (EXISTS (
            SELECT 1
            FROM t_work_order_error_type twoet
            WHERE twoet.work_order_no = wo.work_order_no
            AND twoet.error_name = #{query.errorType}
            AND twoet.error_name in
            <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType">
                #{errorType}
            </foreach>
            ))
        </if>
        GROUP BY
ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
@@ -57,12 +57,15 @@
        <if test="query.start != null and query.end != null">
            AND wo.create_time BETWEEN #{query.start} AND #{query.end}
        </if>
        <if test="query.errorType != null and query.errorType !='' ">
        <if test="query.errorTypeList != null and query.errorTypeList.size>0">
            AND (EXISTS (
            SELECT 1
            FROM t_work_order_error_type twoet
            WHERE twoet.work_order_no = wo.work_order_no
            AND twoet.error_name = #{query.errorType}
            AND twoet.error_name in
            <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType">
                #{errorType}
            </foreach>
            ))
        </if>
    </select>