From 616ca0caf25685efec6094686f01c0413f869af9 Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期二, 24 三月 2026 18:26:20 +0800
Subject: [PATCH] 系统租户和租户合同提交
---
src/main/java/com/product/saas/service/SystemContractService.java | 118 +++++++++++++++++++
src/main/java/com/product/saas/service/TenantApplyService.java | 6
src/main/java/com/product/saas/controller/SaasClientController.java | 68 +++++++++++
src/main/java/com/product/saas/controller/SystemContractController.java | 44 +++++++
src/main/java/com/product/saas/service/SaasClientService.java | 76 ++++++++++++
src/main/java/com/product/saas/config/SaasConst.java | 2
6 files changed, 312 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/product/saas/config/SaasConst.java b/src/main/java/com/product/saas/config/SaasConst.java
index 67fe569..6647200 100644
--- a/src/main/java/com/product/saas/config/SaasConst.java
+++ b/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";
//瀛楁甯搁噺
}
diff --git a/src/main/java/com/product/saas/controller/SaasClientController.java b/src/main/java/com/product/saas/controller/SaasClientController.java
new file mode 100644
index 0000000..516a00c
--- /dev/null
+++ b/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());
+ }
+ }
+}
diff --git a/src/main/java/com/product/saas/controller/SystemContractController.java b/src/main/java/com/product/saas/controller/SystemContractController.java
new file mode 100644
index 0000000..196aefa
--- /dev/null
+++ b/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());
+ }
+ }
+}
diff --git a/src/main/java/com/product/saas/service/SaasClientService.java b/src/main/java/com/product/saas/service/SaasClientService.java
new file mode 100644
index 0000000..60820d0
--- /dev/null
+++ b/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);
+ }
+}
diff --git a/src/main/java/com/product/saas/service/SystemContractService.java b/src/main/java/com/product/saas/service/SystemContractService.java
new file mode 100644
index 0000000..a5c20ea
--- /dev/null
+++ b/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());
+ }
+ }
+}
diff --git a/src/main/java/com/product/saas/service/TenantApplyService.java b/src/main/java/com/product/saas/service/TenantApplyService.java
index 3fa25e7..4549700 100644
--- a/src/main/java/com/product/saas/service/TenantApplyService.java
+++ b/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()});
}
/**
--
Gitblit v1.9.2