杜洪波
2026-03-24 616ca0caf25685efec6094686f01c0413f869af9
系统租户和租户合同提交
已添加4个文件
已修改2个文件
314 ■■■■■ 文件已修改
src/main/java/com/product/saas/config/SaasConst.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/saas/controller/SaasClientController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/saas/controller/SystemContractController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/saas/service/SaasClientService.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/saas/service/SystemContractService.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/saas/service/TenantApplyService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/saas/config/SaasConst.java
@@ -9,6 +9,8 @@
    
    //表名常量
    public static final String PRODUCT_SYS_TENANT_APPLY =  "product_sys_tenant_apply";
    public static final String PRODUCT_SYS_CLIENTS =  "product_sys_clients";
    public static final String PRODUCT_SYS_CONTRACT =  "product_sys_contract";
    
    //字段常量
}
src/main/java/com/product/saas/controller/SaasClientController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.product.saas.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.product.admin.config.SystemCode;
import com.product.core.controller.support.AbstractBaseController;
import com.product.core.entity.FieldSetEntity;
import com.product.module.sys.version.ApiVersion;
import com.product.saas.config.SaasCode;
import com.product.saas.config.SaasConst;
import com.product.saas.service.SaasClientService;
import com.product.util.BaseUtil;
/**
 *    SAAS系统租户
 *
 */
@RequestMapping("/api/saas-client")
@RestController
public class SaasClientController extends AbstractBaseController{
    @Autowired
    SaasClientService saasClientService;
    /**
     *     ç§Ÿæˆ·åˆ—表
     * @param request
     * @return
     */
    @RequestMapping("/list-client/{version}")
    @ApiVersion(1)
    public String listClient(HttpServletRequest request) {
        try {
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, SaasConst.PRODUCT_SYS_CLIENTS);
            if(BaseUtil.strIsNull(fse.getString(SaasConst.CPAGE)) || BaseUtil.strIsNull(fse.getString(SaasConst.PAGESIZE))) {
                return error(SystemCode.SYSTEM_CPAGES_NOT_NULL.getValue(), SystemCode.SYSTEM_CPAGES_NOT_NULL.getText());
            }
            return OK_List(saasClientService.listClient(fse));
        } catch (Exception e) {
            e.printStackTrace();
            return error(SaasCode.TENANT_INFO_GET_LIST_FAIL.getValue(), SaasCode.TENANT_INFO_GET_LIST_FAIL.getText() + e.getMessage());
        }
    }
    /**
     *     ç§Ÿæˆ·åˆ—表
     * @param request
     * @return
     */
    @RequestMapping("/find-client/{version}")
    @ApiVersion(1)
    public String findClient(HttpServletRequest request) {
        try {
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, SaasConst.PRODUCT_SYS_CLIENTS);
            if(BaseUtil.strIsNull(fse.getUUID())) {
                return error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
            }
            return OK_List(saasClientService.findClient(fse.getUUID()));
        } catch (Exception e) {
            e.printStackTrace();
            return error(SaasCode.TENANT_INFO_GET_LIST_FAIL.getValue(), SaasCode.TENANT_INFO_GET_LIST_FAIL.getText() + e.getMessage());
        }
    }
}
src/main/java/com/product/saas/controller/SystemContractController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.product.saas.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.product.admin.config.SystemCode;
import com.product.saas.config.SaasConst;
import com.product.saas.service.SystemContractService;
import com.product.core.controller.support.AbstractBaseController;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.module.sys.version.ApiVersion;
import com.product.util.BaseUtil;
@RequestMapping("/api/system-contract")
@RestController
public class SystemContractController extends AbstractBaseController{
    @Autowired
    SystemContractService systemContractService;
    /**
     * èŽ·å–ç§Ÿæˆ·æœ€æ–°åˆåŒä¿¡æ¯
     * @param request
     * @return
     */
    @RequestMapping("/find-contract/{version}")
    @ApiVersion(1)
    public String findContract(HttpServletRequest request){
        try {
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, SaasConst.PRODUCT_SYS_CONTRACT);
            return OK_List(systemContractService.findContract(fse.getString("uuid")));
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e);
        }catch (Exception e){
            e.printStackTrace();
            return error(SystemCode.GET_FUNCTION_TREE_FAIL.getValue(),SystemCode.GET_FUNCTION_TREE_FAIL.getText()+e.getMessage());
        }
    }
}
src/main/java/com/product/saas/service/SaasClientService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
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.module.sys.entity.SystemUser;
import com.product.util.BaseUtil;
/**
 *    ç§Ÿæˆ·ä¿¡æ¯
 *
 */
@Service
public class SaasClientService extends AbstractBaseService{
    @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.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 = ? ");
        return baseDao.getFieldSetEntityBySQL(sql.toString(), new Object[] {uuid}, false);
    }
}
src/main/java/com/product/saas/service/SystemContractService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
package com.product.saas.service;
import java.io.File;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.product.core.cache.DataPoolCacheImpl;
import com.product.core.config.Global;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.core.service.support.AbstractBaseService;
import com.product.saas.config.SaasCode;
import com.product.saas.config.SaasConst;
import cn.hutool.core.io.FileUtil;
@Component
public class SystemContractService extends AbstractBaseService{
    @Autowired
    BaseDao baseDao;
    /**
     *     èŽ·å–åˆåŒè¯¦æƒ…(流程详情调用)
     * @param fse
     * @return
     * @throws BaseException
     */
    public FieldSetEntity findContract(FieldSetEntity fse) throws BaseException {
        return findContract(fse.getUUID());
    }
    /**
     *     èŽ·å–åˆåŒä¿¡æ¯
     * @param clientUUID
     * @return
     */
    public FieldSetEntity findContract(String uuid) {
        // èŽ·å–åˆåŒä¿¡æ¯
        FieldSetEntity fseContract = baseDao.getFieldSetEntityBySQL("SELECT A.*,B.client_unit_type FROM product_sys_contract A LEFT JOIN  product_sys_clients B ON B.uuid = A.client_uuid WHERE A.uuid = ?",
                new Object[] {uuid}, false);
        if(fseContract != null) {
            DataTableEntity dteClient = DataPoolCacheImpl.getInstance().getCacheData("客户信息", new String[]{fseContract.getString("client_uuid")});
            fseContract.setValue("client_unit_type", dteClient.getFieldSetEntity(0).getString("client_unit_type"));
            fseContract.setValue("expiration_date", dteClient.getFieldSetEntity(0).getString("expiration_date"));
        }
        return fseContract;
    }
    /**
     *  åˆåŒæµç¨‹ç»“束覆盖License(结束节点处理器调用)
     *
     * @param fseContract
     */
    public void contractFinish(FieldSetEntity fseContract) {
//        String isPayment = fseContract.getString("is_payment");
        FieldSetEntity fseClient = baseDao.getFieldSetEntity(SaasConst.PRODUCT_SYS_CLIENTS, fseContract.getString(SaasConst.CLIENT_UUID), false);
        copyLicense(fseContract.getString("license_doc"), fseClient.getString("client_code"));
    }
    /**
     *     å¤åˆ¶license到指定目录
     * @param fileUUID        é™„ä»¶UUID
     * @param clientCode    å®¢æˆ·ç¼–码
     */
    public void copyLicense(String fileUUID, String clientCode) {
        // èŽ·å–æ–‡ä»¶ä¿¡æ¯
        FieldSetEntity fse = baseDao.getFieldSetEntity(SaasConst.PRODUCT_SYS_ATTACHMENTS, fileUUID, false);
        if (fse == null) {
            throw new BaseException(SaasCode.TENANT_APPLY_LICENSE_DATA_NO_EXIST.getValue(), SaasCode.TENANT_APPLY_LICENSE_DATA_NO_EXIST.getText());
        }
        // æž„建源文件路径
        String baseDir = System.getProperty("user.dir");
        String localDir = Global.getSystemConfig("local.dir", "");
        String attachmentUrl = fse.getString("attachment_url");
        String attachmentTitle = fse.getString("attachment_title");
        String filePath = baseDir + File.separator + localDir + File.separator + attachmentUrl + File.separator + attachmentTitle;
        // æ£€æŸ¥æºæ–‡ä»¶æ˜¯å¦å­˜åœ¨
        if (!FileUtil.exist(filePath)) {
            throw new BaseException(SaasCode.TENANT_APPLY_LICENSE_FILE_NO_EXIST.getValue(), SaasCode.TENANT_APPLY_LICENSE_FILE_NO_EXIST.getText());
        }
        // æž„建目标目录
        String targetDir = baseDir + File.separator + "resources" + File.separator;
        FileUtil.mkdir(targetDir);
        // æž„建目标文件名:license + clientCode + .dat
        // æ— è®ºåŽŸæ–‡ä»¶æ˜¯å¦æœ‰æ‰©å±•åï¼Œéƒ½ä½¿ç”¨.dat扩展名
        String targetFileName = "license" + clientCode + ".dat";
        String targetPath = targetDir + targetFileName;
        // å¤åˆ¶æ–‡ä»¶
        try {
            // ä½¿ç”¨Hutool复制,第三个参数true表示覆盖已存在的文件
            FileUtil.copy(filePath, targetPath, true);
            // éªŒè¯å¤åˆ¶ç»“æžœ
            if (FileUtil.exist(targetPath)) {
                long sourceSize = FileUtil.size(new File(filePath));
                long targetSize = FileUtil.size(new File(targetPath));
                if (sourceSize != targetSize) {
                    throw new BaseException(SaasCode.TENANT_APPLY_LICENSE_FILE_COPY_FAIL.getValue(),  SaasCode.TENANT_APPLY_LICENSE_FILE_COPY_FAIL.getValue() + "目标文件不完整");
                }
            } else {
                throw new BaseException(SaasCode.TENANT_APPLY_LICENSE_FILE_COPY_FAIL.getValue(),  SaasCode.TENANT_APPLY_LICENSE_FILE_COPY_FAIL.getValue() + "目标文件不存在");
            }
        } catch (Exception e) {
            throw new BaseException(SaasCode.TENANT_APPLY_LICENSE_FILE_COPY_FAIL.getValue(),  SaasCode.TENANT_APPLY_LICENSE_FILE_COPY_FAIL.getValue() + e.getMessage());
        }
    }
}
src/main/java/com/product/saas/service/TenantApplyService.java
@@ -225,8 +225,9 @@
        FieldSetEntity fseOrgUnit = new FieldSetEntity(CmnConst.PRODUCT_SYS_ORG_LEVELS);
        fseOrgUnit.setValue("client_uuid", fseClient.getUUID());
        fseOrgUnit.setValue("org_level_name", fseApply.getString("unit_name"));
        fseOrgUnit.setValue("org_level_all", fseApply.getString("unit_name"));
        fseOrgUnit.setValue("org_level_code", codeService.createCode("product_sys_org_levels", "org_level_code", null));
        fseOrgUnit.setValue("org_level_all", "成都XXXX软件有限公司>" + fseApply.getString("unit_name"));
        fseOrgUnit.setValue("org_level_code", codeService.createCode("product_sys_org_levels", "org_level_code", "001"));
        fseOrgUnit.setValue("org_level_code_parent", "001");
        fseOrgUnit.setValue("org_level_type", 0);
        fseOrgUnit.setValue("sequence", 1);
        fseOrgUnit.setValue(CmnConst.CREATED_BY, "1");
@@ -256,6 +257,7 @@
        fseManager.setValue(CmnConst.CREATED_BY, "1");
        fseManager.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
        baseDao.add(fseManager);
        baseDao.executeUpdate("UPDATE product_sys_tenant_apply SET client_uuid = ? WHERE uuid = ?", new Object[] {fseClient.getUUID(), fseApply.getUUID()});
    }
    
    /**