JiangSuController.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.Web.Http;
  4. namespace ThCardReader
  5. {
  6. /// <summary>
  7. /// 江苏医保控制器 - 集成到现有项目架构
  8. /// </summary>
  9. public class JiangSuController : ApiController
  10. {
  11. /// <summary>
  12. /// 江苏医保操作入口
  13. /// GET方式:/readcard/jiangsu/{id}
  14. /// </summary>
  15. /// <param name="id">操作类型</param>
  16. /// <returns>操作结果</returns>
  17. public JObject Get(string id)
  18. {
  19. JObject result = new JObject();
  20. if (string.IsNullOrEmpty(id))
  21. {
  22. result.Add("success", false);
  23. result.Add("code", 1001);
  24. result.Add("message", "江苏医保操作参数为空!");
  25. result.Add("device", "江苏医保社保卡读卡器");
  26. return result;
  27. }
  28. try
  29. {
  30. switch (id.ToLower())
  31. {
  32. case "init":
  33. result = JiangSuSocialCardBusiness.Initialize();
  34. break;
  35. case "readcard":
  36. result = JiangSuSocialCardBusiness.ReadSocialCard(false);
  37. break;
  38. case "readcard_pin":
  39. result = JiangSuSocialCardBusiness.ReadSocialCard(true);
  40. break;
  41. case "readcard_auto":
  42. result = JiangSuSocialCardBusiness.ReadSocialCard(false, true);
  43. break;
  44. case "readcard_auto_pin":
  45. result = JiangSuSocialCardBusiness.ReadSocialCard(true, true);
  46. break;
  47. case "verifypin":
  48. result = JiangSuSocialCardBusiness.VerifyCardPIN();
  49. break;
  50. case "changepin":
  51. result = JiangSuSocialCardBusiness.ChangeCardPIN();
  52. break;
  53. case "status":
  54. result = JiangSuSocialCardBusiness.GetDeviceStatus();
  55. break;
  56. case "reset":
  57. result = JiangSuSocialCardBusiness.ResetSystemState();
  58. break;
  59. case "getpersoninfo":
  60. result = JiangSuSocialCardBusiness.GetPersonInfo("socialcard", "");
  61. break;
  62. case "checkdll":
  63. result = JiangSuSocialCardBusiness.CheckDllExists();
  64. break;
  65. case "offline":
  66. result = JiangSuSocialCardBusiness.ReadSocialCardOffline();
  67. break;
  68. case "diagnose":
  69. result = JiangSuSocialCardBusiness.DiagnoseCardReader();
  70. break;
  71. case "testconfig":
  72. result = JiangSuSocialCardBusiness.TestNetworkConfigurations();
  73. break;
  74. case "standard":
  75. result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(3); // 默认自动寻卡接触式优先
  76. break;
  77. case "standard1":
  78. result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(1); // 接触式
  79. break;
  80. case "standard2":
  81. result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(2); // 非接触式
  82. break;
  83. case "standard3":
  84. result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(3); // 自动寻卡接触式优先
  85. break;
  86. case "standard4":
  87. result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(4); // 自动寻卡非接触式优先
  88. break;
  89. default:
  90. result.Add("success", false);
  91. result.Add("code", 1001);
  92. 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】");
  93. result.Add("device", "江苏医保社保卡读卡器");
  94. break;
  95. }
  96. }
  97. catch (Exception ex)
  98. {
  99. result.Add("success", false);
  100. result.Add("code", 9001);
  101. result.Add("message", $"江苏医保操作异常: {ex.Message}");
  102. result.Add("device", "江苏医保社保卡读卡器");
  103. result.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  104. }
  105. return result;
  106. }
  107. /// <summary>
  108. /// POST方式调用江苏医保接口
  109. /// </summary>
  110. /// <param name="request">请求参数</param>
  111. /// <returns>操作结果</returns>
  112. [HttpPost]
  113. public JObject Post([FromBody] dynamic request)
  114. {
  115. JObject result = new JObject();
  116. try
  117. {
  118. if (request == null || request.action == null)
  119. {
  120. result.Add("success", false);
  121. result.Add("code", 1001);
  122. result.Add("message", "江苏医保请求参数错误");
  123. return result;
  124. }
  125. string action = (string)request.action;
  126. switch (action.ToLower())
  127. {
  128. case "init":
  129. // 解析初始化配置
  130. JiangSuSocialCardBusiness.JiangSuConfig config = null;
  131. if (request.config != null)
  132. {
  133. config = new JiangSuSocialCardBusiness.JiangSuConfig();
  134. // 支持大写参数名(规范要求)
  135. if (request.config.IP != null) config.IP = (string)request.config.IP;
  136. if (request.config.PORT != null) config.PORT = (int)request.config.PORT;
  137. if (request.config.TIMEOUT != null) config.TIMEOUT = (int)request.config.TIMEOUT;
  138. if (request.config.LOG_PATH != null) config.LOG_PATH = (string)request.config.LOG_PATH;
  139. if (request.config.EC_URL != null) config.EC_URL = (string)request.config.EC_URL;
  140. if (request.config.CARD_PASSTYPE != null) config.CARD_PASSTYPE = (string)request.config.CARD_PASSTYPE;
  141. if (request.config.API_NAME != null) config.API_NAME = (string)request.config.API_NAME;
  142. if (request.config.API_VERSION != null) config.API_VERSION = (string)request.config.API_VERSION;
  143. if (request.config.ACCESS_KEY != null) config.ACCESS_KEY = (string)request.config.ACCESS_KEY;
  144. if (request.config.SECRETKEY != null) config.SECRETKEY = (string)request.config.SECRETKEY;
  145. if (request.config.ORG_ID != null) config.ORG_ID = (string)request.config.ORG_ID;
  146. if (request.config.EXT != null) config.EXT = (string)request.config.EXT;
  147. if (request.config.AREA_CODE != null) config.AREA_CODE = (string)request.config.AREA_CODE;
  148. // 兼容小写参数名(向后兼容)
  149. if (request.config.ip != null) config.IP = (string)request.config.ip;
  150. if (request.config.port != null) config.PORT = (int)request.config.port;
  151. if (request.config.timeout != null) config.TIMEOUT = (int)request.config.timeout;
  152. if (request.config.logPath != null) config.LOG_PATH = (string)request.config.logPath;
  153. if (request.config.ecUrl != null) config.EC_URL = (string)request.config.ecUrl;
  154. }
  155. result = JiangSuSocialCardBusiness.Initialize(config);
  156. break;
  157. case "readcard":
  158. bool autoVerifyPIN = false;
  159. bool autoInit = false;
  160. if (request.autoVerifyPIN != null) autoVerifyPIN = (bool)request.autoVerifyPIN;
  161. if (request.autoInit != null) autoInit = (bool)request.autoInit;
  162. result = JiangSuSocialCardBusiness.ReadSocialCard(autoVerifyPIN, autoInit);
  163. break;
  164. case "getpersoninfo":
  165. string mediaType = "socialcard";
  166. string inputData = "";
  167. if (request.mediaType != null) mediaType = (string)request.mediaType;
  168. if (request.inputData != null) inputData = (string)request.inputData;
  169. result = JiangSuSocialCardBusiness.GetPersonInfo(mediaType, inputData);
  170. break;
  171. default:
  172. // 其他操作直接调用GET方法
  173. result = Get(action);
  174. break;
  175. }
  176. }
  177. catch (Exception ex)
  178. {
  179. result.Add("success", false);
  180. result.Add("code", 9002);
  181. result.Add("message", $"江苏医保POST操作异常: {ex.Message}");
  182. result.Add("device", "江苏医保社保卡读卡器");
  183. result.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  184. }
  185. return result;
  186. }
  187. }
  188. }