Browse Source

-修改苯乙烯作业证一览表数据

jiangbiao 2 years ago
parent
commit
be959b1138

+ 17 - 25
master/src/main/java/com/ruoyi/project/common/CommonController.java

@@ -1,40 +1,29 @@
 package com.ruoyi.project.common;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.alibaba.fastjson.JSON;
-import com.ruoyi.common.utils.export.JxlsTemplateEnum;
-import com.ruoyi.common.utils.export.JxlsView;
-import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.framework.config.ServerConfig;
 import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.project.sems.domain.*;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.project.sems.domain.TSpecdevGl;
 import com.ruoyi.project.sems.service.*;
-import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.ss.util.CellReference;
-import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.file.FileUploadUtils;
-import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.framework.config.RuoYiConfig;
-import com.ruoyi.framework.config.ServerConfig;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import org.springframework.web.servlet.ModelAndView;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.*;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 /**
@@ -230,6 +219,9 @@ public class CommonController extends BaseController
         } else if( type.equals("workcertificate") ) {
             downloadname = "作业证书一览表导入模板.xlsx";
             url = "static/template/training/workcertificate.xlsx";
+        } else if( type.equals("byxworkcertificate") ) {
+            downloadname = "苯乙烯作业证书一览表导入模板.xlsx";
+            url = "static/template/training/byxworkcertificate.xlsx";
         } else if( type.equals("worklicense") ) {
             downloadname = "上岗证一览表导入模板.xlsx";
             url = "static/template/training/worklicense.xlsx";

+ 3 - 1
master/src/main/java/com/ruoyi/project/listener/invoiceApprove/InvoiceEndSuccessListener.java

@@ -54,7 +54,8 @@ public class InvoiceEndSuccessListener implements Serializable, ExecutionListene
         ISysUserService sysUserService = (ISysUserService) SpringContextUtils.getBean("sysUserService");
         IMailService mailService = (IMailService) SpringContextUtils.getBean("mailService");
         TApproveReserveInvoice approveEntity = tApproveReserveInvoiceService.selectTApproveReserveInvoiceById(Long.parseLong(id)) ;
-
+        approveEntity.setStatus(1L);
+        approveEntity.setEnddate(new Date());
         // 修改申请状态
         TInvoiceBookingworkticket invoiceBook = tInvoiceBookingworkticketService.selectTInvoiceBookingworkticketById(Long.valueOf(approveEntity.getInvoiceId()));
         invoiceBook.setStatus(3L);
@@ -122,6 +123,7 @@ public class InvoiceEndSuccessListener implements Serializable, ExecutionListene
         TInvoiceBookingworkticket tInvoiceBookingworkticket=tInvoiceBookingworkticketService.selectTInvoiceBookingworkticketById(Long.parseLong(approveEntity.getInvoiceId()));
         tInvoiceBookingworkticket.setFilename(url);
         tInvoiceBookingworkticketService.updateTInvoiceBookingworkticket(tInvoiceBookingworkticket);
+        tApproveReserveInvoiceService.updateTApproveReserveInvoice(approveEntity);
     }
 
     /**

+ 165 - 15
master/src/main/java/com/ruoyi/project/training/controller/TWorkcertificateController.java

@@ -1,34 +1,38 @@
 package com.ruoyi.project.training.controller;
 
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.file.ExcelUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.common.domain.DataEntity;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysDictData;
 import com.ruoyi.project.system.service.ISysDeptService;
 import com.ruoyi.project.system.service.ISysDictTypeService;
+import com.ruoyi.project.training.domain.TByxWorkcertificate;
+import com.ruoyi.project.training.domain.TWorkcertificate;
 import com.ruoyi.project.training.mapper.TWorkcertificateMapper;
-import org.apache.poi.ss.usermodel.*;
-import org.springframework.security.access.prepost.PreAuthorize;
+import com.ruoyi.project.training.service.ITWorkcertificateService;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.project.training.domain.TWorkcertificate;
-import com.ruoyi.project.training.service.ITWorkcertificateService;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * 作业证书一览Controller
@@ -65,7 +69,7 @@ public class TWorkcertificateController extends BaseController
 
     //申请年份统计
     @GetMapping("/cerData")
-    public List<DataEntity> cerData(Map param)
+    public List<DataEntity> cerData(Map<String, java.io.Serializable> param)
     {
         param.put("params" , new HashMap<>());
         param.put("cert", 1);
@@ -97,6 +101,20 @@ public class TWorkcertificateController extends BaseController
         return util.exportExcel(list, "workcertificate");
     }
 
+    /**
+     * 导出作业证书一览列表
+     */
+    @PreAuthorize("@ss.hasPermi('training:workcertificate:export')")
+    @Log(title = "作业证书一览", businessType = BusinessType.EXPORT)
+    @GetMapping("/byxExport")
+    public AjaxResult byxExport(TWorkcertificate tWorkcertificate)
+    {
+        List<TWorkcertificate> tWorkcertificates = tWorkcertificateService.selectTWorkcertificateList(tWorkcertificate);
+        List<TByxWorkcertificate> list = JSONArray.parseArray(JSON.toJSONString(tWorkcertificates),TByxWorkcertificate.class);
+        ExcelUtil<TByxWorkcertificate> util = new ExcelUtil<>(TByxWorkcertificate.class);
+        return util.exportExcel(list, "byxworkcertificate");
+    }
+
     /**
      * 获取作业证书一览详细信息
      */
@@ -310,6 +328,138 @@ public class TWorkcertificateController extends BaseController
         return AjaxResult.success(String.valueOf(successNumber), failRow);
     }
 
+    @PreAuthorize("@ss.hasPermi('training:workcertificate:add')")
+    @Log(title = "作业证书一览", businessType = BusinessType.INSERT)
+    @PostMapping("/byxImportData")
+    public AjaxResult byxImportData(@RequestParam("file") MultipartFile file) throws IOException
+    {
+        //获取操作人员ID
+        Long userId = getUserId();
+        //报错行数统计
+        List<Integer> failRow =new ArrayList<Integer>();
+        Workbook workbook = ExcelUtils.getWorkBook(file);
+        Sheet sheet = workbook.getSheetAt(0);
+        List<TWorkcertificate> list = new ArrayList<TWorkcertificate>();
+        //字典查询
+        List<SysDictData> plant = iSysDictTypeService.selectDictDataByType("PLANT_DIVIDE");
+        List<SysDictData> classes = iSysDictTypeService.selectDictDataByType("CLASSES");
+        //部门查询
+        List<SysDept> dept = iSysDeptService.selectDeptList(new SysDept());
+        int rowNum = sheet.getLastRowNum();
+        int failNumber = 0;
+        for (int i = 1; i <= rowNum; i++) {
+            try {
+                logger.info("读取行数:" + i);
+                Row row = sheet.getRow(i);
+                //   int cellNum = row.getPhysicalNumberOfCells();
+                if(row==null){
+                    sheet.removeRow(row);
+                    rowNum++;
+                    continue;
+                }
+                int cellNum = row.getLastCellNum();
+                TWorkcertificate entity = new TWorkcertificate();
+                for (int j = 0; j < cellNum; j++) {
+                    Cell cell = row.getCell(j);
+                    if (cell == null) {
+                        continue;
+                    }
+                    String cellValue = ExcelUtils.getCellValue(cell);
+                    logger.info("cellValue:" + cellValue);
+                    if (j == 0) {
+                        for (SysDictData p : plant) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setPlantCode(p.getDictValue());//装置名称
+                            }
+                        }
+                    } else if (j == 1) {
+                        entity.setName(cellValue);//姓名
+                    } else if (j == 2) {
+                        cellValue=supplementZero(Integer.parseInt(cellValue));
+                        entity.setEmployeeid(cellValue);//员工号
+                    } else if (j == 3) {
+                        for (SysDictData p : classes) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setClasses(p.getDictValue());//班型
+                            }
+                        }
+                    } else if (j == 4) {
+                        entity.setContainer(cellValue);//移动式压力容器充装
+                    } else if (j == 5) {
+                        entity.setPipe(cellValue);//消防设施操作
+                    } else if (j == 6) {
+                        entity.setIdnum(cellValue);//身份证件号
+                    } else if (j == 7) {
+                        if (cellValue.length() > 3) {
+                            entity.setReviewdate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//复证日期
+                        }
+                    } else if (j == 8) {
+                        if (cellValue.length() > 3) {
+                            entity.setPipevalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//有效期
+                        }
+                    } else if (j == 9) {
+                        entity.setBoiler(cellValue);//监护人专项培训
+                    } else if (j == 10) {
+                        if (cellValue.length() > 3) {
+                            entity.setBoilvalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//有效期
+                        }
+                    } else if (j == 11) {
+                        if (cellValue.length() > 3) {
+                            entity.setForemantrain(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//班组长最近培训日期
+                        }
+                    } else if (j == 12) {
+                        if (cellValue.length() > 3) {
+                            entity.setForemanreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//班组长本次复审
+                        }
+                    } else if (j == 13) {
+                        if (cellValue.length() > 3) {
+                            entity.setForemannextreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//班组长下次复审
+                        }
+                    } else if (j == 14) {
+                        for (SysDept d : dept) {
+                            if (d.getDeptName().equals(cellValue.trim())) {
+                                entity.setDeptId(d.getDeptId());//部门编号
+                            }
+                        }
+                    } else if (j == 15) {
+                        entity.setRemarks(cellValue);//备注
+                    }
+                }
+                entity.setCreaterCode(userId.toString());
+                logger.info("entity:" + entity);
+                list.add(entity);
+            }catch (Exception e){
+                failNumber++;
+                failRow.add(i+1);
+            }
+        }
+        int successNumber = 0;
+        int failNum = 0;
+        for (TWorkcertificate t : list
+        ) {
+            failNum++;
+            try {
+                TWorkcertificate ttt=    tWorkcertificateService.selectTWorkcertificateByEmployeeid(t.getEmployeeid());
+                if(StringUtils.isEmpty(ttt)){
+                    tWorkcertificateService.insertTWorkcertificate(t);
+                }else {
+                    tWorkcertificateService.updateTWorkcertificateByEmployeeid(t);
+                }
+
+                successNumber++;
+            }catch (Exception e){
+                failNumber++;
+                failRow.add(failNum+1);
+            }
+        }
+        logger.info("list:" + JSON.toJSONString(list));
+        logger.info("successNumber:" +String.valueOf(successNumber));
+        logger.info("failNumber:" +String.valueOf(failNumber));
+        logger.info("failRow:" +String.valueOf(failRow));
+        //     logger.info("update:"+String.valueOf());
+        return AjaxResult.success(String.valueOf(successNumber), failRow);
+    }
+
     //补全员工编号的前缀 0
     public static String supplementZero(int randomNum){
 

+ 481 - 0
master/src/main/java/com/ruoyi/project/training/domain/TByxWorkcertificate.java

@@ -0,0 +1,481 @@
+package com.ruoyi.project.training.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 作业证书一览对象 t_workcertificate
+ *
+ * @author ruoyi
+ * @date 2020-12-01
+ */
+public class TByxWorkcertificate extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 唯一标识ID */
+    private Long id;
+
+    /** 装置名称 */
+    @Excel(name = "装置名称", dictType = "PLANT_DIVIDE")
+    private String plantCode;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String name;
+
+    /** 员工号 */
+    @Excel(name = "员工号")
+    private String employeeid;
+
+    /** 班组 */
+    @Excel(name = "班型", dictType = "CLASSES")
+    private String classes;
+
+    /** 压力容器 */
+    @Excel(name = "移动式压力容器充装")
+    private String container;
+
+    /** 压力管道 */
+    @Excel(name = "消防设施操作")
+    private String pipe;
+
+    /** 身份证件号 */
+    @Excel(name = "身份证件号")
+    private String idnum;
+
+    /** 复证日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "复证日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date reviewdate;
+
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date pipevalidity;
+
+    /** 锅炉证 */
+    @Excel(name = "监护人专项培训")
+    private String boiler;
+
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date boilvalidity;
+
+    /** 加氢工艺 */
+    //@Excel(name = "加氢工艺")
+    private String hydrogenation;
+
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+   // @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date hydvalidity;
+
+    /** 下次复审 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    //@Excel(name = "下次复审", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date hydnextreview;
+
+    /** 裂化工艺 */
+    //@Excel(name = "裂化工艺")
+    private String cracking;
+
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+   // @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date crackingvalidity;
+
+    /** 复审 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+   // @Excel(name = "复审", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date crackingreview;
+
+    /** 班组长最近培训日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "班组长最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date foremantrain;
+
+    /** 班组长本次复审 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "班组长本次复审", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date foremanreview;
+
+    /** 班组长下次复审 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "班组长下次复审", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date foremannextreview;
+
+    /** 锅炉水质培训日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    //@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 energydate;
+
+    /** 制冷作业培训日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    //@Excel(name = "制冷作业培训日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date refrigerationdate;
+
+    /** 删除状态 */
+    private Long delFlag;
+
+    /** 创建人 */
+    private String createrCode;
+
+    /** 创建时间 */
+    private Date createdate;
+
+    /** 修改人 */
+    private String updaterCode;
+
+    /** 修改时间 */
+    private Date updatedate;
+
+    /** 部门名称 */
+    @Excel(name = "部门名称")
+    private String deptName;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 部门编号 */
+    private Long deptId;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setPlantCode(String plantCode)
+    {
+        this.plantCode = plantCode;
+    }
+
+    public String getPlantCode()
+    {
+        return plantCode;
+    }
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+    public void setEmployeeid(String employeeid)
+    {
+        this.employeeid = employeeid;
+    }
+
+    public String getEmployeeid()
+    {
+        return employeeid;
+    }
+    public void setClasses(String classes)
+    {
+        this.classes = classes;
+    }
+
+    public String getClasses()
+    {
+        return classes;
+    }
+    public void setContainer(String container)
+    {
+        this.container = container;
+    }
+
+    public String getContainer()
+    {
+        return container;
+    }
+    public void setPipe(String pipe)
+    {
+        this.pipe = pipe;
+    }
+
+    public String getPipe()
+    {
+        return pipe;
+    }
+    public void setIdnum(String idnum)
+    {
+        this.idnum = idnum;
+    }
+
+    public String getIdnum()
+    {
+        return idnum;
+    }
+    public void setReviewdate(Date reviewdate)
+    {
+        this.reviewdate = reviewdate;
+    }
+
+    public Date getReviewdate()
+    {
+        return reviewdate;
+    }
+    public void setPipevalidity(Date pipevalidity)
+    {
+        this.pipevalidity = pipevalidity;
+    }
+
+    public Date getPipevalidity()
+    {
+        return pipevalidity;
+    }
+    public void setBoiler(String boiler)
+    {
+        this.boiler = boiler;
+    }
+
+    public String getBoiler()
+    {
+        return boiler;
+    }
+    public void setBoilvalidity(Date boilvalidity)
+    {
+        this.boilvalidity = boilvalidity;
+    }
+
+    public Date getBoilvalidity()
+    {
+        return boilvalidity;
+    }
+    public void setHydrogenation(String hydrogenation)
+    {
+        this.hydrogenation = hydrogenation;
+    }
+
+    public String getHydrogenation()
+    {
+        return hydrogenation;
+    }
+    public void setHydvalidity(Date hydvalidity)
+    {
+        this.hydvalidity = hydvalidity;
+    }
+
+    public Date getHydvalidity()
+    {
+        return hydvalidity;
+    }
+    public void setHydnextreview(Date hydnextreview)
+    {
+        this.hydnextreview = hydnextreview;
+    }
+
+    public Date getHydnextreview()
+    {
+        return hydnextreview;
+    }
+    public void setCracking(String cracking)
+    {
+        this.cracking = cracking;
+    }
+
+    public String getCracking()
+    {
+        return cracking;
+    }
+    public void setCrackingvalidity(Date crackingvalidity)
+    {
+        this.crackingvalidity = crackingvalidity;
+    }
+
+    public Date getCrackingvalidity()
+    {
+        return crackingvalidity;
+    }
+    public void setCrackingreview(Date crackingreview)
+    {
+        this.crackingreview = crackingreview;
+    }
+
+    public Date getCrackingreview()
+    {
+        return crackingreview;
+    }
+    public void setForemantrain(Date foremantrain)
+    {
+        this.foremantrain = foremantrain;
+    }
+
+    public Date getForemantrain()
+    {
+        return foremantrain;
+    }
+    public void setForemanreview(Date foremanreview)
+    {
+        this.foremanreview = foremanreview;
+    }
+
+    public Date getForemanreview()
+    {
+        return foremanreview;
+    }
+    public void setForemannextreview(Date foremannextreview)
+    {
+        this.foremannextreview = foremannextreview;
+    }
+
+    public Date getForemannextreview()
+    {
+        return foremannextreview;
+    }
+    public void setWaterdate(Date waterdate)
+    {
+        this.waterdate = waterdate;
+    }
+
+    public Date getWaterdate()
+    {
+        return waterdate;
+    }
+    public void setEnergydate(Date energydate)
+    {
+        this.energydate = energydate;
+    }
+
+    public Date getEnergydate()
+    {
+        return energydate;
+    }
+    public void setRefrigerationdate(Date refrigerationdate)
+    {
+        this.refrigerationdate = refrigerationdate;
+    }
+
+    public Date getRefrigerationdate()
+    {
+        return refrigerationdate;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("plantCode", getPlantCode())
+            .append("name", getName())
+            .append("employeeid", getEmployeeid())
+            .append("classes", getClasses())
+            .append("container", getContainer())
+            .append("pipe", getPipe())
+            .append("idnum", getIdnum())
+            .append("reviewdate", getReviewdate())
+            .append("pipevalidity", getPipevalidity())
+            .append("boiler", getBoiler())
+            .append("boilvalidity", getBoilvalidity())
+            .append("hydrogenation", getHydrogenation())
+            .append("hydvalidity", getHydvalidity())
+            .append("hydnextreview", getHydnextreview())
+            .append("cracking", getCracking())
+            .append("crackingvalidity", getCrackingvalidity())
+            .append("crackingreview", getCrackingreview())
+            .append("foremantrain", getForemantrain())
+            .append("foremanreview", getForemanreview())
+            .append("foremannextreview", getForemannextreview())
+            .append("waterdate", getWaterdate())
+            .append("energydate", getEnergydate())
+            .append("refrigerationdate", getRefrigerationdate())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("remarks", getRemarks())
+            .append("deptId", getDeptId())
+            .append("deptName", getDeptName())
+            .toString();
+    }
+}

BIN
master/src/main/resources/static/template/training/byxworkcertificate.xlsx


+ 6 - 0
ui/src/api/training/workcertificate.js

@@ -58,4 +58,10 @@ export function exportWorkcertificate(query) {
     method: 'get',
     params: query
   })
+}export function exportByxWorkcertificate(query) {
+  return request({
+    url: '/training/workcertificate/byxExport',
+    method: 'get',
+    params: query
+  })
 }

+ 108 - 0
ui/src/views/training/byxWorkcertificate/certData.vue

@@ -0,0 +1,108 @@
+<template>
+  <div>
+    <div id="cerData" :style="{width:width,height:height}"></div>
+  </div>
+</template>
+
+<script>
+  import { cerData } from "@/api/training/workcertificate";
+
+  export default {
+    props: {
+      width: {
+        type: String,
+        default: '100%'
+      },
+      height: {
+        type: String,
+        default: '200px'
+      },
+    },
+    data() {
+      return {
+        option: {
+          color: ['#3398DB'],
+          /* 周围边距 */
+          grid: {
+            left: '3%',
+            right: '3%',
+            bottom: '1%',
+            top: '15%',
+            containLabel: true
+          },
+          /* 标识 */
+          legend: {
+            data: [this.$t('证书')],
+          },
+          toolbox: {
+            show: true,
+            feature: {
+              mark: {show: true},
+              magicType: {
+                show: true,
+                type: ['pie', 'funnel']
+              },
+              restore: {show: true},
+              saveAsImage: {show: true}
+            }
+          },
+          /* 坐标轴显示 */
+          tooltip: {
+            trigger: 'axis',
+            axisPointer: {            // 坐标轴指示器,坐标轴触发有效
+              /*type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'*/
+              type: 'cross',
+              label: {
+                backgroundColor: '#a0a0a0'
+              }
+            }
+          },
+          xAxis: {
+            data: []
+          },
+          yAxis: {
+            name: this.$t('人数'),
+          },
+          series: [{
+            name: this.$t('证书'),
+            type: 'bar',
+            barWidth: '40%',
+            data: []
+          }]
+        },
+
+        // 查询参数
+        queryParams: {
+          item: 1,
+        },
+        chart: null,
+        chartData : []
+      }
+    },
+    mounted() {
+      this.$nextTick(() => {
+        cerData(this.queryParams).then(response => {
+          this.chartData = response
+          for(let i = 0 ; i <this.chartData.length ; i++){
+            if(this.chartData[i].dataName!= null && this.chartData[i].dataName!= ''){
+              this.option.xAxis.data.push(this.chartData[i].dataName)
+              this.option.series[0].data.push(this.chartData[i].dataNum)
+            }
+          }
+          this.initChart()
+        });
+      })
+    },
+    methods: {
+      /** 获取当前年份 */
+      getNowTime() {
+        var now = new Date();
+      },
+      initChart() {
+        // 基于准备好的dom,初始化echarts实例
+        this.chart = this.echarts.init(document.getElementById('cerData'))
+        this.chart.setOption(this.option)
+      }
+    }
+  }
+</script>

+ 698 - 0
ui/src/views/training/byxWorkcertificate/index.vue

@@ -0,0 +1,698 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('班组')" prop="classes">
+        <el-select v-model="queryParams.classes" @change="handleQuery"    :placeholder="$t('请选择') + $t('班组')" clearable size="small">
+          <el-option
+            v-for="dict in classesOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item :label="$t('监护人专项培训')" prop="boiler" label-width="50">
+        <el-checkbox v-model="queryParams.boiler" @change="handleQuery"   ></el-checkbox>
+      </el-form-item>
+<!--      <el-form-item :label="$t('加氢工艺')" prop="hydrogenation" label-width="50">
+        <el-checkbox v-model="queryParams.hydrogenation" @change="handleQuery"   ></el-checkbox>
+      </el-form-item>
+      <el-form-item :label="$t('裂化工艺')" prop="cracking" label-width="50">
+        <el-checkbox v-model="queryParams.cracking" @change="handleQuery"   ></el-checkbox>
+      </el-form-item>-->
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('搜索') }}</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('重置') }}</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['training:workcertificate:add']"
+        >{{ $t('新增') }}</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['training:workcertificate:edit']"
+        >{{ $t('修改') }}</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['training:workcertificate:remove']"
+        >{{ $t('删除') }}</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['training:workcertificate:edit']"
+        >{{ $t('导入') }}</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['training:workcertificate:export']"
+        >{{ $t('导出') }}</el-button>
+      </el-col>
+<!--      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-s-data"
+          size="mini"
+          @click="handleData"
+        >{{ $t('数据分析') }}</el-button>
+      </el-col>-->
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="workcertificateList" @selection-change="handleSelectionChange" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column :label="$t('姓名')" align="center" prop="name" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('员工号')" align="center" prop="employeeid" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('班组')" align="center" prop="classes" :formatter="classesFormat" />
+      <el-table-column :label="$t('移动式压力容器充装')" align="center" prop="container" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('消防设施操作')" align="center" prop="pipe" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('身份证件号')" align="center" prop="idnum" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('复证日期')" align="center" prop="reviewdate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.reviewdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('证书有效期')" align="center" prop="pipevalidity" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.pipevalidity, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('监护人专项培训')" align="center" prop="boiler" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('证书有效期')" align="center" prop="boilvalidity" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.boilvalidity, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+<!--      <el-table-column :label="$t('加氢工艺')" align="center" prop="hydrogenation" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('证书有效期')" align="center" prop="hydvalidity" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.hydvalidity, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('下次复审')" align="center" prop="hydnextreview" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.hydnextreview, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>-->
+<!--      <el-table-column :label="$t('裂化工艺')" align="center" prop="cracking" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('证书有效期')" align="center" prop="crackingvalidity" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.crackingvalidity, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('下次复审')" align="center" prop="crackingreview" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.crackingreview, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>-->
+      <el-table-column :label="$t('班组长最近培训日期')" align="center" prop="foremantrain" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.foremantrain, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('班组长本次复审')" align="center" prop="foremanreview" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.foremanreview, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('班组长下次复审')" align="center" prop="foremannextreview" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.foremannextreview, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+<!--      <el-table-column :label="$t('锅炉水质培训日期')" align="center" prop="waterdate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.waterdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('锅炉能效培训日期')" align="center" prop="energydate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.energydate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :label="$t('制冷作业培训日期')" align="center" prop="refrigerationdate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.refrigerationdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>-->
+      <el-table-column :label="$t('备注')" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column :label="$t('操作')" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['training:workcertificate:edit']"
+          >{{ $t('修改') }}</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['training:workcertificate:remove']"
+          >{{ $t('删除') }}</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改作业证书一览对话框 -->
+    <el-dialog v-dialogDrag :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item :label="$t('装置名称')" prop="plantCode">
+          <el-select v-model="form.plantCode" :placeholder="$t('请选择') + $t('装置名称')">
+            <el-option
+              v-for="dict in plantCodeOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item :label="$t('姓名')" prop="name">
+          <el-input v-model="form.name" :placeholder="$t('请输入') + $t('姓名')" />
+        </el-form-item>
+        <el-form-item :label="$t('员工号')" prop="employeeid">
+          <el-input v-model="form.employeeid" :placeholder="$t('请输入') + $t('员工号')" />
+        </el-form-item>
+        <el-form-item :label="$t('班组')" prop="classes">
+          <el-select v-model="form.classes" :placeholder="$t('请选择') + $t('班组')">
+            <el-option
+              v-for="dict in classesOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item :label="$t('移动式压力容器充装')" prop="container">
+          <el-input v-model="form.container" :placeholder="$t('请输入') + $t('移动式压力容器充装')" />
+        </el-form-item>
+        <el-form-item :label="$t('消防设施操作')" prop="pipe">
+          <el-input v-model="form.pipe" :placeholder="$t('请输入') + $t('消防设施操作')" />
+        </el-form-item>
+        <el-form-item :label="$t('身份证件号')" prop="idnum">
+          <el-input v-model="form.idnum" :placeholder="$t('请输入') + $t('员工姓名')" />
+        </el-form-item>
+        <el-form-item :label="$t('复证日期')" prop="reviewdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.reviewdate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('复证日期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('证书有效期')" prop="pipevalidity">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.pipevalidity"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('证书有效期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('监护人专项培训')" prop="boiler">
+          <el-input v-model="form.boiler" :placeholder="$t('请输入') + $t('监护人专项培训')" />
+        </el-form-item>
+        <el-form-item :label="$t('证书有效期')" prop="boilvalidity">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.boilvalidity"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('证书有效期')">
+          </el-date-picker>
+        </el-form-item>
+<!--        <el-form-item :label="$t('加氢工艺')" prop="hydrogenation">
+          <el-input v-model="form.hydrogenation" :placeholder="$t('请输入') + $t('加氢工艺')" />
+        </el-form-item>
+       <el-form-item :label="$t('证书有效期')" prop="hydvalidity">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.hydvalidity"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('证书有效期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('下次复审')" prop="hydnextreview">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.hydnextreview"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('下次复审')">
+          </el-date-picker>
+        </el-form-item>-->
+<!--        <el-form-item :label="$t('裂化工艺')" prop="cracking">
+          <el-input v-model="form.cracking" :placeholder="$t('请输入') + $t('裂化工艺')" />
+        </el-form-item>
+        <el-form-item :label="$t('证书有效期')" prop="crackingvalidity">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.crackingvalidity"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('证书有效期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('下次复审')" prop="crackingreview">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.crackingreview"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('下次复审')">
+          </el-date-picker>
+        </el-form-item>-->
+        <el-form-item :label="$t('班组长最近培训日期')" prop="foremantrain">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.foremantrain"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('班组长最近培训日期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('班组长本次复审')" prop="foremanreview">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.foremanreview"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('班组长本次复审')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('班组长下次复审')" prop="foremannextreview">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.foremannextreview"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('班组长下次复审')">
+          </el-date-picker>
+        </el-form-item>
+<!--        <el-form-item :label="$t('锅炉水质培训日期')" prop="waterdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.waterdate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('锅炉水质培训日期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('锅炉能效培训日期')" prop="energydate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.energydate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('锅炉能效培训日期')">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item :label="$t('制冷作业培训日期')" prop="refrigerationdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.refrigerationdate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          :placeholder="$t('请选择') + $t('制冷作业培训日期')">
+          </el-date-picker>
+        </el-form-item>-->
+        <el-form-item :label="$t('备注')" prop="remarks">
+          <el-input v-model="form.remarks" :placeholder="$t('请输入') + $t('备注')" />
+        </el-form-item>
+        <el-form-item :label="$t('归属部门')" prop="deptId">
+          <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" :placeholder="$t('请选择') + $t('归属部门')" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">{{ $t('确 定') }}</el-button>
+        <el-button @click="cancel">{{ $t('取 消') }}</el-button>
+      </div>
+    </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog v-dialogDrag :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          {{ $t('将文件拖到此处,或') }}
+          <em>{{ $t('点击上传') }}</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <!--<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据-->
+          <el-link type="info" style="font-size:12px" @click="importTemplate">{{ $t('下载模板') }}</el-link>
+        </div>
+        <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
+          <input name="type" :value="upload.type" hidden />
+        </form>
+        <div class="el-upload__tip" style="color:red" slot="tip">{{ $t('提示:仅允许导入“xls”或“xlsx”格式文件!请将需要上传的数据放在模板excel文件中,并将模板文件的空白行与无关数据删除,谢谢!') }}</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>
+        <el-button @click="upload.open = false">{{ $t('取 消') }}</el-button>
+      </div>
+    </el-dialog>
+    <el-drawer
+      :title="$t('数据分析')"
+      size="600px"
+      :visible.sync="drawer"
+      :direction="direction">
+      <el-row>
+        <el-col>
+          <el-card class="box-card" shadow="hover">
+            <div slot="header" class="clearfix">
+              <span>{{ $t('证书统计') }}</span>
+            </div>
+            <div class="text item">
+              <cert-data></cert-data>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import {
+  listWorkcertificate,
+  getWorkcertificate,
+  delWorkcertificate,
+  addWorkcertificate,
+  updateWorkcertificate,
+  exportWorkcertificate,
+  exportByxWorkcertificate
+} from "@/api/training/workcertificate";
+  import { treeselect } from "@/api/system/dept";
+  import { getToken } from "@/utils/auth";
+  import Treeselect from "@riophae/vue-treeselect";
+  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+  import CertData from "./certData";
+
+  export default {
+    name: "Workcertificate",
+    components: {CertData, Treeselect },
+    data() {
+      return {
+        drawer: false,
+        direction: 'rtl',
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: false,
+        // 总条数
+        total: 0,
+        // 作业证书一览表格数据
+        workcertificateList: [],
+        // 弹出层标题
+        title: "",
+        // 部门树选项
+        deptOptions: undefined,
+        clientHeight:300,
+        // 是否显示弹出层
+        open: false,
+        // 装置名称字典
+        plantCodeOptions: [],
+        // 班组字典
+        classesOptions: [],
+        // 用户导入参数
+        upload: {
+          downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
+          //下载模板类型
+          type: "byxworkcertificate",
+          // 是否显示弹出层(用户导入)
+          open: false,
+          // 弹出层标题(用户导入)
+          title: "",
+          // 是否禁用上传
+          isUploading: false,
+          // 是否更新已经存在的用户数据
+          updateSupport: 0,
+          // 设置上传的请求头部
+          headers: { Authorization: "Bearer " + getToken() },
+          // 上传的地址
+          url: process.env.VUE_APP_BASE_API + "/training/workcertificate/byxImportData"
+        },
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 20,
+          classes: null,
+          boiler: null,
+          hydrogenation: null,
+          cracking: null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          plantCode: [
+            { required: true, message: this.$t('装置名称')+this.$t('不能为空'), trigger: "change" }
+          ],
+          deptId: [
+            { required: true, message: this.$t('部门编号')+this.$t('不能为空'), trigger: "blur" }
+          ]
+        }
+      };
+    },
+    watch: {
+      // 根据名称筛选部门树
+      deptName(val) {
+        this.$refs.tree.filter(val);
+      }
+    },
+    created() {
+      //设置表格高度对应屏幕高度
+      this.$nextTick(() => {
+        this.clientHeight = (document.body.clientHeight - 80) * 0.8
+      })
+      this.getList();
+      this.getTreeselect();
+      this.getDicts("PLANT_DIVIDE").then(response => {
+        this.plantCodeOptions = response.data;
+      });
+      this.getDicts("CLASSES").then(response => {
+        this.classesOptions = response.data;
+      });
+    },
+    methods: {
+      /** 查询作业证书一览列表 */
+      getList() {
+        this.loading = true;
+        listWorkcertificate(this.queryParams).then(response => {
+          this.workcertificateList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      /** 查询部门下拉树结构 */
+      getTreeselect() {
+        treeselect().then(response => {
+          this.deptOptions = response.data;
+        });
+      },
+      // 装置名称字典翻译
+      plantCodeFormat(row, column) {
+        return this.selectDictLabel(this.plantCodeOptions, row.plantCode);
+      },
+      // 班组字典翻译
+      classesFormat(row, column) {
+        return this.selectDictLabel(this.classesOptions, row.classes);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: null,
+          plantCode: null,
+          name: null,
+          employeeid: null,
+          classes: null,
+          container: null,
+          pipe: null,
+          idnum: null,
+          reviewdate: null,
+          pipevalidity: null,
+          boiler: null,
+          boilvalidity: null,
+          hydrogenation: null,
+          hydvalidity: null,
+          hydnextreview: null,
+          cracking: null,
+          crackingvalidity: null,
+          crackingreview: null,
+          foremantrain: null,
+          foremanreview: null,
+          foremannextreview: null,
+          waterdate: null,
+          energydate: null,
+          refrigerationdate: null,
+          delFlag: null,
+          createrCode: null,
+          createdate: null,
+          updaterCode: null,
+          updatedate: null,
+          remarks: null,
+          deptId: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!==1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = this.$t('新增') + this.$t('空格') + this.$t('作业证书一览');
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getWorkcertificate(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = this.$t('修改') + this.$t('作业证书一览');
+        });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updateWorkcertificate(this.form).then(response => {
+                this.msgSuccess(this.$t('修改成功'));
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addWorkcertificate(this.form).then(response => {
+                this.msgSuccess(this.$t('新增成功'));
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
+          confirmButtonText: this.$t('确定'),
+          cancelButtonText: this.$t('取消'),
+          type: "warning"
+        }).then(function() {
+          return delWorkcertificate(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess(this.$t('删除成功'));
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        const queryParams = this.queryParams;
+        this.$confirm(this.$t('是否确认导出所有作业证书一览数据项?'), this.$t('警告'), {
+          confirmButtonText: this.$t('确定'),
+          cancelButtonText: this.$t('取消'),
+          type: "warning"
+        }).then(function() {
+          return exportByxWorkcertificate(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        })
+      },
+      /** 导入按钮操作 */
+      handleImport() {
+        this.upload.title = this.$t('用户导入');
+        this.upload.open = true;
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+        this.$refs['downloadFileForm'].submit()
+      },
+      // 文件上传中处理
+      handleFileUploadProgress(event, file, fileList) {
+        this.upload.isUploading = true;
+      },
+      // 文件上传成功处理
+      handleFileSuccess(response, file, fileList) {
+        this.upload.open = false;
+        this.upload.isUploading = false;
+        this.$refs.upload.clearFiles();
+        if (response.data[0] != null) {
+          this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据') + "," + this.$t('第') + response.data + this.$t('行数据出现错误导入失败')+"。", this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+        }else {
+          this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据'), this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+        }
+        this.getList();
+      },
+      // 提交上传文件
+      submitFileForm() {
+        this.$refs.upload.submit();
+      },
+      //数据分析
+      handleData(){
+        this.drawer = true
+      }
+    }
+  };
+</script>