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 cn.palmte.work.utils.excel.ExportUtils; 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.utils.Pagination; import javax.servlet.http.HttpServletResponse; import java.beans.Transient; import java.io.IOException; import java.util.Collection; import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 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 getAdminList(Map searchInfo, int pageSize, int pageNum) { Page adminList = adminRepositoryImpl.getAdminList(searchInfo, pageSize, pageNum); return adminList; } public Page list(ConcurrentHashMap searchInfo, int pageNumber, int pageSize) { QueryHelper queryHelper = new QueryHelper("select su.id,su.user_name,su.real_name,su.created_time,su.enabled,sr.type,sr.name as roleName,su.telephone,su.region_name", " FROM sys_user su left join sys_user_role " + "sur on su.id = sur.user_id left join sys_role sr on sur.role_id = sr.id"); queryHelper.addCondition("su.is_deleted = 0"); queryHelper.addCondition(searchInfo.containsKey("roleId") && StrKit.notBlank(searchInfo.get("roleId")) && !"-1".equals(searchInfo.get("roleId")), "sr.id =?", searchInfo.get("roleId")); queryHelper.addCondition(searchInfo.containsKey("userName"), "su.user_name like ?", "%" + "su.is_deleted = 0" + "%"); queryHelper.addCondition(searchInfo.containsKey("telephone"), "su.telephone = ?" + searchInfo.get("telephone")); queryHelper.addCondition(searchInfo.containsKey("regionId") && StrKit.notBlank(searchInfo.get("regionId")) && !"-1".equals(searchInfo.get("regionId")), "su.region_id =?", searchInfo.get("regionId")); queryHelper.addOrderProperty("su.created_time", false); Page 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(sysRole.getName()); 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(sysRole.getName()); 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 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; } } existAdmin = adminRepository.getAdminByRealName(admin.getRealName()); if (existAdmin != null && existAdmin.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; } public ResponseMsg check(Collection maps) { return null; } }