From c51323e6fcc84f08bc8c01e3dd6c916427f83f4e Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期四, 07 三月 2024 10:41:50 +0800
Subject: [PATCH] 设备状态长时间未变化算法更新

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml                                  |    5 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml     |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMessageApprovalController.java                       |  153 ++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java                                 |  129 ++++++++--
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java         |    8 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMessageApprovalMapper.xml                            |    5 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java                    |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMessageApproval.java                                     |   85 +++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMessageApprovalMapper.java                               |   14 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMessageApprovalService.java                            |   14 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMessageApprovalServiceImpl.java                    |   18 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java        |   13 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java                 |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java                                 |  151 ++++++++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java |    8 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java                          |   19 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java         |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java                                          |   18 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java                                     |    9 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java                                  |    7 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml                 |   11 
 21 files changed, 647 insertions(+), 35 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java
index d727367..afbeb3e 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java
@@ -57,4 +57,22 @@
 
     public static final String MONTH = "鏈�";
 
+    /**
+     * 璁惧绠$悊鍛�
+     */
+    public static final String MDC_EQUIPMENT_MANAGER = "mdcEquipmentManager";
+
+    /**
+     * 璁惧瓒呯骇绠$悊鍛�
+     */
+    public static final String MDC_EQUIPMENT_SUPER_MANAGER = "mdcEquipmentSuperManager";
+
+    /**
+     * 娑堟伅鐘舵�侊紙0寰呭鐞嗭紝1寰呯‘璁�, 2宸茬‘璁わ紝3宸叉嫆缁濓級
+     */
+    public static final String MSG_STATUS_0 = "0";
+    public static final String MSG_STATUS_1 = "1";
+    public static final String MSG_STATUS_2 = "2";
+    public static final String MSG_STATUS_3 = "3";
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMessageApprovalController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMessageApprovalController.java
new file mode 100644
index 0000000..55f7553
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMessageApprovalController.java
@@ -0,0 +1,153 @@
+package org.jeecg.modules.mdc.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.mdc.entity.MdcMessageApproval;
+import org.jeecg.modules.mdc.service.IMdcMessageApprovalService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+ * @Description: mdc娑堟伅纭琛�
+ * @Author: Lius
+ * @Date: 2024-03-06
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "mdc娑堟伅纭琛�")
+@RestController
+@RequestMapping("/mdc/mdcMessageApproval")
+public class MdcMessageApprovalController extends JeecgController<MdcMessageApproval, IMdcMessageApprovalService> {
+
+    @Resource
+    private IMdcMessageApprovalService mdcMessageApprovalService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param mdcMessageApproval
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "mdc娑堟伅纭琛�-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "mdc娑堟伅纭琛�-鍒嗛〉鍒楄〃鏌ヨ", notes = "mdc娑堟伅纭琛�-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(MdcMessageApproval mdcMessageApproval,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+        QueryWrapper<MdcMessageApproval> queryWrapper = QueryGenerator.initQueryWrapper(mdcMessageApproval, req.getParameterMap());
+        Page<MdcMessageApproval> page = new Page<MdcMessageApproval>(pageNo, pageSize);
+        IPage<MdcMessageApproval> pageList = mdcMessageApprovalService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param mdcMessageApproval
+     * @return
+     */
+    @AutoLog(value = "mdc娑堟伅纭琛�-娣诲姞")
+    @ApiOperation(value = "mdc娑堟伅纭琛�-娣诲姞", notes = "mdc娑堟伅纭琛�-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody MdcMessageApproval mdcMessageApproval) {
+        mdcMessageApprovalService.save(mdcMessageApproval);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+    /**
+     * 缂栬緫
+     *
+     * @param mdcMessageApproval
+     * @return
+     */
+    @AutoLog(value = "mdc娑堟伅纭琛�-缂栬緫")
+    @ApiOperation(value = "mdc娑堟伅纭琛�-缂栬緫", notes = "mdc娑堟伅纭琛�-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody MdcMessageApproval mdcMessageApproval) {
+        mdcMessageApprovalService.updateById(mdcMessageApproval);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "mdc娑堟伅纭琛�-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "mdc娑堟伅纭琛�-閫氳繃id鍒犻櫎", notes = "mdc娑堟伅纭琛�-閫氳繃id鍒犻櫎")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        mdcMessageApprovalService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "mdc娑堟伅纭琛�-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "mdc娑堟伅纭琛�-鎵归噺鍒犻櫎", notes = "mdc娑堟伅纭琛�-鎵归噺鍒犻櫎")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.mdcMessageApprovalService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "mdc娑堟伅纭琛�-閫氳繃id鏌ヨ")
+    @ApiOperation(value = "mdc娑堟伅纭琛�-閫氳繃id鏌ヨ", notes = "mdc娑堟伅纭琛�-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        MdcMessageApproval mdcMessageApproval = mdcMessageApprovalService.getById(id);
+        return Result.OK(mdcMessageApproval);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param mdcMessageApproval
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, MdcMessageApproval mdcMessageApproval) {
+        return super.exportXls(request, mdcMessageApproval, MdcMessageApproval.class, "mdc娑堟伅纭琛�");
+    }
+
+    /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, MdcMessageApproval.class);
+    }
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMessageApproval.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMessageApproval.java
new file mode 100644
index 0000000..c76b286
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMessageApproval.java
@@ -0,0 +1,85 @@
+package org.jeecg.modules.mdc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+/**
+ * @Description: mdc娑堟伅纭琛�
+ * @Author: Lius
+ * @Date: 2024-03-06
+ * @Version: V1.0
+ */
+@Data
+@TableName("mdc_message_approval")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "mdc_message_approval瀵硅薄", description = "mdc娑堟伅纭琛�")
+public class MdcMessageApproval extends JeecgEntity implements Serializable {
+
+    private static final long serialVersionUID = 3826726426360323366L;
+
+    /**
+     * 璁惧缂栫爜
+     */
+    @Excel(name = "璁惧缂栫爜", width = 15)
+    @ApiModelProperty(value = "璁惧缂栫爜")
+    private String equipmentId;
+    /**
+     * 鏍囬
+     */
+    @Excel(name = "鏍囬", width = 15)
+    @ApiModelProperty(value = "鏍囬")
+    private String titile;
+    /**
+     * 鍐呭
+     */
+    @Excel(name = "鍐呭", width = 15)
+    @ApiModelProperty(value = "鍐呭")
+    private String msgContent;
+    /**
+     * 澶勭悊浜篿ds
+     */
+    @ApiModelProperty(value = "澶勭悊浜篿ds")
+    private String senderIds;
+    /**
+     * 澶勭悊浜哄鍚�
+     */
+    @Excel(name = "澶勭悊浜哄鍚�", width = 15)
+    @ApiModelProperty(value = "澶勭悊浜哄鍚�")
+    private String senderNames;
+    /**
+     * 娑堟伅鐘舵�侊紙0寰呭鐞嗭紝1寰呯‘璁�, 2宸茬‘璁わ紝3宸叉嫆缁濓級
+     */
+    @Excel(name = "娑堟伅鐘舵�侊紙0寰呭鐞嗭紝1寰呯‘璁�, 2宸茬‘璁わ紝3宸叉嫆缁濓級", width = 15)
+    @ApiModelProperty(value = "娑堟伅鐘舵�侊紙0寰呭鐞嗭紝1寰呯‘璁�, 2宸茬‘璁わ紝3宸叉嫆缁濓級")
+    @Dict(dicCode = "mdcMsgStatus")
+    private String msgStatus;
+    /**
+     * 娑堟伅纭浜篿ds
+     */
+    @Excel(name = "娑堟伅纭浜篿ds", width = 15)
+    @ApiModelProperty(value = "娑堟伅纭浜篿ds")
+    private String approverIds;
+    /**
+     * 娑堟伅纭浜哄鍚�
+     */
+    @Excel(name = "娑堟伅纭浜哄鍚�", width = 15)
+    @ApiModelProperty(value = "娑堟伅纭浜哄鍚�")
+    private String approverNames;
+    /**
+     * 涓婃姤鍐呭
+     */
+    @Excel(name = "涓婃姤鍐呭", width = 15)
+    @ApiModelProperty(value = "涓婃姤鍐呭")
+    private String reportContent;
+
+}
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
index 8acc779..793eb81 100644
--- 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
@@ -6,9 +6,12 @@
 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.constant.MdcConstant;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
+import org.jeecg.modules.mdc.entity.MdcMessageApproval;
 import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService;
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcMessageApprovalService;
 import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
 import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.mdc.util.ThrowableUtil;
@@ -16,8 +19,11 @@
 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.entity.SysAnnouncement;
+import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.quartz.*;
 
 import javax.annotation.Resource;
@@ -26,6 +32,7 @@
 import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author Lius
@@ -61,6 +68,12 @@
     @Resource
     private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
 
+    @Resource
+    private IMdcMessageApprovalService mdcMessageApprovalService;
+
+    @Resource
+    private ISysUserService sysUserService;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         SysQuartzLog quartzLog = new SysQuartzLog();
@@ -73,7 +86,7 @@
         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<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "3140045"));
             // 鑾峰彇鍒╃敤鐜囧垽瀹氬ぉ鏁�
             List<DictModel> dictModelList1 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_JUDGE);
             Integer equipmentRateJudge = 5;
@@ -94,28 +107,53 @@
             }
             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.setTitle("璁惧鍒╃敤鐜囨姤璀︼紒");
-                        messageDTO.setCategory("棰勮娑堟伅");
-                        messageDTO.setFromUser("admin");
-                        messageDTO.setToUser("admin");
-                        messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囧埄鐢ㄧ巼浣庝簬姝e父鍊兼姤璀︼紒");
-                        sysBaseApi.sendSysAnnouncement(messageDTO);
+                // step.1 鏌ヨ娑堟伅涓璁惧鎶ヨ鏃堕棿
+                SysAnnouncement sysAnnouncement = sysAnnouncementService.findLastMessage("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囧埄鐢ㄧ巼浣庝簬姝e父鍊兼姤璀︼紒");
+                boolean flag1 = true;
+                if (sysAnnouncement != null) {
+                    Date createTime = sysAnnouncement.getCreateTime();
+                    Date msgDate = DateUtils.toDate(DateUtils.format(createTime, DateUtils.STR_DATE), DateUtils.STR_DATE);
+                    Date now = DateUtils.toDate(LocalDate.now().toString(), DateUtils.STR_DATE);
+                    Integer days = DateUtils.getDays(msgDate, now);
+                    if (days < equipmentRateJudge) {
+                        flag1 = false;
                     }
                 }
-                // 鍒ゆ柇璁惧鐘舵��
+                if (flag1) {
+                    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.setTitle("璁惧鍒╃敤鐜囨姤璀︼紒");
+                            messageDTO.setCategory("棰勮娑堟伅");
+                            messageDTO.setFromUser("admin");
+                            messageDTO.setToUser("admin");
+                            messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囧埄鐢ㄧ巼浣庝簬姝e父鍊兼姤璀︼紒");
+                            sysBaseApi.sendSysAnnouncement(messageDTO);
+                        }
+                    }
+                }
+
+                // 鍒ゆ柇璁惧鐘舵�侀暱鏃堕棿鏃犲彉鍖栧鎵逛汉
+                SysAnnouncement sysAnnouncement1 = sysAnnouncementService.findLastMessage("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囩姸鎬侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                if (sysAnnouncement1 != null) {
+                    Date createTime = sysAnnouncement1.getCreateTime();
+                    Date msgDate = DateUtils.toDate(DateUtils.format(createTime, DateUtils.STR_DATE), DateUtils.STR_DATE);
+                    Date now = DateUtils.toDate(LocalDate.now().toString(), DateUtils.STR_DATE);
+                    Integer days = DateUtils.getDays(msgDate, now);
+                    if (days < equipmentStatusJudge) {
+                        continue;
+                    }
+                }
                 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) {
@@ -128,13 +166,46 @@
                     }
                     if (flag) {
                         // 涓婃姤
-                        MessageDTO messageDTO = new MessageDTO();
-                        messageDTO.setTitle("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
-                        messageDTO.setCategory("棰勮娑堟伅");
-                        messageDTO.setFromUser("admin");
-                        messageDTO.setToUser("admin");
-                        messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囩姸鎬侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
-                        sysBaseApi.sendSysAnnouncement(messageDTO);
+                        // 鏌ヨ璁惧绠$悊鍛�
+                        List<SysUser> adminList = sysUserService.getEquipmentAdmin(MdcConstant.MDC_EQUIPMENT_MANAGER, mdcEquipment.getEquipmentId());
+                        // 鏌ヨ璁惧瓒呯骇绠$悊鍛�
+                        List<SysUser> superList = sysUserService.getEquipmentAdmin(MdcConstant.MDC_EQUIPMENT_SUPER_MANAGER, mdcEquipment.getEquipmentId());
+                        if (adminList != null && !adminList.isEmpty()) {
+                            for (SysUser sysUser : adminList) {
+                                MessageDTO messageDTO = new MessageDTO();
+                                messageDTO.setTitle("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                                messageDTO.setCategory("棰勮娑堟伅");
+                                messageDTO.setFromUser("admin");
+                                messageDTO.setToUser(sysUser.getUsername());
+                                messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囩姸鎬侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                                sysBaseApi.sendSysAnnouncement(messageDTO);
+                            }
+                        } else {
+                            MessageDTO messageDTO = new MessageDTO();
+                            messageDTO.setTitle("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                            messageDTO.setCategory("棰勮娑堟伅");
+                            messageDTO.setFromUser("admin");
+                            messageDTO.setToUser("admin");
+                            messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囩姸鎬侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                            sysBaseApi.sendSysAnnouncement(messageDTO);
+                        }
+
+                        if (adminList != null && !adminList.isEmpty() && superList != null && !superList.isEmpty()) {
+                            MdcMessageApproval mdcMessageApproval = new MdcMessageApproval();
+                            mdcMessageApproval.setEquipmentId(mdcEquipment.getEquipmentId());
+                            mdcMessageApproval.setTitile("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                            mdcMessageApproval.setMsgContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囩姸鎬侀暱鏈熸棤鍙樺寲鎶ヨ锛�");
+                            List<String> senderIdList = adminList.stream().map(SysUser::getId).collect(Collectors.toList());
+                            mdcMessageApproval.setSenderIds(String.join(",", senderIdList));
+                            List<String> senderNameList = adminList.stream().map(SysUser::getRealname).collect(Collectors.toList());
+                            mdcMessageApproval.setSenderNames(String.join(",", senderNameList));
+                            List<String> superIdList = superList.stream().map(SysUser::getId).collect(Collectors.toList());
+                            mdcMessageApproval.setApproverIds(String.join(",", superIdList));
+                            List<String> superNameList = superList.stream().map(SysUser::getRealname).collect(Collectors.toList());
+                            mdcMessageApproval.setApproverNames(String.join(",", superNameList));
+                            mdcMessageApproval.setMsgStatus(MdcConstant.MSG_STATUS_0);
+                            mdcMessageApprovalService.save(mdcMessageApproval);
+                        }
                     }
                 }
             }
@@ -143,7 +214,7 @@
             quartzLog.setIsSuccess(-1);
             quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
             // 鍙戦�佹秷鎭�氱煡
-            sysAnnouncementService.jobSendMessage("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ浠诲姟澶辫触锛�", quartzLog.getExceptionDetail());
+            sysAnnouncementService.jobSendMessage("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ浠诲姟", quartzLog.getExceptionDetail());
         }
         long endTime = System.currentTimeMillis();
         quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java
new file mode 100644
index 0000000..016b062
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java
@@ -0,0 +1,151 @@
+package org.jeecg.modules.mdc.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+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.common.util.DateUtils;
+import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
+import org.jeecg.modules.mdc.entity.MdcEquipment;
+import org.jeecg.modules.mdc.entity.MdcOverrunAlarm;
+import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcOverrunAlarmService;
+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.util.Date;
+import java.util.List;
+
+/**
+ * @author Lius
+ * @Description: 鐩戞帶璁惧杩愯杞�熶笌NC绋嬪簭璁惧畾杞�熷姣�
+ * @date 2024/3/4 16:14
+ */
+@PersistJobDataAfterExecution
+@DisallowConcurrentExecution
+@Slf4j
+public class RunningMonitoringSpeedJob implements Job {
+
+    @Resource
+    private IQuartzJobService quartzJobService;
+
+    @Resource
+    private ISysQuartzLogService sysQuartzLogService;
+
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    @Resource
+    private ISysDictService sysDictService;
+
+    @Resource
+    private ISysBaseAPI sysBaseApi;
+
+    @Resource
+    private IMdcOverrunAlarmService mdcOverrunAlarmService;
+
+    @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("鐩戞帶璁惧杩愯杞�熶笌NC绋嬪簭璁惧畾杞�熷姣� RunningMonitoringSpeedJob start!  鏃堕棿:" + DateUtils.now());
+        long startTime = System.currentTimeMillis();
+        try {
+            List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().ne(MdcEquipment::getDriveType, "ZUOLAN"));
+
+            // 鑾峰彇瀛楀吀鏁版嵁
+            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 : mdcEquipmentList) {
+                String saveTableName = mdcEquipment.getSaveTableName();
+                MdcEquipmentDto mdcEquipmentDto = new MdcEquipmentDto();
+                try {
+                    //鏌ヨ鍗曡〃鏁版嵁
+                    mdcEquipmentDto = mdcEquipmentService.getWorkLineLast(saveTableName);
+
+                } catch (Exception e) {
+                    log.error("鏌ヨ鍗曡〃鏁版嵁澶辫触!", e);
+                }
+                if (StringUtils.isNotBlank(mdcEquipmentDto.getSpindlespeed()) && StringUtils.isNotBlank(mdcEquipmentDto.getActualspindlespeed())) {
+                    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());
+
+                    MdcOverrunAlarm mdcOverrunAlarm = new MdcOverrunAlarm();
+                    mdcOverrunAlarm.setEquipmentId(mdcEquipment.getEquipmentId());
+                    mdcOverrunAlarm.setSetValue(spindlespeed.toString());
+                    mdcOverrunAlarm.setRealValue(actualspindlespeed.toString());
+                    if (range.equals(0)) {
+                        if (spindlespeed > actualspindlespeed) {
+                            // 璁惧畾鍊煎ぇ浜庡疄闄呭��   浣�
+                            messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熶綆鎶ヨ锛�");
+                            sysBaseApi.sendSysAnnouncement(messageDTO);
+                            mdcOverrunAlarm.setAlarmContent("璁惧杩愯杞�熸瘮NC浠g爜璁惧畾鍊间綆鎶ヨ");
+                            mdcOverrunAlarmService.save(mdcOverrunAlarm);
+                        } else if (spindlespeed < actualspindlespeed) {
+                            // 璁惧畾鍊煎皬浜庡疄闄呭��   楂�
+                            messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熼珮鎶ヨ锛�");
+                            sysBaseApi.sendSysAnnouncement(messageDTO);
+                            mdcOverrunAlarm.setAlarmContent("璁惧杩愯杞�熸瘮NC浠g爜璁惧畾鍊奸珮鎶ヨ");
+                            mdcOverrunAlarmService.save(mdcOverrunAlarm);
+                        }
+                    } else {
+                        int max = spindlespeed + spindlespeed * (range / 100);
+                        int min = spindlespeed - spindlespeed * (range / 100);
+                        if (actualspindlespeed > max || actualspindlespeed < min) {
+                            if (spindlespeed > actualspindlespeed) {
+                                // 璁惧畾鍊煎ぇ浜庡疄闄呭��   浣�
+                                messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熶綆鎶ヨ锛�");
+                                sysBaseApi.sendSysAnnouncement(messageDTO);
+                                mdcOverrunAlarm.setAlarmContent("璁惧杩愯杞�熸瘮NC浠g爜璁惧畾鍊间綆鎶ヨ");
+                                mdcOverrunAlarmService.save(mdcOverrunAlarm);
+                            } else if (spindlespeed < actualspindlespeed) {
+                                // 璁惧畾鍊煎皬浜庡疄闄呭��   楂�
+                                messageDTO.setContent("璁惧缂栧彿涓� [" + mdcEquipment.getEquipmentId() + "] 鐨勮澶囪繍琛岃浆閫熼珮鎶ヨ锛�");
+                                sysBaseApi.sendSysAnnouncement(messageDTO);
+                                mdcOverrunAlarm.setAlarmContent("璁惧杩愯杞�熸瘮NC浠g爜璁惧畾鍊奸珮鎶ヨ");
+                                mdcOverrunAlarmService.save(mdcOverrunAlarm);
+                            }
+                        }
+                    }
+                }
+            }
+            quartzLog.setIsSuccess(0);
+        } catch (Exception e) {
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("鐩戞帶璁惧杩愯杞�熶笌NC绋嬪簭璁惧畾杞�熷姣旓紒", 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/MdcEquipmentMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
index 80a03f4..f9a3f07 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
@@ -8,6 +8,7 @@
 import org.apache.ibatis.annotations.Select;
 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;
@@ -107,4 +108,12 @@
      * @return
      */
     List<MdcEquipment> exportXlsList(@Param("mdcEquipment") MdcEquipmentVo mdcEquipment);
+
+    /**
+     * 鏌ヨ鍗曡〃鏁版嵁
+     * @param tableName
+     * @return
+     */
+    @InterceptorIgnore(tenantLine = "1")
+    MdcEquipmentDto findWorkLineLast(@Param("tableName") String tableName);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMessageApprovalMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMessageApprovalMapper.java
new file mode 100644
index 0000000..00ba35e
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMessageApprovalMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.mdc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.mdc.entity.MdcMessageApproval;
+
+/**
+ * @Description: mdc娑堟伅纭琛�
+ * @Author: Lius
+ * @Date:   2024-03-06
+ * @Version: V1.0
+ */
+public interface MdcMessageApprovalMapper extends BaseMapper<MdcMessageApproval> {
+
+}
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 b879be2..4e0ace6 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
@@ -281,4 +281,9 @@
         order by t1.sort_no
     </select>
 
+    <!--鏌ヨ鍗曡〃鏁版嵁-->
+    <select id="findWorkLineLast" 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/MdcMessageApprovalMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMessageApprovalMapper.xml
new file mode 100644
index 0000000..39169e2
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMessageApprovalMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.mdc.mapper.MdcMessageApprovalMapper">
+
+</mapper>
\ No newline at end of file
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 7230bce..94628cd 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
@@ -195,4 +195,11 @@
      * @return
      */
     List<MdcEquipmentTree> loadTreeListByProductionIds(String ids);
+
+    /**
+     * 鏌ヨ鍗曡〃鏁版嵁
+     * @param tableName
+     * @return
+     */
+    MdcEquipmentDto getWorkLineLast(String tableName);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMessageApprovalService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMessageApprovalService.java
new file mode 100644
index 0000000..71dbfb7
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMessageApprovalService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.mdc.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.mdc.entity.MdcMessageApproval;
+
+/**
+ * @Description: mdc娑堟伅纭琛�
+ * @Author: Lius
+ * @Date: 2024-03-06
+ * @Version: V1.0
+ */
+public interface IMdcMessageApprovalService extends IService<MdcMessageApproval> {
+
+}
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 85dd8df..83817f6 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
@@ -759,8 +759,13 @@
                 Map<String, Object> param = new HashMap<>();
                 param.put("columns", builder.toString());
                 param.put("tableName", saveTableName);
-                Map<String, Object> map = this.baseMapper.getWorkLineLast(param);
-                if (map != null) {
+                Map<String, Object> map = new HashMap<>();
+                try {
+                    map = this.baseMapper.getWorkLineLast(param);
+                } catch (Exception e) {
+                    log.error("鏌ヨ鍗曡〃鏁版嵁鍑哄樊锛�", e);
+                }
+                if (!map.isEmpty()) {
                     for (MdcEquipmentThreshold mdcEquipmentThreshold : mdcEquipmentThresholdList) {
                         Integer actualValue = Integer.valueOf(map.get(mdcEquipmentThreshold.getEnglishName()).toString());
                         Integer max = mdcEquipmentThreshold.getMaxThreshold();
@@ -837,4 +842,14 @@
         return treeList;
     }
 
+    /**
+     * 鏌ヨ鍗曡〃鏁版嵁
+     * @param tableName
+     * @return
+     */
+    @Override
+    public MdcEquipmentDto getWorkLineLast(String tableName) {
+        return this.baseMapper.findWorkLineLast(tableName);
+    }
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMessageApprovalServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMessageApprovalServiceImpl.java
new file mode 100644
index 0000000..0beff04
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMessageApprovalServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.mdc.entity.MdcMessageApproval;
+import org.jeecg.modules.mdc.mapper.MdcMessageApprovalMapper;
+import org.jeecg.modules.mdc.service.IMdcMessageApprovalService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: mdc娑堟伅纭琛�
+ * @Author: Lius
+ * @Date: 2024-03-06
+ * @Version: V1.0
+ */
+@Service
+public class MdcMessageApprovalServiceImpl extends ServiceImpl<MdcMessageApprovalMapper, MdcMessageApproval> implements IMdcMessageApprovalService {
+
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
index 4c2aad7..2ad2698 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
@@ -1,13 +1,13 @@
 package org.jeecg.modules.system.mapper;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.model.AnnouncementSendModel;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.List;
 
 /**
  * @Description: 鐢ㄦ埛閫氬憡闃呰鏍囪琛�
@@ -48,4 +48,9 @@
 	 * 鑾峰彇棣栭〉娑堟伅
 	 */
 	List<SysAnnouncementSend> getPrimaryInfo(@Param("userId") String userId,@Param("msgCategoryList")List<String> msgCategoryList);
+
+	/**
+	 * 鏍规嵁娑堟伅鍐呭鏌ヨ娑堟伅閫氱煡
+	 */
+    SysAnnouncement findLastMessage(@Param("messageContent") String messageContent);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
index cb3734c..7966336 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
@@ -178,4 +178,9 @@
 	 * 鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎
 	 */
 	List<String> getUserByRoleCode(@Param("roleCode") String roleCode);
+
+	/**
+	 * 鏍规嵁瑙掕壊缂栫爜鍜岃澶囩紪鍙锋煡璇㈢敤鎴�
+	 */
+    List<SysUser> getEquipmentAdmin(@Param("roleCode") String roleCode, @Param("equipmentId") String equipmentId);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
index 532dd8f..df2baa5 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
@@ -125,4 +125,8 @@
 			</if>
 	</select>
 
+    <select id="findLastMessage" resultType="org.jeecg.modules.system.entity.SysAnnouncement">
+		SELECT TOP 1 * FROM sys_announcement WHERE msg_content = #{messageContent} ORDER BY create_time DESC;
+	</select>
+
 </mapper>
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
index feef5b8..3e751a9 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
@@ -206,4 +206,15 @@
 		WHERE
 			sr.role_code = #{ roleCode }
 	</select>
+	<!--鏍规嵁瑙掕壊缂栫爜鍜岃澶囩紪鍙锋煡璇㈢敤鎴�-->
+    <select id="getEquipmentAdmin" resultType="org.jeecg.modules.system.entity.SysUser">
+		SELECT
+			t1.*
+		FROM
+			sys_user t1
+				LEFT JOIN sys_user_role t2 ON t1.id = t2.user_id
+				LEFT JOIN sys_role t3 ON t2.role_id = t3.id
+		WHERE
+			t3.role_code = #{roleCode} AND equipment_ids LIKE concat(concat('%',#{equipmentId}),'%')
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
index a9314bb..d08dfaf 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
@@ -67,4 +67,8 @@
     void jobSendMessage(String jobDescription, String exceptionDetail);
 
 
+    /**
+     * 鏍规嵁娑堟伅鍐呭鏌ヨ娑堟伅閫氱煡鏃堕棿
+     */
+    SysAnnouncement findLastMessage(String messageContent);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 0a4567f..751395e 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -318,4 +318,6 @@
 	public List<SysUser> getAllUsersByRoleId(String roleId);
 
 	List<String> getUserByRoleCode(String roleCode);
+
+	List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
index 783aa0c..427d0b4 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
@@ -251,4 +251,12 @@
 
 	}
 
+	/**
+	 * 鏍规嵁娑堟伅鍐呭鏌ヨ娑堟伅閫氱煡
+	 */
+	@Override
+	public SysAnnouncement findLastMessage(String messageContent) {
+		return sysAnnouncementSendMapper.findLastMessage(messageContent);
+	}
+
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index 4decd8a..106de85 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -705,4 +705,12 @@
 	public List<String> getUserByRoleCode(String roleCode) {
 		return this.baseMapper.getUserByRoleCode(roleCode);
 	}
+
+	/**
+	 * 鏍规嵁瑙掕壊缂栫爜鍜岃澶囩紪鍙锋煡璇㈢敤鎴�
+	 */
+	@Override
+	public List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId) {
+		return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId);
+	}
 }

--
Gitblit v1.9.3