You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
6.6 KiB
173 lines
6.6 KiB
using CA_Platform_Linker.Models.DTO;
|
|
using CA_Platform_Linker.Services.Interfaces;
|
|
using CA_Platform_Linker.Tools;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace CA_Platform_Linker.Controllers
|
|
{
|
|
[Route("[controller]/[action]")]
|
|
[ApiController]
|
|
public class OnlineHospitalController : ControllerBase
|
|
{
|
|
private readonly IOnlineHospitalService _onlineHospitalService;
|
|
|
|
public OnlineHospitalController(IOnlineHospitalService onlineHospitalService)
|
|
{
|
|
_onlineHospitalService = onlineHospitalService;
|
|
}
|
|
|
|
// SDK初始化已改为程序启动后自动执行(Startup中启动后台任务,每30秒循环调用init),不再对外暴露
|
|
//[HttpGet]
|
|
//public async Task<IActionResult> InitSDK()
|
|
//{
|
|
// try
|
|
// {
|
|
// var result = await _onlineHospitalService.InitSDKAsync();
|
|
// if (result.errCode == 0)
|
|
// {
|
|
// return Ok(ApiResponse.Ok(result.msg));
|
|
// }
|
|
// LogHelper.Log.Error($"初始化SDK失败: {result.msg}");
|
|
// return Ok(ApiResponse.Fail(result.msg));
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// LogHelper.Log.Error($"初始化SDK异常: {ex.Message}");
|
|
// return Ok(ApiResponse.Fail($"初始化SDK异常: {ex.Message}"));
|
|
// }
|
|
//}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> SignWithP7([FromBody] EsignSignRequest request)
|
|
{
|
|
if (!SdkState.IsInitialized)
|
|
{
|
|
return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试"));
|
|
}
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(request.DoctorCode))
|
|
{
|
|
return Ok(ApiResponse.Fail("医生编号不能为空"));
|
|
}
|
|
if (string.IsNullOrEmpty(request.PlainText))
|
|
{
|
|
return Ok(ApiResponse.Fail("签名数据不能为空"));
|
|
}
|
|
|
|
var result = await _onlineHospitalService.SignWithP7Async(request.DoctorCode, request.PlainText);
|
|
if (result.errCode == 0)
|
|
{
|
|
var data = new
|
|
{
|
|
signature = result.signature,
|
|
algorithm = result.algorithm,
|
|
signServiceId = result.signServiceId,
|
|
certBean = result.certBean
|
|
};
|
|
return Ok(ApiResponse.Ok(data, result.msg));
|
|
}
|
|
LogHelper.Log.Error($"P7数据签名失败: {result.msg}");
|
|
return Ok(ApiResponse.Fail(result.msg));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Log.Error($"P7数据签名异常: {ex.Message}");
|
|
return Ok(ApiResponse.Fail($"P7数据签名异常: {ex.Message}"));
|
|
}
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> VerifyP7([FromBody] EsignVerifyRequest request)
|
|
{
|
|
if (!SdkState.IsInitialized)
|
|
{
|
|
return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试"));
|
|
}
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(request.PlainText))
|
|
{
|
|
return Ok(ApiResponse.Fail("签名原文不能为空"));
|
|
}
|
|
if (string.IsNullOrEmpty(request.Signature))
|
|
{
|
|
return Ok(ApiResponse.Fail("签名结果不能为空"));
|
|
}
|
|
|
|
var result = await _onlineHospitalService.VerifyP7Async(request.PlainText, request.Signature);
|
|
if (result.errCode == 0)
|
|
{
|
|
return Ok(ApiResponse.Ok(result.certBean, result.msg));
|
|
}
|
|
LogHelper.Log.Error($"P7数据验签失败: {result.msg}");
|
|
return Ok(ApiResponse.Fail(result.msg));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Log.Error($"P7数据验签异常: {ex.Message}");
|
|
return Ok(ApiResponse.Fail($"P7数据验签异常: {ex.Message}"));
|
|
}
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> CreatePersonAccount([FromBody] EsignCreatePersonRequest request)
|
|
{
|
|
if (!SdkState.IsInitialized)
|
|
{
|
|
return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试"));
|
|
}
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(request.DoctorCode))
|
|
{
|
|
return Ok(ApiResponse.Fail("医生编号不能为空"));
|
|
}
|
|
|
|
var result = await _onlineHospitalService.CreatePersonAccountAsync(request.DoctorCode, request.flowId);
|
|
if (result.errCode == 0)
|
|
{
|
|
return Ok(ApiResponse.Ok(new { accountId = result.accountId }, result.msg));
|
|
}
|
|
LogHelper.Log.Error($"创建个人签署账号失败: {result.msg}");
|
|
return Ok(ApiResponse.Fail(result.msg));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Log.Error($"创建个人签署账号异常: {ex.Message}");
|
|
return Ok(ApiResponse.Fail($"创建个人签署账号异常: {ex.Message}"));
|
|
}
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> GetIndivAuthUrl([FromBody] EsignIndivAuthRequest request)
|
|
{
|
|
if (!SdkState.IsInitialized)
|
|
{
|
|
return Ok(ApiResponse.Fail("SDK尚未初始化成功,请稍后重试"));
|
|
}
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(request.DoctorCode))
|
|
{
|
|
return Ok(ApiResponse.Fail("医生编号不能为空"));
|
|
}
|
|
|
|
var result = await _onlineHospitalService.GetIndivAuthUrlAsync(request.DoctorCode);
|
|
if (result.code == 0)
|
|
{
|
|
return Ok(ApiResponse.Ok(result.data, result.message));
|
|
}
|
|
LogHelper.Log.Error($"获取个人核身地址失败: {result.message}");
|
|
return Ok(ApiResponse.Fail(result.message));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Log.Error($"获取个人核身地址异常: {ex.Message}");
|
|
return Ok(ApiResponse.Fail($"获取个人核身地址异常: {ex.Message}"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|