package com.szwl.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.UUID; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.szwl.annotation.Audit; import com.szwl.constant.AuditEnum; import com.szwl.constant.ResponseCodesEnum; import com.szwl.exception.BizException; import com.szwl.manager.TokenManager; import com.szwl.model.bo.R; import com.szwl.model.bo.ResponseModel; import com.szwl.model.bo.UserDetailBO; import com.szwl.model.entity.SysUserRole; import com.szwl.model.entity.TAdmin; import com.szwl.model.entity.TMessageCode; import com.szwl.model.param.AddLoginUserParam; import com.szwl.service.SysRoleService; import com.szwl.service.SysUserRoleService; import com.szwl.service.TAdminService; import com.szwl.service.TMessageCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; /** *

* 短信验证码 前端控制器 *

* * @author wuhs * @since 2022-04-14 */ @Slf4j @Api(value = "/tAdmin", tags = {"账户"}) @RestController @RequestMapping("/tAdmin") public class TAdminController { @Autowired SysRoleService sysRoleService; @Autowired SysUserRoleService sysUserRoleService; @Autowired TokenManager tokenManager; @Autowired TAdminService tAdminService; @Autowired TMessageCodeService tMessageCodeService; @ApiOperation(value = "添加账号") @PostMapping("/addLoginUser") @Transactional @Audit(type = AuditEnum.INSERT,content = "#loginUser.name + '添加账号'") public ResponseModel addLoginUser(@RequestBody @Valid AddLoginUserParam param) { //获取当前操作人员 UserDetailBO loginUser = tokenManager.getLoginUserDetails(); // 保存用户实体 Date now = new Date(); TAdmin entity = BeanUtil.copyProperties(param,TAdmin.class); entity.setParentId(loginUser.getId()); entity.setIsAdmined(true); entity.setCreateDate(now); entity.setModifyDate(now); entity.setIsLocked(false); entity.setLoginFailureCount(0); tAdminService.save(entity); log.debug("添加账号 id:{},TAdmin:{}",entity.getId(),entity); // 保存用户角色关系 List userRoleList = param.getRoleList() .stream() .map(e -> new SysUserRole().setRoleId(e).setUserId(String.valueOf(entity.getId())) ) .collect(Collectors.toList()); if(CollUtil.isNotEmpty(userRoleList)){ sysUserRoleService.saveBatch(userRoleList); } return R.ok(entity); } @ApiOperation(value = "注册") @PostMapping("/save") @Transactional public ResponseModel save(@RequestBody TAdmin admin) { if(StringUtils.isEmpty(admin.getUsername())||StringUtils.isEmpty(admin.getName())||StringUtils.isEmpty(admin.getPassword())){ return R.fail(ResponseCodesEnum.A0100,"数据有空!"); } if(admin.getIfForeign().equals("0")){ //国内用户注册 if(StringUtils.isEmpty(admin.getPhone())){ return R.fail(ResponseCodesEnum.A0100,"手机号为空!"); } }else { //国外用户注册 if(StringUtils.isEmpty(admin.getEmail())){ return R.fail(ResponseCodesEnum.A0100,"邮箱为空!"); } } if (StringUtils.isEmpty(admin.getCode())){ return R.fail(ResponseCodesEnum.A0100,"验证码为空!"); } //校验是否有重复的 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,admin.getUsername()); List list = tAdminService.list(query); if(list.size()>0){ return R.fail(ResponseCodesEnum.A0201,"用户登录名已存在"); } LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); if(admin.getIfForeign().equals("0")){ query1.eq(TAdmin::getPhone,admin.getPhone()); }else { query1.eq(TAdmin::getEmail,admin.getEmail()); } List list1 = tAdminService.list(query1); if(list1.size()>0){ return R.fail(ResponseCodesEnum.A0203,"用户手机/邮箱已存在"); } //校验验证码是否正确 LambdaQueryWrapper query2 = Wrappers.lambdaQuery(); if(admin.getIfForeign().equals("0")){ query2.eq(TMessageCode::getPhone,admin.getPhone()); }else { query2.eq(TMessageCode::getPhone,admin.getEmail()); } query2.eq(TMessageCode::getType,"0");//0,代表注册验证码 query2.eq(TMessageCode::getStatus,"0"); List messageCodeList = tMessageCodeService.list(query2); if(messageCodeList.size()>0){ TMessageCode tMessageCode = messageCodeList.get(messageCodeList.size() - 1); if(!tMessageCode.getCode().equals(admin.getCode())){ return R.fail(ResponseCodesEnum.A0002,"验证码错误"); } tMessageCode.setStatus("1"); admin.setCreateDate(new Date()); admin.setModifyDate(new Date()); admin.setIsAdmined(false); admin.setIsEnabled(true); admin.setLoginFailureCount(0); admin.setIsLocked(false); admin.setPassword(DigestUtils.md5Hex(admin.getPassword())); boolean b = tAdminService.save(admin); tMessageCode.setModifyDate(new Date()); tMessageCodeService.saveOrUpdate(tMessageCode); return R.ok(b); }else { return R.fail(ResponseCodesEnum.A0002,"没有找到验证码"); } } @ApiOperation(value = "登录") @PostMapping("/login") @Audit(type = AuditEnum.LOGIN,content = "#username + '请求登录'") public ResponseModel login(String username, String password) { if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){ return R.fail(ResponseCodesEnum.A0001,"参数有空"); } //验证用户名登录 LambdaQueryWrapper query = Wrappers.lambdaQuery(); // query.eq(TAdmin::getUsername,username); query.eq(TAdmin::getPassword,password); query.and( wrapper -> { wrapper.eq(TAdmin::getUsername,username) .or().eq(TAdmin::getPhone,username); } ); TAdmin tAdmin = Optional.ofNullable(tAdminService.getOnly(query)) .orElseThrow(() -> new BizException(ResponseCodesEnum.L0002)); UserDetailBO userDetailBO = BeanUtil.copyProperties(tAdmin,UserDetailBO.class); String token = IdUtil.simpleUUID(); userDetailBO.setCurrentToken(token); // 获取拥有的权限菜单 Set menuList = sysRoleService.listAuthMenuByUserId(userDetailBO.getId()); userDetailBO.setMenuCodeList(CollUtil.newArrayList(menuList)); // 抹除密码 userDetailBO.setPassword(null); // 保存到redis tokenManager.saveAuthentication(token,userDetailBO); return R.ok(userDetailBO); } @ApiOperation(value = "修改密码") @PostMapping("/updatePassword") public ResponseModel updatePassword(String username,String password) { if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){ return R.fail(ResponseCodesEnum.A0001,"参数有空"); } //查找用户名 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TAdmin::getUsername,username); List list = tAdminService.list(query); if(list.size()>0){ TAdmin admin = list.get(0); admin.setPassword(password); boolean b = tAdminService.saveOrUpdate(admin); return R.ok(b); } return R.fail(ResponseCodesEnum.A0001,"修改失败"); } @ApiOperation(value = "获取账号信息") @GetMapping("/getAdmin") public ResponseModel getAdmin(String id) { TAdmin tAdmin = tAdminService.getById(id); return R.ok(tAdmin); } }