package com.product.saas.service; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.product.admin.service.SaasUserService; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.message.MessageFactory; 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.config.SaasConst; import com.product.saas.service.idel.ISaasClientService; import com.product.util.BaseUtil; /** * 租户信息 * */ @Service("saasClientService") public class SaasClientService extends AbstractBaseService implements ISaasClientService{ @Autowired BaseDao baseDao; @Autowired MessageFactory messageFactory; @Autowired SaasUserService saasUserService; /** * 定时任务扫描没有租户管理员的租户 */ public void autoDetectTenant() { DataTableEntity dt = baseDao.listTable(SaasConst.PRODUCT_SYS_CLIENTS, "platform_admin IS NULL OR platform_admin = ''"); if (!BaseUtil.dataTableIsEmpty(dt)) { String clientName = BaseUtil.joinObjectArray(dt.getFieldAllValues(SaasConst.CLIENT_NAME), ","); Set platformDirector = saasUserService.getPlatformSuperAdmin(); // 发送消息给平台主管 messageFactory.sendMessage(String.join(",", platformDirector), "【" + clientName + "】等租户没有平台管理员", "租户缺乏平台管理员", 1, "5", null, SaasConst.PRODUCT_SYS_CLIENTS, "23432432423", 1, new String[] {"system"}, null); } } /** * 租户列表 * @param fse * @return */ public DataTableEntity listClient(FieldSetEntity fse) { SystemUser user = SpringMVCContextHolder.getCurrentUser(); if (user == null) { return null; } List 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}); if (!BaseUtil.dataTableIsEmpty(dtClientChange)) { baseDao.loadPromptData(dtClientChange); } fseClient.addSubDataTable(dtClientChange); } return fseClient; } /** * 租户信息变更列表 * @param fse * @return */ public DataTableEntity listClientChange(FieldSetEntity fse) { SystemUser user = SpringMVCContextHolder.getCurrentUser(); if (user == null) { return null; } List 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); } }