diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionOrderController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionOrderController.java index 3a82758..33206be 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionOrderController.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionOrderController.java @@ -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 record(Long projectId) { + return opsInspectionOrderService.record(projectId); + } } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionOrder.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionOrder.java index d68e07c..1df22ed 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionOrder.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionOrder.java @@ -71,7 +71,7 @@ public class OpsInspectionOrder extends BaseEntity { /** * 文件ID */ - private Long fileId; + private String fileId; /** * 文件路径 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionOrderBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionOrderBo.java index 4a87dfa..3066944 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionOrderBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionOrderBo.java @@ -77,7 +77,7 @@ public class OpsInspectionOrderBo extends BaseEntity { /** * 文件ID */ - private Long fileId; + private String fileId; /** * 文件路径 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionOrderVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionOrderVo.java index 4ca77bd..a958d9d 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionOrderVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionOrderVo.java @@ -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; } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OrderRecordVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OrderRecordVo.java new file mode 100644 index 0000000..281b83f --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OrderRecordVo.java @@ -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; + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionNodeServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionNodeServiceImpl.java index a651f83..0be80b0 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionNodeServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionNodeServiceImpl.java @@ -103,6 +103,7 @@ public class OpsInspectionNodeServiceImpl implements IOpsInspectionNodeService { } } } +// log.info("{}", StringUtils.join(ids, ",")); return R.ok(StringUtils.join(ids, ",")); }else{ return R.fail(); diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionOrderServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionOrderServiceImpl.java index ccc8c53..223c63a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionOrderServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionOrderServiceImpl.java @@ -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 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 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 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 vos = queryList(bo); + //过滤本月数据 + List 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); + } + }