CA中转服务
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

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}"));
}
}
}
}