09-22-提交

This commit is contained in:
2025-09-22 17:50:21 +08:00
parent 959030fdb1
commit c17c53fd95
6 changed files with 143 additions and 1 deletions

View File

@ -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<Object> record(){
@GetMapping("/record")
public R<OpsInspectionReportRecordVo> record(@RequestParam Long projectId){
return null;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<OpsInspectionReportRecordVo> 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<OpsInspectionReportVo> opsInspectionReportVos = queryList(bo);
//过滤本月数据
List<OpsInspectionReportVo> 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;
}
}