Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

[user3] 4 éve
szülő
commit
32aa48cfb5

+ 2 - 2
src/main/java/com/jeeplus/common/utils/ThisLocalityDownloadUtil.java

@@ -23,10 +23,10 @@ public class ThisLocalityDownloadUtil {
             Boolean isWindows = System.getProperty("os.name").toLowerCase().contains("linux");
             String path = "";
             if(!isWindows){
-                path = filePath+"WEB-INF/classes/dot/"+fileName;
+                path = filePath+"dot/"+fileName;
             }else{
                 //如果是linux系统 则需要在路径前加上一个 /
-                path = "/"+filePath+"WEB-INF/classes/dot/"+fileName;
+                path = "/"+filePath+"dot/"+fileName;
             }
             downCfg(fileName, request, response);
             OutputStream out;

+ 2 - 0
src/main/java/com/jeeplus/modules/workstaff/dao/WorkStaffBasicInfoDao.java

@@ -82,4 +82,6 @@ public interface WorkStaffBasicInfoDao extends CrudDao<WorkStaffBasicInfo> {
      * @return
      */
     Integer updateAuditUser(WorkStaffBasicInfo workStaffBasicInfo);
+
+    List<WorkStaffBasicInfo> getByName(String name);
 }

+ 21 - 1
src/main/java/com/jeeplus/modules/workstaff/dao/WorkStaffCertificateDao.java

@@ -6,6 +6,9 @@ package com.jeeplus.modules.workstaff.dao;
 import com.jeeplus.common.persistence.CrudDao;
 import com.jeeplus.common.persistence.annotation.MyBatisDao;
 import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
+import com.jeeplus.modules.workstaff.entity.WorkStaffCertificateImport;
+
+import java.util.List;
 
 /**
  * 执业资格证书DAO接口
@@ -15,5 +18,22 @@ import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
 @MyBatisDao
 public interface WorkStaffCertificateDao extends CrudDao<WorkStaffCertificate> {
     int updateFalt(String id);
-	
+
+    /**
+     * 根据用户id查询对应数据信息
+     * @param userId
+     * @return
+     */
+    List<WorkStaffCertificate> getByUserId(String userId);
+    /**
+     * 批量添加职业资格信息添加
+     * @param info
+     */
+    void saveImport(WorkStaffCertificateImport info);
+
+    /**
+     * 修改批量添加职业资格信息
+     * @param info
+     */
+    void updateImport(WorkStaffCertificateImport info);
 }

+ 150 - 0
src/main/java/com/jeeplus/modules/workstaff/entity/WorkStaffCertificateImport.java

@@ -0,0 +1,150 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.workstaff.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+
+/**
+ * 执业资格证书Entity
+ * @author ssrh
+ * @version 2018-07-27
+ */
+public class WorkStaffCertificateImport extends DataEntity<WorkStaffCertificateImport> {
+
+	private static final long serialVersionUID = 1L;
+	private String staffId;		// 员工ID
+	private String userName;		// 员工名称
+	private String name;		// 证书名称
+	private String num;		// 证书编号
+	private String issuingAuthority;		// 发证机关
+	private Date issuingDate;		// 发证日期
+	private Date registDate;		// 注册日期
+	private String registNum;		// 注册证书编号
+	private String major;		// 专业
+	private String filePath;		// 文件
+    private String fileName;		// 文件名
+    private MultipartFile file;
+
+	public String getStaffId() {
+		return staffId;
+	}
+
+	public void setStaffId(String staffId) {
+		this.staffId = staffId;
+	}
+
+	public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    public WorkStaffCertificateImport() {
+		super();
+	}
+
+	public WorkStaffCertificateImport(String id){
+		super(id);
+	}
+
+	@ExcelField(title="员工名称", align=2, sort=1)
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+	
+	@ExcelField(title="证书名称", align=2, sort=2)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="证书编号", align=2, sort=3)
+	public String getNum() {
+		return num;
+	}
+
+	public void setNum(String num) {
+		this.num = num;
+	}
+
+	@ExcelField(title="专业", align=2, sort=4)
+	public String getMajor() {
+		return major;
+	}
+
+	public void setMajor(String major) {
+		this.major = major;
+	}
+
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="注册日期", align=2, sort=5)
+	public Date getRegistDate() {
+		return registDate;
+	}
+
+	public void setRegistDate(Date registDate) {
+		this.registDate = registDate;
+	}
+
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="发证日期", align=2, sort=6)
+	public Date getIssuingDate() {
+		return issuingDate;
+	}
+
+	public void setIssuingDate(Date issuingDate) {
+		this.issuingDate = issuingDate;
+	}
+	
+	@ExcelField(title="发证机关", align=2, sort=7)
+	public String getIssuingAuthority() {
+		return issuingAuthority;
+	}
+
+	public void setIssuingAuthority(String issuingAuthority) {
+		this.issuingAuthority = issuingAuthority;
+	}
+
+	public static long getSerialVersionUID() {
+		return serialVersionUID;
+	}
+
+	public String getRegistNum() {
+		return registNum;
+	}
+
+	public void setRegistNum(String registNum) {
+		this.registNum = registNum;
+	}
+
+	public String getFilePath() {
+		return filePath;
+	}
+
+	public void setFilePath(String filePath) {
+		this.filePath = filePath;
+	}
+}

+ 70 - 0
src/main/java/com/jeeplus/modules/workstaff/service/WorkStaffCertificateService.java

@@ -10,6 +10,7 @@ import java.lang.reflect.Method;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -22,9 +23,12 @@ import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.IdGen;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.modules.sys.dao.UserDao;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.workstaff.dao.WorkStaffBasicInfoDao;
 import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
+import com.jeeplus.modules.workstaff.entity.WorkStaffCertificateImport;
 import com.jeeplus.modules.workstaff.entity.WorkStaffEducation;
 import com.jeeplus.modules.workstaffachiveslog.entity.WorkStaffAchivesLog;
 import com.jeeplus.modules.workstaffachiveslog.service.WorkStaffAchivesLogService;
@@ -50,6 +54,8 @@ public class WorkStaffCertificateService extends CrudService<WorkStaffCertificat
     private WorkStaffAchivesLogService workStaffAchivesLogService;
     @Autowired
     private UserDao userDao;
+    @Autowired
+    private WorkStaffBasicInfoDao workStaffBasicInfoDao;
 	public WorkStaffCertificate get(String id) {
 		return super.get(id);
 	}
@@ -107,6 +113,70 @@ public class WorkStaffCertificateService extends CrudService<WorkStaffCertificat
         return flag;
     }
 
+    /**
+     * 导入职业资格文件处理
+     * @param list
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public Map<String,List<String>> saveByImport(List<WorkStaffCertificateImport> list){
+	    Map map =new HashMap();
+	    //没有该用户集合
+	    List<String> nullUser = Lists.newArrayList();
+	    //该名称成员数量大于1
+	    List<String> multitudeUser = Lists.newArrayList();
+	    //该名称成员信息修改list
+	    List<String> updateUser = Lists.newArrayList();
+	    Map<String,String> updateMap = new HashMap();
+        List<WorkStaffBasicInfo> userList = null;
+        for (WorkStaffCertificateImport entity : list) {
+            boolean flag = false;
+            //判断人员姓名是否为空,不为空则进行查询人员信息
+            if(StringUtils.isNotBlank(entity.getUserName())){
+                userList = workStaffBasicInfoDao.getByName(entity.getUserName());
+                if(0 == userList.size()){
+                    //将该成员名称添加到 没有该用户集合中
+                    nullUser.add(entity.getUserName());
+                }else if(1 == userList.size()){
+                    entity.setStaffId(userList.get(0).getId());
+                    //根据 职业资格名称查询字典表并比对当前人员是否已添加该职业资格信息
+                    List<WorkStaffCertificate> certificateList = dao.getByUserId(userList.get(0).getId());
+                    for (WorkStaffCertificate certificate : certificateList) {
+                        if(entity.getName().equals(certificate.getName())){
+                            entity.setId(certificate.getId());
+                            flag = true;
+                            break;
+                        }
+                    }
+                    if(flag){
+                        entity.preUpdate();
+                        dao.updateImport(entity);
+                        //查询updateMap中是否已含有相同人员被替换的职业资格证书名称的数据,有则再value值中进行添加新的数据
+                        String mapStr = updateMap.get(entity.getUserName());
+                        if(StringUtils.isNotBlank(mapStr)){
+                            updateMap.put(entity.getUserName(),mapStr +"、"+ entity.getName());
+                        }else{
+                            updateMap.put(entity.getUserName(),entity.getName());
+                        }
+                    }else{
+                        entity.preInsert();
+                        dao.saveImport(entity);
+                    }
+                }else{
+                    //将该成员名称添加到 该名称成员数量大于1集合中
+                    multitudeUser.add(entity.getUserName());
+                }
+            }
+        }
+        for (String key:updateMap.keySet()) {
+            updateUser.add(key+ ":" + updateMap.get(key));
+        }
+        map.put("nullUser",nullUser);
+        map.put("multitudeUser",multitudeUser);
+        map.put("updateUser",updateUser);
+	    return map;
+    }
+
     /*public String uploadFile(MultipartFile file, String filePath) {
         if (file != null && !file.isEmpty() &&file.getSize()>0) {
             String key = "";

+ 86 - 3
src/main/java/com/jeeplus/modules/workstaff/web/WorkStaffBasicInfoController.java

@@ -12,6 +12,7 @@ import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.MyBeanUtils;
 import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.ThisLocalityDownloadUtil;
 import com.jeeplus.common.utils.excel.ExportExcel;
 import com.jeeplus.common.utils.excel.ImportExcel;
 import com.jeeplus.common.web.BaseController;
@@ -26,9 +27,12 @@ import com.jeeplus.modules.sysimportinfo.service.SysImportInfoService;
 import com.jeeplus.modules.wexinpackage.access.service.WeChatCallbackService;
 import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
 import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workreceiptsregister.entity.ResponseEntity;
 import com.jeeplus.modules.workrelationship.entity.WorkRelationship;
 import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
+import com.jeeplus.modules.workstaff.entity.WorkStaffCertificateImport;
 import com.jeeplus.modules.workstaff.service.WorkStaffBasicInfoService;
+import com.jeeplus.modules.workstaff.service.WorkStaffCertificateService;
 import com.jeeplus.modules.workstaffachiveslog.dao.WorkStaffAchivesLogDao;
 import com.jeeplus.modules.workstaffachiveslog.entity.WorkStaffAchivesLog;
 import com.jeeplus.modules.workstaffachiveslog.service.WorkStaffAchivesLogService;
@@ -79,6 +83,8 @@ public class WorkStaffBasicInfoController extends BaseController {
 	private UserService userService;
     @Autowired
 	private WeChatCallbackService weChatCallbackService;
+    @Autowired
+	private WorkStaffCertificateService workStaffCertificateService;
 
 	@ModelAttribute
 	public WorkStaffBasicInfo get(@RequestParam(required=false) String id) {
@@ -281,9 +287,6 @@ public class WorkStaffBasicInfoController extends BaseController {
 	/**
 	 * 修改员工总审人员信息
 	 * @param workStaffBasicInfo
-	 * @param model
-	 * @param redirectAttributes
-	 * @param request
 	 * @return
 	 * @throws Exception
 	 */
@@ -514,6 +517,86 @@ public class WorkStaffBasicInfoController extends BaseController {
 		return "redirect:"+Global.getAdminPath()+"/workstaff/workStaffBasicInfo/achivelist?repage";
     }
 
+
+	/**
+	 * 下载导入员工信息数据模板
+	 */
+	@RequestMapping(value = "import/template")
+	public String importTemplate(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+			ThisLocalityDownloadUtil download = new ThisLocalityDownloadUtil();
+			download.download("职业资格证书表.xlsx",request,response);
+		} catch (Exception e) {
+			logger.error("职业资格证书表模板下载失败!",e);
+		}
+		return "redirect:"+Global.getAdminPath()+"/workstaff/workStaffBasicInfo/?repage";
+	}
+
+	/**
+	 * 导入职业资格证信息
+	 * @param file
+	 * @param redirectAttributes
+	 * @param request
+	 * @return
+	 */
+	@ResponseBody
+	@RequestMapping(value = "import", method=RequestMethod.POST)
+	public Object importWorkStaffBasicInfo(MultipartFile file, RedirectAttributes redirectAttributes,HttpServletRequest request) {
+		ResponseEntity<WorkStaffCertificateImport> responseEntity = new ResponseEntity<>();
+		int failureNum = 0;
+		try {
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<WorkStaffCertificateImport> list = ei.getDataList(WorkStaffCertificateImport.class);
+			List<WorkStaffCertificateImport> listAll = new ArrayList<>();
+			for (WorkStaffCertificateImport info : list) {
+				try {
+					if (StringUtils.isNotBlank(info.getUserName()) && null != info.getName() && null != info.getNum() && null != info.getIssuingDate()) {
+						listAll.add(info);
+					} else {
+						failureNum++;
+					}
+				} catch (Exception e) {
+					failureNum++;
+				}
+			}
+			//对数据进行新增修改处理
+			Map<String, List<String>> listMap = workStaffCertificateService.saveByImport(listAll);
+			List<String> nullUser = listMap.get("nullUser");
+			List<String> multitudeUser = listMap.get("multitudeUser");
+			List<String> updateUser = listMap.get("updateUser");
+			//计算新增和修改成功的数量(总量减去查无此人和人员数量超过1的数据量)
+			Integer successCount = listAll.size() -(nullUser.size() + multitudeUser.size());
+			//处理成员名数量超过1人的数据
+			String multitudeStr = String.join(",", multitudeUser);
+			//处理修改信息的数据
+			String updateStr = String.join(",", updateUser);
+
+			StringBuffer promptSB = new StringBuffer();
+			if(successCount>0){
+				promptSB.append("新增成功 "+ successCount + " 条数据。");
+			}
+			if(failureNum>0){
+				promptSB.append("有 "+ failureNum + " 条数据填写不正确,无法添加。");
+			}
+			if(nullUser.size()>0){
+				promptSB.append("有 "+ nullUser.size() + " 条数据查无此人,无法添加。");
+			}
+			if(multitudeUser.size()>0){
+				promptSB.append(multitudeStr + " 人员存在名称重复,无法添加。");
+			}
+			if(updateUser.size()>0){
+				promptSB.append(updateStr + " 数据已存在,已进行更新。");
+			}
+			responseEntity.setCode(0);
+			responseEntity.setMessage(promptSB.toString());
+		} catch (Exception e) {
+			responseEntity.setCode(400);
+			responseEntity.setMessage("导入执业资格证信息失败!");
+			logger.error("导入执业资格证信息失败!",e);
+		}
+		return responseEntity;
+	}
+
     @RequestMapping("idCard")
     @ResponseBody
 	public AjaxJson idCard(String idCard){

+ 6 - 0
src/main/resources/mappings/modules/workstaff/WorkStaffBasicInfoDao.xml

@@ -667,4 +667,10 @@
 		where user_id = #{userId}
 	</update>
 
+	<select id="getByName" resultType="WorkStaffBasicInfo">
+		SELECT *
+		FROM work_staff_basic_info a
+		WHERE a.name = #{name} and a.del_flag = 0
+	</select>
+
 </mapper>

+ 64 - 0
src/main/resources/mappings/modules/workstaff/WorkStaffCertificateDao.xml

@@ -170,4 +170,68 @@
 		WHERE id in (select l.son_id from work_staff_achives_log l
 		where l.staff_id=#{id} and l.module='执业资格证书' and l.type='删除')
 	</update>
+
+	<select id="getByUserId" resultType="WorkStaffCertificate" >
+		SELECT
+		<include refid="workStaffCertificateColumns"/>
+		FROM work_staff_certificate a
+		<include refid="workStaffCertificateJoins"/>
+		<where>
+			a.del_flag = 0 and a.staff_id = #{userId}
+		</where>
+	</select>
+
+	<insert id="saveImport">
+		INSERT INTO work_staff_certificate(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			staff_id,
+			name,
+			num,
+			issuing_authority,
+			issuing_date,
+			regist_date,
+			regist_num,
+			major,
+			file_name
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{staffId},
+			#{name},
+			#{num},
+			#{issuingAuthority},
+			#{issuingDate},
+			#{registDate},
+			#{registNum},
+			#{major},
+			#{fileName}
+		)
+	</insert>
+	<update id="updateImport">
+		UPDATE work_staff_certificate SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			staff_id = #{staffId},
+			name = #{name},
+			num = #{num},
+			issuing_authority = #{issuingAuthority},
+			issuing_date = #{issuingDate},
+			regist_date = #{registDate},
+			regist_num = #{registNum},
+			major = #{major},
+			file_name = #{fileName}
+		WHERE id = #{id}
+	</update>
 </mapper>

+ 58 - 0
src/main/webapp/WEB-INF/tags/table/importExcelBasic.tag

@@ -0,0 +1,58 @@
+<%@ tag language="java" pageEncoding="UTF-8"%>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<%@ attribute name="url" type="java.lang.String" required="true"%>
+<%-- 使用方法: 1.将本tag写在查询的form之前;2.传入controller的url --%>
+<button id="btnImport" class="nav-btn nav-btn-import" data-toggle="tooltip" data-placement="left" title="导入"><i class="fa fa-folder-open-o"></i> 导入</button>
+<div id="importBox" class="hide">
+	<form id="importForm2" action="${url}" method="post" enctype="multipart/form-data" onsubmit="loading('正在导入,请稍等...');">
+		<br/>
+		<input id="uploadFile" name="file" type="file" style="width:330px"/>导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!<br/>  
+
+	</form>
+</div>
+<script type="text/javascript">
+	$(document).ready(function() {
+		$("#btnImport").click(function(){
+			top.layer.open({
+				type: 1,
+				area: [500, 300],
+				title:"导入数据",
+				content:$("#importBox").html() ,
+				btn: ['下载模板','确定', '关闭'],
+				btn1: function(index, layero){
+					window.location.href='${url}/template';
+				},
+				btn2: function(index, layero){
+					var formData = new FormData();
+					formData.append("file",top.$("#uploadFile")[0].files[0]);
+					$.ajax({
+						type: 'post',
+						url: "${url}",
+						data: formData,
+						dataType: "json",
+						cache: false,
+						processData: false,
+						contentType: false,
+					}).success(function (result) {
+						if(result.code == 0){
+							top.layer.open({
+								title: '通知'
+								,content: result.message
+							});
+						}else {
+							top.layer.msg("导入文件异常:"+result.message);
+						}
+					}).error(function () {
+						top.layer.msg("导入文件失败!");
+					});
+					top.layer.close(index);
+				},
+				btn3: function(index){
+					top.layer.close(index);
+				}
+			});
+		});
+
+	});
+
+</script>

BIN
src/main/webapp/dot/职业资格证书表.xlsx


+ 1 - 0
src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoList.jsp

@@ -178,6 +178,7 @@
                     <shiro:hasPermission name="workstaff:workStaffBasicInfo:add">
                         <table:addRow url="${ctx}/workstaff/workStaffBasicInfo/form" title="员工信息"></table:addRow><!-- 增加按钮 -->
                     </shiro:hasPermission>
+                    <table:importExcelBasic url="${ctx}/workstaff/workStaffBasicInfo/import"></table:importExcelBasic><!-- 导入按钮 -->
                     <button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
                     <div style="clear: both;"></div>
                 </div>