From c015bc356cdbd2d27a61b7925e6e8effbf73edae Mon Sep 17 00:00:00 2001
From: fuenmao <980740792@qq.com>
Date: Tue, 8 Sep 2026 17:48:30 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=AC=AC=E4=B8=89=E6=96=B9?=
=?UTF-8?q?=E7=AD=BE=E7=BD=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Application.Development.json | 8 +-
.../Application.Production.json | 6 +-
.../Entity/Onboarding/ObCompany.cs | 10 +
.../Entity/Onboarding/OnboardingStatus.cs | 2 +-
.../Options/QiyuesuoSettingOptions.cs | 30 +-
.../Company/OnboardingCompanyService.cs | 20 +
.../ContractTemplate/DocxTemplateProcessor.cs | 73 +++-
.../OnboardingContractTemplateService.cs | 1 +
.../Dto/OnboardingElectronicSignInput.cs | 12 +
.../Dto/OnboardingElectronicSignOutput.cs | 15 +
.../IOnboardingElectronicSignService.cs | 8 +
.../OnboardingElectronicSignService.cs | 375 +++++++++++++++++-
.../Qiyuesuo/IQiyuesuoClient.cs | 15 +-
.../ElectronicSign/Qiyuesuo/QiyuesuoClient.cs | 61 ++-
.../Qiyuesuo/QiyuesuoClientModels.cs | 44 +-
.../Position/OnboardingPositionService.cs | 3 +-
.../OnboardingContractTemplateController.cs | 5 +
.../OnboardingElectronicSignController.cs | 22 +
.../Organization/BizUserController.cs | 1 +
.../20260908_qiyuesuo_company_config.sql | 57 +++
...set_onboarding_personnel_and_sign_data.sql | 215 ++++++++++
...0908_seed_qiyuesuo_test_company_config.sql | 40 ++
22 files changed, 961 insertions(+), 62 deletions(-)
create mode 100644 database/migrations/20260908_qiyuesuo_company_config.sql
create mode 100644 database/scripts/20260908_reset_onboarding_personnel_and_sign_data.sql
create mode 100644 database/scripts/20260908_seed_qiyuesuo_test_company_config.sql
diff --git a/SimpleAdmin.Application/Application.Development.json b/SimpleAdmin.Application/Application.Development.json
index 0b95cce..addabbc 100644
--- a/SimpleAdmin.Application/Application.Development.json
+++ b/SimpleAdmin.Application/Application.Development.json
@@ -17,17 +17,19 @@
"AppToken": "rMKU99gkts",
"AppSecret": "sjhcNcV1YTIhA124yrjLMdKRoBlP8O",
"SignatureVersion": "",
- "CategoryId": "3533041076673835142",
- "SealId": "3533379903657587306",
"CreatorName": "袁林",
"CreatorMobile": "15123135384",
- "CallbackUrl": "https://undiffusively-hemielytral-myrtle.ngrok-free.dev",
+ "CallbackUrl": "https://undiffusively-hemielytral-myrtle.ngrok-free.dev/api/open/onboarding/qiyuesuo/callback",
"SignPageCallbackUrl": "",
"SignUrlExpireMinutes": 10,
"EmployeeSignKeyword": "乙方(劳动者)签字:",
"EmployeeSignKeywordIndex": 1,
"CompanySealKeyword": "甲方(盖章):",
"CompanySealKeywordIndex": 1,
+ "CompanySealOffsetX": 0,
+ "CompanySealOffsetY": -0.05,
+ "EnableAcrossPageSeal": true,
+ "AcrossPageSealType": "ALL_DOCUMENT",
"TimeoutSeconds": 90
}
}
diff --git a/SimpleAdmin.Application/Application.Production.json b/SimpleAdmin.Application/Application.Production.json
index 92185cf..5e4e153 100644
--- a/SimpleAdmin.Application/Application.Production.json
+++ b/SimpleAdmin.Application/Application.Production.json
@@ -17,8 +17,6 @@
"AppToken": "rMKU99gkts",
"AppSecret": "sjhcNcV1YTIhA124yrjLMdKRoBlP8O",
"SignatureVersion": "",
- "CategoryId": "3533041076673835142",
- "SealId": "3533042752893948009",
"CreatorName": "袁林",
"CreatorMobile": "15123135384",
"CallbackUrl": "https://onboardx-api.cnzhyx.cn/api/open/onboarding/qiyuesuo/callback",
@@ -28,6 +26,10 @@
"EmployeeSignKeywordIndex": 1,
"CompanySealKeyword": "甲方(盖章):",
"CompanySealKeywordIndex": 1,
+ "CompanySealOffsetX": 0,
+ "CompanySealOffsetY": -0.12,
+ "EnableAcrossPageSeal": true,
+ "AcrossPageSealType": "ALL_DOCUMENT",
"TimeoutSeconds": 90
}
}
diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs b/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs
index f187462..008e992 100644
--- a/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs
+++ b/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs
@@ -52,6 +52,16 @@ public class ObCompany : BaseEntity
///
public string ContactPhone { get; set; }
+ ///
+ /// 契约锁默认业务分类 Id;每个签约公司独立配置。
+ ///
+ public string QiyuesuoCategoryId { get; set; }
+
+ ///
+ /// 契约锁企业印章 Id;每个签约公司独立配置。
+ ///
+ public string QiyuesuoSealId { get; set; }
+
///
/// 业务备注。
///
diff --git a/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs b/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs
index 57e7188..e773c6f 100644
--- a/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs
+++ b/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs
@@ -176,7 +176,7 @@ public static class ElectronicSignStatus
public const string PendingEmployeeSign = "pending_employee_sign";
///
- /// 员工已签,等待企业自动盖章或平台完成流程。
+ /// 员工已签,等待后台管理员核对文件并确认企业盖章。
///
public const string PendingCompanySeal = "pending_company_seal";
diff --git a/SimpleAdmin.Application/Options/QiyuesuoSettingOptions.cs b/SimpleAdmin.Application/Options/QiyuesuoSettingOptions.cs
index 28090d7..b9c9a9d 100644
--- a/SimpleAdmin.Application/Options/QiyuesuoSettingOptions.cs
+++ b/SimpleAdmin.Application/Options/QiyuesuoSettingOptions.cs
@@ -30,16 +30,6 @@ public class QiyuesuoSettingOptions
///
public string SignatureVersion { get; set; }
- ///
- /// 默认业务分类 Id。
- ///
- public string CategoryId { get; set; }
-
- ///
- /// 企业自动盖章使用的印章 Id。
- ///
- public string SealId { get; set; }
-
///
/// 契约锁企业成员中的合同创建人姓名。
///
@@ -85,6 +75,26 @@ public class QiyuesuoSettingOptions
///
public int CompanySealKeywordIndex { get; set; } = 1;
+ ///
+ /// 企业盖章相对关键字的横向偏移量,范围 (-1, 1),正数向右、负数向左。
+ ///
+ public decimal CompanySealOffsetX { get; set; }
+
+ ///
+ /// 企业盖章相对关键字的纵向偏移量,范围 (-1, 1),正数向上、负数向下。
+ ///
+ public decimal CompanySealOffsetY { get; set; }
+
+ ///
+ /// 是否在后台确认企业盖章时同时加盖骑缝章。
+ ///
+ public bool EnableAcrossPageSeal { get; set; } = true;
+
+ ///
+ /// 骑缝章文档范围:ALL_DOCUMENT(全部文档合并)或 SINGLE_DOCUMENT(每份文档单独)。
+ ///
+ public string AcrossPageSealType { get; set; } = "ALL_DOCUMENT";
+
///
/// 单次 HTTP 请求超时秒数。
///
diff --git a/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs b/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs
index 9c41a7c..e802d76 100644
--- a/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs
+++ b/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs
@@ -43,6 +43,7 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp
///
public async Task Add(OnboardingCompanyAddInput input)
{
+ NormalizeAndValidateQiyuesuoConfig(input);
await EnsureCodeUnique(input.CompanyCode, 0);
await InsertAsync(input.Adapt());
}
@@ -52,6 +53,7 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp
///
public async Task Edit(OnboardingCompanyEditInput input)
{
+ NormalizeAndValidateQiyuesuoConfig(input);
await Detail(new BaseIdInput { Id = input.Id });
await EnsureCodeUnique(input.CompanyCode, input.Id);
await UpdateAsync(input.Adapt());
@@ -98,6 +100,24 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp
await DeleteByIdsAsync(input.Ids.Cast