电子签基础功能
This commit is contained in:
+16
-1
@@ -19,7 +19,7 @@ public class OnboardingContractDocumentController
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建入职任务前,按人事当前填写的参数下载 DOCX 合同预览。
|
||||
/// 创建入职任务前,按人事当前填写的参数下载指定 DOCX 合同预览。
|
||||
/// </summary>
|
||||
[HttpPost("preview-before-create")]
|
||||
[DisplayName("创建入职任务前预览合同")]
|
||||
@@ -35,6 +35,21 @@ public class OnboardingContractDocumentController
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建入职任务前,将全部 DOCX 合同预览打包下载。
|
||||
/// </summary>
|
||||
[HttpPost("preview-all-before-create")]
|
||||
[DisplayName("创建入职任务前预览全部合同")]
|
||||
public async Task<FileContentResult> PreviewAllBeforeCreate(
|
||||
[FromBody] OnboardingContractPreviewInput input)
|
||||
{
|
||||
var preview = await _service.PreviewAllBeforeCreate(input);
|
||||
return new FileContentResult(preview.FileBytes, "application/zip")
|
||||
{
|
||||
FileDownloadName = preview.FileName
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成入职合同文件
|
||||
/// </summary>
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
using System.Text;
|
||||
|
||||
namespace SimpleAdmin.Web.Core;
|
||||
|
||||
/// <summary>
|
||||
/// 接收契约锁服务器状态通知;第一版按平台要求使用明文回调。
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings("Application", Tag = "入职电子签回调")]
|
||||
[Route("open/onboarding/qiyuesuo")]
|
||||
[AllowAnonymous]
|
||||
public class OnboardingElectronicSignCallbackController
|
||||
{
|
||||
private readonly IOnboardingElectronicSignService _service;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public OnboardingElectronicSignCallbackController(
|
||||
IOnboardingElectronicSignService service,
|
||||
IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_service = service;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 接收契约锁回调并返回平台可识别的非统一响应。
|
||||
/// </summary>
|
||||
[HttpPost("callback")]
|
||||
[NonUnify]
|
||||
public async Task<IActionResult> Callback()
|
||||
{
|
||||
try
|
||||
{
|
||||
var request = _httpContextAccessor.HttpContext?.Request
|
||||
?? throw new InvalidOperationException("当前请求上下文不存在");
|
||||
var payloadJson = await ReadPayload(request);
|
||||
await _service.HandleCallback(payloadJson);
|
||||
return new OkObjectResult(new
|
||||
{
|
||||
code = 0,
|
||||
message = "success"
|
||||
});
|
||||
}
|
||||
catch (global::System.Exception exception)
|
||||
{
|
||||
// 契约锁按 HTTP 状态码判断回调是否成功;返回 500 后平台会继续重试。
|
||||
return new ObjectResult(new
|
||||
{
|
||||
code = -1,
|
||||
message = exception.Message
|
||||
})
|
||||
{
|
||||
StatusCode = StatusCodes.Status500InternalServerError
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 契约锁明文回调使用表单格式;同时兼容测试工具直接发送 JSON。
|
||||
/// </summary>
|
||||
private static async Task<string> ReadPayload(HttpRequest request)
|
||||
{
|
||||
if (request.HasFormContentType)
|
||||
{
|
||||
var form = await request.ReadFormAsync();
|
||||
var values = form
|
||||
.OrderBy(item => item.Key, StringComparer.Ordinal)
|
||||
.ToDictionary(
|
||||
item => item.Key,
|
||||
item => item.Value.ToString());
|
||||
return global::System.Text.Json.JsonSerializer.Serialize(values);
|
||||
}
|
||||
|
||||
using var reader = new StreamReader(
|
||||
request.Body,
|
||||
Encoding.UTF8,
|
||||
true,
|
||||
leaveOpen: true);
|
||||
return await reader.ReadToEndAsync();
|
||||
}
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace SimpleAdmin.Web.Core;
|
||||
|
||||
/// <summary>
|
||||
/// 提供入职任务电子签管理接口。
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings("Application", Tag = "入职电子签约")]
|
||||
[Route("biz/onboarding/electronic-sign")]
|
||||
[RolePermission]
|
||||
public class OnboardingElectronicSignController
|
||||
{
|
||||
private readonly IOnboardingElectronicSignService _service;
|
||||
|
||||
public OnboardingElectronicSignController(
|
||||
IOnboardingElectronicSignService service)
|
||||
{
|
||||
_service = service;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询入职任务的电子签状态和合同文件。
|
||||
/// </summary>
|
||||
[HttpGet("detail")]
|
||||
[DisplayName("查看入职电子签详情")]
|
||||
public async Task<OnboardingElectronicSignDetailOutput> Detail(
|
||||
[FromQuery] BaseIdInput input)
|
||||
{
|
||||
return await _service.Detail(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 手动发起或继续上次失败的契约锁流程。
|
||||
/// </summary>
|
||||
[HttpPost("initiate")]
|
||||
[DisplayName("发起入职电子签")]
|
||||
public async Task<OnboardingElectronicSignDetailOutput> Initiate(
|
||||
[FromBody] OnboardingElectronicSignTaskInput input)
|
||||
{
|
||||
return await _service.Initiate(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保留原流程记录并创建一次全新的契约锁签约流程。
|
||||
/// </summary>
|
||||
[HttpPost("reinitiate")]
|
||||
[DisplayName("重新发起入职电子签")]
|
||||
public async Task<OnboardingElectronicSignDetailOutput> Reinitiate(
|
||||
[FromBody] OnboardingElectronicSignReinitiateInput input)
|
||||
{
|
||||
return await _service.Reinitiate(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 主动同步契约锁状态,完成后自动归档。
|
||||
/// </summary>
|
||||
[HttpPost("sync")]
|
||||
[DisplayName("同步入职电子签状态")]
|
||||
public async Task<OnboardingElectronicSignDetailOutput> Sync(
|
||||
[FromBody] OnboardingElectronicSignTaskInput input)
|
||||
{
|
||||
return await _service.Sync(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取仍然有效的员工签署地址,过期则重新生成。
|
||||
/// </summary>
|
||||
[HttpPost("get-link")]
|
||||
[DisplayName("获取员工电子签链接")]
|
||||
public async Task<OnboardingElectronicSignDetailOutput> GetSignLink(
|
||||
[FromBody] OnboardingElectronicSignTaskInput input)
|
||||
{
|
||||
return await _service.GetSignLink(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 催办当前待签员工。
|
||||
/// </summary>
|
||||
[HttpPost("notice")]
|
||||
[DisplayName("催办员工电子签")]
|
||||
public async Task Notice(
|
||||
[FromBody] OnboardingElectronicSignTaskInput input)
|
||||
{
|
||||
await _service.Notice(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 作废尚未结束的电子签流程。
|
||||
/// </summary>
|
||||
[HttpPost("invalid")]
|
||||
[DisplayName("作废入职电子签")]
|
||||
public async Task Invalid(
|
||||
[FromBody] OnboardingElectronicSignInvalidInput input)
|
||||
{
|
||||
await _service.Invalid(input);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user