| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476 |
- 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<JObject, OutParamWrapper, int> action;
- #region 查询
- //药品
- //诊疗
- //材料
- //疾病诊断
- //手术
- //门诊慢特病种
- //按病种付费
- //日间手术
- //字典表
- //中药饮片
- //医疗机构制剂
- //肿瘤形态学
- //中医疾病下载
- //中医证候下载
- //民族药品
- //目录信息查询
- //医疗与医保目录匹配
- //医药机构目录匹配
- //医保目录限价
- //医保目录自付比例
- //医药机构信息
- #endregion
- /// <summary>
- /// 查询分页信息
- /// </summary>
- /// <param name="input"></param>
- /// <param name="errmsg"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 查询分页信息
- /// </summary>
- /// <param name="input"></param>
- /// <param name="errmsg"></param>
- /// <param name="dt"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 设置DataGridView标题
- /// </summary>
- 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;
- }
- }
- }
- /// <summary>
- /// 处理返回的数据格式,否则可能会报各种错误
- /// </summary>
- /// <param name="dt"></param>
- 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<string> errList = new List<string>();
- 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<DataTable>(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
- }
- }
|