using Newtonsoft.Json.Linq;
using System;
using System.Web.Http;
namespace ThCardReader
{
///
/// 江苏医保控制器 - 集成到现有项目架构
///
public class JiangSuController : ApiController
{
///
/// 江苏医保操作入口
/// GET方式:/readcard/jiangsu/{id}
///
/// 操作类型
/// 操作结果
public JObject Get(string id)
{
JObject result = new JObject();
if (string.IsNullOrEmpty(id))
{
result.Add("success", false);
result.Add("code", 1001);
result.Add("message", "江苏医保操作参数为空!");
result.Add("device", "江苏医保社保卡读卡器");
return result;
}
try
{
switch (id.ToLower())
{
case "init":
result = JiangSuSocialCardBusiness.Initialize();
break;
case "readcard":
result = JiangSuSocialCardBusiness.ReadSocialCard(false);
break;
case "readcard_pin":
result = JiangSuSocialCardBusiness.ReadSocialCard(true);
break;
case "readcard_auto":
result = JiangSuSocialCardBusiness.ReadSocialCard(false, true);
break;
case "readcard_auto_pin":
result = JiangSuSocialCardBusiness.ReadSocialCard(true, true);
break;
case "verifypin":
result = JiangSuSocialCardBusiness.VerifyCardPIN();
break;
case "changepin":
result = JiangSuSocialCardBusiness.ChangeCardPIN();
break;
case "status":
result = JiangSuSocialCardBusiness.GetDeviceStatus();
break;
case "reset":
result = JiangSuSocialCardBusiness.ResetSystemState();
break;
case "getpersoninfo":
result = JiangSuSocialCardBusiness.GetPersonInfo("socialcard", "");
break;
case "checkdll":
result = JiangSuSocialCardBusiness.CheckDllExists();
break;
case "offline":
result = JiangSuSocialCardBusiness.ReadSocialCardOffline();
break;
case "diagnose":
result = JiangSuSocialCardBusiness.DiagnoseCardReader();
break;
case "testconfig":
result = JiangSuSocialCardBusiness.TestNetworkConfigurations();
break;
case "standard":
result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(3); // 默认自动寻卡接触式优先
break;
case "standard1":
result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(1); // 接触式
break;
case "standard2":
result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(2); // 非接触式
break;
case "standard3":
result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(3); // 自动寻卡接触式优先
break;
case "standard4":
result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(4); // 自动寻卡非接触式优先
break;
default:
result.Add("success", false);
result.Add("code", 1001);
result.Add("message", "江苏医保操作【" + id + "】错误!允许的操作为【init、readcard、readcard_pin、readcard_auto、readcard_auto_pin、verifypin、changepin、status、reset、getpersoninfo、checkdll、offline、diagnose、testconfig、standard、standard1、standard2、standard3、standard4】");
result.Add("device", "江苏医保社保卡读卡器");
break;
}
}
catch (Exception ex)
{
result.Add("success", false);
result.Add("code", 9001);
result.Add("message", $"江苏医保操作异常: {ex.Message}");
result.Add("device", "江苏医保社保卡读卡器");
result.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
return result;
}
///
/// POST方式调用江苏医保接口
///
/// 请求参数
/// 操作结果
[HttpPost]
public JObject Post([FromBody] dynamic request)
{
JObject result = new JObject();
try
{
if (request == null || request.action == null)
{
result.Add("success", false);
result.Add("code", 1001);
result.Add("message", "江苏医保请求参数错误");
return result;
}
string action = (string)request.action;
switch (action.ToLower())
{
case "init":
// 解析初始化配置
JiangSuSocialCardBusiness.JiangSuConfig config = null;
if (request.config != null)
{
config = new JiangSuSocialCardBusiness.JiangSuConfig();
// 支持大写参数名(规范要求)
if (request.config.IP != null) config.IP = (string)request.config.IP;
if (request.config.PORT != null) config.PORT = (int)request.config.PORT;
if (request.config.TIMEOUT != null) config.TIMEOUT = (int)request.config.TIMEOUT;
if (request.config.LOG_PATH != null) config.LOG_PATH = (string)request.config.LOG_PATH;
if (request.config.EC_URL != null) config.EC_URL = (string)request.config.EC_URL;
if (request.config.CARD_PASSTYPE != null) config.CARD_PASSTYPE = (string)request.config.CARD_PASSTYPE;
if (request.config.API_NAME != null) config.API_NAME = (string)request.config.API_NAME;
if (request.config.API_VERSION != null) config.API_VERSION = (string)request.config.API_VERSION;
if (request.config.ACCESS_KEY != null) config.ACCESS_KEY = (string)request.config.ACCESS_KEY;
if (request.config.SECRETKEY != null) config.SECRETKEY = (string)request.config.SECRETKEY;
if (request.config.ORG_ID != null) config.ORG_ID = (string)request.config.ORG_ID;
if (request.config.EXT != null) config.EXT = (string)request.config.EXT;
if (request.config.AREA_CODE != null) config.AREA_CODE = (string)request.config.AREA_CODE;
// 兼容小写参数名(向后兼容)
if (request.config.ip != null) config.IP = (string)request.config.ip;
if (request.config.port != null) config.PORT = (int)request.config.port;
if (request.config.timeout != null) config.TIMEOUT = (int)request.config.timeout;
if (request.config.logPath != null) config.LOG_PATH = (string)request.config.logPath;
if (request.config.ecUrl != null) config.EC_URL = (string)request.config.ecUrl;
}
result = JiangSuSocialCardBusiness.Initialize(config);
break;
case "readcard":
bool autoVerifyPIN = false;
bool autoInit = false;
if (request.autoVerifyPIN != null) autoVerifyPIN = (bool)request.autoVerifyPIN;
if (request.autoInit != null) autoInit = (bool)request.autoInit;
result = JiangSuSocialCardBusiness.ReadSocialCard(autoVerifyPIN, autoInit);
break;
case "getpersoninfo":
string mediaType = "socialcard";
string inputData = "";
if (request.mediaType != null) mediaType = (string)request.mediaType;
if (request.inputData != null) inputData = (string)request.inputData;
result = JiangSuSocialCardBusiness.GetPersonInfo(mediaType, inputData);
break;
default:
// 其他操作直接调用GET方法
result = Get(action);
break;
}
}
catch (Exception ex)
{
result.Add("success", false);
result.Add("code", 9002);
result.Add("message", $"江苏医保POST操作异常: {ex.Message}");
result.Add("device", "江苏医保社保卡读卡器");
result.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
return result;
}
}
}