zjj
2024-10-09 4440e9b72424e469527d8c7cd7c0c14dfb0b78a1
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.zy.asrs.wcs.common.config;
 
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.zy.asrs.wcs.system.entity.User;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.NullValue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
 
import java.util.Arrays;
 
/**
 * MybatisPlus配置
 *
 * @author vincent
 * @since 2018-02-22 11:29:28
 */
@Configuration
public class MybatisPlusConfig {
 
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
            @Override
            public Expression getTenantId() {
                return getLoginUserTenantId();
            }
 
            @Override
            public String getTenantIdColumn() {
                return "host_id";
            }
 
            // 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件
            @Override
            public boolean ignoreTable(String tableName) {
                if (getTenantId() == null) {
                    return true;
                }else {
                    return Arrays.asList(
                            "sys_host",
                            "sys_user_role",
                            "sys_role_menu",
                            "wcs_bas_shuttle_err",
                            "wcs_bas_lift_err"
                    ).contains(tableName);
                }
            }
        }));
        // 如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor
        // 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
 
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }
 
//    @Bean
//    public MybatisPlusInterceptor mybatisPlusInterceptor() {
//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//
//        TenantLineHandler tenantLineHandler = new TenantLineHandler() {
//
//            @Override
//            public Expression getTenantId() {
//                return getLoginUserTenantId();
//            }
//
//            @Override
//            public String getTenantIdColumn() {
//                return "host_id";
//            }
//
//            @Override
//            public boolean ignoreTable(String tableName) {
//                if (getTenantId() == null) {
//                    return true;
//                }else {
//                    return Arrays.asList(
//                            "sys_host",
//                            "sys_user_role",
//                            "sys_role_menu",
//                            "wcs_bas_shuttle_err",
//                            "wcs_bas_lift_err"
//                    ).contains(tableName);
//                }
//            }
//
//        };
//        TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(tenantLineHandler);
//        interceptor.addInnerInterceptor(tenantLineInnerInterceptor);
//
//        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
//        interceptor.addInnerInterceptor(paginationInnerInterceptor);
//
//        return interceptor;
//    }
 
    /**
     * 获取当前登录用户的租户id
     *
     * @return Integer
     */
    public Expression getLoginUserTenantId() {
        try {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            if (authentication != null) {
                Object object = authentication.getPrincipal();
                if (object instanceof User) {
                    return new LongValue(((User) object).getHostId());
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return null;
    }
 
}