Przeglądaj źródła

pms 保养工单 保养时的累计里程/时长 多种累计属性

zhangcl 2 tygodni temu
rodzic
commit
ba858eadf0
11 zmienionych plików z 54 dodań i 18 usunięć
  1. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaintenancebom/IotMaintenanceBomController.java
  2. 31 4
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbom/IotMainWorkOrderBomController.java
  3. 5 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbom/vo/IotMainWorkOrderBomRespVO.java
  4. 2 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotdevicerunlog/IotDeviceRunLogMapper.java
  5. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java
  6. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java
  7. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicerunlog/IotDeviceRunLogService.java
  8. 2 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicerunlog/IotDeviceRunLogServiceImpl.java
  9. 6 6
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderServiceImpl.java
  10. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorderbom/IotMainWorkOrderBomServiceImpl.java
  11. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotDeviceRunLogMapper.xml

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaintenancebom/IotMaintenanceBomController.java

@@ -248,7 +248,7 @@ public class IotMaintenanceBomController {
         Map<String, BigDecimal> tempTotalMileagePair = new HashMap<>();
         // 查询指定设备 指定 多累计属性名称 的设备运行记录数据集合数据
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(multiPointNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, multiPointNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, multiPointNames, null);
         }
         if (CollUtil.isNotEmpty(multipleAccumulatedData)) {
             multipleAccumulatedData.forEach(data -> {

+ 31 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbom/IotMainWorkOrderBomController.java

@@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMa
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMainWorkOrderBomRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMainWorkOrderBomSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOrderDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorderbom.IotMainWorkOrderBomDO;
 import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotdevicematerial.IotDeviceMaterialService;
@@ -35,7 +36,9 @@ import javax.validation.Valid;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Stream;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -136,6 +139,9 @@ public class IotMainWorkOrderBomController {
         if (CollUtil.isEmpty(BOMs)) {
             return Collections.emptyList();
         }
+        // 保养工单都是基于单设备 查询 保养工单主表信息 获取 保养开始时间
+        // 如果 保养开始时间 有值,根据保养开始时间查询对应的保养时累计时长/里程
+
         // 组装bom关联的设备信息
         Map<Long, IotDeviceRespVO> deviceMap = iotDeviceService.getDeviceMap(convertListByFlatMap(BOMs,
                 bom -> Stream.of(bom.getDeviceId())));
@@ -151,6 +157,7 @@ public class IotMainWorkOrderBomController {
         Set<Long> bomNodeIds = new HashSet<>();
         // 设备所属部门id集合
         Set<Long> deptIds = new HashSet<>();
+        AtomicReference<Long> workOrderId = new AtomicReference<>();    // 保养工单id
         BOMs.forEach(bom -> {
             if (ObjUtil.isNotEmpty(bom.getDeviceId())) {
                 deviceIds.add(bom.getDeviceId());
@@ -172,7 +179,20 @@ public class IotMainWorkOrderBomController {
                     deptIds.add(v.getDeptId());
                 });
             }
+            workOrderId.set(bom.getWorkOrderId());
         });
+        // 如果 保养开始时间 有值,根据保养开始时间查询对应的保养时累计时长/里程
+        IotMainWorkOrderDO workOrder = iotMainWorkOrderService.getIotMainWorkOrder(workOrderId.get());
+        Map<Long, IotDeviceRunLogRespVO> specifiedDateDeviceRunLogMap = new HashMap<>();
+        if (ObjUtil.isNotEmpty(workOrder.getActualStartTime())) {
+            // 定义格式化器(线程安全,可直接复用)
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            // 转换 LocalDateTime 为指定格式的字符串
+            String actualStartDate = workOrder.getActualStartTime().format(formatter);
+            specifiedDateDeviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMapAlone(convertListByFlatMap(BOMs,
+                    bom -> Stream.of(bom.getDeviceId())), new ArrayList<>(deviceCategoryIds), deviceCategoryPair, actualStartDate);
+        }
+
         Map<Long, IotDeviceRunLogRespVO> deviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMapAlone(convertListByFlatMap(BOMs,
                 bom -> Stream.of(bom.getDeviceId())), new ArrayList<>(deviceCategoryIds), deviceCategoryPair, null);
         // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
@@ -181,7 +201,7 @@ public class IotMainWorkOrderBomController {
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
         // 查询指定设备 指定 多累计属性名称 的设备运行记录数据集合数据
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(pointNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, pointNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, pointNames, null);
         }
         if (CollUtil.isNotEmpty(multipleAccumulatedData)) {
             multipleAccumulatedData.forEach(data -> {
@@ -204,12 +224,19 @@ public class IotMainWorkOrderBomController {
         // key设备id-bom节点id      value设备物料集合
         Map<String, List<IotDeviceMaterialRespVO>> deviceBomMaterialPair = iotDeviceMaterialService.bomMaterials(deptIds, deviceIds, bomNodeIds);
 
+        Map<Long, IotDeviceRunLogRespVO> finalSpecifiedDateDeviceRunLogMap = specifiedDateDeviceRunLogMap;
         return BeanUtils.toBean(BOMs, IotMainWorkOrderBomRespVO.class, bomVO -> {
             // 设置设备相关信息
             MapUtils.findAndThen(deviceMap, bomVO.getDeviceId(),
                     device -> bomVO.setDeviceName(device.getDeviceName()));
             MapUtils.findAndThen(deviceMap, bomVO.getDeviceId(),
                     device -> bomVO.setDeviceCode(device.getDeviceCode()));
+
+            MapUtils.findAndThen(finalSpecifiedDateDeviceRunLogMap, bomVO.getDeviceId(),
+                    device -> bomVO.setMainRuntime(device.getTotalRunTime()));
+            MapUtils.findAndThen(finalSpecifiedDateDeviceRunLogMap, bomVO.getDeviceId(),
+                    device -> bomVO.setMainMileage(device.getTotalMileage()));
+
             MapUtils.findAndThen(deviceRunLogMap, bomVO.getDeviceId(),
                     device -> bomVO.setTotalMileage(device.getTotalMileage()));
             MapUtils.findAndThen(deviceRunLogMap, bomVO.getDeviceId(),
@@ -295,7 +322,7 @@ public class IotMainWorkOrderBomController {
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
         // 查询指定设备 指定 多累计属性名称 的设备运行记录数据集合数据
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(pointNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, pointNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, pointNames, actualStartTime);
         }
         if (CollUtil.isNotEmpty(multipleAccumulatedData)) {
             multipleAccumulatedData.forEach(data -> {
@@ -315,14 +342,14 @@ public class IotMainWorkOrderBomController {
                 // code 累计运行时长属性名称
                 String uniqueKey = StrUtil.join("-", bomVO.getDeviceId(), bomVO.getCode());
                 if (tempTotalRunDataPair.containsKey(uniqueKey)) {
-                    bomVO.setTempTotalRunTime(tempTotalRunDataPair.get(uniqueKey));
+                    bomVO.setTempMainRunTime(tempTotalRunDataPair.get(uniqueKey));
                 }
             }
             if (StrUtil.isNotBlank(bomVO.getType())) {
                 // type 累计运行公里数属性名称
                 String uniqueKey = StrUtil.join("-", bomVO.getDeviceId(), bomVO.getType());
                 if (tempTotalRunDataPair.containsKey(uniqueKey)) {
-                    bomVO.setTempTotalMileage(tempTotalRunDataPair.get(uniqueKey));
+                    bomVO.setTempMainMileage(tempTotalRunDataPair.get(uniqueKey));
                 }
             }
         });

+ 5 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbom/vo/IotMainWorkOrderBomRespVO.java

@@ -204,6 +204,11 @@ public class IotMainWorkOrderBomRespVO {
     @Schema(description = "临时 累计运行公里数 用于运行记录模板中包含多个累计类型属性的场景", example = "20238km")
     private BigDecimal tempTotalMileage;
 
+    @Schema(description = "保养时累计运行时间 多个累计类型属性", example = "30000H")
+    private BigDecimal tempMainRunTime;
+    @Schema(description = "保养时累计运行公里数 多个累计类型属性", example = "20238km")
+    private BigDecimal tempMainMileage;
+
     @Schema(description = "上次保养时间")
     private LocalDateTime lastMaintenanceDate;
 

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotdevicerunlog/IotDeviceRunLogMapper.java

@@ -70,7 +70,8 @@ public interface IotDeviceRunLogMapper extends BaseMapperX<IotDeviceRunLogDO> {
      * @return
      */
     List<IotDeviceRunLogRespVO> multipleAccumulatedData(@Param("deviceIds") Collection<Long> deviceIds,
-                                                        @Param("attrNames") Collection<String> attrNames);
+                                                        @Param("attrNames") Collection<String> attrName,
+                                                        @Param("actualStartTime") String actualStartTime);
 
 
     @TenantIgnore

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java

@@ -172,7 +172,7 @@ public class CreateMainWorkOrderJob implements JobHandler {
         // 查询 保养计划保养明细中已经绑定的 多种累计时长 公里数 属性集合
         List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
         }
         // key(设备id-累计时长属性名称)    value时长属性累计时长数值
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java

@@ -694,7 +694,7 @@ public class IotDeviceServiceImpl implements IotDeviceService {
 
                 // 根据设备id 运行记录模板属性名称 查询对应的 累计运行时长 累计运行公里数
                 if (CollUtil.isNotEmpty(multipleAttrDeviceIds) && CollUtil.isNotEmpty(multipleAttrNames)) {
-                    List<IotDeviceRunLogRespVO> accumulatedData = iotDeviceRunLogMapper.multipleAccumulatedData(multipleAttrDeviceIds, multipleAttrNames);
+                    List<IotDeviceRunLogRespVO> accumulatedData = iotDeviceRunLogMapper.multipleAccumulatedData(multipleAttrDeviceIds, multipleAttrNames, null);
                     // 组装每个设备对应的属性 累计时长 累计里程 集合
                     if (CollUtil.isNotEmpty(accumulatedData)) {
                         accumulatedData.forEach(data -> {

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicerunlog/IotDeviceRunLogService.java

@@ -68,7 +68,7 @@ public interface IotDeviceRunLogService {
      * @param deviceIds
      * @return
      */
-    List<IotDeviceRunLogRespVO> multipleAccumulatedData(Collection<Long> deviceIds, Collection<String> attrNames);
+    List<IotDeviceRunLogRespVO> multipleAccumulatedData(Collection<Long> deviceIds, Collection<String> attrNames, String actualStartTime);
 
     /**
      * 根据设备id查询设备关联信息

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicerunlog/IotDeviceRunLogServiceImpl.java

@@ -98,8 +98,8 @@ public class IotDeviceRunLogServiceImpl implements IotDeviceRunLogService {
     }
 
     @Override
-    public List<IotDeviceRunLogRespVO> multipleAccumulatedData(Collection<Long> deviceIds, Collection<String> attrNames) {
-        return iotDeviceRunLogMapper.multipleAccumulatedData(deviceIds, attrNames);
+    public List<IotDeviceRunLogRespVO> multipleAccumulatedData(Collection<Long> deviceIds, Collection<String> attrNames, String actualStartTime) {
+        return iotDeviceRunLogMapper.multipleAccumulatedData(deviceIds, attrNames, actualStartTime);
     }
 
 }

+ 6 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderServiceImpl.java

@@ -254,7 +254,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
         List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
         }
         // key(设备id-累计时长属性名称)    value时长属性累计时长数值
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
@@ -456,7 +456,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
         List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
         }
         // key(设备id-累计时长属性名称)    value时长属性累计时长数值
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
@@ -766,7 +766,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
         List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
         }
         // key(设备id-累计时长属性名称)    value时长属性累计时长数值
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
@@ -1014,7 +1014,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
             // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
             List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
             if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-                multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+                multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
             }
             // key(设备id-累计时长属性名称)    value时长属性累计时长数值
             Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
@@ -1278,7 +1278,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
         List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
         if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
         }
         // key(设备id-累计时长属性名称)    value时长属性累计时长数值
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
@@ -2053,7 +2053,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
             });
             List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
             if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-                multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+                multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
             }
             // key(设备id-累计时长属性名称)    value时长属性累计时长数值
             Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorderbom/IotMainWorkOrderBomServiceImpl.java

@@ -150,7 +150,7 @@ public class IotMainWorkOrderBomServiceImpl implements IotMainWorkOrderBomServic
             // 查询 保养工单保养明细中已经绑定的 多种累计时长 公里数 属性运行记录值集合
             List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
             if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
-                multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+                multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames, null);
             }
             // key(设备id-累计时长属性名称)    value时长属性累计时长数值
             Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotDeviceRunLogMapper.xml

@@ -105,6 +105,9 @@
             rq_iot_device_run_log
         WHERE
             deleted = 0
+            <if test="actualStartTime!=null and actualStartTime!=''">
+                AND DATE(create_time) = #{actualStartTime}
+            </if>
             <if test="deviceIds != null and deviceIds.size &gt; 0">
                 AND device_id IN
                 <foreach collection="deviceIds" index="index" item="key" open="(" separator="," close=")">