diff --git a/script/sql/zfjd-refactoring-v1/011-1-重建虚拟单位树.sql b/script/sql/zfjd-refactoring-v1/011-1-重建虚拟单位树.sql index ba442aff..27d7475a 100644 --- a/script/sql/zfjd-refactoring-v1/011-1-重建虚拟单位树.sql +++ b/script/sql/zfjd-refactoring-v1/011-1-重建虚拟单位树.sql @@ -23,3 +23,16 @@ create table efcode_virtual_unit update_by bigint null comment '更新者', update_time datetime null comment '更新时间' ) comment '虚拟单位树' row_format = DYNAMIC; + +create table efcode_virtual_unit_user +( + vir_user_id varchar(100) not null comment '主键ID' primary key, + sys_user_id varchar(100) null comment '真实用户id,关联sys_user.user_id', + remark varchar(200) null comment '备注', + order_num int default 0 null comment '显示顺序', + create_dept varchar(100) null comment '创建部门', + create_by bigint null comment '创建者', + create_time datetime null comment '创建时间', + update_by bigint null comment '更新者', + update_time datetime null comment '更新时间' +) comment '虚拟单位用户' row_format = DYNAMIC; diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/common/util/DataFilterUtil.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/common/util/DataFilterUtil.java index c08bf904..21babc64 100644 --- a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/common/util/DataFilterUtil.java +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/common/util/DataFilterUtil.java @@ -267,58 +267,58 @@ public class DataFilterUtil { * @param includeStatistics 是否包含统计节点 * @return SQL 片段;null 表示全部放行;非 null 则为过滤条件 */ - public static String buildFilterSqlV1(String tableAlias, String column, - boolean includeSearch, boolean includeStatistics) { - // 超管或 ViewAllDataRole → 不过滤 - if (isFullAccess()) { - return null; - } - - // ViewFilterDataRole → 构建子查询条件 - if (needFilter()) { - //String userDeptId = LoginHelper.getDeptId(); - String userBureauDeptId = getUserBureauDeptId(LoginHelper.getUserId()); - //String userBureauDeptId = "20210922211918204-7059-2B73EBA45"; - - - if (StrUtil.isBlank(userBureauDeptId)) { - return "1 = 0"; - } - - String columnRef = buildColumnRef(tableAlias, column); - String escapedDeptId = escapeSql(userBureauDeptId); - - // 使用子查询:通过 userDeptId 找到 virId,再通过 FIND_IN_SET 查子孙节点的 sys_dept_id - StringBuilder sb = new StringBuilder(); - sb.append(columnRef).append(" IN ("); - sb.append("SELECT eu.sys_dept_id FROM efcode_virtual_unit eu"); - sb.append(" WHERE FIND_IN_SET("); - sb.append("(SELECT eu2.vir_id FROM efcode_virtual_unit eu2 WHERE eu2.sys_dept_id = '").append(escapedDeptId).append("' LIMIT 1)"); - sb.append(", eu.vir_ancestors)"); - sb.append(" AND eu.sys_dept_id IS NOT NULL AND eu.sys_dept_id != ''"); - - // includeSearch / includeStatistics 过滤条件 - if (includeSearch || includeStatistics) { - sb.append(" AND (1=0"); - if (includeSearch) { - sb.append(" OR eu.vir_include_search = '是'"); - } - if (includeStatistics) { - sb.append(" OR eu.vir_include_statistics = '是'"); - } - sb.append(")"); - } - sb.append(")"); - - // 补充自身部门(子查询通过 FIND_IN_SET 只返回子孙,不含自身节点) - sb.append(" OR ").append(columnRef).append(" = '").append(escapedDeptId).append("'"); - - return sb.toString(); - } - - // 无权访问 - return "1 = 0"; - } +// public static String buildFilterSqlV1(String tableAlias, String column, +// boolean includeSearch, boolean includeStatistics) { +// // 超管或 ViewAllDataRole → 不过滤 +// if (isFullAccess()) { +// return null; +// } +// +// // ViewFilterDataRole → 构建子查询条件 +// if (needFilter()) { +// //String userDeptId = LoginHelper.getDeptId(); +// String userBureauDeptId = getUserBureauDeptId(LoginHelper.getUserId()); +// //String userBureauDeptId = "20210922211918204-7059-2B73EBA45"; +// +// +// if (StrUtil.isBlank(userBureauDeptId)) { +// return "1 = 0"; +// } +// +// String columnRef = buildColumnRef(tableAlias, column); +// String escapedDeptId = escapeSql(userBureauDeptId); +// +// // 使用子查询:通过 userDeptId 找到 virId,再通过 FIND_IN_SET 查子孙节点的 sys_dept_id +// StringBuilder sb = new StringBuilder(); +// sb.append(columnRef).append(" IN ("); +// sb.append("SELECT eu.sys_dept_id FROM efcode_virtual_unit eu"); +// sb.append(" WHERE FIND_IN_SET("); +// sb.append("(SELECT eu2.vir_id FROM efcode_virtual_unit eu2 WHERE eu2.sys_dept_id = '").append(escapedDeptId).append("' LIMIT 1)"); +// sb.append(", eu.vir_ancestors)"); +// sb.append(" AND eu.sys_dept_id IS NOT NULL AND eu.sys_dept_id != ''"); +// +// // includeSearch / includeStatistics 过滤条件 +// if (includeSearch || includeStatistics) { +// sb.append(" AND (1=0"); +// if (includeSearch) { +// sb.append(" OR eu.vir_include_search = '是'"); +// } +// if (includeStatistics) { +// sb.append(" OR eu.vir_include_statistics = '是'"); +// } +// sb.append(")"); +// } +// sb.append(")"); +// +// // 补充自身部门(子查询通过 FIND_IN_SET 只返回子孙,不含自身节点) +// sb.append(" OR ").append(columnRef).append(" = '").append(escapedDeptId).append("'"); +// +// return sb.toString(); +// } +// +// // 无权访问 +// return "1 = 0"; +// } /** * 根据当前用户权限,构建数据过滤 SQL 片段(V2 版本)。 @@ -342,77 +342,77 @@ public class DataFilterUtil { * @param includeStatistics 是否包含统计节点 * @return SQL 片段;null 表示全部放行;非 null 则为过滤条件 */ - public static String buildFilterSqlVX(String tableAlias, String column, - boolean includeSearch, boolean includeStatistics) { - // 超管或 ViewAllDataRole → 不过滤 - if (isFullAccess()) { - return null; - } - - // ViewFilterDataRole → 构建子查询条件 - if (needFilter()) { - // 获取用户拥有的 ViewEFDataRole_Area 角色对应的 vir_id 列表 - List areaVirIds = getAreaRoleVirIds(); - - List bureauDeptIds; - if (CollUtil.isNotEmpty(areaVirIds)) { - // 通过 vir_id 获取对应的 sys_dept_id - bureauDeptIds = getAreaBureauDeptIds(areaVirIds); - } else { - // 未拥有 ViewEFDataRole_Area 角色,退回原逻辑 - String userBureauDeptId = getUserBureauDeptId(LoginHelper.getUserId()); - if (StrUtil.isBlank(userBureauDeptId)) { - return "1 = 0"; - } - bureauDeptIds = Collections.singletonList(userBureauDeptId); - } - - if (CollUtil.isEmpty(bureauDeptIds)) { - return "1 = 0"; - } - - String columnRef = buildColumnRef(tableAlias, column); - - // 构建过滤 SQL:支持多个 bureauDeptId - StringBuilder sb = new StringBuilder(); - sb.append("("); - for (int i = 0; i < bureauDeptIds.size(); i++) { - if (i > 0) { - sb.append(" OR "); - } - String escapedDeptId = escapeSql(bureauDeptIds.get(i)); - // 子查询:通过 userBureauDeptId 找到 virId,再通过 FIND_IN_SET 查子孙节点的 sys_dept_id - sb.append(columnRef).append(" IN ("); - sb.append("SELECT eu.sys_dept_id FROM efcode_virtual_unit eu"); - sb.append(" WHERE FIND_IN_SET("); - sb.append("(SELECT eu2.vir_id FROM efcode_virtual_unit eu2 WHERE eu2.sys_dept_id = '").append(escapedDeptId).append("' LIMIT 1)"); - sb.append(", eu.vir_ancestors)"); - sb.append(" AND eu.sys_dept_id IS NOT NULL AND eu.sys_dept_id != ''"); - - // includeSearch / includeStatistics 过滤条件 - if (includeSearch || includeStatistics) { - sb.append(" AND (1=0"); - if (includeSearch) { - sb.append(" OR eu.vir_include_search = '是'"); - } - if (includeStatistics) { - sb.append(" OR eu.vir_include_statistics = '是'"); - } - sb.append(")"); - } - sb.append(")"); - - // 补充自身部门 - sb.append(" OR ").append(columnRef).append(" = '").append(escapedDeptId).append("'"); - } - sb.append(")"); - - return sb.toString(); - } - - // 无权访问 - return "1 = 0"; - } +// public static String buildFilterSqlVX(String tableAlias, String column, +// boolean includeSearch, boolean includeStatistics) { +// // 超管或 ViewAllDataRole → 不过滤 +// if (isFullAccess()) { +// return null; +// } +// +// // ViewFilterDataRole → 构建子查询条件 +// if (needFilter()) { +// // 获取用户拥有的 ViewEFDataRole_Area 角色对应的 vir_id 列表 +// List areaVirIds = getAreaRoleVirIds(); +// +// List bureauDeptIds; +// if (CollUtil.isNotEmpty(areaVirIds)) { +// // 通过 vir_id 获取对应的 sys_dept_id +// bureauDeptIds = getAreaBureauDeptIds(areaVirIds); +// } else { +// // 未拥有 ViewEFDataRole_Area 角色,退回原逻辑 +// String userBureauDeptId = getUserBureauDeptId(LoginHelper.getUserId()); +// if (StrUtil.isBlank(userBureauDeptId)) { +// return "1 = 0"; +// } +// bureauDeptIds = Collections.singletonList(userBureauDeptId); +// } +// +// if (CollUtil.isEmpty(bureauDeptIds)) { +// return "1 = 0"; +// } +// +// String columnRef = buildColumnRef(tableAlias, column); +// +// // 构建过滤 SQL:支持多个 bureauDeptId +// StringBuilder sb = new StringBuilder(); +// sb.append("("); +// for (int i = 0; i < bureauDeptIds.size(); i++) { +// if (i > 0) { +// sb.append(" OR "); +// } +// String escapedDeptId = escapeSql(bureauDeptIds.get(i)); +// // 子查询:通过 userBureauDeptId 找到 virId,再通过 FIND_IN_SET 查子孙节点的 sys_dept_id +// sb.append(columnRef).append(" IN ("); +// sb.append("SELECT eu.sys_dept_id FROM efcode_virtual_unit eu"); +// sb.append(" WHERE FIND_IN_SET("); +// sb.append("(SELECT eu2.vir_id FROM efcode_virtual_unit eu2 WHERE eu2.sys_dept_id = '").append(escapedDeptId).append("' LIMIT 1)"); +// sb.append(", eu.vir_ancestors)"); +// sb.append(" AND eu.sys_dept_id IS NOT NULL AND eu.sys_dept_id != ''"); +// +// // includeSearch / includeStatistics 过滤条件 +// if (includeSearch || includeStatistics) { +// sb.append(" AND (1=0"); +// if (includeSearch) { +// sb.append(" OR eu.vir_include_search = '是'"); +// } +// if (includeStatistics) { +// sb.append(" OR eu.vir_include_statistics = '是'"); +// } +// sb.append(")"); +// } +// sb.append(")"); +// +// // 补充自身部门 +// sb.append(" OR ").append(columnRef).append(" = '").append(escapedDeptId).append("'"); +// } +// sb.append(")"); +// +// return sb.toString(); +// } +// +// // 无权访问 +// return "1 = 0"; +// } /** * 根据当前用户权限,构建数据过滤 SQL 片段(V3 版本)。 diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/controller/EfcodeVirtualUnitUserController.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/controller/EfcodeVirtualUnitUserController.java new file mode 100644 index 00000000..a2435dde --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/controller/EfcodeVirtualUnitUserController.java @@ -0,0 +1,105 @@ +package com.zdxt.enforcementcode.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitUserVo; +import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitUserBo; +import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitUserService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 虚拟单位用户 + * + * @author Lion Li + * @date 2026-07-07 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/enforcementcode/virtualUnitUser") +public class EfcodeVirtualUnitUserController extends BaseController { + + private final IEfcodeVirtualUnitUserService efcodeVirtualUnitUserService; + + /** + * 查询虚拟单位用户列表 + */ + @SaCheckPermission("enforcementcode:virtualUnitUser:list") + @GetMapping("/list") + public TableDataInfo list(EfcodeVirtualUnitUserBo bo, PageQuery pageQuery) { + return efcodeVirtualUnitUserService.queryPageList(bo, pageQuery); + } + + /** + * 导出虚拟单位用户列表 + */ + @SaCheckPermission("enforcementcode:virtualUnitUser:export") + @Log(title = "虚拟单位用户", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EfcodeVirtualUnitUserBo bo, HttpServletResponse response) { + List list = efcodeVirtualUnitUserService.queryList(bo); + ExcelUtil.exportExcel(list, "虚拟单位用户", EfcodeVirtualUnitUserVo.class, response); + } + + /** + * 获取虚拟单位用户详细信息 + * + * @param virUserId 主键 + */ + @SaCheckPermission("enforcementcode:virtualUnitUser:query") + @GetMapping("/{virUserId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String virUserId) { + return R.ok(efcodeVirtualUnitUserService.queryById(virUserId)); + } + + /** + * 新增虚拟单位用户 + */ + @SaCheckPermission("enforcementcode:virtualUnitUser:add") + @Log(title = "虚拟单位用户", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody EfcodeVirtualUnitUserBo bo) { + return toAjax(efcodeVirtualUnitUserService.insertByBo(bo)); + } + + /** + * 修改虚拟单位用户 + */ + @SaCheckPermission("enforcementcode:virtualUnitUser:edit") + @Log(title = "虚拟单位用户", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody EfcodeVirtualUnitUserBo bo) { + return toAjax(efcodeVirtualUnitUserService.updateByBo(bo)); + } + + /** + * 删除虚拟单位用户 + * + * @param virUserIds 主键串 + */ + @SaCheckPermission("enforcementcode:virtualUnitUser:remove") + @Log(title = "虚拟单位用户", businessType = BusinessType.DELETE) + @DeleteMapping("/{virUserIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] virUserIds) { + return toAjax(efcodeVirtualUnitUserService.deleteWithValidByIds(List.of(virUserIds), true)); + } +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/EfcodeVirtualUnitUser.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/EfcodeVirtualUnitUser.java new file mode 100644 index 00000000..e29a4e2c --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/EfcodeVirtualUnitUser.java @@ -0,0 +1,46 @@ +package com.zdxt.enforcementcode.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 虚拟单位用户对象 efcode_virtual_unit_user + * + * @author Lion Li + * @date 2026-07-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("efcode_virtual_unit_user") +public class EfcodeVirtualUnitUser extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "vir_user_id") + private String virUserId; + + /** + * 真实用户id,关联sys_user.user_id + */ + private String sysUserId; + + /** + * 备注 + */ + private String remark; + + /** + * 显示顺序 + */ + private Long orderNum; + + +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/bo/EfcodeVirtualUnitUserBo.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/bo/EfcodeVirtualUnitUserBo.java new file mode 100644 index 00000000..40fd5f5d --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/bo/EfcodeVirtualUnitUserBo.java @@ -0,0 +1,45 @@ +package com.zdxt.enforcementcode.domain.bo; + +import com.zdxt.enforcementcode.domain.EfcodeVirtualUnitUser; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 虚拟单位用户业务对象 efcode_virtual_unit_user + * + * @author Lion Li + * @date 2026-07-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = EfcodeVirtualUnitUser.class, reverseConvertGenerate = false) +public class EfcodeVirtualUnitUserBo extends BaseEntity { + + /** + * 主键ID + */ + @NotBlank(message = "主键ID不能为空", groups = { EditGroup.class }) + private String virUserId; + + /** + * 真实用户id,关联sys_user.user_id + */ + private String sysUserId; + + /** + * 备注 + */ + private String remark; + + /** + * 显示顺序 + */ + private Long orderNum; + + +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeVirtualUnitUserVo.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeVirtualUnitUserVo.java new file mode 100644 index 00000000..9ffee653 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeVirtualUnitUserVo.java @@ -0,0 +1,56 @@ +package com.zdxt.enforcementcode.domain.vo; + +import com.zdxt.enforcementcode.domain.EfcodeVirtualUnitUser; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 虚拟单位用户视图对象 efcode_virtual_unit_user + * + * @author Lion Li + * @date 2026-07-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = EfcodeVirtualUnitUser.class) +public class EfcodeVirtualUnitUserVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private String virUserId; + + /** + * 真实用户id,关联sys_user.user_id + */ + @ExcelProperty(value = "真实用户id,关联sys_user.user_id") + private String sysUserId; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 显示顺序 + */ + @ExcelProperty(value = "显示顺序") + private Long orderNum; + + +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/vo/VirtualUnitDeptTreeVo.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/vo/VirtualUnitDeptTreeVo.java new file mode 100644 index 00000000..4e004e70 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/domain/vo/VirtualUnitDeptTreeVo.java @@ -0,0 +1,38 @@ +package com.zdxt.enforcementcode.domain.vo; + +import cn.hutool.core.lang.tree.Tree; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 角色-虚拟单位部门树选择视图对象 + *

+ * 树节点ID使用 vir_id 展示层级,节点上携带 sysDeptId 供前端绑定角色部门关系时使用。 + * checkedKeys 为已勾选的 vir_id 列表(由角色已保存的 sys_dept_id 反查得到)。 + * + * @author Lion Li + */ +@Data +public class VirtualUnitDeptTreeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 已勾选的虚拟单位节点ID列表(vir_id) + */ + private List checkedKeys; + + /** + * 虚拟单位部门树(节点id=vir_id,label=vir_name,携带 sysDeptId) + */ + private List> depts; + + public VirtualUnitDeptTreeVo(List checkedKeys, List> depts) { + this.checkedKeys = checkedKeys; + this.depts = depts; + } +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeVirtualUnitUserMapper.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeVirtualUnitUserMapper.java new file mode 100644 index 00000000..8f453cd6 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeVirtualUnitUserMapper.java @@ -0,0 +1,15 @@ +package com.zdxt.enforcementcode.mapper; + +import com.zdxt.enforcementcode.domain.EfcodeVirtualUnitUser; +import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitUserVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 虚拟单位用户Mapper接口 + * + * @author Lion Li + * @date 2026-07-07 + */ +public interface EfcodeVirtualUnitUserMapper extends BaseMapperPlus { + +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/service/IEfcodeVirtualUnitUserService.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/service/IEfcodeVirtualUnitUserService.java new file mode 100644 index 00000000..c90e8120 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/service/IEfcodeVirtualUnitUserService.java @@ -0,0 +1,68 @@ +package com.zdxt.enforcementcode.service; + +import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitUserVo; +import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitUserBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 虚拟单位用户Service接口 + * + * @author Lion Li + * @date 2026-07-07 + */ +public interface IEfcodeVirtualUnitUserService { + + /** + * 查询虚拟单位用户 + * + * @param virUserId 主键 + * @return 虚拟单位用户 + */ + EfcodeVirtualUnitUserVo queryById(String virUserId); + + /** + * 分页查询虚拟单位用户列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 虚拟单位用户分页列表 + */ + TableDataInfo queryPageList(EfcodeVirtualUnitUserBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的虚拟单位用户列表 + * + * @param bo 查询条件 + * @return 虚拟单位用户列表 + */ + List queryList(EfcodeVirtualUnitUserBo bo); + + /** + * 新增虚拟单位用户 + * + * @param bo 虚拟单位用户 + * @return 是否新增成功 + */ + Boolean insertByBo(EfcodeVirtualUnitUserBo bo); + + /** + * 修改虚拟单位用户 + * + * @param bo 虚拟单位用户 + * @return 是否修改成功 + */ + Boolean updateByBo(EfcodeVirtualUnitUserBo bo); + + /** + * 校验并批量删除虚拟单位用户信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeVirtualUnitUserServiceImpl.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeVirtualUnitUserServiceImpl.java new file mode 100644 index 00000000..50e26aeb --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeVirtualUnitUserServiceImpl.java @@ -0,0 +1,133 @@ +package com.zdxt.enforcementcode.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitUserBo; +import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitUserVo; +import com.zdxt.enforcementcode.domain.EfcodeVirtualUnitUser; +import com.zdxt.enforcementcode.mapper.EfcodeVirtualUnitUserMapper; +import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitUserService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 虚拟单位用户Service业务层处理 + * + * @author Lion Li + * @date 2026-07-07 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class EfcodeVirtualUnitUserServiceImpl implements IEfcodeVirtualUnitUserService { + + private final EfcodeVirtualUnitUserMapper baseMapper; + + /** + * 查询虚拟单位用户 + * + * @param virUserId 主键 + * @return 虚拟单位用户 + */ + @Override + public EfcodeVirtualUnitUserVo queryById(String virUserId){ + return baseMapper.selectVoById(virUserId); + } + + /** + * 分页查询虚拟单位用户列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 虚拟单位用户分页列表 + */ + @Override + public TableDataInfo queryPageList(EfcodeVirtualUnitUserBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的虚拟单位用户列表 + * + * @param bo 查询条件 + * @return 虚拟单位用户列表 + */ + @Override + public List queryList(EfcodeVirtualUnitUserBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(EfcodeVirtualUnitUserBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(EfcodeVirtualUnitUser::getVirUserId); + lqw.eq(StringUtils.isNotBlank(bo.getSysUserId()), EfcodeVirtualUnitUser::getSysUserId, bo.getSysUserId()); + lqw.eq(bo.getOrderNum() != null, EfcodeVirtualUnitUser::getOrderNum, bo.getOrderNum()); + return lqw; + } + + /** + * 新增虚拟单位用户 + * + * @param bo 虚拟单位用户 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(EfcodeVirtualUnitUserBo bo) { + EfcodeVirtualUnitUser add = MapstructUtils.convert(bo, EfcodeVirtualUnitUser.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setVirUserId(add.getVirUserId()); + } + return flag; + } + + /** + * 修改虚拟单位用户 + * + * @param bo 虚拟单位用户 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(EfcodeVirtualUnitUserBo bo) { + EfcodeVirtualUnitUser update = MapstructUtils.convert(bo, EfcodeVirtualUnitUser.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(EfcodeVirtualUnitUser entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除虚拟单位用户信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/resources/mapper/enforcementcode/EfcodeVirtualUnitUserMapper.xml b/zdxt-modules/zdxt-enforcement-code-common/src/main/resources/mapper/enforcementcode/EfcodeVirtualUnitUserMapper.xml new file mode 100644 index 00000000..c9802c17 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/resources/mapper/enforcementcode/EfcodeVirtualUnitUserMapper.xml @@ -0,0 +1,6 @@ + + + + diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/views/system/role/index-dept-separate.vue b/zdxt-web-client/zdxt-admin-plus-ui/src/views/system/role/index-dept-separate.vue index ec0ff1df..ce6bde75 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/views/system/role/index-dept-separate.vue +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/views/system/role/index-dept-separate.vue @@ -41,7 +41,7 @@ { }; /** 树权限(展开/折叠) */ -const handleCheckedTreeExpand = (value: boolean, type: string) => { +const handleCheckedTreeExpand = (value: any, type: string) => { if (type == 'menu') { const treeList = menuOptions.value; for (let i = 0; i < treeList.length; i++) {