Przeglądaj źródła

上岗证/作业证书一览 - 导出功能
上岗证/作业证书一览 - 导入模板下载
上岗证/作业证书一览 - 导入功能:根据员工号更新证书号和日期等信息

wangggziwen 2 tygodni temu
rodzic
commit
858e8c4d50

+ 3 - 0
master/src/main/java/com/ruoyi/project/common/CommonController.java

@@ -247,6 +247,9 @@ public class CommonController extends BaseController
         } else if( type.equals("worklicense") ) {
             downloadname = "上岗证一览表导入模板.xlsx";
             url = "static/template/training/worklicense.xlsx";
+        } else if( type.equals("worklicenseCertificate") ) {
+            downloadname = "上岗证/作业证书一览表导入模板.xlsx";
+            url = "static/template/training/worklicensecertificate.xlsx";
         } else if( type.equals("trainingrecords") ) {
             downloadname = "培训成绩导入模板.xlsx";
             url = "static/template/training/trainingrecords.xlsx";

+ 231 - 8
master/src/main/java/com/ruoyi/project/training/controller/TWorklicenseCertificateController.java

@@ -1,22 +1,28 @@
 package com.ruoyi.project.training.controller;
 
+import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.file.ExcelUtils;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.plant.service.ITStaffmgrService;
+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.TByxWorklicense;
+import com.ruoyi.project.training.mapper.TWorklicenseCertificateMapper;
+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.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+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.TWorklicenseCertificate;
@@ -25,6 +31,7 @@ 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;
 
 /**
  * 上岗证/作业证书一览Controller
@@ -39,12 +46,228 @@ public class TWorklicenseCertificateController extends BaseController
     @Autowired
     private ITWorklicenseCertificateService tWorklicenseCertificateService;
 
+    @Autowired
+    private TWorklicenseCertificateMapper tWorklicenseCertificateMapper;
+
     @Autowired
     private ITStaffmgrService staffmgrService;
 
     @Autowired
     private ISysDictTypeService iSysDictTypeService;
 
+    @Autowired
+    private ISysDeptService iSysDeptService;
+
+    /**
+     * 批量导入上岗证一览
+     */
+    @PreAuthorize("@ss.hasPermi('training:worklicensecertificate:add')")
+    @PostMapping("/importData")
+    public AjaxResult importData(@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<TWorklicenseCertificate> list = new ArrayList<TWorklicenseCertificate>();
+        //字典查询
+        List<SysDictData> plant = iSysDictTypeService.selectDictDataByType("PLANT_DIVIDE");
+        List<SysDictData> classes = iSysDictTypeService.selectDictDataByType("CLASSES");
+        List<SysDictData> yesno = iSysDictTypeService.selectDictDataByType("YES_NO_EN");
+        //部门查询
+        List<SysDept> dept = iSysDeptService.selectDeptList(new SysDept());
+        int rowNum = sheet.getPhysicalNumberOfRows();
+        int failNumber = 0;
+        for (int i = 1; i < rowNum; i++) {
+            try {
+                logger.info("读取行数:" + i);
+                Row row = sheet.getRow(i);
+                int cellNum = row.getLastCellNum();
+                TWorklicenseCertificate entity = new TWorklicenseCertificate();
+                for (int j = 0; j < cellNum; j++) {
+                    Cell cell = row.getCell(j);
+                    //  cell.setCellType(CellType.STRING);
+                    String cellValue = ExcelUtils.getCellValue(cell);
+                    logger.info("cellValue:" + cellValue);
+                    if (j == 0) {
+                        entity.setName(cellValue);//姓名
+                    } else if (j == 1) {
+                        entity.setEmployeeid(cellValue);//员工号
+                        Long id = tWorklicenseCertificateMapper.selectTWorklicenseCertificateByEmployeeid(Long.parseLong(cellValue)).getId();
+                        if (id == null) {
+                            continue;
+                        }
+                        entity.setId(id);
+                    } else if (j == 2) {
+                        entity.setIdnum(cellValue);//身份证件号
+                    } else if (j == 3) {
+                        entity.setClasses(cellValue);//班组
+                    } else if (j == 4) {
+                        entity.setPost(cellValue);//职务
+                    } else if (j == 5) {
+                        entity.setIdtype(cellValue);//证件类型
+                    } else if (j == 6) {
+                        entity.setCertificateNo(cellValue);//证件号
+                    } else if (j == 7) {
+                        for (SysDictData p : yesno) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setBoiler(p.getDictValue());//开工锅炉
+                            }
+                        }
+                    } else if (j == 8) {
+                        for (SysDictData p : yesno) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setCracking(p.getDictValue());//裂解
+                            }
+                        }
+                    } else if (j == 9) {
+                        for (SysDictData p : yesno) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setHotarea(p.getDictValue());//热区
+                            }
+                        }
+                    } else if (j == 10) {
+                        for (SysDictData p : yesno) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setColdarea(p.getDictValue());//冷区
+                            }
+                        }
+                    } else if (j == 11) {
+                        for (SysDictData p : yesno) {
+                            if (p.getDictLabel().equals(cellValue.trim())) {
+                                entity.setAromatic(p.getDictValue());//芳烃
+                            }
+                        }
+                    } else if (j == 12) {
+                        if (cellValue.length() > 3) {
+                            entity.setRecertificatedate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//取复证日期
+                        }
+                    } else if (j == 13) {
+                        if (cellValue.length() > 3) {
+                            entity.setValidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));//证书有效期
+                        }
+                    } else if (j == 14) {
+                        entity.setContainer(cellValue);//压力容器
+                    } else if (j == 15) {
+                        entity.setPipe(cellValue);//压力管道
+                    } else if (j == 16) {
+                        if (cellValue.length() > 3) {
+                            entity.setReviewdate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 17) {
+                        if (cellValue.length() > 3) {
+                            entity.setValidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 18) {
+                        entity.setCertificateNo(cellValue);
+                    } else if (j == 19) {
+                        entity.setBoilerid(cellValue);//锅炉证
+                    } else if (j == 20) {
+                        if (cellValue.length() > 3) {
+                            entity.setBoilvalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 21) {
+                        entity.setHydrogenation(cellValue);//加氢工艺
+                    } else if (j == 22) {
+                        if (cellValue.length() > 3) {
+                            entity.setHydvalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 23) {
+                        if (cellValue.length() > 3) {
+                            entity.setHydnextreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    }else if (j == 24) {
+                        entity.setCrackingid(cellValue);//裂化工艺
+                    } else if (j == 25) {
+                        if (cellValue.length() > 3) {
+                            entity.setCrackingvalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 26) {
+                        if (cellValue.length() > 3) {
+                            entity.setCrackingreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    }else if (j == 27) {
+                        entity.setRefrigeration(cellValue);//制冷与空调作业
+                    } else if (j == 28) {
+                        if (cellValue.length() > 3) {
+                            entity.setRefrigerationvalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 29) {
+                        if (cellValue.length() > 3) {
+                            entity.setRefrigerationview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 30) {
+                        if (cellValue.length() > 3) {
+                            entity.setForemantrain(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 31) {
+                        if (cellValue.length() > 3) {
+                            entity.setForemanreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 32) {
+                        if (cellValue.length() > 3) {
+                            entity.setForemannextreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 33) {
+                        if (cellValue.length() > 3) {
+                            entity.setFireProtection(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 34) {
+                        if (cellValue.length() > 3) {
+                            entity.setWaterdate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 35) {
+                        if (cellValue.length() > 3) {
+                            entity.setWatervalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 36) {
+                        if (cellValue.length() > 3) {
+                            entity.setWaterreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 37) {
+                        if (cellValue.length() > 3) {
+                            entity.setEnergydate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 38) {
+                        if (cellValue.length() > 3) {
+                            entity.setEnergyvalidity(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
+                        }
+                    } else if (j == 39) {
+                        if (cellValue.length() > 3) {
+                            entity.setEnergyreview(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(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 (TWorklicenseCertificate t : list
+        ) {
+            failNum++;
+            try {
+                tWorklicenseCertificateService.updateTWorklicenseCertificate(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));
+        return AjaxResult.success(String.valueOf(successNumber), failRow);
+    }
+
     /**
      * 同步人员数据
      */

+ 15 - 20
master/src/main/java/com/ruoyi/project/training/domain/TWorklicenseCertificate.java

@@ -52,23 +52,23 @@ public class TWorklicenseCertificate extends BaseEntity
     private String worklicenseIdnum;
 
     /** 开工锅炉 */
-    @Excel(name = "开工锅炉")
+    @Excel(name = "开工锅炉", readConverterExp = "0=NO,1=YES")
     private String boiler;
 
     /** 裂解 */
-    @Excel(name = "裂解")
+    @Excel(name = "裂解", readConverterExp = "0=NO,1=YES")
     private String cracking;
 
     /** 热区 */
-    @Excel(name = "热区")
+    @Excel(name = "热区", readConverterExp = "0=NO,1=YES")
     private String hotarea;
 
     /** 冷区 */
-    @Excel(name = "冷区")
+    @Excel(name = "冷区", readConverterExp = "0=NO,1=YES")
     private String coldarea;
 
     /** 芳烃 */
-    @Excel(name = "芳烃")
+    @Excel(name = "芳烃", readConverterExp = "0=NO,1=YES")
     private String aromatic;
 
     /** 取复证日期 */
@@ -140,8 +140,8 @@ public class TWorklicenseCertificate extends BaseEntity
     @Excel(name = "复审", width = 30, dateFormat = "yyyy-MM-dd")
     private Date crackingreview;
 
-    /** 裂化工艺 */
-    @Excel(name = "裂化工艺")
+    /** 制冷与空调作业 */
+    @Excel(name = "制冷与空调作业")
     private String refrigeration;
 
     /** 有效期 */
@@ -154,9 +154,9 @@ public class TWorklicenseCertificate extends BaseEntity
     @Excel(name = "复审", width = 30, dateFormat = "yyyy-MM-dd")
     private Date refrigerationview;
 
-    /** 最近培训日期 */
+    /** 班组长安全生产合格证最近培训日期 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
-    @Excel(name = "最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "班组长安全生产合格证最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date foremantrain;
 
     /** 本次复审 */
@@ -169,14 +169,14 @@ public class TWorklicenseCertificate extends BaseEntity
     @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")
+    @Excel(name = "建筑消防取证日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date fireProtection;
 
-    /** 最近培训日期 */
+    /** 锅炉水质处理最近培训日期 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
-    @Excel(name = "最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "锅炉水质处理最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date waterdate;
 
     /** 有效期 */
@@ -189,9 +189,9 @@ public class TWorklicenseCertificate extends BaseEntity
     @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")
+    @Excel(name = "锅炉能效最近培训日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date energydate;
 
     /** 有效期 */
@@ -208,25 +208,20 @@ public class TWorklicenseCertificate extends BaseEntity
     private Long delFlag;
 
     /** 创建人 */
-    @Excel(name = "创建人")
     private String createrCode;
 
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
-    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date createdate;
 
     /** 修改人 */
-    @Excel(name = "修改人")
     private String updaterCode;
 
     /** 修改时间 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
-    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date updatedate;
 
     /** 部门编号 */
-    @Excel(name = "部门编号")
     private Long deptId;
 
     public void setId(Long id)

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

@@ -20,6 +20,8 @@ public interface TWorklicenseCertificateMapper
      */
     public TWorklicenseCertificate selectTWorklicenseCertificateById(Long id);
 
+    public TWorklicenseCertificate selectTWorklicenseCertificateByEmployeeid(Long staffid);
+
     /**
      * 查询上岗证/作业证书一览列表
      * 

+ 5 - 0
master/src/main/resources/mybatis/training/TWorklicenseCertificateMapper.xml

@@ -124,6 +124,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectTWorklicenseCertificateVo"/>
         where id = #{id}
     </select>
+
+    <select id="selectTWorklicenseCertificateByEmployeeid" parameterType="Long" resultMap="TWorklicenseCertificateResult">
+        <include refid="selectTWorklicenseCertificateVo"/>
+        where employeeid = #{employeeid}
+    </select>
         
     <insert id="insertTWorklicenseCertificate" parameterType="TWorklicenseCertificate">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">

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


+ 76 - 21
ui/src/views/training/worklicensecertificate/index.vue

@@ -74,6 +74,26 @@
           size="mini"
           @click="syncStaff"
         >同步人员数据</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['training:worklicensecertificate:import']"
+        >导入</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['training:worklicensecertificate:export']"
+        >导出</el-button>
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -653,6 +673,39 @@
       </div>
     </el-dialog>
     <staff-resume v-if="staffResumeVisible" ref="staffResume"></staff-resume>
+    <!-- 用户导入对话框 -->
+    <el-dialog  :close-on-click-modal="false" 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”格式文件!') }}</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>
   </div>
 </template>
 
@@ -692,21 +745,24 @@ export default {
       clientHeight:300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/training/worklicensecertificate/importData"
-        },
+      // 用户导入参数
+      upload: {
+        downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
+        //下载模板类型
+        type: "worklicenseCertificate",
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/training/worklicensecertificate/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -1277,12 +1333,11 @@ export default {
           this.upload.title = "用户导入";
           this.upload.open = true;
       },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
+
+    /** 下载模板操作 */
+    importTemplate() {
+      this.$refs['downloadFileForm'].submit()
+    },
       // // 文件上传中处理
       // handleFileUploadProgress(event, file, fileList) {
       //     this.upload.isUploading = true;