123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- using System.Collections.Concurrent;
- using Newtonsoft.Json;
- using WingInterfaceLibrary.DTO.Vital;
- using WingServerCommon.Log;
- namespace VitalService.Factury
- {
- public class JingQiApiHelper : BaseApiHelper
- {
- private ConcurrentDictionary<string, FacturyOrgModel> _facturyOrgInfos = new ConcurrentDictionary<string, FacturyOrgModel>();
- private Func<string, FacturyOrgModel> 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<string, FacturyOrgModel> 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;
- }
- /// <summary>
- /// 体检登记
- /// </summary>
- /// <param name="request"></param>
- /// <param name="headers"></param>
- /// <returns></returns>
- public async Task<JingQiResult<JingQiExamRegisterResult>> ExamRegisterAsync(JingQiExamRegisterRequest request, Dictionary<string, string> headers, string idCardNo)
- {
- Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper ExamRegisterAsync start, idCardNo:{idCardNo}, request:{request}");
- return await GetJingQiResult<JingQiExamRegisterResult>(RegisterUrl, JsonConvert.SerializeObject(request), headers, idCardNo);
- }
- /// <summary>
- /// 删除登记记录
- /// </summary>
- /// <param name="request"></param>
- /// <param name="headers"></param>
- /// <returns></returns>
- public async Task<JingQiResult<JingQiExamDeleteResult>> ExamDeleteAsync(JingQiExamDeleteRequest request, Dictionary<string, string> headers, string idCardNo)
- {
- Logger.WriteLineInfo($"VitalMixtureService JingQiApiHelper ExamDeleteAsync start, idCardNo:{idCardNo}, request:{request}");
- return await GetJingQiResult<JingQiExamDeleteResult>(DeleteRegisterUrl, JsonConvert.SerializeObject(request), headers, idCardNo);
- }
- /// <summary>
- /// 转换中医体质结果
- /// </summary>
- /// <param name="examInfo"></param>
- /// <param name="registerInfo"></param>
- /// <param name="url"></param>
- /// <returns></returns>
- public string GetZYPostContentAsync(RegisterPersonInfoDTO registerInfo, FacturyOrgModel facturyInfo, Dictionary<string, string> examData, DateTime examTime, out string url)
- {
- url = $"{_serverUrl}/api/phychn";
- var jingQiInfos = registerInfo.JingQiExamInfos;
- var pyhId = GetValue(jingQiInfos, "pyhid");
- var dic = new Dictionary<string, string>();
- 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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<ZYTZModel>(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<string, string> 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<string, string> 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<List<string>>(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<JingQiResult<TResult>> GetJingQiResult<TResult>(string url, string request, Dictionary<string, string> 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<JingQiResult<TResult>>(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<TResult>
- {
- status = "",
- ErroMsg = "",
- };
- }
- catch (Exception ex)
- {
- Logger.WriteLineWarn($"VitalMixtureService JingQiApiHelper GetJingQiResult error, idCardNo:{idCardNo}, ex:{ex}");
- return new JingQiResult<TResult>
- {
- 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<string, string> FacturyData { get; set; }
- }
- public class ZYTZModel
- {
- public int Value { get; set; }
- public string Result { get; set; }
- }
- public class JingQiResult<TResult>
- {
- public string status { get; set; }
- public string ErroMsg { get; set; }
- public TResult data { get; set; }
- }
- #region 体检登记
- public class JingQiExamRegisterRequest
- {
- /// <summary>
- /// 身份证号
- /// </summary>
- /// <value></value>
- public string identity { get; set; }
- /// <summary>
- /// 机构编码
- /// </summary>
- /// <value></value>
- public string orgcode { get; set; }
- /// <summary>
- /// 操作人晶奇工号
- /// </summary>
- /// <value></value>
- public string usrcode { get; set; }
- /// <summary>
- /// 登记日期 2024-05-31 08:15:23
- /// </summary>
- /// <value></value>
- public string phydatetime { get; set; }
- }
- public class JingQiExamRegisterResult
- {
- /// <summary>
- /// 体检编号
- /// </summary>
- /// <value></value>
- public string phyid { get; set; }
- /// <summary>
- /// 居民姓名
- /// </summary>
- /// <value></value>
- public string PATNAME { get; set; }
- /// <summary>
- /// 居民性别,男
- /// </summary>
- /// <value></value>
- public string GRENDER { get; set; }
- /// <summary>
- /// 居民年龄
- /// </summary>
- /// <value></value>
- public string PATAGE { get; set; }
- /// <summary>
- /// 联系电话
- /// </summary>
- /// <value></value>
- public string PHONE { get; set; }
- /// <summary>
- /// 所属社区
- /// </summary>
- /// <value></value>
- public string ORGNAME { get; set; }
- /// <summary>
- /// 居住地址
- /// </summary>
- /// <value></value>
- public string adress { get; set; }
- /// <summary>
- /// 人群分类 老年人,高血压
- /// </summary>
- /// <value></value>
- public string lisclu { get; set; }
- /// <summary>
- /// 登记日期 2024-05-30 10:48:29
- /// </summary>
- /// <value></value>
- public string PHYDATE { get; set; }
- /// <summary>
- /// 个人档案ID
- /// </summary>
- /// <value></value>
- public string PatientID { get; set; }
- /// <summary>
- /// 个人档案编号
- /// </summary>
- /// <value></value>
- 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
- }
|