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>