Jelajahi Sumber

上岗证/作业证书一览表 - 新增字段以及新增字段涉及的功能修改
上岗证/作业证书一览表 - 邮件到期提醒功能

wangggziwen 3 minggu lalu
induk
melakukan
08179187c1

+ 78 - 0
master/src/main/java/com/ruoyi/common/thread/training/WorklicenseCertificateDueMailThread.java

@@ -0,0 +1,78 @@
+package com.ruoyi.common.thread.training;
+
+import com.github.stuxuhai.jpinyin.PinyinException;
+import com.github.stuxuhai.jpinyin.PinyinFormat;
+import com.github.stuxuhai.jpinyin.PinyinHelper;
+import com.ruoyi.common.sendEmail.IMailService;
+import com.ruoyi.project.production.domain.TSaiApply;
+import com.ruoyi.project.system.domain.SysUser;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 上岗证/作业证书即将到期提醒邮件通知线程
+ *
+ */
+public class WorklicenseCertificateDueMailThread implements Runnable {
+
+    private IMailService mailService;
+    private String msg;
+    private SysUser sysUser;
+
+    public WorklicenseCertificateDueMailThread() {}
+
+    public WorklicenseCertificateDueMailThread(IMailService mailService, String msg, SysUser sysUser) {
+        this.mailService = mailService;
+        this.msg = msg;
+        this.sysUser = sysUser;
+    }
+
+    @Override
+    public void run() {
+        try {
+            this.sendMail();
+        } catch (PinyinException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void sendMail() throws PinyinException {
+        String nickName = sysUser.getNickName();
+        String nickNameEN = PinyinHelper.convertToPinyinString(nickName.trim(), " ", PinyinFormat.WITHOUT_TONE);
+        String userName = sysUser.getUserName();
+        String email = sysUser.getEmail();
+        String jumpUrl = "/production/training/worklicensecertificate";
+        //写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); \">CPMS管理系统 </font><font face=\"微软雅黑\" size=\"3\" style=\"color: rgb(255, 255, 255); \">CPMS System</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\">" +
+                "亲爱的nickName</font><br><font style=\"line-height: 22px; \" size=\"4\">" +
+                "Dear nickNameEN(userName)</font></font></h2>" +
+                "<p><b>msg</b><br>" +
+                "请登录<a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#jumpUrl\">CPMS管理系统</a>查看。<br>" +
+                "Please log in the <a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#jumpUrl\">CPMS</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 CPMS, please do not reply</p>" +
+                "</div></div></div></td></tr>";
+        String one = center.replaceFirst("nickName", nickName);
+        String two = one.replaceFirst("nickNameEN", nickNameEN);
+        String three = two.replaceFirst("userName", userName);
+        String four = three.replaceFirst("msg", msg);
+        String result = four.replaceFirst("date", String.valueOf(new Date())).replaceFirst("jumpUrl",jumpUrl).replaceFirst("jumpUrl",jumpUrl);
+        prime = prime + result;
+        //写html结尾内容
+        String end = "</tbody></table></div></body></html>";
+        //拼接html
+        String html = start + prime + end;
+        mailService.sendHtmlMail(email, "CPMS:上岗证/作业证书即将到期提醒", html);
+    }
+}

+ 185 - 0
master/src/main/java/com/ruoyi/framework/task/training/WorklicenseCertificateTask.java

@@ -0,0 +1,185 @@
+package com.ruoyi.framework.task.training;
+
+import com.ruoyi.common.sendEmail.IMailService;
+import com.ruoyi.common.thread.training.WorklicenseCertificateDueMailThread;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.project.plant.domain.TStaffmgr;
+import com.ruoyi.project.plant.mapper.TStaffmgrMapper;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.training.domain.TWorklicenseCertificate;
+import com.ruoyi.project.training.mapper.TWorklicenseCertificateMapper;
+import com.ruoyi.project.training.service.ITWorklicenseCertificateService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 上岗证/作业证书一览表 定时任务
+ */
+@Component("worklicenseCertificateTask")
+public class WorklicenseCertificateTask extends BaseController {
+
+    @Autowired
+    private TWorklicenseCertificateMapper worklicenseCertificateMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private TStaffmgrMapper staffmgrMapper;
+
+    @Autowired
+    private IMailService mailService;
+
+    /**
+     * 检查即将到期的上岗证/作业证书
+     *
+     * 条件:上岗证/作业证书到期时间在三个月内
+     * 处理:邮件提醒缺失人的班组组长、OTS培训专员
+     */
+    public void checkDueWorklicenseCertificate() {
+        TWorklicenseCertificate wlc = new TWorklicenseCertificate();
+        List<TWorklicenseCertificate> list = worklicenseCertificateMapper.selectTWorklicenseCertificateList(wlc);//上岗证/作业证书列表
+        Calendar currentDate = Calendar.getInstance();//当前日期
+        currentDate.setTime(new Date());
+        for (TWorklicenseCertificate tWorklicenseCertificate : list) {
+            //flag
+            boolean validityExpiring = false;
+            boolean pipevalidityExpiring = false;
+            boolean boilvalidityExpiring = false;
+            boolean hydreviewExpiring = false;
+            boolean crackingreviewExpiring = false;
+            boolean refrigerationreviewExpiring = false;
+            boolean foremannextreviewExpiring = false;
+            boolean waterreviewExpiring = false;
+            boolean energyreviewExpiring = false;
+            //条件判定使用的字段
+            Calendar validity = Calendar.getInstance();
+            Calendar pipevalidity = Calendar.getInstance();
+            Calendar boilvalidity = Calendar.getInstance();
+            Calendar hydreview = Calendar.getInstance();
+            Calendar crackingreview = Calendar.getInstance();
+            Calendar refrigerationreview = Calendar.getInstance();
+            Calendar foremannextreview = Calendar.getInstance();
+            Calendar waterreview = Calendar.getInstance();
+            Calendar energyreview = Calendar.getInstance();
+            Date validity1 = tWorklicenseCertificate.getValidity();
+            Date pipevalidity1 = tWorklicenseCertificate.getPipevalidity();
+            Date boilvalidity1 = tWorklicenseCertificate.getBoilvalidity();
+            Date hydnextreview = tWorklicenseCertificate.getHydnextreview();
+            Date crackingreview1 = tWorklicenseCertificate.getCrackingreview();
+            Date refrigerationview = tWorklicenseCertificate.getRefrigerationview();
+            Date foremannextreview1 = tWorklicenseCertificate.getForemannextreview();
+            Date waterreview1 = tWorklicenseCertificate.getWaterreview();
+            Date energyreview1 = tWorklicenseCertificate.getEnergyreview();
+            if (validity1 == null || pipevalidity1 == null || boilvalidity1 == null
+                    || hydnextreview == null || crackingreview1 == null || refrigerationview == null
+                    || foremannextreview1 == null || waterreview1 == null || energyreview1 == null) {//日期为空进行下一次循环
+                continue;
+            }
+            validity.setTime(validity1);//作业证书有效期
+            pipevalidity.setTime(pipevalidity1);//压力容器和管道证书有效期
+            boilvalidity.setTime(boilvalidity1);//锅炉证书有效期
+            hydreview.setTime(hydnextreview);//加氢工艺复审
+            crackingreview.setTime(crackingreview1);//裂化工艺复审
+            refrigerationreview.setTime(refrigerationview);//制冷与空调作业复审
+            foremannextreview.setTime(foremannextreview1);//班组长安全生产合格证下次复审
+            waterreview.setTime(waterreview1);//锅炉水质处理复审
+            energyreview.setTime(energyreview1);//锅炉能效复审
+            //判定条件减去三个月
+            validity.add(Calendar.MONTH , -3);
+            pipevalidity.add(Calendar.MONTH , -3);
+            boilvalidity.add(Calendar.MONTH , -3);
+            hydreview.add(Calendar.MONTH , -3);
+            crackingreview.add(Calendar.MONTH , -3);
+            refrigerationreview.add(Calendar.MONTH , -3);
+            foremannextreview.add(Calendar.MONTH , -3);
+            waterreview.add(Calendar.MONTH , -3);
+            energyreview.add(Calendar.MONTH , -3);
+            ArrayList<String> invalidList = new ArrayList<>();
+            //当前日期>判定条件减去三个月->即将到期
+            if (currentDate.compareTo(validity) > 0) {
+                validityExpiring = true;
+                invalidList.add("作业证书");
+            }
+            if (currentDate.compareTo(pipevalidity) > 0) {
+                pipevalidityExpiring = true;
+                invalidList.add("压力容器和管道证书");
+            }
+            if (currentDate.compareTo(boilvalidity) > 0) {
+                boilvalidityExpiring = true;
+                invalidList.add("锅炉证书");
+            }
+            if (currentDate.compareTo(hydreview) > 0) {
+                hydreviewExpiring = true;
+                invalidList.add("加氢工艺证书");
+            }
+            if (currentDate.compareTo(crackingreview) > 0) {
+                crackingreviewExpiring = true;
+                invalidList.add("裂化工艺证书");
+            }
+            if (currentDate.compareTo(refrigerationreview) > 0) {
+                refrigerationreviewExpiring = true;
+                invalidList.add("制冷与空调作业证书");
+            }
+            if (currentDate.compareTo(foremannextreview) > 0) {
+                foremannextreviewExpiring = true;
+                invalidList.add("班组长安全生产合格证");
+            }
+            if (currentDate.compareTo(waterreview) > 0) {
+                waterreviewExpiring = true;
+                invalidList.add("锅炉水质处理证书");
+            }
+            if (currentDate.compareTo(energyreview) > 0) {
+                energyreviewExpiring = true;
+                invalidList.add("锅炉能效证书");
+            }
+            //符合判定条件
+            if (validityExpiring || pipevalidityExpiring || boilvalidityExpiring || hydreviewExpiring || crackingreviewExpiring
+                    || refrigerationreviewExpiring || foremannextreviewExpiring ||waterreviewExpiring || energyreviewExpiring) {
+                //查询邮件提醒列表
+                List<TStaffmgr> alertList = new ArrayList<>();//提醒列表
+                String employeeid = tWorklicenseCertificate.getEmployeeid();
+                TStaffmgr staffmgr = staffmgrMapper.selectTStaffmgrByStaffId(employeeid);
+                TStaffmgr monitor = null;//缺失人的班组组长
+                List<TStaffmgr> otsList = null;//OTS培训专员
+                if (staffmgr != null) {
+                    monitor = staffmgrMapper.selectMonitor(staffmgr);
+                    otsList = staffmgrMapper.selectOtsList(staffmgr);
+                }
+                if (monitor != null) {
+                    alertList.add(monitor);
+                }
+                if (otsList != null) {
+                    for (TStaffmgr tStaffmgr : otsList) {
+                        alertList.add(tStaffmgr);
+                    }
+                }
+                //拼接提醒内容
+                StringBuilder msg = new StringBuilder();
+                msg.append(tWorklicenseCertificate.getName());
+                msg.append("的");
+                for (int i = 0; i < invalidList.size(); i++) {
+                    String s = invalidList.get(i);
+                    msg.append(s);
+                    if (i != invalidList.size() - 1) {
+                        msg.append("、");
+                    }
+                }
+                msg.append("即将到期,请注意。");
+                //邮件提醒
+                for (TStaffmgr tStaffmgr : alertList) {
+                    SysUser sysUser = sysUserMapper.selectUserByStaffId(tStaffmgr.getStaffid());
+                    WorklicenseCertificateDueMailThread mailThread = new WorklicenseCertificateDueMailThread(mailService, msg.toString(), sysUser);//邮件线程
+                    Thread thread = new Thread(mailThread);
+                    thread.start();
+                }
+            }
+        }
+    }
+}

+ 10 - 0
master/src/main/java/com/ruoyi/project/plant/mapper/TStaffmgrMapper.java

@@ -17,6 +17,16 @@ import java.util.Map;
  */
 public interface TStaffmgrMapper
 {
+    /**
+     * 获取当班班长
+     */
+    public TStaffmgr selectMonitor(TStaffmgr tStaffmgr);
+
+    /**
+     * 获取OTS培训专员
+     */
+    public List<TStaffmgr> selectOtsList(TStaffmgr tStaffmgr);
+
     /**
      * 获取SAI验证人列表
      */

+ 52 - 0
master/src/main/java/com/ruoyi/project/training/domain/TWorklicenseCertificate.java

@@ -179,11 +179,31 @@ public class TWorklicenseCertificate extends BaseEntity
     @Excel(name = "最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date waterdate;
 
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date watervalidity;
+
+    /** 复审 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "复审", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date waterreview;
+
     /** 最近培训日期 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
     @Excel(name = "最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date energydate;
 
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date energyvalidity;
+
+    /** 复审 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "复审", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date energyreview;
+
     /** 删除状态 */
     private Long delFlag;
 
@@ -606,6 +626,38 @@ public class TWorklicenseCertificate extends BaseEntity
         return deptId;
     }
 
+    public Date getWatervalidity() {
+        return watervalidity;
+    }
+
+    public void setWatervalidity(Date watervalidity) {
+        this.watervalidity = watervalidity;
+    }
+
+    public Date getWaterreview() {
+        return waterreview;
+    }
+
+    public void setWaterreview(Date waterreview) {
+        this.waterreview = waterreview;
+    }
+
+    public Date getEnergyvalidity() {
+        return energyvalidity;
+    }
+
+    public void setEnergyvalidity(Date energyvalidity) {
+        this.energyvalidity = energyvalidity;
+    }
+
+    public Date getEnergyreview() {
+        return energyreview;
+    }
+
+    public void setEnergyreview(Date energyreview) {
+        this.energyreview = energyreview;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 0 - 1
master/src/main/java/com/ruoyi/project/training/mapper/TWorklicenseCertificateMapper.java

@@ -26,7 +26,6 @@ public interface TWorklicenseCertificateMapper
      * @param tWorklicenseCertificate 上岗证/作业证书一览
      * @return 上岗证/作业证书一览集合
      */
-    @DataScope(deptAlias = "d")
     public List<TWorklicenseCertificate> selectTWorklicenseCertificateList(TWorklicenseCertificate tWorklicenseCertificate);
 
     /**

+ 13 - 0
master/src/main/resources/mybatis/plant/TStaffmgrMapper.xml

@@ -345,6 +345,19 @@
         where d.staffid = #{staffid} and d.del_flag = 0
     </select>
 
+    <select id="selectMonitor" parameterType="TStaffmgr" resultMap="TStaffmgrResult">
+        <include refid="selectTStaffmgrVo"/>
+        where d.dept_id = #{deptId}
+        and d.team = #{team}
+        and d.actualpost = '12'
+    </select>
+
+    <select id="selectOtsList" parameterType="TStaffmgr" resultMap="TStaffmgrResult">
+        <include refid="selectTStaffmgrVo"/>
+        where d.dept_id = #{deptId}
+        and d.actualpost = '44'
+    </select>
+
     <insert id="insertTStaffmgr" parameterType="TStaffmgr" useGeneratedKeys="true" keyProperty="id">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
             SELECT seq_t_staffmgr.NEXTVAL as id FROM DUAL

+ 27 - 2
master/src/main/resources/mybatis/training/TWorklicenseCertificateMapper.xml

@@ -49,11 +49,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updatedate"    column="updatedate"    />
         <result property="deptId"    column="dept_id"    />
         <result property="deptName" column="dept_name" />
+        <result property="watervalidity" column="watervalidity" />
+        <result property="waterreview" column="waterreview" />
+        <result property="energyvalidity" column="energyvalidity" />
+        <result property="energyreview" column="energyreview" />
     </resultMap>
 
     <sql id="selectTWorklicenseCertificateVo">
-        select d.id, d.name, d.employeeid, d.idnum, d.classes, d.post, d.idtype, d.worklicense_idnum, d.boiler, d.cracking, d.hotarea, d.coldarea, d.aromatic, d.recertificatedate, d.validity, d.container, d.pipe, d.reviewdate, d.pipevalidity, d.certificate_no, d.boilerid, d.boilvalidity, d.hydrogenation, d.hydvalidity, d.hydnextreview, d.crackingid, d.crackingvalidity, d.crackingreview, d.refrigeration, d.refrigerationvalidity, d.refrigerationview, d.foremantrain, d.foremanreview, d.foremannextreview, d.fire_protection, d.waterdate, d.energydate, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id from t_worklicense_certificate d
-      left join sys_dept s on s.dept_id = d.dept_id
+        select d.id, d.name, d.employeeid, d.idnum, d.classes, d.post, d.idtype, d.worklicense_idnum, d.boiler, d.cracking, d.hotarea, d.coldarea, d.aromatic, d.recertificatedate, d.validity, d.container, d.pipe, d.reviewdate, d.pipevalidity, d.certificate_no, d.boilerid, d.boilvalidity, d.hydrogenation, d.hydvalidity, d.hydnextreview, d.crackingid, d.crackingvalidity, d.crackingreview, d.refrigeration, d.refrigerationvalidity, d.refrigerationview, d.foremantrain, d.foremanreview, d.foremannextreview, d.fire_protection, d.waterdate, d.energydate, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id,
+             d.watervalidity,
+             d.waterreview,
+             d.energyvalidity,
+             d.energyreview
+        from t_worklicense_certificate d
+        left join sys_dept s on s.dept_id = d.dept_id
     </sql>
 
     <select id="selectTWorklicenseCertificateList" parameterType="TWorklicenseCertificate" resultMap="TWorklicenseCertificateResult">
@@ -100,6 +109,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updaterCode != null  and updaterCode != ''"> and updater_code = #{updaterCode}</if>
             <if test="updatedate != null "> and updatedate = #{updatedate}</if>
             <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="watervalidity != null "> and watervalidity = #{watervalidity}</if>
+            <if test="waterreview != null "> and waterreview = #{waterreview}</if>
+            <if test="energyvalidity != null "> and energyvalidity = #{energyvalidity}</if>
+            <if test="energyreview != null "> and energyreview = #{energyreview}</if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
@@ -161,6 +174,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updaterCode != null">updater_code,</if>
             <if test="updatedate != null">updatedate,</if>
             <if test="deptId != null">dept_id,</if>
+            <if test="watervalidity != null">watervalidity,</if>
+            <if test="waterreview != null">waterreview,</if>
+            <if test="energyvalidity != null">energyvalidity,</if>
+            <if test="energyreview != null">energyreview,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -206,6 +223,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updaterCode != null">#{updaterCode},</if>
             <if test="updatedate != null">#{updatedate},</if>
             <if test="deptId != null">#{deptId},</if>
+            <if test="watervalidity != null">#{watervalidity},</if>
+            <if test="waterreview != null">#{waterreview},</if>
+            <if test="energyvalidity != null">#{energyvalidity},</if>
+            <if test="energyreview != null">#{energyreview},</if>
          </trim>
     </insert>
 
@@ -254,6 +275,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updaterCode != null">updater_code = #{updaterCode},</if>
             <if test="updatedate != null">updatedate = #{updatedate},</if>
             <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="watervalidity != null">watervalidity = #{watervalidity},</if>
+            <if test="waterreview != null">waterreview = #{waterreview},</if>
+            <if test="energyvalidity != null">energyvalidity = #{energyvalidity},</if>
+            <if test="energyreview != null">energyreview = #{energyreview},</if>
         </trim>
         where id = #{id}
     </update>

+ 68 - 11
ui/src/views/training/worklicensecertificate/index.vue

@@ -253,6 +253,16 @@
             <span>{{ parseTime(scope.row.waterdate, '{y}-{m}-{d}') }}</span>
           </template>
         </el-table-column>
+        <el-table-column label="有效期" align="center" prop="watervalidity" width="100">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.watervalidity, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="复审" align="center" prop="waterreview" width="100">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.waterreview, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
         <el-table-column label="附件" align="center" width="80">
           <template slot-scope="scope">
             <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'certificate-waterdate')"  circle></el-button>
@@ -265,6 +275,16 @@
             <span>{{ parseTime(scope.row.energydate, '{y}-{m}-{d}') }}</span>
           </template>
         </el-table-column>
+        <el-table-column label="有效期" align="center" prop="energyvalidity" width="100">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.energyvalidity, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="复审" align="center" prop="energyreview" width="100">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.energyreview, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
         <el-table-column label="附件" align="center" width="80">
           <template slot-scope="scope">
             <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'certificate-energydate')"  circle></el-button>
@@ -402,11 +422,6 @@
                               placeholder="选择有效期">
               </el-date-picker>
             </el-form-item>
-            <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
             <el-form-item label="加氢工艺" prop="hydrogenation">
               <el-input v-model="form.hydrogenation" placeholder="请输入加氢工艺" />
             </el-form-item>
@@ -426,6 +441,11 @@
                               placeholder="选择复审">
               </el-date-picker>
             </el-form-item>
+            <el-form-item label="归属部门" prop="deptId">
+              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
             <el-form-item label="裂化工艺" prop="crackingid">
               <el-input v-model="form.crackingid" placeholder="请输入裂化工艺" />
             </el-form-item>
@@ -504,6 +524,22 @@
                               placeholder="选择锅炉水质处理最近培训日期">
               </el-date-picker>
             </el-form-item>
+            <el-form-item label="有效期" prop="watervalidity">
+              <el-date-picker clearable size="small" style="width: 200px"
+                              v-model="form.watervalidity"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="选择有效期">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="复审" prop="waterreview">
+              <el-date-picker clearable size="small" style="width: 200px"
+                              v-model="form.waterreview"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="选择复审">
+              </el-date-picker>
+            </el-form-item>
             <el-form-item label="锅炉能效最近培训日期" prop="energydate">
               <el-date-picker clearable size="small" style="width: 200px"
                               v-model="form.energydate"
@@ -512,6 +548,22 @@
                               placeholder="选择锅炉能效最近培训日期">
               </el-date-picker>
             </el-form-item>
+            <el-form-item label="有效期" prop="energyvalidity">
+              <el-date-picker clearable size="small" style="width: 200px"
+                              v-model="form.energyvalidity"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="选择有效期">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="复审" prop="energyreview">
+              <el-date-picker clearable size="small" style="width: 200px"
+                              v-model="form.energyreview"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="选择复审">
+              </el-date-picker>
+            </el-form-item>
           </el-col>
         </el-row>
       </el-form>
@@ -813,8 +865,10 @@ export default {
         return style += "background:#FFFFDD;";
       }
       if ((rowIndex === 0 && columnIndex === 12) || (rowIndex === 1 && columnIndex === 10)
-        || (rowIndex === 1 && columnIndex === 9) || (rowIndex === 1 && columnIndex === 27)
-        || (rowIndex === 1 && columnIndex === 26) || (rowIndex === 0 && columnIndex === 16)) {
+        || (rowIndex === 1 && columnIndex === 9) || (rowIndex === 0 && columnIndex === 16)
+        || (rowIndex === 1 && columnIndex === 29) || (rowIndex === 1 && columnIndex === 28)
+        || (rowIndex === 1 && columnIndex === 27)
+        || (rowIndex === 1 && columnIndex === 26)) {
         return style += "background:#DDFFFF;";
       }
       if ((rowIndex === 0 && columnIndex === 13) || (rowIndex === 1 && columnIndex === 12)
@@ -822,8 +876,9 @@ export default {
         || (rowIndex === 1 && columnIndex === 15) || (rowIndex === 1 && columnIndex === 16)
         || (rowIndex === 1 && columnIndex === 17) || (rowIndex === 1 && columnIndex === 18)
         || (rowIndex === 1 && columnIndex === 19) || (rowIndex === 1 && columnIndex === 11)
-        || (rowIndex === 1 && columnIndex === 29) || (rowIndex === 1 && columnIndex === 28
-          || (rowIndex === 0 && columnIndex === 17))) {
+        || (rowIndex === 1 && columnIndex === 30) || (rowIndex === 1 && columnIndex === 31)
+        || (rowIndex === 1 && columnIndex === 32) || (rowIndex === 1 && columnIndex === 33)
+          || (rowIndex === 0 && columnIndex === 17)) {
         return style += "background:rgb(229, 249, 175);";
       }
     },
@@ -840,11 +895,13 @@ export default {
       } else if (columnIndex === 15||columnIndex === 16||columnIndex === 17||columnIndex === 18
         ||columnIndex === 14 ||columnIndex === 35||columnIndex === 34) {
         return style += "background:#FFFFDD;";
-      } else if (columnIndex === 20||columnIndex === 19||columnIndex === 37||columnIndex === 36) {
+      } else if (columnIndex === 20||columnIndex === 19||columnIndex === 37||columnIndex === 36
+        ||columnIndex === 39||columnIndex === 38) {
         return style += "background:#DDFFFF;";
       } else if (columnIndex === 22||columnIndex === 23||columnIndex === 24 ||columnIndex === 25
         ||columnIndex === 26||columnIndex === 27 ||columnIndex === 28||columnIndex === 29
-        ||columnIndex === 21 ||columnIndex === 39||columnIndex === 38) {
+        ||columnIndex === 21 || columnIndex === 40 || columnIndex === 41
+        || columnIndex === 42 || columnIndex === 43) {
         return style += "background:rgb(229, 249, 175);";
       } else {
         return style;