杜洪波
2026-03-27 85f968c63cadfe780120deb4b77b8239037d6082
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package com.product.saas.service;
 
import java.util.ArrayList;
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.service.support.AbstractBaseService;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.core.transfer.Transactional;
import com.product.module.sys.entity.SystemUser;
import com.product.saas.service.idel.ISaasClientService;
import com.product.util.BaseUtil;
 
/**
 *    租户信息 
 *
 */
@Service
public class SaasClientService extends AbstractBaseService implements ISaasClientService{
 
    @Autowired
    BaseDao baseDao;
    
    /**
     * 租户列表
     * @param fse
     * @return
     */
    public DataTableEntity listClient(FieldSetEntity fse) {
        SystemUser user = SpringMVCContextHolder.getCurrentUser();
        if (user == null) {
            return null;
        }
        List<Object> param = new ArrayList<>();
        StringBuilder sql = new StringBuilder();
        sql.append("\n SELECT");
        sql.append("\n   A.uuid,A.client_name,A.client_unit_type,A.platform_admin,A.expiration_date,B.apply_status,");
        sql.append("\n   E.user_name AS client_admin,E.user_mobile_number AS client_admin_phone,E.user_primary_email AS client_admin_email  ");
        sql.append("\n FROM product_sys_clients A");
        sql.append("\n LEFT JOIN product_sys_tenant_apply B ON B.client_uuid = A.uuid ");
        sql.append("\n LEFT JOIN product_sys_org_levels C ON C.client_uuid = A.uuid AND C.org_level_type = 0 ");
        sql.append("\n LEFT JOIN product_sys_org_manager D ON D.org_level_uuid = C.uuid ");
        sql.append("\n LEFT JOIN product_sys_users E ON E.user_id = D.user_id ");
        sql.append("\n WHERE A.uuid != '00000000-0000-0000-0000-000000000000' ");
        FieldSetEntity fsePost = user.getJobPost();
        if (fsePost == null) {
            param.add(user.getClient_uuid());
            sql.append("\n AND A.uuid = ?");
        } else {
            if(fsePost.getString("job_post_name").contains("平台管理员")) {
                param.add(user.getUser_id());
                sql.append("\n AND A.platform_admin = ?");
            }
        }
        DataTableEntity dte = baseDao.listTable(sql.toString(), param.toArray(), fse.getInteger("pagesize"), fse.getInteger("cpage"));
        if (!BaseUtil.dataTableIsEmpty(dte)) {
            baseDao.loadPromptData(dte);
        }
        return dte;
    }
    
    /**
     *     租户详情
     * @param uuid
     * @return
     */
    public FieldSetEntity findClient(String uuid) {
        StringBuilder sql = new StringBuilder();
        sql.append("\n SELECT A.*,B.legal_person,B.credit_code,B.business_license,E.user_name,E.user_mobile_number,E.user_primary_email ");
        sql.append("\n FROM product_sys_clients A ");
        sql.append("\n LEFT JOIN product_sys_tenant_apply B ON B.client_uuid = A.uuid ");
        sql.append("\n LEFT JOIN product_sys_org_levels C ON C.client_uuid = A.uuid AND C.org_level_type = 0 ");
        sql.append("\n LEFT JOIN product_sys_org_manager D ON D.org_level_uuid = C.uuid ");
        sql.append("\n LEFT JOIN product_sys_users E ON E.user_id = D.user_id ");
        sql.append("\n WHERE A.uuid = ? ");
        FieldSetEntity fseClient = baseDao.getFieldSetEntityBySQL(sql.toString(), new Object[] {uuid}, false);
        if(fseClient != null) {
            DataTableEntity dtClientChange = baseDao.listTable("product_sys_tenant_change", "client_uuid = ?", new Object[] {uuid});
            fseClient.addSubDataTable(dtClientChange);
        }
        return fseClient;
    }
    
    /**
     *     租户信息变更列表
     * @param fse
     * @return
     */
    public DataTableEntity listClientChange(FieldSetEntity fse) {
        SystemUser user = SpringMVCContextHolder.getCurrentUser();
        if (user == null) {
            return null;
        }
        List<Object> param = new ArrayList<>();
        StringBuilder sql = new StringBuilder();
        sql.append("\n SELECT * FROM product_sys_tenant_change A");
        sql.append("\n LEFT JOIN product_sys_clients B ON B.uuid = A.client_uuid");
        FieldSetEntity fsePost = user.getJobPost();
        String filter = fse.getString("filter");
        if (fsePost == null) {
            param.add(user.getClient_uuid());
            sql.append("\n WHERE client_uuid = ?");
            if ("entrance".equals(filter)) {
                sql.append("\n AND (change_status IS NULL OR change_status = 0)");
            } else {
                sql.append("\n AND (change_status = 1 OR change_status = 2)");    
            }
        } else {
            if(fsePost.getString("job_post_name").contains("平台管理员")) {
                param.add(user.getUser_id());
                sql.append("\n WHERE B.platform_admin = ?");
                if ("entrance".equals(filter)) {
                    sql.append("\n AND change_status = 1");
                } else {
                    sql.append("\n AND change_status = 2");    
                }
            }
        }
        sql.append("\n ORDER BY created_utc_datetime");
        DataTableEntity dte = baseDao.listTable(sql.toString(), param.toArray(), fse.getInteger("pagesize"), fse.getInteger("cpage"));
        if (!BaseUtil.dataTableIsEmpty(dte)) {
            baseDao.loadPromptData(dte);
        }
        return dte;
    }
    
    /**
     *     客户信息变更进程
     * @param fseChange
     * @return
     */
    @Transactional
    public boolean clientChangeProcess(FieldSetEntity fseChange) {
        String changeStatus = fseChange.getString("change_status");
        if (BaseUtil.strIsNull(changeStatus) || "0".equals(changeStatus)) {
            // 租户管理员提交变更
            fseChange.setValue("change_status", 1);
        } else {
            // 管理员确认变更
            String clientUUID = fseChange.getString("client_uuid");
            String newClientName = fseChange.getString("new_client_name");
            if (!BaseUtil.strIsNull(newClientName)) {
                String oldClientName = fseChange.getString("old_client_name");
                // 变更客户名称
                baseDao.executeUpdate("UPDATE product_sys_clients SET client_name = ? WHERE uuid = ?", new Object[] {newClientName, clientUUID});
                // 变更组织机构名称,全称
                baseDao.executeUpdate("UPDATE product_sys_org_levels SET org_level_name = REPLACE(org_level_name, ?, ?),org_level_all = REPLACE(org_level_all, ?, ?) WHERE org_level_all LIKE  ?",
                        new Object[] {oldClientName, newClientName, oldClientName, newClientName, "%"+oldClientName+"%"});
            }
            String newClientAdmin = fseChange.getString("new_client_admin");
            if (!BaseUtil.strIsNull(newClientAdmin)) {
//                String oldClientAdmin = fseChange.getString("old_client_admin");
                // 去掉旧管理员
                // 生成新管理员
            }
            String newBusinessLicense = fseChange.getString("new_business_license");
            if (!BaseUtil.strIsNull(newBusinessLicense)) {
//                String oldBusinessLicense = fseChange.getString("old_business_license");
                // 将新营业执照归入客户信息中
                baseDao.executeUpdate("UPDATE product_sys_tenant_apply SET business_license = ? WHERE client_uuid = ?", new Object[] {newBusinessLicense, clientUUID});
            }
            fseChange.setValue("change_status", 2);
        }
        return baseDao.saveFieldSetEntity(fseChange);
    }
}