using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using ReZero.DependencyInjection;
using ReZero.SuperAPI;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using medical.transfomer.service;
using medical.transfomer.business;
using medical.transfomer.entity;
using SqlSugar;
using medical.insu.transfomer.Attributes;
namespace medical.insu.transfomer.Controllers
{
[Api(200100, GroupName = "分组0")]
public class MedicalInsuranceController:ControllerBase
{
[DI]
public MedicalInsuranceTransactionService? MedicalInsuranceService { get; set; }
[DI]
public TransformerFactory? TransformerFactory { get; set; }
[DI]
public ISqlSugarClient? Db { get; set; }
///
/// 执行医保交易
///
/// 包含交易参数的JSON对象
/// 交易处理结果
[ApiMethod("执行医保交易")]
[HttpPost]
[SkipAuth("医保交易接口,无需身份验证")]
public async Task ExecuteTransaction([FromBody] JObject value)
{
try
{
if (MedicalInsuranceService == null)
{
return new { code = -1, msg = "医保交易服务未初始化" };
}
// 确保value不为null
if (value == null)
{
return new { code = -1, msg = "请求数据为空" };
}
string methodName = value["methodName"]?.ToString();
if (string.IsNullOrEmpty(methodName))
{
return new { code = -1, msg = "缺少methodName参数" };
}
// 获取数据部分
JObject data = value["data"] as JObject ?? new JObject();
// 使用医保交易服务处理
return await MedicalInsuranceService.ExecuteTransaction(methodName, data);
}
catch (Exception ex)
{
return new { code = -1, msg = $"处理请求发生异常: {ex.Message}" };
}
}
///
/// 获取可用的医保交易方法列表
///
/// 医保交易方法列表
[HttpGet]
public async Task GetTransactionMethods()
{
try
{
if (Db == null)
{
return new { code = -1, msg = "数据库服务未初始化" };
}
// 获取方法配置列表
var methods = await Db.Queryable()
.Select(m => new
{
id = m.METHOD_ID,
name = m.METHOD_NAME,
path = m.METHOD_VALUE,
saveInput = m.SAVE_INPUT,
saveOutput = m.SAVE_OUTPUT
})
.ToListAsync();
return new { code = 0, msg = "获取成功", data = methods };
}
catch (Exception ex)
{
return new { code = -1, msg = $"获取医保交易方法列表异常: {ex.Message}" };
}
}
///
/// 获取交易日志列表
///
/// 方法名称(可选)
/// 状态(可选, 1:成功, 0:失败)
/// 开始时间(可选)
/// 结束时间(可选)
/// 页索引(从1开始)
/// 页大小
/// 交易日志列表
[HttpGet]
public async Task GetTransactionLogs(
string? methodName,
int? status,
DateTime? startTime,
DateTime? endTime,
int pageIndex = 1,
int pageSize = 20)
{
try
{
if (Db == null)
{
return new { code = -1, msg = "数据库服务未初始化" };
}
// 构建查询条件
var query = Db.Queryable();
if (!string.IsNullOrEmpty(methodName))
{
query = query.Where(l => l.METHOD_NAME == methodName);
}
if (status.HasValue)
{
query = query.Where(l => l.STATUS == status.Value);
}
if (startTime.HasValue)
{
query = query.Where(l => l.REQUEST_TIME >= startTime.Value);
}
if (endTime.HasValue)
{
query = query.Where(l => l.REQUEST_TIME <= endTime.Value);
}
// 执行分页查询
var result = await query
.OrderByDescending(l => l.REQUEST_TIME)
.Select(l => new
{
id = l.LOG_ID,
methodId = l.METHOD_ID,
methodName = l.METHOD_NAME,
requestTime = l.REQUEST_TIME,
responseTime = l.RESPONSE_TIME,
status = l.STATUS,
errorMessage = l.ERROR_MESSAGE,
elapsedTime = l.ELAPSED_TIME
})
.ToPageListAsync(pageIndex, pageSize);
// 获取总记录数
var total = await query.CountAsync();
return new
{
code = 0,
msg = "获取成功",
data = result,
total = total,
pageIndex = pageIndex,
pageSize = pageSize,
pageCount = (total + pageSize - 1) / pageSize
};
}
catch (Exception ex)
{
return new { code = -1, msg = $"获取交易日志列表异常: {ex.Message}" };
}
}
///
/// 获取交易日志详情
///
/// 日志ID
/// 交易日志详情
[HttpGet]
public async Task GetTransactionLogDetail(decimal logId)
{
try
{
if (Db == null)
{
return new { code = -1, msg = "数据库服务未初始化" };
}
// 获取日志详情
var log = await Db.Queryable()
.FirstAsync(l => l.LOG_ID == logId);
if (log == null)
{
return new { code = -1, msg = $"未找到ID为{logId}的交易日志" };
}
return new
{
code = 0,
msg = "获取成功",
data = new
{
id = log.LOG_ID,
methodId = log.METHOD_ID,
methodName = log.METHOD_NAME,
requestTime = log.REQUEST_TIME,
requestData = log.REQUEST_DATA,
responseTime = log.RESPONSE_TIME,
responseData = log.RESPONSE_DATA,
status = log.STATUS,
errorMessage = log.ERROR_MESSAGE,
elapsedTime = log.ELAPSED_TIME,
clientIp = log.CLIENT_IP,
userId = log.USER_ID
}
};
}
catch (Exception ex)
{
return new { code = -1, msg = $"获取交易日志详情异常: {ex.Message}" };
}
}
}
}