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 b5cdc58..8a8fe05 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 @@ -118,6 +118,15 @@ public class WorkOrderInfoController extends BaseController { return R.ok(rs); } + @SaCheckPermission("platform:workOrder:dispatchOrder") + @PostMapping("/dispatchOrder") + public R dispatchOrder(@RequestBody WorkOrderInfoBo bo ) { + workOrderInfoService.dispatchOrder(bo); + return R.ok("派遣工单成功!"); + } + + + @SaCheckPermission("platform:workOrder:takeOrder") @GetMapping("/takeOrder") public R takeOrder(String workOrderId ) { diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java index 7001bdb..73017af 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java @@ -147,6 +147,9 @@ public class WorkOrderInfo extends TenantEntity { * 4 初审 * 5 终审 * 6 结案 + * 7 处理中(已延期) + * 8 作废 + * */ private Long status; 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 7fb7fb7..a38e4df 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 @@ -128,7 +128,7 @@ public class WorkOrderInfoBo extends BaseEntity { /** * 维护要求 (0: 修复, 1: 新增, 2: 拆除, 3: 清除, 4: 其他) */ - @NotBlank(message = "维护要求 (0: 修复, 1: 新增, 2: 拆除, 3: 清除, 4: 其他)不能为空", groups = { AddGroup.class, EditGroup.class }) + //@NotBlank(message = "维护要求 (0: 修复, 1: 新增, 2: 拆除, 3: 清除, 4: 其他)不能为空", groups = { AddGroup.class, EditGroup.class }) private String maintenanceRequirement; /** @@ -210,4 +210,9 @@ public class WorkOrderInfoBo extends BaseEntity { //TODO 延期图片 private String handleResult; + + /** + * 操作处理 + */ + private String handle; } 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 6372b26..3681796 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 @@ -2,6 +2,7 @@ package org.dromara.platform.domain.vo; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.platform.domain.Attachment; import org.dromara.platform.domain.WorkOrderDelay; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -13,7 +14,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -178,4 +179,8 @@ public class WorkOrderDelayVo implements Serializable { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; + /** + * 延期图片 + */ + private List attachments; } 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 ff5d702..1e7d540 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 @@ -130,4 +130,6 @@ public interface IWorkOrderInfoService { void delaySubmit(WorkOrderDelayBo bo); TableDataInfo dispatchList(WorkOrderInfoBo bo, PageQuery pageQuery); + + void dispatchOrder(WorkOrderInfoBo bo); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java index 67af5d1..40ed9a4 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java @@ -8,6 +8,8 @@ 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.Attachment; +import org.dromara.platform.domain.AttachmentSerializer; import org.springframework.stereotype.Service; import org.dromara.platform.domain.bo.WorkOrderDelayBo; import org.dromara.platform.domain.vo.WorkOrderDelayVo; @@ -41,6 +43,12 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService { public WorkOrderDelayVo queryById(Long id){ WorkOrderDelayVo workOrderDelayVo = baseMapper.selectVoById(id); workOrderDelayVo.setHandler("监理人员、业主人员"); + String attachment = workOrderDelayVo.getAttachment(); + if (StringUtils.isNotBlank(attachment)) { + AttachmentSerializer serializer = new AttachmentSerializer(); + List attachments = serializer.deserializeAttachments(attachment); + workOrderDelayVo.setAttachments(attachments); + } return workOrderDelayVo; } 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 655bfab..c45a281 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 @@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.platform.domain.*; import org.dromara.platform.domain.bo.*; +import org.dromara.platform.domain.vo.WorkOrderDelayVo; import org.dromara.platform.mapper.*; import org.dromara.platform.service.*; import org.dromara.workflow.domain.bo.StartProcessBo; @@ -490,7 +491,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { List filterRecords = records.stream() .filter(record -> record.getStatus() != null && record.getStatus() >= 4 - && record.getStatus() != 7) + && record.getStatus() != 7 && record.getStatus() != 8) .collect(Collectors.toList()); result.setRecords(filterRecords); return TableDataInfo.build(result); @@ -835,6 +836,10 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { Long responseTime = bo.getResponseTime(); String workOrderId = bo.getId(); LoginUser loginUser = LoginHelper.getLoginUser(); + List attachments = bo.getAttachments(); + AttachmentSerializer serializer = new AttachmentSerializer(); + String serializedAttachment = serializer.serializeAttachments(attachments); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); @@ -856,7 +861,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { delayBo.setHandler(bo.getRepairer()); delayBo.setHandleResult("待处理"); delayBo.setApprover(loginUser.getNickname()); - workOrderDelayService.insertByBo(delayBo); + delayBo.setAttachment(serializedAttachment); + + // 存在则更新,不存在则新增 + WorkOrderDelayVo delayVo = workOrderDelayMapper.selectVoById(bo.getId()); + if (delayVo != null){ + workOrderDelayService.updateByBo(delayBo); + }else { + workOrderDelayService.insertByBo(delayBo); + } } } @@ -902,4 +915,87 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { return TableDataInfo.build(result); } + @Override + public void dispatchOrder(WorkOrderInfoBo bo) { + String handle = bo.getHandle(); + LoginUser loginUser = LoginHelper.getLoginUser(); + String workOrderId = bo.getId(); + if (handle.equals("事件派遣")) { + WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); + workOrderProcess.setWorkOrderId(workOrderId); + workOrderProcess.setOperator(loginUser.getNickname()); + workOrderProcess.setStage("故障派遣"); + workOrderProcess.setOperationName("故障派遣"); + workOrderProcess.setDescription("在故障派遣环节进行了故障派遣操作"); + // 获取最近一个节点的操作时间 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId) + .orderByDesc(WorkOrderProcess::getOperationTime) + .last("LIMIT 1"); + WorkOrderProcess recentTarget = workOrderProcessMapper.selectOne(wrapper); + 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()); + workOrderProcess.setOperationTime(date2); + // 设置派遣意见返回 + workOrderProcess.setFeedback(bo.getDispatchOpinion()); + // 计算时间差 + Duration duration = Duration.between(time1, time2); + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workOrderProcess.setDuration(formatDuration); + + Boolean flag = workOrderProcessService.insertByBo(workOrderProcess); + + if (flag) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, workOrderId) + .set(WorkOrderInfo::getStatus, 1); + baseMapper.update(null, updateWrapper); + log.info("已派遣至运维单位!"); + } + }else if (handle.equals("事件作废")){ + WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); + workOrderProcess.setWorkOrderId(workOrderId); + workOrderProcess.setOperator(loginUser.getNickname()); + workOrderProcess.setStage("故障派遣"); + workOrderProcess.setOperationName("事件作废"); + workOrderProcess.setDescription("在故障派遣环节进行了事件作废操作"); + // 获取最近一个节点的操作时间 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId) + .orderByDesc(WorkOrderProcess::getOperationTime) + .last("LIMIT 1"); + WorkOrderProcess recentTarget = workOrderProcessMapper.selectOne(wrapper); + 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()); + workOrderProcess.setOperationTime(date2); + // 设置派遣意见返回 + workOrderProcess.setFeedback(bo.getDispatchOpinion()); + // 计算时间差 + Duration duration = Duration.between(time1, time2); + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workOrderProcess.setDuration(formatDuration); + + Boolean flag = workOrderProcessService.insertByBo(workOrderProcess); + + if (flag) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, workOrderId) + .set(WorkOrderInfo::getStatus, 8); + baseMapper.update(null, updateWrapper); + log.info("作废!"); + } + } + + } + }