xiangpei
2024-08-09 26196805b7b61b0caaace961e616ffd10fbbdf92
阈值生成工单接口重构、点位标签调整
11个文件已修改
154 ■■■■ 已修改文件
ycl-common/src/main/java/enumeration/general/WorkOrderDistributeWayEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/MonitorTask.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/enumeration/general/WorkOrderDistributeWayEnum.java
@@ -16,6 +16,7 @@
    SELECTED_DISTRIBUTE("SELECTED_DISTRIBUTE", "选择下发"),
    ALL_DISTRIBUTE("ALL_DISTRIBUTE", "全部下发"),
    FAST_DISTRIBUTE("FAST_DISTRIBUTE", "快捷下发"),
    DIRECT_DISTRIBUTE("DIRECT_DISTRIBUTE", "超阈值自动下发"),
    ;
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
@@ -5,8 +5,6 @@
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.platform.base.AbsEntity;
import enumeration.general.ImportantTagEnum;
import enumeration.general.ProvinceTagEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -65,11 +63,15 @@
    @ApiModelProperty("重点点位标签")
    @TableField("important_tag")
    private ImportantTagEnum importantTag;
    private Boolean importantTag;
    @ApiModelProperty("省厅点位标签")
    @TableField("province_tag")
    private ProvinceTagEnum provinceTag;
    private Boolean provinceTag;
    @ApiModelProperty("重点指挥图像标签")
    @TableField("important_command_image_tag")
    private Boolean importantCommandImageTag;
    @TableField("serial_number")
    private String serialNumber;
ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java
@@ -6,9 +6,6 @@
import com.ycl.system.domain.group.Add;
import com.ycl.platform.base.AbsForm;
import com.ycl.platform.domain.entity.YwPoint;
import enumeration.general.ImportantTagEnum;
import enumeration.general.ProvinceTagEnum;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.beans.BeanUtils;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@@ -18,9 +15,7 @@
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * 运维点位表单
@@ -46,9 +41,14 @@
    private Long deptId;
    @ApiModelProperty("省厅点位标签")
    private ProvinceTagEnum provinceTag;
    private Boolean provinceTag;
    @ApiModelProperty("重点点位标签")
    private ImportantTagEnum importantTag;
    private Boolean importantTag;
    @ApiModelProperty("重点指挥图像标签")
    private Boolean importantCommandImageTag;
    @ApiModelProperty("运维状态")
    private String status;
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java
@@ -4,16 +4,12 @@
import com.ycl.platform.base.AbsVo;
import com.ycl.platform.domain.entity.YwPoint;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import enumeration.general.ImportantTagEnum;
import enumeration.general.ProvinceTagEnum;
import org.springframework.lang.NonNull;
import org.springframework.beans.BeanUtils;
import lombok.Data;
import lombok.experimental.Accessors;
/**
 * 运维点位展示
@@ -53,9 +49,11 @@
    private String deptName;
    /** 重点点位标签 */
    private ImportantTagEnum importantTag;
    private Boolean importantTag;
    /** 省厅点位标签 */
    private ProvinceTagEnum provinceTag;
    private Boolean provinceTag;
    /** 重点指挥图像标签 */
    private Boolean importantCommandImageTag;
    public static YwPointVO getVoByEntity(@NonNull YwPoint entity, YwPointVO vo) {
        if(vo == null) {
ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
@@ -119,13 +119,13 @@
    //返回省厅国标码集合
    public List<String> getProvince() {
        List<YwPoint> province = pointMapper.selectByTag(null, "province");
        List<YwPoint> province = pointMapper.selectByTag(null, Boolean.TRUE);
        return province.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
    }
    //返回重点点位集合
    public List<String> getImportant() {
        List<YwPoint> important = pointMapper.selectByTag("important", null);
        List<YwPoint> important = pointMapper.selectByTag(Boolean.TRUE, null);
        return important.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
    }
ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java
@@ -40,7 +40,7 @@
    /**
     * 通过标签查重点点位或省厅点位
     */
    List<YwPoint> selectByTag(@Param("important")String important, @Param("province")String province);
    List<YwPoint> selectByTag(@Param("important")Boolean important, @Param("province")Boolean province);
    /**
     * 导出数据
ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -21,12 +21,13 @@
public interface WorkOrderService extends IService<WorkOrder> {
    /**
     * 系统内部的添加
     * 系统内部的添加,下发
     *
     * @param workOrderList
     * @return
     */
    Boolean innerAdd(List<WorkOrder> workOrderList);
    Boolean addWaitDistribute(List<WorkOrder> workOrderList);
    /**
     * 添加
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -21,16 +21,15 @@
import com.ycl.platform.service.WorkOrderService;
import com.ycl.platform.service.YwPointService;
import com.ycl.system.Result;
import com.ycl.system.domain.SysConfig;
import com.ycl.system.mapper.SysConfigMapper;
import com.ycl.system.model.LoginUser;
import com.ycl.system.page.PageUtil;
import com.ycl.utils.DateUtils;
import com.ycl.utils.SecurityUtils;
import com.ycl.utils.redis.RedisCache;
import com.ycl.utils.uuid.IdUtils;
import enumeration.general.NotifyTypeEnum;
import enumeration.general.UrgentLevelEnum;
import enumeration.general.WorkOrderDistributeWayEnum;
import enumeration.general.WorkOrderStatusEnum;
import enumeration.general.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@@ -39,6 +38,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
@@ -65,6 +65,7 @@
    private final NotifyService notifyService;
    private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
    private final TMonitorMapper monitorMapper;
    private final SysConfigMapper configMapper;
    private final String DISTRIBUTE_LOCK_KEY = "distributeLock";
    private final static String IMPORTANT = "important";
@@ -73,16 +74,78 @@
    private RedisCache redisCache;
    @Override
    public Boolean innerAdd(List<WorkOrder> workOrderList) {
    @Transactional(rollbackFor = Exception.class)
    public Boolean addWaitDistribute(List<WorkOrder> workOrderList) {
        int total = workOrderList.size();
        workOrderList.stream().filter(item -> {
            return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && StringUtils.hasText(item.getErrorType());
        });
        // TODO 自动下发工单
        int real = workOrderList.size();
        boolean result = this.saveBatch(workOrderList);
        log.info("传入工单总数: {},实际添加工单数:{}", total, real);
        return result;
        List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
        // 查出数据库中国标码对应的未完成的工单
        List<WorkOrder> inDatabaseWorkOrderList = new LambdaQueryChainWrapper<>(baseMapper)
                .select(WorkOrder::getId, WorkOrder::getSerialNumber, WorkOrder::getStatus, WorkOrder::getErrorType)
                .in(WorkOrder::getSerialNumber, serialNumberList)
                .ne(WorkOrder::getStatus, WorkOrderStatusEnum.AUDITING_SUCCESS)
                .list();
        Map<String, WorkOrder> mapping = inDatabaseWorkOrderList.stream().collect((Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder)));
        List<WorkOrder> waitAddList = new ArrayList<>(48);
        Integer updateNum = 0;
        for (WorkOrder workOrder : workOrderList) {
            WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
            if (Objects.nonNull(databaseWorkOrder)) {
                String errorType = databaseWorkOrder.getErrorType();
                if (workOrder.getErrorType().equals(errorType)) {
                    // 如果,国标码、故障类型都一样,则跳过不处理
                    continue;
                } else {
                    // 错误类型不一样,就更新错误类型,并且重置工单状态为待处理
                    errorType = errorType + "," + workOrder.getErrorType();
                    databaseWorkOrder.setErrorType(errorType);
                    databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
                    baseMapper.updateById(databaseWorkOrder);
                    updateNum++;
                    // 同时新增一个运维处理信息,表明此工单被调整 TODO
                }
            } else {
                waitAddList.add(workOrder);
            }
        }
        if (CollectionUtils.isEmpty(waitAddList)) {
            return Boolean.TRUE;
        }
        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)
                .in(YwPoint::getSerialNumber, willAddSerialNumber)
                .list();
        Map<String, YwPoint> pointMapping = pointList.stream().collect(Collectors.toMap(YwPoint::getSerialNumber, point -> point));
        // 查出重点点位、普通点位的处理时间
        SysConfig important = configMapper.checkConfigKeyUnique("important.wordkorder.time");
        SysConfig normal = configMapper.checkConfigKeyUnique("normal.wordkorder.alarm.time");
        for (WorkOrder workOrder : waitAddList) {
            YwPoint point = pointMapping.get(workOrder.getSerialNumber());
            workOrder.setWorkOrderNo(IdUtils.timeAddRandomNO(5));
            workOrder.setUnitId(Math.toIntExact(point.getUnitId()));
            if (point.getImportantTag() || point.getImportantCommandImageTag()) {
                workOrder.setProcessingPeriod(Integer.valueOf(important.getConfigValue()));
            } else {
                workOrder.setProcessingPeriod(Integer.valueOf(normal.getConfigValue()));
            }
        }
        this.saveBatch(waitAddList);
        // 如果是直接下发,添加下发记录
        if (WorkOrderStatusEnum.DISTRIBUTED.equals(waitAddList.get(0).getStatus())) {
            List<WorkOrderDistributeRecord> distributedRecordList = waitAddList.stream().map(item -> {
                WorkOrderDistributeRecord workOrderDistributeRecord = new WorkOrderDistributeRecord();
                workOrderDistributeRecord.setWorkOrderId(item.getId());
                workOrderDistributeRecord.setDistributeWay(WorkOrderDistributeWayEnum.DIRECT_DISTRIBUTE);
                workOrderDistributeRecord.setUserId(1L);
                return workOrderDistributeRecord;
            }).collect(Collectors.toList());
            workOrderDistributeRecordMapper.insertBatch(distributedRecordList);
        }
        log.info("传入工单总数: {},实际添加工单数:{}, 实际修改工单数:{}", total, waitAddList.size(), updateNum);
        return Boolean.TRUE;
    }
    /**
ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
@@ -155,8 +155,8 @@
            check(YwThreadConstants.Face_FailPercent, failPercent, result.getExternalIndexCode(), thresholdMap, distributeList, workOrderList, CompareType.LESS_THAN_EQ,"");
        }
        /** 添加工单 */
        workOrderService.innerAdd(workOrderList);
        workOrderService.innerAdd(distributeList);
        workOrderService.addWaitDistribute(workOrderList);
        workOrderService.addWaitDistribute(distributeList);
    }
    /**
@@ -197,8 +197,8 @@
            check(YwThreadConstants.Car_NoIntegrityCount, noIntegrityCountResult, result.getExternalIndexCode(), thresholdMap, distributeList, workOrderList, CompareType.MORE_THAN_EQ,"");
        }
        /** 添加工单 */
        workOrderService.innerAdd(workOrderList);
        workOrderService.innerAdd(distributeList);
        workOrderService.addWaitDistribute(workOrderList);
        workOrderService.addWaitDistribute(distributeList);
    }
    //封装阈值为map
ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -15,9 +15,7 @@
import com.ycl.utils.DateUtils;
import constant.RedisConstant;
import enumeration.general.AreaDeptEnum;
import enumeration.general.ImportantTagEnum;
import enumeration.general.PointStatus;
import enumeration.general.ProvinceTagEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
@@ -25,7 +23,6 @@
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
@@ -96,14 +93,14 @@
            ywPoint.setPointName(result.getSBMC());
            ywPoint.setStatus(PointStatus.WAIT.getDesc());
            ywPoint.setSerialNumber(result.getSBBM());
            ywPoint.setImportantTag(ImportantTagEnum.Normal);
            ywPoint.setProvinceTag(ProvinceTagEnum.Normal);
            ywPoint.setImportantTag(Boolean.FALSE);
            ywPoint.setProvinceTag(Boolean.FALSE);
            ywPoint.setCreateTime(new Date());
            ywPoint.setUpdateTime(new Date());
        }
        //比对是否是重点点位
        if (importantSite.contains(result.getSBBM())) {
            ywPoint.setImportantTag(ImportantTagEnum.Important);
            ywPoint.setImportantTag(Boolean.TRUE);
        }
        //解析deptId
        //区域行政编码
ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
@@ -18,6 +18,7 @@
        <result column="update_time" property="updateTime" />
        <result column="province_tag" property="provinceTag" />
        <result column="important_tag" property="importantTag" />
        <result column="important_command_image_tag" property="importantCommandImageTag" />
    </resultMap>
    <select id="selectData" resultType="com.ycl.platform.base.BaseSelect">
@@ -39,7 +40,8 @@
               typ.create_time,
               typ.update_time,
               typ.important_tag,
               typ.province_tag
               typ.province_tag,
               typ.important_command_image_tag
        FROM
             t_yw_point typ
                 LEFT JOIN t_yw_unit tyu ON typ.unit_id = tyu.id AND tyu.deleted = 0
@@ -65,10 +67,10 @@
    <select id="selectByTag" resultType="com.ycl.platform.domain.entity.YwPoint">
        select * from t_yw_point
        <where>
            <if test="important!=null and important!= '' ">
            <if test="important!=null and important == true ">
                and important_tag = #{important}
            </if>
            <if test="province!=null and province!= '' ">
            <if test="province!=null and province == true ">
                and province_tag = #{province}
            </if>
        </where>