using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PTMedicalInsurance.Business; using PTMedicalInsurance.Forms.BasicDatas.services; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PTMedicalInsurance.Forms.BasicDatas { class DirectroyQueryService { //设置实例 CenterBusiness cBus = new CenterBusiness(); HisMainBusiness hBus = new HisMainBusiness(); HisIrisServices hIS = new HisIrisServices(); MIIrisServices mIS = new MIIrisServices(); InvokeHelper invoker = new InvokeHelper(); private GridViewSetter gvdSetter = new GridViewSetter(); private Func action; #region 查询 //药品 //诊疗 //材料 //疾病诊断 //手术 //门诊慢特病种 //按病种付费 //日间手术 //字典表 //中药饮片 //医疗机构制剂 //肿瘤形态学 //中医疾病下载 //中医证候下载 //民族药品 //目录信息查询 //医疗与医保目录匹配 //医药机构目录匹配 //医保目录限价 //医保目录自付比例 //医药机构信息 #endregion /// /// 查询分页信息 /// /// /// /// public int QueryMIDirectoryPaginationInfo(JObject input,out string errmsg) { JObject joRtn = mIS.getMIDirectoryByPagination(input); if (joRtn["errorCode"].ToString() != "0") { errmsg ="IRIS数据返回错误:" + joRtn["errorMessage"].ToString(); return -1; } if (joRtn["result"]["rows"] == null) { errmsg = "rows节点不存在"; return -1; } if (joRtn["result"]["total"].ToString() == "0") { errmsg ="未查询到数据"; return -1; } errmsg = joRtn.ToString(); return 0; } /// /// 查询分页信息 /// /// /// /// /// public int QueryMIDirectoryPaginationInfo(JObject input, out string errmsg, out DataTable dt) { int iResult = QueryMIDirectoryPaginationInfo(input,out errmsg); dt = null; if (iResult == 0) { JObject joRtn = JObject.Parse(errmsg); dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable)); } return iResult; } /// /// 设置DataGridView标题 /// public void SetDgvDirectoryHeader(int directoryType,DataGridView dgv) { switch (directoryType) { case 1://药品 { gvdSetter.SetHeaderTextOfDrug(dgv); break; } case 2://诊疗 { gvdSetter.SetHeaderTextOfMedicalService(dgv); break; } case 3://材料 { gvdSetter.SetHeaderTextOfMaterials(dgv); break; } case 4://疾病诊断 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; } case 5://手术 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; } case 6://慢性病 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; } case 7://DRGs { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; ; } case 8://日间手术 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; ; } case 9://字典表 { gvdSetter.SetHeaderTextOfDictionary(dgv); break; } case 10://中药饮片下载 { gvdSetter.SetHeaderTextOfChineseMedicine(dgv); break; } case 11://医药机构制剂目录下载 { gvdSetter.SetHeaderTextOfPreparation(dgv); break; } case 12://肿瘤形态学下载 { gvdSetter.SetHeaderTextOfTumorMorphology(dgv); break; } case 13: { //中医疾病下载 gvdSetter.GetChineseDiagnoseJsonByTxt(dgv); // ICPC3 //gvdSetter.SetICPCAdmReasonHeader(dgv); break; } case 14: { //中医证候下载 gvdSetter.GetTCMSyndromeJsonByTxt(dgv); // ICPC3 //gvdSetter.SetICPCTreatmentHeader(dgv); break; } case 15://民族药品 { gvdSetter.GetEthnicMedicineJsonByTxt(dgv); break; } case 16://目录信息查询 { gvdSetter.GetMedInsuCatalogJsonByTxt(dgv); break; } case 17://医疗与医保目录匹配关系查询 { gvdSetter.GetMedInsuCorrespondencJsonByTxt(dgv); break; } case 18://医药机构目录匹配查询 { gvdSetter.GetMedInstCorrespondencJsonByTxt(dgv); break; } case 19://医保目录限价查询 { gvdSetter.GetMedInsuFixedPriceJsonByTxt(dgv); break; } case 20://医保目录先自付比例下载 { gvdSetter.GetMedInsuFirstPayProportionJsonByTxt(dgv); break; } case 21://医药机构信息 { gvdSetter.GetMedicalInstitutionJsonByTxt(dgv); break; } } } /// /// 处理返回的数据格式,否则可能会报各种错误 /// /// public void HandleDatatable(int directoryType, JArray ja) { Global.writeLog($"directoryType:{directoryType}"); switch (directoryType) { case 1://药品 { foreach (JObject item in ja) { var value = item["cumulativeNegativeBurdenFlag"].ToString(); if (value == null || Convert.IsDBNull(value) || string.IsNullOrEmpty(value.ToString())) { item["cumulativeNegativeBurdenFlag"] = 0; } else { // 如果是整数类型,比如 0/1 转换为 false/true int flagValue = 0; if (int.TryParse(value.ToString(), out flagValue)) { item["cumulativeNegativeBurdenFlag"] = flagValue == 1; } else { item["cumulativeNegativeBurdenFlag"] = 0; } } } break; } case 2://诊疗 { break; } case 3://材料 { break; } case 4://疾病诊断 { break; } case 5://手术 { break; } case 6://慢性病 { break; } case 7://DRGs { break; ; } case 8://日间手术 { break; ; } case 9://字典表 { break; } case 10://中药饮片下载 { break; } case 11://医药机构制剂目录下载 { break; } case 12://肿瘤形态学下载 { break; } case 13: { break; } case 14: { break; } case 15://民族药品 { break; } case 16://目录信息查询 { break; } case 17://医疗与医保目录匹配关系查询 { break; } case 18://医药机构目录匹配查询 { break; } case 19://医保目录限价查询 { break; } case 20://医保目录先自付比例下载 { break; } case 21://医药机构信息 { break; } } } #region 更新 private int updateAllInsuInfo(DataLoaderContext context, out string errMsg) { int iFalse = 0; int iCount = 0; List errList = new List(); object[] args = context.args; //查询总条数 int currentPage = 1; int pageSize = 1000; JObject joInput = new JObject { { "currentPage" , currentPage }, { "pageSize" , pageSize }, { "serviceCode" , "09010042" }, { "directoryType" , (int)args[1] }, { "directoryCode" , "" }, { "directoryName" , "" }, { "approvalNO" , "" }, { "dosageForm" , "" }, { "specifications" , "" }, { "manufacturers" , "" }, { "directoryDr" , Global.inf.interfaceDr } }; JObject joRtn = mIS.getMIDirectoryByPagination(joInput); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } int iTotalCount = int.Parse(joRtn["result"]["total"].ToString()); int iTotalPages = (int)(iTotalCount / pageSize) + 1; string headerText = $"正在下载数据,当前页数【{currentPage}】/总页数【{iTotalPages}】"; context.setProgressHeaderText(ProgressBarStyle.Marquee,headerText,50); for (int i = 0; i < iTotalPages; i++) { JObject joRtnData = new JObject(); if (currentPage == 1) { joRtnData = (JObject)joRtn.DeepClone(); } else { headerText = $"正在下载数据,当前页数【{currentPage}】/总页数【{iTotalPages}】"; context.setProgressHeaderText(ProgressBarStyle.Marquee, headerText, 50); joInput["currentPage"] = currentPage; joRtnData = mIS.getMIDirectoryByPagination(joInput); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } } DataTable dt = JsonConvert.DeserializeObject(joRtnData["result"]["rows"].ToString()); if (context.setProgressMaximum != null) { context.setProgressMaximum(dt.Rows.Count); } foreach (DataRow dr in dt.Rows) { JObject jo = new JObject(); jo.Add("code", dr["InsuCode"].ToString()); jo.Add("HisType", dr["HisType"].ToString()); OutParamWrapper outParWarp = new OutParamWrapper(); if (action(jo, outParWarp) != 0) { iFalse++; errList.Add(outParWarp.Value); Global.writeLog(outParWarp.Value); } iCount++; // 检查是否应取消操作 if (context.Worker.CancellationPending) { errMsg = "操作取消!"; return -1; // 或者其他表示取消的返回值 } if (context.reportProgress != null) { context.reportProgress(iCount); } } if (iFalse != 0) { errMsg = ($"总共{iCount}条数据更新完成,但有{iFalse}条更新发生错误!"); Global.writeLog($"{errMsg}\r\n{errList}"); return iFalse; } else { errMsg = ($"全部数据({iCount}条)更新完成"); } currentPage++; } return 0; } #endregion } }