| | |
| | | import com.gansu.water.service.convert.AdminRoleConvert; |
| | | import com.gansu.water.service.convert.AdminUserConvert; |
| | | import com.gansu.water.service.dto.ResAdminDetail; |
| | | import com.wf.captcha.SpecCaptcha; |
| | | import org.apache.commons.lang3.BooleanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | |
| | | @Autowired |
| | | private AdminPowerService adminPowerService; |
| | | |
| | | |
| | | @Autowired |
| | | private StringRedisTemplate redisTemplate; |
| | | |
| | | // 添加后台管理员 |
| | | public ExecutedResult<Long> createAdmin(ReqCreateAdminUser request) { |
| | |
| | | } |
| | | return ExecutedResult.success(result); |
| | | } |
| | | |
| | | // 管理员登录 |
| | | public ExecutedResult<ResAdminLogin> adminLogin(ReqAdminLogin request) { |
| | | AdminUserPO user = dao.get4Name(request.getUserName()); |
| | | if(Objects.isNull(user)){ |
| | | return ExecutedResult.failed("用户名或密码错误。"); |
| | | } |
| | | if(BooleanUtils.isFalse(Objects.equals(user.getStatus(), EState.NORMAL.getValue()))) { |
| | | return ExecutedResult.failed("账号已锁定,请联系管理员。"); |
| | | } |
| | | if(BooleanUtils.isFalse(MD5Util.encrypt(request.getPassword() + ConstantFactory.KEY_PASSWORD).equals(user.getPassword()))) { |
| | | return ExecutedResult.failed("用户名或密码错误。"); |
| | | } |
| | | // 构建登录用户 |
| | | LoginUserDTO loginUser = new LoginUserDTO(); |
| | | loginUser.setUserId(user.getId().toString()); |
| | | loginUser.setUserType(user.getUserType()); |
| | | loginUser.setNickName(user.getNickName()); |
| | | loginUser.setPhone(user.getContact()); |
| | | |
| | | // 保存用户信息到jwt |
| | | String token = JWTUtil.getToken(loginUser); |
| | | |
| | | ResAdminLogin result = this.getListPower4Admin(user); |
| | | result.setName(user.getNickName()); |
| | | result.setToken(token); |
| | | |
| | | return ExecutedResult.success(result); |
| | | /** |
| | | * 生成验证码图片并返回其 Base64 编码字符串 |
| | | * |
| | | * @param uuid 用于标识验证码的唯一标识符 |
| | | * @return 包含验证码图片 Base64 编码的响应结果 |
| | | */ |
| | | public ExecutedResult<String> generate(String uuid) { |
| | | SpecCaptcha specCaptcha = new SpecCaptcha(100, 30, 4); |
| | | // captcha.setCharType(Captcha.TYPE_DEFAULT); |
| | | String code = specCaptcha.text().toLowerCase(); |
| | | // 缓存验证码 |
| | | redisTemplate.opsForValue().set(uuid, code); |
| | | // 设置验证码3分钟后过期 |
| | | redisTemplate.expire(uuid, 3, TimeUnit.MINUTES); |
| | | return ExecutedResult.success(specCaptcha.toBase64()); |
| | | } |
| | | // 管理员登录 |
| | | public ExecutedResult<ResAdminLogin> adminLogin(ReqAdminLogin request) throws Exception { |
| | | Integer maxNumber = 3; |
| | | AdminUserPO user = dao.get4Name(request.getUserName()); |
| | | //获取缓存中的验证码 |
| | | String realCode = redisTemplate.opsForValue().get(request.getUuid()); |
| | | if (realCode == null) { |
| | | return ExecutedResult.failed("验证码已失效,请重新获取~"); |
| | | } |
| | | // 验证码校验 |
| | | if (!request.getCode().equalsIgnoreCase(realCode)) { |
| | | return ExecutedResult.failed("验证码错误"); |
| | | } |
| | | //获取缓存中设备码 |
| | | String machineCode = redisTemplate.opsForValue().get(request.getMachineCode()); |
| | | if (StringUtil.isNotNullOrEmpty(machineCode) && Integer.valueOf(machineCode) >= maxNumber) { |
| | | return ExecutedResult.failed("登录次数限制,请10分钟后重新登录!"); |
| | | } |
| | | if (checkPassword(user, request.getPassword())) { |
| | | // 构建登录用户 |
| | | LoginUserDTO loginUser = new LoginUserDTO(); |
| | | loginUser.setUserId(user.getId().toString()); |
| | | loginUser.setUserType(user.getUserType()); |
| | | loginUser.setNickName(user.getNickName()); |
| | | loginUser.setPhone(user.getContact()); |
| | | // 保存用户信息到jwt |
| | | String token = JWTUtil.getToken(loginUser); |
| | | ResAdminLogin result = this.getListPower4Admin(user); |
| | | result.setName(user.getNickName()); |
| | | result.setToken(token); |
| | | return ExecutedResult.success(result); |
| | | } else { |
| | | Integer newAttempts = StringUtil.isNullOrEmpty(machineCode) ? 1 : Integer.valueOf(machineCode) + 1; |
| | | redisTemplate.opsForValue().set(request.getMachineCode(), newAttempts.toString()); |
| | | redisTemplate.expire(request.getMachineCode(), 10, TimeUnit.MINUTES); |
| | | } |
| | | |
| | | return ExecutedResult.failed("账号或密码错误!"); |
| | | } |
| | | private static boolean checkPassword(AdminUserPO user, String passWord) throws Exception { |
| | | if (Objects.isNull(user)) { |
| | | return false; |
| | | } |
| | | if (BooleanUtils.isFalse(Objects.equals(user.getStatus(), EState.NORMAL.getValue()))) { |
| | | return false; |
| | | } |
| | | if (BooleanUtils.isFalse(MD5Util.encrypt(passWord + ConstantFactory.KEY_PASSWORD).equals(user.getPassword()))) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | // 获取管理员权限列表 |
| | | public ExecutedResult<ResAdminPower> getPower(Long adminId) { |
| | | ResAdminPower result = new ResAdminPower(); |