Просмотр исходного кода

pms 报表统计 运维成本 保养功能优化

zhangcl 1 день назад
Родитель
Сommit
4582c89fbf

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorder/vo/IotMainWorkOrderPageReqVO.java

@@ -99,4 +99,7 @@ public class IotMainWorkOrderPageReqVO extends PageParam {
     private List<Long> workOrderIds;
 
     private Set<Long> deptIds;
+
+    @Schema(description = "年", example = "2016")
+    private Integer year;
 }

+ 33 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/stat/IotRepairController.java

@@ -89,15 +89,44 @@ public class IotRepairController {
         pageReqVO.setType("out");
         hbOutFee = iotMaintainMapper.getMaintainFee(pageReqVO);
 
+        workOrderReqVO.setDeptIds(ids);
+        workOrderReqVO.setCreateTime(createTime);
+        List<IotMainWorkOrderDO> tbWorkOrders = iotMainWorkOrderService.workOrders(workOrderReqVO);
+        tbByFee = tbWorkOrders.stream()
+                .map(IotMainWorkOrderDO::getCost)
+                .map(fee -> Objects.isNull(fee) ? BigDecimal.ZERO : fee)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
         BigDecimal tbTotalFee = new BigDecimal("0");
         BigDecimal tbOutFee = new BigDecimal("0");
         //获取同比
         if ("year".equals(pageReqVO.getTimeType())){
             tbTotalFee = hbTotalFee==null?BigDecimal.ZERO:hbTotalFee;
             tbOutFee = hbOutFee==null?BigDecimal.ZERO:hbOutFee;
-            // 保养 年 无同比环比数据
-            hbByFee = hbByFee==null?BigDecimal.ZERO:hbByFee;
-        } else if ("month".equals(pageReqVO.getTimeType())){
+            // 环比 当年所有数据 与 去年所有数据 比较
+            int currentYear = startTime.getYear();
+            int lastYear = currentYear - 1;
+            workOrderReqVO.setDeptIds(ids);
+            workOrderReqVO.setCreateTime(null);
+            // 查询当前所选时间年份的数据
+            workOrderReqVO.setYear(currentYear);
+            List<IotMainWorkOrderDO> hbCurrentWorkOrders = iotMainWorkOrderService.workOrders(workOrderReqVO);
+            byFee = hbCurrentWorkOrders.stream()
+                    .map(IotMainWorkOrderDO::getCost)
+                    .map(fee -> Objects.isNull(fee) ? BigDecimal.ZERO : fee)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 查询当前所选时间年份上一年的保养数据
+            workOrderReqVO.setYear(lastYear);
+            List<IotMainWorkOrderDO> hbLastWorkOrders = iotMainWorkOrderService.workOrders(workOrderReqVO);
+            hbByFee = hbLastWorkOrders.stream()
+                    .map(IotMainWorkOrderDO::getCost)
+                    .map(fee -> Objects.isNull(fee) ? BigDecimal.ZERO : fee)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            // 按照年的同比数据 比较整年数据
+            tbByFee = hbByFee;
+
+        } else if ("month".equals(pageReqVO.getTimeType())) {
             LocalDateTime lastMonthStart = startTime.minusMonths(1);
             LocalDateTime lastMonthEnd = endTime.minusMonths(1);
             LocalDateTime[] monthTime = pageReqVO.getCreateTime();
@@ -115,7 +144,7 @@ public class IotRepairController {
                     .map(IotMainWorkOrderDO::getCost)
                     .map(fee -> Objects.isNull(fee) ? BigDecimal.ZERO : fee)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-        } else if ("day".equals(pageReqVO.getTimeType())){
+        } else if ("day".equals(pageReqVO.getTimeType())) {
             LocalDateTime lastDayStart = startTime.minusDays(1);
             LocalDateTime lastDayEnd = endTime.minusDays(1);
             LocalDateTime[] dayTime = pageReqVO.getCreateTime();

+ 9 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmainworkorder/IotMainWorkOrderMapper.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.dal.mysql.iotmainworkorder;
 
+import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -53,7 +54,7 @@ public interface IotMainWorkOrderMapper extends BaseMapperX<IotMainWorkOrderDO>
     }
 
     default List<IotMainWorkOrderDO> selectList(IotMainWorkOrderPageReqVO reqVO) {
-        return selectList(new LambdaQueryWrapperX<IotMainWorkOrderDO>()
+        LambdaQueryWrapperX<IotMainWorkOrderDO> queryWrapper = new LambdaQueryWrapperX<IotMainWorkOrderDO>()
                 .inIfPresent(IotMainWorkOrderDO::getId, reqVO.getWorkOrderIds())
                 .eqIfPresent(IotMainWorkOrderDO::getPlanId, reqVO.getPlanId())
                 .eqIfPresent(IotMainWorkOrderDO::getPlanSerialNumber, reqVO.getPlanSerialNumber())
@@ -75,7 +76,13 @@ public interface IotMainWorkOrderMapper extends BaseMapperX<IotMainWorkOrderDO>
                 .eqIfPresent(IotMainWorkOrderDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(IotMainWorkOrderDO::getProcessInstanceId, reqVO.getProcessInstanceId())
                 .eqIfPresent(IotMainWorkOrderDO::getAuditStatus, reqVO.getAuditStatus())
-                .betweenIfPresent(IotMainWorkOrderDO::getCreateTime, reqVO.getCreateTime()));
+                .betweenIfPresent(IotMainWorkOrderDO::getCreateTime, reqVO.getCreateTime());
+
+        // 关键修改:仅当year不为null时,才添加年份筛选条件
+        if (ObjUtil.isNotEmpty(reqVO.getYear())) {
+            queryWrapper.apply("YEAR(create_time) = {0}", reqVO.getYear());
+        }
+        return selectList(queryWrapper);
     }
 
     default List<IotMainWorkOrderDO> theMaxOne(){