ly 3 лет назад
Родитель
Сommit
2c127ce6f7
27 измененных файлов с 448 добавлено и 50 удалено
  1. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SendEmailThead.java
  2. 150 0
      master/src/main/java/com/ruoyi/common/thread/sems/SendMeasureEmailThead.java
  3. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecDevCcThread.java
  4. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecDevDtThread.java
  5. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecDevDzsbThread.java
  6. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecDevGlThread.java
  7. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecDevYlgdThread.java
  8. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecDevYlrqThread.java
  9. 1 1
      master/src/main/java/com/ruoyi/common/thread/sems/SpecOverLifeThead.java
  10. 1 2
      master/src/main/java/com/ruoyi/framework/task/TSpecdevAllTask.java
  11. 215 0
      master/src/main/java/com/ruoyi/framework/task/sems/MeasureThicknessTask.java
  12. 1 1
      master/src/main/java/com/ruoyi/project/listener/monthSemsApprove/CraftTaskCreateListener.java
  13. 1 1
      master/src/main/java/com/ruoyi/project/listener/monthSemsApprove/ElectricTaskCreateListener.java
  14. 1 1
      master/src/main/java/com/ruoyi/project/listener/monthSemsApprove/MechanicalTaskCreateListener.java
  15. 1 1
      master/src/main/java/com/ruoyi/project/listener/yearSemsApprove/ApproverTaskCreateListener.java
  16. 1 1
      master/src/main/java/com/ruoyi/project/listener/yearSemsApprove/AuditorTaskCreateListener.java
  17. 1 1
      master/src/main/java/com/ruoyi/project/listener/yearSemsApprove/InspectorTaskCreateListener.java
  18. 1 0
      master/src/main/java/com/ruoyi/project/sems/controller/TMeasureRecordController.java
  19. 21 18
      master/src/main/java/com/ruoyi/project/sems/controller/TMeasureThicknessController.java
  20. 0 2
      master/src/main/java/com/ruoyi/project/sems/controller/TSpecdevYlgdController.java
  21. 0 3
      master/src/main/java/com/ruoyi/project/sems/controller/TSpecdevYlrqController.java
  22. 7 7
      master/src/main/java/com/ruoyi/project/sems/domain/TMeasureThickness.java
  23. 4 1
      master/src/main/java/com/ruoyi/project/sems/mapper/TMeasureThicknessMapper.java
  24. 3 1
      master/src/main/java/com/ruoyi/project/sems/service/ITMeasureThicknessService.java
  25. 4 1
      master/src/main/java/com/ruoyi/project/sems/service/impl/TMeasureThicknessServiceImpl.java
  26. BIN
      master/src/main/resources/static/template/sems/thicknessData.xlsx
  27. 28 1
      ui/src/views/sems/thickness/index.vue

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SendEmailThead.java → master/src/main/java/com/ruoyi/common/thread/sems/SendEmailThead.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 
 import com.ruoyi.common.sendEmail.IMailService;

+ 150 - 0
master/src/main/java/com/ruoyi/common/thread/sems/SendMeasureEmailThead.java

@@ -0,0 +1,150 @@
+package com.ruoyi.common.thread.sems;
+
+
+import com.ruoyi.common.sendEmail.IMailService;
+import com.ruoyi.project.sems.domain.TApprove;
+
+import java.util.Date;
+
+public class SendMeasureEmailThead implements Runnable {
+
+    private IMailService mailService;
+
+    private String email;
+    private String apNo;
+
+    private String username;
+    private String usernameEN;
+    private TApprove tApprove;
+    private String sendType;
+
+    public SendMeasureEmailThead(String email, String apNo, String username, String usernameEN, IMailService mailService, TApprove tApprove, String sendType) {
+        this.email = email;
+        this.apNo = apNo;
+        this.username = username;
+        this.usernameEN = usernameEN;
+        this.mailService = mailService;
+        this.tApprove = tApprove;
+        this.sendType = sendType;
+    }
+
+    /*
+    * 发送邮件
+    */
+    @Override
+    public void run() {
+        if (sendType.equals("year")) {
+            year();
+        }else if (sendType.equals("month")) {
+            month();
+        }
+    }
+
+    /*
+     * 发送年度邮件
+     */
+    public void year() {
+        String devType = null;
+        String devTypeEN = null;
+        switch (tApprove.getDevType().toString()) {
+            case "1":
+                devType = "压力容器";
+                devTypeEN = "Pressure Vessel";
+                break;
+            case "2":
+                devType = "压力管道";
+                devTypeEN = "Pressure Pipeline";
+                break;
+        }
+        String approveType = "生成" + devType + "年度检查报告";
+        String approveTypeEN = "Generate annual inspection report of " + devTypeEN;
+        //写html开始内容
+        String start = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title></title></head><body><div style=\"background-color:#ECECEC; padding: 35px;\">" +
+                "<table cellpadding=\"0\" align=\"center\"" +
+                "style=\"width: 600px; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;\">" +
+                "<tbody><tr><th valign=\"middle\" style=\"height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #42a3d3; background-color: #49bcff; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;\">" +
+                "<font face=\"微软雅黑\" size=\"5\" style=\"color: rgb(255, 255, 255); \">特种设备信息管理系统 </font><font face=\"微软雅黑\" size=\"3\" style=\"color: rgb(255, 255, 255); \">Special Equipment Management System (SEMS)</font></th></tr>";
+        //表html中间内容
+        String prime = "";
+        String center = "<tr><td><div style=\"padding:25px 35px 40px; background-color:#fff;\"><h2 style=\"margin: 5px 0px; \">" +
+                "<font color=\"#333333\" style=\"line-height: 20px; \"><font style=\"line-height: 22px; \" size=\"4\">" +
+                "亲爱的 username</font><br><font style=\"line-height: 22px; \" size=\"4\">" +
+                "Dear usernameEN</font></font></h2>" +
+                "<p>您有一个新的待办任务:<br>" +
+                "You have a new to-do task:<br>" +
+                "任务编号:<b>apNo</b><br>" +
+                "Task Number: <b>apNoEN</b><br>" +
+                "申请设备类型:<b>devType</b><br>" +
+                "Equipment Type: <b>devTypeEN</b><br>" +
+                "审批类型:<b>approveType</b><br>" +
+                "Application Category: <b>approveTypeEN</b><br>" +
+                "请登录<a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#/approve/pending\">特种设备信息管理系统</a>查看。<br>" +
+                "Please log in the <a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#/approve/pending\">SEMS</a> to handle it.</p>" +
+                "<p align=\"right\">date</p>" +
+                "<div style=\"width:700px;margin:0 auto;\">" +
+                "<div style=\"padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;\">" +
+                "<p>此为系统邮件,请勿回复<br>This e-Mail is an automatic reminder sent by SEMS, please do not reply</p>" +
+                "</div></div></div></td></tr>";
+        String one = center.replaceFirst("username", username);
+        String two = one.replaceFirst("usernameEN", usernameEN);
+        String three = two.replaceFirst("devType", devType);
+        String four = three.replaceFirst("apNo", apNo);
+        String five = four.replaceFirst("apNoEN", apNo);
+        String six = five.replaceFirst("devTypeEN", devTypeEN);
+        String seven = six.replaceFirst("approveType", approveType);
+        String eight = seven.replaceFirst("approveTypeEN", approveTypeEN);
+        String result = eight.replaceFirst("date", String.valueOf(new Date()));
+        prime = prime + result;
+        //写html结尾内容
+        String end = "</tbody></table></div></body></html>";
+        //拼接html
+        String html = start + prime + end;
+        mailService.sendHtmlMail(email, "特种设备:您有一个新的待办任务 SEMS:You have a new to-do task (" + apNo + ")", html);
+    }
+
+    /*
+     * 发送月度邮件
+     */
+    public void month() {
+        String approveType = "生成月度检查报告";
+        String approveTypeEN = "Generate monthly inspection report";
+        //写html开始内容
+        String start = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title></title></head><body><div style=\"background-color:#ECECEC; padding: 35px;\">" +
+                "<table cellpadding=\"0\" align=\"center\"" +
+                "style=\"width: 600px; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;\">" +
+                "<tbody><tr><th valign=\"middle\" style=\"height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #42a3d3; background-color: #49bcff; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;\">" +
+                "<font face=\"微软雅黑\" size=\"5\" style=\"color: rgb(255, 255, 255); \">特种设备信息管理系统 </font><font face=\"微软雅黑\" size=\"3\" style=\"color: rgb(255, 255, 255); \">Special Equipment Management System (SEMS)</font></th></tr>";
+        //表html中间内容
+        String prime = "";
+        String center = "<tr><td><div style=\"padding:25px 35px 40px; background-color:#fff;\"><h2 style=\"margin: 5px 0px; \">" +
+                "<font color=\"#333333\" style=\"line-height: 20px; \"><font style=\"line-height: 22px; \" size=\"4\">" +
+                "亲爱的 username</font><br><font style=\"line-height: 22px; \" size=\"4\">" +
+                "Dear usernameEN</font></font></h2>" +
+                "<p>您有一个新的待办任务:<br>" +
+                "You have a new to-do task:<br>" +
+                "任务编号:<b>apNo</b><br>" +
+                "Task Number: <b>apNoEN</b><br>" +
+                "审批类型:<b>approveType</b><br>" +
+                "Application Category: <b>approveTypeEN</b><br>" +
+                "请登录<a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#/approve/pending\">特种设备信息管理系统</a>查看。<br>" +
+                "Please log in the <a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#/approve/pending\">SEMS</a> to handle it.</p>" +
+                "<p align=\"right\">date</p>" +
+                "<div style=\"width:700px;margin:0 auto;\">" +
+                "<div style=\"padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;\">" +
+                "<p>此为系统邮件,请勿回复<br>This e-Mail is an automatic reminder sent by SEMS, please do not reply</p>" +
+                "</div></div></div></td></tr>";
+        String one = center.replaceFirst("username", username);
+        String two = one.replaceFirst("usernameEN", usernameEN);
+        String three = two.replaceFirst("apNo", apNo);
+        String four = three.replaceFirst("apNoEN", apNo);
+        String five = four.replaceFirst("approveType", approveType);
+        String six = five.replaceFirst("approveTypeEN", approveTypeEN);
+        String result = six.replaceFirst("date", String.valueOf(new Date()));
+        prime = prime + result;
+        //写html结尾内容
+        String end = "</tbody></table></div></body></html>";
+        //拼接html
+        String html = start + prime + end;
+        mailService.sendHtmlMail(email, "特种设备:您有一个新的待办任务 SEMS:You have a new to-do task (" + apNo + ")", html);
+    }
+}

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecDevCcThread.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecDevCcThread.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.StringUtils;

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecDevDtThread.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecDevDtThread.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.StringUtils;

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecDevDzsbThread.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecDevDzsbThread.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.StringUtils;

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecDevGlThread.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecDevGlThread.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.StringUtils;

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecDevYlgdThread.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecDevYlgdThread.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.StringUtils;

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecDevYlrqThread.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecDevYlrqThread.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.StringUtils;

+ 1 - 1
master/src/main/java/com/ruoyi/common/thread/SpecOverLifeThead.java → master/src/main/java/com/ruoyi/common/thread/sems/SpecOverLifeThead.java

@@ -1,4 +1,4 @@
-package com.ruoyi.common.thread;
+package com.ruoyi.common.thread.sems;
 
 
 import com.ruoyi.project.sems.domain.TSpecdevYlrq;

+ 1 - 2
master/src/main/java/com/ruoyi/framework/task/TSpecdevAllTask.java

@@ -2,7 +2,7 @@ package com.ruoyi.framework.task;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.*;
+import com.ruoyi.common.thread.sems.*;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.framework.web.controller.BaseController;
@@ -156,7 +156,6 @@ public class TSpecdevAllTask extends BaseController {
             List<TSpecdevGl> list = this.specdevGlService.list(new QueryWrapper<TSpecdevGl>()
                     .eq("del_flag", 0).eq("status", "1")
                     .in("plant_code", plants)
-
             );
             //获取动态处理预警级别
             TAlarmtype tAlarmtype = this.tAlarmtypeService.selectTAlarmtypeById(this.alarmtype);

+ 215 - 0
master/src/main/java/com/ruoyi/framework/task/sems/MeasureThicknessTask.java

@@ -0,0 +1,215 @@
+package com.ruoyi.framework.task.sems;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.sendEmail.IMailService;
+import com.ruoyi.common.thread.sems.*;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.project.sems.domain.*;
+import com.ruoyi.project.sems.service.*;
+import com.ruoyi.project.system.domain.*;
+import com.ruoyi.project.system.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 特种设备预警标识定时任务
+ */
+
+@Component("measureThicknessTask")
+public class MeasureThicknessTask extends BaseController {
+    //注入发送邮件的接口
+    @Autowired
+    private IMailService mailService;
+    //注入特种设备预警接口
+    @Autowired
+    private ITAlarmtypeService tAlarmtypeService;
+    //注入预警管理负责人接口
+    @Autowired
+    private ITAlarmPrincipalService tAlarmPrincipalService;
+    //注入用户接口
+    @Autowired
+    private ISysUserService sysUserService;
+    //注入报警记录管理的接口
+    @Autowired
+    private ITAlarmhistoryService alarmhistoryService;
+    @Autowired
+    private ISysPlantService sysPlantService;
+    @Autowired
+    private ITMeasureThicknessService measureThicknessService;
+    //系统基础配置
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    private final String stAlarmType = "定点测厚-短期腐蚀速率高于0.5mm/year";
+    private final String estAlarmType = "定点测厚-预估剩余寿命小于6年";
+    private final String glUrlSuffix = "sems/thickness";
+
+
+
+    private final Long alarmtype = 1080L;//特种设备预警ID
+
+    private final String contentFormat = "(装置名称,单元,单位内编号,侧厚部位)";
+
+    /**
+     * 检查预警标识状态
+     * 3天检查一次
+     */
+    public void checkWarnFlag() {
+        //获取动态处理预警级别
+        TAlarmtype tAlarmtype = this.tAlarmtypeService.selectTAlarmtypeById(this.alarmtype);
+        if (tAlarmtype.getIsOpen() == 0) {
+            logger.info("特种设备预警标识定时任务未启用");
+            return;
+        }
+
+        //获取需要发送邮件的人员信息
+        TAlarmPrincipal tAlarmPrincipal = new TAlarmPrincipal();
+        tAlarmPrincipal.setTypeId(this.alarmtype);
+        List<TAlarmPrincipal> userList = this.tAlarmPrincipalService.selectList(tAlarmPrincipal);
+        for (TAlarmPrincipal t : userList) {
+            SysUser user = this.sysUserService.selectUserByStaffId(t.getStaffid());
+            if (user != null) {
+                logger.info("发送人"+user.getNickName() + "--发送邮箱:" + user.getEmail());
+                t.setPrincipalName(user.getNickName());
+                t.setPrincipalEmail(user.getEmail());
+            }
+        }
+        List<TMeasureThickness> stList = new ArrayList<>();
+        List<TMeasureThickness> estList = new ArrayList<>();
+        //
+        for (TAlarmPrincipal o : userList) {
+            //根据装置权限获取数据
+            List<SysPlant> plantList = sysPlantService.selectSysPlantByDeptId(o.getDeptId());
+            logger.info("部门id"+o.getDeptId() + "--部门:" + plantList.toString());
+            List<String> plants = new ArrayList<>();
+            for (SysPlant s : plantList
+            ) {
+                plants.add(s.getName());
+            }
+            List<TMeasureThickness> list = this.measureThicknessService.list(new QueryWrapper<TMeasureThickness>()
+                    .eq("del_flag", 0)
+                    .in("plant_code", plants)
+            );
+            for (TMeasureThickness tMeasureThickness : list) {
+                if (tMeasureThickness.getStCorrosion() != null) {
+                    if (new BigDecimal(tMeasureThickness.getStCorrosion()).compareTo(new BigDecimal("0.5")) >= 0) { //速率大于0.5
+                        stList.add(tMeasureThickness);
+                    }
+                }
+                if (tMeasureThickness.getEstRemain() != null) {
+                    if (new BigDecimal(tMeasureThickness.getEstRemain()).compareTo(new BigDecimal("6")) <= 0) { //寿命小于6年
+                        estList.add(tMeasureThickness);
+                    }
+                }
+            }
+            sendEmailBySt(stList , o );
+            sendEmailByEst(estList , o );
+        }
+    }
+
+
+    private void sendEmailBySt(List<TMeasureThickness> stList, TAlarmPrincipal o) {
+        String str = "";
+        for (TMeasureThickness t : stList) {
+            str += "<br>" + t.getPlantCode() + "," + t.getUnitCode() + "," + t.getTagno() + "," + t.getPosition();
+        }
+        if (stList.size() > 0) {
+            this.sendEmail(o.getPrincipalName(), o.getPrincipalEmail(), this.stAlarmType, "0",
+                    this.contentFormat, str, this.glUrlSuffix);
+            insertHistory(o, "0", str, this.alarmtype + "", this.stAlarmType);
+        }
+    }
+
+    private void sendEmailByEst(List<TMeasureThickness> estList, TAlarmPrincipal o) {
+        String str = "";
+        for (TMeasureThickness t : estList) {
+            str += "<br>" + t.getPlantCode() + "," + t.getUnitCode() + "," + t.getTagno() + "," + t.getPosition();
+        }
+        if (estList.size() > 0) {
+            this.sendEmail(o.getPrincipalName(), o.getPrincipalEmail(), this.estAlarmType, "0",
+                    this.contentFormat, str, this.glUrlSuffix);
+            insertHistory(o, "0", str, this.alarmtype + "", this.estAlarmType);
+        }
+    }
+
+    /**
+     * 特种设备预警-邮件发送
+     *
+     * @param username       负责人姓名
+     * @param email          负责人邮箱
+     * @param alarmType      预警类型
+     * @param warningLevel   预警等级
+     * @param contenFormat   预警内容
+     * @param warningContent 预警内容详细
+     * @param urlSuffix      链接跳转对应路径
+     */
+    private void sendEmail(String username, String email, String alarmType, String warningLevel, String contenFormat, String warningContent, String urlSuffix) {
+        //写html开始内容
+        String start = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title></title></head><body><div style=\"background-color:#ECECEC; padding: 35px;\">" +
+                "<table cellpadding=\"0\" align=\"center\"" +
+                "style=\"width: 600px; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;\">" +
+                "<tbody><tr><th valign=\"middle\" style=\"height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #42a3d3; background-color: #49bcff; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;\">" +
+                "<font face=\"微软雅黑\" size=\"5\" style=\"color: rgb(255, 255, 255); \">化工装置管理系统 </font><font face=\"微软雅黑\" size=\"3\" style=\"color: rgb(255, 255, 255); \">Chemical Plant Management System(CPMS)</font></th></tr>";
+        //写html结尾内容
+        String end = "</tbody></table></div></body></html>";
+        //表html中间内容
+        String prime = "";
+        String firstcenter = "<tr><td><div style=\"padding:25px 35px 40px; background-color:#fff;\"><h2 style=\"margin: 5px 0px; \">" +
+                "<font color=\"#333333\" style=\"line-height: 20px; \"><font style=\"line-height: 22px; \" size=\"4\">" +
+                "亲爱的 username</font><br><font style=\"line-height: 22px; \" size=\"4\">" +
+                "<p>您有一条预警信息:<br>" +
+                "预警类型:<b>alarmType</b><br>" +
+                "预警等级:<b>warningLevel</b><br>" +
+                "预警内容contenFormat:<b>warningContent</b><br>" +
+                "请前往<a href=\"requestJumpPath/urlSuffix\">alarmType</a>查看。<br>" +
+                "<p align=\"right\">date</p>" +
+                "<div style=\"width:700px;margin:0 auto;\">" +
+                "<div style=\"padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;\">" +
+                "<p>此为系统邮件,请勿回复<br>This e-Mail is an automatic reminder sent by CPMS, please do not reply</p>" +
+                "</div></div></div></td></tr>";
+        String one = firstcenter.replaceFirst("username", username);
+        String two = one.replaceFirst("alarmType", alarmType);
+        String three = two.replaceFirst("warningLevel", warningLevel);
+        String four = three.replaceFirst("contenFormat", contenFormat);
+        String five = four.replaceFirst("warningContent", warningContent);
+        String six = five.replaceFirst("urlSuffix", urlSuffix);
+        String seven = six.replaceFirst("alarmType", alarmType);
+        String eight = seven.replace("requestJumpPath", this.ruoyiConfig.getRequestJumpPath());
+        String result = eight.replaceFirst("date", String.valueOf(new Date()));
+        prime = prime + result;
+        //拼接html
+        String html = start + prime + end;
+        this.mailService.sendHtmlMail(email, "CPMS:您有一条预警信息", html);
+    }
+
+    /**
+     * 预警记录管理新增
+     */
+    public void insertHistory(TAlarmPrincipal a, String warningLevel, String warningContent, String typeId, String alarmType) {
+        //预警记录管理新增
+        TAlarmhistory alarmhistory = new TAlarmhistory();
+        alarmhistory.setPlantCode(a.getPlantCode());
+        alarmhistory.setTableName(alarmType);
+        alarmhistory.setStaffid(a.getStaffid());
+        alarmhistory.setDeptId(a.getDeptId());
+        alarmhistory.setTypeId(Long.parseLong(typeId));
+        alarmhistory.setAlarmLevel(warningLevel);
+        alarmhistory.setAlarmContent(StringUtils.remove(warningContent, "<br>"));
+        String[] content = StringUtils.remove(warningContent, "<br>").split(";");
+        if (content.length == 0) {
+            alarmhistory.setAlarmNum(Long.parseLong(String.valueOf("1")));
+        } else {
+            alarmhistory.setAlarmNum(Long.parseLong(String.valueOf(content.length)));
+        }
+        alarmhistory.setSendTime(new Date());
+        alarmhistoryService.insertTAlarmhistory(alarmhistory);
+    }
+}

+ 1 - 1
master/src/main/java/com/ruoyi/project/listener/monthSemsApprove/CraftTaskCreateListener.java

@@ -6,7 +6,7 @@ import com.github.stuxuhai.jpinyin.PinyinFormat;
 import com.github.stuxuhai.jpinyin.PinyinHelper;
 
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.SendEmailThead;
+import com.ruoyi.common.thread.sems.SendEmailThead;
 import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.service.ITApproveService;

+ 1 - 1
master/src/main/java/com/ruoyi/project/listener/monthSemsApprove/ElectricTaskCreateListener.java

@@ -6,7 +6,7 @@ import com.github.stuxuhai.jpinyin.PinyinFormat;
 import com.github.stuxuhai.jpinyin.PinyinHelper;
 
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.SendEmailThead;
+import com.ruoyi.common.thread.sems.SendEmailThead;
 import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.service.ITApproveService;

+ 1 - 1
master/src/main/java/com/ruoyi/project/listener/monthSemsApprove/MechanicalTaskCreateListener.java

@@ -6,7 +6,7 @@ import com.github.stuxuhai.jpinyin.PinyinFormat;
 import com.github.stuxuhai.jpinyin.PinyinHelper;
 
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.SendEmailThead;
+import com.ruoyi.common.thread.sems.SendEmailThead;
 import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.service.ITApproveService;

+ 1 - 1
master/src/main/java/com/ruoyi/project/listener/yearSemsApprove/ApproverTaskCreateListener.java

@@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.github.stuxuhai.jpinyin.PinyinFormat;
 import com.github.stuxuhai.jpinyin.PinyinHelper;
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.SendEmailThead;
+import com.ruoyi.common.thread.sems.SendEmailThead;
 import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.service.ITApproveService;

+ 1 - 1
master/src/main/java/com/ruoyi/project/listener/yearSemsApprove/AuditorTaskCreateListener.java

@@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.github.stuxuhai.jpinyin.PinyinFormat;
 import com.github.stuxuhai.jpinyin.PinyinHelper;
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.SendEmailThead;
+import com.ruoyi.common.thread.sems.SendEmailThead;
 import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.service.ITApproveService;

+ 1 - 1
master/src/main/java/com/ruoyi/project/listener/yearSemsApprove/InspectorTaskCreateListener.java

@@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.github.stuxuhai.jpinyin.PinyinFormat;
 import com.github.stuxuhai.jpinyin.PinyinHelper;
 import com.ruoyi.common.sendEmail.IMailService;
-import com.ruoyi.common.thread.SendEmailThead;
+import com.ruoyi.common.thread.sems.SendEmailThead;
 import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.service.ITApproveService;

+ 1 - 0
master/src/main/java/com/ruoyi/project/sems/controller/TMeasureRecordController.java

@@ -141,6 +141,7 @@ public class TMeasureRecordController extends BaseController {
                 if (st.compareTo(new BigDecimal("0")) <= 0) { //速率不可小于0
                     st = new BigDecimal("0.01");
                 }
+
                 thickness.setStCorrosion(String.valueOf(st));
                 //长期速率
                 TMeasureRecord r3 = list.get(list.size() - 1);

+ 21 - 18
master/src/main/java/com/ruoyi/project/sems/controller/TMeasureThicknessController.java

@@ -58,6 +58,7 @@ public class TMeasureThicknessController extends BaseController
     @Autowired
     private ITMeasureRecordService tMeasureRecordService;
 
+    private final Long alarmtype = 1080L;//特种设备预警ID
     /**
      * 查询定点测厚列表
      */
@@ -161,50 +162,52 @@ public class TMeasureThicknessController extends BaseController
                     } else if (j == 11) {
                         entity.setLtCorrosion(cellValue);//长期腐蚀速率(mm/year)
                     } else if (j == 12) {
+                        entity.setMeasureCycle(cellValue);//长期腐蚀速率(mm/year)
+                    } else if (j == 13) {
                         if (cellValue.length() > 3) {//下次测厚日期
                             entity.setNextWarnDate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
                         }
-                    }  else if (j == 13) {
-                        entity.setInspectionMethod(cellValue);//检测方法
                     }  else if (j == 14) {
+                        entity.setInspectionMethod(cellValue);//检测方法
+                    }  else if (j == 15) {
                         entity.setCorAllowance(cellValue);//腐蚀裕度(mm)
-                    } else if (j == 15) {
-                        entity.setOriginalThickness(cellValue);//原始壁厚(mm)
                     } else if (j == 16) {
-                        entity.setMedium(cellValue);//介质
+                        entity.setOriginalThickness(cellValue);//原始壁厚(mm)
                     } else if (j == 17) {
-                        entity.setPressure(cellValue);//压力(MPa)
+                        entity.setMedium(cellValue);//介质
                     } else if (j == 18) {
-                        entity.setSpecification(cellValue); //规格
+                        entity.setPressure(cellValue);//压力(MPa)
                     } else if (j == 19) {
-                        entity.setFlowRate(cellValue);//流速(m/s)
+                        entity.setSpecification(cellValue); //规格
                     } else if (j == 20) {
+                        entity.setFlowRate(cellValue);//流速(m/s)
+                    } else if (j == 21) {
                         //温度(℃)
                          entity.setTemperature(cellValue);
-                    } else if (j == 21) {
+                    } else if (j == 22) {
                         //腐蚀类型
                         entity.setCorrosionType(cellValue);
-                    } else if (j == 22) {
+                    } else if (j == 23) {
                         entity.setAnalysis(cellValue);//原因分析
-                    }else if (j == 23) {
+                    }else if (j == 24) {
                         entity.setMethodCause(cellValue);//治理方法及依据
-                    } else if (j == 24) {
+                    } else if (j == 25) {
                         entity.setEffectTracing(cellValue); //效果跟踪
-                    }else if (j == 25) {
-                        entity.setRaiser(cellValue);//提出人
                     }else if (j == 26) {
+                        entity.setRaiser(cellValue);//提出人
+                    }else if (j == 27) {
                         if (cellValue.length() > 3) {//提出时间
                             entity.setRaiserDate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
                         }
-                    }else if (j == 27) {
-                        entity.setOtherContent(cellValue);//其他检测方法内容
                     }else if (j == 28) {
-                        entity.setRecorder(cellValue);//记录人
+                        entity.setOtherContent(cellValue);//其他检测方法内容
                     }else if (j == 29) {
+                        entity.setRecorder(cellValue);//记录人
+                    }else if (j == 30) {
                         if (cellValue.length() > 3) {//记录时间
                             entity.setRecorderDate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
                         }
-                    }else if (j == 30) {
+                    }else if (j == 31) {
                         entity.setRemarks(cellValue);//备注
                     }
                 }

+ 0 - 2
master/src/main/java/com/ruoyi/project/sems/controller/TSpecdevYlgdController.java

@@ -9,8 +9,6 @@ import java.util.List;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ruoyi.common.thread.SpecDevYlgdThread;
-import com.ruoyi.common.thread.SpecDevYlrqThread;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.file.ExcelUtils;
 import com.ruoyi.project.sems.domain.*;

+ 0 - 3
master/src/main/java/com/ruoyi/project/sems/controller/TSpecdevYlrqController.java

@@ -10,13 +10,10 @@ import java.util.List;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ruoyi.common.thread.SpecDevYlrqThread;
-import com.ruoyi.common.thread.SpecOverLifeThead;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.file.ExcelUtils;
 import com.ruoyi.project.sems.domain.ParamData;
 import com.ruoyi.project.sems.domain.TSpecCheck;
-import com.ruoyi.project.sems.domain.TSpecdevYlgd;
 import com.ruoyi.project.sems.service.ITSpecCheckService;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysDictData;

+ 7 - 7
master/src/main/java/com/ruoyi/project/sems/domain/TMeasureThickness.java

@@ -3,6 +3,7 @@ package com.ruoyi.project.sems.domain;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
@@ -15,6 +16,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * @author ruoyi
  * @date 2021-07-07
  */
+@TableName("T_MEASURE_THICKNESS")
 public class TMeasureThickness extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -55,8 +57,6 @@ public class TMeasureThickness extends BaseEntity
     /** 部门编号 */
     private Long deptId;
 
-
-
     /** 检测编号 */
     @Excel(name = "检测编号")
     private String measureNo;
@@ -85,6 +85,9 @@ public class TMeasureThickness extends BaseEntity
     @Excel(name = "长期腐蚀速率(mm/year)")
     private String ltCorrosion;
 
+    /** 测厚周期 */
+    @Excel(name = "测厚周期(月)")
+    private String measureCycle;
     /**
      * 首次检测日期
      */
@@ -101,9 +104,7 @@ public class TMeasureThickness extends BaseEntity
     @Excel(name = "最近测厚日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date newMeasureDate;
 
-    /** 测厚周期 */
-    //@Excel(name = "测厚周期(year)")
-    private String measureCycle;
+
 
     /**
      * 下次检测日期
@@ -116,7 +117,7 @@ public class TMeasureThickness extends BaseEntity
     @Excel(name = "预估剩余寿命(year)")
     private String estRemain;
 
-    /** 提出时间 */
+    /** 时间 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
     @Excel(name = "下次测厚日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date nextWarnDate;
@@ -125,7 +126,6 @@ public class TMeasureThickness extends BaseEntity
     @Excel(name = "检测方法",dictType = "spec_measure_method")
     private String inspectionMethod;
 
-
     /** 腐蚀裕度 */
     @Excel(name = "腐蚀裕度(mm)")
     private String corAllowance;

+ 4 - 1
master/src/main/java/com/ruoyi/project/sems/mapper/TMeasureThicknessMapper.java

@@ -2,10 +2,13 @@ package com.ruoyi.project.sems.mapper;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.framework.aspectj.lang.annotation.DataScopePlant;
 import com.ruoyi.project.sems.domain.TMeasureRecord;
 import com.ruoyi.project.sems.domain.TMeasureThickness;
+import com.ruoyi.project.sems.domain.TSpecdevDt;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -14,7 +17,7 @@ import org.apache.ibatis.annotations.Param;
  * @author ruoyi
  * @date 2021-07-07
  */
-public interface TMeasureThicknessMapper {
+public interface TMeasureThicknessMapper extends BaseMapper<TMeasureThickness> {
     /**
      * 查询定点测厚
      *

+ 3 - 1
master/src/main/java/com/ruoyi/project/sems/service/ITMeasureThicknessService.java

@@ -2,7 +2,9 @@ package com.ruoyi.project.sems.service;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.project.sems.domain.TMeasureThickness;
+import com.ruoyi.project.sems.domain.TSpecdevCc;
 
 /**
  * 定点测厚Service接口
@@ -10,7 +12,7 @@ import com.ruoyi.project.sems.domain.TMeasureThickness;
  * @author ruoyi
  * @date 2021-07-07
  */
-public interface ITMeasureThicknessService {
+public interface ITMeasureThicknessService extends IService<TMeasureThickness> {
     /**
      * 查询定点测厚
      *

+ 4 - 1
master/src/main/java/com/ruoyi/project/sems/service/impl/TMeasureThicknessServiceImpl.java

@@ -1,7 +1,10 @@
 package com.ruoyi.project.sems.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.project.sems.domain.TMeasureThickness;
+import com.ruoyi.project.sems.domain.TSpecdevCc;
 import com.ruoyi.project.sems.mapper.TMeasureThicknessMapper;
+import com.ruoyi.project.sems.mapper.TSpecdevCcMapper;
 import com.ruoyi.project.sems.service.ITMeasureThicknessService;
 import org.springframework.stereotype.Service;
 
@@ -15,7 +18,7 @@ import java.util.List;
  * @date 2021-07-07
  */
 @Service("tMeasureThicknessService")
-public class TMeasureThicknessServiceImpl implements ITMeasureThicknessService
+public class TMeasureThicknessServiceImpl extends ServiceImpl<TMeasureThicknessMapper, TMeasureThickness> implements ITMeasureThicknessService
 {
     @Resource
     private TMeasureThicknessMapper tMeasureThicknessMapper;

BIN
master/src/main/resources/static/template/sems/thicknessData.xlsx


+ 28 - 1
ui/src/views/sems/thickness/index.vue

@@ -247,7 +247,12 @@
       <el-table-column :label="$t('最小允许壁厚(mm)')" align="center" prop="thicknessMin" :show-overflow-tooltip="true"/>
       <el-table-column :label="$t('短期腐蚀速率(mm/year)')" align="center" prop="stCorrosion" :show-overflow-tooltip="true"/>
       <el-table-column :label="$t('长期腐蚀速率(mm/year)')" align="center" prop="ltCorrosion" :show-overflow-tooltip="true"/>
-
+      <el-table-column
+        prop="measureCycle"
+        header-align="center"
+        align="center"
+        :label="$t('测厚周期(月)')">
+      </el-table-column>
       <el-table-column
         prop="firstMeasureDate"
         header-align="center"
@@ -542,6 +547,14 @@
         </el-form-item>
           </el-col>
         </el-row>
+
+        <el-row>
+          <el-col :span="12">
+            <el-form-item :label="$t('测厚周期(月)')" prop="remarks">
+              <el-input v-model="form.measureCycle" :placeholder="$t('请输入') + $t('测厚周期(月)')" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
         <el-form-item :label="$t('下次测厚日期')" prop="raiserDate">
           <el-date-picker clearable size="small" style="width: 200px"
                           v-model="form.nextWarnDate"
@@ -550,6 +563,8 @@
                           :placeholder="$t('请选择') + $t('下次测厚日期')">
           </el-date-picker>
         </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item :label="$t('备注')" prop="remarks">
           <el-input v-model="form.remarks" type="textarea" :placeholder="$t('请输入') + $t('内容')" />
         </el-form-item>
@@ -766,6 +781,18 @@
           </template>
           {{ dataForm.raiserDate }}
         </el-descriptions-item>
+        <el-descriptions-item span="1">
+          <template slot="label">
+            {{ $t('测厚周期(月)') }}
+          </template>
+          {{ dataForm.measureCycle }}
+        </el-descriptions-item>
+        <el-descriptions-item span="2">
+          <template slot="label">
+            {{ $t('下次测厚日期') }}
+          </template>
+          {{ dataForm.nextWarnDate }}
+        </el-descriptions-item>
         <el-descriptions-item span="3">
           <template slot="label">
             {{ $t('趋势图') }}