From 004a5f484486048b5b0c98209d767c2b3825b576 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Tue, 16 Sep 2025 10:00:27 +0800 Subject: [PATCH] =?UTF-8?q?WorkTicketType=E6=9D=83=E9=99=90=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/mybatis/DataScopeHandler.java | 60 +++++++++++++++++-- .../NoticeRemindSoundController.java | 1 - .../basicdata/service/ICompanyService.java | 2 + .../service/impl/CompanyServiceImpl.java | 14 ++++- .../controller/WorkTicketTypeController.java | 2 + .../mapper/WorkTicketTypeMapper.java | 1 + 6 files changed, 71 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java index 6b1e5c04e..4796f9238 100644 --- a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java +++ b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java @@ -129,6 +129,12 @@ public class DataScopeHandler implements DataPermissionHandler { return tables; } + private HashMap getFieldHeadquartersSnTables() { + HashMap tables = new HashMap<>(16); + tables.put("work_ticket_type", "sn"); + return tables; + } + private HashMap getFieldProjectSnTables() { HashMap tables = new HashMap<>(16); tables.put("notice_remind_sound", getProjectSn()); @@ -221,15 +227,19 @@ public class DataScopeHandler implements DataPermissionHandler { if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_ADMINISTRATOR_ACCOUNT.getValue())) { filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get1CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo); filterProjectForCompany(plainSelect, user, ds, jo); + filterHeadquartersSnForCompany(plainSelect, jo, ds); } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_DISTRICT_ACCOUNT.getValue())) { filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get2CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo); filterProjectForCompany(plainSelect, user, ds, jo); + filterHeadquartersSnForCompany(plainSelect, jo, ds); } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_CITY_ACCOUNT.getValue())) { filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get3CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo); filterProjectForCompany(plainSelect, user, ds, jo); + filterHeadquartersSnForCompany(plainSelect, jo, ds); } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.ENTERPRISE_SUB_ACCOUNT.getValue())) { filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> get4CompanySql(SecurityUtils.getUser().getUserId(), userFilterItem), jo); filterProjectForCompany(plainSelect, user, ds, jo); + filterHeadquartersSnForCompany(plainSelect, jo, ds); } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_ACCOUNT.getValue())) { filterForCompanyOrProject(plainSelect, ds, expressions, SecurityUtils.getUser().getUserId(), (userFilterItem) -> { return StrUtil.format(" \n" + @@ -240,8 +250,10 @@ public class DataScopeHandler implements DataPermissionHandler { " ) and {}.account_type = 6", userFilterItem, SecurityUtils.getUser().getUserId(), StrUtil.subBefore(userFilterItem, ".", true)); }, jo); filterProjectForProject(plainSelect, ds, jo); + filterHeadquartersSnForProject(plainSelect, jo, ds); } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue())) { filterByProjectSubAccount(plainSelect, ds, expressions, jo); + filterHeadquartersSnForProject(plainSelect, jo, ds); } else if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.SUPPLIER.getValue())) { filterBySupplier(plainSelect, ds, expressions, jo); } @@ -313,6 +325,40 @@ public class DataScopeHandler implements DataPermissionHandler { return plainSelect; } + /** + * 企业过滤总公司sn + * + * @param plainSelect + * @param jo + * @param ds + */ + private void filterHeadquartersSnForCompany(PlainSelect plainSelect, JSONObject jo, DataScope ds) { + List filterHeadquartersSnItems = getNeedFilterLeftExpression(plainSelect, getFieldHeadquartersSnTables(), ds, jo); + if (CollUtil.isNotEmpty(filterHeadquartersSnItems)) { + String headquartersSn = companyService.getHeadquartersSnByCompanySn(SecurityUtils.getUser().getSn()); + for (String item : filterHeadquartersSnItems) { + equalsTo(item, headquartersSn, plainSelect); + } + } + } + + /** + * 项目过滤总公司sn + * + * @param plainSelect + * @param jo + * @param ds + */ + private void filterHeadquartersSnForProject(PlainSelect plainSelect, JSONObject jo, DataScope ds) { + List filterHeadquartersSnItems = getNeedFilterLeftExpression(plainSelect, getFieldHeadquartersSnTables(), ds, jo); + if (CollUtil.isNotEmpty(filterHeadquartersSnItems)) { + String headquartersSn = companyService.getHeadquartersSnByProjectSn(SecurityUtils.getUser().getSn()); + for (String item : filterHeadquartersSnItems) { + equalsTo(item, headquartersSn, plainSelect); + } + } + } + /** * 企业过滤项目sn * @@ -321,12 +367,12 @@ public class DataScopeHandler implements DataPermissionHandler { * @param ds */ private void filterProjectForCompany(PlainSelect plainSelect, UserInfo user, DataScope ds, JSONObject param) { - List projectSns = companyService.getProjectSnsBySn(SecurityUtils.getUser().getSn(), user.getAccountType()); - if (CollUtil.isEmpty(projectSns)) { - projectSns.add("0"); - } List filterProjectItems = getNeedFilterLeftExpression(plainSelect, getFieldProjectSnTables(), ds, param); if (CollUtil.isNotEmpty(filterProjectItems)) { + List projectSns = companyService.getProjectSnsBySn(SecurityUtils.getUser().getSn(), user.getAccountType()); + if (CollUtil.isEmpty(projectSns)) { + projectSns.add("0"); + } for (String item : filterProjectItems) { inExpression(item, projectSns, plainSelect); } @@ -381,10 +427,10 @@ public class DataScopeHandler implements DataPermissionHandler { */ private void filterByProjectSubAccount(PlainSelect plainSelect, DataScope ds, List expressions, JSONObject param) { filterProjectForProject(plainSelect, ds, param); - List authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject(); - authEnterpriseIds.add("0"); List filterEnterprises = getNeedFilterLeftExpression(plainSelect, getFieldEnterpriseTables(), ds, param); if (CollUtil.isNotEmpty(filterEnterprises)) { + List authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject(); + authEnterpriseIds.add("0"); for (String filterEnterprise : filterEnterprises) { inExpression(filterEnterprise, authEnterpriseIds, plainSelect); } @@ -417,6 +463,8 @@ public class DataScopeHandler implements DataPermissionHandler { ocrBuildLogTables.put("ocr_build_log", "id"); List filterOcrBuildLogTables = getNeedFilterLeftExpression(plainSelect, ocrBuildLogTables, ds, param); if (CollUtil.isNotEmpty(filterOcrBuildLogTables)) { + List authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject(); + authEnterpriseIds.add("0"); for (String filterEnterprise : filterOcrBuildLogTables) { String uploaderIdField = StrUtil.subBefore(filterEnterprise, ".", false) + "." + "uploader_id"; String sql = StrUtil.format(" ( ({} in (select ocr_build_log_id from ocr_build_log_enterprise where enterprise_id in ({}))) OR ( {} = {}))", diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/NoticeRemindSoundController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/NoticeRemindSoundController.java index ff3ff89d7..94aea35ae 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/NoticeRemindSoundController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/NoticeRemindSoundController.java @@ -47,7 +47,6 @@ public class NoticeRemindSoundController { @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), }) @PostMapping(value = "/list") - @PreAuthorize("@perm.hasProjectSnAccess(#map['projectSn'])") public Result> selectList(@RequestBody Map map) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(NoticeRemindSound::getProjectSn, MapUtils.getString(map, "projectSn")); diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyService.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyService.java index 4902f7958..0369a74e6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyService.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyService.java @@ -196,6 +196,8 @@ public interface ICompanyService extends IService { */ String getHeadquartersSnByProjectSn(String projectSn); + String getHeadquartersSnByCompanySn(String companySn); + boolean hasCompanySnAccessBy1(Long userId, String sn); boolean hasCompanySnAccessBy2(Long userId, String sn); diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyServiceImpl.java index 834c26a26..4796ee977 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyServiceImpl.java @@ -966,14 +966,24 @@ public class CompanyServiceImpl extends ServiceImpl impl @Override public String getHeadquartersSnByProjectSn(String projectSn) { Project project = projectService.getOne(new LambdaQueryWrapper() - .eq(Project::getProjectSn, projectSn)); + .eq(Project::getProjectSn, projectSn).last(Cts.IGNORE_DATA_SCOPE_CONDITION)); if (project == null) { - throw new OpenAlertException("查询企业失败"); + throw new OpenAlertException("查询项目失败"); } return this.getOne(new LambdaQueryWrapper() .eq(Company::getCompanySn, project.getCompanySn())).getHeadquartersSn(); } + @Override + public String getHeadquartersSnByCompanySn(String companySn) { + Company company = this.getOne(new LambdaQueryWrapper() + .eq(Company::getCompanySn, companySn)); + if (company == null) { + throw new OpenAlertException("查询企业失败"); + } + return company.getHeadquartersSn(); + } + @Override public boolean hasCompanySnAccessBy1(Long userId, String sn) { return baseMapper.hasCompanySnAccessBy1(userId, sn); diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/WorkTicketTypeController.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/WorkTicketTypeController.java index 0d0c57a8a..560d91a7b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/WorkTicketTypeController.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/WorkTicketTypeController.java @@ -133,6 +133,8 @@ public class WorkTicketTypeController { @ApiImplicitParams({ @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "query", required = false, dataType = "Integer"), + @ApiImplicitParam(name = "sn", value = "总企业sn", paramType = "query", required = false, dataType = "Integer"), }) @GetMapping(value = "/tree/page") public Result> queryTreePage(@ApiIgnore @RequestParam HashMap param) { diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/WorkTicketTypeMapper.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/WorkTicketTypeMapper.java index b6be5fc96..b3a3fb8e2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/WorkTicketTypeMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/WorkTicketTypeMapper.java @@ -21,6 +21,7 @@ import java.util.List; * @version: V1.0 */ @Mapper +@DataScope public interface WorkTicketTypeMapper extends BaseMapper { /**