09-23-工单纪录

This commit is contained in:
2025-09-23 20:36:50 +08:00
parent b26cdfa495
commit 56f6c9a446
7 changed files with 163 additions and 20 deletions

View File

@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.inspection.domain.vo.OrderRecordVo;
import org.dromara.inspection.service.impl.OpsInspectionOrderServiceImpl;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -35,7 +37,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
@RequestMapping("/order")
public class OpsInspectionOrderController extends BaseController {
private final IOpsInspectionOrderService opsInspectionOrderService;
private final OpsInspectionOrderServiceImpl opsInspectionOrderService;
/**
* 查询运维-巡检-工单列表
@ -103,4 +105,13 @@ public class OpsInspectionOrderController extends BaseController {
@PathVariable("ids") Long[] ids) {
return toAjax(opsInspectionOrderService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 获取纪录
*/
@SaCheckPermission("inspection:order:record")
@GetMapping("/record")
public R<OrderRecordVo> record(Long projectId) {
return opsInspectionOrderService.record(projectId);
}
}

View File

@ -71,7 +71,7 @@ public class OpsInspectionOrder extends BaseEntity {
/**
* 文件ID
*/
private Long fileId;
private String fileId;
/**
* 文件路径

View File

@ -77,7 +77,7 @@ public class OpsInspectionOrderBo extends BaseEntity {
/**
* 文件ID
*/
private Long fileId;
private String fileId;
/**
* 文件路径

View File

@ -9,6 +9,7 @@ import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.personnel.domain.vo.OpsUserVo;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import java.io.Serial;
import java.io.Serializable;
@ -87,7 +88,7 @@ public class OpsInspectionOrderVo implements Serializable {
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private Long fileId;
private String fileId;
/**
* 文件路径
@ -149,7 +150,7 @@ public class OpsInspectionOrderVo implements Serializable {
private Long getOrderPerson;
private OpsUserVo getOrderPersonVo;
private RemoteUserVo getOrderPersonVo;
/**
* 完成时间
@ -169,8 +170,10 @@ public class OpsInspectionOrderVo implements Serializable {
@ExcelProperty(value = "是否重点跟踪1是2否")
private String point;
private Long create_by;
private Date createTime;
private OpsUserVo sendOrderPersonVo;
private Long createBy;
private RemoteUserVo sendOrderPersonVo;
}

View File

@ -0,0 +1,43 @@
package org.dromara.inspection.domain.vo;
import lombok.Data;
@Data
public class OrderRecordVo {
/**
* 本月派单数
*/
private String bypds;
/**
* 拍单数增长率
*/
private String pdzzl;
/**
* 平均响应时间
*/
private String pjxysj;
/**
* 响应时间增长率
*/
private String xysjzzl;
/**
* 待接收工单
*/
private String djsgd;
/**
* 按时完成率
*/
private String aswcl;
/**
* 完成增长率
*/
private String wczzl;
}

View File

@ -103,6 +103,7 @@ public class OpsInspectionNodeServiceImpl implements IOpsInspectionNodeService {
}
}
}
// log.info("{}", StringUtils.join(ids, ","));
return R.ok(StringUtils.join(ids, ","));
}else{
return R.fail();

View File

@ -1,5 +1,7 @@
package org.dromara.inspection.service.impl;
import org.apache.dubbo.config.annotation.DubboReference;
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;
@ -11,24 +13,27 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.inspection.domain.OpsInspectionNode;
import org.dromara.inspection.domain.vo.OpsInspectionNodeVo;
import org.dromara.inspection.domain.bo.OpsInspectionRepairBo;
import org.dromara.inspection.domain.vo.*;
import org.dromara.inspection.mapper.OpsInspectionNodeMapper;
import org.dromara.personnel.domain.vo.OpsUserVo;
import org.dromara.personnel.mapper.OpsUserMapper;
import org.dromara.resource.api.RemoteFileService;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.inspection.domain.bo.OpsInspectionOrderBo;
import org.dromara.inspection.domain.vo.OpsInspectionOrderVo;
import org.dromara.inspection.domain.OpsInspectionOrder;
import org.dromara.inspection.mapper.OpsInspectionOrderMapper;
import org.dromara.inspection.service.IOpsInspectionOrderService;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* 运维-巡检-工单Service业务层处理
@ -46,7 +51,10 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService
private final OpsInspectionNodeMapper nodeMapper;
private final OpsUserMapper userMapper;
@DubboReference
private RemoteFileService remoteFileService;
@DubboReference
private RemoteUserService remoteUserService;
/**
* 查询运维-巡检-工单
@ -111,6 +119,21 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService
public Boolean insertByBo(OpsInspectionOrderBo bo) {
OpsInspectionOrder add = MapstructUtils.convert(bo, OpsInspectionOrder.class);
validEntityBeforeSave(add);
if (add.getFileId() != null){
String[] split = add.getFileId().split(",");
List<String> urls = new ArrayList<>();
for (String s : split) {
String ossUrl = remoteFileService.selectUrlByIds(s);
if (ossUrl != null){
urls.add(ossUrl);
}
}
String join = String.join(",", urls);
add.setFileUrl(join);
bo.setFileUrl(join);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
@ -177,16 +200,16 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService
}
//处理派单人
OpsUserVo opsUserVo = userMapper.selectVoById(vo.getCreate_by());
if (opsUserVo != null){
vo.setSendOrderPersonVo(opsUserVo);
List<RemoteUserVo> remoteUserVos = remoteUserService.selectListByIds(List.of(vo.getCreateBy()));
if (remoteUserVos != null && !remoteUserVos.isEmpty()){
vo.setSendOrderPersonVo(remoteUserVos.getFirst());
}
//处理接单人
if (vo.getGetOrderPerson() != null){
opsUserVo = userMapper.selectVoById(vo.getGetOrderPerson());
if (opsUserVo != null){
vo.setGetOrderPersonVo(opsUserVo);
remoteUserVos = remoteUserService.selectListByIds(Collections.singletonList(vo.getGetOrderPerson()));
if (remoteUserVos != null && !remoteUserVos.isEmpty()){
vo.setGetOrderPersonVo(remoteUserVos.getFirst());
}
}
@ -206,4 +229,66 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService
}
}
/**
* 获取纪录
*/
public R<OrderRecordVo> record(Long projectId){
//变量初始化
OrderRecordVo recordVo = new OrderRecordVo();
OpsInspectionOrderBo bo = new OpsInspectionOrderBo();
bo.setProjectId(projectId);
//日期初始化
Date startDate = Date.from(LocalDate.now().withDayOfMonth(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(LocalDate.now().withDayOfMonth(1).plusMonths(1).minusDays(1).atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
//查询当前项目的本月数据
List<OpsInspectionOrderVo> vos = queryList(bo);
//过滤本月数据
List<OpsInspectionOrderVo> thisMonth = vos.stream()
.filter(vo -> vo.getCreateTime().after(startDate))
.filter(vo -> vo.getCreateTime().before(endDate))
.toList();
//本月派单总数
BigDecimal bypdzs = BigDecimal.valueOf(thisMonth.size());
//统计平均响应时间
Long zgxysj = 0L;//总共响应时间
for (OpsInspectionOrderVo orderVo : thisMonth) {
if (orderVo.getGetOrderTime() != null) {
zgxysj += orderVo.getGetOrderTime().getTime() - orderVo.getCreateTime().getTime();
}
}
//平均响应时间
BigDecimal avg = BigDecimal.valueOf(TimeUnit.MILLISECONDS.toMinutes(zgxysj));
//统计待接收工单
int waiting = thisMonth.stream().filter(vo -> vo.getStatus().equals("2")).toList().size();
//待接单数
BigDecimal djds = BigDecimal.valueOf(waiting);
//按时完成率 找到完成的工单 获取工单完成时间
//获取所有完成数
int sywcs = thisMonth.stream()
.filter(vo -> vo.getStatus().equals("4"))
.toList().size();
//获取按时完成数
int aswcs = thisMonth.stream()
.filter(vo -> vo.getStatus().equals("4"))
.filter(vo -> vo.getFinishiOrderTime().before(endDate))
.toList().size();
//按时完成率
BigDecimal aswcl;
if (sywcs > 0) {
aswcl = BigDecimal.valueOf(aswcs).divide(BigDecimal.valueOf(sywcs), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100.00));
}else {
aswcl = BigDecimal.valueOf(0);
}
recordVo.setBypds(String.valueOf(bypdzs));
recordVo.setPjxysj(String.valueOf(avg));
recordVo.setDjsgd(String.valueOf(djds));
recordVo.setAswcl(String.valueOf(aswcl));
return R.ok(recordVo);
}
}