zhongrj
2024-02-28 449d66204c4aed57fca949f2892ed24cdddd18db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package org.springblade.common.param;
 
import org.apache.logging.log4j.util.Strings;
import org.springblade.common.cache.SysCache;
import org.springblade.common.utils.SpringUtils;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.modules.grid.service.IGridService;
import org.springblade.modules.police.service.IPoliceAffairsGridService;
import org.springblade.modules.system.service.IRegionService;
 
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
 
import static org.springblade.core.secure.utils.AuthUtil.getUserRole;
 
public class CommonParamSet<T> {
    /**
     * 区域编号集合
     */
    private List<String> regionChildCodesList;
    /**
     * 是否为超级管理员
     */
    private Integer isAdministrator;
    /**
     * 网格编号集合
     */
    private List<String> gridCodeList;
 
    public List<String> getRegionChildCodesList() {
        return regionChildCodesList;
    }
 
    public Integer getIsAdministrator() {
        return isAdministrator;
    }
 
    public List<String> getGridCodeList() {
        return gridCodeList;
    }
 
    public <U> CommonParamSet invoke(Class<U> clazz, T t) {
        //获取传入对象信息
        U u = clazz.cast(t);
        try {
            Field roleNameField = u.getClass().getDeclaredField("roleName");
            Field communityCodeField = u.getClass().getDeclaredField("communityCode");
            // 获取请求头中的角色别名
            String roleName = SpringUtils.getRequestParam("roleName");
            // 获取请求头中的社区编号
            String communityCode = SpringUtils.getRequestParam("communityCode");
            if (!Strings.isBlank(communityCode)) {
                // 校验社区编号是否合规
                if (null != SpringUtils.getBean(IRegionService.class).getById(communityCode)) {
                    // 设置社区编号
                    communityCodeField.setAccessible(true);
                    communityCodeField.set(t,communityCode);
                }
            }
            // 超级管理员、系统管理员、公安管理员不过滤数据
            isAdministrator = Strings.isBlank(roleName) &&
                (AuthUtil.isAdministrator() == true ||
                    AuthUtil.isAdmin() == true ||
                    isGaAdmin() == true
                ) ? 1 : 2;
            if (isAdministrator==2) {
                // 获取当前用户的所属行政区划编号()
                regionChildCodesList = SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId());
                // 获取网格编号集合
                gridCodeList = new ArrayList<>();
                if (!Strings.isBlank(roleName)) {
                    // 设置角色别名
                    roleNameField.setAccessible(true);
                    roleNameField.set(t, roleName);
                    // 民警角色
                    if (roleName.equals("mj")) {
                        regionChildCodesList = SpringUtil.getBean(IPoliceAffairsGridService.class).getCommunityCodeListByUserId(AuthUtil.getUserId());
                    }
                    // 网格员角色
                    if (roleName.equals("wgy")) {
                        gridCodeList = SpringUtil.getBean(IGridService.class).getGridListByUserId(AuthUtil.getUserId());
                    }
                }
                // 特定账号设置
                if (AuthUtil.getUserAccount().equals("18879306957")) {
                    // 设置社区编号
                    communityCodeField.setAccessible(true);
                    communityCodeField.set(t, "361102003027");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return this;
    }
 
    /**
     * 是否为公安管理员
     * @return
     */
    public boolean isGaAdmin() {
        return StringUtil.containsAny(getUserRole(), new CharSequence[]{"gagly"});
    }
}