09-22-提交
This commit is contained in:
@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.constraints.*;
|
import jakarta.validation.constraints.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import org.dromara.inspection.domain.vo.OpsInspectionReportRecordVo;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
@ -109,7 +110,8 @@ public class OpsInspectionReportController extends BaseController {
|
|||||||
* 生成纪录
|
* 生成纪录
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("inspection:report:record")
|
@SaCheckPermission("inspection:report:record")
|
||||||
public R<Object> record(){
|
@GetMapping("/record")
|
||||||
|
public R<OpsInspectionReportRecordVo> record(@RequestParam Long projectId){
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 运维-巡检-报修对象 ops_inspection_report
|
* 运维-巡检-报修对象 ops_inspection_report
|
||||||
@ -87,5 +88,8 @@ public class OpsInspectionReport extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private String reportPhone;
|
private String reportPhone;
|
||||||
|
|
||||||
|
private String reportFinal;
|
||||||
|
|
||||||
|
private Date reportFinishTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,8 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import jakarta.validation.constraints.*;
|
import jakarta.validation.constraints.*;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 运维-巡检-报修业务对象 ops_inspection_report
|
* 运维-巡检-报修业务对象 ops_inspection_report
|
||||||
*
|
*
|
||||||
@ -95,5 +97,8 @@ public class OpsInspectionReportBo extends BaseEntity {
|
|||||||
@NotBlank(message = "电话不能为空", groups = {AddGroup.class, EditGroup.class})
|
@NotBlank(message = "电话不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
private String reportPhone;
|
private String reportPhone;
|
||||||
|
|
||||||
|
private String reportFinal;
|
||||||
|
|
||||||
|
private Date reportFinishTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@ -9,6 +9,7 @@ import org.dromara.personnel.domain.vo.OpsUserVo;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,5 +108,12 @@ public class OpsInspectionReportVo implements Serializable {
|
|||||||
@ExcelProperty(value = "报修人联系电话")
|
@ExcelProperty(value = "报修人联系电话")
|
||||||
private String reportPhone;
|
private String reportPhone;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "维修结果")
|
||||||
|
private String reportFinal;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "完成时间")
|
||||||
|
private Date reportFinishTime;
|
||||||
|
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package org.dromara.inspection.service.impl;
|
|||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
import org.apache.dubbo.config.annotation.DubboService;
|
import org.apache.dubbo.config.annotation.DubboService;
|
||||||
import org.apache.seata.spring.annotation.GlobalTransactional;
|
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.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
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 com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.inspection.domain.vo.OpsInspectionReportRecordVo;
|
||||||
import org.dromara.personnel.domain.vo.OpsUserVo;
|
import org.dromara.personnel.domain.vo.OpsUserVo;
|
||||||
import org.dromara.personnel.service.impl.OpsUserServiceImpl;
|
import org.dromara.personnel.service.impl.OpsUserServiceImpl;
|
||||||
import org.dromara.resource.api.RemoteFileService;
|
import org.dromara.resource.api.RemoteFileService;
|
||||||
@ -24,7 +26,12 @@ import org.dromara.inspection.mapper.OpsInspectionReportMapper;
|
|||||||
import org.dromara.inspection.service.IOpsInspectionReportService;
|
import org.dromara.inspection.service.IOpsInspectionReportService;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
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.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 运维-巡检-报修Service业务层处理
|
* 运维-巡检-报修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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user