diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java index e42dbf6d..e62bdcb3 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java @@ -3,7 +3,6 @@ package com.zdxt.enforcementcode.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zdxt.enforcementcode.common.annotation.EfcodeDataFilter; import com.zdxt.enforcementcode.domain.EnforcementRegistration; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationQueryBo; @@ -86,53 +85,53 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列(bureau_dept_id OR entrust_dept_id)过滤条件传入。 */ - @EfcodeDataFilter RegistrationStatisticsVo selectReportStatistics(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter, @Param("checkCategoryCode") String checkCategoryCode); /** * 报表-分页列表查询 + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入。 */ - @EfcodeDataFilter IPage selectReportPage(@Param("page") Page page, @Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); /** * 报表-分页列表查询V2(JOIN字典表按dict_sort排序,依赖district/street已回填) + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入(带表别名 er)。 */ - @EfcodeDataFilter IPage selectReportPageV2(@Param("page") Page page, @Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); /** * 报表-全量列表查询(用于统计/导出) + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入。 */ - @EfcodeDataFilter List selectReportAll(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); /** * 报表-执法类别图表(GROUP BY law_enforce_category) + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入。 */ - @EfcodeDataFilter List selectReportCategoryChart(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); /** * 报表-部门排行图表(GROUP BY bureau_dept_id,前10) + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入。 */ - @EfcodeDataFilter List selectReportDeptRankChart(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); /** * 报表-被检查企业次数排行图表(GROUP BY enterprise_number,前10) + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入。 */ - @EfcodeDataFilter List selectReportEnterpriseRankChart(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); @@ -158,15 +157,15 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入(带表别名 er)。 */ - @EfcodeDataFilter List selectAnalysisExportV2(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); /** * 执法分析-详情(指定企业的执法明细聚合) + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建双列过滤条件传入。 */ - @EfcodeDataFilter List selectAnalysisDetail(@Param("bo") EnforcementRegistrationBo bo, @Param("dataFilter") String dataFilter); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java index 38f197fb..756072c8 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java @@ -44,8 +44,9 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati public RegistrationStatisticsVo statistics(EnforcementRegistrationBo bo) { String checkCategoryCode = StringUtils.isNotBlank(bo.getCheckCategory()) ? bo.getCheckCategory() : "01"; - // 单条SQL聚合查询,数据权限由 @EfcodeDataFilter 拦截器自动处理 - RegistrationStatisticsVo vo = registrationMapper.selectReportStatistics(bo, null, checkCategoryCode); + // 单条SQL聚合查询,手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id) + String dataFilter = buildDualColumnFilter(""); + RegistrationStatisticsVo vo = registrationMapper.selectReportStatistics(bo, dataFilter, checkCategoryCode); if (vo == null) { vo = new RegistrationStatisticsVo(); } @@ -84,8 +85,10 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati @Override public TableDataInfo listForV2(EnforcementRegistrationBo bo, PageQuery pageQuery) { // V2:SQL层JOIN字典表排序 + 服务端分页(依赖district/street已回填) + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id),表别名 er Page page = pageQuery.build(); - IPage result = registrationMapper.selectReportPageV2(page, bo, null); + String dataFilter = buildDualColumnFilter("er"); + IPage result = registrationMapper.selectReportPageV2(page, bo, dataFilter); return TableDataInfo.build(result); } @@ -100,7 +103,9 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati */ private List loadAndSortAll(EnforcementRegistrationBo bo) { Page page = new Page<>(1, Integer.MAX_VALUE, false); - IPage result = registrationMapper.selectReportPage(page, bo, null); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id),无表别名 + String dataFilter = buildDualColumnFilter(""); + IPage result = registrationMapper.selectReportPage(page, bo, dataFilter); List records = result.getRecords(); // 从企业地址中解析区域/街道并按字典顺序排序 return enrichAndSortByDictOrder(records); @@ -238,8 +243,10 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati @Override public List exportListV2(EnforcementRegistrationBo bo) { // 使用V2排序:Sql JOIN字典表排序,全量加载 + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id),表别名 er Page page = new Page<>(1, Integer.MAX_VALUE, false); - IPage result = registrationMapper.selectReportPageV2(page, bo, null); + String dataFilter = buildDualColumnFilter("er"); + IPage result = registrationMapper.selectReportPageV2(page, bo, dataFilter); List dataList = result.getRecords(); // 字典翻译 @@ -291,8 +298,9 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati @Override public List categoryChart(EnforcementRegistrationBo bo) { - // 数据权限由 @EfcodeDataFilter 拦截器自动处理 - List list = registrationMapper.selectReportCategoryChart(bo, null); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id) + String dataFilter = buildDualColumnFilter(""); + List list = registrationMapper.selectReportCategoryChart(bo, dataFilter); // 字典翻译 Map dictMap = dictTypeService.selectDictDataByType("law_enforce_category").stream() @@ -310,19 +318,22 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati @Override public List deptRankChart(EnforcementRegistrationBo bo) { - // 数据权限由 @EfcodeDataFilter 拦截器自动处理 - return registrationMapper.selectReportDeptRankChart(bo, null); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id) + String dataFilter = buildDualColumnFilter(""); + return registrationMapper.selectReportDeptRankChart(bo, dataFilter); } @Override public List enterpriseRankChart(EnforcementRegistrationBo bo) { - // 数据权限由 @EfcodeDataFilter 拦截器自动处理 - return registrationMapper.selectReportEnterpriseRankChart(bo, null); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id) + String dataFilter = buildDualColumnFilter(""); + return registrationMapper.selectReportEnterpriseRankChart(bo, dataFilter); } @Override public TableDataInfo analysisRank(EnforcementRegistrationBo bo, PageQuery pageQuery) { - String dataFilter = DataFilterUtil.buildFilterSql(true, true); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id) + String dataFilter = buildDualColumnFilter(""); List analysisList = registrationMapper.selectReportAnalysisList(bo, dataFilter); // 手动分页 @@ -338,7 +349,26 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati @Override public List analysisAll(EnforcementRegistrationBo bo) { - String dataFilter = DataFilterUtil.buildFilterSql(true, true); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id) + String dataFilter = buildDualColumnFilter(""); return registrationMapper.selectReportAnalysisList(bo, dataFilter); } + + /** + * 构建双列数据权限过滤条件:bureau_dept_id(执法单位)或 entrust_dept_id(委托执法部门)。 + *

任一列在权限范围内即可保留记录。带 "AND " 前缀,可直接拼在现有 WHERE 条件后。 + *

超管或 ViewAllDataRole 返回 null(不过滤)。 + * + * @param tableAlias 表别名(不带点),无别名传 "" + * @return 拼接后的 "AND (...)" SQL片段;超管/全数据角色返回 null + */ + private String buildDualColumnFilter(String tableAlias) { + String bureauFilter = DataFilterUtil.buildFilterSql(tableAlias, "bureau_dept_id", true, true); + if (bureauFilter == null) { + // 超管或 ViewAllDataRole,全部放行 + return null; + } + String entrustFilter = DataFilterUtil.buildFilterSql(tableAlias, "entrust_dept_id", true, true); + return "AND (" + bureauFilter + " OR " + entrustFilter + ")"; + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationStatisticsServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationStatisticsServiceImpl.java index fe1217e0..dee2927f 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationStatisticsServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationStatisticsServiceImpl.java @@ -44,30 +44,24 @@ public class EnforcementRegistrationStatisticsServiceImpl implements IEnforcemen Page page = pageQuery.build(); // 手动计算数据权限过滤条件,注入到内层子查询 WHERE(GROUP BY 之前) // 不能使用 @EfcodeDataFilter 注解,因为拦截器会追加到外层 WHERE(GROUP BY 之后) - // 同时匹配 bureau_dept_id(执法单位)和 entrust_dept_id(委托执法部门), - // 任一列在权限范围内即可保留记录 - String bureauFilter = DataFilterUtil.buildFilterSql("er", "bureau_dept_id", true, true); - String filterSql; - if (bureauFilter == null) { - // 超管或 ViewAllDataRole,全部放行 - filterSql = null; - } else { - String entrustFilter = DataFilterUtil.buildFilterSql("er", "entrust_dept_id", true, true); - filterSql = "AND (" + bureauFilter + " OR " + entrustFilter + ")"; - } + String filterSql = buildDualColumnFilter("er"); IPage result = registrationMapper.selectAnalysisPageV2(page, bo, filterSql); return TableDataInfo.build(result); } @Override public List detail(EnforcementRegistrationBo bo) { - return registrationMapper.selectAnalysisDetail(bo, null); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id),无表别名 + String dataFilter = buildDualColumnFilter(""); + return registrationMapper.selectAnalysisDetail(bo, dataFilter); } @Override public void exportExcel(EnforcementRegistrationBo bo, HttpServletResponse response) { // 1. 加载全部个体记录(SQL按enterprise_name排序) - List allRecords = registrationMapper.selectAnalysisExportV2(bo, null); + // 手动构建双列权限过滤(bureau_dept_id OR entrust_dept_id),表别名 er + String dataFilter = buildDualColumnFilter("er"); + List allRecords = registrationMapper.selectAnalysisExportV2(bo, dataFilter); // 2. 按旧系统方式分组:先按区域分组,区域顺序用字典dict_sort // SQL已联查dict_sort但未返回,这里用LinkedHashMap保持第一次出现的顺序即可 @@ -322,6 +316,24 @@ public class EnforcementRegistrationStatisticsServiceImpl implements IEnforcemen } } + /** + * 构建双列数据权限过滤条件:bureau_dept_id(执法单位)或 entrust_dept_id(委托执法部门)。 + *

任一列在权限范围内即可保留记录。带 "AND " 前缀,可直接拼在现有 WHERE 条件后。 + *

超管或 ViewAllDataRole 返回 null(不过滤)。 + * + * @param tableAlias 表别名(不带点),无别名传 "" + * @return 拼接后的 "AND (...)" SQL片段;超管/全数据角色返回 null + */ + private String buildDualColumnFilter(String tableAlias) { + String bureauFilter = DataFilterUtil.buildFilterSql(tableAlias, "bureau_dept_id", true, true); + if (bureauFilter == null) { + // 超管或 ViewAllDataRole,全部放行 + return null; + } + String entrustFilter = DataFilterUtil.buildFilterSql(tableAlias, "entrust_dept_id", true, true); + return "AND (" + bureauFilter + " OR " + entrustFilter + ")"; + } + /** * 获取区域字典排序列表(按dict_sort升序) */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationReportMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationReportMapper.xml index b7d9a531..69767b8a 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationReportMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationReportMapper.xml @@ -53,10 +53,12 @@ AND check_css = #{bo.checkCss} - AND district = #{bo.district} + AND (enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '区%') + OR enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '新区%')) - AND street = #{bo.street} + AND (enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '区', #{bo.street}, '%') + OR enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '新区', #{bo.street}, '%')) AND check_category = #{bo.checkCategory} @@ -208,10 +210,12 @@ AND er.check_css = #{bo.checkCss} - AND er.district = #{bo.district} + AND (er.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '区%') + OR er.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '新区%')) - AND er.street = #{bo.street} + AND (er.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '区', #{bo.street}, '%') + OR er.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '新区', #{bo.street}, '%')) AND er.check_category = #{bo.checkCategory} diff --git a/zdxt-web-client/zdxt-admin-plus-ui/.env.development b/zdxt-web-client/zdxt-admin-plus-ui/.env.development index 7c742193..87636695 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/.env.development +++ b/zdxt-web-client/zdxt-admin-plus-ui/.env.development @@ -1,6 +1,6 @@ # 页面标题 VITE_APP_TITLE = zdxt-Vue-Plus多租户管理系统 -VITE_APP_LOGO_TITLE = 行政执法监督码 +VITE_APP_LOGO_TITLE = 执法监督码•执法监督 # 开发环境配置 VITE_APP_ENV = 'development' diff --git a/zdxt-web-client/zdxt-admin-plus-ui/.env.development-zrb-cust b/zdxt-web-client/zdxt-admin-plus-ui/.env.development-zrb-cust index 9c5fc088..edcefc51 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/.env.development-zrb-cust +++ b/zdxt-web-client/zdxt-admin-plus-ui/.env.development-zrb-cust @@ -1,7 +1,7 @@ VITE_APP_PROXY_TARGET = 'http://localhost:17000/sup-ep' # 页面标题 VITE_APP_TITLE = zdxt-Vue-Plus多租户管理系统 -VITE_APP_LOGO_TITLE = 行政执法监督码 +VITE_APP_LOGO_TITLE = 执法监督码•执法监督 # 开发环境配置 VITE_APP_ENV = 'development' diff --git a/zdxt-web-client/zdxt-admin-plus-ui/.env.production b/zdxt-web-client/zdxt-admin-plus-ui/.env.production index 17e69d6e..7f844191 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/.env.production +++ b/zdxt-web-client/zdxt-admin-plus-ui/.env.production @@ -1,6 +1,6 @@ # 页面标题 VITE_APP_TITLE = zdxt-Vue-Plus多租户管理系统 -VITE_APP_LOGO_TITLE = zdxt-Vue-Plus +VITE_APP_LOGO_TITLE = 执法监督码•执法监督 # 生产环境配置 VITE_APP_ENV = 'production' diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/assets/logo/logo.png b/zdxt-web-client/zdxt-admin-plus-ui/src/assets/logo/logo.png index 3f919d85..a922336f 100644 Binary files a/zdxt-web-client/zdxt-admin-plus-ui/src/assets/logo/logo.png and b/zdxt-web-client/zdxt-admin-plus-ui/src/assets/logo/logo.png differ