From 939f97673f9284c2a28ac3fce419f8e0a5545a4d Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Thu, 26 Jun 2025 16:37:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=AF=BC=E5=87=BA=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E7=BA=BF=E7=A8=8B=E6=B1=A0=E4=BC=98=E5=8C=96,?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A3=80=E7=B4=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/controller/ExcelController.java | 4 + .../domain/bo/InspectionPlanInfoBo.java | 5 + .../listener/WorkOrderInfoListener.java | 6 +- .../service/IWorkOrderInfoService.java | 2 + .../impl/InspectionPlanInfoServiceImpl.java | 10 +- .../RoutineInspectionInfoServiceImpl.java | 3 +- .../impl/WorkOrderInfoServiceImpl.java | 246 +++++++++++++----- 7 files changed, 197 insertions(+), 79 deletions(-) diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java index 3e3c33d..c6a663d 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java @@ -84,6 +84,7 @@ public class ExcelController { */ @PostMapping("/ExportWorkOrderInfo") public void ExportWorkOrderInfo(WorkOrderInfoBo bo, HttpServletResponse response) throws IOException { + long t1 = System.currentTimeMillis(); List list = workOrderInfoService.queryListForExport(bo); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); @@ -98,6 +99,9 @@ public class ExcelController { EasyExcel.write(response.getOutputStream(), WorkOrderInfoVo.class) .sheet("工单信息"+currentDate) .doWrite(list); + long t2 = System.currentTimeMillis(); + String message = "导出全部数据耗时时:"+(t2-t1)+"ms"; + log.info(message); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/InspectionPlanInfoBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/InspectionPlanInfoBo.java index 198829c..668fe2e 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/InspectionPlanInfoBo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/InspectionPlanInfoBo.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; /** * 巡检计划业务对象 inspection_plan_info @@ -50,12 +51,16 @@ public class InspectionPlanInfoBo extends BaseEntity { * 开始日期 */ @NotNull(message = "开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date startDate; /** * 结束日期 */ @NotNull(message = "结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; /** diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java index 7806da8..3b0d3b7 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java @@ -76,13 +76,13 @@ public class WorkOrderInfoListener implements ReadListener { return; } // 不允许重复点位上报 - if (faultLocationList.contains(info.getFaultLocation())) { +/* if (faultLocationList.contains(info.getFaultLocation())) { int rowNum = analysisContext.readRowHolder().getRowIndex(); String errorMsg = String.format("第 %d 行数据导入失败:该点位正在维修 故障地点: %s", rowNum, workOrderInfoVo.getFaultLocation()); errorMessages.add(errorMsg); return; - } + }*/ String unit = contractInfoService.getIoCompany(contractName); if (unit != null) { @@ -92,7 +92,7 @@ public class WorkOrderInfoListener implements ReadListener { WorkOrderInfoBo convert = BeanUtil.copyProperties(info, WorkOrderInfoBo.class); - workOrderInfoService.insertByBo(convert); + workOrderInfoService.insertByExcel(convert); } catch (Exception e) { int rowNum = analysisContext.readRowHolder().getRowIndex(); diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java index e3ddfa3..87a64cc 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java @@ -56,6 +56,8 @@ public interface IWorkOrderInfoService { */ Boolean insertByBo(WorkOrderInfoBo bo); + + Boolean insertByExcel(WorkOrderInfoBo bo); /** * 修改工单信息 * diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/InspectionPlanInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/InspectionPlanInfoServiceImpl.java index 5cb0571..87123fb 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/InspectionPlanInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/InspectionPlanInfoServiceImpl.java @@ -109,14 +109,20 @@ public class InspectionPlanInfoServiceImpl implements IInspectionPlanInfoService lqw.like(StringUtils.isNotBlank(bo.getContractName()), InspectionPlanInfo::getContractName, bo.getContractName()); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), InspectionPlanInfo::getProjectName, bo.getProjectName()); lqw.eq(StringUtils.isNotBlank(bo.getDescription()), InspectionPlanInfo::getDescription, bo.getDescription()); - lqw.eq(bo.getStartDate() != null, InspectionPlanInfo::getStartDate, bo.getStartDate()); - lqw.eq(bo.getEndDate() != null, InspectionPlanInfo::getEndDate, bo.getEndDate()); lqw.eq(bo.getFrequency() != null, InspectionPlanInfo::getFrequency, bo.getFrequency()); lqw.eq(bo.getStatus() != null, InspectionPlanInfo::getStatus, bo.getStatus()); lqw.eq(bo.getProgress() != null, InspectionPlanInfo::getProgress, bo.getProgress()); lqw.eq(StringUtils.isNotBlank(bo.getIoCompany()), InspectionPlanInfo::getIoCompany, bo.getIoCompany()); lqw.eq(bo.getFixTime() != null, InspectionPlanInfo::getFixTime, bo.getFixTime()); lqw.eq(bo.getPlanDate() != null, InspectionPlanInfo::getPlanDate, bo.getPlanDate()); + + // 对 时间 进行范围查询 + if (bo.getStartDate() != null) { + lqw.ge(InspectionPlanInfo::getStartDate, bo.getStartDate()); + } + if (bo.getEndDate() != null) { + lqw.le(InspectionPlanInfo::getEndDate, bo.getEndDate()); + } return lqw; } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/RoutineInspectionInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/RoutineInspectionInfoServiceImpl.java index 2bedcf3..496041d 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/RoutineInspectionInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/RoutineInspectionInfoServiceImpl.java @@ -85,8 +85,7 @@ public class RoutineInspectionInfoServiceImpl implements IRoutineInspectionInfoS lqw.eq(bo.getServiceProject() != null, RoutineInspectionInfo::getServiceProject, bo.getServiceProject()); lqw.eq(StringUtils.isNotBlank(bo.getCode()), RoutineInspectionInfo::getCode, bo.getCode()); lqw.eq(StringUtils.isNotBlank(bo.getIoCompany()), RoutineInspectionInfo::getIoCompany, bo.getIoCompany()); - //lqw.eq(bo.getScheduleStartDate() != null, RoutineInspectionInfo::getScheduleStartDate, bo.getScheduleStartDate()); - //lqw.eq(bo.getScheduleEndDate() != null, RoutineInspectionInfo::getScheduleEndDate, bo.getScheduleEndDate()); + lqw.eq(bo.getFinishDate() != null, RoutineInspectionInfo::getFinishDate, bo.getFinishDate()); lqw.eq(StringUtils.isNotBlank(bo.getPointName()), RoutineInspectionInfo::getPointName, bo.getPointName()); lqw.eq(bo.getStatus() != null, RoutineInspectionInfo::getStatus, bo.getStatus()); diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java index 4778f39..f6c5180 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java @@ -40,6 +40,9 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -228,7 +231,13 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceUnit()), WorkOrderInfo::getMaintenanceUnit, bo.getMaintenanceUnit()); //当前状态:status lqw.eq(bo.getStatus() != null, WorkOrderInfo::getStatus, bo.getStatus()); - + // 按照报修时间查询 + lqw.between( + bo.getStartDate() != null && bo.getStartDate() != null, + WorkOrderInfo::getRepairTime, + bo.getStartDate(), + bo.getEndDate() + ); // 添加按创建时间降序排序 // lqw.orderByDesc(WorkOrderInfo::getCreateTime); return lqw; @@ -246,6 +255,10 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { */ @Override public Boolean insertByBo(WorkOrderInfoBo bo) { + Set faultLocationList = this.getFaultLocationList(null); + if (faultLocationList.contains(bo.getFaultLocation())) { + throw new ServiceException("该点位正在维修,请勿重复上报!"); + } WorkOrderInfo add = MapstructUtils.convert(bo, WorkOrderInfo.class); // 设置报修时间 add.setRepairTime(DateUtil.date()); @@ -326,6 +339,87 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { return flag; } + @Override + public Boolean insertByExcel(WorkOrderInfoBo bo) { + WorkOrderInfo add = MapstructUtils.convert(bo, WorkOrderInfo.class); + // 设置报修时间 + add.setRepairTime(DateUtil.date()); + validEntityBeforeSave(add); + List attachments = bo.getAttachments(); + AttachmentSerializer serializer = new AttachmentSerializer(); + String serializedAttachment = serializer.serializeAttachments(attachments); + add.setAttachment(serializedAttachment); + LoginUser loginUser = LoginHelper.getLoginUser(); + // 设置报修人员 + String nickname = loginUser.getNickname(); + add.setRepairer(nickname); + // 设置维护单位 + String contractName = bo.getContractName(); + String partyB = projectInfoService.getContractPartyBNameByContractName(contractName); + if (partyB != null) { + add.setMaintenanceUnit(partyB); + } + + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + // 自动生成的工单id + String generatedId = add.getId(); + bo.setId(generatedId); // 设置到bo对象中 + String isDispatched = bo.getIsDispatched(); + + WorkOrderProcessBo workOrderProcess1 = new WorkOrderProcessBo(); + workOrderProcess1.setWorkOrderId(generatedId); + workOrderProcess1.setOperator(loginUser.getNickname()); + workOrderProcess1.setStage("故障上报"); + workOrderProcess1.setOperationName("故障上报"); + workOrderProcess1.setDescription("在故障上报环节进行了窗口上报故障操作"); + // 设置操作时间 + LocalDateTime time1 = LocalDateTime.now(); + Date date1 = Date.from(time1.atZone(ZoneId.systemDefault()).toInstant()); + workOrderProcess1.setOperationTime(date1); + workOrderProcess1.setFeedback("故障以上报,等待派遣"); + + if (workOrderProcessService.insertByBo(workOrderProcess1)) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, generatedId) + .set(WorkOrderInfo::getStatus, 0); + baseMapper.update(null, updateWrapper); + log.info("修改对应的工单的状态 :待派遣"); + } + + if (StringUtils.equals(isDispatched, "是")) { + + WorkOrderProcessBo workOrderProcess2 = new WorkOrderProcessBo(); + workOrderProcess2.setWorkOrderId(generatedId); + workOrderProcess2.setOperator(loginUser.getNickname()); + workOrderProcess2.setStage("故障派遣"); + workOrderProcess2.setOperationName("故障派遣"); + workOrderProcess2.setDescription("在故障派遣环节进行了故障派遣操作"); + + // 设置操作时间 + LocalDateTime time2 = LocalDateTime.now(); + Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); + workOrderProcess2.setOperationTime(date2); + workOrderProcess2.setFeedback(bo.getDispatchOpinion()); + + Duration duration = Duration.between(time1, time2); // 计算时间差 + // 将持续时间(以秒为单位)设置到对象中 + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workOrderProcess2.setDuration(formatDuration); + if (workOrderProcessService.insertByBo(workOrderProcess2)) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, generatedId) + .set(BaseEntity::getUpdateTime, new Date()) + .set(WorkOrderInfo::getStatus, 1); + baseMapper.update(null, updateWrapper); + log.info("修改对应的工单的状态 :待接单"); + } + } + } + + return flag; + } // 规范格式,如:01时02分03秒 @@ -1563,86 +1657,92 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { LambdaQueryWrapper lqw = buildQueryWrapper(bo); List orderInfoVoList = baseMapper.selectVoList(lqw); - for (WorkOrderInfoVo record : orderInfoVoList) { - // 1.罚款信息 - String workOrderId = record.getId(); - WorkOrderInfoDto overTimeCostInfo = this.getOverTimeCost(workOrderId); - // 响应超时罚款 - record.setHandleTimeOutCount(overTimeCostInfo.getHandleTimeOutCount()); - record.setHandleCost(overTimeCostInfo.getHandleCost()); - record.setIsHandleOverTime(overTimeCostInfo.getIsHandleOverTime()); - - // 接单超时罚款 - record.setOrderAcceptTimeOutCount(overTimeCostInfo.getOrderAcceptTimeOutCount()); - record.setOrderTakingCost(overTimeCostInfo.getOrderTakingCost()); - record.setTotalCost(overTimeCostInfo.getTotalCost()); - record.setIsOrderTakingOverTime(overTimeCostInfo.getIsOrderTakingOverTime()); - // 2.处理人信息(最后一次处理的人) - String handler = workOrderProcessMapper.getHandlerByWorkOrderId(workOrderId); - if (handler != null){ - record.setHandler(handler); - }else { - record.setHandler("无"); - } - // 3.接单时间(最后一次) - Date orderAcceptTime = workOrderProcessMapper.getOrderAcceptTimeByWorkOrderId(workOrderId); - if (orderAcceptTime != null){ - record.setOrderAcceptTime(orderAcceptTime); - } - // 4.是否延期 - LambdaQueryWrapper queryDelayWrapper = new LambdaQueryWrapper<>(); - queryDelayWrapper.eq(WorkOrderDelay::getId, workOrderId); - queryDelayWrapper.eq(WorkOrderDelay::getHandleResult,"审核通过"); - queryDelayWrapper.orderByDesc(WorkOrderDelay::getCreateTime); - queryDelayWrapper.last("LIMIT 1"); - WorkOrderDelayVo workOrderDelayVo = workOrderDelayMapper.selectVoOne(queryDelayWrapper); - if (workOrderDelayVo != null){ - record.setIsDelay("是"); - record.setDelayTime(workOrderDelayVo.getAfterDelayTime()); - record.setDelayReason(workOrderDelayVo.getDelayReason()); - }else { - record.setIsDelay("否"); - } - // 5.工单审核中的其他罚款 - record.setOtherCost(0.0); - record.setOtherCostReason("无"); - - LambdaQueryWrapper reviewInfoQueryWrapper = new LambdaQueryWrapper<>(); - reviewInfoQueryWrapper.eq(WorkReviewInfo::getWorkOrderId, workOrderId); - reviewInfoQueryWrapper.orderByDesc(WorkReviewInfo::getCreateTime); - reviewInfoQueryWrapper.last("LIMIT 1"); - WorkReviewInfo lastReviewInfo = workReviewInfoMapper.selectOne(reviewInfoQueryWrapper); - if (lastReviewInfo != null){ - if (lastReviewInfo.getOtherCost() != null) { - record.setOtherCost(Double.valueOf(lastReviewInfo.getOtherCost())); - } else { - record.setOtherCost(0.0); // 或者 0.0,根据业务需求决定默认值 - } + // 创建线程池(根据 CPU 核心数调整) + int corePoolSize = Runtime.getRuntime().availableProcessors() * 2; + ExecutorService executor = Executors.newFixedThreadPool(corePoolSize); - if (lastReviewInfo.getOtherCostReason() != null) { - record.setOtherCostReason(lastReviewInfo.getOtherCostReason()); - } else { - record.setOtherCostReason("无"); // 或者 "" - } - } + try { + // 使用 CompletableFuture 并发处理每条记录 + List> futureList = orderInfoVoList.stream() + .map(vo -> CompletableFuture.supplyAsync(() -> enrichWorkOrderInfo(vo), executor)) + .collect(Collectors.toList()); - // 6.工单审核中的初审建议 - String initAdvice = workReviewInfoMapper.getInitAdvice(workOrderId); - if (StringUtils.isNotBlank(initAdvice)){ - record.setInitAdvice(initAdvice); - } + // 等待所有任务完成 + CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).join(); - // 7.工单审核中的终审建议 - String lastAdvice = workReviewInfoMapper.getLastAdvice(workOrderId); - if (StringUtils.isNotBlank(lastAdvice)){ - record.setLastAdvice(lastAdvice); + // 获取结果(顺序保持一致) + for (int i = 0; i < orderInfoVoList.size(); i++) { + orderInfoVoList.set(i, futureList.get(i).join()); } - + } finally { + executor.shutdown(); } return orderInfoVoList; } + + + private WorkOrderInfoVo enrichWorkOrderInfo(WorkOrderInfoVo vo) { + String workOrderId = vo.getId(); + + // 1. 罚款信息 + WorkOrderInfoDto overTimeCostInfo = this.getOverTimeCost(workOrderId); + vo.setHandleTimeOutCount(overTimeCostInfo.getHandleTimeOutCount()); + vo.setHandleCost(overTimeCostInfo.getHandleCost()); + vo.setIsHandleOverTime(overTimeCostInfo.getIsHandleOverTime()); + vo.setOrderAcceptTimeOutCount(overTimeCostInfo.getOrderAcceptTimeOutCount()); + vo.setOrderTakingCost(overTimeCostInfo.getOrderTakingCost()); + vo.setTotalCost(overTimeCostInfo.getTotalCost()); + vo.setIsOrderTakingOverTime(overTimeCostInfo.getIsOrderTakingOverTime()); + + // 2. 处理人信息 + String handler = workOrderProcessMapper.getHandlerByWorkOrderId(workOrderId); + vo.setHandler(handler != null ? handler : "无"); + + // 3. 接单时间 + Date orderAcceptTime = workOrderProcessMapper.getOrderAcceptTimeByWorkOrderId(workOrderId); + vo.setOrderAcceptTime(orderAcceptTime); + + // 4. 是否延期 + LambdaQueryWrapper queryDelayWrapper = new LambdaQueryWrapper<>(); + queryDelayWrapper.eq(WorkOrderDelay::getId, workOrderId); + queryDelayWrapper.eq(WorkOrderDelay::getHandleResult, "审核通过"); + queryDelayWrapper.orderByDesc(WorkOrderDelay::getCreateTime); + queryDelayWrapper.last("LIMIT 1"); + WorkOrderDelayVo workOrderDelayVo = workOrderDelayMapper.selectVoOne(queryDelayWrapper); + if (workOrderDelayVo != null) { + vo.setIsDelay("是"); + vo.setDelayTime(workOrderDelayVo.getAfterDelayTime()); + vo.setDelayReason(workOrderDelayVo.getDelayReason()); + } else { + vo.setIsDelay("否"); + } + + // 5. 其他罚款 + LambdaQueryWrapper reviewInfoQueryWrapper = new LambdaQueryWrapper<>(); + reviewInfoQueryWrapper.eq(WorkReviewInfo::getWorkOrderId, workOrderId); + reviewInfoQueryWrapper.orderByDesc(WorkReviewInfo::getCreateTime); + reviewInfoQueryWrapper.last("LIMIT 1"); + WorkReviewInfo lastReviewInfo = workReviewInfoMapper.selectOne(reviewInfoQueryWrapper); + if (lastReviewInfo != null) { + vo.setOtherCost(lastReviewInfo.getOtherCost() != null ? Double.valueOf(lastReviewInfo.getOtherCost()) : 0.0); + vo.setOtherCostReason(StringUtils.isNotBlank(lastReviewInfo.getOtherCostReason()) ? lastReviewInfo.getOtherCostReason() : "无"); + } else { + vo.setOtherCost(0.0); + vo.setOtherCostReason("无"); + } + + // 6. 初审建议 + String initAdvice = workReviewInfoMapper.getInitAdvice(workOrderId); + vo.setInitAdvice(StringUtils.isNotBlank(initAdvice) ? initAdvice : null); + + // 7. 终审建议 + String lastAdvice = workReviewInfoMapper.getLastAdvice(workOrderId); + vo.setLastAdvice(StringUtils.isNotBlank(lastAdvice) ? lastAdvice : null); + + return vo; + } @Override public WorkOrderInfoDto getOverTimeCost(String workOrderId) { WorkOrderInfoVo record = baseMapper.selectVoById(workOrderId); @@ -1748,6 +1848,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { public Set getFaultLocationList(String maintenanceUnit) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(maintenanceUnit), WorkOrderInfo::getMaintenanceUnit, maintenanceUnit); + // 还没有结案的故障点位,因为一个点位可能重复故障 不加限制不行 + queryWrapper.ne(WorkOrderInfo::getStatus, 6); List workOrderInfos = baseMapper.selectList(queryWrapper); Set faultLocationList = workOrderInfos.stream()