From aa9ab78bdaa3b74438f5e1e0754b41a938afe46c Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Mon, 12 May 2025 17:11:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=90=88=E5=90=8C=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E6=9F=A5=E8=AF=A2=E5=AF=B9=E5=BA=94=E7=9A=84=E8=BF=90?= =?UTF-8?q?=E7=BB=B4=E5=8D=95=E4=BD=8D,=E5=88=9B=E5=BB=BA=E6=97=A5?= =?UTF-8?q?=E5=B8=B8=E5=B7=A1=E6=A3=80=E4=BB=BB=E5=8A=A1=E6=97=B6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=BB=98=E8=AE=A4=E4=BA=A4=E4=BB=98=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ContractInfoController.java | 12 ++ .../RoutineInspectionInfoController.java | 5 + .../platform/domain/vo/PointInfoVo.java | 3 +- .../service/IContractInfoService.java | 2 + .../service/impl/ContractInfoServiceImpl.java | 11 ++ .../service/impl/PointInfoServiceImpl.java | 14 +- .../RoutineInspectionInfoServiceImpl.java | 1 + .../impl/WorkOrderInfoServiceImpl.java | 155 +++++++++++++----- 8 files changed, 153 insertions(+), 50 deletions(-) diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ContractInfoController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ContractInfoController.java index 74b58c6..a6d64cb 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ContractInfoController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ContractInfoController.java @@ -135,4 +135,16 @@ public class ContractInfoController extends BaseController { List rs = contractInfoService.getContractNamesByProjectName(projectName); return R.ok(rs); } + + + /** + * 获取合同对应的运维单位 (乙方) + * + */ + @SaCheckPermission("platform:contractInfo:getIoCompany") + @GetMapping("/getIoCompany") + public R getIoCompany(@Param("name") String name) { + String rs = contractInfoService.getIoCompany(name); + return R.ok("获取合同对应的运维单位", rs); + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/RoutineInspectionInfoController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/RoutineInspectionInfoController.java index 79d440a..662e712 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/RoutineInspectionInfoController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/RoutineInspectionInfoController.java @@ -113,6 +113,11 @@ public class RoutineInspectionInfoController extends BaseController { return toAjax(routineInspectionInfoService.deleteWithValidByIds(List.of(ids), true)); } + /** + * 创建日常巡检任务 + * @param routineInspectionDto + * @return + */ @SaCheckPermission("platform:routineInspectionInfo:createRoutineInspection") @PostMapping("/createRoutineInspection") public R createPlans(@RequestBody RoutineInspectionDto routineInspectionDto) { diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java index 9ac65d0..e85e10a 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java @@ -1,5 +1,6 @@ package org.dromara.platform.domain.vo; +import org.dromara.common.tenant.core.TenantEntity; import org.dromara.platform.domain.PointInfo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -23,7 +24,7 @@ import java.util.Date; @Data @ExcelIgnoreUnannotated @AutoMapper(target = PointInfo.class) -public class PointInfoVo implements Serializable { +public class PointInfoVo extends TenantEntity implements Serializable { @Serial private static final long serialVersionUID = 1L; diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IContractInfoService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IContractInfoService.java index 34414c4..5ed5e6b 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IContractInfoService.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IContractInfoService.java @@ -80,4 +80,6 @@ public interface IContractInfoService { List getContractNamesByProjectName(String projectName); + //根据合同名称查询对应的运维单位 + String getIoCompany(String name); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java index f8a3907..b0da851 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java @@ -229,4 +229,15 @@ public class ContractInfoServiceImpl implements IContractInfoService { } return selectVoList; } + + @Override + public String getIoCompany(String name) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ContractInfo::getContractName, name); + ContractInfo contractInfo = baseMapper. selectOne(queryWrapper); + if (contractInfo != null){ + return contractInfo.getPartyB(); + } + return null; + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java index 5112dae..2ed8c75 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.platform.domain.vo.DailyInspectionReportVo; import org.dromara.platform.domain.vo.PointSelectVo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -17,10 +18,8 @@ import org.dromara.platform.domain.PointInfo; import org.dromara.platform.mapper.PointInfoMapper; import org.dromara.platform.service.IPointInfoService; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 点位信息Service业务层处理 @@ -58,6 +57,13 @@ public class PointInfoServiceImpl implements IPointInfoService { public TableDataInfo queryPageList(PointInfoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + List sortedRecords = records.stream() + // 默认小到大 反转 为降序 + .sorted(Comparator.comparing(PointInfoVo::getCreateTime).reversed()) + .collect(Collectors.toList()); + result.setRecords(sortedRecords); + return TableDataInfo.build(result); } 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 5f996a4..2bedcf3 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 @@ -168,6 +168,7 @@ public class RoutineInspectionInfoServiceImpl implements IRoutineInspectionInfoS routineInspectionInfo.setDescription(description); routineInspectionInfo.setServiceProject(serviceProject); routineInspectionInfo.setIoCompany(ioCompany); + routineInspectionInfo.setDeliverContent("例行操作"); routineInspectionInfo.setPointName(pointName); routineInspectionInfo.setScheduleStartDate(item.getScheduleStartDate()); routineInspectionInfo.setScheduleEndDate(item.getScheduleEndDate()); 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 57da43b..3717151 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -32,6 +33,7 @@ import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.workflow.service.IActTaskService; import java.time.Duration; +import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -172,32 +174,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Autowired private IActTaskService actTaskService; - @Autowired - private RuntimeService runtimeService; - public void startLeaveProcess(TestLeaveBo leaveBo) { - // 创建并保存请假记录 - //TestLeaveVo leaveVo = testLeaveService.insertByBo(leaveBo); - - // 启动流程参数 - StartProcessBo startProcessBo = new StartProcessBo(); - // 设置流程对应的业务表 - startProcessBo.setTableName("work_order_info"); - // 设置业务主键 - //startProcessBo.setBusinessKey(leaveVo.getId().toString()); - // 设置流程变量 -// Map variables = new HashMap<>(); -// variables.put("applyUserId", getUserId()); -// variables.put("leaveType", leaveBo.getLeaveType()); -// variables.put("startDate", leaveBo.getStartDate()); -// variables.put("endDate", leaveBo.getEndDate()); -// variables.put("leaveDays", leaveBo.getLeaveDays()); -// variables.put("reason", leaveBo.getRemark()); -// startProcessBo.setVariables(variables); - - // 启动流程实例 - Map result = actTaskService.startWorkFlow(startProcessBo); - } /** * 新增工单信息 * @@ -368,6 +345,11 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public void takeOrder(String workOrderId) { + WorkOrderInfoVo workOrderInfoVo = baseMapper.selectVoById(workOrderId); + if (workOrderInfoVo.getStatus() != 1){ + throw new ServiceException("当前工单状态未处于:待接单状态,不能进行接单操作!"); + } + // 1.获取当前用户登录信息 LoginUser loginUser = LoginHelper.getLoginUser(); WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); @@ -422,7 +404,6 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { // 封装 for (WorkOrderInfoVo record : filterRecords) { String workOrderId = record.getId(); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); @@ -439,6 +420,18 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { // 如果没有找到接单记录或没有接单时间,可以设为默认值 record.setRestTime("暂无接单信息"); } + // 设置延期信息 + if (record.getStatus() == 7){ + WorkOrderDelayVo delayVo = workOrderDelayService.queryById(Long.valueOf(workOrderId)); + if (delayVo != null){ + Date afterDelayTime = delayVo.getAfterDelayTime(); + // 将 Date 转换为 Instant + Instant instant = afterDelayTime.toInstant(); + ZoneId zone = ZoneId.of("Asia/Shanghai"); + LocalDateTime dueDateTime = instant.atZone(zone).toLocalDateTime(); + record.setRestTime(getTimeLeft(dueDateTime)); + } + } } @@ -491,6 +484,32 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { } } + + public String getTimeLeft(LocalDateTime dueDateTime ) { + // 当前时间 + LocalDateTime now = LocalDateTime.now(); + Duration duration; + boolean isOverdue; + + if (now.isAfter(dueDateTime)) { + duration = Duration.between(dueDateTime, now); + isOverdue = true; + } else { + duration = Duration.between(now, dueDateTime); + isOverdue = false; + } + + long days = duration.toDays(); + long hours = duration.toHours() % 24; + long minutes = duration.toMinutes() % 60; + + if (isOverdue) { + return String.format("超时%d天%d小时%d分", days, hours, minutes); + } else { + return String.format("剩余%d天%d小时%d分", days, hours, minutes); + } + } + @Override public TableDataInfo reviewList(WorkOrderInfoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); @@ -520,7 +539,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { workDealInfo.setFixTime(new Date()); workDealInfo.setWorkOrderId(bo.getId()); // 3.创建处理信息 - workDealInfoMapper.insert(workDealInfo); + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(WorkDealInfo::getWorkOrderId, bo.getId()); + WorkDealInfo workDealInfoFromDb = workDealInfoMapper.selectOne(qw); + if (workDealInfoFromDb != null){ + workDealInfo.setId(workDealInfoFromDb.getId()); + workDealInfoMapper.updateById(workDealInfo); + }else { + workDealInfoMapper.insert(workDealInfo); + } // 4.创建流程信息 String workOrderId = bo.getId(); @@ -544,7 +571,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { LocalDateTime time2 = LocalDateTime.now(); Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); workOrderProcess.setOperationTime(date2); - // TODO 处理反馈信息 从表单中获取 + // 处理反馈信息 从表单中获取 workOrderProcess.setFeedback(bo.getFixResult()); // 计算时间差 Duration duration = Duration.between(time1, time2); @@ -565,13 +592,14 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public void initReviewOrder(WorkReviewInfoBo bo) { - LoginUser loginUser = LoginHelper.getLoginUser(); - // 1.插入审核信息表 - workReviewInfoService.insertByBo(bo); - // 2.根据处理结果判断 String handleResult = bo.getHandleResult(); String workOrderId = bo.getId(); + bo.setId(null); + bo.setWorkOrderId(workOrderId); + LoginUser loginUser = LoginHelper.getLoginUser(); + // 1.插入审核信息表 + workReviewInfoService.insertByBo(bo); if (handleResult.equals("通过")){ WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); // 设置基础信息 @@ -613,8 +641,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { // 设置基础信息 workOrderProcess.setWorkOrderId(workOrderId); workOrderProcess.setOperator(loginUser.getNickname()); - workOrderProcess.setStage("故障处理"); - workOrderProcess.setOperationName("故障处理"); + workOrderProcess.setStage("初审"); + workOrderProcess.setOperationName("初审"); workOrderProcess.setDescription("初审不通过需要重新处理工单"); // 获取最近一个节点的操作时间 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -675,7 +703,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { Duration duration = Duration.between(time1, time2); long durationInSeconds = duration.getSeconds(); String formatDuration = formatDuration((int) durationInSeconds); - workOrderProcess.setDuration(formatDuration); + //workOrderProcess.setDuration(formatDuration); Boolean flag = workOrderProcessService.insertByBo(workOrderProcess); if (flag){ @@ -700,13 +728,14 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public void lastReviewOrder(WorkReviewInfoBo bo) { + String handleResult = bo.getHandleResult(); + String workOrderId = bo.getId(); + bo.setId(null); + bo.setWorkOrderId(workOrderId); LoginUser loginUser = LoginHelper.getLoginUser(); // 1.插入审核信息表 workReviewInfoService.insertByBo(bo); // 2.根据处理结果判断 - String handleResult = bo.getHandleResult(); - String workOrderId = bo.getId(); - if (handleResult.equals("通过")){ WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); // 设置基础信息 @@ -752,7 +781,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { endBo.setOperator(loginUser.getNickname()); workOrderProcessService.insertByBo(endBo); } - }else { + }else if ("退回".equals(handleResult)){ + // 终审不通过需要重新处理工单 WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); // 设置基础信息 workOrderProcess.setWorkOrderId(workOrderId); @@ -818,7 +848,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { LocalDateTime time2 = LocalDateTime.now(); Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); workOrderProcess.setOperationTime(date2); - // TODO 处理反馈信息 从表单中获取 回退原因 + // 处理反馈信息 从表单中获取 回退原因 workOrderProcess.setFeedback(bo.getBackReason()); // 计算时间差 Duration duration = Duration.between(time1, time2); @@ -925,14 +955,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { updateWrapper1.set(WorkOrderDelay::getHandleResult,"审核通过"); workOrderDelayMapper.update(null,updateWrapper1); - // TODO 创建延期流程 + //创建延期流程 WorkDelayProcess workDelayProcess = new WorkDelayProcess(); workDelayProcess.setWorkOrderId(workOrderId); workDelayProcess.setOperator(loginUser.getNickname()); workDelayProcess.setStage("派单人审核"); workDelayProcess.setOperationName("派单人审核"); workDelayProcess.setDescription("在派单人审核环节进行了派单人审核操作"); - workDelayProcess.setFeedback(bo.getAuditOpinion()); + workDelayProcess.setFeedback("审核通过:"+bo.getAuditOpinion()); + // 设置时间 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(WorkDelayProcess::getWorkOrderId, workOrderId) .orderByDesc(WorkDelayProcess::getOperationTime) @@ -943,11 +974,9 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { log.info("最近一个节点:{}-->操作时间{}",recentTarget.getOperationName(), recentTarget.getOperationTime()); Date lastTime = recentTarget.getOperationTime(); LocalDateTime time1 = LocalDateTime.ofInstant(lastTime.toInstant(), ZoneId.systemDefault()); - // 设置操作时间 LocalDateTime time2 = LocalDateTime.now(); Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); workDelayProcess.setOperationTime(date2); - workDelayProcess.setFeedback(bo.getHandleResult()); // 计算时间差 Duration duration = Duration.between(time1, time2); long durationInSeconds = duration.getSeconds(); @@ -966,7 +995,43 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { }else { throw new RuntimeException("延期申请不存在,无法审核!"); } - // TODO 根据 处理中(已延期) 去修改现在的超时时间 + + } else if (handleResult.equals("审核拒绝")) { + LambdaUpdateWrapper updateWrapper1 = new LambdaUpdateWrapper<>(); + updateWrapper1.eq(WorkOrderDelay::getId, bo.getId()); + updateWrapper1.set(WorkOrderDelay::getHandleResult, "审核拒绝"); + workOrderDelayMapper.update(null, updateWrapper1); + + WorkDelayProcess workDelayProcess = new WorkDelayProcess(); + workDelayProcess.setWorkOrderId(workOrderId); + workDelayProcess.setOperator(loginUser.getNickname()); + workDelayProcess.setStage("派单人审核"); + workDelayProcess.setOperationName("派单人审核"); + workDelayProcess.setDescription("在派单人审核环节进行了派单人审核操作"); + workDelayProcess.setFeedback("审核未通过:"+bo.getAuditOpinion()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(WorkDelayProcess::getWorkOrderId, workOrderId) + .orderByDesc(WorkDelayProcess::getOperationTime) + .last("LIMIT 1"); + WorkDelayProcess recentTarget = workDelayProcessMapper.selectOne(wrapper); + + if (recentTarget != null) { + log.info("最近一个节点:{}-->操作时间{}", recentTarget.getOperationName(), recentTarget.getOperationTime()); + Date lastTime = recentTarget.getOperationTime(); + LocalDateTime time1 = LocalDateTime.ofInstant(lastTime.toInstant(), ZoneId.systemDefault()); + // 设置操作时间 + LocalDateTime time2 = LocalDateTime.now(); + Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); + workDelayProcess.setOperationTime(date2); + // 计算时间差 + Duration duration = Duration.between(time1, time2); + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workDelayProcess.setDuration(formatDuration); + workDelayProcessMapper.insert(workDelayProcess); + }else { + throw new RuntimeException("延期申请不存在,无法审核!"); + } } // 记录操作历史记录表 WorkOrderDelayHistoryBo historyBo = new WorkOrderDelayHistoryBo();