Quellcode durchsuchen

运行记录1218-运行记录APP查询接口优化

yuanchao vor 1 Woche
Ursprung
Commit
9a0806dade

+ 45 - 5
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java

@@ -25,6 +25,7 @@ import cn.iocoder.yudao.module.pms.service.iotrhdailyreport.IotRhDailyReportServ
 import cn.iocoder.yudao.module.pms.service.iotrydailyreport.IotRyDailyReportService;
 import cn.iocoder.yudao.module.pms.service.yanfan.YfDeviceService;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import com.alibaba.fastjson.JSON;
 import com.aliyun.tea.utils.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -311,6 +312,33 @@ public class IotOpeationFillController {
                     .flatMap(vo -> vo.getDeviceInfoList().stream())
                     .collect(Collectors.toList());
 
+
+            // 1. 集合类型改为实体类列表
+            List<IotOpeationFillSaveReqVO > uniqueDeviceEntities = new ArrayList<>();
+
+            // 空值防护:先判断外层集合是否为null或空
+            if (createReqVO != null && !createReqVO.isEmpty()) {
+                uniqueDeviceEntities = createReqVO.stream()
+                        // 1. 过滤外层集合中:内部 deviceInfoList 为 null 的元素
+                        .filter(operationSaveInfo -> operationSaveInfo.getDeviceInfoList() != null)
+                        // 2. 展开内层集合(合并为一个流)
+                        .flatMap(operationSaveInfo -> operationSaveInfo.getDeviceInfoList().stream())
+                        // 3. 过滤内层元素:deviceInfo 为 null 或 deviceId 为 null 的情况
+                        .filter(deviceInfo -> deviceInfo != null && deviceInfo.getDeviceId() != null)
+                        // 4. 核心修改:提取 deviceId 并创建实体类对象(而非转 String)
+                        .map(deviceInfo -> {
+                            IotOpeationFillSaveReqVO saveReqVO = new IotOpeationFillSaveReqVO();
+                            saveReqVO.setDeviceId(deviceInfo.getDeviceId());
+                            saveReqVO.setCreateTime(deviceInfo.getCreateTime());
+                            return saveReqVO;
+                        })
+                        // 5. 去重:需重写实体类的 equals() 和 hashCode()(关键!)
+                        .distinct()
+                        // 6. 收集为实体类列表
+                        .collect(Collectors.toList());
+            }
+
+
             // 验证数据不为空
             if (CollectionUtils.isEmpty(allFillData)) {
                 return error(1, "设备数据不能为空");
@@ -339,10 +367,12 @@ public class IotOpeationFillController {
             generateDailyReports(logDOList, deptMap, createDate,userId);
 
             // 9. 批量更新工单填写状态
-            iotOpeationFillService.batchUpdateFill(allFillData);
+            int a = iotOpeationFillService.batchUpdateFill(uniqueDeviceEntities);
+
+
+                // 5. 更新填写状态
+                updateFillOrderStatus(orderId, userId, createDate);
 
-            // 5. 更新填写状态
-            updateFillOrderStatus(orderId, userId, createDate);
 
             return success(1);
 
@@ -681,7 +711,7 @@ public class IotOpeationFillController {
         Map<String, Object> reportData = BeanUtil.beanToMap(saveReqVO);
 
         for (IotDeviceRunLogDO log : deviceLogs) {
-            IotDeviceRunLogDO descDO = descMap.get(log.getPointName()); // 从缓存获取,无数据库交互
+            IotDeviceRunLogDO descDO = iotOpeationFillService.getDesc(log);
             if (descDO != null && reportData.containsKey(descDO.getPointName())) {
                 reportData.put(descDO.getPointName(), log.getFillContent());
             }
@@ -703,11 +733,20 @@ public class IotOpeationFillController {
         IotRyDailyReportSaveReqVO saveReqVO = new IotRyDailyReportSaveReqVO();
         Map<String, Object> reportData = BeanUtil.beanToMap(saveReqVO);
 
+        IotOpeationFillDO reportDO = new IotOpeationFillDO();
         for (IotDeviceRunLogDO log : deviceLogs) {
-            IotDeviceRunLogDO descDO = descMap.get(log.getPointName()); // 从缓存获取,无数据库交互
+            //IotDeviceRunLogDO descDO = descMap.get(log.getPointName()); // 从缓存获取,无数据库交互
+            IotDeviceRunLogDO descDO = iotOpeationFillService.getDesc(log);
             if (descDO != null && reportData.containsKey(descDO.getPointName())) {
                 reportData.put(descDO.getPointName(), log.getFillContent());
             }
+
+            reportDO.setDeviceId(log.getDeviceId());
+            reportDO.setCreateTime(log.getCreateTime());
+            IotOpeationFillDO fillDO1 = iotOpeationFillService.isReport(reportDO);
+            if(fillDO1.getDeviceCategoryId()==228){
+                reportData.put("projectClassification","2");
+            }
         }
 
         // 后续赋值和保存逻辑不变(建议日报也做批量保存,若存在多条设备)
@@ -715,6 +754,7 @@ public class IotOpeationFillController {
         finalReport.setDeptId(fillStatus.getDeptId());
         finalReport.setFillOrderCreateTime(createDate.atStartOfDay());
         finalReport.setCreator(String.valueOf(fillStatus.getUserId()));
+
         iotRyDailyReportService.createIotRyDailyReport(finalReport);
     }
 

+ 1 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotopeationfill/IotOpeationFillMapper.java

@@ -5,10 +5,7 @@ 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.iotmodeltemplateattrs.vo.IotModelTemplateAttrsRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.*;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.DeviceVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;

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

@@ -57,7 +57,7 @@ import static cn.iocoder.yudao.module.pms.framework.config.MultiThreadConfigurat
  * @date 2025/5/11 10:26
  * @description
  */
-@Component
+/*@Component*/
 @Slf4j
 public class IotOperationPlanJob implements JobHandler {
 

+ 1 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillService.java

@@ -3,10 +3,7 @@ package cn.iocoder.yudao.module.pms.service.iotopeationfill;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.*;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData;

+ 1 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillServiceImpl.java

@@ -1,10 +1,7 @@
 package cn.iocoder.yudao.module.pms.service.iotopeationfill;
 
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.*;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO;

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

@@ -395,7 +395,8 @@
         )
         ORDER BY
         CASE WHEN device_code IS NULL OR device_code = '' THEN 1 ELSE 0 END ASC,
-        CAST(SUBSTRING(device_code, 3) AS UNSIGNED) ASC
+        CAST(SUBSTRING(device_code, 3) AS UNSIGNED) ASC,
+        a.id ASC
     </select>