Browse Source

feat: 零工市场数据权限

zhangying 2 weeks ago
parent
commit
2466b49211

+ 2 - 1
src/main/java/com/hz/employmentsite/enums/DataRangeEnum.java

@@ -7,7 +7,8 @@ public enum DataRangeEnum {
     Institution(3),
     Site(4),
     Company(5),
-    SELF(6);
+    SELF(6),
+    OracleSite(7);
 
     private final int value;
 

+ 8 - 0
src/main/java/com/hz/employmentsite/mapper/cquery/SysUserCQuery.java

@@ -32,4 +32,12 @@ public interface SysUserCQuery {
     List<SysMenu> selectUserShortcutMenuList(@Param("userID") String userID);
     List<String> selectUserPerms(@Param("userID") String userID);
 
+    /**
+     * 查询用户所属驿站在Oracle库中的ID
+     */
+    List<String> selectUserSiteOracleID(String userID);
+    /**
+     * 查询区县管理员的区县下驿站在Oracle库中的ID
+     */
+    List<String> selectUserRegionSiteOracleID(String userID);
 }

+ 14 - 2
src/main/java/com/hz/employmentsite/services/impl/UserServiceImpl.java

@@ -69,8 +69,10 @@ public class UserServiceImpl implements UserService {
         List<HashMap<String, Object>> dataRangeList = sysUserCQuery.selectUserDataRange(userID);
         List<String> userCompanyList = sysUserCQuery.selectUserCompany(userID);
         List<String> userSiteList = sysUserCQuery.selectUserSite(userID);
+        List<String> userSiteOracleIDList = sysUserCQuery.selectUserSiteOracleID(userID);
         List<String> userInstitutionList = sysUserCQuery.selectUserInstitution(userID);
         List<String> userRegionList = sysUserCQuery.selectUserRegion(userID);
+        List<String> userRegionSiteOracleIDList = sysUserCQuery.selectUserRegionSiteOracleID(userID);
         List<String> userCityList = sysUserCQuery.selectUserCity(userID);
         List<DataRange> result = new ArrayList<>();
         Map<String, List<HashMap<String, Object>>> menuGrouping = dataRangeList.stream()
@@ -98,13 +100,23 @@ public class UserServiceImpl implements UserService {
                             menuDataRange.setRangeIDList(userCityList);
                             break;
                         case Region:
-                            menuDataRange.setRangeIDList(userRegionList);
+                            if (key.equals("T01020301")) {
+                                userRegionList.addAll(userRegionSiteOracleIDList);
+                                menuDataRange.setRangeIDList(userRegionList);
+                            } else {
+                                menuDataRange.setRangeIDList(userRegionList);
+                            }
                             break;
                         case Institution:
                             menuDataRange.setRangeIDList(userInstitutionList);
                             break;
                         case Site:
-                            menuDataRange.setRangeIDList(userSiteList);
+                            if (key.equals("T01020301")) {
+                                userSiteList.addAll(userSiteOracleIDList);
+                                menuDataRange.setRangeIDList(userSiteList);
+                            } else {
+                                menuDataRange.setRangeIDList(userSiteList);
+                            }
                             break;
                         case Company:
                             menuDataRange.setRangeIDList(userCompanyList);

+ 11 - 2
src/main/java/com/hz/employmentsite/util/datarange/DataRangeInterceptor.java

@@ -129,8 +129,13 @@ public class DataRangeInterceptor implements Interceptor {
                         .findFirst().orElse(null);
                 break;
             case Site:
-                field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteID.class).length > 0)
-                        .findFirst().orElse(null);
+                if (entityClass.getName().equals("com.hz.employmentsite.vo.companyService.GigMarketVo") && dataRange.getMenuNo().equals("T01020301")) {
+                    field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(OracleSiteID.class).length > 0)
+                            .findFirst().orElse(null);
+                } else {
+                    field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(SiteID.class).length > 0)
+                            .findFirst().orElse(null);
+                }
                 break;
             case Company:
                 field = Arrays.stream(entityClass.getDeclaredFields()).filter(x -> x.getAnnotationsByType(CompanyID.class).length > 0)
@@ -166,6 +171,10 @@ public class DataRangeInterceptor implements Interceptor {
         String keyFieldName = keyField.getName();
         String inStatement = getInStatement(dataRange.getRangeIDList());
 
+        if ((keyFieldName.equals("oracleSiteID") || keyFieldName.equals("oracleRegionCode")) && dataRange.getMenuNo().equals("T01020301")) {
+            return " where x.BCB687 in (" + inStatement + ")";
+        }
+
         return " where x." + keyFieldName + " in (" + inStatement + ")";
     }
 }

+ 9 - 0
src/main/java/com/hz/employmentsite/util/datarange/annotations/OracleSiteID.java

@@ -0,0 +1,9 @@
+package com.hz.employmentsite.util.datarange.annotations;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface OracleSiteID {
+}

+ 8 - 0
src/main/java/com/hz/employmentsite/vo/companyService/GigMarketVo.java

@@ -1,5 +1,7 @@
 package com.hz.employmentsite.vo.companyService;
 
+import com.hz.employmentsite.util.datarange.annotations.OracleSiteID;
+import com.hz.employmentsite.util.datarange.annotations.RegionID;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -7,6 +9,12 @@ import java.util.Date;
 
 @Data
 public class GigMarketVo {
+    @OracleSiteID
+    public String oracleSiteID;
+
+    @RegionID
+    private String oracleRegionCode;
+
     public String BCB906; // 零工岗位ID
 
     public String BBB911; // 企业ID

+ 20 - 0
src/main/resources/mapping/cquery/SysUserCQuery.xml

@@ -91,6 +91,16 @@
         select sysUser.userID from sys_user sysUser where UserID=#{userID})
     </select>
 
+    <select id="selectUserSiteOracleID" resultType="java.lang.String">
+        SELECT
+            site.OracleTableID
+        FROM
+            pc_site site
+            LEFT JOIN pc_site_user siteUser ON site.SiteID = siteUser.SiteID
+        WHERE
+            siteUser.UserID IN (SELECT sysUser.userID FROM sys_user sysUser WHERE UserID = #{userID});
+    </select>
+
     <!--<select id="selectUserInstitution" resultType="java.lang.String">
         select institution.InstitutionID from pc_institution institution where institution.InstitutionID in (
         select siteInst.InstitutionID from pc_site_institution siteInst where siteInst.siteID in (
@@ -119,6 +129,16 @@
         where us.UserID = #{userID}
     </select>
 
+    <select id="selectUserRegionSiteOracleID" resultType="java.lang.String">
+        SELECT
+            site.OracleTableID
+        FROM
+            pc_site site
+                LEFT JOIN sys_user_datarange datarange ON site.RegionCode = datarange.datarangeId
+        WHERE
+            datarange.UserID = #{userID}
+    </select>
+
     <select id="selectUserCity" resultType="java.lang.String">
         select distinct fid from area_code
     </select>

+ 2 - 3
src/main/resources/oraclemapping/cquery/GigMarketCQuery.xml

@@ -4,10 +4,9 @@
     <select id="getList" resultType="com.hz.employmentsite.vo.companyService.GigMarketVo">
         SELECT
             lgsc.*,
-            qyxx.BBB911,
+            lgsc.BCB687 AS site,
             qyxx.AAB004,
             qyxx.AAB998,
-            qyxx.AAB022,
             sshyDic.DETAIL AS AAB022Name,
             gzlxDic.DETAIL AS BDZDB3Name,
             gwztDic.DETAIL AS BAE045Name,
@@ -48,6 +47,6 @@
         <if test="BCB687!='' and BCB687!=null">
             and lgsc.BCB687 = #{BCB687}
         </if>
-        ORDER BY BDB286 DESC
+        ORDER BY lgsc.BDB286 DESC
     </select>
 </mapper>