package com.xkrs.service.impl; import com.xkrs.common.encapsulation.PromptMessageEnum; import com.xkrs.dao.*; import com.xkrs.model.entity.RelRoleAuthorityEntity; import com.xkrs.model.entity.RelUserRoleEntity; import com.xkrs.model.entity.SysRoleEntity; import com.xkrs.model.entity.SysUserEntity; import com.xkrs.model.qo.SysUserQo; import com.xkrs.model.vo.SysUserVo; import com.xkrs.service.RedisService; import com.xkrs.service.SysUserService; import com.xkrs.utils.DateTimeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.security.crypto.keygen.KeyGenerators; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Locale; import java.util.Map; import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; import static com.xkrs.utils.DateTimeUtil.dateTimeToString; import static com.xkrs.utils.DateTimeUtil.getNowTime; import static com.xkrs.utils.EncryptDecryptUtil.encry256; /** * 系统用户服务实现 * @author tajochen */ @Service public class SysUserServiceImpl implements SysUserService { @Resource private SysUserDao sysUserDao; @Resource private SysRoleDao sysRoleDao; @Resource private RelUserRoleDao relUserRoleDao; @Resource private RelRoleAuthorityDao relRoleAuthorityDao; @Resource private RedisService redisService; @Resource private NationwideDao nationwideDao; /** * 检查用户名是否存在 * @param userName * @return */ @Override public boolean checkUserName(String userName) { int num = sysUserDao.checkUserName(userName); return (num == 0); }; /** * 新增用户 * @param sysUserQo */ @Transactional(rollbackFor=Exception.class) @Override public String addUser(SysUserQo sysUserQo) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); String salt = KeyGenerators.string().generateKey(); SysUserEntity sysUserEntity = new SysUserEntity(); sysUserEntity.setUserName(sysUserQo.getUserName()); if(!redisService.get(sysUserQo.getUserName()).equals(sysUserQo.getVerificationCode())){ return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"验证码错误,请重新输入!",locale); } sysUserEntity.setReallyName(sysUserQo.getReallyName()); sysUserEntity.setSalt(salt); sysUserEntity.setPassword(encry256(sysUserQo.getPassword() + salt)); sysUserEntity.setTelephone(sysUserQo.getUserName()); sysUserEntity.setCountyCode(sysUserQo.getCountyCode()); if("0000".equals(sysUserQo.getCountyCode().substring(2))){ sysUserEntity.setActiveFlag(1); sysUserEntity.setAccountType("省级"); }else if("00".equals(sysUserQo.getCountyCode().substring(4)) && !"0000".equals(sysUserQo.getCountyCode().substring(2))){ sysUserEntity.setActiveFlag(1); sysUserEntity.setAccountType("市级"); }else { sysUserEntity.setActiveFlag(0); sysUserEntity.setAccountType("县级"); } sysUserEntity.setStatusCode(0); sysUserEntity.setAddTime(dateTimeToString(LocalDateTime.now())); sysUserEntity.setDeleteFlag(0); sysUserEntity.setDayNum(7); String string = dateTimeToString(LocalDateTime.now().plusDays(7L)); sysUserEntity.setOverTime(string); sysUserEntity.setLoginNum(0); sysUserEntity.setCountyName(sysUserQo.getCountyName()); sysUserDao.save(sysUserEntity); RelUserRoleEntity relUserRoleEntity = new RelUserRoleEntity(); relUserRoleEntity.setUserId(sysUserEntity.getId().longValue()); relUserRoleEntity.setRoleId(2); RelRoleAuthorityEntity relRoleAuthorityEntity = new RelRoleAuthorityEntity(); relRoleAuthorityEntity.setRoleId(2); relRoleAuthorityEntity.setAuthorityId(2); relRoleAuthorityEntity.setUserId(sysUserEntity.getId()); relUserRoleDao.save(relUserRoleEntity); relRoleAuthorityDao.save(relRoleAuthorityEntity); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"注册成功!",locale); } /** * 查询所有用户Vo * @return */ /*@Transactional(rollbackFor=Exception.class) @Override public Iterable getAllSysUser() { Iterable ls = sysUserDao.selectAllSysUser(); return ls; }*/ @Transactional(rollbackFor=Exception.class) @Override public SysUserEntity getSysUserByUserName(String userName) { return sysUserDao.selectByUserName(userName); } @Transactional(rollbackFor=Exception.class) @Override public int updateSysUserLogin(String userName,String ipAddress) { return sysUserDao.updateSysUserLogin(userName,ipAddress); } /** * 更新用户 * @param sysUserQo * @return */ @Transactional(rollbackFor=Exception.class) @Override public int updateSysUser(SysUserQo sysUserQo) { SysUserEntity sysUserEntity = new SysUserEntity(); sysUserEntity.setReallyName(sysUserQo.getReallyName()); sysUserDao.save(sysUserEntity); return 1; } /** * 软删除普通用户 * @param id * @return */ @Transactional(rollbackFor=Exception.class) @Override public int softDeleteGeneralUser(Integer id) { String adminRole = "role_administor"; String sysRole ="role_system_manager"; List list = sysRoleDao.selectByUserId(id); if(list.size()>0){ SysRoleEntity sysRoleEntity = list.get(1); if(sysRole.equals(sysRoleEntity.getRoleName())||adminRole.equals(sysRoleEntity.getRoleName())){ sysUserDao.softDeleteGeneralUserById(id); return 0; } } return 1; } /** * 查询用户的信息 * @return */ @Override public List selectAllUser() { return sysUserDao.selectAll(); } /** * 启用 * @param userId */ @Transactional(rollbackFor=Exception.class) @Override public void updateEnable(Integer userId) { sysUserDao.updateEnable(userId); } /** * 禁用 * @param userId */ @Transactional(rollbackFor=Exception.class) @Override public void updateDisable(Integer userId) { sysUserDao.updateDisable(userId); } /** * 用户修改密码 * @param oldPassword * @param newPassword * @param confirmPassword * @param sysUserEntity * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updatePassword(String oldPassword, String newPassword, String confirmPassword, SysUserEntity sysUserEntity) { Locale locale = LocaleContextHolder.getLocale(); String oldFrontPassword = encry256(oldPassword + sysUserEntity.getSalt()); if(!oldFrontPassword.equals(sysUserEntity.getPassword())){ return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"旧密码输入错误",locale); } if(!newPassword.equals(confirmPassword)){ return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"两次密码输入不一致",locale); } String newAfterPassword = encry256(newPassword + sysUserEntity.getSalt()); sysUserDao.updatePassword(sysUserEntity.getId(),newAfterPassword); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"密码修改成功",locale); } /** * 管理员修改用户的密码 * @param userId * @param newPassword * @param confirmPassword * @return */ @Transactional(rollbackFor=Exception.class) @Override public String adminUpdatePassword(Integer userId, String newPassword, String confirmPassword) { Locale locale = LocaleContextHolder.getLocale(); if(!newPassword.equals(confirmPassword)){ return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"两次密码输入不一致",locale); } SysUserEntity sysUserEntity = sysUserDao.selectByUserId(userId); String newAfterPassword = encry256(newPassword + sysUserEntity.getSalt()); sysUserDao.updatePassword(userId,newAfterPassword); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"密码修改成功",locale); } @Override public SysUserVo getUserByUserName(String userName) { return sysUserDao.selectUserByUserName(userName); } /** * 按天数修改账号到期时间 * @param userId * @param dayNum * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updateExpireDateDay(Integer userId, Integer dayNum) { Locale locale = LocaleContextHolder.getLocale(); long l = dayNum.longValue(); LocalDateTime now = LocalDateTime.now(); SysUserEntity sysUserEntity = sysUserDao.selectByUserId(userId); if(DateTimeUtil.dateTimeToString(now).compareTo(sysUserEntity.getOverTime()) > 0){ LocalDateTime localDateTime = now.plusDays(l); String time = dateTimeToString(localDateTime); sysUserDao.updateOverTime(userId,time); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); }else { LocalDateTime localDateTime = DateTimeUtil.stringToDateTime(sysUserEntity.getOverTime()); LocalDateTime localDateTime1 = localDateTime.plusDays(l); String time = dateTimeToString(localDateTime1); sysUserDao.updateOverTime(userId,time); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); } } /** * 按月份修改账号过期时间 * @param userId * @param dayNum * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updateExpireDateMonth(Integer userId, Integer dayNum) { Locale locale = LocaleContextHolder.getLocale(); long l = dayNum.longValue(); LocalDateTime now = LocalDateTime.now(); SysUserEntity sysUserEntity = sysUserDao.selectByUserId(userId); if(DateTimeUtil.dateTimeToString(now).compareTo(sysUserEntity.getOverTime()) > 0){ LocalDateTime localDateTime = now.plusMonths(l); String time = dateTimeToString(localDateTime); sysUserDao.updateOverTime(userId,time); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); }else { LocalDateTime localDateTime = DateTimeUtil.stringToDateTime(sysUserEntity.getOverTime()); LocalDateTime localDateTime1 = localDateTime.plusMonths(l); String time = dateTimeToString(localDateTime1); sysUserDao.updateOverTime(userId,time); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); } } /** * 按年份修改账号到期时间 * @param userId * @param dayNum * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updateExpireDateYear(Integer userId, Integer dayNum) { Locale locale = LocaleContextHolder.getLocale(); long l = dayNum.longValue(); LocalDateTime now = LocalDateTime.now(); SysUserEntity sysUserEntity = sysUserDao.selectByUserId(userId); if(DateTimeUtil.dateTimeToString(now).compareTo(sysUserEntity.getOverTime()) > 0){ LocalDateTime localDateTime = now.plusYears(l); String time = dateTimeToString(localDateTime); sysUserDao.updateOverTime(userId,time); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); }else { LocalDateTime localDateTime = DateTimeUtil.stringToDateTime(sysUserEntity.getOverTime()); LocalDateTime localDateTime1 = localDateTime.plusYears(l); String time = dateTimeToString(localDateTime1); sysUserDao.updateOverTime(userId,time); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); } } /** * 设置账号永久有效 * @param userId * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updatePermanent(Integer userId) { Locale locale = LocaleContextHolder.getLocale(); sysUserDao.updateDayNum(userId); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); } /** * 修改账号到期时间 * @param userId * @param overTime * @return */ @Transactional(rollbackFor=Exception.class) @Override public String updateOverTime(Integer userId, String overTime) { Locale locale = LocaleContextHolder.getLocale(); sysUserDao.updateOverTime(userId,overTime); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"修改成功",locale); } /** * 记录用户登录次数 * @param userId * @param loginNum */ @Transactional(rollbackFor=Exception.class) @Override public void updateLoginNum(Integer userId, Integer loginNum) { sysUserDao.updateLoginNum(userId,loginNum); } @Override public List> findCityByProCode(String proCode) { return nationwideDao.findCityByProCode(proCode); } @Override public List> findCountyByProCode(String proCode) { return nationwideDao.findCountyByProCode(proCode); } @Override public List> findCountyByCityCode(String cityCode) { return nationwideDao.findCountyByCityCode(cityCode); } }