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 com.panzhihua.sangeshenbian.warpper.TokenVo; 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("/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 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() .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 reult = tokenService.loginThreeAround(systemUser.getId()); redisTemplate.delete(key); LoginReturnVO loginReturnVO = reult.getData(); TokenVo tokenVo = new TokenVo(); BeanUtils.copyProperties(loginReturnVO, tokenVo); List list = systemRoleMenuService.list(new LambdaQueryWrapper().eq(SystemRoleMenu::getSystemRoleId, systemUser.getSystemRoleId())); List collect = list.stream().map(SystemRoleMenu::getSystemMenuId).collect(Collectors.toList()); Set collect1 = new HashSet<>(); if(collect.size() > 0){ List systemMenus = systemMenuService.listByIds(collect); collect1 = systemMenus.stream().map(SystemMenu::getUrl).collect(Collectors.toSet()); } tokenVo.setMenu(collect1); tokenVo.setName(systemUser.getName()); return R.ok(tokenVo); } @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> list(SystemUserList query){ Integer id = this.getLoginUserInfoSanGeShenBian().getId(); SystemUser user = systemUserService.getById(id); IPage 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("不能添加街道、区县和市级账号"); } long count = systemUserService.count(new LambdaQueryWrapper().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){ long count = systemUserService.count(new LambdaQueryWrapper().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 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 getUserById(@RequestParam("id") String id){ SystemUser systemUser = systemUserService.getById(id); SystemUserVo systemUserVo = new SystemUserVo(); List list = systemRoleMenuService.list(new LambdaQueryWrapper().eq(SystemRoleMenu::getSystemRoleId, systemUser.getSystemRoleId())); List collect = list.stream().map(SystemRoleMenu::getSystemMenuId).collect(Collectors.toList()); Set collect1 = new HashSet<>(); if(collect.size() > 0){ List systemMenus = systemMenuService.listByIds(collect); collect1 = systemMenus.stream().map(SystemMenu::getUrl).collect(Collectors.toSet()); } systemUserVo.setPermissions(collect1); BeanUtils.copyProperties(systemUser, systemUserVo); return R.ok(systemUserVo); } }