476 lines
18 KiB
Java
476 lines
18 KiB
Java
package cn.palmte.work.service;
|
|
|
|
import cn.palmte.work.bean.RegexConstant;
|
|
import cn.palmte.work.bean.ResponseMsg;
|
|
import cn.palmte.work.model.*;
|
|
import cn.palmte.work.utils.DESCrypto;
|
|
import cn.palmte.work.utils.InterfaceUtil;
|
|
import cn.palmte.work.utils.StrKit;
|
|
import org.apache.commons.lang.RandomStringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import top.jfunc.common.db.QueryHelper;
|
|
import top.jfunc.common.db.bean.Page;
|
|
import top.jfunc.common.db.bean.Record;
|
|
import top.jfunc.common.db.utils.Pagination;
|
|
|
|
import java.beans.Transient;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Created by wang.lin@esstx.cn on 2018/4/20.
|
|
*/
|
|
@Service
|
|
public class AccountService {
|
|
private static final Logger logger = LoggerFactory.getLogger(AccountService.class);
|
|
|
|
@Autowired
|
|
public AdminRepository adminRepository;
|
|
|
|
@Autowired
|
|
public AdminRepositoryImpl adminRepositoryImpl;
|
|
|
|
@Autowired
|
|
public SysUserRoleRepository sysUserRoleRepository;
|
|
|
|
@Autowired
|
|
private Pagination pagination;
|
|
|
|
@Autowired
|
|
private SysRoleRepository sysRoleRepository;
|
|
|
|
@Autowired
|
|
private DeptRepository deptRepository;
|
|
|
|
@Autowired
|
|
private UserPositionRepository userPositionRepository;
|
|
|
|
public Page<Admin> getAdminList(Map<String, String> searchInfo, int pageSize, int pageNum) {
|
|
Page<Admin> adminList = adminRepositoryImpl.getAdminList(searchInfo, pageSize, pageNum);
|
|
return adminList;
|
|
}
|
|
|
|
public Page<Admin> list(Map<String, String> searchInfo, int pageNumber, int pageSize) {
|
|
QueryHelper queryHelper = new QueryHelper("*", "sys_user u");
|
|
queryHelper.addCondition("u.is_deleted = 0");
|
|
queryHelper.addCondition("u.id > 1");
|
|
queryHelper.addCondition(searchInfo.containsKey("realName"), "u.real_name like ?", "%" +
|
|
searchInfo.get("realName") + "%");
|
|
queryHelper.addCondition(searchInfo.containsKey("telephone"), "u.telephone =?", searchInfo.get("telephone"));
|
|
queryHelper.addCondition(searchInfo.containsKey("userName"), "u.user_name =?", searchInfo.get("userName"));
|
|
queryHelper.addCondition(searchInfo.containsKey("deptId") &&
|
|
StrKit.notBlank(searchInfo.get("deptId")) && !"-1".equals(searchInfo.get("deptId")),
|
|
"u.dept_id =?", searchInfo.get("deptId"));
|
|
queryHelper.addCondition(searchInfo.containsKey("roleId") &&
|
|
StrKit.notBlank(searchInfo.get("roleId")) && !"-1".equals(searchInfo.get("roleId")),
|
|
"u.role_id =?", searchInfo.get("roleId"));
|
|
queryHelper.addCondition(searchInfo.containsKey("workLocation"), "u.work_location like ?", "%" +
|
|
searchInfo.get("workLocation") + "%");
|
|
queryHelper.addCondition(searchInfo.containsKey("startTime"), "u.created_time >= ?",
|
|
searchInfo.get("startTime") + " 00:00:00");
|
|
queryHelper.addCondition(searchInfo.containsKey("endTime"), "u.created_time <= ?",
|
|
searchInfo.get("endTime") + " 23:59:59");
|
|
queryHelper.addOrderProperty("u.created_time", false);
|
|
Page<Admin> page = pagination.paginate(queryHelper.getSql(), Admin.class, pageNumber, pageSize);
|
|
return page;
|
|
|
|
}
|
|
|
|
@Transient
|
|
public boolean changeStatus(int userId, int enabled) {
|
|
Admin admin = adminRepository.findOne(userId);
|
|
if (admin == null) {
|
|
return false;
|
|
}
|
|
admin.setEnabled(enabled);
|
|
adminRepository.save(admin);
|
|
return true;
|
|
}
|
|
|
|
public Admin findUserById(int userId) {
|
|
Admin admin = adminRepository.findOne(userId);
|
|
return admin;
|
|
}
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void saveOrUpdateAccount(int userId, int roleId, Admin admin, String privateKey) {
|
|
int createAdminId = InterfaceUtil.getAdminId();
|
|
Admin oldAdmin = adminRepository.findOne(userId);
|
|
Dept dept = deptRepository.findOne(admin.getDeptId());
|
|
SysRole sysRole = sysRoleRepository.findOne(admin.getRoleId());
|
|
UserPosition userPosition = userPositionRepository.findOne(admin.getPositionId());
|
|
if (oldAdmin == null) {
|
|
oldAdmin = new Admin();
|
|
String userName = admin.getUserName();
|
|
oldAdmin.setUserName(userName);
|
|
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
|
|
String newPassword = decEncPassword(admin.getTelephone().substring(5), salt, privateKey);
|
|
|
|
BeanUtils.copyProperties(admin, oldAdmin);
|
|
|
|
oldAdmin.setRealName(admin.getRealName());
|
|
oldAdmin.setDeptName(dept.getName());
|
|
oldAdmin.setPositionName(userPosition.getPositionName());
|
|
oldAdmin.setPassword(newPassword);
|
|
oldAdmin.setSalt(salt);
|
|
oldAdmin.setEnabled(1);
|
|
oldAdmin.setCreatedBy(createAdminId);
|
|
oldAdmin.setTelephone(admin.getTelephone());
|
|
oldAdmin.setCreatedTime(new Date());
|
|
|
|
} else {
|
|
String userName = admin.getUserName();
|
|
oldAdmin.setDeptId(admin.getDeptId());
|
|
oldAdmin.setPositionId(admin.getPositionId());
|
|
oldAdmin.setRealName(admin.getRealName());
|
|
oldAdmin.setDeptName(dept.getName());
|
|
oldAdmin.setPositionName(userPosition.getPositionName());
|
|
//oldAdmin.setEmpCode(admin.getEmpCode());
|
|
oldAdmin.setWorkLocation(admin.getWorkLocation());
|
|
oldAdmin.setDirectManager(admin.getDirectManager());
|
|
oldAdmin.setCompanyEmail(admin.getCompanyEmail());
|
|
oldAdmin.setUserName(userName);
|
|
oldAdmin.setRealName(admin.getRealName());
|
|
oldAdmin.setTelephone(admin.getTelephone());
|
|
oldAdmin.setLastUpdatedBy(createAdminId);
|
|
oldAdmin.setLastUpdatedTime(new Date());
|
|
}
|
|
oldAdmin.setRoleId(admin.getRoleId());
|
|
SysRole one = sysRoleRepository.findOne(admin.getRoleId());
|
|
if (null != one) {
|
|
oldAdmin.setRoleName(one.getName());
|
|
}
|
|
admin = adminRepository.saveAndFlush(oldAdmin);
|
|
//设置当前用户角色关系状态为删除
|
|
userId = admin.getId();
|
|
sysUserRoleRepository.deleteSysUserRoleByUserId(createAdminId, new Date(), userId);
|
|
SysUserRole sysUserRole = new SysUserRole();
|
|
//保存用户角色关系
|
|
sysUserRole.setUserId(userId);
|
|
sysUserRole.setRoleId(roleId);
|
|
sysUserRole.setCreatedBy(createAdminId);
|
|
sysUserRole.setCreatedTime(new Date());
|
|
sysUserRoleRepository.save(sysUserRole);
|
|
}
|
|
|
|
/**
|
|
* 检查用户是否存在于系统中
|
|
*/
|
|
public String validateUserExistInfo(int userId, Admin admin) {
|
|
String message = "";
|
|
//校验手机号格式
|
|
String phone = admin.getTelephone();
|
|
if (!phone.matches(RegexConstant.REGEX)) {
|
|
return "请填写正确的电话号码!";
|
|
}
|
|
|
|
//工号重复校验
|
|
/*Admin empCode = adminRepository.findByEmpCode(admin.getEmpCode());
|
|
if (userId == -1) {
|
|
if (null != empCode) {
|
|
message = "该工号已存在!";
|
|
return message;
|
|
}
|
|
} else {
|
|
if (null != empCode && empCode.getId() != userId) {
|
|
message = "该工号已存在!";
|
|
return message;
|
|
}
|
|
}*/
|
|
|
|
//手机号重复校验
|
|
Admin byTelephoneEquals = adminRepository.findByTelephone(phone);
|
|
if (userId == -1) {
|
|
if (null != byTelephoneEquals) {
|
|
message = "该手机号已存在!";
|
|
return message;
|
|
}
|
|
} else {
|
|
if (null != byTelephoneEquals && byTelephoneEquals.getId() != userId) {
|
|
message = "该手机号已存在!";
|
|
return message;
|
|
}
|
|
}
|
|
|
|
if (StringUtils.isEmpty(admin.getUserName())) {
|
|
message = "工号不能为空!";
|
|
return message;
|
|
}
|
|
Admin existAdmin = adminRepository.getAdminByUsername(admin.getUserName());
|
|
if (userId == -1) {
|
|
if (existAdmin != null) {
|
|
message = "该工号已存在!";
|
|
return message;
|
|
}
|
|
} else {
|
|
if (existAdmin != null && existAdmin.getId() != userId) {
|
|
message = "该工号已存在!";
|
|
return message;
|
|
}
|
|
}
|
|
|
|
Admin realName = adminRepository.getAdminByRealName(admin.getRealName());
|
|
if (userId == -1) {
|
|
if (realName != null) {
|
|
message = "该姓名已存在!";
|
|
return message;
|
|
}
|
|
} else {
|
|
if (realName != null && realName.getId() != userId) {
|
|
message = "该姓名已存在!";
|
|
return message;
|
|
}
|
|
}
|
|
return message;
|
|
}
|
|
|
|
|
|
public String decEncPassword(String password, String salt, String privateKey) {
|
|
try {
|
|
return DESCrypto.encryptPassword(password, salt);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public boolean resetPassword(int userId, String privateKey) {
|
|
try {
|
|
Admin oldAdmin = adminRepository.findOne(userId);
|
|
if (oldAdmin == null) {
|
|
return false;
|
|
}
|
|
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
|
|
String telephone = oldAdmin.getTelephone();
|
|
String newPassword = decEncPassword(telephone.substring(5), salt, privateKey);
|
|
oldAdmin.setPassword(newPassword);
|
|
oldAdmin.setSalt(salt);
|
|
oldAdmin.setLastUpdatedBy(InterfaceUtil.getAdminId());
|
|
oldAdmin.setLastUpdatedTime(new Date());
|
|
adminRepository.save(oldAdmin);
|
|
} catch (Exception e) {
|
|
logger.error("充值密码错误!" + e.toString());
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public boolean deleteAccount(int userId) {
|
|
try {
|
|
Admin admin = adminRepository.findOne(userId);
|
|
admin.setDeleted(true);
|
|
admin.setLastUpdatedBy(InterfaceUtil.getAdminId());
|
|
|
|
//删除用户角色关系
|
|
sysUserRoleRepository.deleteSysUserRoleByUserId(InterfaceUtil.getAdminId(), new Date(), userId);
|
|
|
|
adminRepository.save(admin);
|
|
return true;
|
|
} catch (Exception e) {
|
|
logger.error("账户ID:" + userId + "删除错误!" + e.toString());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Transactional
|
|
public ResponseMsg check(Collection<Map> excelMap) {
|
|
int successCount = 0;
|
|
int errorCount = 0;
|
|
List<String> errorList = new ArrayList<>();
|
|
int createAdminId = InterfaceUtil.getAdminId();
|
|
Admin admin = null;
|
|
|
|
if (excelMap.size() == 0) {
|
|
ResponseMsg msg = ResponseMsg.buildSuccessMsg("请填写人员数据!");
|
|
msg.setData(errorList);
|
|
return msg;
|
|
}
|
|
|
|
for (Map m : excelMap) {
|
|
|
|
try {
|
|
Object empCode = m.get("工号");
|
|
if (empCode == null || StrKit.isBlank(empCode.toString())) {
|
|
throw new Exception("工号不能为空");
|
|
}
|
|
|
|
Admin byEmpCode = adminRepository.getAdminByUsername(empCode.toString());
|
|
|
|
if (null != byEmpCode) {
|
|
throw new Exception("工号" + empCode.toString() + "已存在");
|
|
}
|
|
|
|
Object telephone = m.get("手机号码");
|
|
if (telephone == null || StrKit.isBlank(telephone.toString())) {
|
|
throw new Exception("手机号码不能为空");
|
|
}
|
|
|
|
Admin byTelephone = adminRepository.findByTelephone(telephone.toString());
|
|
if (null != byTelephone) {
|
|
throw new Exception("手机号码" + telephone.toString() + "已存在");
|
|
}
|
|
|
|
/*Object userName = m.get("登录名称");
|
|
if (userName == null || StrKit.isBlank(userName.toString())) {
|
|
throw new Exception("登录名称不能为空");
|
|
}
|
|
|
|
Admin byUsername = adminRepository.getAdminByUsername(userName.toString());
|
|
if (null != byUsername) {
|
|
throw new Exception("登录名称" + byUsername.toString() + "已存在");
|
|
}*/
|
|
|
|
Object realName = m.get("姓名");
|
|
if (realName == null || StrKit.isBlank(realName.toString())) {
|
|
throw new Exception("姓名不能为空");
|
|
}
|
|
|
|
Admin byRealName = adminRepository.getAdminByRealName(realName.toString());
|
|
if (null != byRealName) {
|
|
throw new Exception("姓名" + realName.toString() + "已存在");
|
|
}
|
|
|
|
Object workLocation = m.get("常驻地");
|
|
if (workLocation == null || StrKit.isBlank(workLocation.toString())) {
|
|
throw new Exception("常驻地不能为空");
|
|
}
|
|
|
|
Object deptName = m.get("一级部门");
|
|
if (deptName == null || StrKit.isBlank(deptName.toString())) {
|
|
throw new Exception("一级部门不能为空");
|
|
}
|
|
|
|
Dept dept = deptRepository.findByNameEquals(deptName.toString());
|
|
|
|
if (null == dept) {
|
|
throw new Exception("一级部门" + deptName.toString() + "不存在");
|
|
}
|
|
|
|
Object directManager = m.get("直接主管");
|
|
if (directManager == null || StrKit.isBlank(directManager.toString())) {
|
|
throw new Exception("直接主管不能为空");
|
|
}
|
|
|
|
Object positionName = m.get("职位");
|
|
if (positionName == null || StrKit.isBlank(positionName.toString())) {
|
|
throw new Exception("职位不能为空");
|
|
}
|
|
|
|
UserPosition userPosition = userPositionRepository.findByPositionNameEquals(positionName.toString());
|
|
|
|
if (null == userPosition) {
|
|
throw new Exception("职位" + positionName.toString() + "不存在");
|
|
}
|
|
|
|
Object sysRole = m.get("所属角色");
|
|
if (sysRole == null || StrKit.isBlank(sysRole.toString())) {
|
|
throw new Exception("所属角色不能为空");
|
|
}
|
|
|
|
SysRole role = sysRoleRepository.findByNameEqualsAndDeletedEquals(sysRole.toString(), 0);
|
|
|
|
if (null == role) {
|
|
throw new Exception("所属角色" + sysRole.toString() + "不存在");
|
|
}
|
|
|
|
Object companyEmail = m.get("公司邮件地址");
|
|
if (companyEmail == null || StrKit.isBlank(companyEmail.toString())) {
|
|
throw new Exception("公司邮件地址不能为空");
|
|
}
|
|
|
|
admin = new Admin();
|
|
//admin.setEmpCode(empCode.toString());
|
|
admin.setTelephone(telephone.toString());
|
|
admin.setUserName(empCode.toString());
|
|
admin.setRealName(realName.toString());
|
|
admin.setWorkLocation(workLocation.toString());
|
|
admin.setDeptId(dept.getId());
|
|
admin.setDeptName(dept.getName());
|
|
admin.setDirectManager(directManager.toString());
|
|
admin.setPositionId(userPosition.getId());
|
|
admin.setPositionName(userPosition.getPositionName());
|
|
admin.setRoleId(role.getId());
|
|
admin.setRoleName(role.getName());
|
|
admin.setCompanyEmail(companyEmail.toString());
|
|
|
|
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
|
|
String password = decEncPassword(admin.getTelephone().substring(5), salt, "");
|
|
|
|
admin.setSalt(salt);
|
|
admin.setPassword(password);
|
|
admin.setCreatedBy(createAdminId);
|
|
admin.setCreatedTime(new Date());
|
|
admin.setLastUpdatedBy(createAdminId);
|
|
admin.setLastUpdatedTime(new Date());
|
|
admin.setEnabled(1);
|
|
adminRepository.saveAndFlush(admin);
|
|
|
|
//设置当前用户角色关系状态为删除
|
|
sysUserRoleRepository.deleteSysUserRoleByUserId(createAdminId, new Date(), admin.getId());
|
|
SysUserRole sysUserRole = new SysUserRole();
|
|
//保存用户角色关系
|
|
sysUserRole.setUserId(admin.getId());
|
|
sysUserRole.setRoleId(role.getId());
|
|
sysUserRole.setCreatedBy(createAdminId);
|
|
sysUserRole.setCreatedTime(new Date());
|
|
sysUserRoleRepository.save(sysUserRole);
|
|
|
|
successCount++;
|
|
} catch (Exception e) {
|
|
logger.error("", e);
|
|
errorCount++;
|
|
errorList.add(e.getMessage());
|
|
}
|
|
}
|
|
final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("成功:%d, 失败:%d", successCount, errorCount));
|
|
msg.setData(errorList);
|
|
return msg;
|
|
}
|
|
|
|
|
|
/**
|
|
* 通过id查询姓名
|
|
*
|
|
* @param id
|
|
* @return
|
|
*/
|
|
public String getNameById(int id) {
|
|
Admin one = adminRepository.findOne(id);
|
|
return one == null ? "" : one.getRealName();
|
|
}
|
|
|
|
/**
|
|
* 通过角色id查询用户姓名列表
|
|
*
|
|
* @param roleIds
|
|
* @return
|
|
*/
|
|
public List<String> getUserIsByRole(List<String> roleIds) {
|
|
if (roleIds == null || roleIds.isEmpty()) {
|
|
return new ArrayList<>();
|
|
}
|
|
String sql = "select u.id as id from sys_user_role ur left join sys_user u on u.id=ur.user_id " +
|
|
" where ur.is_deleted=0 and ur.role_id in (?) and u.enabled=1 and u.is_deleted=0";
|
|
String ids = String.join("", roleIds);
|
|
List<Record> records = pagination.find(sql, ids);
|
|
if (records == null || records.isEmpty()) {
|
|
return new ArrayList<>();
|
|
}
|
|
|
|
List<String> userIds = new ArrayList<>(roleIds.size());
|
|
for (Record record : records) {
|
|
Integer id = record.getInt("id");
|
|
if (id != null) {
|
|
userIds.add(id.toString());
|
|
}
|
|
}
|
|
return userIds;
|
|
}
|
|
}
|