diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionReportController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionReportController.java index ab36512..d5212e7 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionReportController.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionReportController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.inspection.domain.vo.OpsInspectionReportRecordVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -109,7 +110,8 @@ public class OpsInspectionReportController extends BaseController { * 生成纪录 */ @SaCheckPermission("inspection:report:record") - public R record(){ + @GetMapping("/record") + public R record(@RequestParam Long projectId){ return null; } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionReport.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionReport.java index 2bb881f..4b15ef4 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionReport.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionReport.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serial; +import java.util.Date; /** * 运维-巡检-报修对象 ops_inspection_report @@ -87,5 +88,8 @@ public class OpsInspectionReport extends BaseEntity { */ private String reportPhone; + private String reportFinal; + + private Date reportFinishTime; } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionReportBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionReportBo.java index bfa4fe3..3e68457 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionReportBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionReportBo.java @@ -9,6 +9,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.util.Date; + /** * 运维-巡检-报修业务对象 ops_inspection_report * @@ -95,5 +97,8 @@ public class OpsInspectionReportBo extends BaseEntity { @NotBlank(message = "电话不能为空", groups = {AddGroup.class, EditGroup.class}) private String reportPhone; + private String reportFinal; + + private Date reportFinishTime; } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportRecordVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportRecordVo.java new file mode 100644 index 0000000..0227f0c --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportRecordVo.java @@ -0,0 +1,30 @@ +package org.dromara.inspection.domain.vo; + + +import lombok.Data; + +@Data +public class OpsInspectionReportRecordVo { + + //本月总报修数 + private String byzbxs; + + //报修数较上周增长率 + private String bxsjszzzl; + + //平均处理时长 + private String pjclsc; + + //处理时长较上周增长率 + private String clscjszzzl; + + //待处理报修 + private String dclbx; + + //完成率 + private String wcl; + + //完成率较上周增长率 + private String wcljszzzl; + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportVo.java index c55608b..60ebc9a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionReportVo.java @@ -9,6 +9,7 @@ import org.dromara.personnel.domain.vo.OpsUserVo; import java.io.Serial; import java.io.Serializable; +import java.util.Date; /** @@ -107,5 +108,12 @@ public class OpsInspectionReportVo implements Serializable { @ExcelProperty(value = "报修人联系电话") private String reportPhone; + @ExcelProperty(value = "维修结果") + private String reportFinal; + + @ExcelProperty(value = "完成时间") + private Date reportFinishTime; + + private Date createTime; } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionReportServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionReportServiceImpl.java index 5652696..6fbdb4c 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionReportServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionReportServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.inspection.service.impl; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import org.apache.seata.spring.annotation.GlobalTransactional; +import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -12,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.inspection.domain.vo.OpsInspectionReportRecordVo; import org.dromara.personnel.domain.vo.OpsUserVo; import org.dromara.personnel.service.impl.OpsUserServiceImpl; import org.dromara.resource.api.RemoteFileService; @@ -24,7 +26,12 @@ import org.dromara.inspection.mapper.OpsInspectionReportMapper; import org.dromara.inspection.service.IOpsInspectionReportService; import org.springframework.web.multipart.MultipartFile; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.*; +import java.util.concurrent.TimeUnit; /** * 运维-巡检-报修Service业务层处理 @@ -219,4 +226,90 @@ public class OpsInspectionReportServiceImpl implements IOpsInspectionReportServi } } + public R record(Long projectId) { + //变量初始化 + OpsInspectionReportRecordVo recordVo = new OpsInspectionReportRecordVo(); + OpsInspectionReportBo bo = new OpsInspectionReportBo(); + bo.setProjectId(projectId); + //日期初始化 + LocalDate firstDay = LocalDate.now().withDayOfMonth(1); + LocalDate lastDay = firstDay.plusMonths(1).minusDays(1); + Date startDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date endDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + //查询当前项目的报修数据 + List opsInspectionReportVos = queryList(bo); + + //过滤本月数据 + List thisMonth = opsInspectionReportVos.stream() + .filter(vo -> vo.getCreateTime().after(startDate)) + .filter(vo -> vo.getCreateTime().before(endDate)) + .toList(); + //本月总报修数 + recordVo.setByzbxs(String.valueOf(thisMonth.size())); + + //平均处理时长 完成时间-创建时间 转为 分钟 / 总报 + Long time = 0L;//总共完成时间 + for (OpsInspectionReportVo vo : thisMonth) { + if (vo.getStatus().equals("3")){ + time += vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime(); + } + } + time = TimeUnit.MILLISECONDS.toMinutes(time); + BigDecimal divide1 = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP); + long hours = TimeUnit.MINUTES.toHours(Long.parseLong(divide1.toString())); + + //平均处理时长 + recordVo.setPjclsc(Long.toString(hours)); + + //待处理报修 + int size = thisMonth.stream().filter(vo -> vo.getStatus().equals("1")).toList().size(); + recordVo.setDclbx(String.valueOf(size)); + + //完成率 + //完成数 + int finishCount = thisMonth.stream().filter(vo -> vo.getStatus().equals("3")).toList().size(); + BigDecimal divide = BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP); + recordVo.setWcl(divide.multiply(new BigDecimal("100")).toString()); + + //统计上一月的数据 + firstDay = LocalDate.now().minusMonths(1).withDayOfMonth(1); + lastDay = firstDay.plusMonths(1).minusDays(1); + Date finalStartDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date finalEndDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + + + thisMonth = opsInspectionReportVos.stream() + .filter(vo -> vo.getCreateTime().after(finalStartDate)) + .filter(vo -> vo.getCreateTime().before(finalEndDate)) + .toList(); + + //上一月总报修数 + Long lastMonth = (long) thisMonth.size(); + //上一月平均处理时长 + BigDecimal avg = BigDecimal.ZERO; + time = 0L; + for (OpsInspectionReportVo vo : thisMonth) { + if (vo.getStatus().equals("3")){ + time += vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime(); + } + } + time = TimeUnit.MILLISECONDS.toMinutes(time); + avg = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(thisMonth.size()),2, RoundingMode.HALF_UP); + //上一月完成率 + finishCount = thisMonth.stream().filter(vo -> vo.getStatus().equals("3")).toList().size(); + divide = BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100.00)); + + //总报修数增长率 + BigDecimal multiply = BigDecimal.valueOf(Long.parseLong(recordVo.getByzbxs())).divide(BigDecimal.valueOf(lastMonth), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); + recordVo.setBxsjszzzl(multiply.toString()); + + //平均处理时长增长率 本月 / 上月 * 100 + recordVo.setClscjszzzl(BigDecimal.valueOf(Long.parseLong(recordVo.getPjclsc())).divide(avg,2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toString()); + + //完成率增长率 本月 / 上月 * 100 + recordVo.getWcl(); + + return null; + } + }