Browse Source

pms 保养计划明细 累计运行时长 运行公里数 查询逻辑优化

zhangcl 1 month ago
parent
commit
be1788d5ec

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

@@ -12,11 +12,14 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDevice
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaintenancebom.IotMaintenanceBomDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
 import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotdevicerunlog.IotDeviceRunLogService;
 import cn.iocoder.yudao.module.pms.service.iotmaintenancebom.IotMaintenanceBomService;
+import cn.iocoder.yudao.module.pms.service.iotmodeltemplateattrs.IotModelTemplateAttrsService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,9 +31,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Stream;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -49,6 +50,8 @@ public class IotMaintenanceBomController {
     private IotDeviceService iotDeviceService;
     @Resource
     private IotDeviceRunLogService iotDeviceRunLogService;
+    @Resource
+    private IotModelTemplateAttrsService iotModelTemplateAttrsService;
 
     @PostMapping("/create")
     @Operation(summary = "创建PMS 保养计划明细BOM")
@@ -108,6 +111,53 @@ public class IotMaintenanceBomController {
         // 组装bom关联的设备信息
         Map<Long, IotDeviceRespVO> deviceMap = iotDeviceService.getDeviceMap(convertListByFlatMap(BOMs,
                 bom -> Stream.of(bom.getDeviceId())));
+        // 设备对应的设备分类 map
+        Map<Long, Long> deviceCategoryPair = new HashMap<>();
+        Set<Long> deviceCategoryIds = new HashSet<>();
+        // 通过设备id集合查询到设备分类id集合
+        if (CollUtil.isNotEmpty(deviceMap)) {
+            deviceMap.forEach((k,v) -> {
+                deviceCategoryIds.add(v.getAssetClass());
+                deviceCategoryPair.put(k, v.getAssetClass());
+            });
+        }
+        // k设备id   v设备分类包含的模板中与累计运行时长、累计运行公里数相关的属性集合
+        Map<Long, List<IotModelTemplateAttrsDO>> deviceAttrsPair = new HashMap<>();
+        if (CollUtil.isNotEmpty(deviceCategoryIds)) {
+            // 查询设备分类id集合对应的运行记录模板中涉及 累计运行时长、累计运行公里数 的属性
+            IotModelTemplateAttrsPageReqVO reqVO = new IotModelTemplateAttrsPageReqVO();
+            List<String> codes = new ArrayList<>(Arrays.asList("sc", "gls"));
+            reqVO.setCodes(codes);
+            reqVO.setDeviceCategoryIds(new ArrayList<>(deviceCategoryIds));
+            reqVO.setIsSum(1);  // 累计属性标识
+            List<IotModelTemplateAttrsDO> accumulatedAttrs = iotModelTemplateAttrsService.getIotDeviceTemplateAttrs(reqVO);
+            // k设备分类id   v设备分类包含的模板中与累计运行时长 累计运行公里数相关的属性集合
+            Map<Long, List<IotModelTemplateAttrsDO>> accumulatedAttrPair = new HashMap<>();
+            if (CollUtil.isNotEmpty(accumulatedAttrs)) {
+                accumulatedAttrs.forEach(attr -> {
+                    if (accumulatedAttrPair.containsKey(attr.getDeviceCategoryId())) {
+                        List<IotModelTemplateAttrsDO> tempAttrs = accumulatedAttrPair.get(attr.getDeviceCategoryId());
+                        tempAttrs.add(attr);
+                        accumulatedAttrPair.put(attr.getDeviceCategoryId(), tempAttrs);
+                    } else {
+                        List<IotModelTemplateAttrsDO> tempAttrs = new ArrayList<>();
+                        tempAttrs.add(attr);
+                        accumulatedAttrPair.put(attr.getDeviceCategoryId(), tempAttrs);
+                    }
+                });
+            }
+            if (CollUtil.isNotEmpty(accumulatedAttrPair)) {
+                accumulatedAttrPair.forEach((k,v) -> {
+                    // k设备分类id   v设备分类包含的模板中与累计运行时长 累计运行公里数相关的属性集合
+                    deviceCategoryPair.forEach((ik, iv) -> {
+                        // ik设备id   iv设备分类id
+                        if (iv.equals(k)) {
+                            deviceAttrsPair.put(ik, v);
+                        }
+                    });
+                });
+            }
+        }
         Map<Long, IotDeviceRunLogRespVO> deviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMap(convertListByFlatMap(BOMs,
                 bom -> Stream.of(bom.getDeviceId())));
         // 2. 转换成 VO
@@ -117,10 +167,16 @@ public class IotMaintenanceBomController {
                     device -> bomVO.setDeviceName(device.getDeviceName()));
             MapUtils.findAndThen(deviceMap, bomVO.getDeviceId(),
                     device -> bomVO.setDeviceCode(device.getDeviceCode()));
-            MapUtils.findAndThen(deviceRunLogMap, bomVO.getDeviceId(),
-                    device -> bomVO.setTotalMileage(device.getTotalMileage()));
-            MapUtils.findAndThen(deviceRunLogMap, bomVO.getDeviceId(),
-                    device -> bomVO.setTotalRunTime(device.getTotalRunTime()));
+            // 获取设备ID对应的累积类型的属性集合
+            List<IotModelTemplateAttrsDO> deviceAttrs = deviceAttrsPair.get(bomVO.getDeviceId());
+            if (CollUtil.isNotEmpty(deviceAttrs) && deviceAttrs.size() > 2) {
+                // 模板属性中有多个 累计运行时长 或 累计运行公里数 属性 需要使用另外的方式赋值
+            } else {
+                MapUtils.findAndThen(deviceRunLogMap, bomVO.getDeviceId(),
+                        device -> bomVO.setTotalMileage(device.getTotalMileage()));
+                MapUtils.findAndThen(deviceRunLogMap, bomVO.getDeviceId(),
+                        device -> bomVO.setTotalRunTime(device.getTotalRunTime()));
+            }
         });
     }
 

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmodeltemplateattrs/vo/IotModelTemplateAttrsPageReqVO.java

@@ -8,6 +8,7 @@ import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -75,4 +76,12 @@ public class IotModelTemplateAttrsPageReqVO extends PageParam {
     @Schema(description = "物属性", example = "zyj")
     private String modelAttr;
 
+    /**
+     * 扩展属性
+     */
+    @Schema(description = "设备分类集合", example = "112,113")
+    private List<Long> deviceCategoryIds;
+
+    @Schema(description = "编码集合", example = "sc,gls")
+    private List<String> codes;
 }

+ 26 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmodeltemplateattrs/IotModelTemplateAttrsMapper.java

@@ -4,7 +4,6 @@ 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;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
-import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplateattrs.vo.IotDeviceTemplateAttrsPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotThingsModelDO;
@@ -45,6 +44,32 @@ public interface IotModelTemplateAttrsMapper extends BaseMapperX<IotModelTemplat
                 .orderByDesc(IotModelTemplateAttrsDO::getId));
     }
 
+    default List<IotModelTemplateAttrsDO> selectList(IotModelTemplateAttrsPageReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<IotModelTemplateAttrsDO>()
+                .eqIfPresent(IotModelTemplateAttrsDO::getDeviceCategoryId, reqVO.getDeviceCategoryId())
+                .inIfPresent(IotModelTemplateAttrsDO::getDeviceCategoryId, reqVO.getDeviceCategoryIds())
+                .eqIfPresent(IotModelTemplateAttrsDO::getDeviceId, reqVO.getDeviceId())
+                .eqIfPresent(IotModelTemplateAttrsDO::getTemplateId, reqVO.getTemplateId())
+                .likeIfPresent(IotModelTemplateAttrsDO::getName, reqVO.getName())
+                .eqIfPresent(IotModelTemplateAttrsDO::getCode, reqVO.getCode())
+                .inIfPresent(IotModelTemplateAttrsDO::getCode, reqVO.getCodes())
+                .eqIfPresent(IotModelTemplateAttrsDO::getType, reqVO.getType())
+                .eqIfPresent(IotModelTemplateAttrsDO::getRequiredFlag, reqVO.getRequiredFlag())
+                .eqIfPresent(IotModelTemplateAttrsDO::getDefaultValue, reqVO.getDefaultValue())
+                .eqIfPresent(IotModelTemplateAttrsDO::getUnit, reqVO.getUnit())
+                .eqIfPresent(IotModelTemplateAttrsDO::getDescription, reqVO.getDescription())
+                .eqIfPresent(IotModelTemplateAttrsDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(IotModelTemplateAttrsDO::getModelAttr, reqVO.getModelAttr())
+                .eqIfPresent(IotModelTemplateAttrsDO::getIsCollection, reqVO.getIsCollection())
+                .eqIfPresent(IotModelTemplateAttrsDO::getIsSum, reqVO.getIsSum())
+                .eqIfPresent(IotModelTemplateAttrsDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(IotModelTemplateAttrsDO::getSort, reqVO.getSort())
+                .eqIfPresent(IotModelTemplateAttrsDO::getSelectOptions, reqVO.getSelectOptions())
+                .eqIfPresent(IotModelTemplateAttrsDO::getVersion, reqVO.getVersion())
+                .betweenIfPresent(IotModelTemplateAttrsDO::getCreateTime, reqVO.getCreateTime())
+        );
+    }
+
     @DS("yanfan")
     @TenantIgnore
     List<IotThingsModelDO> getAttrsByName(String name);

+ 8 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmodeltemplateattrs/IotModelTemplateAttrsService.java

@@ -1,11 +1,8 @@
 package cn.iocoder.yudao.module.pms.service.iotmodeltemplateattrs;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplateattrs.vo.IotDeviceTemplateAttrsPageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplateattrs.vo.IotDeviceTemplateAttrsSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsSaveReqVO;
-import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicetemplateattrs.IotDeviceTemplateAttrsDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotThingsModelDO;
 
@@ -68,4 +65,12 @@ public interface IotModelTemplateAttrsService {
      */
     PageResult<IotModelTemplateAttrsDO> getIotDeviceTemplateAttrsPage(IotModelTemplateAttrsPageReqVO pageReqVO);
 
+    /**
+     * 获得PMS 功能优化 设备模板属性列表
+     *
+     * @param reqVO 列表查询
+     * @return PMS 功能优化 设备模板属性列表
+     */
+    List<IotModelTemplateAttrsDO> getIotDeviceTemplateAttrs(IotModelTemplateAttrsPageReqVO reqVO);
+
 }

+ 5 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmodeltemplateattrs/IotModelTemplateAttrsServiceImpl.java

@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.pms.service.iotmodeltemplateattrs;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
@@ -12,7 +11,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -82,4 +80,9 @@ public class IotModelTemplateAttrsServiceImpl implements IotModelTemplateAttrsSe
         return iotModelTemplateAttrsMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<IotModelTemplateAttrsDO> getIotDeviceTemplateAttrs(IotModelTemplateAttrsPageReqVO reqVO) {
+        return iotModelTemplateAttrsMapper.selectList(reqVO);
+    }
+
 }