package com.xkrs.controller; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.xkrs.common.encapsulation.PromptMessageEnum; import com.xkrs.common.tool.TokenUtil; import com.xkrs.dao.SysUserDao; import com.xkrs.model.entity.SysUserEntity; import com.xkrs.model.qo.SysUserQo; import com.xkrs.model.qo.SysUserReceiveSmsQo; import com.xkrs.model.qo.SysUserRemarkQo; import com.xkrs.model.qo.SysUserVipLevelQo; import com.xkrs.model.validation.SysUserQoInsert; import com.xkrs.model.validation.SysUserQoUpdate; import com.xkrs.model.vo.SysUserVo; import com.xkrs.service.RedisService; import com.xkrs.service.SysUserService; import com.xkrs.utils.RandomUtil; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.concurrent.TimeUnit; import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationErrorList; import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; import static com.xkrs.utils.AliYunSmsUtils.sendSms; import static com.xkrs.utils.EncryptDecryptUtil.encry256; /** * 系统用户Controller * * @author tajocehn */ @RestController @RequestMapping(value = "/api/user") public class SysUserController { @Resource private SysUserService sysUserService; @Resource private SysUserDao sysUserDao; @Resource private RedisService redisService; /** * 修改vip等级 * * @param sysUserVipLevelQo * @return */ @Transactional(rollbackFor = Exception.class) @RequestMapping(value = "/updateviplevel", method = RequestMethod.POST) public String updateVipLevel(@RequestBody SysUserVipLevelQo sysUserVipLevelQo) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); String ids = sysUserVipLevelQo.getIds(); List idList = new ArrayList<>(); if (ids.contains(",")) { String[] splits = ids.split(","); if (splits != null && splits.length > 0) { for (String split : splits) { idList.add(Integer.parseInt(split)); } } } else { idList.add(Integer.parseInt(ids)); } for (Integer id : idList) { sysUserDao.updateVipLevel(id, sysUserVipLevelQo.getVipLevel()); } return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "修改成功", locale); } /** * 修改是否接收短信 * * @param sysUserReceiveSmsQo * @return */ @Transactional(rollbackFor = Exception.class) @RequestMapping(value = "/updatereceivesms", method = RequestMethod.POST) public String updateReceiveSms(@RequestBody SysUserReceiveSmsQo sysUserReceiveSmsQo) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); String ids = sysUserReceiveSmsQo.getIds(); List idList = new ArrayList<>(); if (ids.contains(",")) { String[] splits = ids.split(","); if (splits != null && splits.length > 0) { for (String split : splits) { idList.add(Integer.parseInt(split)); } } } else { idList.add(Integer.parseInt(ids)); } for (Integer id : idList) { sysUserDao.updateReceiveSms(id, sysUserReceiveSmsQo.getReceiveSms()); } return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "修改成功", locale); } @Transactional(rollbackFor = Exception.class) @RequestMapping(value = "/updateremark", method = RequestMethod.POST) public String updateRemark(@RequestBody SysUserRemarkQo sysUserRemarkQo) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); Integer id = sysUserRemarkQo.getId(); Optional optionalById = sysUserDao.findById(id); if (optionalById.isEmpty()) { return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL, "修改失败,用户找不到", locale); } sysUserDao.updateRemark(id, sysUserRemarkQo.getRemark()); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "修改成功", locale); } /** * 登录用户Token验证 * * @return */ @RequestMapping(value = "/logged/check", method = RequestMethod.POST) public String loginUserTokenCheck() { Locale locale = LocaleContextHolder.getLocale(); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "", locale); } @RequestMapping(value = "/check/duplicate", method = RequestMethod.POST) public String checkDuplicate(@RequestParam(value = "userName", required = false) String userName) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 验证用户名是否重复 if (!sysUserService.checkUserName(userName)) { return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL, "", locale); } return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "OK", locale); } @RequestMapping(value = "/add", method = RequestMethod.POST) public String addUser(@Validated({SysUserQoInsert.class}) @RequestBody SysUserQo userQo, BindingResult bindingResult, HttpServletRequest servletRequest) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 验证数据合法性 if (bindingResult.hasErrors()) { return outputEncapsulationErrorList(bindingResult.getFieldErrors(), locale); } // 验证用户名是否重复 if (!sysUserService.checkUserName(userQo.getUserName())) { return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL, "该账号已经注册,请勿重复注册", locale); } // 添加新用户 return sysUserService.addUser(userQo, servletRequest); } /** * 删除系统用户 * * @param userName 用户名 * @return */ @RequestMapping(value = "/general/deletesysuser", method = RequestMethod.DELETE) public String deleteSysUser(@RequestParam(value = "userName") String userName) { return sysUserService.deleteSysUser(userName); } /** * 软删除指定id的普通用户 * * @param id * @return */ @RequestMapping(value = "/general/delete", method = RequestMethod.DELETE) public String deleteCustomUser(@RequestParam(value = "userId", required = false) int id) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 验证数据合法性 int res = sysUserService.softDeleteGeneralUser(id); if (res == 1) { return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "", locale); } else { return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "", locale); } } @RequestMapping(value = "/update", method = RequestMethod.POST) public String updateUser(@Validated({SysUserQoUpdate.class}) @RequestBody SysUserQo userQo, BindingResult bindingResult) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 验证数据合法性 if (bindingResult.hasErrors()) { return outputEncapsulationErrorList(bindingResult.getFieldErrors(), locale); } // 修改用户 sysUserService.updateSysUser(userQo); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "OK", locale); } /** * 判断用户名是否存在 * * @param userName * @return */ @GetMapping("/booleanUserName") public String booleanUserName(@RequestParam("userName") String userName) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); Map map = new HashMap(3); SysUserEntity sysUserEntity = sysUserDao.selectByUserName(userName); if (sysUserEntity == null) { map.put("status", 0); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, map, locale); } else { map.put("status", 1); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, map, locale); } } /** * 查看用户信息 * * @return */ @GetMapping("/selectAllUser") public String selectAllUser(@RequestHeader(value = "Authorization") String token) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 验证token String tokenUserName = TokenUtil.getTokenUserName(token); SysUserEntity sysUserEntity = sysUserDao.selectByUserName(tokenUserName); if (sysUserEntity == null) { return outputEncapsulationObject(PromptMessageEnum.USER_LOGIN_ERROR, "您还没有注册登录,请先注册登录", locale); } List sysUserVos = sysUserService.selectAllUser(); if (sysUserVos == null || sysUserVos.size() == 0) { return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "暂时还没有任何用户数据", locale); } return outputEncapsulationObject(PromptMessageEnum.SUCCESS, sysUserVos, locale); } /** * 管理员进行启用禁用的操作 * * @param map * @param token * @return */ @PostMapping("/operateActiveFlag") public String operateActiveFlag(@RequestBody Map map, @RequestHeader(value = "Authorization") String token) { Integer userId = (Integer) map.get("userId"); String keepType = (String) map.get("keepType"); // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 验证token String tokenUserName = TokenUtil.getTokenUserName(token); SysUserEntity sysUserEntity = sysUserDao.selectByUserName(tokenUserName); if (sysUserEntity == null) { return outputEncapsulationObject(PromptMessageEnum.USER_LOGIN_ERROR, "您还没有注册登录,请先注册登录", locale); } // 如果keepType等于1进行启用操作 if ("1".equals(keepType)) { sysUserService.updateEnable(userId); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "启用成功", locale); } else { sysUserService.updateDisable(userId); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "禁用成功", locale); } } /** * 用户修改密码 * * @param map * @param token * @return */ @PostMapping("/updatePassword") public String updatePassword(@RequestBody Map map, @RequestHeader(value = "Authorization") String token) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); String oldPassword = (String) map.get("oldPassword"); String newPassword = (String) map.get("newPassword"); String confirmPassword = (String) map.get("confirmPassword"); // 验证token String tokenUserName = TokenUtil.getTokenUserName(token); SysUserEntity sysUserEntity = sysUserDao.selectByUserName(tokenUserName); if (sysUserEntity == null) { return outputEncapsulationObject(PromptMessageEnum.USER_LOGIN_ERROR, "您还没有注册登录,请先注册登录", locale); } return sysUserService.updatePassword(oldPassword, newPassword, confirmPassword, sysUserEntity); } /** * 管理员修改用户的密码 * * @param map * @param token * @return */ @PostMapping("/adminUpdatePassword") public String adminUpdatePassword(@RequestBody Map map, @RequestHeader(value = "Authorization") String token) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); // 要修改的用户的id Integer userId = (Integer) map.get("userId"); String newPassword = (String) map.get("newPassword"); String confirmPassword = (String) map.get("confirmPassword"); // 验证token String tokenUserName = TokenUtil.getTokenUserName(token); SysUserEntity sysUserEntity = sysUserDao.selectByUserName(tokenUserName); if (sysUserEntity == null) { return outputEncapsulationObject(PromptMessageEnum.USER_LOGIN_ERROR, "您还没有注册登录,请先注册登录", locale); } return sysUserService.adminUpdatePassword(userId, newPassword, confirmPassword); } /** * 用户忘记密码 * * @param map * @param * @return */ @Transactional(rollbackFor = Exception.class) @PostMapping("/userUnRememberPassword") public String userUnRememberPassword(@RequestBody Map map) { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); String phone = (String) map.get("phone"); String newPassword = (String) map.get("newPassword"); String confirmPassword = (String) map.get("confirmPassword"); SysUserEntity sysUserEntity = sysUserDao.selectByUserName(phone); if (sysUserEntity == null) { return outputEncapsulationObject(PromptMessageEnum.USER_LOGIN_ERROR, "您还没有注册登录,请先注册登录", 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 phone * @return * @throws ClientException */ @GetMapping("/verificationCode") public String verificationCode(@RequestParam("phone") String phone) throws ClientException { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); String optCode = String.valueOf(RandomUtil.returnCode()); redisService.set(phone, optCode, 10, TimeUnit.MINUTES); SendSmsResponse response = sendSms(phone, optCode); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "", locale); } /** * 填写手机号发送验证码,用于用户忘记密码 * * @param phone * @return * @throws ClientException */ @GetMapping("/verificationCodeUpdate") public String verificationCodeUpdate(@RequestParam("phone") String phone) throws ClientException { // 获取区域信息 Locale locale = LocaleContextHolder.getLocale(); SysUserVo sysUserVo = sysUserDao.selectUserByUserName(phone); if (sysUserVo == null) { return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "手机号错误,请使用您注册的手机号", locale); } String optCode = String.valueOf(RandomUtil.returnCode()); redisService.set(phone, optCode, 10, TimeUnit.MINUTES); SendSmsResponse response = sendSms(phone, optCode); return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "", locale); } /** * 输入验证码进行判断 * * @param phone * @param verificationCode * @return */ @GetMapping("/getVerificationCode") public String getVerificationCode(@RequestParam("phone") String phone, @RequestParam("verificationCode") String verificationCode) { Locale locale = LocaleContextHolder.getLocale(); String o = (String) redisService.get(phone); if ("".equals(o) || o == null) { return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG, "请先发送验证码!", locale); } if (!redisService.get(phone).equals(verificationCode)) { return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG, "验证码错误,请重新输入!", locale); } return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "true", locale); } /** * 更改账号过期时间 * * @return */ @PostMapping("/updateExpireDate") public String updateExpireDate(@RequestBody Map map, @RequestHeader(value = "Authorization") String token) { Integer userId = (Integer) map.get("userId"); Integer timeNum = (Integer) map.get("timeNum"); String keepType = (String) map.get("keepType"); if ("1".equals(keepType)) { return sysUserService.updateExpireDateDay(userId, timeNum); } else if ("2".equals(keepType)) { return sysUserService.updateExpireDateMonth(userId, timeNum); } else if ("3".equals(keepType)) { return sysUserService.updateExpireDateYear(userId, timeNum); } else { return sysUserService.updatePermanent(userId); } } /** * 修改账号到期时间 * * @param map * @param token * @return */ @PostMapping("/updateOverTime") public String updateOverTime(@RequestBody Map map, @RequestHeader(value = "Authorization") String token) { Integer userId = (Integer) map.get("userId"); String overTime = (String) map.get("overTime"); return sysUserService.updateOverTime(userId, overTime); } }