package com.panzhihua.sangeshenbian.api;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.panzhihua.common.controller.BaseController;
|
import com.panzhihua.common.interfaces.OperLog;
|
import com.panzhihua.common.model.vos.LoginReturnVO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo;
|
import com.panzhihua.common.service.auth.TokenService;
|
import com.panzhihua.sangeshenbian.model.entity.SystemMenu;
|
import com.panzhihua.sangeshenbian.model.entity.SystemRoleMenu;
|
import com.panzhihua.sangeshenbian.model.entity.SystemUser;
|
import com.panzhihua.sangeshenbian.service.ISystemMenuService;
|
import com.panzhihua.sangeshenbian.service.ISystemRoleMenuService;
|
import com.panzhihua.sangeshenbian.service.ISystemUserService;
|
import com.panzhihua.sangeshenbian.warpper.LoginVo;
|
import com.panzhihua.sangeshenbian.warpper.SystemUserList;
|
import com.panzhihua.sangeshenbian.warpper.SystemUserListVo;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.util.ObjectUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDateTime;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/2/18 22:30
|
*/
|
@Api
|
@RestController
|
@RequestMapping("/sangeshenbian/systemUser")
|
public class SystemUserController extends BaseController {
|
|
@Resource
|
private ISystemUserService systemUserService;
|
|
@Resource
|
private RedisTemplate redisTemplate;
|
|
@Resource
|
private TokenService tokenService;
|
|
private final Integer max_err = 5;
|
|
@Resource
|
private ISystemRoleMenuService systemRoleMenuService;
|
|
@Resource
|
private ISystemMenuService systemMenuService;
|
|
|
|
|
|
@PostMapping("/login")
|
@ApiOperation(value = "登录", tags = {"三个身边后台-登录"})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "登录")
|
public R<LoginReturnVO> login(@RequestBody LoginVo vo){
|
String key = "login:" + vo.getPhone();
|
Integer size = (Integer) redisTemplate.opsForValue().get(key);
|
if(null != size && max_err.equals(size)){
|
return R.fail("连续登录失败,请稍后重试。");
|
}
|
if(null == size){
|
size = 0;
|
}
|
SystemUser systemUser = systemUserService.getOne(new LambdaQueryWrapper<SystemUser>()
|
.eq(SystemUser::getPhone, vo.getPhone()).ne(SystemUser::getStatus, 3));
|
if(null == systemUser){
|
size++;
|
redisTemplate.opsForValue().set(key, size, 5, TimeUnit.MINUTES);
|
return R.fail("登录失败,手机号/密码错误。");
|
}
|
if(!vo.getPassword().equals(systemUser.getPassword())){
|
size++;
|
redisTemplate.opsForValue().set(key, size, 5, TimeUnit.MINUTES);
|
return R.fail("登录失败,手机号/密码错误。");
|
}
|
if(2 == systemUser.getStatus()){
|
return R.fail("当前账号已冻结。");
|
}
|
//创建token
|
R<LoginReturnVO> reult = tokenService.loginThreeAround(systemUser.getId());
|
redisTemplate.delete(key);
|
return reult;
|
}
|
|
|
@PostMapping("logout")
|
@ApiOperation(value = "退出登录", tags = {"三个身边后台-登录"})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "退出登录")
|
public R login() {
|
String token = this.getToken();
|
if (ObjectUtils.isEmpty(token)) {
|
return R.ok();
|
}
|
return tokenService.logout(token);
|
}
|
|
|
@GetMapping("/list")
|
@ApiOperation(value = "获取列表数据", tags = {"三个身边管理后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "获取人员管理列表数据")
|
public R<IPage<SystemUserListVo>> list(SystemUserList query){
|
Integer id = this.getLoginUserInfoSanGeShenBian().getId();
|
SystemUser user = systemUserService.getById(id);
|
IPage<SystemUserListVo> list = systemUserService.list(user.getAccountLevel(), query);
|
return R.ok(list);
|
}
|
|
|
|
@PostMapping("/add")
|
@ApiOperation(value = "添加人员", tags = {"三个身边管理后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 1,businessType = "添加人员")
|
public R add(@RequestBody SystemUser systemUser){
|
Integer id = this.getLoginUserInfoSanGeShenBian().getId();
|
SystemUser user = systemUserService.getById(id);
|
if(2 == user.getAccountLevel() && 1 == systemUser.getAccountLevel()){
|
return R.fail("不能添加市级账号");
|
}
|
if(3 == user.getAccountLevel() && 3 < systemUser.getAccountLevel()){
|
return R.fail("不能添加区县和市级账号");
|
}
|
if(4 == user.getAccountLevel() && 4 < systemUser.getAccountLevel()){
|
return R.fail("不能添加街道、区县和市级账号");
|
}
|
int count = systemUserService.count(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getPhone, systemUser.getPhone()).ne(SystemUser::getStatus, 3));
|
if(0 < count){
|
return R.fail("手机号重复。");
|
}
|
systemUser.setStatus(1);
|
systemUser.setCreateTime(LocalDateTime.now());
|
systemUserService.save(systemUser);
|
return R.ok();
|
}
|
|
|
@PostMapping("/edit")
|
@ApiOperation(value = "编辑人员", tags = {"三个身边后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 2,businessType = "编辑人员")
|
public R edit(@RequestBody SystemUser systemUser){
|
int count = systemUserService.count(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getPhone, systemUser.getPhone())
|
.ne(SystemUser::getStatus, 3).ne(SystemUser::getId, systemUser.getId()));
|
if(0 < count){
|
return R.fail("手机号重复。");
|
}
|
systemUser.setStatus(1);
|
systemUser.setCreateTime(LocalDateTime.now());
|
systemUserService.updateById(systemUser);
|
return R.ok();
|
}
|
|
|
@DeleteMapping("/delete/{id}")
|
@ApiOperation(value = "删除人员", tags = {"三个身边后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 3,businessType = "删除人员")
|
public R delete(@PathVariable("id") Integer id){
|
SystemUser systemUser = systemUserService.getById(id);
|
systemUser.setStatus(3);
|
systemUserService.updateById(systemUser);
|
return R.ok();
|
}
|
|
|
@GetMapping("/getSystemUserInfo/{id}")
|
@ApiOperation(value = "查询人员详情", tags = {"三个身边后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "查询人员详情")
|
public R<SystemUser> getSystemUserInfo(@PathVariable("id") Integer id){
|
SystemUser systemUser = systemUserService.getById(id);
|
return R.ok(systemUser);
|
}
|
|
|
@PutMapping("/freeze/{id}")
|
@ApiOperation(value = "冻结账号", tags = {"三个身边后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "冻结账号")
|
public R freeze(@PathVariable("id") Integer id){
|
SystemUser systemUser = systemUserService.getById(id);
|
if(2 == systemUser.getStatus()){
|
return R.fail("不能重复操作");
|
}
|
systemUser.setStatus(2);
|
systemUserService.updateById(systemUser);
|
return R.ok();
|
}
|
|
|
@PutMapping("/unfreeze/{id}")
|
@ApiOperation(value = "解冻账号", tags = {"三个身边后台-人员管理"})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "解冻账号")
|
public R unfreeze(@PathVariable("id") Integer id){
|
SystemUser systemUser = systemUserService.getById(id);
|
if(1 == systemUser.getStatus()){
|
return R.fail("不能重复操作");
|
}
|
systemUser.setStatus(1);
|
systemUserService.updateById(systemUser);
|
return R.ok();
|
}
|
|
|
/**
|
* 根据用户id获取信息
|
* @param id
|
* @return
|
*/
|
@PostMapping("/getUserById")
|
public R<SystemUserVo> getUserById(@RequestParam("id") String id){
|
SystemUser systemUser = systemUserService.getById(id);
|
SystemUserVo systemUserVo = new SystemUserVo();
|
List<SystemRoleMenu> list = systemRoleMenuService.list(new LambdaQueryWrapper<SystemRoleMenu>().eq(SystemRoleMenu::getSystemRoleId, systemUser.getSystemRoleId()));
|
List<Integer> collect = list.stream().map(SystemRoleMenu::getSystemMenuId).collect(Collectors.toList());
|
Set<String> collect1 = new HashSet<>();
|
if(collect.size() > 0){
|
List<SystemMenu> systemMenus = systemMenuService.listByIds(collect);
|
collect1 = systemMenus.stream().map(SystemMenu::getUrl).collect(Collectors.toSet());
|
}
|
systemUserVo.setPermissions(collect1);
|
BeanUtils.copyProperties(systemUser, systemUserVo);
|
return R.ok(systemUserVo);
|
}
|
}
|