From f3ebaed470afefd507fdb93abdf035e8abce4bd9 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Sat, 13 Jul 2024 17:42:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E7=BB=99=E6=96=B0=E5=A2=9E=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84=E8=BD=A6=E8=BE=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/mybatis/DataScopeHandler.java | 7 ++----- .../zhgd/mybatis/DataScopeInterceptor.java | 20 ++++++++++++++++--- src/main/java/com/zhgd/xmgl/constant/Cts.java | 8 ++++++++ .../modules/car/mapper/CarInfoMapper.java | 1 - .../car/service/impl/CarInfoServiceImpl.java | 10 ++++++++-- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java index b733d8e20..ce2f7ecb6 100644 --- a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java +++ b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java @@ -38,10 +38,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -145,7 +142,7 @@ public class DataScopeHandler implements DataPermissionHandler { //expressions List expressions = new ArrayList<>(); if (!DataScopeInterceptor.findIgnoreDataScope(parameter, ds)) { - if (user.getAccountType() == SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue()) { + if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue())) { List filterEnterprises = getNeedFilterLeftExpression(plainSelect, getFieldEnterpriseTables(), ds); if (CollUtil.isNotEmpty(filterEnterprises)) { List enterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject(); diff --git a/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java b/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java index bdd12be78..eaf4b7e41 100644 --- a/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java +++ b/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java @@ -3,6 +3,7 @@ package com.zhgd.mybatis; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; @@ -45,9 +46,19 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte return true; } if (parameter instanceof Map) { - for (Object val : ((Map) parameter).values()) { - if (val instanceof String) { - if (val.equals(Cts.IGNORE_DATA_SCOPE)) { + Map map = (Map) parameter; + for (Object k : map.keySet()) { + if (k instanceof String) { + if (k.equals(Cts.IGNORE_DATA_SCOPE)) { + //查询只有一个参数map的时候key等于IGNORE_DATA_SCOPE + return true; + } + } + Object val = map.get(k); + if (val instanceof QueryWrapper) { + String sqlSegment = ((QueryWrapper) val).getSqlSegment(); + if (StrUtil.isNotBlank(sqlSegment) && sqlSegment.contains(Cts.IGNORE_DATA_SCOPE_CONDITION)) { + //调用mybatisplus的mapper方法使用last方法添加参数IGNORE_DATA_SCOPE_CONDITION return true; } } @@ -106,6 +117,7 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte return sb.toString(); } + @Override public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh); MappedStatement ms = mpSh.mappedStatement(); @@ -145,6 +157,7 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte //dataScopeHandler.addParam(insert, obj); } + @Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { try { if (SecurityUtils.getUser() == null) { @@ -169,6 +182,7 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte } } + @Override protected void processSelect(Select select, int index, String sql, Object obj) { this.processSelectBody(select.getSelectBody(), obj); } diff --git a/src/main/java/com/zhgd/xmgl/constant/Cts.java b/src/main/java/com/zhgd/xmgl/constant/Cts.java index 7039c2385..a94707a80 100644 --- a/src/main/java/com/zhgd/xmgl/constant/Cts.java +++ b/src/main/java/com/zhgd/xmgl/constant/Cts.java @@ -60,7 +60,15 @@ public interface Cts { String HK_SYNC_AUTH_SUCCESS_KEY = "hkSyncAuthSuccess:"; String TL_HK_SYNC_ID = "tl_hk_sync_id"; String TL_IS_NOMAL_INTERFACE = "isNormalInterface"; + /** + * 忽略数据权限 + */ String IGNORE_DATA_SCOPE = "ignoreDataScope"; + /** + * 忽略数据权限查询条件 + */ + String IGNORE_DATA_SCOPE_CONDITION = " and 'ignoreDataScope' = 'ignoreDataScope' "; + String DOT = "."; /** * 人员安全评分最高 diff --git a/src/main/java/com/zhgd/xmgl/modules/car/mapper/CarInfoMapper.java b/src/main/java/com/zhgd/xmgl/modules/car/mapper/CarInfoMapper.java index 68bc97b51..22ea20b29 100644 --- a/src/main/java/com/zhgd/xmgl/modules/car/mapper/CarInfoMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/car/mapper/CarInfoMapper.java @@ -27,7 +27,6 @@ public interface CarInfoMapper extends BaseMapper { * @param map * @return */ - @DataScope(includeTable = "car_info") Page selectCarList(Page page, @Param("param") Map map); /** diff --git a/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java index 921e5fadf..3a7dd5128 100644 --- a/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java @@ -118,13 +118,18 @@ public class CarInfoServiceImpl extends ServiceImpl impl validTime(c); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CarInfo::getProjectSn, c.getProjectSn()) - .eq(CarInfo::getCarNumber, c.getCarNumber()); + .eq(CarInfo::getCarNumber, c.getCarNumber()) + .last(Cts.IGNORE_DATA_SCOPE_CONDITION) + ; CarInfo old = carInfoMapper.selectOne(queryWrapper); c.setSendSuccessStatus(4); if (old != null) { if (Objects.equals(old.getCarModuleType(), CarInfoCarModuleTypeEnum.GD.getValue())) { throw new OpenAlertException("该车辆已存在,请勿重复添加!"); } + if (!Objects.equals(old.getEnterpriseId(), c.getEnterpriseId())) { + throw new OpenAlertException("已存在企业不一致的车辆!"); + } Date now = new Date(); boolean isHk = projectCarCameraConfigService.isHikvisionConfig(c.getProjectSn()); if (!isHk) { @@ -222,7 +227,8 @@ public class CarInfoServiceImpl extends ServiceImpl impl QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CarInfo::getProjectSn, carInfo.getProjectSn()) .eq(CarInfo::getCarNumber, carInfo.getCarNumber()) - .ne(CarInfo::getId, carInfo.getId()); + .ne(CarInfo::getId, carInfo.getId()) + .last(Cts.IGNORE_DATA_SCOPE_CONDITION); int count = carInfoMapper.selectCount(queryWrapper); if (count > 0) { throw new OpenAlertException(MessageUtil.get("carNumberExistErr"));