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.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.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.Constants;
|
import com.nanometer.smartlab.util.FacesUtils;
|
import com.nanometer.smartlab.util.IDUtils;
|
import com.nanometer.smartlab.util.MD5Utils;
|
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.context.annotation.Scope;
|
import org.springframework.stereotype.Controller;
|
|
import javax.annotation.Resource;
|
import java.io.InputStream;
|
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;
|
|
private LazyDataModel<SysUser> dataModel;
|
private SysUser sysUser;
|
private List<SysUser> selectedList;
|
private List<ApproverFlag> approverFlagSelectList;
|
private List<SeeFlag> 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<BaseMeta> codeList;
|
private List<BaseRole> roleList;
|
private List<Waster> wasterSelectList;
|
|
public List<BaseRole> getRoleList() {
|
return roleList;
|
}
|
|
public void setRoleList(List<BaseRole> roleList) {
|
this.roleList = roleList;
|
}
|
|
public List<BaseMeta> getCodeList() {
|
return codeList;
|
}
|
|
public void setCodeList(List<BaseMeta> 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();
|
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<SysUser> userList=new ArrayList<>();
|
System.out.println("totalRows=========="+totalRows);
|
String errorMsg = null;
|
|
for (int i = 1; i < totalRows; i++) {
|
row=sheet.getRow(i);
|
totalCells= row.getLastCellNum();
|
List<String> valuesList=new ArrayList<String>();
|
for (int t = 0; t < totalCells; t++) {
|
String cellInfo="";
|
String groupId = "";
|
|
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){
|
groupId = "user_company";
|
}else if(t == 1){
|
groupId = "user_department";
|
}
|
String id=getId(groupId,cellInfo);
|
if(id == "" && cellInfo!=null && cellInfo!="" ) {
|
BaseMeta baseMeta = new BaseMeta();
|
baseMeta.setId(IDUtils.uuid());
|
baseMeta.setGroupId(groupId);
|
baseMeta.setMetaValue(cellInfo);
|
baseMeta.setMetaKey(cellInfo);
|
baseMetaService.insertBaseMeta(baseMeta);
|
id = baseMeta.getId();
|
this.codeList.add(baseMeta);
|
}
|
valuesList.add(id);
|
}else if(t==10){
|
String id=getRoleId(cellInfo);
|
if(id == "" && cellInfo!=null && cellInfo!="" ){
|
BaseRole role=new BaseRole();
|
role.setId(IDUtils.uuid());
|
role.setName(cellInfo);
|
role.setValidFlag(ValidFlag.VALID);
|
}
|
valuesList.add(id);
|
}else if(t==6){
|
cellInfo=new BigDecimal(""+cellInfo).toString();
|
valuesList.add(cellInfo);
|
}
|
else {
|
valuesList.add(cellInfo);
|
}
|
|
}
|
System.out.println("size : "+valuesList.size());
|
System.out.println("value : "+valuesList);
|
SysUser sysUser=new SysUser();
|
sysUser.setCompany(valuesList.get(0));//单位
|
sysUser.setDepartment(valuesList.get(1));//部门
|
sysUser.setArp((int)Double.parseDouble(valuesList.get(2))+"");//arp号
|
sysUser.setName(valuesList.get(3));//姓名
|
sysUser.setAccount(valuesList.get(4));//账号
|
|
String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
|
if (!valuesList.get(5).matches(PW_PATTERN)){
|
errorMsg += "第"+i+"行,密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上";
|
}
|
|
sysUser.setPassword(MD5Utils.encode(valuesList.get(5))+"");//密码
|
|
//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{
|
FacesUtils.warn("第"+i+"行,id卡号需要8位或者20位");
|
return;
|
}
|
}
|
sysUser.setPhone(valuesList.get(6));//电话
|
sysUser.setEmail(valuesList.get(7));//邮箱
|
sysUser.setPoint((int)Double.parseDouble(valuesList.get(9)));//分数
|
sysUser.setRoleId(valuesList.get(10));//角色
|
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).replace(" ","").isEmpty()){
|
String[] projects = valuesList.get(13).split(",");
|
for (String project : projects) {
|
//不存再就直接推出
|
if (!sysProjectService.isExistProject(project)) {
|
throw new Exception("课题组不存在,(" + i + "行)");
|
}
|
}
|
//都存在就设置
|
sysUser.setProject(valuesList.get(13).replace(" ",""));
|
}else{
|
sysUser.setProject(null);
|
}
|
|
sysUser.setValidFlag(ValidFlag.VALID);
|
userList.add(sysUser);
|
}
|
if (errorMsg != null){
|
FacesUtils.warn(errorMsg);
|
}
|
|
this.sysUserService.insertSysUserList(userList);
|
System.out.println("=========导入结束=====");
|
FacesUtils.info("导入成功。");
|
}catch (Exception ex) {
|
ex.printStackTrace();
|
FacesUtils.info("导入失败。");
|
}
|
}
|
|
public String getRoleId(String name){
|
String id="";
|
for (int i=0;i<this.roleList.size();i++){
|
if(this.roleList.get(i).getName().equals(name)){
|
id=this.roleList.get(i).getId();
|
}
|
}
|
return id;
|
}
|
|
//判断字典表里是否存在这组键值对
|
public String getId(String groupId,String metaValue){
|
String id="";
|
if(this.codeList.size()>0){
|
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;
|
}
|
if(!org.apache.commons.lang.StringUtils.isNotBlank(sysUser.getProject())){
|
sysUser.setProject(null);
|
}
|
|
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号
|
if (this.sysUserService.isSysUserExist(this.sysUser.getArp(), null, null, 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);
|
|
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 LazyDataModel<SysUser> getDataModel() {
|
if (this.dataModel == null) {
|
this.dataModel = new LazyDataModel<SysUser>() {
|
@Override
|
public List<SysUser> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
|
List<SysUser> list = null;
|
try {
|
int count = sysUserService.getSysUserTotalCount(arp, name,departmentName);
|
this.setRowCount(count);
|
if (count > 0) {
|
list = sysUserService.getSysUserList(arp, name,departmentName, first, pageSize);
|
}
|
} catch (Exception e) {
|
logger.error(e);
|
}
|
return list;
|
}
|
|
@Override
|
public SysUser getRowData(String rowKey) {
|
Iterator<SysUser> iterator = this.iterator();
|
if (iterator != null) {
|
SysUser su = null;
|
while (iterator.hasNext()) {
|
su = iterator.next();
|
if (rowKey.equals(su.getId())) {
|
return su;
|
}
|
}
|
}
|
return null;
|
}
|
};
|
}
|
return dataModel;
|
}
|
|
public SysUser getSysUser() {
|
return sysUser;
|
}
|
|
public void setSysUser(SysUser sysUser) {
|
this.sysUser = sysUser;
|
}
|
|
public List<SysUser> getSelectedList() {
|
return selectedList;
|
}
|
|
public void setSelectedList(List<SysUser> selectedList) {
|
this.selectedList = selectedList;
|
}
|
|
public int getAction() {
|
return action;
|
}
|
|
public List<ApproverFlag> getApproverFlagSelectList() {
|
if (this.approverFlagSelectList == null) {
|
this.approverFlagSelectList = Arrays.asList(ApproverFlag.values());
|
}
|
|
return approverFlagSelectList;
|
}
|
|
public List<SeeFlag> getSeeFlagSelectList() {
|
if (this.seeFlagSelectList == null) {
|
this.seeFlagSelectList = Arrays.asList(SeeFlag.values());
|
}
|
|
return seeFlagSelectList;
|
}
|
|
public List<Waster> 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;
|
}
|
}
|