From f7b701932580553ee40d4c0390088fa24cf11332 Mon Sep 17 00:00:00 2001 From: lilin Date: Thu, 15 May 2025 14:08:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=84=E7=BB=87=EF=BC=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=EF=BC=8C=E8=A7=92=E8=89=B2=EF=BC=8C=E8=8F=9C=E5=8D=95=EF=BC=8C?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-backend/pom.xml | 6 + .../system/controller/MenuController.java | 154 ++++++++ .../controller/OrganizationController.java | 165 ++++++++ .../system/controller/RoleController.java | 177 +++++++++ .../system/controller/UserController.java | 160 ++++++++ .../gisbi/application/system/domain/Menu.java | 85 ++++ .../system/domain/Organization.java | 96 +++++ .../gisbi/application/system/domain/Role.java | 74 ++++ .../gisbi/application/system/domain/User.java | 110 ++++++ .../application/system/mapper/MenuMapper.java | 10 + .../system/mapper/OrganizationMapper.java | 9 + .../application/system/mapper/RoleMapper.java | 49 +++ .../application/system/mapper/UserMapper.java | 78 ++++ .../system/mapper/xml/MenuMapper.xml | 6 + .../system/mapper/xml/OrganizationMapper.xml | 5 + .../system/service/IMenuService.java | 52 +++ .../system/service/IOrganizationService.java | 43 ++ .../system/service/IRoleService.java | 50 +++ .../system/service/IUserService.java | 90 +++++ .../system/service/impl/MenuServiceImpl.java | 242 ++++++++++++ .../service/impl/OrganizationServiceImpl.java | 178 +++++++++ .../system/service/impl/RoleServiceImpl.java | 141 +++++++ .../system/service/impl/UserServiceImpl.java | 370 ++++++++++++++++++ .../src/main/resources/application.yml | 2 + .../src/main/resources/mybatis/RoleMapper.xml | 39 ++ .../src/main/resources/mybatis/UserMapper.xml | 84 ++++ 26 files changed, 2475 insertions(+) create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/domain/Menu.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/domain/Organization.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/domain/Role.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/domain/User.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/MenuMapper.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/OrganizationMapper.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/MenuMapper.xml create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/OrganizationMapper.xml create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/IUserService.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/impl/RoleServiceImpl.java create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java create mode 100644 core/core-backend/src/main/resources/mybatis/RoleMapper.xml create mode 100644 core/core-backend/src/main/resources/mybatis/UserMapper.xml diff --git a/core/core-backend/pom.xml b/core/core-backend/pom.xml index 8588412..b03f6cf 100644 --- a/core/core-backend/pom.xml +++ b/core/core-backend/pom.xml @@ -67,6 +67,12 @@ org.springframework.boot spring-boot-starter-test + + + cn.hutool + hutool-all + 5.8.8 + org.springframework.boot diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java new file mode 100644 index 0000000..c9c2479 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java @@ -0,0 +1,154 @@ +package io.gisbi.application.system.controller; + + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import io.gisbi.application.system.domain.Menu; +import io.gisbi.application.system.service.IMenuService; +import io.gisbi.config.ResponseResult; +import io.gisbi.utils.AuthUtils; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; + +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + *

+ * 菜单及按钮 前端控制器 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@RestController +@RequestMapping("/menuInterface") +public class MenuController { + + @Resource + private IMenuService menuService; + + + /*********************************** + * 用途说明:获取菜单结构树(含按钮) + * 参数说明 + * appId 应用ID 关联应用系统 + * name 名称 + * isdisplay 是否显示 + * 返回值说明: 菜单结构树集合 + ***********************************/ + @PostMapping("/getMenuButtonTree") + @ResponseBody + public List> getMenuButtonTree(String appId,String name,String isdisplay) { + return menuService.getMenuButtonTree(appId, name, isdisplay); + } + + /*********************************** + * 用途说明:获取菜单结构树(不含按钮) + * 参数说明 + * appId 应用ID 关联应用系统 + * name 名称 + * isdisplay 是否显示 + * 返回值说明: 菜单结构树集合 + ***********************************/ + @PostMapping("/getMenuTreegetMenuTree") + @ResponseBody + public List> getMenuTree(String appId, + String name, + String isdisplay) { + return menuService.getMenuTree(appId, name, isdisplay); + } + + /*********************************** + * 用途说明:根据id查询菜单或按钮详情 + * 参数说明 + * id 菜单或按钮表id + * 返回值说明: 菜单或按钮表对象 + ***********************************/ + @PostMapping("/getMenuById") + @ResponseBody + public ResponseResult getMenuById(String id) { + Menu menu = menuService.getById(id); + return ResponseResult.successData(menu); + } + + /*********************************** + * 用途说明:新增菜单及按钮 + * 参数说明 + * sysMenu 菜单或按钮表对象 + * 返回值说明: 是否添加成功提示 + ***********************************/ + @PostMapping("/addMenu") + @ResponseBody + public ResponseResult addMenu(@RequestBody Menu menu) { + boolean isOk = menuService.addMenu(menu); + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:修改菜单及按钮根据ID + * 参数说明 + * sysMenu 菜单或按钮表对象 + * 返回值说明: 是否修改成功提示 + ***********************************/ + @PostMapping("/updateMenuById") + @ResponseBody + public ResponseResult updateById(@RequestBody Menu menu) { + //填写 当前用户名称 + menu.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + //填写 当前日期 + menu.setLastmodifydate(LocalDateTime.now()); + boolean isOk = menuService.updateById(menu); + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:根据id删除菜单或按钮 + * 参数说明 + * id 删除列的id + * 返回值说明: 是否删除成功 + ***********************************/ + @PostMapping("/deleteMenuById") + @ResponseBody + public ResponseResult deleteById(@RequestParam String id) { + boolean ok = menuService.deleteById(id); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:更新菜单及按钮是否有效 + * 参数说明 + * id 菜单及按钮表id + * isdisplay 是否有效字段 + * 返回值说明: 是否更新成功 + ***********************************/ + @PostMapping("/setIsDisplay") + @ResponseBody + public ResponseResult setIsDisplay(String id, String isdisplay) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + //根据id 修改是否显示 ,最近修改人,最近修改时间 + updateWrapper.eq("id", id) + .set("isdisplay", isdisplay) + .set( "lastmodifier", AuthUtils.getUser().getUserId().toString()) + .set("lastmodifydate",new Timestamp(System.currentTimeMillis())); + boolean ok = menuService.update(updateWrapper); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java new file mode 100644 index 0000000..0fe5a56 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java @@ -0,0 +1,165 @@ +package io.gisbi.application.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.xiaoymin.knife4j.core.util.StrUtil; +import io.gisbi.application.system.domain.Organization; +import io.gisbi.application.system.service.IOrganizationService; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; +import io.gisbi.config.ResponseResult; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 组织机构 前端控制器 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@RestController +@RequestMapping("/organization") +public class OrganizationController { + + @Resource + private IOrganizationService organizationService; + + + /*********************************** + * 用途说明:获取企业列表 + * 参数说明 + * id 企业id + * orgName 部门名称 + * 返回值说明: 企业列表集合 + ***********************************/ + @PostMapping("/getOrganization") + @ResponseBody + public List> getOrganization(String appId, String parentid, String orgName) { + return organizationService.getOrganization(appId, parentid, orgName); + } + + /*********************************** + * 用途说明:根据企业ID查询部门信息 + * 参数说明 + * id 企业id + * orgName 部门名称 + * 返回值说明: 系统部门框架对象 + ***********************************/ + @PostMapping("/getOrganizationById") + @ResponseBody + public ResponseResult getOrganizationById(String id, String orgName) { + if (StrUtil.isBlank(id)) { + return ResponseResult.error("查询失败!"); + } + List Organizations = organizationService.getOrganizationById(id, orgName); + return ResponseResult.successData(Organizations); + } + + + /*********************************** + * 用途说明:新增系统组织框架 + * 参数说明 + * organization 系统组织框架对象 + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/addOrganization") + @ResponseBody + public ResponseResult addOrganization(@RequestBody Organization organization) { + if (organization == null) { + return ResponseResult.error("组织信息不能为空"); + } + //新增 系统组织R + boolean isOk = organizationService.addOrganization(organization); + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error("新增失败,未知原因"); + } + } + + /*********************************** + * 用途说明:修改系统组织框架 + * 参数说明 + * organization 系统组织框架对象 + * 返回值说明: 是否修改成功 + ***********************************/ + @PostMapping("/updateOrganizationById") + @ResponseBody + public ResponseResult updateOrganizationById(@RequestBody Organization organization) { + if (organization == null) { + return ResponseResult.error("组织信息不能为空"); + } + //填写 最近修改者 + organization.setLastmodifier("admin"); + //填写 最近修改时间 + organization.setLastmodifydate(LocalDateTime.now()); + //根据id 修改系统组织 + boolean isOk = organizationService.updateById(organization); + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:设置组织是否有效 + * 参数说明 + * sysOrganization 系统组织框架对象 + * 返回值说明: 是否修改成功 + ***********************************/ + @PostMapping("/setIsValid") + @ResponseBody + public ResponseResult setIsValid(@RequestParam String id, @RequestParam String isvaild) { + // 参数校验 + if (id == null || id.isEmpty() || isvaild == null || isvaild.isEmpty()) { + return ResponseResult.error("参数不能为空"); + } + // 校验 isvalid 的合法性(示例) + if (!"0".equals(isvaild) && !"1".equals(isvaild)) { + return ResponseResult.error("isvaild 参数不合法"); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", id) + .set("isvaild", isvaild) + .set("lastmodifier", "admin") + .set("lastmodifydate", LocalDateTime.now()); + boolean isOk = organizationService.update(updateWrapper); + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + + /*********************************** + * 用途说明:根据id删除系统组织框架 + * 参数说明 + * id 系统组织框架id + * 返回值说明: 是否删除成功 + ***********************************/ + @DeleteMapping("/deleteById") + @ResponseBody + public ResponseResult deleteById(@RequestParam String id) { + String[] orgIds = id.split(","); + for (String orgId : orgIds) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + List list = organizationService.list(queryWrapper.eq(Organization::getParentid, orgId)); + List ids = list.stream().map(Organization::getId).collect(Collectors.toList()); + boolean isOk = organizationService.removeById(orgId); + if (!isOk) { + continue; + } + for (String oid : ids) { + organizationService.removeById(oid); + } + } + return ResponseResult.success(); + } +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java new file mode 100644 index 0000000..b73373d --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java @@ -0,0 +1,177 @@ +package io.gisbi.application.system.controller; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import io.gisbi.application.system.domain.Role; +import io.gisbi.application.system.service.IRoleService; +import io.gisbi.application.system.service.IUserService; +import io.gisbi.config.ResponseResult; +import io.gisbi.utils.AuthUtils; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; + +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.List; + +/** + *

+ * 角色 前端控制器 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@RestController +@RequestMapping("/role") +public class RoleController { + + @Resource + private IRoleService roleService; + + @Resource + private IUserService userService; + + + /*********************************** + * 用途说明:查询所有角色 + * 参数说明 + * rolename 角色名称 + * 返回值说明: 查询都有角色 + ***********************************/ + @PostMapping("/listRole") + @ResponseBody + public List listRole(String appId, String rolename) { + return roleService.listRole(appId,rolename); + } + + /*********************************** + * 用途说明:根据Id获取当个角色 + * 参数说明 + * id 角色表id + * 返回值说明: 根据id查询到角色详情 + ***********************************/ + @PostMapping("/getRoleById") + @ResponseBody + public ResponseResult getOneById(String id) { + Role role = roleService.getById(id); + return ResponseResult.successData(role); + } + + /*********************************** + * 用途说明:新增角色 + * 参数说明 + * sysRole 新增角色信息 + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/addRole") + @ResponseBody + public ResponseResult addRole(@RequestBody Role role) { + boolean isOk = roleService.addRole(role); + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:更新角色信息 + * 参数说明 + * role 角色对象 + * 返回值说明: 是否修改成功 + ***********************************/ + @PostMapping("/updateRoleById") + @ResponseBody + public ResponseResult updateRoleById(@RequestBody Role role) { + //更新最近修改人 + role.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + //更新最近修改时间 + role.setLastmodifydate(LocalDateTime.now()); + //根据id更新角色信息 + boolean ok = roleService.updateById(role); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:根据id删除角色 + * 参数说明 + * id 角色id + * 返回值说明: 是否删除成功 + ***********************************/ + @PostMapping("/deleteRoleById") + @ResponseBody + public ResponseResult deleteRoleById(@RequestParam String id) { + roleService.deleteById(id); + return ResponseResult.success(); + } + + /*********************************** + * 用途说明:设置角色是否有效 + * 参数说明 + * id 角色id + *isvaild 是否有效(1 是 0 否 ) + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/setIsvaild") + @ResponseBody + public ResponseResult setIsvaild(String id, String isvaild) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + //根据id 更新业务范围,最近修改人,最近修改时间 + updateWrapper.eq("id", id) + .set("isvaild", isvaild) + .set("lastmodifier", AuthUtils.getUser().getUserId().toString()) + .set("lastmodifydate",LocalDateTime.now()); + boolean ok = roleService.update(updateWrapper); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:角色添加用户 + * 参数说明 + * roleid 角色id + * userids 用户id组 + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/setRoleUsers") + @ResponseBody + public ResponseResult setRoleUsers(String roleid, String userids) { + boolean isOk = true; + String[] temp = userids.split(","); + for (String userid : temp) { + isOk = isOk && userService.addUserRoles(roleid, userid); + } + if (isOk) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:删除角色用户 + * 参数说明 + * roleid 角色id + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/deleteRoleUser") + @ResponseBody + public ResponseResult deleteRoleUsers(@RequestParam String roleid, + @RequestParam String userids) { + //根据角色id、用户id删除 + boolean ok = roleService.deleteRoleUsers(roleid, userids); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java new file mode 100644 index 0000000..e24e9e2 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java @@ -0,0 +1,160 @@ +package io.gisbi.application.system.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.gisbi.application.system.domain.User; +import io.gisbi.application.system.service.IUserService; +import io.gisbi.config.ResponseResult; +import io.micrometer.common.util.StringUtils; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; + +import java.sql.Timestamp; +import java.util.Map; + +/** + *

+ * 用户 前端控制器 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@RestController +@RequestMapping("/user") +public class UserController { + + @Resource + private IUserService userService; + + /*********************************** + * 用途说明:新增系统用户 + * 参数说明 + * user 用户对象 + * roleids 角色ID + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/addUser") + @ResponseBody + public ResponseResult addUser(@RequestBody User user, String roleids) { + Map reslut = userService.addUser(user, roleids); + return ResponseResult.successData(reslut); + } + + /*********************************** + * 用途说明:修改用户信息 + * 参数说明 + * user 用户对象 + * roleids 角色ID + * 返回值说明: 是否新增成功 + ***********************************/ + @PostMapping("/updateUser") + @ResponseBody + public ResponseResult updateUser(@RequestBody User user, String roleids) { + if (StringUtils.isEmpty(user.getId())) { + return ResponseResult.error("没有用户ID"); + } + Map reslut = userService.updateById(user, roleids); + return ResponseResult.successData(reslut); + } + + /*********************************** + * 用途说明:查询用户信息 + * 参数说明 + * orgid 所属组织ID + * nickname 用户昵称 + * page 分页条件 + * 返回值说明: 用户信息集合 + ***********************************/ + @GetMapping("/queryUsers") + @ResponseBody + public ResponseResult queryUsers(String orgid,String appId, String nickname, Page page) { + Page> mapPage = userService.queryUsers(orgid, appId, nickname, page); + return ResponseResult.successData(mapPage); + } + + /*********************************** + * 用途说明:根据ID删除用户 + * 参数说明 + *id 用户id + * 返回值说明: 判断是否删除成功 + ************************************/ + @PostMapping("/deleteUserById") + @ResponseBody + public ResponseResult deleteUserById(String id) { + if (id == null || id.trim().isEmpty()) { + return ResponseResult.error("用户ID不能为空"); + } + boolean result = userService.deleteUserById(id); + if (!result) { + return ResponseResult.error("删除用户失败,可能用户不存在"); + } + return ResponseResult.success(); + } + + /*********************************** + * 用途说明:根据ID批量删除用户 + * 参数说明 + *ids 用户id集合 + * 返回值说明: 判断是否删除成功 + ************************************/ + @PostMapping("/deleteUserByIds") + @ResponseBody + public ResponseResult deleteUserByIds(String ids) { + if (StringUtils.isBlank(ids)) { + return ResponseResult.error("参数为空"); + } + boolean ok = userService.deleteUserByIds(ids); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + + + /*********************************** + * 用途说明:设置账号状态(管理员) + * 参数说明 + *id 用户id + * status 设置状态 + * 返回值说明: 判断是否设置成功 + ************************************/ + @PostMapping("/setStatus") + @ResponseBody + public ResponseResult setStatus(@RequestParam String id,@RequestParam String status) { + if (StringUtils.isEmpty(id)) { + return ResponseResult.error("用户ID为空"); + } + if (StringUtils.isEmpty(status)) { + return ResponseResult.error("设置状态为空"); + } + boolean ok = userService.setStatus(id, status); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:重置用户密码(管理员) + * 参数说明 + *id 重置密码的 用户id + * 返回值说明: 判断是否重置成功 + ************************************/ + @PostMapping("/resetPassword") + @ResponseBody + public ResponseResult resetPassword(String id) throws Exception { + if (StrUtil.isBlank(id)) { + ResponseResult.error("参数为空"); + } + boolean ok = userService.resetPassword(id); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/domain/Menu.java b/core/core-backend/src/main/java/io/gisbi/application/system/domain/Menu.java new file mode 100644 index 0000000..086989d --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/domain/Menu.java @@ -0,0 +1,85 @@ +package io.gisbi.application.system.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@TableName("app_menu") +public class Menu { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + /** + * 应用ID 关联应用系统 + */ + private String appId; + /** + * 菜单类型 01-目录 02-菜单 + */ + private String type; + /** + * 菜单编号 + */ + private String code; + /** + * 同级序号 + */ + private Integer orderno; + /** + * 菜单名称 + */ + private String name; + /** + * 菜单图标 base64存储 + */ + private String icon; + /** + * 是否外链 0-非外部 1-是外链 + */ + private String islink; + /** + * 菜单URL 内部资源页面URL访问地址 + */ + private String url; + /** + * 模块ID 菜单关联的模块ID + */ + private String moduleId; + /** + * 父级菜单ID 顶级为0 + */ + private String parentid; + /** + * 是否显示 0-不显示 1-显示 + */ + private String isdisplay; + /** + * 最近修改者 + */ + private String lastmodifier; + /** + * 最近修改日期 + */ + private LocalDateTime lastmodifydate; + /** + * 备用1 + */ + private String custom1; + + /** + * 备用2 + */ + private String custom2; + + /** + * 备用3 + */ + private String custom3; +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/domain/Organization.java b/core/core-backend/src/main/java/io/gisbi/application/system/domain/Organization.java new file mode 100644 index 0000000..136a686 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/domain/Organization.java @@ -0,0 +1,96 @@ +package io.gisbi.application.system.domain; + +/** + *

+ * 组织机构 + *

+ * + * @author lilin + * @since 2025-05-08 + */ + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@TableName("app_organization") +public class Organization { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + /** + * 应用ID 关联应用系统 + */ + private String appId; + /** + * 组织类型:01-公司 02-部门 + */ + private String orgtype; + /** + * 组织编号 + */ + private String orgcode; + /** + * 组织名称 + */ + private String orgname; + /** + * 上级ID + */ + private String parentid; + /** + * 组织负责人 + */ + private String manager; + /** + * 组织详情 + */ + private String description; + /** + * 联系地址 + */ + private String address; + /** + * 联系电话 + */ + private String contactPhone; + /** + * 联系人 + */ + private String contactPerson; + /** + * 是否有效 1-是 0-否 + */ + private String isvaild; + /** + * 最近修改者 + */ + private String lastmodifier; + /** + * 最近修改日期 + */ + private LocalDateTime lastmodifydate; + /** + * 备用1 + */ + private String custom1; + + /** + * 备用2 + */ + private String custom2; + + /** + * 备用3 + */ + private String custom3; + + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/domain/Role.java b/core/core-backend/src/main/java/io/gisbi/application/system/domain/Role.java new file mode 100644 index 0000000..b24e500 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/domain/Role.java @@ -0,0 +1,74 @@ +package io.gisbi.application.system.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + *

+ * 角色 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@Getter +@Setter +@TableName("app_role") +public class Role { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + /** + * 应用ID 关联应用系统 + */ + private String appId; + /** + * 角色编号 系统生成,三位编号 + */ + private String rolecode; + /** + * 角色名称 + */ + private String rolename; + /** + * 角色类别 1-应用管理员 2-应用普通用户 + */ + private String type; + /** + * 角色描述 + */ + private String description; + /** + * 是否有效 1-是 0-否 + */ + private String isvaild; + /** + * 最近修改者 + */ + private String lastmodifier; + /** + * 最近修改日期 + */ + private LocalDateTime lastmodifydate; + /** + * 备用1 + */ + private String custom1; + + /** + * 备用2 + */ + private String custom2; + + /** + * 备用3 + */ + private String custom3; + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/domain/User.java b/core/core-backend/src/main/java/io/gisbi/application/system/domain/User.java new file mode 100644 index 0000000..1fa0963 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/domain/User.java @@ -0,0 +1,110 @@ +package io.gisbi.application.system.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + *

+ * 用户 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@Getter +@Setter +@TableName("app_user") +public class User { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + /** + * 应用ID 关联应用系统 + */ + private String appId; + /** + * 所属组织 + */ + private String orgid; + /** + * 用户类型 0-管理员 1-普通用户 + */ + private String usertype; + /** + * 用户名称 用户名称(账号) + */ + private String username; + /** + * 用户昵称(中文) + */ + private String nickname; + /** + * 登录密码 + */ + private String password; + /** + * 邮箱 + */ + private String email; + /** + * 手机号 + */ + private String phone; + /** + * 头像(预留) + */ + private String avatar; + /** + * 账号状态(1-正常 0-停用) + */ + private String status; + /** + * 密码有限期 密码有限期(天) + */ + private Integer pwdvalidperiod; + /** + * 登录失败次数 允许的登录失败次数 + */ + private Integer failednum; + /** + * 用户指定登录IP 如果设置了IP,则只允许IP用户登录 + */ + private String loginip; + /** + * 登录失败锁定时间 + */ + private LocalDateTime failedlocktime; + /** + * 密码修改时间 + */ + private LocalDateTime pwdresettime; + /** + * 最近修改者 + */ + private String lastmodifier; + /** + * 最近修改日期 + */ + private LocalDateTime lastmodifydate; + /** + * 备用1 + */ + private String custom1; + + /** + * 备用2 + */ + private String custom2; + + /** + * 备用3 + */ + private String custom3; +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/MenuMapper.java b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/MenuMapper.java new file mode 100644 index 0000000..3221e64 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/MenuMapper.java @@ -0,0 +1,10 @@ +package io.gisbi.application.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.gisbi.application.system.domain.Menu; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MenuMapper extends BaseMapper { + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/OrganizationMapper.java b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/OrganizationMapper.java new file mode 100644 index 0000000..9480983 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/OrganizationMapper.java @@ -0,0 +1,9 @@ +package io.gisbi.application.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.gisbi.application.system.domain.Organization; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OrganizationMapper extends BaseMapper { +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java new file mode 100644 index 0000000..d8a2aa1 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java @@ -0,0 +1,49 @@ +package io.gisbi.application.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.gisbi.application.system.domain.Role; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface RoleMapper extends BaseMapper { + /********************************** + * 用途说明: 根据用户id获取角色信息 + * 参数说明 id 角色id + * 返回值说明: void + ***********************************/ + List getRoleByUserId(String id); + + /********************************** + * 用途说明: 根据用户id获取角色id + * 参数说明 userid 用户id + * 返回值说明: void + ***********************************/ + List getRoleUsers(String userid, String appId); + + /*********************************** + * 用途说明:根据角色id删除角色菜单关联 + * 参数说明 + *id 角色id + * 返回值说明: 是否删除成功 + ***********************************/ + void deleteRoleMenus(String roleId); + + /*********************************** + * 用途说明:根据角色id删除角色用户关联 + * 参数说明 + *id 角色id + * 返回值说明: 是否删除成功 + ***********************************/ + void deleteRoleUser(String roleId); + + /*********************************** + * 用途说明:根据 角色id和用户id 删除 (admin除外) + * 参数说明 + *roleid 角色id + * urserid 用户id + * 返回值说明: 是否删除成功 + ***********************************/ + boolean deleteRoleUsers(String roleid, String urserid); +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java new file mode 100644 index 0000000..a756838 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java @@ -0,0 +1,78 @@ +package io.gisbi.application.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.gisbi.application.system.domain.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserMapper extends BaseMapper { + + + /*********************************** + * 用途说明:新增系统角色用户对照表 对用户分配角色 + * 参数说明 + * roleid 角色id + * userid 用户id + * 返回值说明: + ************************************/ + boolean addUserRoles(@Param("id") String id, @Param("appid") String appid, @Param("roleid") String roleid,@Param("userid") String userid); + + /*********************************** + * 用途说明:根据用户表id查询角色表所有角色id + * 参数说明 + * userid 用户id + * 返回值说明: + ************************************/ + List getRoleid(@Param("userid") String id); + + /*********************************** + * 用途说明:根据用户id删除所分配的不包含角色 + * 参数说明 + * userid 用户id + * roleids 多个角色id + * 返回值说明: + ************************************/ + void delInRoleUsersByUserid(@Param("userid") String userid,@Param("roleids")String[] roleids); + + /*********************************** + * 用途说明:根据用户id删除所分配的角色 + * 参数说明 + * userid 用户id + * 返回值说明: + ************************************/ + boolean delRoleUsersByUserid( @Param("userid") String id); + + /*********************************** + * 用途说明:根据条件分页查询用户信息 + * 参数说明 + * orgid 所属组织ID + * nickname 用户昵称 + * page 分页条件 + * 返回值说明: + ************************************/ + Page> queryUsers(String orgid,String appId, String nickname, Page page); + + + /*********************************** + * 用途说明:根据ID删除用户与角色的关联信息 + * 参数说明 + * idList 用户id集合 + * 返回值说明: + ************************************/ + void delRoleUsersByUserIds(List idList); + + /*********************************** + * 用途说明:根据用户id 和角色id 查询 系统角色用户对照表 + * 参数说明 + * userid 用户id + * roleid 角色id + * 返回值说明: + ************************************/ + + List getRoleUsersByid(@Param("roleid") String roleid,@Param("userid") String userid); +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/MenuMapper.xml b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/MenuMapper.xml new file mode 100644 index 0000000..91ff491 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/MenuMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/OrganizationMapper.xml b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/OrganizationMapper.xml new file mode 100644 index 0000000..4f898f5 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/OrganizationMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java new file mode 100644 index 0000000..277e484 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java @@ -0,0 +1,52 @@ +package io.gisbi.application.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import io.gisbi.application.system.domain.Menu; + +import java.util.List; +import java.util.Map; +/** + *

+ * 菜单及按钮 服务类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +public interface IMenuService extends IService { + /*********************************** + * 用途说明:获取菜单结构树(含按钮) + * 参数说明 + * appId 应用ID 关联应用系统 + * name 名称 + * isdisplay 是否显示 + * 返回值说明: 菜单结构树集合 + ***********************************/ + List> getMenuButtonTree(String appId, String name, String isdisplay); + + /*********************************** + * 用途说明:获取菜单结构树(不含按钮) + * 参数说明 + * appId 应用ID 关联应用系统 + * name 名称 + * isdisplay 是否显示 + * 返回值说明: 菜单结构树集合 + ***********************************/ + List> getMenuTree(String appId, String name, String isdisplay); + + /*********************************** + * 用途说明:新增菜单及按钮 + * 参数说明 + * sysMenu 菜单或按钮表对象 + * 返回值说明: 是否添加成功提示 + ***********************************/ + boolean addMenu(Menu menu); + + /*********************************** + * 用途说明:根据id删除菜单或按钮 + * 参数说明 + * id 删除列的id + * 返回值说明: 是否删除成功 + ***********************************/ + boolean deleteById(String id); +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java new file mode 100644 index 0000000..7176930 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java @@ -0,0 +1,43 @@ +package io.gisbi.application.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import io.gisbi.application.system.domain.Organization; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 组织机构 服务类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +public interface IOrganizationService extends IService { + /*********************************** + * 用途说明:获取企业列表 + * 参数说明 + * 返回值说明: 企业列表集合 + ***********************************/ + List> getOrganization(String appId, String parentid, String orgname); + + /*********************************** + * 用途说明:根据企业ID查询部门信息 + * 参数说明 + * id 企业id + * orgName 部门名称 + * 返回值说明: 系统部门框架对象 + ***********************************/ + List getOrganizationById(String id, String orgName); + + /*********************************** + * 用途说明:新增系统组织框架 + * 参数说明 + * Organization 系统组织框架对象 + * 返回值说明: 是否新增成功 + ***********************************/ + boolean addOrganization(Organization organization); + + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java new file mode 100644 index 0000000..ce175d7 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java @@ -0,0 +1,50 @@ +package io.gisbi.application.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import io.gisbi.application.system.domain.Role; + +import java.util.List; + +/** + *

+ * 角色 服务类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +public interface IRoleService extends IService { + + /********************************** + * 用途说明: 根据用户id获取角色id + * 参数说明 userid 用户id + * 返回值说明: void + ***********************************/ + List getRoleUsers(String userid,String appId); + + /*********************************** + * 用途说明:新增角色 + * 参数说明 + * sysRole 新增角色信息 + * 返回值说明: 是否新增成功 + ***********************************/ + boolean addRole(Role role); + + /*********************************** + * 用途说明:查询所有角色 + * 参数说明 + * rolename 角色名称 + * 返回值说明: 查询都有角色 + ***********************************/ + List listRole(String appId, String rolename); + + void deleteById(String id); + + /*********************************** + * 用途说明:删除角色用户 + * 参数说明 + * roleid 角色id + * 返回值说明: 是否新增成功 + ***********************************/ + boolean deleteRoleUsers(String roleid, String userids); +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IUserService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IUserService.java new file mode 100644 index 0000000..b3e86e4 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IUserService.java @@ -0,0 +1,90 @@ +package io.gisbi.application.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import io.gisbi.application.system.domain.User; + +import java.util.Map; + +/** + *

+ * 用户 服务类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +public interface IUserService extends IService { + + + + /*********************************** + * 用途说明:新增系统用户 + * 参数说明 + * user 用户对象 + * roleids 角色ID + * 返回值说明: 是否新增成功 + ***********************************/ + Map addUser(User user, String roleids); + + /*********************************** + * 用途说明:修改用户信息 + * 参数说明 + * user 用户对象 + * roleids 角色ID + * 返回值说明: 是否新增成功 + ***********************************/ + Map updateById(User user, String roleids); + + /*********************************** + * 用途说明:查询用户信息 + * 参数说明 + * orgid 所属组织ID + * nickname 用户昵称 + * page 分页条件 + * 返回值说明: 用户信息集合 + ***********************************/ + Page> queryUsers(String orgid, String nickname,String appId, Page page); + + /*********************************** + * 用途说明:根据id删除用户 + * 参数说明 + *id 用户id + * 返回值说明: 判断是否删除成功 + ************************************/ + Boolean deleteUserById(String id); + + /*********************************** + * 用途说明:根据ID批量删除用户 + * 参数说明 + *ids 用户id集合 + * 返回值说明: 判断是否删除成功 + ************************************/ + boolean deleteUserByIds(String ids); + + /*********************************** + * 用途说明:重置用户密码(管理员) + * 参数说明 + *id 重置密码的 用户id + * 返回值说明: 判断是否重置成功 + ************************************/ + boolean resetPassword(String id); + + /*********************************** + * 用途说明:设置账号状态(管理员) + * 参数说明 + *id 用户id + * status 设置状态 + * 返回值说明: 判断是否设置成功 + ************************************/ + boolean setStatus(String id, String status); + + /*********************************** + * 用途说明:角色添加用户 + * 参数说明 + * roleid 角色id + * userids 用户id组 + * 返回值说明: 是否新增成功 + ***********************************/ + boolean addUserRoles(String roleid, String userid); +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..dfa1971 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java @@ -0,0 +1,242 @@ +package io.gisbi.application.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.gisbi.application.system.domain.Menu; +import io.gisbi.application.system.mapper.MenuMapper; +import io.gisbi.application.system.service.IMenuService; +import io.gisbi.utils.AuthUtils; +import io.micrometer.common.util.StringUtils; +import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.sql.Timestamp; +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + *

+ * 菜单及按钮 服务实现类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@Service +public class MenuServiceImpl extends ServiceImpl implements IMenuService { + + @Resource + private MenuMapper menuMapper; + + //菜单图片路径 + @Value("${file-space.system}") + private String sysetmPath; + + @Override + public List> getMenuButtonTree(String appId, String name, String isdisplay) { + List> listMap = null; + //不带名称查询,返回树结构 + if (StringUtils.isEmpty(name)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("parentid", "0").eq("app_id", appId).orderByAsc("orderno"); + listMap = this.listMaps(queryWrapper); + + for (int i = 0; i < listMap.size(); i++) { + //查询下一子集 + List> childList = child(listMap.get(i).get( + "id").toString(), appId, name, null, null); + listMap.get(i).put("children", childList); //添加新列 子集 + } + } else { //根据菜单名称查询,直接返回类别 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like("name", name).eq("app_id", appId).orderByAsc("name"); + listMap = this.listMaps(queryWrapper); + } + return listMap; + } + + @Override + public List> getMenuTree(String appId, String name, String isdisplay) { + + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isNotEmpty(isdisplay)) { + queryWrapper.eq("isdisplay", isdisplay); + } else { + queryWrapper.eq("isdisplay", 1); + } + + //根据系统 ,类型不为2 显示,序号 正序排序 + queryWrapper.eq("parentid", "0").eq("systemcode", appId).ne( + "type", "02").orderByAsc("orderno"); + List> listMap = this.listMaps(queryWrapper); + for (int i = 0; i < listMap.size(); i++) { + List> childList = child(listMap.get(i).get( + "id").toString(), appId, name, isdisplay, "02");//查询下一子集 + listMap.get(i).put("children", childList); //添加新列 子集 + } + return listMap; + } + + @Override + public boolean addMenu(Menu menu) { + String parentId = menu.getParentid(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + //根据上级id 查询到总数 并累加 + int orderno = (int) (this.count(queryWrapper.eq("parentid", parentId)) + 1); + // 生成排序号 + // 生成编号 + QueryWrapper queryMaxCode = new QueryWrapper<>(); + queryMaxCode.eq("parentid", parentId); + // 查询最大的编号 + List maxList = this.listObjs(queryMaxCode.select("max(code) " + + "code").eq("app_id", menu.getAppId())); + Menu parentMenu = menuMapper.selectById(parentId); + // 最大编号转换成int类型 + String maxCode = maxList.isEmpty() ? "0" : (maxList.get(0) != null ? maxList.get(0).toString() : "0"); + int max = ObjectUtil.isEmpty(maxList) ? 0 : Integer.parseInt(maxCode); + DecimalFormat df; + if ("0".equals(menu.getParentid())) { + df = new DecimalFormat("00"); + } else if (parentMenu.getCode().length() == 2) { + df = new DecimalFormat("0000"); + } else { + df = new DecimalFormat("000000"); + } + //DecimalFormat df = new DecimalFormat("00"); + //int parentCode = Integer.parseInt(parentMenu.getCode()); + String parentCode = ""; + if (parentMenu != null) { + parentCode = parentMenu.getCode(); + } + // 生成的新编号 年月日+4位编号 + String code; + if (max > 0) { + code = df.format(max + 1); + } else { + max = max + 1; + if (StringUtils.isBlank(parentCode)) { + parentCode = "0" + max; + } else { + int i = Integer.parseInt(parentCode); + parentCode = i + "0" + max; + } + + int format = Integer.parseInt(parentCode); + code = df.format(format); + } + + // 判断是否显示字段 是否填写 为空 + if (StringUtils.isEmpty(menu.getIsdisplay())) { + // 默认设置成 1 显示 + menu.setIsdisplay("1"); + } + // 判断是否填写父级id 为空 默认设置成 0 + if (StringUtils.isEmpty(menu.getParentid())) { + menu.setParentid("0"); + } + // 添加编号 + menu.setCode(code); + // 添加排序号 + menu.setOrderno(orderno); + //填写 当前用户名称 + menu.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + //填写 当前日期 + menu.setLastmodifydate(LocalDateTime.now()); + return this.save(menu); + } + + + @Override + public boolean deleteById(String id) { + //根据id查询 + Menu menu = this.getById(id); + //图片路径 + String iconname = sysetmPath + "menu" + File.separator + menu.getIcon(); + //删除图标 + new File(iconname).delete(); + //根据id删除 + boolean isOk = this.removeById(id); + //删除成功同步更新表数据 + if (isOk) { + //1 创建list集合,用于封装所有删除目录或菜单id值 + List idList = new ArrayList<>(); + this.selectPermissionChildById(id, idList); + if (idList.size() > 0) { + menuMapper.deleteBatchIds(idList); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + //根据上级id 查询 根据 orderno 正序排序 + queryWrapper.eq("parentid", menu.getParentid()).orderByAsc( + "orderno"); + List list = this.list(queryWrapper); + for (int i = 0; i < list.size(); i++) { + Menu menuData = list.get(i); + //更新序列号 + menuData.setOrderno(i + 1); + } + //更新表数据 + this.updateBatchById(list); + } + return isOk; + } + + //2 根据当前菜单id,查询菜单里面子菜单id,封装到list集合 + private void selectPermissionChildById(String id, List idList) { + //查询菜单里面子菜单id + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("parentid", id); + wrapper.select("id"); + List childIdList = baseMapper.selectList(wrapper); + //把childIdList里面菜单id值获取出来,封装idList里面,做递归查询 + childIdList.stream().forEach(item -> { + //封装idList里面 + idList.add(item.getId()); + //递归查询 + this.selectPermissionChildById(item.getId(), idList); + }); + } + + + /*********************************** + * 用途说明:查询菜单及按钮树状图 + * 参数说明 + * parentid 上级id + *systemcode 系统 + * isdisplay 是否显示 + * type 按钮 + * 返回值说明: 菜单结构树集合 + ***********************************/ + private List> child(String parentid, + String appId, String name, + String isdisplay, String type) { + List> listMap = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("parentid", parentid).eq("app_id", appId); + //根据上级id 系统 查询 + if (StringUtils.isNotEmpty(type)) { + queryWrapper.ne("type", type); + } + //根据菜单名称查询 + if (StringUtils.isNotEmpty(name)) { + queryWrapper.like("name", name); + } + listMap = this.listMaps(queryWrapper.orderByAsc("orderno")); + if (listMap.size() > 0) { //判断是否存在子集 + for (int i = 0; i < listMap.size(); i++) { //遍历表数据 + List> childList = + child(listMap.get(i).get("id").toString(), appId + , name, isdisplay, type); //循环获取下一子集 + listMap.get(i).put("children", childList); //添加新列 子集 + } + } + return listMap; + } + + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java new file mode 100644 index 0000000..6b8240b --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java @@ -0,0 +1,178 @@ +package io.gisbi.application.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.xiaoymin.knife4j.core.util.StrUtil; +import io.gisbi.application.system.domain.Organization; +import io.gisbi.application.system.domain.User; +import io.gisbi.application.system.mapper.OrganizationMapper; +import io.gisbi.application.system.service.IOrganizationService; +import io.gisbi.application.system.service.IUserService; +import io.gisbi.utils.AuthUtils; +import io.micrometer.common.util.StringUtils; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + + +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + *

+ * 组织机构 服务实现类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@Service +public class OrganizationServiceImpl extends ServiceImpl implements IOrganizationService { + + @Resource + private IUserService userService; + + @Resource + private OrganizationMapper organizationMapper; + + public static final String DEFAULT_IS_VALID = "1"; + + /*********************************** + * 用途说明:获取企业列表 + * 参数说明 + * 返回值说明: 企业列表集合 + ***********************************/ + @Override + public List> getOrganization(String appId, String parentid, String orgname) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(parentid), Organization::getParentid, parentid); + queryWrapper.eq(StringUtils.isNotBlank(appId), Organization::getAppId, appId); + List> listMap = this.listMaps(queryWrapper.orderByAsc(Organization::getOrgcode)); + + if (listMap == null) { + return new ArrayList<>(); + } + + List> result = new ArrayList<>(); + + for (Map item : listMap) { + Object idObj = item.get("id"); + // 避免空指针 + if (idObj == null) { + continue; + } + List> childList = child(idObj.toString(), appId, orgname); + item.put("childList", childList); // 添加新列 子集 + if (childList != null && !childList.isEmpty()) { + result.add(item); // 仅保留有子节点的数据 + } + } + return result; + } + + + /*********************************** + * 用途说明:获取部门结构树 + * 参数说明 + * parentid 上级id + * orgname (根据参数查询部门名称) + * 返回值说明: 部门结构树 + ***********************************/ + private List> child(String parentid, String appId, String orgname) { + List> listMap; + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //根据上级id 查询 + queryWrapper.eq(StringUtils.isNotBlank(parentid), Organization::getParentid, parentid); + queryWrapper.eq(StringUtils.isNotBlank(appId), Organization::getAppId, appId); + //根据部门名称查询 + queryWrapper.like(StringUtils.isNotBlank(orgname), Organization::getOrgname, orgname); + + listMap = this.listMaps(queryWrapper.orderByAsc(Organization::getOrgcode)); + //判断是否存在子集 + if (listMap != null && !listMap.isEmpty()) { + //遍历表数据 + for (int i = 0; i < listMap.size(); i++) { + //循环获取下一子集 + List> childList = child(listMap.get(i).get("id").toString(), appId, orgname); + //添加新列 子集 + listMap.get(i).put("childList", childList); + } + } + return listMap; + } + + /*********************************** + * 用途说明:根据企业ID查询部门信息 + * 参数说明 + * id 企业id + * orgName 部门名称 + * 返回值说明: 系统部门框架对象 + ***********************************/ + @Override + public List getOrganizationById(String id, String orgName) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StrUtil.isNotBlank(orgName)) { + queryWrapper.like(Organization::getOrgname, orgName); + } + queryWrapper.eq(Organization::getParentid, id).orderByDesc(Organization::getOrgcode); + return this.list(queryWrapper); + } + + /*********************************** + * 用途说明:新增系统组织框架 + * 参数说明 + * Organization 系统组织框架对象 + * 返回值说明: 是否新增成功 + ***********************************/ + @Override + public boolean addOrganization(Organization organization) { + + // 构建查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Organization parent = null; + int codeMax = 0; + //查询最大的编号 判断是否存在父级id 有值 根据父级id查询 否则 根据父级id为0 查询 + queryWrapper.select(Organization::getOrgcode); + if (StrUtil.isNotBlank(organization.getParentid())) { + parent = this.getById(organization.getParentid()); + queryWrapper.eq(Organization::getParentid, organization.getParentid()); + } else { + organization.setParentid("0"); + queryWrapper.eq(Organization::getParentid, "0"); + } + List maxResult = this.listObjs(queryWrapper); + if (!maxResult.isEmpty()) { + String maxCodeStr = maxResult.get(0).toString(); + try { + codeMax = Integer.parseInt(maxCodeStr.substring(maxCodeStr.length() - 2)); + } catch (NumberFormatException e) { + // 记录日志并默认从 0 开始 + codeMax = 0; + } + } + + DecimalFormat df = new DecimalFormat("00"); + String code = df.format(codeMax + 1); + + if (parent != null) { + code = parent.getOrgcode() + df.format(codeMax + 1); + } + + if (StrUtil.isBlank(organization.getIsvaild())) { + organization.setIsvaild(DEFAULT_IS_VALID); + } + //填写 编号 + organization.setOrgcode(code); + //填写 当前用户名称 + organization.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + //填写 当前日期 + organization.setLastmodifydate(LocalDateTime.now()); + return this.save(organization); + } + + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/RoleServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..685e7cc --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/RoleServiceImpl.java @@ -0,0 +1,141 @@ +package io.gisbi.application.system.service.impl; + +import cn.hutool.core.text.CharSequenceUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.gisbi.application.system.domain.Role; +import io.gisbi.application.system.mapper.RoleMapper; +import io.gisbi.application.system.service.IRoleService; +import io.gisbi.utils.AuthUtils; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.util.List; + +/** + *

+ * 应用系统 服务实现类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@Service +public class RoleServiceImpl extends ServiceImpl implements IRoleService { + + @Resource + private RoleMapper roleMapper; + + + /********************************** + * 用途说明: 根据用户id获取角色id + * 参数说明 userid 用户id + * 返回值说明: void + ***********************************/ + @Override + public List getRoleUsers(String userid, String appId) { + List roleIds = roleMapper.getRoleUsers(userid, appId); + return roleIds; + } + + /*********************************** + * 用途说明:新增角色 + * 参数说明 + * sysRole 新增角色信息 + * 返回值说明: 是否新增成功 + ***********************************/ + @Override + public boolean addRole(Role role) { + //生成用户编号 + int codeMax = 0; + DecimalFormat df = new DecimalFormat("000");//四位数字编号 + QueryWrapper queryWrapper = new QueryWrapper<>(); + // 查询最大的编号 + List max = this.listObjs(queryWrapper.select("MAX(rolecode) " + "rolecode")); + //判断查询是否存在 + if (max.size() > 0) { + codeMax = Integer.parseInt(max.get(0).toString()); + } + // 存在转换成int类型并给codeMax替换值 // 最大编号累加 + String code = df.format(codeMax + 1); + //添加角色编号 + role.setRolecode(code); + //判断是否填写有效性 默认为 1 是 + if (StringUtils.isEmpty(role.getIsvaild())) { + role.setIsvaild("1"); + } + //添加最近修改者 + role.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + //添加最近修改时间 + role.setLastmodifydate(LocalDateTime.now()); + return this.save(role); + } + + /*********************************** + * 用途说明:查询所有角色 + * 参数说明 + * rolename 角色名称 + * 返回值说明: 查询都有角色 + ***********************************/ + @Override + public List listRole(String appId, String rolename) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //根据应用ID查询 + if (StringUtils.isNotEmpty(appId)) { + queryWrapper.eq(Role::getAppId, appId); + } + //根据角色名称模糊查询 + if (StringUtils.isNotEmpty(rolename)) { + queryWrapper.like(Role::getRolename, rolename); + } + //根据角色类别 正序排序 + queryWrapper.orderByAsc(Role::getType); + List roles = roleMapper.selectList(queryWrapper); + return roles; + } + + /*********************************** + * 用途说明:根据id删除角色 + * 参数说明 + *id 角色id + * 返回值说明: 是否删除成功 + ***********************************/ + @Override + public void deleteById(String id) { + String[] ids = id.split(","); + for (String roleId : ids) { + //根据id删除 角色 + boolean isOk = this.removeById(roleId); + if (!isOk) { + continue; + } + //删除角色菜单关联 + roleMapper.deleteRoleMenus(roleId); + //删除角色用户关联 + roleMapper.deleteRoleUser(roleId); + } + } + + /*********************************** + * 用途说明:删除角色用户 + * 参数说明 + * id 系统角色用户对照表id + * 返回值说明: 是否新增成功 + ***********************************/ + @Override + public boolean deleteRoleUsers(String roleid, String userids) { + boolean ok = true; + //得到单个用户id + String[] temp = userids.split(","); + for (String userid : temp) { + //根据角色id、用户id删除 (登录账号admin除外) + ok = ok && roleMapper.deleteRoleUsers(roleid, userid); + } + return ok; + } +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..d374670 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java @@ -0,0 +1,370 @@ +package io.gisbi.application.system.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.gisbi.application.system.domain.Role; +import io.gisbi.application.system.domain.User; +import io.gisbi.application.system.mapper.OrganizationMapper; +import io.gisbi.application.system.mapper.RoleMapper; +import io.gisbi.application.system.mapper.UserMapper; +import io.gisbi.application.system.service.IUserService; +import io.gisbi.utils.AuthUtils; +import io.micrometer.common.util.StringUtils; +import io.netty.channel.ChannelInboundHandlerAdapter; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.File; +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 用户 服务实现类 + *

+ * + * @author lilin + * @since 2025-05-08 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements IUserService { + private static final Logger LOGGER = LoggerFactory.getLogger(ChannelInboundHandlerAdapter.class); + + @Resource + private UserMapper userMapper; + + @Resource + private RoleMapper roleMapper; + + + public static final String DEFAULT_IS_VALID = "1"; + //定义密码常量 + public static final String PASSWORD_VALID = "123456"; + + + /*********************************** + * 用途说明:新增系统用户 + * 参数说明 + * user 用户对象 + * roleids 角色ID + * 返回值说明: 是否新增成功 + ***********************************/ + @Override + @Transactional(rollbackFor = Exception.class) // 添加事务控制 + public Map addUser(User user, String roleids) { + //返回信息 + Map result = new HashMap<>(); + //普通用户 + user.setUsertype(DEFAULT_IS_VALID); +// BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); +// //设置缺省密码 +// String cryptPassword = passwordEncoder.encode("123456"); + user.setPassword(PASSWORD_VALID); + //最近修改日期 + user.setLastmodifydate(LocalDateTime.now()); + //最近修改者 + user.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + //账号有效 状态 1-有效 0-停用 + user.setStatus(DEFAULT_IS_VALID); + //判断注册的登录账号是否存在 + if (isExistAccount(user.getUsername())) { + //新增用户 + boolean ok = this.save(user); + //新增用户分配权限 + if (StringUtils.isNotEmpty(roleids)) { + String[] roles = roleids.split(","); + for (String roleid : roles) { + //系统生成id + String id = IdUtil.fastSimpleUUID(); + //新增app_role_users表数据 + ok = ok && userMapper.addUserRoles(id, user.getAppId(), roleid, user.getId()); + } + } + //判断新增是否成功 消息提示 + if (ok) { + result.put("status", "sucess"); + result.put("msg", "新增用户成功!"); + + } else { + result.put("status", "error"); + result.put("msg", "新增用户失败!"); + } + } else { + result.put("status", "error"); + result.put("msg", "用户账号已存在,不能重复添加!"); + } + return result; + } + + /*********************************** + * 用途说明:修改用户信息 + * 参数说明 + * user 用户对象 + * roleids 角色ID + * 返回值说明: 是否新增成功 + ***********************************/ + @Override + @Transactional(rollbackFor = Exception.class) + public Map updateById(User user, String roleids) { + Map result = new HashMap<>(); + try { + // 设置最近修改人和时间 + user.setLastmodifier(AuthUtils.getUser().getUserId().toString()); + user.setLastmodifydate(LocalDateTime.now()); + //修改用户信息 + boolean ok = this.updateById(user); + if (ok) { + if (StringUtils.isNotEmpty(roleids)) { + String[] roles = roleids.split(","); + Set roleSet = new HashSet<>(Arrays.asList(roles)); + List existingRoles = userMapper.getRoleid(user.getId()); + + // 添加新角色 + for (String role : roles) { + if (!existingRoles.contains(role)) { + //系统生成id + String id = IdUtil.fastSimpleUUID(); + ok = ok && userMapper.addUserRoles(id, user.getAppId(), role, user.getId()); + } + } + + // 删除不在 roleids 中的角色 + userMapper.delInRoleUsersByUserid(user.getId(), roles); + } else { + // 删除所有关联角色 + ok = ok && userMapper.delRoleUsersByUserid(user.getId()); + } + + result.put("status", "success"); + result.put("msg", "用户信息修改成功!"); + } else { + result.put("status", "error"); + result.put("msg", "用户信息修改失败!"); + } + } catch (Exception e) { + // 记录日志 + LOGGER.error("用户信息修改过程中发生异常", e); + result.put("status", "error"); + result.put("msg", "用户信息修改失败,请稍后再试!"); + } + return result; + } + + /*********************************** + * 用途说明:查询用户信息 + * 参数说明 + * orgid 所属组织ID + * nickname 用户昵称 + * page 分页条件 + * 返回值说明: 用户信息集合 + ***********************************/ + @Override + public Page> queryUsers(String orgid, String nickname, String appId, Page page) { + + //当前用户类型 用户类型 0-管理员 1-普通用户 + int usertype = 0;//currentUser.getUsertype(); + if (usertype == 0 || usertype == 1) { + //根据条件分页查询用户信息 查询到的用户信息挨个查询角色信息 + Page> mapPage = userMapper.queryUsers(orgid, appId, nickname, page); + + List> records = mapPage != null ? mapPage.getRecords() : new ArrayList<>(); + if (records.isEmpty()) { + return mapPage; + } + + List> list = new ArrayList<>(records.size()); + + for (Map record : records) { + + Object idObj = record.get("id"); + if (idObj == null) { + continue; // 跳过无效记录 + } + // 更安全地处理id + String id = idObj.toString(); + List roles = roleMapper.getRoleByUserId(id); + if (roles == null) { + // 防止null值 + roles = Collections.emptyList(); + } + record.put("roles", roles); + list.add(record); + } + mapPage.setRecords(list); + return mapPage; + } else { + // 明确返回null比返回未初始化的mapPage更好 + return null; + } + } + + /*********************************** + * 用途说明:根据id删除用户 + * 参数说明 + *id 用户id + * 返回值说明: 判断是否删除成功 + ************************************/ + @Override + public Boolean deleteUserById(String id) { + //根据id查询 + User user = this.getById(id); + //账号头像存储地址 + //String imgName = systempath + File.separator + "user" + File.separator + user.getAvatar(); + String imgName = File.separator + "user" + File.separator + user.getAvatar(); + //如果是管理员不能删除 + if ("admin".equals(user.getUsername())) { + return false; + } else { + boolean isOk = this.removeById(id); + //判断是否删除成功 + if (isOk) { + //根据用户id 删除该用户角色关联 + userMapper.delRoleUsersByUserid(id); + //判断是否存在 账号头像 存在删除 + if (StringUtils.isNotEmpty(user.getAvatar())) { + // FileUtil.del(imgName); + } + return false; + } else { + return false; + } + } + } + + /*********************************** + * 用途说明:根据ID批量删除用户 + * 参数说明 + *ids 用户id集合 + * 返回值说明: 判断是否删除成功 + ************************************/ + @Override + public boolean deleteUserByIds(String ids) { + + List idList = Arrays.asList(ids.split(",")); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(User::getId, idList); + List sysUsers = userMapper.selectList(queryWrapper); + + List names = sysUsers.stream().map(User::getUsername).collect(Collectors.toList()); + if (names.contains("admin")) { + return false; + } else { + int result = userMapper.deleteBatchIds(idList); + if (result <= 0) { + return false; + } + // 根据ID删除用户与角色的关联信息 + userMapper.delRoleUsersByUserIds(idList); + List avatars = + sysUsers.stream().map(User::getAvatar).collect(Collectors.toList()); + if (avatars.size() > 0) { + for (String avatar : avatars) { + //账号头像存储地址 +// String imgName =systempath + File.separator + "user" + File.separator + avatar; +// FileUtil.del(imgName); + } + } + return true; + } + } + + /*********************************** + * 用途说明:重置用户密码(管理员) + * 参数说明 + *id 重置密码的 用户id + * 返回值说明: 判断是否重置成功 + ************************************/ + @Override + public boolean resetPassword(String id) { + boolean isOk = false; + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + //根据id 修改密码,密码修改时间,最近修改者,最近修改日期 将密码修改为 123456 + String cryptPassword = PASSWORD_VALID; + updateWrapper.eq("id", id).set("password", cryptPassword) + .set("pwdresettime", LocalDateTime.now()) + .set("lastmodifydate", LocalDateTime.now()) + .set("lastmodifier", AuthUtils.getUser().getUserId().toString()); + //是否修改成功 + isOk = this.update(updateWrapper); + return isOk; + } + + /*********************************** + * 用途说明:设置账号状态(管理员) + * 参数说明 + *id 用户id + * status 设置状态 + * 返回值说明: 判断是否设置成功 + ************************************/ + @Override + public boolean setStatus(String id, String status) { + boolean isOk = false; +// //根据当前用户id 查询角色表的级别 currentUser.getUser() 获取当前用户id +// String level = userMapper.getMaxLevel(id); +// //判断当前用户级别 管理员及以上权限 +// if (Integer.parseInt(level) <= 2) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + //根据id修改用户状态,最近修改人,最近修改时间 + updateWrapper.eq("id", id) + .set("status", status) + .set("lastmodifydate", LocalDateTime.now()) + .set("lastmodifier", AuthUtils.getUser().getUserId().toString()); + //是否修改成功 + isOk = this.update(updateWrapper); + //} + return isOk; + } + + /*********************************** + * 用途说明:角色添加用户 + * 参数说明 + * roleid 角色id + * userids 用户id组 + * 返回值说明: 是否新增成功 + ***********************************/ + @Override + public boolean addUserRoles(String roleid, String userid) { + boolean isOk = true; + if (StringUtils.isEmpty(roleid) || StringUtils.isEmpty(userid)) { + return false; + } + User user = userMapper.selectById(userid); + //根据角色id与用户id查询 + List list = userMapper.getRoleUsersByid(roleid, userid); + //判断是否用户已分配此权限 + if (list.size() == 0) { + //系统生成id + String id = IdUtil.fastSimpleUUID(); + //新增app_role_users表数据 + isOk = userMapper.addUserRoles(id, user.getAppId(), roleid, userid); + } + return isOk; + } + + + /*********************************** + * 用途说明:比较登录名称是否有重复 + * 参数说明 + * account 登录名称 + * 返回值说明: 重复返回 false 否则返回 true + ************************************/ + private boolean isExistAccount(String username) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (this.list(queryWrapper.eq("username", username)).size() > 0) { + //判断 查询登录账号 结果集是否为null 重复返回 false 否则返回 tree + return false; + } else { + return true; + } + } +} diff --git a/core/core-backend/src/main/resources/application.yml b/core/core-backend/src/main/resources/application.yml index 30c2f74..122ed16 100644 --- a/core/core-backend/src/main/resources/application.yml +++ b/core/core-backend/src/main/resources/application.yml @@ -71,3 +71,5 @@ knife4j: setting: language: zh_cn enable-swagger-models: false +file-space: #项目文档空间 + system: D:\file\system\ #单独上传的文件 diff --git a/core/core-backend/src/main/resources/mybatis/RoleMapper.xml b/core/core-backend/src/main/resources/mybatis/RoleMapper.xml new file mode 100644 index 0000000..b082238 --- /dev/null +++ b/core/core-backend/src/main/resources/mybatis/RoleMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + DELETE FROM app_role_menu WHERE roleid= #{id} + + + + + DELETE FROM app_role_users WHERE roleid= #{id} + + + + + delete from app_role_users where userid !=(select u.id from app_user u where u.account="admin") and roleid=#{roleid} and userid=#{urserid} + + diff --git a/core/core-backend/src/main/resources/mybatis/UserMapper.xml b/core/core-backend/src/main/resources/mybatis/UserMapper.xml new file mode 100644 index 0000000..aeec9a0 --- /dev/null +++ b/core/core-backend/src/main/resources/mybatis/UserMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + INSERT INTO app_role_users(id, app_id, roleid, userid) + VALUES (#{id}, #{appid}, #{roleid}, #{userid}); + + + + + + + + delete from app_role_users + where + userid=#{userid} + and roleid not in + + #{roleids} + + + + + + delete from sys_role_users where userid=#{userid} + + + + + + + + DELETE FROM app_role_users WHERE userid IN + + #{id} + + + + + +