package com.terra.system.service.sys; import com.terra.system.entity.sys.RoleEntity; import com.terra.system.entity.sys.UserEntity; import com.terra.system.helper.Md5Helper; import com.terra.system.helper.RsaHelper; import com.terra.system.helper.StringHelper; import com.terra.system.mapper.sys.UserMapper; import com.terra.system.service.all.RedisService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.annotation.Resource; import org.springframework.stereotype.Service; import java.util.List; /** * 用户表 * @author sws * @date 2022-09-27 */ @Service public class UserService implements UserMapper { @Resource UserMapper userMapper; @Resource TokenService tokenService; private final static Log log = LogFactory.getLog(UserService.class); @Override public Integer selectCount(String uname, String depcode) { uname = StringHelper.getLikeUpperStr(uname); depcode = StringHelper.getRightLike(depcode); return userMapper.selectCount(uname, depcode); } @Override public UserEntity selectUser(int id) { return userMapper.selectUser(id); } @Override public UserEntity selectByUid(String uid) { return userMapper.selectByUid(uid); } @Override public List selectUserAll() { return userMapper.selectUserAll(); } @Override public List selectByPage(String uname, String depcode, Integer limit, Integer offset) { uname = StringHelper.getLikeUpperStr(uname); depcode = StringHelper.getRightLike(depcode); return userMapper.selectByPage(uname, depcode, limit, offset); } @Override public UserEntity selectByToken(String token) { return userMapper.selectByToken(token); } @Override public Integer selectForIsAdmin(Integer id) { return userMapper.selectForIsAdmin(id); } @Override public List selectAdminUsers(Integer type) { return userMapper.selectAdminUsers(type); } @Override public List selectRoleByUserId(Integer id) { return userMapper.selectRoleByUserId(id); } @Override public List selectUserByRoleId(Integer roleId) { return userMapper.selectUserByRoleId(roleId); } @Override public Integer insertUser(UserEntity userEntity) { return userMapper.insertUser(userEntity); } @Override public Integer insertUsers(List userEntity) { return userMapper.insertUsers(userEntity); } @Override public Integer deleteUser(int id) { return userMapper.deleteUser(id); } @Override public Integer deleteUsers(List ids) { return userMapper.deleteUsers(ids); } @Override public Integer updateUser(UserEntity userEntity) { return userMapper.updateUser(userEntity); } @Override public Integer selectCountForRole(String uname, Integer roleid, String depcode) { uname = StringHelper.getLikeUpperStr(uname); depcode = StringHelper.getRightLike(depcode); return userMapper.selectCountForRole(uname, roleid, depcode); } @Override public List selectByPageForRole(String uname, Integer roleid, String depcode, Integer limit, Integer offset) { uname = StringHelper.getLikeUpperStr(uname); depcode = StringHelper.getRightLike(depcode); return userMapper.selectByPageForRole(uname, roleid, depcode, limit, offset); } @Override public Integer updateUsersPwd(Integer updateUser, String pwd, List ids) { return userMapper.updateUsersPwd(updateUser, pwd, ids); } /** * 验证用户实体类 */ public String validateUserEntity(UserEntity entity) { if (entity == null) { return "没有找到用户"; } if (StringHelper.isEmpty(entity.getUid())) { return "用户ID不能为空"; } if (StringHelper.isEmpty(entity.getPwd())) { return "用户密码不能为空"; } return null; } /** * 验证登录用户密码 */ public String validateLoginPwd(UserEntity entity) { try { String str = validateUserEntity(entity); if (str != null) { return str; } // 解密 String uid = RsaHelper.decrypt(entity.getUid()); String pwd = RsaHelper.decrypt(entity.getPwd()); entity.setUid(uid); entity.setPwd(pwd); if (tokenService.isUidDisable(entity)) { return "用户ID已禁用"; } return null; } catch (Exception ex) { log.error(ex.getMessage(), ex); return "解密失败"; } } /** * 验证新用户密码 */ @SuppressWarnings("AlibabaRemoveCommentedCode") public String validateNewPwd(UserEntity entity) { try { String str = validateUserEntity(entity); if (str != null) { return str; } // 解密 String uid = RsaHelper.decrypt(entity.getUid()); /*String pwd = RsaHelper.decrypt(entity.getPwd()); if (!StringHelper.isPwdValid(pwd)) { return "密码不符合要求"; } String newPwd = Md5Helper.reverse(Md5Helper.generate(pwd)); entity.setPwd(newPwd);*/ entity.setUid(uid); return null; } catch (Exception ex) { log.error(ex.getMessage(), ex); return "解密失败"; } } /** * 验证老用户密码 */ public String validateOldPwd(UserEntity entity) { try { String str = validateUserEntity(entity); if (str != null) { return str; } if (StringHelper.isEmpty(entity.getSalt())) { return "新密码不能为空"; } String uid = RsaHelper.decrypt(entity.getUid()); String pwd = RsaHelper.decrypt(entity.getPwd()); String salt = RsaHelper.decrypt(entity.getSalt()); UserEntity ue = selectByUid(uid); if (ue == null) { return "没有找到用户"; } if (!Md5Helper.validatePassword(pwd, ue.getPwd())) { tokenService.setPwdErrCache(ue); return "旧密码不正确"; } if (StringHelper.isPwdInvalid(salt)) { return "密码不符合要求"; } String newPwd = Md5Helper.reverse(Md5Helper.generate(salt)); entity.setPwd(newPwd); entity.setSalt(null); entity.setUid(uid); return null; } catch (Exception ex) { log.error(ex.getMessage(), ex); return "解密失败"; } } /** * 验证管理员密码 */ public String validateAdminPwd(UserEntity ue, String adminPwd) { if (ue == null) { return "没有登录或超时"; } if (StringHelper.isEmpty(adminPwd)) { return "管理员密码不能为空"; } try { String pwd = RsaHelper.decrypt(adminPwd); if (!Md5Helper.validatePassword(pwd, ue.getPwd())) { tokenService.setPwdErrCache(ue); return "管理员密码不正确"; } return null; } catch (Exception ex) { return "解密失败"; } } /** * 验证新密码 */ public String validateNewPwd(UserEntity ue, String newPwd) { if (StringHelper.isEmpty(newPwd)) { return "新密码不能为空"; } try { String pwd = RsaHelper.decrypt(newPwd); if (StringHelper.isPwdInvalid(pwd)) { return "密码不符合要求"; } String dbPwd = Md5Helper.reverse(Md5Helper.generate(pwd)); ue.setSalt(dbPwd); return null; } catch (Exception ex) { log.error(ex.getMessage(), ex); return "解密失败"; } } }