fuliqi
2025-02-14 c6976365d5bfb39a32db8b541b1fe3ceb30c7826
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -13,6 +13,7 @@
import com.ycl.platform.domain.entity.*;
import com.ycl.platform.domain.form.*;
import com.ycl.platform.domain.query.*;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.vo.*;
import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO;
import com.ycl.platform.domain.vo.screen.WorkOrderRegionVO;
@@ -34,6 +35,7 @@
import com.ycl.utils.http.HttpUtils;
import com.ycl.utils.redis.RedisCache;
import com.ycl.utils.uuid.IdUtils;
import constant.ApiConstants;
import constant.Constants;
import constant.RedisConstant;
import enumeration.ErrorType;
@@ -78,6 +80,9 @@
public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService {
    private final YwPointService ywPointService;
    private final YwPointMapper ywPointMapper;
    private final TMonitorMapper monitorMapper;
    private final DynamicColumnMapper dynamicColumnMapper;
    private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper;
    private final WorkOrderAuditingRecordService workOrderAuditingRecordService;
    private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper;
@@ -211,7 +216,7 @@
        List<String> willAddSerialNumber = waitAddList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
        //只生成考核设备、且有运维单位的工单
        List<YwPoint> pointList = new LambdaQueryChainWrapper<>(ywPointService.getBaseMapper())
                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getProvinceTag, YwPoint::getImportantCommandImageTag)
                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getImportantCommandImageTag)
                .in(YwPoint::getSerialNumber, willAddSerialNumber)
                .eq(YwPoint::getExamineStatus, Boolean.TRUE)
                .isNotNull(YwPoint::getUnitId)
@@ -345,15 +350,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());
@@ -391,7 +396,7 @@
                }
            }
            return Result.ok("添加成功");
        }else {
        } else {
            //数据库没有正在进行的工单
            //查redis今日工单数量
            int workOrderNum = 0;
@@ -418,7 +423,7 @@
            workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
            if (baseMapper.insert(entity) > 0) {
                return Result.ok("添加成功");
            }else {
            } else {
                return Result.error("添加失败");
            }
        }
@@ -467,10 +472,25 @@
                UrgentLevelEnum.WARNING,
                workOrder.getWorkOrderNo());
        notifyService.save(notify);
        List<WorkOrderVO> workOrderVOS = workOrderErrorTypeMapper.getErrorListByNumbers(Arrays.asList(workOrder.getWorkOrderNo()));
        // 同步点位状态
        if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
            ywPointService.updateRecovery(Collections.singletonList(workOrder.getSerialNumber()), 0);
            //如果工单为离线工单那么修改点位pingOnline为在线
            if (!CollectionUtils.isEmpty(workOrderVOS)) {
                List<String> ips = new ArrayList<>();
                for (WorkOrderVO workOrderVO : workOrderVOS) {
                    if(ErrorType.DEVICE_OFFLINE.getValue().equals(workOrderVO.getErrorType())){
                        ips.add(workOrderVO.getIp());
                    }
                }
                if(!CollectionUtils.isEmpty(ips)) {
                    monitorMapper.batchUpdateOnline(ips, new Date(), ApiConstants.UY_OnlineSite_Online);
                }
            }
        }
        return Result.ok("操作成功");
    }
@@ -510,11 +530,30 @@
                    workOrder.getWorkOrderNo());
            notifies.add(notify);
        }
        notifyService.saveBatch(notifies);
        // 同步点位状态
        if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
            ywPointService.updateRecovery(serialNumbers, 0);
            //筛选出离线工单ip并修改在线状态
            if (!CollectionUtils.isEmpty(serialNumbers)) {
                Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(workOrderNoList).stream().collect(Collectors.groupingBy(
                        WorkOrderVO::getIp,
                        Collectors.mapping(
                                WorkOrderVO::getErrorType,
                                Collectors.toList()
                        )
                ));
                List<String> ips = new ArrayList<>();
                errorTypes.forEach((key, value) -> {
                    if (!CollectionUtils.isEmpty(value) && value.contains(ErrorType.DEVICE_OFFLINE.getValue())) {
                        ips.add(key);
                    }
                });
                if(!CollectionUtils.isEmpty(ips)) {
                    monitorMapper.batchUpdateOnline(ips, new Date(), ApiConstants.UY_OnlineSite_Online);
                }
            }
        }
        notifyService.saveBatch(notifies);
        return Result.ok("操作成功");
    }
@@ -657,6 +696,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 -> {
@@ -1113,6 +1166,13 @@
        return Result.ok().data(workOrder);
    }
    /**
     * 工单导出的逻辑
     * 标签:同一个ip标签合在一起,针对离线工单(ip相同就不会生成工单),方便运维处理
     *
     * @param query
     * @return
     */
    @Override
    public List<WorkOrderVO> export(WorkOrderExportQuery query) {
        if (query.getUnitId() == null) {
@@ -1120,8 +1180,81 @@
        }
        if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00");
        if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59");
        return baseMapper.export(query);
        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>();
        List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList());
        //查出相同ip的设备、并查出标签
        List<TMonitorResult> monitorVOS = monitorMapper.getByIp(ips);
        //获取动态列数据
        List<Integer> pointIds = monitorVOS.stream().map(TMonitorResult::getPointId).collect(Collectors.toList());
        List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds);
        //补充动态列数据
        if (!CollectionUtils.isEmpty(dynamics)) {
            Map<Integer, List<DynamicColumnVO>> map = dynamics.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefId));
            for (TMonitorResult tMonitorResult : monitorVOS) {
                Integer pointId = tMonitorResult.getPointId();
                tMonitorResult.setDynamicColumnList(map.get(pointId));
            }
        }
        export.forEach(result -> {
            StringBuilder dynamicTag = new StringBuilder("");
            Boolean provinceTagVideo = false;
            Boolean provinceTagCar = false;
            Boolean provinceTagFace = false;
            Boolean importantTag = false;
            Boolean importantCommandImageTag = false;
            Boolean deptTag = false;
            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.getNo().equals(result.getSerialNumber())) {
                    //动态列处理加在标签里
                    if (!CollectionUtils.isEmpty(tagVO.getDynamicColumnList())) {
                        List<DynamicColumnVO> dynamicColumnList = tagVO.getDynamicColumnList();
                        for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
                            if (!dynamicTags.contains(dynamicColumnVO.getColumnValue()))
                                dynamicTags.add(dynamicColumnVO.getColumnValue());
                        }
                    }
                }
            }
            for (String tag : dynamicTags) {
                dynamicTag.append(tag).append("、");
            }
            StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "省厅视频、" : "") + (provinceTagCar ? "省厅车辆、" : "") + (provinceTagFace ? "省厅人脸、" : "") + (importantTag ? "重点点位、" : "") + (importantCommandImageTag ? "重点指挥图像、" : "") + (deptTag ? "部级、" : ""));
            if (tag.toString().endsWith("、")) {
                tag = new StringBuilder(tag.substring(0, tag.length() - 1));
            }
            if (dynamicTag.toString().endsWith("、")) {
                dynamicTag = new StringBuilder(dynamicTag.substring(0, dynamicTag.length() - 1));
            }
            result.setTag(tag.toString());
            result.setDynamicTag(dynamicTag.toString());
        });
        return export;
    }
    /**