From 0e472041b9dc89e12745db7b19ca4568bcd39be8 Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Tue, 17 Jun 2025 11:22:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E4=BF=A1=E6=81=AF=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E7=9B=B8=E5=85=B3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/controller/ExcelController.java | 4 +- .../controller/WorkOrderInfoController.java | 5 +- .../converter/WorkOrderStatusConverter.java | 70 ++++++++++++++ .../platform/domain/dto/WorkOrderInfoDto.java | 95 +++++++++++++++++++ .../platform/domain/vo/WorkOrderInfoVo.java | 28 ++++-- .../service/IWorkOrderInfoService.java | 3 +- .../impl/WorkOrderInfoServiceImpl.java | 80 +++++++++++++--- 7 files changed, 259 insertions(+), 26 deletions(-) create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/converter/WorkOrderStatusConverter.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/WorkOrderInfoDto.java 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 3e5e03d..0728b48 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 @@ -79,9 +79,7 @@ public class ExcelController { */ @PostMapping("/ExportWorkOrderInfo") public void ExportWorkOrderInfo(WorkOrderInfoBo bo, HttpServletResponse response) throws IOException { - List list = workOrderInfoService.queryList(bo); - - // TODO 填充数据 + List list = workOrderInfoService.queryListForExport(bo); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); 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 cdd3ff7..e62aa8f 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 @@ -14,6 +14,7 @@ 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.dto.WorkOrderInfoDto; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -217,8 +218,8 @@ public class WorkOrderInfoController extends BaseController { } @GetMapping("/getOverTimeCost") - public R getOverTimeCost(String workOrderId ) { - WorkOrderInfoVo rs = workOrderInfoService.getOverTimeCost(workOrderId); + public R getOverTimeCost(String workOrderId ) { + WorkOrderInfoDto rs = workOrderInfoService.getOverTimeCost(workOrderId); return R.ok(rs); } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/converter/WorkOrderStatusConverter.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/converter/WorkOrderStatusConverter.java new file mode 100644 index 0000000..3d2b1fa --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/converter/WorkOrderStatusConverter.java @@ -0,0 +1,70 @@ +package org.dromara.platform.converter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * 用户信息,性别,转换器。 + * + * @author 张德龙 + */ +public class WorkOrderStatusConverter implements Converter { + /** + * Convert Java objects to excel objects + * + * @param value Java Data.NotNull. + * @param contentProperty Content property.Nullable. + * @param globalConfiguration Global configuration.NotNull. + * @return Data to put into a Excel + * * 当前状态 + * * 0 待派遣 + * * 1 待接单 + * * 2 处理中 + * * 3 运维单位处理时回退至派遣 + * * 4 初审 + * * 5 终审 + * * 6 结案 + * * 7 处理中(已延期) + * * 8 作废 + * * 9 待接单(派遣) + * * 10 待接单(转派) + */ + @Override + public WriteCellData convertToExcelData(Long value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + if (value == null) { + return new WriteCellData<>("未知"); + } + + long status = value; // 自动拆箱为基本类型 long + + switch ((int) status) { // 可以安全地转为 int + case 0: + return new WriteCellData<>("待派遣"); + case 1: + return new WriteCellData<>("待接单"); + case 2: + return new WriteCellData<>("处理中"); + case 3: + return new WriteCellData<>("运维单位处理时回退至派遣"); + case 4: + return new WriteCellData<>("初审"); + case 5: + return new WriteCellData<>("终审"); + case 6: + return new WriteCellData<>("结案"); + case 7: + return new WriteCellData<>("处理中(已延期)"); + case 8: + return new WriteCellData<>("作废"); + case 9: + return new WriteCellData<>("待接单(派遣)"); + case 10: + return new WriteCellData<>("待接单(转派)"); + default: + return new WriteCellData<>("未知"); + } + + } +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/WorkOrderInfoDto.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/WorkOrderInfoDto.java new file mode 100644 index 0000000..30fdfac --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/dto/WorkOrderInfoDto.java @@ -0,0 +1,95 @@ +package org.dromara.platform.domain.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; +import org.dromara.platform.domain.Attachment; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 工单信息视图对象 work_order_info + * + * @author gejunhao + * @date 2025-04-27 + */ +@Data +public class WorkOrderInfoDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 工单ID + */ + @ExcelProperty(value = "工单ID") + private String id; + + + /** + * 当前状态 + * 0 待派遣 + * 1 待接单 + * 2 处理中 + * 3 运维单位处理时回退至派遣 + * 4 初审 + * 5 终审 + * 6 结案 + * 7 处理中(已延期) + * 8 作废 + * 9 待接单(派遣) + * 10 待接单(转派) + */ + @ExcelProperty(value = "当前状态") + private Long status; + + + /** + * 剩余接单时间 + */ + private String orderAcceptDeadline; + + @ExcelProperty(value = "延期理由") + private String delayReason; + + /** + * 延期时间 + */ + @ExcelProperty(value = "延期时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date delayTime; + + + @ExcelProperty(value = "是否延期") + private String isDelay; + + @ExcelProperty(value = "是否超期") + private String isTimeOut; + + + @ExcelProperty(value = "响应是否超期") + private String isHandleOverTime; + + @ExcelProperty(value = "接单是否超期") + private String isOrderTakingOverTime; + + @ExcelProperty(value = "响应超时(单位:小时)") + private int handleTimeOutCount; + + @ExcelProperty(value = "接单超时(单位:小时)") + private int orderAcceptTimeOutCount; + + @ExcelProperty(value = "响应超期扣款") + private Double handleCost; + + @ExcelProperty(value = "接单超期扣款") + private Double orderTakingCost; + + @ExcelProperty(value = "总扣款") + private Double totalCost; +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java index f45d74c..ac55f38 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java @@ -6,6 +6,7 @@ import org.dromara.common.translation.annotation.Translation; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.common.translation.constant.TransConstant; +import org.dromara.platform.converter.WorkOrderStatusConverter; import org.dromara.platform.domain.Attachment; import org.dromara.platform.domain.WorkOrderInfo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; @@ -130,7 +131,7 @@ public class WorkOrderInfoVo implements Serializable { /** * 故障图片 */ - @ExcelProperty(value = "故障图片") + @ExcelIgnore private String attachment; /** @@ -190,7 +191,7 @@ public class WorkOrderInfoVo implements Serializable { * 9 待接单(派遣) * 10 待接单(转派) */ - @ExcelProperty(value = "当前状态") + @ExcelProperty(value = "当前状态",converter = WorkOrderStatusConverter.class) private Long status; @TableField(exist = false) @@ -237,9 +238,15 @@ public class WorkOrderInfoVo implements Serializable { @ExcelProperty(value = "是否延期") private String isDelay; - @ExcelProperty(value = "是否超期") - private String isTimeOut; +// @ExcelProperty(value = "是否超期") +// private String isTimeOut; + + + @ExcelProperty(value = "响应是否超期") + private String isHandleOverTime; + @ExcelProperty(value = "接单是否超期") + private String isOrderTakingOverTime; @ExcelProperty(value = "响应超时(单位:小时)") private int handleTimeOutCount; @@ -248,9 +255,18 @@ public class WorkOrderInfoVo implements Serializable { private int orderAcceptTimeOutCount; @ExcelProperty(value = "响应超期扣款") - private Double handleTimeOutCost; + private Double handleCost; @ExcelProperty(value = "接单超期扣款") - private Double orderAcceptTimeOutCost; + private Double orderTakingCost; + + + @ExcelProperty(value = "总扣款") + private Double totalCost; + + @ExcelProperty(value = "其他扣款") + private Double otherCost; + @ExcelProperty(value = "其他扣款原因") + private String otherCostReason; } 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 c969d4f..5b97514 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 @@ -5,6 +5,7 @@ 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.dto.WorkOrderInfoDto; import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.platform.domain.bo.WorkOrderInfoBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -139,5 +140,5 @@ public interface IWorkOrderInfoService { List queryListForExport(WorkOrderInfoBo bo); - WorkOrderInfoVo getOverTimeCost(String workOrderId); + WorkOrderInfoDto getOverTimeCost(String workOrderId); } 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 67e9060..9cc3a2e 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 @@ -1,5 +1,6 @@ package org.dromara.platform.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -20,6 +21,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.dto.WorkOrderInfoDto; import org.dromara.platform.domain.vo.WorkOrderDelayVo; import org.dromara.platform.mapper.*; import org.dromara.platform.service.*; @@ -127,6 +129,11 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { // 如果没有找到接单记录或没有接单时间,可以设为默认值 workOrderInfoVo.setRestTime("暂无接单信息"); } + WorkOrderInfoDto overTimeCost = this.getOverTimeCost(id); + workOrderInfoVo.setHandleCost(overTimeCost.getHandleCost()); + workOrderInfoVo.setOrderTakingCost(overTimeCost.getOrderTakingCost()); + workOrderInfoVo.setIsHandleOverTime(overTimeCost .getIsHandleOverTime()); + workOrderInfoVo.setIsOrderTakingOverTime(overTimeCost.getIsOrderTakingOverTime()); return workOrderInfoVo; } @@ -495,10 +502,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { qw.orderByAsc(WorkOrderProcess::getCreateTime); qw.last("LIMIT 1"); WorkOrderProcess latest = workOrderProcessMapper.selectOne(qw); - Date operationTime = latest.getOperationTime(); - // 单位:小时 - Long responseTime = record.getResponseTime(); - record.setRestTime(getTimeLeft(operationTime, responseTime)); + if (latest != null){ + Date operationTime = latest.getOperationTime(); + // 单位:小时 + Long responseTime = record.getResponseTime(); + record.setRestTime(getTimeLeft(operationTime, responseTime)); + } } // 设置延期信息 @@ -1435,7 +1444,13 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { LambdaQueryWrapper dealQueryWrapper = new LambdaQueryWrapper<>(); dealQueryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); dealQueryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); - dealQueryWrapper.orderByDesc(WorkOrderProcess::getCreateTime); + if (record.getStatus()==9){ + // 如果是派遣的时间还是按照第一个人的接单时间来计算,否则都是按照最后一次接单时间来计算 + dealQueryWrapper.orderByAsc(WorkOrderProcess::getCreateTime); + }else { + dealQueryWrapper.orderByDesc(WorkOrderProcess::getCreateTime); + } + dealQueryWrapper.last("LIMIT 1"); WorkOrderProcess dealProcess = workOrderProcessMapper.selectOne(dealQueryWrapper); if (dealProcess != null && dealProcess.getOperationTime() != null) { @@ -1446,27 +1461,40 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { if (handleTimeOutSituation.startsWith("超时")) { int timeoutHours = calculateTotalTimeoutHours(handleTimeOutSituation); record.setHandleTimeOutCount(timeoutHours); - record.setHandleTimeOutCost(timeoutHours * Double.valueOf(handleTimeOutCost)); + record.setHandleCost(timeoutHours * Double.parseDouble(handleTimeOutCost)); + record.setIsHandleOverTime("是"); + }else { + record.setHandleCost(0.0); + record.setIsHandleOverTime("否"); } + if (orderAcceptTimeOutSituation.startsWith("超时")) { int timeoutHours = calculateTotalTimeoutHours(orderAcceptTimeOutSituation); record.setOrderAcceptTimeOutCount(timeoutHours); - record.setHandleTimeOutCost(timeoutHours * Double.valueOf(orderTakingCost)); + record.setOrderTakingCost(timeoutHours * Double.parseDouble(orderTakingCost)); + record.setIsOrderTakingOverTime("是"); + }else { + record.setOrderTakingCost(0.0); + record.setIsOrderTakingOverTime("否"); } + + // 判空 + Double handleCost = record.getHandleCost() == null ? 0.0 : record.getHandleCost(); + Double orderAcceptCost = record.getOrderTakingCost() == null ? 0.0 : record.getOrderTakingCost(); + record.setTotalCost(handleCost + orderAcceptCost); } return orderInfoVoList; } @Override - public WorkOrderInfoVo getOverTimeCost(String workOrderId) { + public WorkOrderInfoDto getOverTimeCost(String workOrderId) { WorkOrderInfoVo record = baseMapper.selectVoById(workOrderId); String handleTimeOutSituation = ""; String orderAcceptTimeOutSituation = ""; - String projectName = record.getProjectName(); // 根据项目名称获取接单超期信息 LambdaQueryWrapper projectQueryWrapper = new LambdaQueryWrapper<>(); - projectQueryWrapper.eq(ProjectInfo::getProjectName, projectName); + projectQueryWrapper.eq(ProjectInfo::getProjectName, record.getProjectName()); projectQueryWrapper.last("LIMIT 1"); ProjectInfo projectInfo = projectInfoMapper.selectOne(projectQueryWrapper); String orderTakingOverTime = projectInfo.getOrderTakingOverTime(); @@ -1488,7 +1516,14 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { LambdaQueryWrapper dealQueryWrapper = new LambdaQueryWrapper<>(); dealQueryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); dealQueryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); - dealQueryWrapper.orderByDesc(WorkOrderProcess::getCreateTime); + + if (record.getStatus()==9){ + // 如果是派遣的时间还是按照第一个人的接单时间来计算,否则都是按照最后一次接单时间来计算 + dealQueryWrapper.orderByAsc(WorkOrderProcess::getCreateTime); + }else { + dealQueryWrapper.orderByDesc(WorkOrderProcess::getCreateTime); + } + dealQueryWrapper.last("LIMIT 1"); WorkOrderProcess dealProcess = workOrderProcessMapper.selectOne(dealQueryWrapper); if (dealProcess != null && dealProcess.getOperationTime() != null) { @@ -1499,14 +1534,31 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { if (handleTimeOutSituation.startsWith("超时")) { int timeoutHours = calculateTotalTimeoutHours(handleTimeOutSituation); record.setHandleTimeOutCount(timeoutHours); - record.setHandleTimeOutCost(timeoutHours * Double.parseDouble(handleTimeOutCost)); + record.setHandleCost(timeoutHours * Double.parseDouble(handleTimeOutCost)); + record.setIsHandleOverTime("是"); + }else { + record.setHandleCost(0.0); + record.setIsHandleOverTime("否"); } + if (orderAcceptTimeOutSituation.startsWith("超时")) { int timeoutHours = calculateTotalTimeoutHours(orderAcceptTimeOutSituation); record.setOrderAcceptTimeOutCount(timeoutHours); - record.setHandleTimeOutCost(timeoutHours * Double.parseDouble(orderTakingCost)); + record.setOrderTakingCost(timeoutHours * Double.parseDouble(orderTakingCost)); + record.setIsOrderTakingOverTime("是"); + }else { + record.setOrderTakingCost(0.0); + record.setIsOrderTakingOverTime("否"); } - return record; + + // 判空 + Double handleCost = record.getHandleCost() == null ? 0.0 : record.getHandleCost(); + Double orderAcceptCost = record.getOrderTakingCost() == null ? 0.0 : record.getOrderTakingCost(); + record.setTotalCost(handleCost + orderAcceptCost); + + WorkOrderInfoDto workOrderInfoDto = new WorkOrderInfoDto(); + BeanUtil.copyProperties(record, workOrderInfoDto); + return workOrderInfoDto; } /**