123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826 |
- using Newtonsoft.Json.Linq;
- using System.Web.Http;
- namespace ThCardReader
- {
- public class EntryController : ApiController
- {
- public JObject Get(string param)
- {
- JObject result = new JObject();
- if (param == null)
- {
- result.Add("code", 1001);
- result.Add("message", "参数为空!");
- return result;
- }
- string[] temps = param.Split(new char[] { '_' });
-
- // 检查两段式前缀(如 jiangsu_face、jiangsu_qrcode)
- string type;
- if (temps.Length >= 2 && temps[0].Equals("jiangsu") &&
- (temps[1].Equals("face") || temps[1].Equals("qrcode")))
- {
- type = temps[0] + "_" + temps[1]; // 组合成 jiangsu_face 或 jiangsu_qrcode
- }
- else
- {
- type = temps[0]; // 单段前缀
- }
- if (type.Equals("qrcode"))
- {
- result = NationalEcBusiness.ReadQrCode(temps[1]);
- }
- else if (type.Equals("qrcode2"))
- {
- result = NationalEcBusiness.ReadQrCode2(temps[1]);
- }
- else if (type.Equals("face"))
- {
- result = NationalEcBusiness.ReadFace(temps[1]);
- }
- else if (type.Equals("sicard"))
- {
- result = SsCardBusiness.ReadSiCard();
- }
- else if (type.Equals("idcard"))
- {
- result = SsCardBusiness.ReadIdCard();
- }
- else if (type.Equals("idcard2"))
- {
- result = NationalEcBusiness.ReadIdCard(temps[1]);
- }
- else if (type.Equals("huashi"))
- {
- // 华视读卡器调用
- string action = temps.Length > 1 ? temps[1] : "readcard";
-
- // 检查是否是业务代码格式(5位数字),如果是则默认为readcard操作
- if (temps.Length > 1 && IsBusinessCode(temps[1]))
- {
- action = "readcard"; // 业务代码不影响华视读卡器操作,默认读卡
- }
-
- if (action.Equals("init"))
- {
- int port = temps.Length > 2 ? int.Parse(temps[2]) : 1001;
- result = HuaShiIdCardBusiness.Initialize(port);
- }
- else if (action.Equals("readcard"))
- {
- // URL调用时启用自动关闭,模拟SSCard.dll的无状态行为
- var huashiResult = HuaShiIdCardBusiness.ReadIdCard("", true);
- result = ConvertHuaShiDataToStandardFormat(huashiResult);
- }
- else if (action.Equals("continuous"))
- {
- // URL调用时启用自动关闭,模拟SSCard.dll的无状态行为
- var huashiResult = HuaShiIdCardBusiness.ReadIdCardContinuous("", true);
- result = ConvertHuaShiDataToStandardFormat(huashiResult);
- }
- else if (action.Equals("status"))
- {
- result = HuaShiIdCardBusiness.GetDeviceStatus();
- }
- else if (action.Equals("close"))
- {
- result = HuaShiIdCardBusiness.Close();
- }
- else
- {
- result.Add("code", 1001);
- result.Add("message", "华视读卡器操作【" + action + "】错误!允许的操作为【init、readcard、continuous、status、close】");
- }
- }
- else if (type.Equals("jiangsu_face"))
- {
- // 江苏医保刷脸授权获取医保身份 - 使用NationECCode.dll与泰和完全一致
- // URL格式: http://localhost:8321/readcard/entry?param=jiangsu_face_${nowbiztype}
- string businessType = temps.Length > 2 ? temps[2] : "01101"; // 从URL参数获取业务类型(第3段)
-
- // 验证业务类型格式
- if (!JiangSuSocialCardBusiness.IsValidBusinessType(businessType))
- {
- result.Add("success", false);
- result.Add("code", 1001);
- result.Add("message", $"江苏医保刷脸业务类型【{businessType}】无效!支持的业务类型:01101(门诊挂号)、01301(门诊结算)、02121(药店购药)等");
- result.Add("type", "face");
- result.Add("device", "江苏医保刷脸认证器(NationECCode.dll)");
- result.Add("businessType", businessType);
- }
- else
- {
- result = JiangSuSocialCardBusiness.ReadFace(businessType); // 使用NationECCode.dll与泰和完全一致
- // 转换为前端期望的格式
- result = ConvertJiangSuFaceAuthToStandardFormat(result);
- }
- }
- else if (type.Equals("jiangsu_qrcode"))
- {
- // 江苏医保电子凭证解码(独立入口)
- string businessType = temps.Length > 2 ? temps[2] : "01101"; // 从URL参数获取业务类型(第3段)
-
- // 验证业务类型格式
- if (!JiangSuSocialCardBusiness.IsValidBusinessType(businessType))
- {
- result.Add("success", false);
- result.Add("code", 1001);
- result.Add("message", $"江苏医保电子凭证业务类型【{businessType}】无效!支持的业务类型:01101(门诊挂号)、01301(门诊结算)、02121(药店购药)等");
- result.Add("type", "qrcode");
- result.Add("device", "江苏医保电子凭证解码器");
- }
- else
- {
- result = JiangSuSocialCardBusiness.ReadElectronicCertificate(businessType);
- // 转换为前端期望的格式
- result = ConvertJiangSuElectronicCertificateToStandardFormat(result);
- }
- }
- else if (type.Equals("jiangsu"))
- {
- // 江苏医保社保卡读取
- string action = temps.Length > 1 ? temps[1] : "readcard";
-
- // 检查是否是业务代码格式(5位数字),如果是则默认为readcard操作
- if (temps.Length > 1 && IsBusinessCode(temps[1]))
- {
- action = "readcard"; // 业务代码不影响江苏医保读卡操作,默认读卡
- }
-
- if (action.Equals("init"))
- {
- result = JiangSuSocialCardBusiness.Initialize();
- }
- else if (action.Equals("readcard"))
- {
- result = JiangSuSocialCardBusiness.ReadSocialCard(false);
- // 转换为前端期望的格式
- result = ConvertJiangSuDataToStandardFormat(result);
- }
- else if (action.Equals("readcard_pin"))
- {
- result = JiangSuSocialCardBusiness.ReadSocialCard(true);
- result = ConvertJiangSuDataToStandardFormat(result);
- }
- else if (action.Equals("verifypin"))
- {
- result = JiangSuSocialCardBusiness.VerifyCardPIN();
- }
- else if (action.Equals("changepin"))
- {
- result = JiangSuSocialCardBusiness.ChangeCardPIN();
- }
- else if (action.Equals("status"))
- {
- result = JiangSuSocialCardBusiness.GetDeviceStatus();
- }
- else if (action.Equals("reset"))
- {
- result = JiangSuSocialCardBusiness.ResetSystemState();
- }
- else if (action.Equals("getpersoninfo"))
- {
- result = JiangSuSocialCardBusiness.GetPersonInfo("socialcard", "");
- }
- else if (action.Equals("checkdll"))
- {
- result = JiangSuSocialCardBusiness.CheckDllExists();
- }
- else if (action.Equals("qrcode") || action.Equals("ec"))
- {
- // 江苏医保电子凭证解码
- string businessType = temps.Length > 2 ? temps[2] : "01101"; // 默认门诊挂号
-
- // 验证业务类型格式
- if (!JiangSuSocialCardBusiness.IsValidBusinessType(businessType))
- {
- result.Add("success", false);
- result.Add("code", 1001);
- result.Add("message", $"江苏医保电子凭证业务类型【{businessType}】无效!支持的业务类型:01101(门诊挂号)、01301(门诊结算)、02121(药店购药)等");
- result.Add("type", "qrcode");
- result.Add("device", "江苏医保电子凭证解码器");
- }
- else
- {
- result = JiangSuSocialCardBusiness.ReadElectronicCertificate(businessType);
- // 转换为前端期望的格式(电子凭证不需要特殊转换,保持原格式)
- result = ConvertJiangSuElectronicCertificateToStandardFormat(result);
- }
- }
- else
- {
- result.Add("success", false);
- result.Add("code", 1001);
- result.Add("message", "江苏医保操作【" + action + "】错误!允许的操作为【init、readcard、readcard_pin、verifypin、changepin、status、reset、getpersoninfo、checkdll、qrcode、ec】");
- }
- }
- else
- {
- result.Add("code", 1001);
- result.Add("message", "读卡类别【" + type + "】错误!允许的类别为【sicard、idcard、idcard2、qrcode、qrcode2、face、huashi、jiangsu、jiangsu_qrcode、jiangsu_face】");
- }
- return result;
- }
- /// <summary>
- /// 判断字符串是否是业务代码格式(5位数字)
- /// </summary>
- /// <param name="code">要检查的字符串</param>
- /// <returns>是否是业务代码</returns>
- private bool IsBusinessCode(string code)
- {
- if (string.IsNullOrEmpty(code) || code.Length != 5)
- {
- return false;
- }
-
- // 检查是否是5位数字
- foreach (char c in code)
- {
- if (!char.IsDigit(c))
- {
- return false;
- }
- }
-
- return true;
- }
- /// <summary>
- /// 将华视读卡器的数据格式转换为前端期望的"^"分隔字符串格式
- /// </summary>
- /// <param name="huashiResult">华视读卡器返回的JSON数据</param>
- /// <returns>转换后的标准格式</returns>
- private JObject ConvertHuaShiDataToStandardFormat(JObject huashiResult)
- {
- JObject result = new JObject();
-
- try
- {
- // 如果华视读卡器返回错误,直接返回错误信息
- if ((int)huashiResult["code"] != 200)
- {
- return huashiResult;
- }
- // 提取华视读卡器返回的数据
- var data = huashiResult["data"];
- if (data == null)
- {
- result.Add("code", 1001);
- result.Add("message", "华视读卡器返回数据为空");
- return result;
- }
- // 按照前端期望的顺序组装数据:
- // str1[0] = IDNumber (身份证号)
- // str1[1] = Name (姓名)
- // str1[2] = Sex (性别)
- // str1[3] = Nation (民族)
- // str1[4] = Birthday (生日)
- // str1[5] = Address (地址)
- // str1[6] = IDIssued (签发机关)
- // str1[7] = IssuedData + ValidDate (签发日期+有效期,连续)
- // str1[8] = Base64Photo (照片Base64)
- string idNumber = data["idCode"]?.ToString() ?? "";
- string name = data["name"]?.ToString() ?? "";
- string sex = data["sex"]?.ToString() ?? "";
- string nation = data["nation"]?.ToString() ?? "";
- string birthday = data["birthday"]?.ToString() ?? "";
- string address = data["address"]?.ToString() ?? "";
- string department = data["department"]?.ToString() ?? "";
- string startDate = data["startDate"]?.ToString() ?? "";
- string endDate = data["endDate"]?.ToString() ?? "";
-
- // 组合签发日期和有效期 (前端会用substring分割)
- string dateInfo = startDate + endDate;
-
- // 获取照片的Base64数据
- string base64Photo = data["photoBase64"]?.ToString() ?? "";
- // 按照前端期望的顺序用"^"连接
- string formattedData = string.Join("^", new string[] {
- idNumber, // [0] 身份证号
- name, // [1] 姓名
- sex, // [2] 性别
- nation, // [3] 民族
- birthday, // [4] 生日
- address, // [5] 地址
- department, // [6] 签发机关
- dateInfo, // [7] 签发日期+有效期
- base64Photo, // [8] 照片Base64
- "", // [9] 预留空位,确保split后数组有足够元素
- "" // [10] 预留空位
- });
- result.Add("code", 200);
- result.Add("message", "华视读卡器读取成功(已转换为标准格式)");
- result.Add("data", formattedData);
- result.Add("device", "华视电子身份证读卡器");
- result.Add("originalType", "huashi_idcard");
- }
- catch (System.Exception ex)
- {
- result.Add("code", 1001);
- result.Add("message", $"华视数据格式转换异常: {ex.Message}");
- }
- return result;
- }
- /// <summary>
- /// 将江苏医保社保卡的数据格式转换为前端期望的"^"分隔字符串格式
- /// </summary>
- /// <param name="jiangsuResult">江苏医保返回的JSON数据</param>
- /// <returns>转换后的标准格式</returns>
- private JObject ConvertJiangSuDataToStandardFormat(JObject jiangsuResult)
- {
- JObject result = new JObject();
-
- try
- {
- // 如果江苏医保返回错误,直接返回错误信息
- if (!(bool)jiangsuResult["success"] || (int)jiangsuResult["code"] != 200)
- {
- // 保持原有的success和code字段,但调整为前端期望的格式
- result.Add("code", jiangsuResult["code"]);
- result.Add("message", jiangsuResult["message"]);
- result.Add("device", "江苏医保社保卡读卡器");
- return result;
- }
- // 提取江苏医保返回的数据
- var data = jiangsuResult["data"];
- if (data == null)
- {
- result.Add("code", 1001);
- result.Add("message", "江苏医保返回数据为空");
- return result;
- }
- // 按照前端期望的顺序组装社保卡数据:
- // str1[0] = CardNumber (社保卡号)
- // str1[1] = Name (姓名)
- // str1[2] = IDNumber (身份证号)
- // str1[3] = Sex (性别)
- // str1[4] = Nation (民族)
- // str1[5] = Birthday (生日)
- // str1[6] = Address (地址)
- // str1[7] = IssueDate (发卡日期)
- // str1[8] = ValidDate (有效期)
- // str1[9] = Department (发卡机构)
- // str1[10] = Photo (照片Base64)
- string cardNumber = data["cardNumber"]?.ToString() ?? "";
- string name = data["name"]?.ToString() ?? "";
- string idNumber = data["idNumber"]?.ToString() ?? "";
- string sex = data["sex"]?.ToString() ?? "";
- string nation = data["nation"]?.ToString() ?? "";
- string birthday = data["birthday"]?.ToString() ?? "";
- string address = data["address"]?.ToString() ?? "";
- string issueDate = data["issueDate"]?.ToString() ?? "";
- string validDate = data["validDate"]?.ToString() ?? "";
- string department = data["department"]?.ToString() ?? "";
- string photo = data["photo"]?.ToString() ?? "";
- // 按照前端期望的顺序用"^"连接(社保卡格式)
- string formattedData = string.Join("^", new string[] {
- cardNumber, // [0] 社保卡号
- name, // [1] 姓名
- idNumber, // [2] 身份证号
- sex, // [3] 性别
- nation, // [4] 民族
- birthday, // [5] 生日
- address, // [6] 地址
- issueDate, // [7] 发卡日期
- validDate, // [8] 有效期
- department, // [9] 发卡机构
- photo, // [10] 照片Base64
- "", // [11] 预留空位
- "" // [12] 预留空位
- });
- result.Add("code", 200);
- result.Add("message", "江苏医保社保卡读取成功(已转换为标准格式)");
- result.Add("data", formattedData);
- result.Add("device", "江苏医保社保卡读卡器");
- result.Add("originalType", "jiangsu_socialcard");
- }
- catch (System.Exception ex)
- {
- result.Add("code", 1001);
- result.Add("message", $"江苏医保数据格式转换异常: {ex.Message}");
- }
- return result;
- }
- /// <summary>
- /// 将江苏医保电子凭证解码结果转换为前端期望的格式
- /// </summary>
- /// <param name="jiangsuEcResult">江苏医保电子凭证解码返回的JSON数据</param>
- /// <returns>转换后的标准格式</returns>
- private JObject ConvertJiangSuElectronicCertificateToStandardFormat(JObject jiangsuEcResult)
- {
- JObject result = new JObject();
-
- try
- {
- // 如果江苏医保电子凭证解码返回错误,直接返回错误信息
- if (!(bool)jiangsuEcResult["success"] || (int)jiangsuEcResult["code"] != 200)
- {
- // 保持原有的字段,确保前端能正确处理
- result.Add("code", jiangsuEcResult["code"]);
- result.Add("message", jiangsuEcResult["message"]);
- result.Add("device", jiangsuEcResult["device"]);
- result.Add("type", jiangsuEcResult["type"]);
-
- // 添加其他可能的错误信息字段
- if (jiangsuEcResult["jiangsuErrorCode"] != null)
- result.Add("jiangsuErrorCode", jiangsuEcResult["jiangsuErrorCode"]);
- if (jiangsuEcResult["jiangsuErrorMessage"] != null)
- result.Add("jiangsuErrorMessage", jiangsuEcResult["jiangsuErrorMessage"]);
- if (jiangsuEcResult["suggestion"] != null)
- result.Add("suggestion", jiangsuEcResult["suggestion"]);
-
- return result;
- }
- // 电子凭证解码成功,保持原格式返回(前端直接使用JSON格式)
- result.Add("code", jiangsuEcResult["code"]);
- result.Add("message", jiangsuEcResult["message"]);
- result.Add("device", jiangsuEcResult["device"]);
- result.Add("type", jiangsuEcResult["type"]);
- result.Add("originalType", jiangsuEcResult["originalType"]);
- result.Add("timestamp", jiangsuEcResult["timestamp"]);
-
- // 保持电子凭证的JSON数据格式(前端期望JSON而不是^分隔的字符串)
- result.Add("data", jiangsuEcResult["data"]);
-
- // 添加兼容字段:让前端可以统一处理
- result.Add("readCardResult", jiangsuEcResult["readCardResult"]);
-
- // 保留江苏医保相关信息
- if (jiangsuEcResult["businessType"] != null)
- result.Add("businessType", jiangsuEcResult["businessType"]);
- if (jiangsuEcResult["interfaceVersion"] != null)
- result.Add("interfaceVersion", jiangsuEcResult["interfaceVersion"]);
- if (jiangsuEcResult["jiangsuOriginalData"] != null)
- result.Add("jiangsuOriginalData", jiangsuEcResult["jiangsuOriginalData"]);
- }
- catch (System.Exception ex)
- {
- result.Add("code", 1001);
- result.Add("message", $"江苏医保电子凭证数据格式转换异常: {ex.Message}");
- result.Add("device", "江苏医保电子凭证解码器");
- result.Add("type", "qrcode");
- result.Add("exception", ex.GetType().Name);
- }
- return result;
- }
- /// <summary>
- /// 将江苏医保刷脸授权结果转换为前端期望的格式
- /// </summary>
- /// <param name="jiangsuFaceAuthResult">江苏医保刷脸授权返回的JSON数据</param>
- /// <returns>转换后的标准格式</returns>
- private JObject ConvertJiangSuFaceAuthToStandardFormat(JObject jiangsuFaceAuthResult)
- {
- JObject result = new JObject();
-
- try
- {
- // 刷脸授权直接返回原JSON格式,不需要转换为^分隔字符串
- // 因为刷脸返回的是结构化的医保身份信息,前端期望JSON格式
-
- result.Add("code", jiangsuFaceAuthResult["code"]);
- result.Add("message", jiangsuFaceAuthResult["message"]);
- result.Add("type", "face");
- result.Add("data", jiangsuFaceAuthResult["data"]?.ToString());
- result.Add("sign", jiangsuFaceAuthResult["sign"]);
-
- // 保留江苏医保特有字段
- if (jiangsuFaceAuthResult["device"] != null)
- result.Add("device", jiangsuFaceAuthResult["device"]);
- if (jiangsuFaceAuthResult["businessType"] != null)
- result.Add("businessType", jiangsuFaceAuthResult["businessType"]);
- if (jiangsuFaceAuthResult["timestamp"] != null)
- result.Add("timestamp", jiangsuFaceAuthResult["timestamp"]);
- if (jiangsuFaceAuthResult["authNo"] != null)
- result.Add("authNo", jiangsuFaceAuthResult["authNo"]);
- if (jiangsuFaceAuthResult["interfaceVersion"] != null)
- result.Add("interfaceVersion", jiangsuFaceAuthResult["interfaceVersion"]);
- }
- catch (System.Exception ex)
- {
- result.Add("code", 1001);
- result.Add("message", $"江苏医保刷脸授权数据格式转换异常: {ex.Message}");
- result.Add("device", "江苏医保刷脸认证器");
- result.Add("type", "face");
- result.Add("exception", ex.GetType().Name);
- }
- return result;
- }
- /// <summary>
- /// 江苏工伤联网结算接口 - POST方式
- /// POST /api/entry/workinjury
- /// </summary>
- [HttpPost]
- [Route("api/entry/workinjury")]
- public JObject PostWorkInjury([FromBody] JObject request)
- {
- JObject result = new JObject();
- try
- {
- // 检查请求体
- if (request == null)
- {
- result.Add("success", false);
- result.Add("code", 1001);
- result.Add("message", "请求体不能为空");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- // 获取操作类型
- string action = request["action"]?.ToString()?.ToLower() ?? "";
-
- if (string.IsNullOrEmpty(action))
- {
- result.Add("success", false);
- result.Add("code", 1002);
- result.Add("message", "action参数不能为空");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- // 根据操作类型处理不同的请求
- switch (action)
- {
- case "init":
- result = HandleWorkInjuryInit(request);
- break;
- case "transaction":
- result = HandleWorkInjuryTransaction(request);
- break;
- case "health":
- result = JiangSuWorkInjuryBusiness.HealthCheck();
- break;
- case "stats":
- result = JiangSuWorkInjuryBusiness.GetTransactionStatistics();
- break;
- case "signin_status":
- result = JiangSuWorkInjuryBusiness.GetSignInStatus();
- break;
- case "batch_upload":
- result = HandleWorkInjuryBatchUpload(request);
- break;
- case "complete_process":
- result = HandleWorkInjuryCompleteProcess(request);
- break;
- case "retry":
- result = HandleWorkInjuryRetry(request);
- break;
- case "reverse":
- result = HandleWorkInjuryReverse(request);
- break;
- default:
- result.Add("success", false);
- result.Add("code", 1003);
- result.Add("message", $"不支持的操作类型: {action}");
- result.Add("device", "江苏工伤联网接口");
- result.Add("supportedActions", "init, transaction, health, stats, signin_status, batch_upload, complete_process, retry, reverse");
- break;
- }
- }
- catch (System.Exception ex)
- {
- result.Add("success", false);
- result.Add("code", 1000);
- result.Add("message", $"工伤联网接口处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- result.Add("exception", ex.GetType().Name);
- }
- return result;
- }
- /// <summary>
- /// 处理工伤联网初始化请求
- /// </summary>
- private JObject HandleWorkInjuryInit(JObject request)
- {
- try
- {
- var configObj = request["config"];
- if (configObj != null)
- {
- // 使用自定义配置
- var config = new JiangSuWorkInjuryBusiness.WorkInjuryConfig
- {
- FixmedinsCode = configObj["fixmedinsCode"]?.ToString() ?? "SQ201348",
- FixmedinsName = configObj["fixmedinsName"]?.ToString() ?? "沭阳铭和医院",
- ReceiverSysCode = configObj["receiverSysCode"]?.ToString() ?? "JSYTH",
- InterfaceVersion = configObj["interfaceVersion"]?.ToString() ?? "V2.1",
- OperatorType = configObj["operatorType"]?.ToString() ?? "1",
- DefaultOperator = configObj["defaultOperator"]?.ToString() ?? "001",
- DefaultOperatorName = configObj["defaultOperatorName"]?.ToString() ?? "系统管理员",
- LogPath = configObj["logPath"]?.ToString() ?? "logs/workinjury/"
- };
- return JiangSuWorkInjuryBusiness.Initialize(config);
- }
- else
- {
- // 使用默认配置
- return JiangSuWorkInjuryBusiness.Initialize();
- }
- }
- catch (System.Exception ex)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1004);
- result.Add("message", $"工伤联网初始化处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- }
- /// <summary>
- /// 处理工伤联网交易请求
- /// </summary>
- private JObject HandleWorkInjuryTransaction(JObject request)
- {
- try
- {
- string transactionName = request["transactionName"]?.ToString() ?? "";
- if (string.IsNullOrEmpty(transactionName))
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1005);
- result.Add("message", "transactionName参数不能为空");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- object businessParams = request["businessParams"]?.ToObject<object>();
- string identifyMode = request["identifyMode"]?.ToString() ?? "1";
- string qrCodeInfo = request["qrCodeInfo"]?.ToString() ?? "";
- string operatorId = request["operatorId"]?.ToString() ?? "";
- string operatorName = request["operatorName"]?.ToString() ?? "";
- return JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction(
- transactionName, businessParams, identifyMode, qrCodeInfo, operatorId, operatorName);
- }
- catch (System.Exception ex)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1006);
- result.Add("message", $"工伤联网交易处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- }
- /// <summary>
- /// 处理工伤联网批量上传请求
- /// </summary>
- private JObject HandleWorkInjuryBatchUpload(JObject request)
- {
- try
- {
- var prescriptionsArray = request["prescriptions"]?.ToObject<object[]>();
- if (prescriptionsArray == null || prescriptionsArray.Length == 0)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1007);
- result.Add("message", "prescriptions参数不能为空");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- string patientId = request["patientId"]?.ToString() ?? "";
- string visitNo = request["visitNo"]?.ToString() ?? "";
- return JiangSuWorkInjuryBusiness.BatchUploadPrescriptions(prescriptionsArray, patientId, visitNo);
- }
- catch (System.Exception ex)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1008);
- result.Add("message", $"工伤联网批量上传处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- }
- /// <summary>
- /// 处理工伤联网完整流程请求
- /// </summary>
- private JObject HandleWorkInjuryCompleteProcess(JObject request)
- {
- try
- {
- object patientInfo = request["patientInfo"]?.ToObject<object>();
- object[] feeDetails = request["feeDetails"]?.ToObject<object[]>();
- return JiangSuWorkInjuryBusiness.CompleteWorkInjuryProcess(patientInfo, feeDetails);
- }
- catch (System.Exception ex)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1009);
- result.Add("message", $"工伤联网完整流程处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- }
- /// <summary>
- /// 处理工伤联网智能重试请求
- /// </summary>
- private JObject HandleWorkInjuryRetry(JObject request)
- {
- try
- {
- string transactionName = request["transactionName"]?.ToString() ?? "";
- if (string.IsNullOrEmpty(transactionName))
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1010);
- result.Add("message", "transactionName参数不能为空");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- object businessParams = request["businessParams"]?.ToObject<object>();
- int maxRetries = request["maxRetries"]?.ToObject<int>() ?? 3;
- int baseDelayMs = request["baseDelayMs"]?.ToObject<int>() ?? 1000;
- return JiangSuWorkInjuryBusiness.SmartRetryTransaction(transactionName, businessParams, maxRetries, baseDelayMs);
- }
- catch (System.Exception ex)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1011);
- result.Add("message", $"工伤联网智能重试处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- }
- /// <summary>
- /// 处理工伤联网冲正请求
- /// </summary>
- private JObject HandleWorkInjuryReverse(JObject request)
- {
- try
- {
- string originalMessageId = request["originalMessageId"]?.ToString() ?? "";
- if (string.IsNullOrEmpty(originalMessageId))
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1012);
- result.Add("message", "originalMessageId参数不能为空");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- return JiangSuWorkInjuryBusiness.ReverseTransactionByRecord(originalMessageId);
- }
- catch (System.Exception ex)
- {
- var result = new JObject();
- result.Add("success", false);
- result.Add("code", 1013);
- result.Add("message", $"工伤联网冲正处理异常: {ex.Message}");
- result.Add("device", "江苏工伤联网接口");
- return result;
- }
- }
- }
- }
|