fire_point/src/main/java/com/xkrs/controller/SysUserController.java
2022-06-21 16:52:18 +08:00

446 lines
17 KiB
Java

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<Integer> 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<Integer> 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<SysUserEntity> 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<SysUserVo> 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);
}
}