TAdminController.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.szwl.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.lang.UUID;
  5. import cn.hutool.core.util.IdUtil;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  8. import com.szwl.annotation.Audit;
  9. import com.szwl.constant.AuditEnum;
  10. import com.szwl.constant.ResponseCodesEnum;
  11. import com.szwl.exception.BizException;
  12. import com.szwl.manager.TokenManager;
  13. import com.szwl.model.bo.R;
  14. import com.szwl.model.bo.ResponseModel;
  15. import com.szwl.model.bo.UserDetailBO;
  16. import com.szwl.model.entity.SysUserRole;
  17. import com.szwl.model.entity.TAdmin;
  18. import com.szwl.model.entity.TMessageCode;
  19. import com.szwl.model.param.AddLoginUserParam;
  20. import com.szwl.service.SysRoleService;
  21. import com.szwl.service.SysUserRoleService;
  22. import com.szwl.service.TAdminService;
  23. import com.szwl.service.TMessageCodeService;
  24. import io.swagger.annotations.Api;
  25. import io.swagger.annotations.ApiOperation;
  26. import lombok.extern.slf4j.Slf4j;
  27. import org.apache.commons.codec.digest.DigestUtils;
  28. import org.apache.commons.lang.StringUtils;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import org.springframework.web.bind.annotation.*;
  32. import javax.validation.Valid;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. /**
  36. * <p>
  37. * 短信验证码 前端控制器
  38. * </p>
  39. *
  40. * @author wuhs
  41. * @since 2022-04-14
  42. */
  43. @Slf4j
  44. @Api(value = "/tAdmin", tags = {"账户"})
  45. @RestController
  46. @RequestMapping("/tAdmin")
  47. public class TAdminController {
  48. @Autowired
  49. SysRoleService sysRoleService;
  50. @Autowired
  51. SysUserRoleService sysUserRoleService;
  52. @Autowired
  53. TokenManager tokenManager;
  54. @Autowired
  55. TAdminService tAdminService;
  56. @Autowired
  57. TMessageCodeService tMessageCodeService;
  58. @ApiOperation(value = "添加账号")
  59. @PostMapping("/addLoginUser")
  60. @Transactional
  61. @Audit(type = AuditEnum.INSERT,content = "#loginUser.name + '添加账号'")
  62. public ResponseModel<?> addLoginUser(@RequestBody @Valid AddLoginUserParam param) {
  63. //获取当前操作人员
  64. UserDetailBO loginUser = tokenManager.getLoginUserDetails();
  65. // 保存用户实体
  66. Date now = new Date();
  67. TAdmin entity = BeanUtil.copyProperties(param,TAdmin.class);
  68. entity.setParentId(loginUser.getId());
  69. entity.setIsAdmined(true);
  70. entity.setCreateDate(now);
  71. entity.setModifyDate(now);
  72. entity.setIsLocked(false);
  73. entity.setLoginFailureCount(0);
  74. tAdminService.save(entity);
  75. log.debug("添加账号 id:{},TAdmin:{}",entity.getId(),entity);
  76. // 保存用户角色关系
  77. List<SysUserRole> userRoleList = param.getRoleList()
  78. .stream()
  79. .map(e -> new SysUserRole().setRoleId(e).setUserId(String.valueOf(entity.getId())) )
  80. .collect(Collectors.toList());
  81. if(CollUtil.isNotEmpty(userRoleList)){
  82. sysUserRoleService.saveBatch(userRoleList);
  83. }
  84. return R.ok(entity);
  85. }
  86. @ApiOperation(value = "注册")
  87. @PostMapping("/save")
  88. @Transactional
  89. public ResponseModel<?> save(@RequestBody TAdmin admin) {
  90. if(StringUtils.isEmpty(admin.getUsername())||StringUtils.isEmpty(admin.getName())||StringUtils.isEmpty(admin.getPassword())){
  91. return R.fail(ResponseCodesEnum.A0100,"数据有空!");
  92. }
  93. if(admin.getIfForeign().equals("0")){
  94. //国内用户注册
  95. if(StringUtils.isEmpty(admin.getPhone())){
  96. return R.fail(ResponseCodesEnum.A0100,"手机号为空!");
  97. }
  98. }else {
  99. //国外用户注册
  100. if(StringUtils.isEmpty(admin.getEmail())){
  101. return R.fail(ResponseCodesEnum.A0100,"邮箱为空!");
  102. }
  103. }
  104. if (StringUtils.isEmpty(admin.getCode())){
  105. return R.fail(ResponseCodesEnum.A0100,"验证码为空!");
  106. }
  107. //校验是否有重复的
  108. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  109. query.eq(TAdmin::getUsername,admin.getUsername());
  110. List<TAdmin> list = tAdminService.list(query);
  111. if(list.size()>0){
  112. return R.fail(ResponseCodesEnum.A0201,"用户登录名已存在");
  113. }
  114. LambdaQueryWrapper<TAdmin> query1 = Wrappers.lambdaQuery();
  115. if(admin.getIfForeign().equals("0")){
  116. query1.eq(TAdmin::getPhone,admin.getPhone());
  117. }else {
  118. query1.eq(TAdmin::getEmail,admin.getEmail());
  119. }
  120. List<TAdmin> list1 = tAdminService.list(query1);
  121. if(list1.size()>0){
  122. return R.fail(ResponseCodesEnum.A0203,"用户手机/邮箱已存在");
  123. }
  124. //校验验证码是否正确
  125. LambdaQueryWrapper<TMessageCode> query2 = Wrappers.lambdaQuery();
  126. if(admin.getIfForeign().equals("0")){
  127. query2.eq(TMessageCode::getPhone,admin.getPhone());
  128. }else {
  129. query2.eq(TMessageCode::getPhone,admin.getEmail());
  130. }
  131. query2.eq(TMessageCode::getType,"0");//0,代表注册验证码
  132. query2.eq(TMessageCode::getStatus,"0");
  133. List<TMessageCode> messageCodeList = tMessageCodeService.list(query2);
  134. if(messageCodeList.size()>0){
  135. TMessageCode tMessageCode = messageCodeList.get(messageCodeList.size() - 1);
  136. if(!tMessageCode.getCode().equals(admin.getCode())){
  137. return R.fail(ResponseCodesEnum.A0002,"验证码错误");
  138. }
  139. tMessageCode.setStatus("1");
  140. admin.setCreateDate(new Date());
  141. admin.setModifyDate(new Date());
  142. admin.setIsAdmined(false);
  143. admin.setIsEnabled(true);
  144. admin.setLoginFailureCount(0);
  145. admin.setIsLocked(false);
  146. admin.setPassword(DigestUtils.md5Hex(admin.getPassword()));
  147. boolean b = tAdminService.save(admin);
  148. tMessageCode.setModifyDate(new Date());
  149. tMessageCodeService.saveOrUpdate(tMessageCode);
  150. return R.ok(b);
  151. }else {
  152. return R.fail(ResponseCodesEnum.A0002,"没有找到验证码");
  153. }
  154. }
  155. @ApiOperation(value = "登录")
  156. @PostMapping("/login")
  157. @Audit(type = AuditEnum.LOGIN,content = "#username + '请求登录'")
  158. public ResponseModel<UserDetailBO> login(String username, String password) {
  159. if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
  160. return R.fail(ResponseCodesEnum.A0001,"参数有空");
  161. }
  162. //验证用户名登录
  163. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  164. // query.eq(TAdmin::getUsername,username);
  165. query.eq(TAdmin::getPassword,password);
  166. query.and(
  167. wrapper -> {
  168. wrapper.eq(TAdmin::getUsername,username)
  169. .or().eq(TAdmin::getPhone,username);
  170. }
  171. );
  172. TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query))
  173. .orElseThrow(() -> new BizException(ResponseCodesEnum.L0002));
  174. UserDetailBO userDetailBO = BeanUtil.copyProperties(tAdmin,UserDetailBO.class);
  175. String token = IdUtil.simpleUUID();
  176. userDetailBO.setCurrentToken(token);
  177. // 获取拥有的权限菜单
  178. Set<String> menuList = sysRoleService.listAuthMenuByUserId(userDetailBO.getId());
  179. userDetailBO.setMenuCodeList(CollUtil.newArrayList(menuList));
  180. // 抹除密码
  181. userDetailBO.setPassword(null);
  182. // 保存到redis
  183. tokenManager.saveAuthentication(token,userDetailBO);
  184. return R.ok(userDetailBO);
  185. }
  186. @ApiOperation(value = "修改密码")
  187. @PostMapping("/updatePassword")
  188. public ResponseModel<?> updatePassword(String username,String password) {
  189. if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
  190. return R.fail(ResponseCodesEnum.A0001,"参数有空");
  191. }
  192. //查找用户名
  193. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  194. query.eq(TAdmin::getUsername,username);
  195. List<TAdmin> list = tAdminService.list(query);
  196. if(list.size()>0){
  197. TAdmin admin = list.get(0);
  198. admin.setPassword(password);
  199. boolean b = tAdminService.saveOrUpdate(admin);
  200. return R.ok(b);
  201. }
  202. return R.fail(ResponseCodesEnum.A0001,"修改失败");
  203. }
  204. @ApiOperation(value = "获取账号信息")
  205. @GetMapping("/getAdmin")
  206. public ResponseModel<TAdmin> getAdmin(String id) {
  207. TAdmin tAdmin = tAdminService.getById(id);
  208. return R.ok(tAdmin);
  209. }
  210. }