785834757 hai 1 ano
pai
achega
777921d5bd

+ 17 - 3
commons/src/main/java/com/jzg/commons/config/DataPermissionInterceptor.java

@@ -6,12 +6,15 @@ import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
 import com.jzg.commons.constants.SystemConstants;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.entity.properties.DataScopeProperties;
+import lombok.SneakyThrows;
 import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.ExpressionVisitor;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
 import net.sf.jsqlparser.parser.SimpleNode;
 import net.sf.jsqlparser.schema.Table;
+import net.sf.jsqlparser.statement.Statement;
+import net.sf.jsqlparser.util.TablesNamesFinder;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.statement.StatementHandler;
 import org.apache.ibatis.mapping.MappedStatement;
@@ -62,9 +65,10 @@ import java.util.regex.Pattern;
         this.dataScopeProperties = dataScopeProperties;
     }
 
-    private boolean shouldIgnoreTable(String sql) {
+    private boolean shouldIgnoreTable(String sql) throws JSQLParserException {
         for (String table : dataScopeProperties.getTables()) {
-            if (sql.toLowerCase().contains(table.toLowerCase())) {
+            String regex = "(?i)\\b" + table + "\\b"; // (?i) 忽略大小写,\\b 表示单词边界
+            if (sql.matches(".*" + regex + ".*")) {
                 return true;
             }
         }
@@ -72,15 +76,24 @@ import java.util.regex.Pattern;
     }
 
     private String getTableName(Table table){
+//        return String.valueOf(table.getAlias() == null ? table.getName() : table.getAlias().getName());
+//        return String.valueOf(table.getAlias() == null ? table.getName() : table.getAlias().getName());
+        return String.valueOf(table.getNameParts().get(0));
+    }
+
+    private String getAliasName(Table table){
         return String.valueOf(table.getAlias() == null ? table.getName() : table.getAlias().getName());
     }
 
+
+    @SneakyThrows
     @Override
     public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
         if(!shouldIgnoreTable(table.getName()))
         {
             return null;
         }
+
         String currentUserDeptId = baseController.getUserDeptId();
         String userDataScope = baseController.getUserDataScope();
         String userSystemCode = baseController.getUserSystemCode();
@@ -92,8 +105,9 @@ import java.util.regex.Pattern;
         }
         StringBuilder additionalSql = new StringBuilder();
         String tableName = getTableName(table);
-        if(!shouldIgnoreTable(table.getName()) && !dataScope.isEmpty()) {
+        if(shouldIgnoreTable(table.getName()) && !dataScope.isEmpty()) {
             String fieldName = table.getName().equals("sys_dept") ? "id" : "dept_id";
+            tableName = getAliasName(table);
             List<String> deptIds = new ArrayList<>();
             if (dataScope.getString("dataMark").equals("2")) {
                 additionalSql.append(tableName).append(".").append(fieldName).append(" in (");

+ 11 - 1
commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgInfoSalesman.java

@@ -18,5 +18,15 @@ public class SysUserJzgInfoSalesman {
 
     private String sysUserJzgInfoId;
 
-    private String attrType;
+    private String typeAttr;
+
+
+    public SysUserJzgInfoSalesman(){
+
+    }
+
+    public SysUserJzgInfoSalesman(String sysUserJzgInfoId, String attrType) {
+        this.sysUserJzgInfoId = sysUserJzgInfoId;
+        this.typeAttr = attrType;
+    }
 }

+ 10 - 0
platform/src/main/java/com/jzg/service/impl/UserRoleServiceImpl.java

@@ -163,6 +163,16 @@ public class UserRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
                     }
                 }
                 sysRoleDataScopeLinkMapper.insert(sysRoleDataScopeLinks);
+            }else if (sysRoleDataScope.getDataMark().equals("3")){
+                List<SysRoleDataScopeLink> sysRoleDataScopeLinks = new ArrayList<>();
+                sysRoleVo.getDataScope().getDeptIds().forEach(item->{
+                    SysRoleDataScopeLink sysRoleDataScopeLink = new SysRoleDataScopeLink();
+                    sysRoleDataScopeLink.setId(IdGenerate.nextId());
+                    sysRoleDataScopeLink.setRoleId(sysRole.getId());
+                    sysRoleDataScopeLink.setDeptId(item);
+                    sysRoleDataScopeLinks.add(sysRoleDataScopeLink);
+                });
+                sysRoleDataScopeLinkMapper.insert(sysRoleDataScopeLinks);
             }
         }
 

+ 6 - 3
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -360,12 +360,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             // 同时添加为业务员
             if (sysUserVo.getIsAddSalesman() == 1) {
                 addSalesmanList(sysUserJzgInfo,sysUserVo);
+            }else if(sysUserVo.getIsAddSalesman() == 0){
+                SysUserJzgInfoSalesman sysUserJzgInfoSalesman = new SysUserJzgInfoSalesman(sysUserJzgInfo.getId(),"2");
+                sysUserJzgInfoSalesmanService.save(sysUserJzgInfoSalesman);
             }
             // 直接添加业务员
             else if (sysUserVo.getIsAddSalesman() == 2) {
                 SysUserJzgInfoSalesman sysUserJzgInfoSalesman = new SysUserJzgInfoSalesman();
                 sysUserJzgInfoSalesman.setSysUserJzgInfoId(sysUserJzgInfo.getId());
-                sysUserJzgInfoSalesman.setAttrType(sysUserVo.getTypeAttr());
+                sysUserJzgInfoSalesman.setTypeAttr(sysUserVo.getTypeAttr());
                 sysUserJzgInfoSalesmanService.save(sysUserJzgInfoSalesman);
             }
             if (sysUserVo.getOrganizationId() != null && !sysUserVo.getOrganizationId().equals("")) {
@@ -406,13 +409,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         // 添加后线人员
         SysUserJzgInfoSalesman sysUserJzgInfoSalesman = new SysUserJzgInfoSalesman();
         sysUserJzgInfoSalesman.setSysUserJzgInfoId(sysUserJzgInfo.getId());
-        sysUserJzgInfoSalesman.setAttrType("2");
+        sysUserJzgInfoSalesman.setTypeAttr("2");
         sysUserJzgInfoSalesmanList.add(sysUserJzgInfoSalesman);
 
         // 添加业务员
         SysUserJzgInfoSalesman sysUserJzgInfoSalesman1 = new SysUserJzgInfoSalesman();
         sysUserJzgInfoSalesman1.setSysUserJzgInfoId(sysUserJzgInfo.getId());
-        sysUserJzgInfoSalesman1.setAttrType(sysUserVo.getTypeAttr());  // 业务员类型
+        sysUserJzgInfoSalesman1.setTypeAttr(sysUserVo.getTypeAttr());  // 业务员类型
         sysUserJzgInfoSalesmanList.add(sysUserJzgInfoSalesman1);
 
         sysUserJzgInfoSalesmanService.saveBatch(sysUserJzgInfoSalesmanList);

+ 32 - 14
tenant/organization/src/main/resources/mapper/SysDeptMapper.xml

@@ -49,36 +49,54 @@
 
     <select id="selectDeptVoList" resultType="com.jzg.commons.entity.po.SysDept">
         WITH RECURSIVE dept_tree AS (
-        -- 起点:系统代码为 KU123 的所有部门
-        SELECT id, parent_id, id AS root_id
-        FROM sys_dept
-        where 1=1
+        SELECT
+        id,
+        parent_id
+        FROM
+        sys_dept
+        WHERE
+            1=1
         <if test="deptId!=null and deptId!=''">
             and id = #{deptId}
         </if>
         <if test="name!=null and name!=''">
             and name like CONCAT('%',#{name}, '%')
         </if>
-
         UNION ALL
-
-        -- 递归查找子部门
-        SELECT sd.id, sd.parent_id, dt.root_id
-        FROM sys_dept sd
+        SELECT
+        sd.id,
+        sd.parent_id
+        FROM
+        sys_dept sd
         JOIN dept_tree dt ON sd.parent_id = dt.id
+        ),
+        dept_path AS (
+        SELECT
+        id AS child_id,
+        id AS root_id
+        FROM
+        dept_tree
+        UNION ALL
+        SELECT
+        dt.id AS child_id,
+        dp.root_id
+        FROM
+        sys_dept dt
+        JOIN dept_path dp ON dt.parent_id = dp.child_id
         )
-
         SELECT
         sd.*,
         COUNT(suji.user_id) AS user_count
-        FROM dept_tree dt
-        JOIN sys_dept sd ON sd.id = dt.root_id
-        LEFT JOIN sys_user_jzg_info suji ON suji.dept_id = dt.id
+        FROM
+        dept_path dp
+        JOIN sys_dept sd ON sd.id = dp.root_id
+        LEFT JOIN sys_user_jzg_info suji ON suji.dept_id = dp.child_id
         WHERE
-            sd.is_delete = 0
+        sd.is_delete = 0
         GROUP BY
         sd.id
         ORDER BY
         user_count DESC;
+
     </select>
 </mapper>