package com.panzhihua.sangeshenbian.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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; @Resource private ISystemUserLevelService systemUserLevelService; @PostMapping("/login") @ApiOperation(value = "登录", tags = {"三个身边后台-登录"}) @SysLog(operatorCategory = "登录",operId = 1) 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); tokenVo.setUserId(Long.valueOf(systemUser.getId())); 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){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().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 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> list(SystemUserList query){ Integer id = this.getLoginUserInfoSanGeShenBian().getId(); SystemUser user = systemUserService.getById(id); IPage 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); List systemUserLevels = systemUser.getSystemUserLevels(); if(systemUserLevels==null || systemUserLevels.isEmpty()){ return R.fail("请选择账号层级"); } // 获取最高层级的用于原来的判断 systemUserLevels.sort(Comparator.comparing(SystemUserLevel::getLevel)); Integer level = systemUserLevels.get(0).getLevel(); systemUser.setAccountLevel(level); 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("手机号重复。"); } String districtsCode = systemUser.getDistrictsCode(); if (!StringUtils.isEmpty(districtsCode)){ BcRegion bcRegion = bcRegionService.getOne(new LambdaQueryWrapper().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); // 2.0.1添加账号层级 systemUserLevels.forEach(e->{ e.setSystemUserId(systemUser.getId()); e.setStatus(1); }); systemUserLevelService.saveBatch(systemUserLevels); return R.ok(); } @PostMapping("/edit") @ApiOperation(value = "编辑人员", tags = {"三个身边后台-人员管理"}) @SysLog(operatorCategory = "编辑账号",operId = 4) public R edit(@RequestBody SystemUser systemUser){ List systemUserLevels = systemUser.getSystemUserLevels(); if(systemUserLevels==null || systemUserLevels.isEmpty()){ return R.fail("请选择账号层级"); } 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("手机号重复。"); } String districtsCode = systemUser.getDistrictsCode(); if (!StringUtils.isEmpty(districtsCode)){ BcRegion bcRegion = bcRegionService.getOne(new LambdaQueryWrapper().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()); // 获取最高层级的用于原来的判断 systemUserLevels.sort(Comparator.comparing(SystemUserLevel::getLevel)); Integer level = systemUserLevels.get(0).getLevel(); systemUser.setAccountLevel(level); systemUserService.updateById(systemUser); // 移除原来层级 在添加新层级 systemUserLevelService.remove(new LambdaQueryWrapper().eq(SystemUserLevel::getSystemUserId, systemUser.getId())); systemUserLevels.forEach(e->{ e.setSystemUserId(systemUser.getId()); e.setStatus(1); }); systemUserLevelService.saveBatch(systemUserLevels); 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); systemUserLevelService.update(new LambdaUpdateWrapper().eq(SystemUserLevel::getSystemUserId, id).set(SystemUserLevel::getStatus,3)); return R.ok(systemUser.getName()); } @GetMapping("/getSystemUserInfo/{id}") @ApiOperation(value = "查询人员详情", tags = {"三个身边后台-人员管理"}) @OperLog(operModul = "三个身边后台",operType = 0,businessType = "查询人员详情") public R getSystemUserInfo(@PathVariable("id") Integer id){ SystemUser systemUser = systemUserService.getById(id); List listBySystemUserId = systemUserLevelService.getListBySystemUserId(id); listBySystemUserId.sort(Comparator.comparing(SystemUserLevel::getLevel)); systemUser.setSystemUserLevels(listBySystemUserId); 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 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); } @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> getAdministrativeDivision(@PathVariable("id") String id, @PathVariable("tier") Integer tier){ List 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("/getAdministrativeDivisionTwo") @ApiOperation(value = "获取行政区划层级联动数据--2.0.1", tags = {"三个身边后台-人员管理"}) @ApiImplicitParams({ }) @OperLog(operModul = "三个身边后台",operType = 0,businessType = "获取行政区划层级联动数据--2.0.1") public R> getAdministrativeDivisionTwo(){ ArrayList regionVOS = new ArrayList<>(); regionVOS.add(new RegionVO("1","市",new ArrayList<>(),1)); List list = bcRegionService.list(new LambdaQueryWrapper().eq(BcRegion::getDeleteFlag, 0).eq(BcRegion::getParentId, 510400)); ArrayList regionList = new ArrayList<>(); list.forEach(e->{ RegionVO regionVO = new RegionVO(); regionVO.setId(e.getRegionCode()); regionVO.setName(e.getRegionName()); regionVO.setTier(2); regionList.add(regionVO); }); regionVOS.add(new RegionVO("2","区县",regionList,2)); List list1 = comStreetService.list(new LambdaQueryWrapper().in(ComStreet::getAreaCode, regionList.stream().map(RegionVO::getId).collect(Collectors.toList()))); for (RegionVO regionVO : regionList) { ArrayList list2 = new ArrayList<>(); List collect = list1.stream().filter(e -> e.getAreaCode().toString().equals(regionVO.getId())).collect(Collectors.toList()); collect.forEach(e->{ RegionVO regionVO1 = new RegionVO(); regionVO1.setId(e.getStreetId()); regionVO1.setName(e.getName()); regionVO1.setTier(3); list2.add(regionVO1); }); regionVO.setChildren(list2); } regionVOS.add(new RegionVO("3","街道",regionList,3)); List list2 = comActService.list(); for (RegionVO regionVO : regionList) { List children = regionVO.getChildren(); for (RegionVO child : children) { List collect = list2.stream().filter(e -> e.getStreetId().toString().equals(child.getId())).collect(Collectors.toList()); ArrayList list3 = new ArrayList<>(); collect.forEach(e->{ RegionVO regionVO2 = new RegionVO(); regionVO2.setId(e.getCommunityId().toString()); regionVO2.setName(e.getName()); regionVO2.setTier(4); list3.add(regionVO2); }); child.setChildren(list3); } } regionVOS.add(new RegionVO("4","社区",regionList,4)); return R.ok(regionVOS); } @GetMapping("/regionTree") @ApiOperation(value = "获取区县-街道-社区树",tags = {"三个身边后台-人员管理"}) public R> regionTree(){ SystemUserVo loginUserInfo = getLoginUserInfoSanGeShenBian(); List 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 url = "http://192.168.110.91:8080/#/pages/Appeal/Appeal/"; // 当前页面的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); } }