Procházet zdrojové kódy

运行记录优化

yuanchao před 3 týdny
rodič
revize
436ff3cfdd
13 změnil soubory, kde provedl 673 přidání a 78 odebrání
  1. 2 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmodeltemplateattrs/vo/IotModelTemplateAttrsRespVO.java
  2. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmodeltemplateattrs/vo/IotModelTemplateAttrsSaveReqVO.java
  3. 244 71
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java
  4. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/vo/IotOpeationFillPageReqVO.java
  5. 1 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/vo/IotOpeationFillRespVO.java
  6. 1 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/vo/IotOpeationFillSaveReqVO.java
  7. 2 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicerunlog/IotDeviceRunLogDO.java
  8. 6 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotmodeltemplateattrs/IotModelTemplateAttrsDO.java
  9. 1 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotopeationfill/IotOpeationFillDO.java
  10. 50 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotopeationfill/IotOpeationFillMapper.java
  11. 44 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillService.java
  12. 113 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillServiceImpl.java
  13. 205 5
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

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

@@ -113,4 +113,6 @@ public class IotModelTemplateAttrsRespVO {
      * 累计属性ID
      */
     private Long sumId;
+
+    private int dailyReport;
 }

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

@@ -75,4 +75,7 @@ public class IotModelTemplateAttrsSaveReqVO {
      */
     private Long sumId;
 
+
+    private int dailyReport;
+
 }

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

@@ -1,5 +1,8 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodel.vo.IotModelPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsRespVO;
@@ -20,9 +23,13 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModel
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotThingsModelDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillOrderDO;
+
 import cn.iocoder.yudao.module.pms.dal.dataobject.yanfan.YfDeviceDO;
+
+import cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant;
 import cn.iocoder.yudao.module.pms.service.IDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotopeationfill.IotOpeationFillService;
+
 import cn.iocoder.yudao.module.pms.service.yanfan.YfDeviceService;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import com.aliyun.tea.utils.StringUtils;
@@ -76,6 +83,8 @@ public class IotOpeationFillController {
     private YfDeviceService yfDeviceService;
     @Resource
     private DeptService deptService;
+    @Resource
+    private IotRhDailyReportService iotRhDailyReportService;
 
     @PostMapping("/create")
     @Operation(summary = "创建运行记录填报")
@@ -124,6 +133,11 @@ public class IotOpeationFillController {
             deviceRunLogDO.setCreateTime(LocalDateTime.of(fill.getCreateTime(),localTime));
             deviceRunLogDO.setPointName(fill.getPointName());
             deviceRunLogDO.setTotalRunTime(fill.getTotalRunTime());
+            if(fill.getIsSum()==0){
+                deviceRunLogDO.setIsSum(0);
+            }else{
+                deviceRunLogDO.setIsSum(1);
+            }
 
             logDO.add(deviceRunLogDO);
         }
@@ -147,15 +161,80 @@ public class IotOpeationFillController {
         IotDeviceRunLogDO deviceRunLogDO = new IotDeviceRunLogDO();
         deviceRunLogDO.setId(createReqVO.get(0).getId());
 
+        IotOpeationFillDO fillDO = new IotOpeationFillDO();
+        fillDO.setOrderId(createReqVO.get(0).getId());
+
         if(result){
             iotOpeationFillService.updateFillOrder(deviceRunLogDO);
+
+            List<IotOpeationFillDO> devList = iotOpeationFillService.devList(fillDO);
+            if(devList.size()==1){
+                fillDO.setDeviceId(devList.get(0).getDeviceId());
+                fillDO.setCreDate(createReqVO.get(0).getCreateTime());
+                List<IotOpeationFillDO> orderList = iotOpeationFillService.orderList(fillDO);
+                if(orderList.size()>0){
+                    for (IotOpeationFillDO order:orderList) {
+                        List<IotOpeationFillDO> delList = iotOpeationFillService.delList(order);
+                        if(delList.size()==1){
+                            iotOpeationFillService.delRepeat(delList.get(0));
+                            iotOpeationFillService.delRepeatOrder(order);
+                        }
+                    }
+                }
+            }
+
         }else if(result1){
             iotOpeationFillService.updateFillOrder1(deviceRunLogDO);
         }else{
             iotOpeationFillService.updateFillOrder2(deviceRunLogDO);
         }
 
-        return success(iotOpeationFillService.insertLog(logDO));
+        for (IotDeviceRunLogDO log:logDO) {
+            //根据设备编码,属性名称和时间查询run_log表
+            //有数据则更新,无数据则插入
+            IotDeviceRunLogDO fillData = iotOpeationFillService.reportData(log);
+            if(fillData == null){
+                iotOpeationFillService.insertLog1(log);
+            }else{
+                if(log.getIsSum() == 0){
+                    iotOpeationFillService.updateLog(log);
+                }else{
+                    iotOpeationFillService.updateSumLog(log);
+                }
+            }
+        }
+
+        IotDeviceRunLogDO runDo = logDO.get(0);
+
+        IotOpeationFillDO reportDO = new IotOpeationFillDO();
+        reportDO.setDeviceId(runDo.getDeviceId());
+        reportDO.setCreateTime(runDo.getCreateTime());
+        IotOpeationFillDO fillDO1 = iotOpeationFillService.isReport(reportDO);
+
+        //虚拟设备插入日报
+        if(fillDO1.getIsReport()==1){
+
+            IotRhDailyReportSaveReqVO saveReqVO = new IotRhDailyReportSaveReqVO();
+            Map<String, Object> stringObjectMap = BeanUtil.beanToMap(saveReqVO);
+
+            for (IotDeviceRunLogDO logDO1:logDO) {
+
+                IotDeviceRunLogDO descDO = iotOpeationFillService.getDesc(logDO1);
+
+                if(descDO!=null){
+                    stringObjectMap.forEach((k,v)->{
+                        if(k.equals(descDO.getPointName())){
+                            stringObjectMap.put(k,logDO1.getFillContent());
+                        }
+                    });
+                }
+            }
+                IotRhDailyReportSaveReqVO saveReqVO1 = BeanUtil.mapToBean(stringObjectMap,IotRhDailyReportSaveReqVO.class,false);
+                saveReqVO1.setDeptId(fillDO1.getDeptId());
+                iotRhDailyReportService.createIotRhDailyReport(saveReqVO1);
+            }
+
+        return success(1);
     }
 
     @PutMapping("/update")
@@ -263,6 +342,7 @@ public class IotOpeationFillController {
          */
         for (IotOpeationFillOrderDO orderDO : fillList.getList()) {
             fill.setOrderId(orderDO.getId());
+            fill.setDeptId(orderDO.getDeptId());
             List<IotOpeationFillDO> dList = iotOpeationFillService.fillListByDeptId(fill);
             IotOpeationFillDO devList = iotOpeationFillService.devListByOrderId(fill);
             if(dList.size()>0){
@@ -335,63 +415,171 @@ public class IotOpeationFillController {
     @Parameter(name = "deviceCategoryName", description = "名称", required = true, example = "1024")
     public CommonResult<List<IotModelTemplateAttrsDO1>> getModelAttrs(@Valid IotModelTemplateAttrsRespVO vo) throws SQLException{
 
+        //判断是否为虚拟设备
+        //如果是走原来逻辑
+        //不是走虚拟设备逻辑
+        IotOpeationFillDO fillDO = new IotOpeationFillDO();
+        fillDO.setDeviceId(vo.getDeviceId());
+        fillDO.setCreateTime(vo.getCreateTime().atStartOfDay());
+        IotOpeationFillDO fillDO1 = iotOpeationFillService.isReport(fillDO);
+        IotOpeationFillDO fillDO2 = iotOpeationFillService.orderDO(fillDO);
+
+        List<IotOpeationFillDO> reportList = new ArrayList<>();
+
+        if(fillDO2!=null){
+            reportList = iotOpeationFillService.reportList1(fillDO2);
+        }
+
+        List<IotModelTemplateAttrsDO1> resut = new ArrayList<>();
         List<IotModelTemplateAttrsDO> list = iotOpeationFillService.getAttrsById(vo );
 
+        if(fillDO1.getIsReport()==1){
+
+            for (IotModelTemplateAttrsDO attrsDO:list) {
 
-        List<YfDeviceDO> allDevice = yfDeviceService.getAllDevice();
 
+                //根据日报取值设备赋值
+                if(reportList.size()>0){
+                    List<IotOpeationFillDO> cxLixt = reportList.stream().filter(e->e.getOrgName().equals(attrsDO.getName())).collect(Collectors.toList());
+                    if(cxLixt.size()>0){
+                        // 使用Map按orgName分组存储累加结果
+                        Map<String, String> orgNameToFillContent = new HashMap<>();
 
+                        for (IotOpeationFillDO reportData : cxLixt) {
+                            IotDeviceRunLogDO report = new IotDeviceRunLogDO();
+                            report.setDeviceId(reportData.getDeviceId());
+                            report.setPointName(reportData.getOrgName());
+                            report.setCreateTime(reportData.getCreateTime());
 
-        LocalTime localTime = LocalTime.of(0,0,0);
-        LocalTime localTime1 = LocalTime.of(23,59,59);
+                            IotDeviceRunLogDO reportCx = iotOpeationFillService.reportData(report);
 
-        LocalDateTime start = LocalDateTime.of(vo.getCreateTime(),localTime);
-        LocalDateTime end = LocalDateTime.of(vo.getCreateTime(),localTime1);
+                            String currentContent = "";
+                            if(reportCx==null){
+                                attrsDO.setFillContent("");
+                            }else{
+                                currentContent = reportCx.getFillContent() != null ? reportCx.getFillContent() : "";
+                            }
 
-        Timestamp startTime = Timestamp.valueOf(start);
-        Timestamp endTime = Timestamp.valueOf(end);
 
+                            // 获取当前orgName
+                            String orgName = reportData.getOrgName();
 
-        List<YfDeviceDO> existList = allDevice.stream().filter(e->e.getStatus()==3).collect(Collectors.toList());
-        boolean exists1 = existList.stream().anyMatch(yfDeviceDO->yfDeviceDO.getSerialNumber().equals(vo.getDeviceCode()));
+                            // 累加相同orgName的内容
+                            if (orgNameToFillContent.containsKey(orgName)) {
+                                String existingContent = orgNameToFillContent.get(orgName);
 
-        IotDeviceRunLogDO logDO1 = new IotDeviceRunLogDO();
-        logDO1.setDeviceId(vo.getDeviceId());
-        LocalTime local = LocalTime.of(12, 0);
-        logDO1.setCreateTime(LocalDateTime.of(vo.getCreateTime(),local));
+                                double existingValue = safeParseInt(existingContent);
+                                double currentValue = safeParseInt(currentContent);
 
-        if(exists1){
-            for (IotModelTemplateAttrsDO attrsDO:list) {
+                                if((existingValue + currentValue)==0){
+                                    orgNameToFillContent.put(orgName, "");
+                                }else{
+                                    orgNameToFillContent.put(orgName, String.valueOf(existingValue + currentValue));
+                                }
 
-                DeviceVO dv= new DeviceVO();
-                dv.setDeviceName(vo.getDeviceCode().toLowerCase());
-                dv.setColName(attrsDO.getModelAttr());
-                dv.setTs(startTime);
-                dv.setTs1(endTime);
-
-                DeviceVO deviceVO = iDeviceService.getYesInfo(dv);
-
-                if(!StringUtils.isEmpty(deviceVO) && !deviceVO.getEarliestData().equals("0.0")){
-                    attrsDO.setFillContent(
-                            String.valueOf(Double.parseDouble(deviceVO.getLatestData())-Double.parseDouble(deviceVO.getEarliestData())));
-                    attrsDO.setTotalRunTime(BigDecimal.valueOf(Double.parseDouble(deviceVO.getLatestData())));
-                    /**
-                     * 设置为数采
-                     */
-                    attrsDO.setIsCollection(1);
-                }else{
+                            } else {
+                                orgNameToFillContent.put(orgName, currentContent);
+                            }
+                            attrsDO.setFillContent(orgNameToFillContent.get(reportData.getOrgName()));
+                            attrsDO.setIsCollection(0);
+                            attrsDO.setIsSum(0);
+                        }
+                    }
+                }
+
+            }
+
+
+
+        }else{
+
+
+
+            List<YfDeviceDO> allDevice = yfDeviceService.getAllDevice();
+
+
+
+            LocalTime localTime = LocalTime.of(0,0,0);
+            LocalTime localTime1 = LocalTime.of(23,59,59);
+
+            LocalDateTime start = LocalDateTime.of(vo.getCreateTime(),localTime);
+            LocalDateTime end = LocalDateTime.of(vo.getCreateTime(),localTime1);
+
+            Timestamp startTime = Timestamp.valueOf(start);
+            Timestamp endTime = Timestamp.valueOf(end);
+
+
+            List<YfDeviceDO> existList = allDevice.stream().filter(e->e.getStatus()==3).collect(Collectors.toList());
+            boolean exists1 = existList.stream().anyMatch(yfDeviceDO->yfDeviceDO.getSerialNumber().equals(vo.getDeviceCode()));
+
+            IotDeviceRunLogDO logDO1 = new IotDeviceRunLogDO();
+            logDO1.setDeviceId(vo.getDeviceId());
+            LocalTime local = LocalTime.of(12, 0);
+            logDO1.setCreateTime(LocalDateTime.of(vo.getCreateTime(),local));
+
+            if(exists1){
+                for (IotModelTemplateAttrsDO attrsDO:list) {
+
+                    DeviceVO dv= new DeviceVO();
+                    dv.setDeviceName(vo.getDeviceCode().toLowerCase());
+                    dv.setColName(attrsDO.getModelAttr());
+                    dv.setTs(startTime);
+                    dv.setTs1(endTime);
+
+                    DeviceVO deviceVO = iDeviceService.getYesInfo(dv);
+
+                    if(!StringUtils.isEmpty(deviceVO) && !deviceVO.getEarliestData().equals("0.0")){
+                        attrsDO.setFillContent(
+                                String.valueOf(Double.parseDouble(deviceVO.getLatestData())-Double.parseDouble(deviceVO.getEarliestData())));
+                        attrsDO.setTotalRunTime(BigDecimal.valueOf(Double.parseDouble(deviceVO.getLatestData())));
+                        /**
+                         * 设置为数采
+                         */
+                        attrsDO.setIsCollection(1);
+                    }else{
+                        logDO1.setPointName(attrsDO.getName());
+                        IotDeviceRunLogDO logInfo = iotOpeationFillService.getLogInfo(logDO1);
+                        IotDeviceRunLogDO maxLog = iotOpeationFillService.getMaxFillInfo(logDO1);
+                        if(!StringUtils.isEmpty(logInfo)){
+
+                            attrsDO.setFillContent(logInfo.getFillContent());
+
+                            if(StringUtils.isEmpty(maxLog)){
+                                attrsDO.setTotalRunTime(BigDecimal.valueOf(0));
+                            }else{
+                                attrsDO.setTotalRunTime(maxLog.getTotalRunTime());
+                            }
+                            /**
+                             * 设置为非数采
+                             */
+                            attrsDO.setIsCollection(0);
+
+
+                        }else{
+                            attrsDO.setFillContent("");
+                            if(StringUtils.isEmpty(maxLog)){
+                                attrsDO.setTotalRunTime(BigDecimal.valueOf(0));
+                            }else{
+                                attrsDO.setTotalRunTime(maxLog.getTotalRunTime());
+                            }
+                            /**
+                             * 设置为非数采
+                             */
+                            attrsDO.setIsCollection(0);
+                        }
+                    }
+                }
+            }else{
+
+                for (IotModelTemplateAttrsDO attrsDO:list) {
                     logDO1.setPointName(attrsDO.getName());
                     IotDeviceRunLogDO logInfo = iotOpeationFillService.getLogInfo(logDO1);
                     IotDeviceRunLogDO maxLog = iotOpeationFillService.getMaxFillInfo(logDO1);
                     if(!StringUtils.isEmpty(logInfo)){
 
                         attrsDO.setFillContent(logInfo.getFillContent());
+                        attrsDO.setTotalRunTime(logInfo.getTotalRunTime());
 
-                        if(StringUtils.isEmpty(maxLog)){
-                            attrsDO.setTotalRunTime(BigDecimal.valueOf(0));
-                        }else{
-                            attrsDO.setTotalRunTime(maxLog.getTotalRunTime());
-                        }
                         /**
                          * 设置为非数采
                          */
@@ -405,52 +593,23 @@ public class IotOpeationFillController {
                         }else{
                             attrsDO.setTotalRunTime(maxLog.getTotalRunTime());
                         }
+
                         /**
                          * 设置为非数采
                          */
                         attrsDO.setIsCollection(0);
-                    }
-                }
-            }
-        }else{
 
-            for (IotModelTemplateAttrsDO attrsDO:list) {
-                logDO1.setPointName(attrsDO.getName());
-                IotDeviceRunLogDO logInfo = iotOpeationFillService.getLogInfo(logDO1);
-                IotDeviceRunLogDO maxLog = iotOpeationFillService.getMaxFillInfo(logDO1);
-                if(!StringUtils.isEmpty(logInfo)){
-
-                    attrsDO.setFillContent(logInfo.getFillContent());
-                    attrsDO.setTotalRunTime(logInfo.getTotalRunTime());
-
-                    /**
-                     * 设置为非数采
-                     */
-                    attrsDO.setIsCollection(0);
-
-
-                }else{
-                    attrsDO.setFillContent("");
-                    if(StringUtils.isEmpty(maxLog)){
-                        attrsDO.setTotalRunTime(BigDecimal.valueOf(0));
-                    }else{
-                        attrsDO.setTotalRunTime(maxLog.getTotalRunTime());
                     }
 
-                    /**
-                     * 设置为非数采
-                     */
-                    attrsDO.setIsCollection(0);
-
                 }
 
-           }
+            }
+
 
-        }
 
 
-        List<IotModelTemplateAttrsDO1> resut = new ArrayList<>();
 
+        }
         List<IotModelTemplateAttrsDO> sumList = list.stream().filter(e->e.getIsSum()==1).collect(Collectors.toList());
         List<IotModelTemplateAttrsDO> nonSumList = list.stream().filter(e->e.getIsSum()==0).collect(Collectors.toList());
 
@@ -461,9 +620,23 @@ public class IotOpeationFillController {
 
         resut.add(sum);
 
+
         return success(BeanUtils.toBean(resut,IotModelTemplateAttrsDO1.class));
     }
 
+    // 工具方法:将字符串转换为整数,空字符串视为0
+    private double safeParseInt(String str) {
+        if (str == null || str.trim().isEmpty()) {
+            return 0;
+        }
+        try {
+            return Integer.parseInt(str);
+        } catch (NumberFormatException e) {
+            // 如果字符串不是有效的整数格式,也返回0或根据实际需求处理
+            return 0;
+        }
+    }
+
     @GetMapping("/getDeivceFillInfo")
     @PermitAll
     @Operation(summary = "获得PMS 功能优化 设备模板属性")

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/vo/IotOpeationFillPageReqVO.java

@@ -77,6 +77,6 @@ public class IotOpeationFillPageReqVO extends PageParam {
     private Integer orderStatus;
     private Integer userId;
     private String userName;
-
+    private int isReport;
     private List<Long> deptIds;
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/vo/IotOpeationFillRespVO.java

@@ -88,4 +88,5 @@ public class IotOpeationFillRespVO {
     private Long orderId;
 
     private Integer deviceId;
+    private int isReport;
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/vo/IotOpeationFillSaveReqVO.java

@@ -90,4 +90,5 @@ public class IotOpeationFillSaveReqVO {
     private Long sumId;
 
     private String reason;
+    private int isReport;
 }

+ 2 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicerunlog/IotDeviceRunLogDO.java

@@ -95,4 +95,6 @@ public class IotDeviceRunLogDO extends BaseDO {
 
     private String fillContent;
 
+    private int isSum;
+
 }

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotmodeltemplateattrs/IotModelTemplateAttrsDO.java

@@ -115,6 +115,12 @@ public class IotModelTemplateAttrsDO extends BaseDO {
      */
     private Long sumId;
 
+    /**
+     * 日报取值
+     * 1是0否
+     */
+    private int dailyReport;
+
 
 
 

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotopeationfill/IotOpeationFillDO.java

@@ -109,5 +109,6 @@ public class IotOpeationFillDO extends BaseDO {
     private int allDev;
     private int fillDev;
     private int unFillDev;
+    private int isReport;
 
 }

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

@@ -101,8 +101,15 @@ public interface IotOpeationFillMapper extends BaseMapperX<IotOpeationFillDO> {
     @TenantIgnore
     PageResult<IotOpeationFillDO> fillList1(IotOpeationFillPageReqVO vo);
 
-
+    @TenantIgnore
     int insertLog(List<IotDeviceRunLogDO> logDO);
+    @TenantIgnore
+    int insertLog1(IotDeviceRunLogDO logDO);
+    @TenantIgnore
+    int updateLog(IotDeviceRunLogDO logDO);
+    @TenantIgnore
+    int updateSumLog(IotDeviceRunLogDO logDO);
+
     @TenantIgnore
     int updateFill(IotOpeationFillSaveReqVO vo);
     @TenantIgnore
@@ -113,6 +120,23 @@ public interface IotOpeationFillMapper extends BaseMapperX<IotOpeationFillDO> {
     IotDeviceRunLogDO getLogInfo(IotDeviceRunLogDO vo);
     IotDeviceRunLogDO getMaxFillInfo(IotDeviceRunLogDO vo);
 
+
+    @TenantIgnore
+    List<IotOpeationFillDO> devList(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    List<IotOpeationFillDO> orderList(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    List<IotOpeationFillDO> delList(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    int delRepeat(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    int delRepeatOrder(IotOpeationFillDO fillDO);
+
+
     @TenantIgnore
     int updateFillOrder(IotDeviceRunLogDO vo);
     @TenantIgnore
@@ -125,6 +149,9 @@ public interface IotOpeationFillMapper extends BaseMapperX<IotOpeationFillDO> {
     @TenantIgnore
     IPage<IotDeviceRespVO> getFillDevices1(IPage<IotOpeationFillPageReqVO> page,@Param("deviceIds") Collection<Long> deviceIds);
 
+    @TenantIgnore
+    List<IotDeviceRespVO> getFillDevices2(@Param("deptIds") Collection<Long> deptIds);
+
     @TenantIgnore
     List<DeviceZHBDDO> carList();
 
@@ -139,5 +166,27 @@ public interface IotOpeationFillMapper extends BaseMapperX<IotOpeationFillDO> {
     @TenantIgnore
     IPage<IotDeviceCountData> deviceCountList(IPage<IotOpeationFillPageReqVO> page, @Param("deptId") Long deptId,
                                               @Param("createTime")LocalDateTime[] createTime,@Param("isFill") Integer isFill,@Param("orderName") String orderName);
+    List<IotOpeationFillOrderDO> childList(IotOpeationFillOrderDO fillDO);
+
+    @TenantIgnore
+    IotOpeationFillDO isReport(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    IotOpeationFillDO orderDO(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    List<IotOpeationFillDO> reportList(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    List<IotOpeationFillDO> reportList1(IotOpeationFillDO fillDO);
+
+    @TenantIgnore
+    IotDeviceRunLogDO reportData(IotDeviceRunLogDO runLogDO);
+
+    @TenantIgnore
+    IotDeviceRunLogDO reportData1(IotDeviceRunLogDO runLogDO);
+
+    @TenantIgnore
+    IotDeviceRunLogDO getDesc(IotDeviceRunLogDO runLogDO);
 
 }

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

@@ -4,6 +4,7 @@ import java.util.*;
 import javax.validation.*;
 
 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.IotOpeationFillRespVO;
@@ -100,6 +101,13 @@ public interface IotOpeationFillService {
 
     int insertLog(List<IotDeviceRunLogDO> logDO);
 
+
+    int insertLog1(IotDeviceRunLogDO logDO);
+
+    int updateLog(IotDeviceRunLogDO logDO);
+
+    int updateSumLog(IotDeviceRunLogDO logDO);
+
     /**
      * 更新填写状态
      * @param vo
@@ -126,6 +134,22 @@ public interface IotOpeationFillService {
 
     int updateFillOrder2(IotDeviceRunLogDO vo);
 
+
+
+
+    List<IotOpeationFillDO> devList(IotOpeationFillDO fillDO);
+
+
+    List<IotOpeationFillDO> orderList(IotOpeationFillDO fillDO);
+
+
+    List<IotOpeationFillDO> delList(IotOpeationFillDO fillDO);
+
+    int delRepeat(IotOpeationFillDO fillDO);
+
+    int delRepeatOrder(IotOpeationFillDO fillDO);
+
+
     PageResult<IotOpeationFillOrderDO> fillRecords(IotOpeationFillPageReqVO vo);
 
     PageResult<IotDeviceRespVO> getFillDevices1(IotOpeationFillPageReqVO vo);
@@ -136,4 +160,24 @@ public interface IotOpeationFillService {
 
     List<IotCountDataDO> countDeviceList(IotCountDataDO dataDO);
 
+    /**
+     * 日报执行方法
+     * @return
+     */
+    List<IotOpeationFillDO> reportMethod(List<IotOpeationFillOrderDO> orderList);
+
+    IotOpeationFillDO isReport(IotOpeationFillDO fillDO);
+
+    IotOpeationFillDO orderDO(IotOpeationFillDO fillDO);
+
+    List<IotOpeationFillDO> reportList(IotOpeationFillDO fillDO);
+
+    List<IotOpeationFillDO> reportList1(IotOpeationFillDO fillDO);
+
+    IotDeviceRunLogDO reportData(IotDeviceRunLogDO runLogDO);
+
+    IotDeviceRunLogDO reportData1(IotDeviceRunLogDO runLogDO);
+
+    IotDeviceRunLogDO getDesc(IotDeviceRunLogDO runLogDO);
+
 }

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

@@ -29,6 +29,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.ThreadLocalRandom;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -50,6 +51,8 @@ public class IotOpeationFillServiceImpl implements IotOpeationFillService {
     @Resource
     private DeptService deptService;
 
+    private static Long RH_CLASS_ID = 226L;
+
     @Override
     public Long createIotOpeationFill(IotOpeationFillSaveReqVO createReqVO) {
         // 插入
@@ -200,6 +203,21 @@ public class IotOpeationFillServiceImpl implements IotOpeationFillService {
         return iotOpeationFillMapper.insertLog(logDO);
     }
 
+    @Override
+    public int insertLog1(IotDeviceRunLogDO logDO) {
+        return iotOpeationFillMapper.insertLog1(logDO);
+    }
+
+    @Override
+    public int updateLog(IotDeviceRunLogDO logDO) {
+        return iotOpeationFillMapper.updateLog(logDO);
+    }
+
+    @Override
+    public int updateSumLog(IotDeviceRunLogDO logDO) {
+        return iotOpeationFillMapper.updateSumLog(logDO);
+    }
+
     @Override
     public int updateFill(IotOpeationFillSaveReqVO vo) {
         return iotOpeationFillMapper.updateFill(vo);
@@ -240,6 +258,31 @@ public class IotOpeationFillServiceImpl implements IotOpeationFillService {
         return iotOpeationFillMapper.updateFillOrder2(vo);
     }
 
+    @Override
+    public List<IotOpeationFillDO> devList(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.devList(fillDO);
+    }
+
+    @Override
+    public List<IotOpeationFillDO> orderList(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.orderList(fillDO);
+    }
+
+    @Override
+    public List<IotOpeationFillDO> delList(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.delList(fillDO);
+    }
+
+    @Override
+    public int delRepeat(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.delRepeat(fillDO);
+    }
+
+    @Override
+    public int delRepeatOrder(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.delRepeatOrder(fillDO);
+    }
+
     @Override
     public PageResult<IotOpeationFillOrderDO> fillRecords(IotOpeationFillPageReqVO vo) {
         IPage<IotOpeationFillOrderDO> fillOrderDOIPage = iotOpeationFillMapper.fillRecords(Page.of(vo.getPageNo(), vo.getPageSize()),vo.getDeviceId(),vo.getOrderName(),vo.getOrderStatus());
@@ -277,4 +320,74 @@ public class IotOpeationFillServiceImpl implements IotOpeationFillService {
         return iotOpeationFillMapper.countDeviceList(dataDO);
     }
 
+    @Override
+    public List<IotOpeationFillDO> reportMethod(List<IotOpeationFillOrderDO> orderList) {
+        List<IotOpeationFillDO> devList = new ArrayList<>();
+
+
+
+
+
+        //判断工单主数据是否有值
+        if(orderList.size()>0){
+            //遍历工单主数据,根据dept_id查询是否为根节点
+            for (IotOpeationFillOrderDO orderDO:orderList) {
+                List<IotOpeationFillOrderDO> childList = iotOpeationFillMapper.childList(orderDO);
+
+                int randomNum = ThreadLocalRandom.current().nextInt(100000, 1000000);
+
+                //如果是根节点,则证明该部门为小队并且属于瑞恒,创建对应日报虚拟设备
+                if(childList.size()==0){
+                    IotOpeationFillDO devOrder = new IotOpeationFillDO();
+                    devOrder.setDeviceCode("");
+                    devOrder.setDeviceName("生产日报");
+                    devOrder.setDeviceCategoryId(RH_CLASS_ID);
+                    devOrder.setDeptId(orderDO.getDeptId());
+                    devOrder.setIsReport(1);
+                    devOrder.setOrderId(orderDO.getId());
+                    devOrder.setDeviceId((long) randomNum);
+                    devOrder.setCreateTime(orderDO.getCreateTime());
+                    devList.add(devOrder);
+                }
+            }
+        }
+
+        return devList;
+    }
+
+    @Override
+    public IotOpeationFillDO isReport(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.isReport(fillDO);
+    }
+
+    @Override
+    public IotOpeationFillDO orderDO(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.orderDO(fillDO);
+    }
+
+    @Override
+    public List<IotOpeationFillDO> reportList(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.reportList(fillDO);
+    }
+
+    @Override
+    public List<IotOpeationFillDO> reportList1(IotOpeationFillDO fillDO) {
+        return iotOpeationFillMapper.reportList1(fillDO);
+    }
+
+    @Override
+    public IotDeviceRunLogDO reportData(IotDeviceRunLogDO runLogDO) {
+        return iotOpeationFillMapper.reportData(runLogDO);
+    }
+
+    @Override
+    public IotDeviceRunLogDO reportData1(IotDeviceRunLogDO runLogDO) {
+        return iotOpeationFillMapper.reportData1(runLogDO);
+    }
+
+    @Override
+    public IotDeviceRunLogDO getDesc(IotDeviceRunLogDO runLogDO) {
+        return iotOpeationFillMapper.getDesc(runLogDO);
+    }
+
 }

+ 205 - 5
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

@@ -101,11 +101,11 @@
 
     <insert id="insertFill"
     parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
-       insert into rq_iot_opeation_fill(device_id,device_code,device_name,device_category_id,create_time,dept_id,order_id)
+       insert into rq_iot_opeation_fill(device_id,device_code,device_name,device_category_id,create_time,dept_id,order_id,is_report)
            values
         <foreach collection="list" item="item" separator=",">
             (#{item.deviceId},#{item.deviceCode},#{item.deviceName},
-            #{item.deviceCategoryId},#{item.createTime},#{item.deptId},#{item.orderId})
+            #{item.deviceCategoryId},#{item.createTime},#{item.deptId},#{item.orderId},#{item.isReport})
         </foreach>
     </insert>
 
@@ -124,15 +124,52 @@
     <insert id="insertLog"
             parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
         insert into rq_iot_device_run_log
-            (dept_id,device_id,device_code,point_code,fill_content,create_time,point_name,total_run_time)
+            (dept_id,device_id,device_code,point_code,fill_content,create_time,point_name,total_run_time,is_sum)
         values
         <foreach collection="list" item="item" separator=",">
             (#{item.deptId},#{item.deviceId},#{item.deviceCode},
-            #{item.pointCode},#{item.fillContent},#{item.createTime},#{item.pointName},#{item.totalRunTime})
+            #{item.pointCode},#{item.fillContent},#{item.createTime},#{item.pointName},#{item.totalRunTime},#{item.isSum})
         </foreach>
 
     </insert>
 
+    <insert id="insertLog1"
+            parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
+        insert into rq_iot_device_run_log
+        (dept_id, device_id, device_code, point_code, fill_content, create_time, point_name, total_run_time,is_sum)
+        values
+        (#{deptId}, #{deviceId}, #{deviceCode},
+         #{pointCode}, #{fillContent}, #{createTime}, #{pointName}, #{totalRunTime},#{isSum})
+    </insert>
+
+    <update id="updateLog" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
+        update rq_iot_device_run_log
+        set
+        fill_content = #{fillContent}
+        where
+            device_code = #{deviceCode}
+        and
+            point_name = #{pointName}
+        and
+            DATE(create_time) = #{createTime}
+        and
+           is_sum = 0
+    </update>
+
+    <update id="updateSumLog" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
+        update rq_iot_device_run_log
+        set
+            total_run_time = #{totalRunTime}
+        where
+            device_code = #{deviceCode}
+          and
+            point_name = #{pointName}
+          and
+            DATE(create_time) = #{createTime}
+          and
+            is_sum = 1
+    </update>
+
    <!-- <select id="fillList" parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO"
     resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
         SELECT * FROM
@@ -242,6 +279,9 @@
             1=1
         </if>-->
         )
+        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
     </select>
 
 
@@ -307,6 +347,19 @@
             rq_iot_opeation_fill
         WHERE
             order_id = #{orderId}
+        and
+            dept_id IN (
+                SELECT id FROM (
+                                   SELECT d1.id FROM system_dept d1 WHERE d1.id = #{deptId}
+                                   UNION ALL
+                                   SELECT d2.id FROM system_dept d1 JOIN system_dept d2 ON d2.parent_id = d1.id WHERE d1.id = #{deptId}
+                                   UNION ALL
+                                   SELECT d3.id FROM system_dept d1 JOIN system_dept d2 ON d2.parent_id = d1.id JOIN system_dept d3 ON d3.parent_id = d2.id WHERE d1.id = #{deptId}
+                                   UNION ALL
+                                   SELECT d4.id FROM system_dept d1 JOIN system_dept d2 ON d2.parent_id = d1.id JOIN system_dept d3 ON d3.parent_id = d2.id JOIN system_dept d4 ON d4.parent_id = d3.id WHERE d1.id = #{deptId}
+                               ) AS dept_hierarchy
+            )
+        and device_name != '日报填报'
     </select>
 
 
@@ -461,7 +514,8 @@
             is_sum,
             threshold,
             default_value,
-            sum_id
+            sum_id,
+            description
         from
             rq_iot_model_template_attrs
         where
@@ -601,6 +655,7 @@
         and e.deleted = 0
         WHERE a.deleted = 0
         and e.order_name is not null
+        and a.device_name != '生产日报'
         AND b.id IN (
         SELECT id FROM system_dept WHERE id = #{deptId}
         UNION ALL
@@ -764,6 +819,7 @@
         and e.deleted = 0
         WHERE a.deleted = 0
         and e.order_name is not null
+        and a.device_name != '生产日报'
         AND b.id IN (
         SELECT id FROM system_dept WHERE id = #{deptId}
         UNION ALL
@@ -791,4 +847,148 @@
         </if>) a
     </select>
 
+
+    <select id="childList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillOrderDO"
+    resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillOrderDO">
+        SELECT id dept_id
+        FROM system_dept
+        WHERE parent_id = #{deptId}
+          AND deleted = 0
+    </select>
+
+    <select id="isReport" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO"
+    resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+        select * from
+            rq_iot_opeation_fill
+        where
+            device_id = #{deviceId}
+        and
+            DATE(create_time) = #{createTime}
+    </select>
+
+    <select id="orderDO" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+        select
+            order_id
+        from
+            rq_iot_opeation_fill
+        where
+            device_id = #{deviceId}
+        and
+            DATE(create_time) = #{createTime}
+    </select>
+
+    <select id="reportList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+        SELECT DISTINCT
+            a.device_id,
+            a.device_code,
+            a.device_name,
+            a.create_time,
+            b.name AS org_name
+        FROM
+            rq_iot_opeation_fill a
+        INNER JOIN
+            rq_iot_model_template_attrs b
+        ON
+            a.device_category_id = b.device_category_id
+        WHERE
+            a.order_id = #{orderId}
+        AND (
+        -- 第一个查询的条件
+            (a.is_report = 1 AND b.daily_report = 0
+            AND b.name NOT IN (
+                    SELECT
+                        DISTINCT
+                        b2.name
+                    FROM
+                        rq_iot_opeation_fill a2
+                    INNER JOIN
+                        rq_iot_model_template_attrs b2
+                    ON
+                        a2.device_category_id = b2.device_category_id
+                    WHERE
+                       a2.order_id =  #{orderId}
+                    AND
+                       a2.is_report = 0
+                    AND
+                       b2.daily_report = 1
+                ))
+            -- 第二个查询的条件(通过OR代替UNION)
+             OR (a.is_report = 0 AND b.daily_report = 1)
+            )
+    </select>
+
+    <select id="reportList1" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+        select
+            distinct
+            a.device_id,
+            a.device_code,
+            a.device_name,
+            a.create_time,
+            b.name org_name
+        from
+            rq_iot_opeation_fill a,
+            rq_iot_model_template_attrs b
+        where
+            a.device_category_id = b.device_category_id
+          and
+            a.order_id = #{orderId}
+          and is_report = 1
+          and b.daily_report = 0
+          and b.name not in
+          (
+            select
+                distinct
+                b.name
+            from
+                rq_iot_opeation_fill a,
+                rq_iot_model_template_attrs b
+            where
+                a.device_category_id = b.device_category_id
+              and
+                a.order_id = #{orderId}
+              and is_report = 0
+              and b.daily_report = 1
+          )
+    </select>
+
+    <select id="reportData" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
+        select * from
+            rq_iot_device_run_log
+        where
+            device_id = #{deviceId}
+          and
+            point_name = #{pointName}
+          and DATE(create_time) = DATE(#{createTime})
+    </select>
+
+    <select id="reportData1" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
+        select * from
+            rq_iot_device_run_log
+        where
+            device_id = #{deviceId}
+          and
+            point_name = #{pointName}
+          and DATE(create_time) = DATE(#{createTime})
+    </select>
+
+    <select id="getDesc" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO">
+        select
+            description point_name
+        from
+            rq_iot_model_template_attrs
+        where
+            name = #{pointName}
+          and
+            device_category_id =
+            (select device_category_id  from rq_iot_opeation_fill where device_id = #{deviceId} and DATE(create_time) = #{createTime})
+    </select>
+
+
+
 </mapper>