package com.nanometer.smartlab.controller; import com.alibaba.druid.util.StringUtils; import com.nanometer.smartlab.entity.BaseMeta; import com.nanometer.smartlab.entity.BaseRole; import com.nanometer.smartlab.entity.SysProject; import com.nanometer.smartlab.entity.SysUser; import com.nanometer.smartlab.entity.enumtype.ApproverFlag; import com.nanometer.smartlab.entity.enumtype.SeeFlag; import com.nanometer.smartlab.entity.enumtype.ValidFlag; import com.nanometer.smartlab.entity.enumtype.Waster; import com.nanometer.smartlab.realm.ShiroDbRealm; import com.nanometer.smartlab.service.BaseMetaService; import com.nanometer.smartlab.service.BaseRoleService; import com.nanometer.smartlab.service.SysProjectService; import com.nanometer.smartlab.service.SysUserService; import com.nanometer.smartlab.util.*; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.primefaces.context.RequestContext; import org.primefaces.event.FileUploadEvent; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import org.primefaces.model.UploadedFile; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.nio.charset.CharacterCodingException; import java.security.NoSuchAlgorithmException; import java.util.*; /** * Created by johnny on 17/11/20. */ @Controller @Scope("session") public class UserMngController extends BaseController { private static Logger logger = Logger.getLogger(UserMngController.class); @Resource private SysUserService sysUserService; @Resource private BaseMetaService baseMetaService; @Resource private BaseRoleService baseRoleService; @Resource private SysProjectService sysProjectService; @Value("${personImgPath}") private String personImgPath; private LazyDataModel dataModel; private SysUser sysUser; private List selectedList; private List approverFlagSelectList; private List seeFlagSelectList; private String arp; private String name; private String username; private String oriPassword; private String newPassword; private String newPasswordSecond; private String departmentName; private String editPasswor; private List codeList; private List roleList; private List wasterSelectList; private String projectName; private Long projectId; private String company; private BaseRole role; public List getRoleList() { return roleList; } public void setRoleList(List roleList) { this.roleList = roleList; } public List getCodeList() { return codeList; } public void setCodeList(List codeList) { this.codeList = codeList; } public String getEditPasswor() { return editPasswor; } public void setEditPasswor(String editPasswor) { this.editPasswor = editPasswor; } private int action; public void onNewBtnClick() { this.sysUser = new SysUser(); if (this.selectedList.size() > 1) { FacesUtils.warn("不能多选"); return; } if (this.selectedList.size() == 1) { this.sysUser = this.sysUserService.getSysUser(this.selectedList.get(0).getId()); this.sysUser.setId(null); } this.action = Constants.ACTION_ADD; } public void updatePassword() { this.username = getUser().getName(); } public void uploadFile(FileUploadEvent event) { System.out.println("=========导入开始====="); this.codeList=baseMetaService.getAllBaseMeta(); this.roleList=baseRoleService.getBaseRoleList(null,null,null,null); try{ UploadedFile file = event.getFile(); InputStream is=file.getInputstream(); boolean isExcel2003=true; if (file.getFileName().matches("^.+\\.(?i)(xlsx)$")) { isExcel2003 = false; } Workbook wb=null; if(isExcel2003) { wb = new HSSFWorkbook(is); }else{ wb = new XSSFWorkbook(is); } Sheet sheet=wb.getSheetAt(0); Row row=null; int totalCells=0; int totalRows = sheet.getPhysicalNumberOfRows(); List userList=new ArrayList<>(); System.out.println("totalRows=========="+totalRows); String errorMsg = ""; for (int i = 1; i < totalRows; i++) { row=sheet.getRow(i); totalCells= row.getLastCellNum(); List valuesList=new ArrayList(); for (int t = 0; t < totalCells; t++) { String cellInfo=""; String groupCode = ""; if (row.getCell(t) != null) { if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) { cellInfo = String.valueOf(row.getCell(t).getNumericCellValue()); } else { cellInfo = row.getCell(t).getStringCellValue(); } } if(t == 0 || t == 1){ if( t == 0){ groupCode = "user_company"; }else if(t == 1){ groupCode = "user_department"; } Long id=getId(groupCode,cellInfo); if(id == null && cellInfo!=null && cellInfo!="" ) { BaseMeta baseMeta = new BaseMeta(); // baseMeta.setId(IDUtils.uuid()); baseMeta.setGroupCode(groupCode); baseMeta.setMetaValue(cellInfo); baseMeta.setMetaKey(cellInfo); baseMetaService.insertBaseMeta(baseMeta); id = baseMeta.getId(); this.codeList.add(baseMeta); } valuesList.add(String.valueOf(id)); }else if(t==10){ Long id=getRoleId(cellInfo); if(id == null && cellInfo!=null && cellInfo!="" ){ BaseRole role=new BaseRole(); //role.setId(IDUtils.uuid()); role.setName(cellInfo); role.setValidFlag(ValidFlag.VALID); } valuesList.add(String.valueOf(id)); }else if(t==6){ if (!StringUtils.isEmpty(cellInfo)){ cellInfo=new BigDecimal(""+cellInfo).toString(); valuesList.add(cellInfo); }else{ valuesList.add(cellInfo); } } else { valuesList.add(cellInfo); } } SysUser sysUser=new SysUser(); if (valuesList.get(0) != null && !StringUtils.isEmpty(valuesList.get(0))){ sysUser.setCompany(Long.valueOf(valuesList.get(0)));//单位 }else { errorMsg += "第"+i+"行,单位不能为空"; continue; } if (valuesList.get(1) != null && !StringUtils.isEmpty(valuesList.get(1))){ sysUser.setDepartment(Long.valueOf(valuesList.get(1)));//部门 }else { errorMsg += "第"+i+"行,部门不能为空"; continue; } if (valuesList.get(2) != null && !StringUtils.isEmpty(valuesList.get(2))){ sysUser.setArp((int)Double.parseDouble(valuesList.get(2))+"");//arp号 }else { errorMsg += "第"+i+"行,arp不能为空"; continue; } if (valuesList.get(3) != null && !StringUtils.isEmpty(valuesList.get(3))){ sysUser.setName(valuesList.get(3));//姓名 }else { errorMsg += "第"+i+"行,姓名不能为空"; continue; } if (valuesList.get(4) != null && !StringUtils.isEmpty(valuesList.get(4))){ sysUser.setAccount(valuesList.get(4));//账号 }else { errorMsg += "第"+i+"行,账号不能为空"; continue; } if (valuesList.get(5) != null && !StringUtils.isEmpty(valuesList.get(5))){ String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}"; if (!valuesList.get(5).matches(PW_PATTERN)){ errorMsg += "第"+i+"行,密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上"; continue; } sysUser.setPassword(MD5Utils.encode(valuesList.get(5))+"");//密码 }else { errorMsg += "第"+i+"行,密码不能为空"; continue; } //valuesList.get(8) id卡号检查 if (valuesList.get(8) != null && valuesList.get(8).length()>0){ //大写转换 String idCardUpper = valuesList.get(8).trim().toUpperCase(); //8位和20位下8位才做补齐20位,否则提示输入id卡号8位或者20位 if (idCardUpper.length() == 8 ||idCardUpper.length() == 20) { if (idCardUpper.length() == 8){ //8位补齐20位,否则不做操作 String idCard = "E0E01E000A" + idCardUpper + "01"; sysUser.setIdCard(idCard);//id卡号 }else { sysUser.setIdCard(idCardUpper);//id卡号 } }else{ errorMsg += ("第"+i+"行,id卡号需要8位或者20位"); continue; } } // 检查ARP号 if (this.sysUserService.isSysUserExist(sysUser.getArp(), null, null, null)) { errorMsg += ("第"+i+"行,ARP已存在"); continue; } // 检查登陆账号 if (this.sysUserService.isSysUserExist(null, sysUser.getAccount(), null, null)) { errorMsg += ("第"+i+"行,登陆账号已存在"); continue; } if (!StringUtils.isEmpty(sysUser.getIdCard()) && this.sysUserService.isSysUserExist(null, null, sysUser.getIdCard(), null)) { errorMsg += ("第"+i+"行,ID卡号已存在"); continue; } sysUser.setPhone(valuesList.get(6));//电话 sysUser.setEmail(valuesList.get(7));//邮箱 if (valuesList.get(9) != null){ sysUser.setPoint((int)Double.parseDouble(valuesList.get(9)));//分数 }else { errorMsg += "第"+i+"行,分数不能为空"; continue; } if (valuesList.get(10) != null){ sysUser.setRoleId(Long.valueOf(valuesList.get(10)));//角色 }else { errorMsg += "第"+i+"行,角色不能为空"; continue; } if (valuesList.get(12) == null){ errorMsg += "第"+i+"行,可见度不能为空"; continue; } if(valuesList.get(11).equals("是")){ sysUser.setApproverFlag(ApproverFlag.YES); }else { sysUser.setApproverFlag(ApproverFlag.NO); } if(valuesList.get(12).equals(SeeFlag.MANAGE.getText())){ sysUser.setSeeFlag(SeeFlag.MANAGE); } if(valuesList.get(12).equals(SeeFlag.NORMAL.getText())){ sysUser.setSeeFlag(SeeFlag.NORMAL); } if(valuesList.get(12).equals(SeeFlag.SOFTER.getText())){ sysUser.setSeeFlag(SeeFlag.SOFTER); } if(valuesList.get(12).equals(SeeFlag.LEADING.getText())){ sysUser.setSeeFlag(SeeFlag.LEADING); } if (valuesList.size() > 13 && valuesList.get(13).trim()!=""){ SysProject project=sysProjectService.getProjectByName(valuesList.get(13)); if (project==null) { errorMsg += ("课题组不存在,(" + i + "行)"); continue; } //都存在就设置 sysUser.setProjectId(project.getId()); } sysUser.setValidFlag(ValidFlag.VALID); userList.add(sysUser); } this.sysUserService.insertSysUserList(userList); System.out.println("=========导入结束====="); if (errorMsg != null && !StringUtils.isEmpty(errorMsg)){ FacesUtils.warn(errorMsg); }else { FacesUtils.info("导入成功。"); } }catch (Exception ex) { ex.printStackTrace(); FacesUtils.info("导入失败。"); } } public Long getRoleId(String name){ Long id=null; for (int i=0;i0){ for (BaseMeta bm:this.codeList){ if(bm.getGroupId().equals(groupId)&&bm.getMetaValue().equals(metaValue)){ id=bm.getId(); } } } return id; } public String updatePasswordAction() throws NoSuchAlgorithmException, CharacterCodingException { this.sysUser = getUser(); if(!this.sysUser.getPassword().equals(MD5Utils.encode(this.oriPassword))) { FacesUtils.warn("原密码错误,请重新输入!"); return null; } if(!this.newPassword.equals(this.newPasswordSecond)) { FacesUtils.warn("新密码不一致,请重新输入。"); return null; } String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}"; if (!this.newPassword.matches(PW_PATTERN)){ FacesUtils.warn("密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上"); return null; } // this.sysUser.setName(username); this.sysUser.setPassword(MD5Utils.encode(this.newPassword)); this.sysUserService.updateSysUser(sysUser); this.newPassword = null; this.oriPassword = null; this.newPasswordSecond = null; FacesUtils.info("修改成功,请重新登录!"); RequestContext.getCurrentInstance().execute("PF('dialogPassword').hide()"); RequestContext.getCurrentInstance().execute("PF('changePassword').hide()"); this.getSubject().logout(); return Constants.PAGE_LOGIN + Constants.REDIRECT; } public void onEditBtnClick() { if (this.selectedList == null || this.selectedList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectedList.size() > 1) { FacesUtils.warn("只能选择一个数据进行修改。"); return; } this.sysUser = this.sysUserService.getSysUser(this.selectedList.get(0).getId()); this.editPasswor=this.sysUser.getPassword(); this.action = Constants.ACTION_EDIT; RequestContext.getCurrentInstance().execute("PF('dialog').show()"); } public void onSaveBtnClick() { try { // 新建 if (this.action == Constants.ACTION_ADD) { if (this.sysUser == null) { FacesUtils.warn("新建对象为空。"); return; } // 检查ARP号 if (this.sysUserService.isSysUserExist(this.sysUser.getArp(), null, null, null)) { FacesUtils.warn("ARP已存在。"); return; } // 检查登陆账号 if (this.sysUserService.isSysUserExist(null, this.sysUser.getAccount(), null, null)) { FacesUtils.warn("登陆账号已存在。"); return; } // 检查idCard if (this.sysUser.getIdCard() != null && this.sysUser.getIdCard().length()>0){ String idCardUpper = sysUser.getIdCard().trim().toUpperCase(); //8位和20位下8位才做补齐20位,否则提示输入id卡号8位或者20位 if (idCardUpper.length() == 8 ||idCardUpper.length() == 20) { if (idCardUpper.length() == 8){ //8位补齐20位,否则不做操作 this.sysUser.setIdCard("E0E01E000A" + idCardUpper + "01"); }else{ //20位 this.sysUser.setIdCard(idCardUpper); } }else{ FacesUtils.warn("id卡号8位或者20位"); return; } } if (!StringUtils.isEmpty(this.sysUser.getIdCard()) && this.sysUserService.isSysUserExist(null, null, this.sysUser.getIdCard(), null)) { FacesUtils.warn("ID卡号已存在。"); return; } String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}"; if (!sysUser.getPassword().matches(PW_PATTERN)){ FacesUtils.warn("密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上"); return; } sysUser.setPassword(MD5Utils.encode(sysUser.getPassword())); this.sysUserService.insertSysUser(sysUser); FacesUtils.info("新建成功。"); RequestContext.getCurrentInstance().execute("PF('dialog').hide()"); // 修改 } else if (this.action == Constants.ACTION_EDIT) { if (this.sysUser == null) { FacesUtils.warn("修改对象为空。"); return; } // 检查ARP号 //除自己外的arp // if (this.sysUserService.isSysUserExist(this.sysUser.getArp(), null, null, this.sysUser.getId())) { // FacesUtils.warn("ARP已存在。"); // return; // } List list = sysUserService.getUserByArp(this.sysUser.getArp()); assert list.size() < 2; if (list.size() > 0 && !list.get(0).getId().equals(this.sysUser.getId())) { FacesUtils.warn("ARP已存在。"); return; } // 检查登陆账号 if (this.sysUserService.isSysUserExist(null, this.sysUser.getAccount(), null, this.sysUser.getId())) { FacesUtils.warn("登陆账号已存在。"); return; } // 检查idCard if (this.sysUser.getIdCard() != null && this.sysUser.getIdCard().length()>0){ String idCardUpper = sysUser.getIdCard().trim().toUpperCase(); //8位和20位下8位才做补齐20位,否则提示输入id卡号8位或者20位 if (idCardUpper.length() == 8 ||idCardUpper.length() == 20) { if (idCardUpper.length() == 8){ //8位补齐20位,否则不做操作 this.sysUser.setIdCard("E0E01E000A" + idCardUpper + "01"); }else{ //20位 this.sysUser.setIdCard(idCardUpper); } }else{ FacesUtils.warn("id卡号8位或者20位"); return; } } if(this.sysUser.getIdCard()==null || this.sysUser.getIdCard()==""){ }else { if (this.sysUserService.isSysUserExist(null, null, this.sysUser.getIdCard(), this.sysUser.getId())) { FacesUtils.warn("ID卡号已存在。"); return; } } if(sysUser.getPassword()==null || sysUser.getPassword().equals("")){ sysUser.setPassword(this.editPasswor); }else { String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}"; if (!sysUser.getPassword().matches(PW_PATTERN)){ FacesUtils.warn("密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上"); return; } sysUser.setPassword(MD5Utils.encode(sysUser.getPassword())); } this.sysUserService.updateSysUser(sysUser); ShiroDbRealm shiroDbRealm= SpringUtil.getBean("authorizationRealm",ShiroDbRealm.class); shiroDbRealm.removeUserCache(sysUser.getAccount()); FacesUtils.info("修改成功。"); RequestContext.getCurrentInstance().execute("PF('dialog').hide()"); } } catch (Exception e) { logger.error("操作失败。", e); FacesUtils.warn("操作失败。"); } } public void onDeleteBtnClick() { try { if (this.selectedList == null || this.selectedList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } this.sysUserService.deleteSysUser(this.selectedList); FacesUtils.info("删除成功。"); } catch (Exception e) { logger.error("操作失败。", e); FacesUtils.warn("操作失败。"); } } // 文件上传 public void handleImageUpload(FileUploadEvent event) { UploadedFile file = event.getFile(); try { // 1.上传文件 InputStream is = file.getInputstream(); String oldName = file.getFileName(); String newName = new Date().getTime() + oldName.substring(oldName.lastIndexOf(".")); String realPath = personImgPath; File dest = new File(realPath, newName); if (!dest.getParentFile().exists()) { boolean rel = dest.getParentFile().mkdirs(); if (!rel) { throw new Exception("文件夹创建失败"); } } OutputStream os = new FileOutputStream(dest); try { byte[] buffer = new byte[8 * 1024]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } // 更新用户url sysUser.setUrl("upload/upload/" + newName); // 清空图片文件以便再次上传 RequestContext.getCurrentInstance().update("dialogForm2"); // 更新用户表单 RequestContext.getCurrentInstance().update("dialogForm"); // 隐藏上传框 RequestContext.getCurrentInstance().execute("PF('imgDialog').hide()"); } catch (Exception e) { FacesUtils.warn("文件上传失败。"); throw e; } finally { if (is != null) { is.close(); } if (os != null) { os.close(); } } } catch (Exception e) { FacesUtils.warn("操作失败。"); return; } } public void initPage() { sysUser = sysUserService.getSysUser(getUser().getId()); role = baseRoleService.getRoleByUserId(sysUser.getId()); } public boolean isAccess(String info) { String permission = role.getBtnPermission(); if(StringUtils.isEmpty(permission)){ return true; }else{ return permission.contains(info); } } public LazyDataModel getDataModel() { if (this.dataModel == null) { this.dataModel = new LazyDataModel() { @Override public List load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) { List list = null; try { //做可见人员过滤 String userPermission = role.getUserPermission(); userPermission="11"; if (userPermission.contains("自己")) { list = Collections.singletonList(sysUserService.getSysUser(UserMngController.this.sysUser.getId())); this.setRowCount(1); }else if (userPermission.contains("课题组")){ projectId = sysUser.getProjectId(); int count = sysUserService.getUserCountInProject(arp, name,departmentName,projectName,company); this.setRowCount(count); if (count > 0) { list = sysUserService.getUserInProject(arp, name,departmentName,projectName,company, first, pageSize); } }else{ int count = sysUserService.getSysUserTotalCount(arp, name,departmentName,projectName,company); this.setRowCount(count); if (count > 0) { list = sysUserService.getSysUserList(arp, name,departmentName,projectName,company, first, pageSize); } } selectedList = new ArrayList<>(); } catch (Exception e) { logger.error(e); } return list; } @Override public SysUser getRowData(String rowKey) { // Iterator iterator = this.iterator(); // if (iterator != null) { // SysUser su = null; // while (iterator.hasNext()) { // su = iterator.next(); // if (rowKey.equals(su.getId())) { // return su; // } // } // } Long id=Long.valueOf(rowKey); return sysUserService.getSysUser(id); } }; } return dataModel; } public void exportLab2Excel(){ try { List list = sysUserService.getExportUserList(arp, name,departmentName,projectId,company); sysUserService.exportUser2Excel(list); FacesUtils.info("导出成功"); }catch (Exception e){ e.printStackTrace(); FacesUtils.warn("导出失败"); } } public SysUser getSysUser() { return sysUser; } public void setSysUser(SysUser sysUser) { this.sysUser = sysUser; } public List getSelectedList() { return selectedList; } public void setSelectedList(List selectedList) { this.selectedList = selectedList; } public int getAction() { return action; } public List getApproverFlagSelectList() { if (this.approverFlagSelectList == null) { this.approverFlagSelectList = Arrays.asList(ApproverFlag.values()); } return approverFlagSelectList; } public List getSeeFlagSelectList() { if (this.seeFlagSelectList == null) { this.seeFlagSelectList = Arrays.asList(SeeFlag.values()); } return seeFlagSelectList; } public List getWasterSelectList() { if (this.wasterSelectList == null) { this.wasterSelectList = Arrays.asList(Waster.values()); } return wasterSelectList; } public String getArp() { return arp; } public void setArp(String arp) { this.arp = arp; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getOriPassword() { return oriPassword; } public void setOriPassword(String oriPassword) { this.oriPassword = oriPassword; } public String getNewPassword() { return newPassword; } public void setNewPassword(String newPassword) { this.newPassword = newPassword; } public String getNewPasswordSecond() { return newPasswordSecond; } public void setNewPasswordSecond(String newPasswordSecond) { this.newPasswordSecond = newPasswordSecond; } public String getDepartmentName() { return departmentName; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public Long getProjectId() { return projectId; } public void setProject(Long projectId) { this.projectId = projectId; } public String getProjectName(){ return this.projectName; } public void setProjectName(String projectName){ this.projectName=projectName; } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } }