From cf89583e4dd54632a0f11c06b859315c03958820 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期三, 17 一月 2024 17:36:41 +0800
Subject: [PATCH] 设备运行状态及利用率预警任务

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java         |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml                       |    4 
 lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java                             |   15 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java                      |  150 +++++++++++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java            |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java                 |   12 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunMonitoringSpeedJob.java                          |   63 +++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java        |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml         |   11 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java               |   76 ++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java                   |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java                          |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java                       |    7 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml                |   11 +
 15 files changed, 367 insertions(+), 6 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
index 7745fd2..402ff1a 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -577,4 +577,19 @@
      */
     String DICT_OPERATING_SPEED_RANGE = "operating_speed_range";
 
+    /**
+     * 鍒╃敤鐜囧垽瀹氶棿闅斿瓧鍏哥紪鍙�
+     */
+    String DICT_EQUIPMENT_RATE_JUDGE = "equipment_rate_judge";
+
+    /**
+     * 璁惧鐘舵�佸垽鏂棿闅斿瓧鍏哥紪鍙�
+     */
+    String DICT_EQUIPMENT_SPEED_JUDGE = "equipment_status_judge";
+
+    /**
+     * 鍒╃敤鐜囨甯稿�煎瓧鍏哥紪鍙�
+     */
+    String DICT_EQUIPMENT_RATE_NORMAL = "equipment_rate_normal";
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunMonitoringSpeedJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunMonitoringSpeedJob.java
new file mode 100644
index 0000000..6e1e457
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunMonitoringSpeedJob.java
@@ -0,0 +1,63 @@
+package org.jeecg.modules.mdc.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.quartz.*;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Lius
+ * @Description: 鐩戞帶璁惧杞�熶换鍔�
+ * @date 2024/1/16 17:36
+ */
+@PersistJobDataAfterExecution
+@DisallowConcurrentExecution
+@Slf4j
+public class RunMonitoringSpeedJob implements Job {
+
+    @Resource
+    private IQuartzJobService quartzJobService;
+
+    @Resource
+    private ISysQuartzLogService sysQuartzLogService;
+
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        log.info("鐩戞帶璁惧杞�熶换鍔� RunMonitoringSpeedJob start!  鏃堕棿:" + DateUtils.now());
+        long startTime = System.currentTimeMillis();
+        try {
+            mdcEquipmentService.monitoringSpeedProcess();
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("鐩戞帶璁惧杞�熶换鍔″け璐ワ紒", quartzLog.getExceptionDetail());
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java
new file mode 100644
index 0000000..a46e9de
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java
@@ -0,0 +1,150 @@
+package org.jeecg.modules.mdc.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.dto.message.MessageDTO;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.modules.mdc.entity.MdcEquipment;
+import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService;
+import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
+import org.jeecg.modules.mdc.util.DateUtils;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.quartz.entity.QuartzJob;
+import org.jeecg.modules.quartz.entity.SysQuartzLog;
+import org.jeecg.modules.quartz.service.IQuartzJobService;
+import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.quartz.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Lius
+ * @Description: 鍒╃敤鐜囨甯稿�硷紝璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ
+ * @date 2024/1/17 14:10
+ */
+@PersistJobDataAfterExecution
+@DisallowConcurrentExecution
+@Slf4j
+public class RunningEquipmentStatusJob implements Job {
+
+    @Resource
+    private IQuartzJobService quartzJobService;
+
+    @Resource
+    private ISysQuartzLogService sysQuartzLogService;
+
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    @Resource
+    private ISysDictService sysDictService;
+
+    @Resource
+    private MdcEfficiencyReportService mdcEfficiencyReportService;
+
+    @Resource
+    private ISysBaseAPI sysBaseApi;
+
+    @Resource
+    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        log.info("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ浠诲姟 RunningEquipmentStatusJob start!  鏃堕棿:" + DateUtils.getNow());
+        long startTime = System.currentTimeMillis();
+        try {
+            //List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<>());
+            List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198"));
+            // 鑾峰彇鍒╃敤鐜囧垽瀹氬ぉ鏁�
+            List<DictModel> dictModelList1 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_JUDGE);
+            Integer equipmentRateJudge = 5;
+            if (dictModelList1 != null && !dictModelList1.isEmpty()) {
+                equipmentRateJudge = Integer.valueOf(dictModelList1.get(0).getValue());
+            }
+            // 鑾峰彇鍒╃敤鐜囨甯稿��
+            List<DictModel> dictModelList2 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_SPEED_JUDGE);
+            Integer equipmentRateNormal = 20;
+            if (dictModelList2 != null && !dictModelList2.isEmpty()) {
+                equipmentRateNormal = Integer.valueOf(dictModelList2.get(0).getValue());
+            }
+            // 鑾峰彇璁惧鐘舵�佸ぉ鏁�
+            List<DictModel> dictModelList3 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_NORMAL);
+            Integer equipmentStatusJudge = 5;
+            if (dictModelList3 != null && !dictModelList3.isEmpty()) {
+                equipmentStatusJudge = Integer.valueOf(dictModelList3.get(0).getValue());
+            }
+            for (MdcEquipment mdcEquipment : equipmentList) {
+                // 鍒ゆ柇鍒╃敤鐜�
+                String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-equipmentRateJudge).toString(), DateUtils.STR_DATE), DateUtils.STRDATE);
+                List<BigDecimal> efficiencyRateList = mdcEfficiencyReportService.getEfficiencyRate(mdcEquipment.getEquipmentId(), date);
+                if (efficiencyRateList != null && !efficiencyRateList.isEmpty()) {
+                    boolean flag = true;
+                    for (BigDecimal processLong : efficiencyRateList) {
+                        BigDecimal efficiencyRate = processLong.divide(new BigDecimal("86400"), 4, RoundingMode.HALF_UP);
+                        if (efficiencyRate.compareTo(new BigDecimal(equipmentRateNormal)) > -1) {
+                            flag = false;
+                        }
+                    }
+                    if (flag) {
+                        // 涓婃姤
+                        MessageDTO messageDTO = new MessageDTO();
+                        messageDTO.setCategory("棰勮娑堟伅");
+                        messageDTO.setFromUser("admin");
+                        messageDTO.setToUser("admin");
+                        messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囧埄鐢ㄧ巼浣庝簬姝e父鍊兼姤璀︼紒");
+                        sysBaseApi.sendSysAnnouncement(messageDTO);
+                    }
+                }
+                // 鍒ゆ柇璁惧鐘舵��
+                Date date1 = DateUtils.toDate(LocalDate.now().plusDays(-equipmentStatusJudge).toString(), DateUtils.STR_DATE);
+                List<Integer> sectionList = mdcEquipmentRunningSectionService.getDataList(mdcEquipment.getEquipmentId(), date1);
+                if (sectionList != null && !sectionList.isEmpty() && sectionList.size() > 1) {
+                    boolean flag = true;
+                    Integer integer = sectionList.get(0);
+                    for (Integer integer1 : sectionList) {
+                        if (!integer.equals(integer1)) {
+                            flag = false;
+                        }
+                    }
+                    if (flag) {
+                        // 涓婃姤
+                        MessageDTO messageDTO = new MessageDTO();
+                        messageDTO.setCategory("棰勮娑堟伅");
+                        messageDTO.setFromUser("admin");
+                        messageDTO.setToUser("admin");
+                        messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囩姸鎬侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                        sysBaseApi.sendSysAnnouncement(messageDTO);
+                    }
+                }
+            }
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ浠诲姟澶辫触锛�", quartzLog.getExceptionDetail());
+        }
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
index 95064b3..8d71bfd 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
@@ -3,12 +3,12 @@
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.mdc.dto.MdcComAnaDto;
 import org.jeecg.modules.mdc.dto.MdcEfficiencyDto;
-import org.jeecg.modules.mdc.dto.MdcEfficiencyResultDto;
 import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
 import org.jeecg.modules.mdc.vo.ComparativeAnalysisQueryVo;
 import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
 import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -48,4 +48,6 @@
      * @return
      */
     List<MdcComAnaDto> comparativeAnalysis(@Param("vo") ComparativeAnalysisQueryVo vo);
+
+    List<BigDecimal> getEfficiencyRate(@Param("equipmentId") String equipmentId, @Param("date") String date);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
index 0fa0195..0f32435 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -1,11 +1,13 @@
 package org.jeecg.modules.mdc.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.mdc.dto.MdcEquDepDto;
 import org.jeecg.modules.mdc.dto.MdcEquProDto;
+import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor;
 import org.jeecg.modules.mdc.vo.MdcEquipmentDepVo;
@@ -93,4 +95,7 @@
      * 鍒嗛〉鍒楄〃
      */
     IPage<MdcEquipment> pageList(Page<MdcEquipment> page, @Param("mdcEquipment") MdcEquipmentVo mdcEquipment);
+
+    @InterceptorIgnore(tenantLine = "1")
+    MdcEquipmentDto getWorkLineLast(@Param("tableName") String saveTableName);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java
index 3b7ed26..769629f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java
@@ -73,4 +73,6 @@
     List<MdcEquipmentRunningSection> selectRunningData(@Param("equipmentId") String equipmentId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
 
     List<MdcAlarmListDto> selectAlarmList(@Param("vo") MdcAlarmAnalyzeQueryVo mdcAlarmAnalyzeQueryVo, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+    List<Integer> getDataList(@Param("equipmentId") String equipmentId, @Param("date") Date date);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
index 0785e3a..5320b97 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
@@ -148,4 +148,15 @@
         GROUP BY
             mesi.equipment_id
     </select>
+
+
+    <select id="getEfficiencyRate" resultType="java.math.BigDecimal">
+        SELECT
+            process_long
+        FROM
+            mdc_equipment_statistical_info
+        WHERE
+            equipment_id = #{ equipmentId } AND the_date &gt;= #{ date }
+        ORDER BY the_date ASC
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
index c682b6e..298d26e 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -246,4 +246,8 @@
     </select>
 
 
+    <select id="getWorkLineLast" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentDto">
+        select top 1 spindlespeed, actualspindlespeed from [${tableName}] order by CollectTime  desc
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml
index e5492b7..a2b6082 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml
@@ -162,5 +162,16 @@
         </where>
     </select>
 
+    <select id="getDataList" resultType="java.lang.Integer">
+        SELECT
+            status
+        FROM
+            mdc_equipment_running_section
+        WHERE
+            equipment_id = #{ equipmentId }
+          AND start_time &gt; #{date}
+          AND status IS NOT NULL
+    </select>
+
 
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java
index 0cbd8ea..f326ac6 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java
@@ -85,4 +85,7 @@
     List<MdcEquipmentRunningSection> selectRunningData(String equipmentId, Date startDate, Date endDate);
 
     List<MdcAlarmListDto> selectAlarmList(MdcAlarmAnalyzeQueryVo mdcAlarmAnalyzeQueryVo, String startDate, String endDate);
+
+    List<Integer> getDataList(String equipmentId, Date date);
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
index aa0caac..4ea1405 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -176,4 +176,11 @@
      * 鍒楄〃鏌ヨ
      */
     IPage<MdcEquipment> pageList(Page<MdcEquipment> page, MdcEquipmentVo mdcEquipment, HttpServletRequest req);
+
+    /**
+     * 鐩戞帶璁惧杞�熶换鍔�
+     */
+    void monitoringSpeedProcess();
+
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
index a92007a..d3dccf2 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -4,6 +4,9 @@
 import org.jeecg.modules.mdc.dto.DayUtilizationRateDto;
 import org.jeecg.modules.mdc.vo.*;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * @author: LiuS
  * @create: 2023-06-15 17:25
@@ -90,4 +93,13 @@
      * @return
      */
     MdcUtilizationRateDto utilizationRateTrendAnalyze(String userId, DayUtilizationRateContrastQueryVo vo);
+
+    /**
+     * 鑾峰彇鍒╃敤鐜�
+     *
+     * @param equipmentId
+     * @param date
+     * @return
+     */
+    List<BigDecimal> getEfficiencyRate(String equipmentId, String date);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
index 3a0c516..5ba142f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -1729,6 +1729,11 @@
         return result;
     }
 
+    @Override
+    public List<BigDecimal> getEfficiencyRate(String equipmentId, String date) {
+        return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date);
+    }
+
     private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
         MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
         dto.setEquipmentId(equipmentId);
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
index 90a923d..1d64041 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -697,6 +697,11 @@
         return this.baseMapper.selectAlarmList(mdcAlarmAnalyzeQueryVo, startDate, endDate);
     }
 
+    @Override
+    public List<Integer> getDataList(String equipmentId, Date date) {
+        return this.baseMapper.getDataList(equipmentId, date);
+    }
+
     private Map<String, List<MdcEquipmentRunningSectionDto>> logCharts(MdcEquipmentRunningSectionVo equipmentRunningSectionVo, String date) {
         Map<String, List<MdcEquipmentRunningSectionDto>> map = new HashMap<>();
         List<MdcEquipmentRunningSectionDto> normal = new ArrayList<>();
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
index 83bebd6..a0fb120 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -6,7 +6,10 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.dto.message.MessageDTO;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.mdc.dto.MdcEquDepDto;
 import org.jeecg.modules.mdc.dto.MdcEquProDto;
@@ -19,17 +22,17 @@
 import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.mdc.util.FindsEquipmentDepartUtil;
 import org.jeecg.modules.mdc.util.FindsEquipmentProductionUtil;
-import org.jeecg.modules.mdc.vo.*;
+import org.jeecg.modules.mdc.vo.MdcEquipmentDepVo;
+import org.jeecg.modules.mdc.vo.MdcEquipmentProVo;
+import org.jeecg.modules.mdc.vo.MdcEquipmentVo;
+import org.jeecg.modules.mdc.vo.WorkshopEquipmentVo;
 import org.jeecg.modules.system.entity.MdcEquipmentDepart;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.entity.MdcProductionEquipment;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.mapper.MdcEquipmentDepartMapper;
 import org.jeecg.modules.system.mapper.MdcProductionEquipmentMapper;
-import org.jeecg.modules.system.service.IMdcProductionService;
-import org.jeecg.modules.system.service.IMdcUserProductionService;
-import org.jeecg.modules.system.service.ISysDepartService;
-import org.jeecg.modules.system.service.ISysUserDepartService;
+import org.jeecg.modules.system.service.*;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -77,6 +80,13 @@
 
     @Resource
     private IEquipmentBaseInfoService equipmentBaseInfoService;
+
+    @Resource
+    private ISysDictService sysDictService;
+
+    @Resource
+    private ISysBaseAPI sysBaseApi;
+
 
     @Override
     public Map<String, String> getDepNamesByEquipmentIds(List<String> equipmentIds) {
@@ -700,4 +710,60 @@
         return this.baseMapper.pageList(page, mdcEquipment);
     }
 
+    /**
+     * 鐩戞帶璁惧杞�熶换鍔�
+     */
+    @Override
+    public void monitoringSpeedProcess() {
+        List<MdcEquipment> equipmentList = super.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getDriveType, "FANUC"));
+        //List<MdcEquipment> equipmentList = super.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198"));
+        // 鑾峰彇瀛楀吀鏁版嵁
+        List<DictModel> dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_OPERATING_SPEED_RANGE);
+        Integer range = 0;
+        if (dictModelList != null && !dictModelList.isEmpty()) {
+            range = Integer.valueOf(dictModelList.get(0).getValue());
+        }
+        for (MdcEquipment mdcEquipment : equipmentList) {
+            String saveTableName = mdcEquipment.getSaveTableName();
+            //鏌ヨ鍗曡〃鏁版嵁
+            MdcEquipmentDto mdcEquipmentDto = this.baseMapper.getWorkLineLast(saveTableName);
+            if (mdcEquipmentDto != null) {
+                MessageDTO messageDTO = new MessageDTO();
+                messageDTO.setTitle("璁惧杩愯杞�熸姤璀︼紒");
+                messageDTO.setCategory("棰勮娑堟伅");
+                messageDTO.setFromUser("admin");
+                messageDTO.setToUser("admin");
+                Integer spindlespeed = Integer.valueOf(mdcEquipmentDto.getSpindlespeed());
+                Integer actualspindlespeed = Integer.valueOf(mdcEquipmentDto.getActualspindlespeed());
+                if (range.equals(0)) {
+                    if (spindlespeed > actualspindlespeed) {
+                        // 瀹為檯鍊煎ぇ浜庤瀹氬��   楂�
+                        messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熼珮鎶ヨ锛�");
+                        sysBaseApi.sendSysAnnouncement(messageDTO);
+                    } else if (spindlespeed < actualspindlespeed) {
+                        // 瀹為檯鍊煎皬浜庤瀹氬��   浣�
+                        messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熶綆鎶ヨ锛�");
+                        sysBaseApi.sendSysAnnouncement(messageDTO);
+                    }
+                } else {
+                    int max = actualspindlespeed + actualspindlespeed * (range / 100);
+                    int min = actualspindlespeed - actualspindlespeed * (range / 100);
+                    if (spindlespeed > max || spindlespeed < min) {
+                        if (spindlespeed > actualspindlespeed) {
+                            // 瀹為檯鍊煎ぇ浜庤瀹氬��   楂�
+                            messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熼珮鎶ヨ锛�");
+                            sysBaseApi.sendSysAnnouncement(messageDTO);
+                        } else if (spindlespeed < actualspindlespeed) {
+                            // 瀹為檯鍊煎皬浜庤瀹氬��   浣�
+                            messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熶綆鎶ヨ锛�");
+                            sysBaseApi.sendSysAnnouncement(messageDTO);
+                        }
+                    }
+                }
+
+            }
+        }
+
+    }
+
 }

--
Gitblit v1.9.3