using System.Collections.Concurrent; using Newtonsoft.Json; using WingInterfaceLibrary.DTO.Vital; using WingServerCommon.Log; namespace VitalService.Factury { public class JingQiApiHelper : BaseApiHelper { private ConcurrentDictionary _facturyOrgInfos = new ConcurrentDictionary(); private Func OnGetFacturyOrgInfo; private string _serverUrl; public string RegisterUrl { get { return $"{_serverUrl}/api/phyreginf"; } } public string DeleteRegisterUrl { get { return $"{_serverUrl}/api/phyregmod"; } } public JingQiApiHelper(string serverUrl, Func funGetFacturyOrgInfo, double seconds = 60) : base(seconds) { _serverUrl = serverUrl?.Trim('/') ?? string.Empty; OnGetFacturyOrgInfo = funGetFacturyOrgInfo; Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper init, serverUrl:{_serverUrl}, seconds:{seconds}"); } public FacturyOrgModel GetFacturyInfo(string token) { if (!_facturyOrgInfos.TryGetValue(token, out FacturyOrgModel facturyInfo)) { facturyInfo = OnGetFacturyOrgInfo.Invoke(token); if (facturyInfo != null) { _facturyOrgInfos.TryAdd(token, facturyInfo); } } return facturyInfo; } /// /// 体检登记 /// /// /// /// public async Task> ExamRegisterAsync(JingQiExamRegisterRequest request, Dictionary headers, string idCardNo) { Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper ExamRegisterAsync start, idCardNo:{idCardNo}, request:{request}"); return await GetJingQiResult(RegisterUrl, JsonConvert.SerializeObject(request), headers, idCardNo); } /// /// 删除登记记录 /// /// /// /// public async Task> ExamDeleteAsync(JingQiExamDeleteRequest request, Dictionary headers, string idCardNo) { Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper ExamDeleteAsync start, idCardNo:{idCardNo}, request:{request}"); return await GetJingQiResult(DeleteRegisterUrl, JsonConvert.SerializeObject(request), headers, idCardNo); } /// /// 转换中医体质结果 /// /// /// /// /// public string GetZYPostContentAsync(RegisterPersonInfoDTO registerInfo, FacturyOrgModel facturyInfo, Dictionary examData, DateTime examTime, out string url) { url = $"{_serverUrl}/api/phychn"; var jingQiInfos = registerInfo.JingQiExamInfos; var pyhId = GetValue(jingQiInfos, "pyhid"); var dic = new Dictionary(); dic.Add("pyhid", pyhId); dic.Add("personId", GetValue(jingQiInfos, "PatientID")); dic.Add("identificationAge", GetInt(jingQiInfos, "PATAGE").ToString()); dic.Add("q1Jlcp", GetValue(examData, "qusition1")); dic.Add("q2Rypb", GetValue(examData, "qusition2")); dic.Add("q3Ryjd", GetValue(examData, "qusition3")); dic.Add("q4Sywl", GetValue(examData, "qusition4")); dic.Add("q5Qxdc", GetValue(examData, "qusition5")); dic.Add("q6Jlba", GetValue(examData, "qusition6")); dic.Add("q7Gdsl", GetValue(examData, "qusition7")); dic.Add("q8Hpsj", GetValue(examData, "qusition8")); dic.Add("q9Bmi", GetValue(examData, "qusition9")); dic.Add("q10Yjgs", GetValue(examData, "qusition10")); dic.Add("q11Sjfl", GetValue(examData, "qusition11")); dic.Add("q12Stpl", GetValue(examData, "qusition12")); dic.Add("q13Nshl", GetValue(examData, "qusition13")); dic.Add("q14Rygm", GetValue(examData, "qusition14")); dic.Add("q15Gmlt", GetValue(examData, "qusition15")); dic.Add("q16Kndh", GetValue(examData, "qusition16")); dic.Add("q17Rygm", GetValue(examData, "qusition17")); dic.Add("q18Ryxmz", GetValue(examData, "qusition18")); dic.Add("q19Qzyb", GetValue(examData, "qusition19")); dic.Add("q20Rczh", GetValue(examData, "qusition20")); dic.Add("q21Fcgz", GetValue(examData, "qusition21")); dic.Add("q22Ztmm", GetValue(examData, "qusition22")); dic.Add("q23Mbyn", GetValue(examData, "qusition23")); dic.Add("q24Mkha", GetValue(examData, "qusition24")); dic.Add("q25Pfsz", GetValue(examData, "qusition25")); dic.Add("q26Kgyz", GetValue(examData, "qusition26")); dic.Add("q27Kqyw", GetValue(examData, "qusition27")); dic.Add("q28Fbfd", GetValue(examData, "qusition28")); dic.Add("q29Ylbs", GetValue(examData, "qusition29")); dic.Add("q30Dbnz", GetValue(examData, "qusition30")); dic.Add("q31Dbgz", GetValue(examData, "qusition31")); dic.Add("q32Sthn", GetValue(examData, "qusition32")); dic.Add("q33Sxjmyz", GetValue(examData, "qusition33")); var physicalConclusion = GetValue(examData, "PhysicalConclusion"); var healthGuidance = GetHealthGuidance(GetValue(examData, "HealthGuidance")); // 气虚质 var qiScoreValue = GetValue(examData, "Qi_Score"); if (!string.IsNullOrWhiteSpace(qiScoreValue)) { var score = JsonConvert.DeserializeObject(qiScoreValue); dic.Add("qxzSf", GetZYTZValue(score.Result).ToString()); dic.Add("qxzDf", score.Value.ToString()); if (physicalConclusion == "Qi_Score") { dic.Add("qxzZd", healthGuidance); } } // 阳虚质 var yangScoreValue = GetValue(examData, "Yang_Score"); if (!string.IsNullOrWhiteSpace(yangScoreValue)) { var score = JsonConvert.DeserializeObject(yangScoreValue); dic.Add("yaxzSf", GetZYTZValue(score.Result).ToString()); dic.Add("yaxzDf", score.Value.ToString()); if (physicalConclusion == "Yang_Score") { dic.Add("yaxzZd", healthGuidance); } } // 阴虚质 var yinScoreValue = GetValue(examData, "Yin_Score"); if (!string.IsNullOrWhiteSpace(yinScoreValue)) { var score = JsonConvert.DeserializeObject(yinScoreValue); dic.Add("yixzSf", GetZYTZValue(score.Result).ToString()); dic.Add("yixzDf", score.Value.ToString()); if (physicalConclusion == "Yin_Score") { dic.Add("yixzZd", healthGuidance); } } // 痰湿质 var tanScoreValue = GetValue(examData, "Tan_Score"); if (!string.IsNullOrWhiteSpace(tanScoreValue)) { var score = JsonConvert.DeserializeObject(tanScoreValue); dic.Add("tszSf", GetZYTZValue(score.Result).ToString()); dic.Add("tszDf", score.Value.ToString()); if (physicalConclusion == "Tan_Score") { dic.Add("tszZd", healthGuidance); } } // 湿热质 var shiScoreValue = GetValue(examData, "Shi_Score"); if (!string.IsNullOrWhiteSpace(shiScoreValue)) { var score = JsonConvert.DeserializeObject(shiScoreValue); dic.Add("srzSf", GetZYTZValue(score.Result).ToString()); dic.Add("srzDf", score.Value.ToString()); if (physicalConclusion == "Shi_Score") { dic.Add("srzZd", healthGuidance); } } // 血瘀质 var xueScoreValue = GetValue(examData, "Xue_Score"); if (!string.IsNullOrWhiteSpace(xueScoreValue)) { var score = JsonConvert.DeserializeObject(xueScoreValue); dic.Add("xyzSf", GetZYTZValue(score.Result).ToString()); dic.Add("xyzDf", score.Value.ToString()); if (physicalConclusion == "Xue_Score") { dic.Add("xyzZd", healthGuidance); } } // 气郁质 var qiYuScoreValue = GetValue(examData, "Qiyu_Score"); if (!string.IsNullOrWhiteSpace(qiYuScoreValue)) { var score = JsonConvert.DeserializeObject(qiYuScoreValue); dic.Add("qyzSf", GetZYTZValue(score.Result).ToString()); dic.Add("qyzDf", score.Value.ToString()); if (physicalConclusion == "Qiyu_Score") { dic.Add("qyzZd", healthGuidance); } } // 特禀质 var teScoreValue = GetValue(examData, "Te_Score"); if (!string.IsNullOrWhiteSpace(teScoreValue)) { var score = JsonConvert.DeserializeObject(teScoreValue); dic.Add("tbzSf", GetZYTZValue(score.Result).ToString()); dic.Add("tbzDf", score.Value.ToString()); if (physicalConclusion == "Te_Score") { dic.Add("tbzZd", healthGuidance); } } // 平和质 var pingScoreValue = GetValue(examData, "Ping_Score"); if (!string.IsNullOrWhiteSpace(pingScoreValue)) { var score = JsonConvert.DeserializeObject(pingScoreValue); dic.Add("phzSf", GetZYTZValue(score.Result).ToString()); dic.Add("phzDf", score.Value.ToString()); if (physicalConclusion == "Ping_Score") { dic.Add("phzZd", healthGuidance); } } dic.Add("cpjg", GetPhysicalConclusion(physicalConclusion));// 测评结果 dic.Add("entryCode", facturyInfo.FacturyUserCode); dic.Add("entryName", facturyInfo.FacturyUserName); dic.Add("entryTime", examTime.ToLocalTime().ToString("yyyy-MM-dd")); dic.Add("createCode", facturyInfo.FacturyUserCode); dic.Add("createName", facturyInfo.FacturyUserName); dic.Add("createTime", examTime.ToLocalTime().ToString("yyyy-MM-dd")); dic.Add("updateCode", facturyInfo.FacturyUserCode); dic.Add("updateName", facturyInfo.FacturyUserName); dic.Add("updateTime", examTime.ToLocalTime().ToString("yyyy-MM-dd")); dic.Add("updateOrganzationCode", facturyInfo.FacturyOrgCode); dic.Add("updateOrganzationName", facturyInfo.FacturyOrgName); return JsonConvert.SerializeObject(dic); } private string GetValue(Dictionary dic, string key) { foreach (var k in dic.Keys) { if (k.ToLower() == key.ToLower()) { var value = dic[k]; return string.IsNullOrWhiteSpace(value) ? "" : value; } } return ""; } private int GetInt(Dictionary dic, string key) { var val = GetValue(dic, key); if (int.TryParse(val, out int res)) { return res; } return 0; } private int GetZYTZValue(string result) { return result == "是" ? 1 : result == "倾向是" ? 3 : 0; } private string GetHealthGuidance(string result) { try { var guidanceInfos = JsonConvert.DeserializeObject>(result); return string.Join(";", guidanceInfos); } catch (Exception ex) { } return string.Empty; } private string GetPhysicalConclusion(string physicalConclusion) { switch (physicalConclusion) { case "Qi_Score": return "02"; case "Yang_Score": return "03"; case "Yin_Score": return "04"; case "Tan_Score": return "05"; case "Shi_Score": return "06"; case "Xue_Score": return "07"; case "Qiyu_Score": return "082"; case "Te_Score": return "09"; case "Ping_Score": return "01"; default: return ""; } } private async Task> GetJingQiResult(string url, string request, Dictionary headers, string idCardNo) { try { var res = await GetResult(url, request, headers); Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper GetJingQiResult success, idCardNo:{idCardNo}, res:{res}"); if (!string.IsNullOrWhiteSpace(res)) { var jingQiResult = JsonConvert.DeserializeObject>(res); if (jingQiResult.status == "0") { Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper GetJingQiResult success, idCardNo:{idCardNo}, ErroMsg:{jingQiResult.ErroMsg}"); } else { Logger.WriteLineError($"VitalMixtureService JingQiApiHelper GetJingQiResult failed, idCardNo:{idCardNo}, status:{jingQiResult.status}, ErroMsg:{jingQiResult.ErroMsg}"); } return jingQiResult; } return new JingQiResult { status = "", ErroMsg = "", }; } catch (Exception ex) { Logger.WriteLineWarn($"VitalMixtureService JingQiApiHelper GetJingQiResult error, idCardNo:{idCardNo}, ex:{ex}"); return new JingQiResult { status = "error", ErroMsg = ex.Message, }; } } } public class FacturyOrgModel { public string Token { get; set; } public string UserCode { get; set; } public string FacturyOrgCode { get; set; } public string FacturyUserCode { get; set; } public string FacturyOrgName { get; set; } public string FacturyUserName { get; set; } public Dictionary FacturyData { get; set; } } public class ZYTZModel { public int Value { get; set; } public string Result { get; set; } } public class JingQiResult { public string status { get; set; } public string ErroMsg { get; set; } public TResult data { get; set; } } #region 体检登记 public class JingQiExamRegisterRequest { /// /// 身份证号 /// /// public string identity { get; set; } /// /// 机构编码 /// /// public string orgcode { get; set; } /// /// 操作人晶奇工号 /// /// public string usrcode { get; set; } /// /// 登记日期 2024-05-31 08:15:23 /// /// public string phydatetime { get; set; } } public class JingQiExamRegisterResult { /// /// 体检编号 /// /// public string phyid { get; set; } /// /// 居民姓名 /// /// public string PATNAME { get; set; } /// /// 居民性别,男 /// /// public string GRENDER { get; set; } /// /// 居民年龄 /// /// public string PATAGE { get; set; } /// /// 联系电话 /// /// public string PHONE { get; set; } /// /// 所属社区 /// /// public string ORGNAME { get; set; } /// /// 居住地址 /// /// public string adress { get; set; } /// /// 人群分类 老年人,高血压 /// /// public string lisclu { get; set; } /// /// 登记日期 2024-05-30 10:48:29 /// /// public string PHYDATE { get; set; } /// /// 个人档案ID /// /// public string PatientID { get; set; } /// /// 个人档案编号 /// /// public string NO { get; set; } } #endregion #region 取消登记 public class JingQiExamDeleteRequest { public string phyid { get; set; } public string modstatus { get; set; } = "1"; } public class JingQiExamDeleteResult { } #endregion }