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.annotation.SysLog;
|
import com.panzhihua.sangeshenbian.model.entity.*;
|
import com.panzhihua.sangeshenbian.model.vo.RegionVO;
|
import com.panzhihua.sangeshenbian.service.*;
|
import com.panzhihua.sangeshenbian.utils.SignatureUtil;
|
import com.panzhihua.sangeshenbian.warpper.*;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang.StringUtils;
|
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.*;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/2/18 22:30
|
*/
|
@Api
|
@Slf4j
|
@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;
|
|
@Resource
|
private IBcRegionService bcRegionService;
|
@Resource
|
private IComStreetService comStreetService;
|
@Resource
|
private IComActService comActService;
|
|
@Resource
|
private ISystemLogService systemLogService;
|
|
|
|
|
|
@PostMapping("/login")
|
@ApiOperation(value = "登录", tags = {"三个身边后台-登录"})
|
@SysLog(operatorCategory = "登录",operId = 1)
|
public R<TokenVo> 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);
|
LoginReturnVO loginReturnVO = reult.getData();
|
TokenVo tokenVo = new TokenVo();
|
BeanUtils.copyProperties(loginReturnVO, tokenVo);
|
tokenVo.setUserId(Long.valueOf(systemUser.getId()));
|
|
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){
|
LambdaQueryWrapper<SystemMenu> queryWrapper = new LambdaQueryWrapper<SystemMenu>().in(SystemMenu::getId, collect);
|
switch (systemUser.getAccountLevel()){
|
case 2:
|
queryWrapper.notIn(SystemMenu::getUrl, Arrays.asList("/system_setting/position_management", "/system_setting/position_management/add", "/system_setting/position_management/del",
|
"/system_setting/role_management", "/system_setting/role_management/add", "/system_setting/role_management/edit", "/system_setting/role_management/del",
|
"/work_order_transaction_management/work_order_item_configuration", "/work_order_transaction_management/work_order_item_configuration/save",
|
"/work_order_transaction_management/problem_type_management", "/work_order_transaction_management/problem_type_management/add",
|
"/work_order_transaction_management/problem_type_management/edit", "/work_order_transaction_management/problem_type_management/del", "/work_order_transaction_management/banner_management",
|
"/work_order_transaction_management/banner_management/add", "/work_order_transaction_management/banner_management/edit", "/work_order_transaction_management/banner_management/del"));
|
break;
|
case 3:
|
queryWrapper.notIn(SystemMenu::getUrl, Arrays.asList("/system_setting/position_management", "/system_setting/position_management/add", "/system_setting/position_management/del",
|
"/system_setting/role_management", "/system_setting/role_management/add", "/system_setting/role_management/edit", "/system_setting/role_management/del",
|
"/work_order_transaction_management/work_order_item_configuration", "/work_order_transaction_management/work_order_item_configuration/save",
|
"/work_order_transaction_management/problem_type_management", "/work_order_transaction_management/problem_type_management/add",
|
"/work_order_transaction_management/problem_type_management/edit", "/work_order_transaction_management/problem_type_management/del", "/work_order_transaction_management/banner_management",
|
"/work_order_transaction_management/banner_management/add", "/work_order_transaction_management/banner_management/edit", "/work_order_transaction_management/banner_management/del"));
|
break;
|
case 4:
|
queryWrapper.notIn(SystemMenu::getUrl, Arrays.asList("/system_setting/position_management", "/system_setting/position_management/add", "/system_setting/position_management/del",
|
"/system_setting/role_management", "/system_setting/role_management/add", "/system_setting/role_management/edit", "/system_setting/role_management/del",
|
"/work_order_transaction_management/work_order_item_configuration", "/work_order_transaction_management/work_order_item_configuration/save",
|
"/work_order_transaction_management/problem_type_management", "/work_order_transaction_management/problem_type_management/add",
|
"/work_order_transaction_management/problem_type_management/edit", "/work_order_transaction_management/problem_type_management/del", "/work_order_transaction_management/banner_management",
|
"/work_order_transaction_management/banner_management/add", "/work_order_transaction_management/banner_management/edit", "/work_order_transaction_management/banner_management/del"));
|
break;
|
case 5:
|
queryWrapper.notIn(SystemMenu::getUrl, Arrays.asList("/system_setting/position_management", "/system_setting/position_management/add", "/system_setting/position_management/del",
|
"/system_setting/role_management", "/system_setting/role_management/add", "/system_setting/role_management/edit", "/system_setting/role_management/del",
|
"/system_setting/people_management", "/system_setting/people_management/add", "/system_setting/people_management/edit", "/system_setting/people_management/del",
|
"/system_setting/people_management/freeze", "/system_setting/unit_management", "/system_setting/people_management/detail", "/system_setting/unit_management/add",
|
"/system_setting/unit_management/edit", "/system_setting/unit_management/del", "/work_order_transaction_management/work_order_item_configuration",
|
"/work_order_transaction_management/work_order_item_configuration/save", "/work_order_transaction_management/problem_type_management",
|
"/work_order_transaction_management/problem_type_management/add", "/work_order_transaction_management/problem_type_management/edit",
|
"/work_order_transaction_management/problem_type_management/del", "/work_order_transaction_management/banner_management",
|
"/work_order_transaction_management/banner_management/add", "/work_order_transaction_management/banner_management/edit", "/work_order_transaction_management/banner_management/del"));
|
break;
|
}
|
List<SystemMenu> systemMenus = systemMenuService.list(queryWrapper);
|
collect1 = systemMenus.stream().map(SystemMenu::getUrl).collect(Collectors.toSet());
|
}
|
tokenVo.setMenu(collect1);
|
tokenVo.setName(systemUser.getName());
|
tokenVo.setAccountLevel(systemUser.getAccountLevel());
|
switch (systemUser.getAccountLevel()){
|
case 1:
|
tokenVo.setCityCode("510400");
|
break;
|
case 2:
|
tokenVo.setCityCode("510400");
|
tokenVo.setDistrictsCode(systemUser.getDistrictsCode());
|
break;
|
case 3:
|
tokenVo.setCityCode("510400");
|
tokenVo.setDistrictsCode(systemUser.getDistrictsCode());
|
tokenVo.setStreetId(systemUser.getStreetId());
|
break;
|
case 4:
|
tokenVo.setCityCode("510400");
|
tokenVo.setDistrictsCode(systemUser.getDistrictsCode());
|
tokenVo.setStreetId(systemUser.getStreetId());
|
tokenVo.setCommunityId(systemUser.getCommunityId().toString());
|
break;
|
}
|
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<IPage<SystemUserListVo>> list(SystemUserList query){
|
Integer id = this.getLoginUserInfoSanGeShenBian().getId();
|
SystemUser user = systemUserService.getById(id);
|
IPage<SystemUserListVo> list = systemUserService.list(user, query);
|
return R.ok(list);
|
}
|
|
|
|
@PostMapping("/add")
|
@ApiOperation(value = "添加人员", tags = {"三个身边管理后台-人员管理"})
|
@SysLog(operatorCategory = "添加账号",operId = 4)
|
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<SystemUser>().eq(SystemUser::getPhone, systemUser.getPhone()).ne(SystemUser::getStatus, 3));
|
if(0 < count){
|
return R.fail("手机号重复。");
|
}
|
|
String districtsCode = systemUser.getDistrictsCode();
|
if (!StringUtils.isEmpty(districtsCode)){
|
BcRegion bcRegion = bcRegionService.getOne(new LambdaQueryWrapper<BcRegion>().eq(BcRegion::getRegionCode, districtsCode));
|
systemUser.setDistricts(bcRegion.getRegionName());
|
}
|
|
String streetId = systemUser.getStreetId();
|
if (!StringUtils.isEmpty(streetId)){
|
ComStreet comStreet = comStreetService.getById(streetId);
|
systemUser.setStreet(comStreet.getName());
|
}
|
Long communityId = systemUser.getCommunityId();
|
if (communityId != null){
|
ComAct act = comActService.getById(communityId);
|
systemUser.setCommunity(act.getName());
|
}
|
|
systemUser.setStatus(1);
|
systemUser.setCreateTime(LocalDateTime.now());
|
// 2.0.1 默认管理员
|
systemUser.setIsAdmin(1);
|
systemUserService.save(systemUser);
|
return R.ok();
|
}
|
|
|
@PostMapping("/edit")
|
@ApiOperation(value = "编辑人员", tags = {"三个身边后台-人员管理"})
|
@SysLog(operatorCategory = "编辑账号",operId = 4)
|
public R edit(@RequestBody SystemUser systemUser){
|
long 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("手机号重复。");
|
}
|
|
String districtsCode = systemUser.getDistrictsCode();
|
if (!StringUtils.isEmpty(districtsCode)){
|
BcRegion bcRegion = bcRegionService.getOne(new LambdaQueryWrapper<BcRegion>().eq(BcRegion::getRegionCode, districtsCode));
|
systemUser.setDistricts(bcRegion.getRegionName());
|
}
|
|
String streetId = systemUser.getStreetId();
|
if (!StringUtils.isEmpty(streetId)){
|
ComStreet comStreet = comStreetService.getById(streetId);
|
systemUser.setStreet(comStreet.getName());
|
}
|
Long communityId = systemUser.getCommunityId();
|
if (communityId != null){
|
ComAct act = comActService.getById(communityId);
|
systemUser.setCommunity(act.getName());
|
}
|
|
|
systemUser.setStatus(1);
|
systemUser.setCreateTime(LocalDateTime.now());
|
systemUserService.updateById(systemUser);
|
return R.ok();
|
}
|
|
|
@DeleteMapping("/delete/{id}")
|
@ApiOperation(value = "删除人员", tags = {"三个身边后台-人员管理"})
|
@SysLog(operatorCategory = "删除账号",operId = 4)
|
public R delete(@PathVariable("id") Integer id){
|
SystemUser systemUser = systemUserService.getById(id);
|
systemUser.setStatus(3);
|
systemUserService.updateById(systemUser);
|
return R.ok(systemUser.getName());
|
}
|
|
|
@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 = 2,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 = 2,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);
|
}
|
|
|
|
@GetMapping("/getAdministrativeDivision/{id}/{tier}")
|
@ApiOperation(value = "获取行政区划层级联动数据", tags = {"三个身边后台-人员管理"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "id", value = "上级id", required = false, dataType = "string"),
|
@ApiImplicitParam(name = "tier", value = "数据层级(2=区县,3=街道,4=社区)", required = true, dataType = "int"),
|
})
|
@OperLog(operModul = "三个身边后台",operType = 0,businessType = "获取行政区划层级联动数据")
|
public R<List<RegionVO>> getAdministrativeDivision(@PathVariable("id") String id, @PathVariable("tier") Integer tier){
|
List<RegionVO> list = new ArrayList<>();
|
//区县
|
if(2 == tier){
|
list = systemUserService.getRegion("510400");
|
}
|
//街道
|
if(3 == tier){
|
list = systemUserService.getStreet(id);
|
}
|
//社区
|
if(4 == tier){
|
list = systemUserService.getCommunity(id);
|
}
|
log.info("获取行政区划层级联动数据:{}", list);
|
return R.ok(list);
|
}
|
@GetMapping("/regionTree")
|
@ApiOperation(value = "获取区县-街道-社区树",tags = {"三个身边后台-人员管理"})
|
public R<List<RegionVO>> regionTree(){
|
SystemUserVo loginUserInfo = getLoginUserInfoSanGeShenBian();
|
List<RegionVO> list = systemUserService.getRegionTree(loginUserInfo);
|
return R.ok(list);
|
}
|
|
|
@GetMapping("/getSignature")
|
@ApiOperation(value = "获取签名",tags = {"三个身边小程序"})
|
public R<?> getSignature() throws Exception {
|
String APP_ID = "wx118de8a734d269f0";
|
String APP_SECRET = "0264342daefde5cd70a6adada09ee5b1";
|
String accessToken = SignatureUtil.getAccessToken(APP_ID, APP_SECRET);
|
String jsapiTicket = SignatureUtil.getJsApiTicket(accessToken);
|
String nonceStr = UUID.randomUUID().toString().replace("-", "");
|
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
|
String url = "https://huacheng.psciio.com/web/sangeshenbian/"; // 当前页面的URL,不包含#及其后面部分
|
|
String signature = SignatureUtil.getSignature(jsapiTicket, nonceStr, timestamp, url);
|
|
System.out.println("appId: " + APP_ID);
|
System.out.println("timestamp: " + timestamp);
|
System.out.println("nonceStr: " + nonceStr);
|
System.out.println("signature: " + signature);
|
SignatureVO signatureVO = new SignatureVO();
|
signatureVO.setTimestamp(timestamp);
|
signatureVO.setNonceStr(nonceStr);
|
signatureVO.setSignature(signature);
|
return R.ok(signatureVO);
|
}
|
|
|
|
}
|