diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java index 80388cb..be3f33b 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java @@ -12,6 +12,7 @@ import org.apache.ibatis.annotations.Param; import org.dromara.platform.domain.InspectionPlanInfo; import org.dromara.platform.domain.WorkOrderInfo; import org.dromara.platform.domain.WorkReviewInfo; +import org.dromara.platform.domain.bo.WorkOrderDelayBo; import org.dromara.platform.domain.bo.WorkReviewInfoBo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -141,6 +142,22 @@ public class WorkOrderInfoController extends BaseController { } + @SaCheckPermission("platform:workOrder:delayOrder") + @PostMapping("/delayOrder") + public R delayOrder(@RequestBody WorkOrderInfoBo bo ) { + workOrderInfoService.delayOrder(bo); + return R.ok("工单延期成功!"); + } + + + @SaCheckPermission("platform:workOrder:delaySubmit ") + @PostMapping("/delaySubmit") + public R delaySubmit (@RequestBody WorkOrderDelayBo bo ) { + workOrderInfoService.delaySubmit(bo); + return R.ok("工单延期审批成功!"); + } + + @SaCheckPermission("platform:workOrder:initReviewOrder") @PostMapping("/initReviewOrder") public R initReviewOrder(@RequestBody WorkReviewInfoBo bo ) { diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java index 96567ed..7fb7fb7 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java @@ -197,4 +197,17 @@ public class WorkOrderInfoBo extends BaseEntity { */ private String backReason; + /** + * 延期描述 + */ + private String delayDescription; + + /** + * 延期时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date delayTime; + //TODO 延期图片 + + private String handleResult; } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderDelayVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderDelayVo.java index a5cf638..6372b26 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderDelayVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderDelayVo.java @@ -59,6 +59,8 @@ public class WorkOrderDelayVo implements Serializable { */ @ExcelProperty(value = "原定的预计结束时间", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "延=期前的时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date beforeDelayTime; /** @@ -66,6 +68,7 @@ public class WorkOrderDelayVo implements Serializable { */ @ExcelProperty(value = "新的预计结束时间", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "延=期后的时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date afterDelayTime; /** @@ -170,5 +173,9 @@ public class WorkOrderDelayVo implements Serializable { @ExcelProperty(value = "当前状态") private Long status; - + /** + * 创建时间(申请时间) 用于延期信息 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; } 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 6ea3ee8..03f5db0 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 @@ -3,6 +3,7 @@ package org.dromara.platform.service; import org.dromara.platform.domain.InspectionPlanInfo; import org.dromara.platform.domain.WorkOrderInfo; import org.dromara.platform.domain.WorkReviewInfo; +import org.dromara.platform.domain.bo.WorkOrderDelayBo; import org.dromara.platform.domain.bo.WorkReviewInfoBo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.platform.domain.bo.WorkOrderInfoBo; @@ -115,4 +116,16 @@ public interface IWorkOrderInfoService { * @param bo */ void rollBackOrder(WorkOrderInfoBo bo); + + /** + * 延期工单 + * @param bo + */ + void delayOrder(WorkOrderInfoBo bo); + + /** + * 延期工单提交 + * @param bo + */ + void delaySubmit(WorkOrderDelayBo bo); } 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 52d3df8..448433d 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.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -15,13 +16,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.platform.domain.*; -import org.dromara.platform.domain.bo.WorkOrderProcessBo; -import org.dromara.platform.domain.bo.WorkReviewInfoBo; +import org.dromara.platform.domain.bo.*; import org.dromara.platform.mapper.WorkDealInfoMapper; +import org.dromara.platform.mapper.WorkOrderDelayMapper; import org.dromara.platform.mapper.WorkOrderProcessMapper; -import org.dromara.platform.service.IProjectInfoService; -import org.dromara.platform.service.IWorkOrderProcessService; -import org.dromara.platform.service.IWorkReviewInfoService; +import org.dromara.platform.service.*; import org.dromara.workflow.domain.bo.StartProcessBo; import org.dromara.workflow.domain.bo.TaskBo; import org.dromara.workflow.domain.bo.TestLeaveBo; @@ -30,10 +29,8 @@ import org.flowable.engine.RuntimeService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.dromara.platform.domain.bo.WorkOrderInfoBo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.platform.mapper.WorkOrderInfoMapper; -import org.dromara.platform.service.IWorkOrderInfoService; import org.dromara.workflow.service.IActTaskService; import java.time.Duration; @@ -67,6 +64,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Resource private IWorkReviewInfoService workReviewInfoService; + @Resource + private IWorkOrderDelayService workOrderDelayService; + + @Resource + private WorkOrderDelayMapper workOrderDelayMapper; + /** * 查询工单信息 * @@ -83,12 +86,24 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { List attachments = serializer.deserializeAttachments(attachment); workOrderInfoVo.setAttachments(attachments); } -// TaskBo taskBo = new TaskBo(); -// PageQuery pageQuery = new PageQuery(); -// pageQuery.setPageNum(1); -// pageQuery.setPageSize(10); -// TableDataInfo pageByAllTaskWait = actTaskService.getPageByAllTaskWait(taskBo, pageQuery); -// log.info("待办任务:{}", pageByAllTaskWait.getRows()); + String workOrderId = workOrderInfoVo.getId(); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); + queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); + + WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); + + if (target != null && target.getOperationTime() != null) { + Date operationTime = target.getOperationTime(); + // 单位:小时 + Long responseTime = workOrderInfoVo.getResponseTime(); + // 设置剩余时间提示 + workOrderInfoVo.setRestTime(getTimeLeft(operationTime, responseTime)); + } else { + // 如果没有找到接单记录或没有接单时间,可以设为默认值 + workOrderInfoVo.setRestTime("暂无接单信息"); + } return workOrderInfoVo; } @@ -390,7 +405,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); List records = result.getRecords(); List filterRecords = records.stream() - .filter(record -> record.getStatus() != null && record.getStatus() < 4) + .filter(record -> record.getStatus() != null + && (record.getStatus() < 4 || record.getStatus() == 7)) .collect(Collectors.toList()); // 封装 @@ -471,7 +487,9 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); List records = result.getRecords(); List filterRecords = records.stream() - .filter(record -> record.getStatus() != null && record.getStatus() >= 4) + .filter(record -> record.getStatus() != null + && record.getStatus() >= 4 + && record.getStatus() != 7) .collect(Collectors.toList()); result.setRecords(filterRecords); return TableDataInfo.build(result); @@ -808,4 +826,57 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { log.info("运维单位处理时回退至派遣完毕,等待初审结果"); } } + + @Override + public void delayOrder(WorkOrderInfoBo bo) { + // 延期说明 + String delayDescription = bo.getDelayDescription(); + Long responseTime = bo.getResponseTime(); + String workOrderId = bo.getId(); + LoginUser loginUser = LoginHelper.getLoginUser(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); + queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); + WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); + Date operationTime = target.getOperationTime(); + + if (responseTime != null){ + // 延期前时间 operationTime + responseTime(小时) + Date beforeDelayTime = DateUtils.addHours(operationTime, responseTime.intValue()); + WorkOrderDelayBo delayBo = new WorkOrderDelayBo(); + // 延期审核的id 设置为工单的id 关联 + delayBo.setId(bo.getId()); + delayBo.setBeforeDelayTime(beforeDelayTime); + delayBo.setAfterDelayTime(bo.getDelayTime()); + delayBo.setProjectName(bo.getProjectName()); + delayBo.setContractName(bo.getContractName()); + delayBo.setStatus(bo.getStatus()); + delayBo.setDelayReason(delayDescription); + delayBo.setHandler(bo.getRepairer()); + delayBo.setHandleResult("待处理"); + delayBo.setApprover(loginUser.getNickname()); + workOrderDelayService.insertByBo(delayBo); + } + + } + + @Override + public void delaySubmit(WorkOrderDelayBo bo) { + String workOrderId = bo.getId(); + String handleResult = bo.getHandleResult(); + if (handleResult.equals("审核通过")) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, workOrderId) + // 处理中(已延期) + .set(WorkOrderInfo::getStatus,7); + baseMapper.update(null, updateWrapper); + + LambdaUpdateWrapper updateWrapper1 = new LambdaUpdateWrapper<>(); + updateWrapper1.eq(WorkOrderDelay::getId,bo.getId()); + updateWrapper1.set(WorkOrderDelay::getHandleResult,"审核通过"); + workOrderDelayMapper.update(null,updateWrapper1); + } + // 根据 处理中(已延期) 去修改现在的超时时间 + } + }