using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PTMedicalInsurance.Business; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using PTMedicalInsurance.FormSetter; using PTMedicalInsurance.Common; using OfficeOpenXml; namespace PTMedicalInsurance.Forms { public partial class BasicData : Form { //设置实例 CenterBusiness cBus = new CenterBusiness(); HisMainBusiness hBus = new HisMainBusiness(); HisIrisServices hIS = new HisIrisServices(); MIIrisServices mIS = new MIIrisServices(); InvokeHelper invoker = new InvokeHelper(); InsuServices Iis = new InsuServices(); //1.声明自适应类实例 AutoResizeForm asc = new AutoResizeForm(); public JObject joSelectedInsuInfo; public int insuInfoIndex = 0; public int idInfoIndex = 0; int iTotalCount = 0; int currentPageIndex = 0; private Func action; private DataTable dtAllMapped; DataTable dtExport; public BasicData() { InitializeComponent(); rbgDirecType.SelectedIndex = 0; rbgDirecType_C.SelectedIndex = 0; rbSingleDown.Checked = true; rbOnlyName.Checked = true; this.rbgDirecType.ValueChanged += new Sunny.UI.UIRadioButtonGroup.OnValueChanged(this.rbgDirecType_ValueChanged); this.pgDownload.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgDownload_PageChanged); this.pgCenterDirect.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgCenterDirect_PageChanged); Font rowFont = new Font("UTF-8", 8); Font columnFont = new Font("UTF-8", 9); rbgDirecType.SelectedIndex = 8; rbAll.Checked = true; //tabControl1.SelectedIndex = 1; //this.StartPosition = FormStartPosition.CenterParent; asc.controllInitializeSize(this); asc.controlAutoSize(this); TextCbd.Text = Global.inf.areaCode; //查询区域通用目录 MIIrisServices mIS = new MIIrisServices(); JObject joRtnTY = mIS.getInterface_TY(Global.inf.interfaceDr.ToString(), ""); Global.inf.InsuCurrencyCataLogue = JsonHelper.getDestValue(joRtnTY, "InsuCurrencyCataLogue"); //通用目录编码 6 Global.inf.HospitalDr_TY = JsonHelper.getDestValue(joRtnTY, "HospitalDr_TY"); //通用目录所属医院ID } #region 函数封装 private void queryInsuDirectory(int currentPage, int pageSize, int directoryType, int interfaceDr, string code) { try { string dirCode = ""; string dirName = ""; string approvalNO = ""; string DosageForm = ""; string Specifications = ""; string manufacturers = ""; Sunny.UI.UIDataGridView dgv; Sunny.UI.UIPagination pg; if (tabControl1.SelectedIndex == 0) { dirCode = tbDirectoryCode.Text; dirName = tbDircetoryName.Text; approvalNO = ""; dgv = dgvDirectoy; pg = pgDownload; } else { dirName = tbCenterDirectoryFilter.Text; dirCode = tbInsuCode.Text; dgv = dgvCenterDirectory; approvalNO = tbApprovalNO.Text; pg = pgCenterDirect; manufacturers = tbManufacturer.Text; DosageForm = tbDosageForm.Text; Specifications = tbSpecifications.Text; } JObject joInput = new JObject { { "currentPage" , currentPage }, { "pageSize" , pageSize }, { "serviceCode" , code }, { "directoryType" , directoryType }, { "directoryCode" , dirCode }, { "directoryName" , dirName }, { "approvalNO" , approvalNO }, { "dosageForm" , DosageForm }, { "specifications" , Specifications }, { "manufacturers" , manufacturers }, { "directoryDr" , interfaceDr } }; JObject joRtn = mIS.getMIDirectoryByPagination(joInput); if (joRtn["errorCode"].ToString() != "0") { MessageBox.Show("IRIS数据返回错误:" + joRtn["errorMessage"].ToString()); return; } if (joRtn["result"]["rows"] == null) { MessageBox.Show("该节点不存在"); return; } if (joRtn["result"]["total"].ToString() == "0") { MessageBox.Show("未查询到数据"); dgv.DataSource = null; return; } DataTable dt = (DataTable)joRtn["result"]["rows"].ToObject(typeof(DataTable)); int totalCount = int.Parse(joRtn["result"]["total"].ToString()); pg.TotalCount = totalCount; pg.PageSize = pageSize; dgv.DataSource = dt; dgv.Columns[0].ReadOnly = true; } catch (Exception ex) { MessageBox.Show("查询异常:" + ex.Message); } } private void setHeaderTxt(int directoryType, Sunny.UI.UIDataGridView dgv) { GridViewSetter gvdSetter = new GridViewSetter(); switch (directoryType) { case 0://药品 { gvdSetter.SetHeaderTextOfDrug(dgv); break; } case 1://诊疗 { gvdSetter.SetHeaderTextOfMedicalService(dgv); break; } case 2://材料 { gvdSetter.SetHeaderTextOfMaterials(dgv); break; } case 3://疾病诊断 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; } case 4://手术 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; } case 5://慢性病 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; } case 6://DRGs { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; ; } case 7://日间手术 { gvdSetter.SetHeaderTextOfDiagnose(dgv); break; ; } case 8://字典表 { gvdSetter.SetHeaderTextOfDictionary(dgv); break; } case 9://中药饮片下载 { gvdSetter.SetHeaderTextOfChineseMedicine(dgv); break; } case 10://医药机构制剂目录下载 { gvdSetter.SetHeaderTextOfPreparation(dgv); break; } case 11://肿瘤形态学下载 { gvdSetter.SetHeaderTextOfTumorMorphology(dgv); break; } case 12: { //中医疾病下载 gvdSetter.GetChineseDiagnoseJsonByTxt(dgv); // ICPC3 //gvdSetter.SetICPCAdmReasonHeader(dgv); break; } case 13: { //中医证候下载 gvdSetter.GetTCMSyndromeJsonByTxt(dgv); // ICPC3 //gvdSetter.SetICPCTreatmentHeader(dgv); break; } case 14://民族药品 { gvdSetter.GetEthnicMedicineJsonByTxt(dgv); break; } case 15://目录信息查询 { gvdSetter.GetMedInsuCatalogJsonByTxt(dgv); break; } case 16://医疗与医保目录匹配关系查询 { gvdSetter.GetMedInsuCorrespondencJsonByTxt(dgv); break; } case 17://医药机构目录匹配查询 { gvdSetter.GetMedInstCorrespondencJsonByTxt(dgv); break; } case 18://医保目录限价查询 { gvdSetter.GetMedInsuFixedPriceJsonByTxt(dgv); break; } case 19://医保目录先自付比例下载 { gvdSetter.GetMedInsuFirstPayProportionJsonByTxt(dgv); break; } case 20://医药机构信息 { gvdSetter.GetMedicalInstitutionJsonByTxt(dgv); break; } } gvdSetter.DatagridviewColumnWidthAdaptation(dgv); } private void queryHISInsuDirectory(int directoryType, int pageIndex, int count, Sunny.UI.UIDataGridView dgv, int interfaceDr) { string code = "09010042"; if (tabControl1.SelectedIndex == 0) { if (rbgDirecType.SelectedIndex == 20) { code = "090100XX"; } else if (rbgDirecType.SelectedIndex == 8) { code = "09010043"; } else { code = "09010042"; } if (rbgDirecType.SelectedIndex <= 13) { queryInsuDirectory(pageIndex, count, directoryType + 1, interfaceDr, code); setHeaderTxt(directoryType, dgv); } else //几个医保查询该部分数据不存数据库只是临时查询(除医疗机构信息查询外) { //生成DataView列 //setHeaderTxt(directoryType, dgv); string pages, recordCounts, errorMessage, sOutpar; dynamic joData = GetInput(rbgDirecType.SelectedIndex, out TradeEnum trade); JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade, joData); if (joRtn["infcode"].ToString() == "0") { try { Sunny.UI.UIPagination pg; dgv = dgvDirectoy; pg = pgDownload; DataTable dt; if (rbgDirecType.SelectedIndex == 20) { dt = (DataTable)joRtn["output"]["medinsinfo"].ToObject(typeof(DataTable)); if (joRtn["output"]["medinsinfo"].ToString() == "") { MessageBox.Show("查询成功,但返回结果集为空!"); //return; } pg.TotalCount = 50; pg.PageSize = 50; } else { pages = joRtn["output"]["pages"].ToString(); //页数 recordCounts = joRtn["output"]["recordCounts"].ToString(); //总记录条数 dt = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable)); if (recordCounts == "0") { MessageBox.Show("查询成功,但返回结果集为空!"); //return; } pg.TotalCount = int.Parse(recordCounts); pg.PageSize = int.Parse(TexBYSJL.Text); //int.Parse(pages); } dgv.DataSource = dt; dgv.Columns[0].ReadOnly = true; } catch (Exception ex) { MessageBox.Show("查询异常:" + ex.Message); } } else { errorMessage = "调用交易" + trade.GetCode() + "出现错误,请查看日志!"; //joImportRtn["errorMessage"].ToString(); MessageBox.Show(errorMessage); return; } } } else { queryInsuDirectory(pageIndex, count, directoryType + 1, interfaceDr, code); setHeaderTxt(directoryType, dgv); } GridViewSetter gridSetter = new GridViewSetter(); gridSetter.DatagridviewColumnWidthAdaptation(dgvCenterDirectory); } private int queryHISDirectory(int currentPage, int pageSize, out string errMsg) { errMsg = ""; string directoryType = string.Empty; switch (rbgDirecType_C.SelectedIndex) { case 0: { directoryType = "drugs"; break; } case 1: { directoryType = "diagnosi"; break; } case 2: { directoryType = "consumables"; break; } } JObject joHISRtn = new JObject(); JObject joRtn = new JObject(); InvokeHelper invoker = new InvokeHelper(); string flag = ""; //全部是先调HIS,然后再匹配医保平台的对照关系 if (rbAll.Checked) { JArray jaPagination = new JArray(); JArray jaParams = new JArray(); flag = "All"; dynamic joParam = new JObject(); joParam.code = ""; joParam.descripts = ""; joParam.FindType = new JArray(); joParam.TypeID = ""; joParam.alias = tbHISDirectoryFilter.Text; joParam.include = "Hosp"; joParam.groupID = "324"; joParam.hospID = Global.inf.hisHospitalDr; joParam.interfaceDr = Global.inf.interfaceDr; joParam.type = directoryType; joParam.flag = flag; joParam.specInput = txtSpecFilter.Text.Trim(); jaParams.Add(joParam); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; //joPagination.pageSize = 2; joPagination.currentPage = currentPage; joPagination.sortColumn = "Code"; joPagination.sortOrder = "asc"; jaPagination.Add(joPagination); //该服务需要改写,需要跟(CloudMedicalInsurancePlatform.Tables.MapRelation)进行关联 //joInParams.code = "09010038"; if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0) { return -1; } joRtn = mIS.ConvertHISDir(joHISRtn); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } } //已对照是先调云医保,然后再匹配HIS if (rbMaped.Checked) { JArray jaPagination = new JArray(); JArray jaParams = new JArray(); flag = "Maped"; dynamic joParam = new JObject(); joParam.alias = tbHISDirectoryFilter.Text; joParam.HospitalDr = Global.inf.hospitalDr; joParam.InterfaceDr = Global.inf.interfaceDr; joParam.hisType = directoryType; jaParams.Add(joParam); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; joPagination.currentPage = currentPage; joPagination.sortColumn = "HisCode"; joPagination.sortOrder = "asc"; jaPagination.Add(joPagination); JObject joMIRtn = mIS.GetMappedHISDir(jaPagination, jaParams); if (JsonHelper.parseIrisRtnValue(joMIRtn, out errMsg) != 0) { return -1; } //传给HIS,进行匹配 joParam = new JObject(); joParam.TotalCount = joMIRtn["result"]["TotalCount"]; joParam.type = directoryType; joParam.flag = flag; joParam.hospID = Global.inf.hisHospitalDr; joParam.interfaceDr = Global.inf.interfaceDr; joParam.alias = tbHISDirectoryFilter.Text; joParam.include = "Hosp"; joParam.groupID = "324"; joParam.compareArr = joMIRtn["result"]["Data"]; jaParams = new JArray(); jaParams.Add(joParam); if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0) { return -1; } } //if (rbNoMaped.Checked) { flag = "NoMaped"; } if (rbNoMaped.Checked) { JArray jaPagination = new JArray(); JArray jaParams = new JArray(); flag = "All"; dynamic joParam = new JObject(); joParam.code = ""; joParam.descripts = ""; joParam.FindType = new JArray(); joParam.TypeID = ""; joParam.alias = tbHISDirectoryFilter.Text; joParam.include = "Hosp"; joParam.groupID = "324"; joParam.hospID = Global.inf.hisHospitalDr; joParam.interfaceDr = Global.inf.interfaceDr; joParam.type = directoryType; joParam.flag = flag; joParam.specInput = ""; jaParams.Add(joParam); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; //joPagination.pageSize = 2; joPagination.currentPage = currentPage; joPagination.sortColumn = "Code"; joPagination.sortOrder = "asc"; jaPagination.Add(joPagination); //1.获取全部HIS目录 if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0) { return -1; } joRtn = mIS.GetNoMappHISDir(joHISRtn); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } } DataTable dt = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable)); dtExport = dt; int totalCount = int.Parse(joRtn["result"]["TotalCount"].ToString()); pgHISDirect.TotalCount = totalCount; //if (rbNoMaped.Checked) // pgHISDirect.PageSize = pageSize; //else // pgHISDirect.PageSize = 50; pgHISDirect.PageSize = pageSize; dgvHISDirectory.DataSource = null; dgvHISDirectory.DataSource = dt; dgvHISDirectory.Columns[0].ReadOnly = true; GridViewSetter gridSetter = new GridViewSetter(); gridSetter.SetHeaderTextOfMapping_HisDirectory(dgvHISDirectory); gridSetter.DatagridviewColumnWidthAdaptation(dgvHISDirectory); return 0; } private void queryCenterDirectory_09010012(int currentPage, int pageSize) { string directoryType = string.Empty; switch (rbgDirecType_C.SelectedIndex) { case 0: { directoryType = "drugs"; break; } case 1: { directoryType = "diagnosi"; break; } case 2: { directoryType = "consumables"; break; } } dynamic joInParams = new JObject(); joInParams.pagination = new JArray() as dynamic; joInParams.session = new JArray() as dynamic; JArray jaParams = new JArray(); dynamic joParams = new JObject(); joParams.code = ""; joParams.descripts = ""; joParams.FindType = new JArray(); joParams.TypeID = ""; joParams.alias = ""; joParams.include = "Hosp"; joParams.groupID = "324"; joParams.hospID = "25"; joParams.type = directoryType; joParams.specInput = ""; jaParams.Add(joParams); joInParams.Add("params", JArray.FromObject(jaParams)); dynamic joSession = new JObject(); joSession.userID = ""; joSession.locID = ""; joSession.groupID = ""; joSession.hospID = ""; joSession.sessionID = ""; joSession.hospCode = ""; joSession.language = ""; joSession.hostName = ""; joSession.ipv4 = ""; joSession.ipv6 = ""; joSession.mac = ""; joInParams.session.Add(joSession); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; joPagination.currentPage = currentPage; joPagination.sortColumn = "Code"; joPagination.sortOrder = "asc"; joInParams.pagination.Add(joPagination); joInParams.code = "09010012"; string sInput = joInParams.ToString(); string sRtn = invoker.invokeInsuService(joInParams, ""); JObject jsonRtn = JObject.Parse(sRtn); if (jsonRtn["result"]["Data"] == null) { MessageBox.Show("该节点不存在"); return; } JObject joRtn = JObject.Parse(sRtn); DataTable dt = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable)); int totalCount = int.Parse(joRtn["result"]["TotalCount"].ToString()); pgCenterDirect.TotalCount = totalCount; pgCenterDirect.PageSize = 50; dgvCenterDirectory.DataSource = dt; } private void Mapping() { int iHis = dgvHISDirectory.CurrentRow.Index; if (dgvCenterDirectory.CurrentRow == null) { MessageBox.Show("请查询中心目录"); return; } int iCenter = dgvCenterDirectory.CurrentRow.Index; DataTable dtHis = (DataTable)dgvHISDirectory.DataSource; DataTable dtCenter = (DataTable)dgvCenterDirectory.DataSource; dgvHISDirectory.Rows[iHis].Cells["insuCode"].Value = dgvCenterDirectory.Rows[iCenter].Cells["Code"].Value.ToString(); dgvHISDirectory.Rows[iHis].Cells["insuName"].Value = dgvCenterDirectory.Rows[iCenter].Cells["Name"].Value.ToString(); int hisType = rbgDirecType_C.SelectedIndex + 1; string hisTypeName = rbgDirecType_C.Items[hisType - 1].ToString(); ; JArray jaParams = new JArray(); dynamic jsonTemp = new JObject(); jsonTemp.ID = dtHis.Rows[iHis]["MapID"]; jsonTemp.HospitalDr = Global.inf.hospitalDr; jsonTemp.updateUserID = Global.user.ID; jsonTemp.InterfaceDr = Global.inf.interfaceDr; jsonTemp.HISCode = dgvHISDirectory.Rows[iHis].Cells["itemCode"].Value; jsonTemp.HISName = dgvHISDirectory.Rows[iHis].Cells["itemDesc"].Value; jsonTemp.ChargeItemDr = dtHis.Rows[iHis]["ID"]; jsonTemp.DiretoryDr = dtCenter.Rows[iCenter]["medInsuDirectoryID"]; //1.已对照 2.已对照但未上传 3 已对照且已上传 jsonTemp.State = 1; jsonTemp.HisType = hisType; jsonTemp.HisTypeName = hisTypeName; jsonTemp.InsuCode = dgvCenterDirectory.Rows[dgvCenterDirectory.CurrentRow.Index].Cells["Code"].Value; jsonTemp.InsuName = dgvCenterDirectory.Rows[dgvCenterDirectory.CurrentRow.Index].Cells["Name"].Value; jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); jaParams.Add(jsonTemp); JObject joIn = new JObject(); joIn.Add(new JProperty("params", jaParams)); joIn.Add("code", "09010040"); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "插入对照信息"); //JObject joRtn = JObject.Parse(irisRtn); if ((int)joRtn["errorCode"] == 0) { dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "已对照"; } else { dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "对照失败"; } } private void CancleMapping() { int iHis = dgvHISDirectory.CurrentRow.Index; DataTable dtHis = (DataTable)dgvHISDirectory.DataSource; JArray jaParams = new JArray(); dynamic jsonTemp = new JObject(); jsonTemp.ID = dtHis.Rows[iHis]["MapID"]; jsonTemp.HospitalDr = Global.inf.hospitalDr; jsonTemp.updateUserID = Global.user.ID; jsonTemp.InterfaceDr = Global.inf.interfaceDr; jsonTemp.HISCode = dgvHISDirectory.Rows[iHis].Cells["itemCode"].Value; jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); jaParams.Add(jsonTemp); JObject joIn = new JObject(); joIn.Add(new JProperty("params", jaParams)); joIn.Add("code", "09010041"); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "取消对照"); if ((int)joRtn["errorCode"] == 0) { dgvHISDirectory.Rows[iHis].Cells["insuCode"].Value = ""; dgvHISDirectory.Rows[iHis].Cells["insuName"].Value = ""; dgvHISDirectory.Rows[iHis].Cells["flag"].Value = ""; } else { dgvHISDirectory.Rows[iHis].Cells["flag"].Value = "取消失败"; } } public void loadTextDebug() { DataImoport bus = new DataImoport(); string txtPath = @"E:\insu\Demo\bin\Debug\20230101535395327567680436.txt"; JObject joImportRtn = bus.importDataToIrisByTxt(txtPath, 50, 2, uiProcessBar1); } /// /// 医保目录单个版本号的下载 /// /// /// /// /// /// public int downloadDicionary(JObject joData, Sunny.UI.UIProcessBar uiProcessBar, string dictCode,out string errorMessage) { errorMessage = ""; int iResult = -1; try { JObject joRtn = cBus.DownDictionay(joData); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) == 0) { DataImoport DI = new DataImoport(); JArray jaList = JArray.Parse(JsonHelper.getDestValue(joRtn, "output.list")); JObject joImportRtn = DI.importDictionary(uiProcessBar, jaList, dictCode); if (JsonHelper.parseIrisRtnValue(joImportRtn, out errorMessage) == 0) { iResult = 0; } else { errorMessage = "导入数据出现错误,请查看日志!" + errorMessage; } } return iResult; } catch (Exception ex) { errorMessage = "downloadDicionary提示:" + ex.Message; return -1; } } #endregion private void Form1_Load(object sender, EventArgs e) { this.WindowState = FormWindowState.Maximized; rbgDirecType.ValueChanged += new Sunny.UI.UIRadioButtonGroup.OnValueChanged(rbgDirecType_ValueChanged); LabExplain.Visible = false; } private void btnDownload_Click(object sender, EventArgs e) { string errorMessage = string.Empty; string ver = tbVer.Text; JObject input = new JObject(); input["ver"] = ver; // 目录查询 switch(rbgDirecType.SelectedIndex) { case 15: break; case 8: //字典 { if (tbDicDate.Text == "") { MessageBox.Show("请输入查询日期!"); return; } // 支持批量 string[] dictText = tbDicType.Text.Trim().Split(",".ToCharArray()); dictText.ToList().ForEach((dict) => { this.downloadDict(dict); }); break; } //case 12: // { // downloadMedData(TradeEnum.ICPC3AdmReason, ver, uiProcessBar1); // break; // } //case 13: // { // downloadMedData(TradeEnum.ICPC3Treatment, ver, uiProcessBar1); // break; // } default: { MedDirDownloadProcess mp = new MedDirDownloadProcess(); if (rbSingleDown.Checked) { if (mp.SingleDownload(ver, rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0) { MessageBox.Show("医保目录下载失败:" + errorMessage); return; } } if (rbAutoDown.Checked) { mp.VerChangeEvent += Mp_VerChangeEvent; if (mp.AutoDownload(rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0) { MessageBox.Show("医保目录下载失败:" + errorMessage); return; } } break; } } btnQuery_Click(sender, e); } private void Mp_VerChangeEvent(object sender, string ver) { tbVer.Text = ver; } private void downloadDict(string dictCode) { try { string errorMessage = ""; dynamic joData = new JObject(); joData.type = dictCode; //字典类型 joData.parentValue = ""; //父字典键值 joData.admdvs = Global.inf.areaCode; //行政区划 就医地 joData.date = tbDicDate.Text; //查询日期 joData.vali_flag = "1"; //有效标志 if (downloadDicionary(joData, uiProcessBar1,dictCode, out errorMessage) != 0) { MessageBox.Show("医保字典下载失败:" + errorMessage); } } catch (Exception e) { } } private int downloadMedData(TradeEnum trade,string version,Sunny.UI.UIProcessBar uiProcessBar) { string errorMessage = ""; if (rbAutoDown.Checked) { JObject joMaxVerNO = mIS.getDirectoryMaxVersionNO(rbgDirecType.SelectedIndex); string ver = joMaxVerNO["result"]["MaxVersionNO"].ToString(); if (!string.IsNullOrEmpty(ver)) { version = ver; tbVer.Text = ver; } } JObject joRtn = cBus.DownDirecotry(trade, version); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) == 0) { //解析 DataImoport DI = new DataImoport(); JObject joImportRtn = DI.importMedDataToIris(trade,joRtn,uiProcessBar); if (JsonHelper.parseIrisRtnValue(joImportRtn, out errorMessage) == 0) { //递归调用 if (rbAutoDown.Checked) { downloadMedData(trade, version, uiProcessBar); } } return 0; } MessageBox.Show(errorMessage); return -1; } private void btnQuery_Click(object sender, EventArgs e) { #region 校验查询条件 if ((rbgDirecType.SelectedIndex < 0) || (rbgDirecType.SelectedIndex > 20)) { MessageBox.Show("请先选择查询类型!"); return; } if (rbgDirecType.SelectedIndex > 13) { if (rbgDirecType.SelectedIndex != 20) { if ((TexDate.Text == "") || (TexDate.Text == "输入日期 2021-01-01")) { MessageBox.Show("查询条件-请输入查询日期!"); return; } if ((TexDQYS.Text == "") || (TexDQYS.Text == "当前页数")) { MessageBox.Show("查询条件-请输入当前页数!"); return; } if ((TexBYSJL.Text == "") || (TexBYSJL.Text == "本页数据量")) { MessageBox.Show("查询条件-请输入本页数据量!"); return; } } else { if ((TexYYMC.Text == "") || (TexYYMC.Text == "输入医院名称模糊查找")) { MessageBox.Show("查询条件-请输入医院名称模糊查找!"); return; } } } #endregion queryHISInsuDirectory(rbgDirecType.SelectedIndex, 1, 20, dgvDirectoy, Global.inf.interfaceDr); } private void btnQueryHISDirectory_Click(object sender, EventArgs e) { this.dgvHISDirectory.SelectionChanged -= this.dgvHISDirectory_SelectionChanged; int iCount = 50; if (rbNoMaped.Checked) { iCount = 300; } string errMsg; if (queryHISDirectory(1, iCount, out errMsg) != 0) { MessageBox.Show(errMsg); return; } this.dgvHISDirectory.SelectionChanged += this.dgvHISDirectory_SelectionChanged; } private void btnQueryCenterDirectory_Click(object sender, EventArgs e) { if ((tbCenterDirectoryFilter.Text == "") && (tbInsuCode.Text == "") && (tbApprovalNO.Text == "") && (tbManufacturer.Text == "") && (tbSpecifications.Text == "") && (tbDosageForm.Text == "")) { return; } //查询区域通用目录 JObject joRtn = mIS.getInterface_TY(Global.inf.interfaceDr.ToString(),""); string InsuCurrencyCataLogue = JsonHelper.getDestValue(joRtn, "InsuCurrencyCataLogue"); //通用目录编码 6 string InterfaceName_TY = JsonHelper.getDestValue(joRtn, "InterfaceName_TY"); //通用目录名称 string HospName_TY = JsonHelper.getDestValue(joRtn, "HospitalName"); //目录名称 string HospitalDr_TY = JsonHelper.getDestValue(joRtn, "HospitalDr_TY"); //区域通用目录医院ID if (InsuCurrencyCataLogue != "") { queryHISInsuDirectory(rbgDirecType_C.SelectedIndex, 1, 50, dgvCenterDirectory, int.Parse(InsuCurrencyCataLogue)); LabExplain.Visible = true; LabExplain.Text = "当前接口已设置区域通用目录,数据源:" + HospName_TY + " ,如果确认没有所查目录请联系数据源医院新增维护!"; } else { queryHISInsuDirectory(rbgDirecType_C.SelectedIndex, 1, 50, dgvCenterDirectory, Global.inf.interfaceDr); LabExplain.Visible = true; LabExplain.Text = "当前接口未设置区域通用目录,数据源:" + HospName_TY; } } private void pgDownload_PageChanged(object sender, object pagingSource, int pageIndex, int count) { queryHISInsuDirectory(rbgDirecType.SelectedIndex, pageIndex, count, dgvDirectoy, Global.inf.interfaceDr); } private void pgHISDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count) { string errMsg; int iCount = 50; if (rbNoMaped.Checked) iCount = 300; if (queryHISDirectory(pageIndex, iCount, out errMsg) != 0) { MessageBox.Show(errMsg); return; } } private void pgCenterDirect_PageChanged(object sender, object pagingSource, int pageIndex, int count) { queryHISInsuDirectory(rbgDirecType_C.SelectedIndex, pageIndex, count, dgvCenterDirectory, Global.inf.interfaceDr); } private void rbgDirecType_ValueChanged(object sender, int index, string text) { //选定项不同调用的接口也不相同,Index值大于 if (rbgDirecType.SelectedIndex > 13) { uiGroupBox1.Visible = false; uiGroupBox5.Visible = false; uiGroupBox2.Visible = true; //uiGroupBox3.Visible = true; uiProcessBar1.Visible = false; uiGroupBox2.Left = rbgDirecType.Width + rbgDirecType.Left + 5; uiGroupBox3.Left = uiGroupBox2.Width+rbgDirecType.Width + rbgDirecType.Left + 10; dgvDirectoy.DataSource = null; } else { uiGroupBox1.Visible = true; uiGroupBox5.Visible = true; uiGroupBox2.Visible = true; //uiGroupBox3.Visible = false; uiProcessBar1.Visible = true; uiGroupBox1.Left = rbgDirecType.Width + rbgDirecType.Left + 5; uiGroupBox5.Left = uiGroupBox1.Width + rbgDirecType.Width + rbgDirecType.Left + 10; uiGroupBox2.Left = uiGroupBox5.Width + uiGroupBox1.Width + rbgDirecType.Width + rbgDirecType.Left + 15; uiGroupBox3.Left = uiGroupBox2.Width + uiGroupBox5.Width + uiGroupBox1.Width + rbgDirecType.Width + rbgDirecType.Left + 20; uiProcessBar1.Left = rbgDirecType.Width + rbgDirecType.Left + 5; uiProcessBar1.Width = uiGroupBox1.Width + uiGroupBox5.Width + uiGroupBox2.Width + 10; } setHeaderTxt(rbgDirecType.SelectedIndex, dgvDirectoy); } private void toolStripMenuItem2_Click(object sender, EventArgs e) { CancleMapping(); } private void tsmiMapping_Click(object sender, EventArgs e) { Mapping(); } private void dgvHISDirectory_DoubleClick(object sender, EventArgs e) { int currentPage = pgHISDirect.ActivePage; string flag = dgvHISDirectory.Rows[dgvHISDirectory.CurrentRow.Index].Cells["flag"].Value.ToString(); if (flag == "未对照") { Mapping(); } else if (flag == "已对照") { CancleMapping(); } if (rbAll.Checked) { string errMsg; if (queryHISDirectory(1, 50, out errMsg) != 0) { MessageBox.Show(errMsg); return; } } } private void dgvDirectoy_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { } private void dgvDirectoy_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void uiRadioButton1_CheckedChanged(object sender, EventArgs e) { } private void dgvDirectoy_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { //自动编号,与数据无关 Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgvDirectoy.RowHeadersWidth - 4, e.RowBounds.Height); TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dgvDirectoy.RowHeadersDefaultCellStyle.Font, rectangle, dgvDirectoy.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); } private void rbAll_ValueChanged(object sender, bool value) { //if (rbAll.Checked) //{ // btnQueryHISDirectory_Click(null, new EventArgs()); //} } private void rbMaped_CheckedChanged(object sender, EventArgs e) { //if (rbMaped.Checked) //{ // string errMsg; // if (queryHISDirectory(1, 50, out errMsg) != 0) // { // MessageBox.Show(errMsg); // return; // } //} } private void btAddDir_Click(object sender, EventArgs e) { if (rbgDirecType.SelectedIndex == 8) { string errMsg = ""; AddSingleDictionary addDictionary = new AddSingleDictionary(); if (addDictionary.ShowDialog() == DialogResult.OK) { if (UpdateDictionaryBySelf(addDictionary, out errMsg) != 0) { MessageBox.Show(errMsg); } else { MessageBox.Show("新增成功!"); } } } else { AddSingleDirectory addDirectory = new AddSingleDirectory(rbgDirecType.SelectedIndex); if (addDirectory.ShowDialog() == DialogResult.OK) { JObject joRtn = mIS.UpdateDirectoryBySelf(addDirectory.joPamam); string error = ""; if (JsonHelper.parseIrisRtnValue(joRtn, out error) != 0) { MessageBox.Show("新增失败:" + error); } else { MessageBox.Show("新增成功"); } } } } private void btEditDir_Click(object sender, EventArgs e) { DataTable dt = (DataTable)dgvDirectoy.DataSource; if ((dt == null) || (dt.Rows.Count < 1)) { MessageBox.Show("表中无数据,请检查!"); return; } DataRow dr = dt.Rows[dgvDirectoy.CurrentRow.Index]; AddSingleDirectory addDirectory = new AddSingleDirectory(rbgDirecType.SelectedIndex, dr); if (addDirectory.ShowDialog() == DialogResult.OK) { JObject joRtn = mIS.UpdateDirectoryBySelf(addDirectory.joPamam); string error = ""; if (JsonHelper.parseIrisRtnValue(joRtn, out error) != 0) { MessageBox.Show("修改失败:" + error); } else { MessageBox.Show("修改成功"); } } } private void btnExit_Click(object sender, EventArgs e) { Close(); } /// /// 几个医保查询的交易组织入参 /// /// /// /// private JObject GetInput(int Index, out TradeEnum trade) { trade = TradeEnum.MedicalServiceDirectory; dynamic joData = new JObject(); switch (Index) { case 14://民族药品目 { trade = TradeEnum.NationalityDrug; joData.med_list_codg = tbDirectoryCode.Text; //医疗目录编码 joData.genname_codg = ""; //通用名编号 joData.drug_genname = ""; //药品通用名 joData.drug_prodname = tbDircetoryName.Text; //药品商品名 joData.reg_name = ""; //注册名称 joData.tcmherb_name = ""; //中草药名称 joData.mlms_name = ""; //药材名称 joData.vali_flag = ""; //有效标志 joData.rid = ""; //唯一记录号 joData.ver = ""; //版本号 joData.ver_name = ""; //版本名称 joData.opt_begn_time = ""; //经办开始时间 joData.opt_end_time = ""; //经办结束时间 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 15://目录信息查询 { trade = TradeEnum.InsuDirectory; joData.query_date = ""; //查询时间点 joData.hilist_code = tbDirectoryCode.Text; //医保目录编码 joData.insu_admdvs = TextCbd.Text; //参保机构医保区划 joData.begndate = ""; //开始日期 joData.hilist_name = tbDircetoryName.Text; //医保目录名称 joData.wubi = ""; //五笔助记码 joData.pinyin = ""; //拼音助记码 joData.med_chrgitm_type = ""; //医疗收费项目类别 joData.chrgitm_lv = ""; //收费项目等级 joData.lmt_used_flag = ""; //限制使用标志 joData.list_type = ""; //目录类别 joData.med_use_flag = ""; //医疗使用标志 joData.matn_used_flag = ""; //生育使用标志 joData.hilist_use_type = ""; //医保目录使用类别 joData.lmt_cpnd_type = ""; //限复方使用类型 joData.vali_flag = ""; //有效标志 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 16://医疗与医保目录匹配 { trade = TradeEnum.MedicalAndInsuDirectory; joData.query_date = ""; //查询时间点 joData.medins_list_codg = ""; //定点医药机构目录编号 joData.hilist_code = tbDirectoryCode.Text; //医保目录编码 joData.list_type = ""; //目录类别 joData.insu_admdvs = TextCbd.Text; //参保机构医保区划 joData.begndate = ""; //开始日期 joData.vali_flag = ""; //有效标志 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 17://医药机构目录匹配 { trade = TradeEnum.MedcineOrgDirectory; joData.query_date = ""; //查询时间点 joData.fixmedins_code = ""; //定点医药机构编号 joData.medins_list_codg = ""; //定点医药机构目录编号 joData.medins_list_name = ""; //定点医药机构目录名称 joData.insu_admdvs = TextCbd.Text; //参保机构医保区划 joData.list_type = ""; //目录类别 joData.med_list_codg = tbDirectoryCode.Text; //医疗目录编码 joData.begndate = ""; //开始日期 joData.vali_flag = ""; //有效标志 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 18://医保目录限价 { trade = TradeEnum.InsuPriceLimitDirectory; joData.query_date = ""; //查询时间点 joData.hilist_code = tbDirectoryCode.Text; //医保目录编码 joData.hilist_lmtpric_type = ""; //医保目录限价类型 joData.overlmt_dspo_way = ""; //医保目录超限处理方式 joData.insu_admdvs = TextCbd.Text; //参保机构医保区划 joData.begndate = ""; //开始日期 joData.enddate = ""; //结束日期 joData.vali_flag = ""; //有效标志 joData.rid = ""; //唯一记录号 joData.tabname = ""; //表名 joData.poolarea_no = ""; //统筹区 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 19://医保目录先自付比例 { trade = TradeEnum.PrepayPercentDirectory; joData.query_date = ""; //查询时间点 joData.hilist_code = tbDirectoryCode.Text; //医保目录编码 joData.selfpay_prop_psn_type = "";//医保目录自付比例人员类别 joData.selfpay_prop_type = ""; //目录自付比例类别 joData.insu_admdvs = TextCbd.Text; //参保机构医保区划 joData.begndate = ""; //开始日期 joData.enddate = ""; //结束日期 joData.vali_flag = ""; //有效标志 joData.rid = ""; //唯一记录号 joData.tabname = ""; //表名 joData.poolarea_no = ""; //统筹区 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 20://医药机构信息 { trade = TradeEnum.MedicalOrgination; joData.fixmedins_type = "1"; //定点医疗服务机构类型 1定点医疗机构,2定点零售药店,3工伤定点康复机构,4辅助器具配置机构,5计划生育服务机构 joData.fixmedins_name = TexYYMC.Text; //定点医药机构名称 joData.fixmedins_code = ""; //定点医药机构编号 break; } } return joData; } private void uiButton1_Click(object sender, EventArgs e) { Close(); } /// /// 单条上传目录对照关系 /// private void SingleUpload() { if ((dgvHISDirectory.CurrentRow == null)) { MessageBox.Show("请查询HIS目录对照关系"); return; } string errorMsg = "", sMLLX = ""; //单条目录对照关系上传 int iHis = dgvHISDirectory.CurrentRow.Index; DataTable dtHis = (DataTable)dgvHISDirectory.DataSource; int hisType = rbgDirecType_C.SelectedIndex + 1; //1药品 2诊疗 3材料 //string hisTypeName = rbgDirecType_C.Items[hisType - 1].ToString(); if (hisType == 1) { sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 } else if (hisType == 2) { sMLLX = "201"; } else if (hisType == 3) { sMLLX = "301"; } string InsuCode = dtHis.Rows[iHis]["InsuCode"].ToString(); string InsuName = dtHis.Rows[iHis]["InsuName"].ToString(); string HisCode = dtHis.Rows[iHis]["itemCode"].ToString(); string HisName = dtHis.Rows[iHis]["itemDesc"].ToString(); string UpdateDate = DateTime.Now.ToString("yyyy-MM-dd"); string MapId = dtHis.Rows[iHis]["MapID"].ToString(); JArray dataArray = new JArray(); //调用3301目录对照上传 JObject joData = new JObject(); joData.Add("fixmedins_hilist_id", HisCode); joData.Add("fixmedins_hilist_name", HisName); joData.Add("list_type", sMLLX); //目录类别 joData.Add("med_list_codg", InsuCode); //医疗目录编码 joData.Add("begndate", "2023-10-01"); //开始日期 joData.Add("enddate", UpdateDate); //结束日期 joData.Add("aprvno", ""); joData.Add("dosform", ""); joData.Add("exct_cont", ""); joData.Add("item_cont", ""); joData.Add("prcunt", ""); joData.Add("spec", ""); joData.Add("pacspec", ""); joData.Add("memo", ""); dataArray.Add(joData); // 单条与多条保持一致 JObject joInput = new JObject(); joInput.Add("data", dataArray); InvokeHelper invoker = new InvokeHelper(); Global.pat.insuplc_admdvs = Global.inf.areaCode; JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastUpload, joInput); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0) { MessageBox.Show("目录对照关系上传失败:" + errorMsg); } else { UpdateUploadStatus(MapId, 3); MessageBox.Show("目录对照关系上传成功!"); } } /// /// 单条撤销目录对照关系上传 /// private void SingleCancelUpload() { if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true)) { MessageBox.Show("请查询HIS目录对照关系"); return; } string errorMsg = "", sMLLX = ""; //撤销目录对照关系 DataTable dtHis = (DataTable)dgvHISDirectory.DataSource; int iHis = dgvHISDirectory.CurrentRow.Index; string InsuCode = dtHis.Rows[iHis]["InsuCode"].ToString(); string HisCode = dtHis.Rows[iHis]["HisCode"].ToString(); string MapId = dtHis.Rows[iHis]["MapID"].ToString(); int hisType = rbgDirecType_C.SelectedIndex + 1; //1药品 2诊疗 3材料 //string hisTypeName = rbgDirecType_C.Items[hisType - 1].ToString(); if (hisType == 1) { sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 } else if (hisType == 2) { sMLLX = "201"; } else if (hisType == 3) { sMLLX = "301"; } //调用3302目录对照撤销 JObject joData = new JObject(); joData.Add("fixmedins_code", Global.inf.hospitalNO); joData.Add("fixmedins_hilist_id", HisCode); joData.Add("list_type", sMLLX); //目录类别 joData.Add("med_list_codg", InsuCode); //医疗目录编码 JObject joInput = new JObject(); joInput.Add("data", joData); InvokeHelper invoker = new InvokeHelper(); Global.pat.insuplc_admdvs = Global.inf.areaCode; JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastCancel, joInput); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0) { MessageBox.Show("目录对照撤销失败:" + errorMsg); } else { UpdateUploadStatus(MapId, 2); MessageBox.Show("目录对照撤销成功!"); } } /// /// 全部上传目录对照关系 /// private void AllUpLoad() { if ((dgvHISDirectory.CurrentRow == null)) { MessageBox.Show("请查询HIS目录对照关系"); return; } string sInputStr = "", sMLLX = "", errorMsg = "", Msg = ""; Boolean bOk = true; JObject InputjoRtn = new JObject(); string UpdateDate = DateTime.Now.ToString("yyyy-MM-dd"); int hisType = rbgDirecType_C.SelectedIndex + 1; //1药品 2诊疗 3材料 if (hisType == 1) { sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 } else if (hisType == 2) { sMLLX = "201"; } else if (hisType == 3) { sMLLX = "301"; } List mapIdList = new List(); DataTable dtHis = (DataTable)dgvHISDirectory.DataSource; JArray dataArray = new JArray(); for (int i = 0; i < dtHis.Rows.Count; i++) { string InsuCode = dtHis.Rows[i]["InsuCode"].ToString(); //医保目录编码 string InsuName = dtHis.Rows[i]["InsuName"].ToString(); //医保目录名称 string HisCode = dtHis.Rows[i]["itemCode"].ToString(); //HIS目录编码 string HisName = dtHis.Rows[i]["itemDesc"].ToString(); //HIS目录名称 mapIdList.Add(dtHis.Rows[i]["MapID"].ToString()); //ID //调用3301目录对照上传 JObject joData = new JObject(); joData.Add("fixmedins_hilist_id", HisCode); joData.Add("fixmedins_hilist_name", HisName); joData.Add("list_type", sMLLX); //目录类别 joData.Add("med_list_codg", InsuCode); //医疗目录编码 joData.Add("begndate", "2023-10-01"); //开始日期 joData.Add("enddate", UpdateDate); //结束日期 joData.Add("aprvno", ""); joData.Add("dosform", ""); joData.Add("exct_cont", ""); joData.Add("item_cont", ""); joData.Add("prcunt", ""); joData.Add("spec", ""); joData.Add("pacspec", ""); joData.Add("memo", ""); dataArray.Add(joData); } JObject joInput = new JObject(); joInput.Add("data", dataArray); Global.pat.insuplc_admdvs = Global.inf.areaCode; InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastUpload, joInput); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0) { bOk = false; Msg = Msg + "<" + joInput.ToString() + ":" + errorMsg + ">"; } if (bOk == false) { MessageBox.Show("全部目录对照关系上传成功,部分上传异常:" + Msg); } else { UpdateUploadStatus(string.Join(",",mapIdList.ToArray()),3); MessageBox.Show("全部目录对照关系上传成功!"); } } private void UpdateUploadStatus(string ids, int state) { if (string.IsNullOrEmpty(ids)) return; dynamic joInput = new JObject(); joInput.HospitalDr = Global.inf.hospitalDr; joInput.InterfaceDr = Global.inf.interfaceDr; joInput.ID = ids; joInput.state = state; JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010103", joInput).ToString(), "更新上传状态"); if (joRtn["errorCode"].Text() != "0") { Global.writeLog("更新状态失败!" + joRtn["errorMessage"].ToString()); } } /// /// 全部撤销目录对照关系上传 /// private void AllCancelUpload() { if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true)) { MessageBox.Show("请查询HIS目录对照关系"); return; } string sMLLX = "", errorMsg = "", Msg = ""; Boolean bOk = true; string UpdateDate = DateTime.Now.ToString("yyyy-MM-dd"); int hisType = rbgDirecType_C.SelectedIndex + 1; //1药品 2诊疗 3材料 if (hisType == 1) { sMLLX = "101"; //101西药中成药 102中药饮片 103自制剂 104民族药 201医疗服务项目 301医用耗材 501长护服务项目 105其他 } else if (hisType == 2) { sMLLX = "201"; } else if (hisType == 3) { sMLLX = "301"; } DataTable dtHis = (DataTable)dgvHISDirectory.DataSource; List mapIdList = new List(); for (int i = 0; i < dtHis.Rows.Count; i++) { string InsuCode = dtHis.Rows[i]["InsuCode"].ToString(); string HisCode = dtHis.Rows[i]["HisCode"].ToString(); mapIdList.Add(dtHis.Rows[i]["MapID"].ToString()); //ID //调用3302目录对照撤销 JObject joData = new JObject(); joData.Add("fixmedins_code", Global.inf.hospitalNO); joData.Add("fixmedins_hilist_id", HisCode); joData.Add("list_type", sMLLX); //目录类别 joData.Add("med_list_codg", InsuCode); //医疗目录编码 JObject joInput = new JObject(); joInput.Add("data", joData); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeCenterService(TradeEnum.DirectoryContrastCancel, joInput); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0) { bOk = false; Msg = Msg + "<" + joInput.ToString()+":" + errorMsg + ">"; } } if (bOk == false) { MessageBox.Show("全部撤销目录对照关系上传成功,部分撤销异常:" + Msg); } else { UpdateUploadStatus(string.Join(",", mapIdList.ToArray()), 2); MessageBox.Show("全部撤销目录对照关系上传成功!"); } } private void ToolStripMenuItem_Upload_Click(object sender, EventArgs e) { SingleUpload(); } private void ToolStripMenuItem_CancelUpload_Click(object sender, EventArgs e) { SingleCancelUpload(); } private void rbgDirecType_C_ValueChanged(object sender, int index, string text) { tbHISDirectoryFilter.Text = ""; uiTextBox1.Text = ""; rbAll.Checked = true; rbMaped.Checked = false; rbNoMaped.Checked = false; tbCenterDirectoryFilter.Text = ""; tbInsuCode.Text = ""; tbApprovalNO.Text = ""; dgvCenterDirectory.DataSource = null; btnQueryHISDirectory_Click(null, new EventArgs()); } private void rbNoMaped_CheckedChanged(object sender, EventArgs e) { //if (rbNoMaped.Checked) //{ // string errMsg; // if (queryHISDirectory(1, 300, out errMsg) != 0) // { // MessageBox.Show(errMsg); // return; // } //} } private void dgvHISDirectory_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) { e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); } private void dgvCenterDirectory_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) { e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); } private void updateLimitPrice() { SelfpayPercentForm selfpay = new SelfpayPercentForm(); selfpay.CenterCode = dgvDirectoy.Rows[dgvDirectoy.SelectedIndex].Cells["Code"].Value + ""; selfpay.ShowDialog(); } private void btSignIn_Click(object sender, EventArgs e) { if (mIS.isSigned(ref Global.curEvt.signno) != true) { JObject joRtn = new JObject(); CallResult callResult = new SignInProcess().Process(joRtn); string error = ""; if (JsonHelper.parseIrisRtnValue(JObject.FromObject(callResult.PureData), out error) != 0) { MessageBox.Show($"签到失败!{error}"); } else { MessageBox.Show("签到成功!"); } } else { MessageBox.Show("今日已签到!"); } } private void tsmiSingleUpdateAuxInfo_Click(object sender, EventArgs e) { string error; int iDir = dgvDirectoy.CurrentRow.Index; if (dgvDirectoy.CurrentRow == null) { MessageBox.Show("请查询中心目录"); return; } JObject jo = new JObject(); jo.Add("code", dgvDirectoy.Rows[iDir].Cells["code"].Value.ToString()); jo.Add("HisType", rbgDirecType.SelectedIndex + 1); if (updateAuxInfo(jo,out error) != 0) { MessageBox.Show(error); } else { MessageBox.Show(error); } } public string getDataRowValue(DataRow dr, string columnName) { if (!dr.Table.Columns.Contains(columnName)) { return ""; } else { return dr[columnName].ToString(); } } //更新目录信息(附属信息) private int updateAuxInfo(JObject jo,out string err) { err = ""; tbDirectoryCode.Text = JsonHelper.getDestValue(jo,"code"); dynamic joData = GetInput(15, out TradeEnum trade); JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade, joData); if (joRtn["infcode"].ToString() == "0") { DataTable dtAuxInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable)); DateTime dtToday = DateTime.Today; string chrgitm_lv = ""; string begndate = ""; string enddate = ""; string list_type = ""; string med_chrgitm_type = ""; int iAdpater = 0; foreach (DataRow dr in dtAuxInfo.Rows) { DateTime dtBegin = getDataRowValue(dr, "begndate") == "" ? Convert.ToDateTime("2000-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "begndate")); DateTime dtEnd = getDataRowValue(dr, "enddate") == "" ? Convert.ToDateTime("2099-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "enddate")); if ((dtBegin < dtToday) && (dtToday < dtEnd)) { iAdpater++; chrgitm_lv = dr["chrgitm_lv"].ToString(); begndate = dr["begndate"].ToString(); enddate = dr["enddate"].ToString(); list_type = dr["list_type"].ToString(); med_chrgitm_type = dr["med_chrgitm_type"].ToString(); } } //有且只能有一条数据符合 if (iAdpater == 1) { JObject joPamam = new JObject(); joPamam.Add("Code", JsonHelper.getDestValue(jo, "code")); joPamam.Add("HisType", JsonHelper.getDestValue(jo, "HisType")); joPamam.Add("StartDate", begndate); joPamam.Add("EndDate", enddate); joPamam.Add("ChargeItemLevel", chrgitm_lv); joPamam.Add("ListType", list_type); joPamam.Add("ChargeItemType", med_chrgitm_type); JObject joUpdateRtn = mIS.UpdateDirectoryBySelf(joPamam); string error = ""; if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out error) != 0) { err = "修改失败:" + error; return -1; } else { err = "修改成功"; return 0; } } else { err = "中心返回符合条数的记录不唯一或者为空,请检查!"; return -1; } } else { err = "查询中心数据出错,请检查!"; return -1; } } //更新目录信息(附属信息) private int updateCellingPrice(JObject jo, out string err) { err = ""; tbDirectoryCode.Text = JsonHelper.getDestValue(jo, "code"); dynamic joData = GetInput(18, out TradeEnum trade); JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade, joData); if (joRtn["infcode"].ToString() == "0") { DataTable dtAuxInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable)); DateTime dtToday = DateTime.Today; string cellingPrice = ""; string begndate = ""; string enddate = ""; int iAdpater = 0; foreach (DataRow dr in dtAuxInfo.Rows) { DateTime dtBegin = getDataRowValue(dr, "begndate") == "" ? Convert.ToDateTime("2000-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "begndate")); DateTime dtEnd = getDataRowValue(dr, "enddate") == "" ? Convert.ToDateTime("2099-01-01 00:00:00") : Convert.ToDateTime(getDataRowValue(dr, "enddate")); if ((dtBegin < dtToday) && (dtToday < dtEnd)) { iAdpater++; cellingPrice = dr["hilist_pric_uplmt_amt"].ToString(); begndate = dr["begndate"].ToString(); enddate = dr["enddate"].ToString(); } } //有且只能有一条数据符合 if (iAdpater == 1) { JObject joPamam = new JObject(); joPamam.Add("Code", JsonHelper.getDestValue(jo, "code")); joPamam.Add("HisType", JsonHelper.getDestValue(jo, "HisType")); joPamam.Add("StartDate", begndate); joPamam.Add("EndDate", enddate); joPamam.Add("CeilingPrice", cellingPrice); JObject joUpdateRtn = mIS.UpdateDirectoryBySelf(joPamam); string error = ""; if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out error) != 0) { err = "修改失败:" + error; return -1; } else { err = "修改成功"; return 0; } } else { err = "中心返回符合条数的记录不唯一或者为空,请检查!"; return -1; } } else { err = "查询中心数据出错,请检查!"; return -1; } } private int updateSelfRatioInfo(JObject jo, out string err) { err = ""; tbDirectoryCode.Text = JsonHelper.getDestValue(jo, "code"); dynamic joData = GetInput(19, out TradeEnum trade); JObject joRtn = cBus.InvokeMedicalInsuranceInquiry(trade, joData); if (joRtn["infcode"].ToString() == "0") { DataTable dtRatioInfo = (DataTable)joRtn["output"]["data"].ToObject(typeof(DataTable)); DateTime dtToday = DateTime.Today; string cellingPrice = ""; string begndate = ""; string enddate = ""; int iAdpater = 0; var dataArray = JArray.FromObject(joRtn["output"]["data"]); DateTime today = DateTime.Today; var groupedResult = dataArray .Where(item => { if (DateTime.TryParse(item["enddate"]?.ToString(), out var endDate)) { return endDate.Date >= today.Date; } return false; }) .GroupBy(item => item["selfpay_prop_psn_type"]?.ToString()); JArray joArray = new JArray(); foreach (var group in groupedResult) { foreach (var item in group) { // 将 JsonNode 转换为 JObject JObject jObj = JObject.Parse(item.ToString()); dynamic joTmp = new JObject(); joTmp.HospitalDr = Global.inf.hospitalDr; joTmp.InterfaceDr = Global.inf.interfaceDr; joTmp.updateUserID = Global.user.ID; joTmp.Code = jObj["hilist_code"]; joTmp.PersonnelType = jObj["selfpay_prop_psn_type"]; joTmp.ProportionType = jObj["selfpay_prop_type"]; joTmp.Proportion = jObj["selfpay_prop"]; joTmp.BeginDate = jObj["begndate"]; joTmp.EndDate = jObj["enddate"]; joTmp.InsuranceAreaCode = jObj["insu_admdvs"]; joTmp.PoolAreaNO = jObj["poolarea_no"]; joTmp.ValidFlag = jObj["vali_flag"]; joTmp.RequiredID = jObj["rid"]; joArray.Add(joTmp); } } string errMsg = ""; InvokeHelper invoker = new InvokeHelper(); joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010085", joArray).ToString(), "设置自费比例"); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { err = errMsg; return -1; } else { err = ("更新成功!"); return 0; } } else { err = "查询中心数据出错,请检查!"; return -1; } } private void tsmiUpdateCellingPrice_Click(object sender, EventArgs e) { string error; int iDir = dgvDirectoy.CurrentRow.Index; if (dgvDirectoy.CurrentRow == null) { MessageBox.Show("请查询中心目录"); return; } JObject jo = new JObject(); jo.Add("code", dgvDirectoy.Rows[iDir].Cells["code"].Value.ToString()); jo.Add("HisType", rbgDirecType.SelectedIndex + 1); if (updateCellingPrice(jo,out error) != 0) { MessageBox.Show(error); } else { MessageBox.Show(error); } } private void btTripMenu_Click(object sender, EventArgs e) { uiContextMenuStrip1.Show(((Sunny.UI.UIButton)sender), new Point(0, btTripMenu.Height)); } private void tsmExportAllMappedData_Click(object sender, EventArgs e) { // 创建 DataLoader 并传递 queryExportData 方法 DataLoader _dataLoader; _dataLoader = new DataLoader(queryExportData_CallBack, this); _dataLoader.Start(new object[] { 0 }, (result, errMsg) => { // 在这里处理结果和错误信息 if (result == 0) { MessageBox.Show(errMsg); } else { MessageBox.Show(errMsg); } }); } private int queryExportData(out string errMsg) { errMsg = ""; int currentPage = 1; int pageSize = 50; string directoryType = string.Empty; switch (rbgDirecType_C.SelectedIndex) { case 0: { directoryType = "drugs"; break; } case 1: { directoryType = "diagnosi"; break; } case 2: { directoryType = "consumables"; break; } } JObject joHISRtn = new JObject(); JObject joRtn = new JObject(); string flag = ""; //全部是先调HIS,然后再匹配医保平台的对照关系 if (rbAll.Checked) { JArray jaPagination = new JArray(); JArray jaParams = new JArray(); flag = "All"; dynamic joParam = new JObject(); joParam.code = ""; joParam.descripts = ""; joParam.FindType = new JArray(); joParam.TypeID = ""; joParam.alias = tbHISDirectoryFilter.Text; joParam.include = "Hosp"; joParam.groupID = "324"; joParam.hospID = Global.inf.hisHospitalDr; joParam.interfaceDr = Global.inf.interfaceDr; joParam.type = directoryType; joParam.flag = flag; joParam.specInput = txtSpecFilter.Text.Trim(); jaParams.Add(joParam); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; //joPagination.pageSize = 2; joPagination.currentPage = currentPage; joPagination.sortColumn = "Code"; joPagination.sortOrder = "asc"; jaPagination.Add(joPagination); //该服务需要改写,需要跟(CloudMedicalInsurancePlatform.Tables.MapRelation)进行关联 //joInParams.code = "09010038"; if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0) { return -1; } int count = int.Parse(JsonHelper.getDestValue(joHISRtn, "result.TotalCount")); if (count > pageSize) { joPagination["pageSize"] = count; jaPagination = new JArray(); jaPagination.Add(joPagination); if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0) { return -1; } } int defaultCount = 200; dtExport = null; if (count > defaultCount) { JArray jaHisDir = JArray.Parse(JsonHelper.getDestValue(joHISRtn, "result.Data")); JArray jaTmp = new JArray(); for (int i = 0; i < count; i++) { JObject joTmp = (JObject)jaHisDir[i]; foreach (var property in joTmp.Properties()) { if (property.Value.Type == JTokenType.Integer || property.Value.Type == JTokenType.Float) { property.Value = new JValue(property.Value.ToString()); } } jaTmp.Add(joTmp); if ((((i + 1) % defaultCount) == 0) || (i + 1 == count)) { JObject joConvert = new JObject(); joConvert.Add("errorCode", 0); joConvert.Add("errorMessage", "查询成功"); JObject joResult = new JObject(); if ((i % defaultCount) == 0) { joResult.Add("TotalCount", defaultCount); } else { joResult.Add("TotalCount", (i + 1) % defaultCount); } joResult.Add("Data", jaTmp); joConvert.Add("result", joResult); joRtn = mIS.ConvertHISDir(joConvert); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } else { DataTable dtTmp = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable)); if (dtExport == null) { dtExport = dtTmp.Clone(); dtExport.Merge(dtTmp); } else { dtExport.Merge(dtTmp); } jaTmp = new JArray(); } } } } else { joRtn = mIS.ConvertHISDir(joHISRtn); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } dtExport = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable)); } } //已对照是先调云医保,然后再匹配HIS if (rbMaped.Checked) { JArray jaPagination = new JArray(); JArray jaParams = new JArray(); flag = "Maped"; dynamic joParam = new JObject(); joParam.alias = tbHISDirectoryFilter.Text; joParam.HospitalDr = Global.inf.hospitalDr; joParam.InterfaceDr = Global.inf.interfaceDr; joParam.hisType = directoryType; jaParams.Add(joParam); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; joPagination.currentPage = currentPage; joPagination.sortColumn = "HisCode"; joPagination.sortOrder = "asc"; jaPagination.Add(joPagination); JObject joMIRtn = mIS.GetMappedHISDir(jaPagination, jaParams); if (JsonHelper.parseIrisRtnValue(joMIRtn, out errMsg) != 0) { return -1; } //传给HIS,进行匹配 joParam = new JObject(); joParam.TotalCount = joMIRtn["result"]["TotalCount"]; joParam.type = directoryType; joParam.flag = flag; joParam.hospID = Global.inf.hisHospitalDr; joParam.interfaceDr = Global.inf.interfaceDr; joParam.alias = tbHISDirectoryFilter.Text; joParam.include = "Hosp"; joParam.groupID = "324"; joParam.compareArr = joMIRtn["result"]["Data"]; jaParams = new JArray(); jaParams.Add(joParam); if (hIS.getHISDir(jaPagination, jaParams, out joRtn, out errMsg) != 0) { return -1; } } //if (rbNoMaped.Checked) { flag = "NoMaped"; } if (rbNoMaped.Checked) { JArray jaPagination = new JArray(); JArray jaParams = new JArray(); flag = "All"; dynamic joParam = new JObject(); joParam.code = ""; joParam.descripts = ""; joParam.FindType = new JArray(); joParam.TypeID = ""; joParam.alias = tbHISDirectoryFilter.Text; joParam.include = "Hosp"; joParam.groupID = "324"; joParam.hospID = Global.inf.hisHospitalDr; joParam.interfaceDr = Global.inf.interfaceDr; joParam.type = directoryType; joParam.flag = flag; joParam.specInput = ""; jaParams.Add(joParam); dynamic joPagination = new JObject(); joPagination.pageSize = pageSize; //joPagination.pageSize = 2; joPagination.currentPage = currentPage; joPagination.sortColumn = "Code"; joPagination.sortOrder = "asc"; jaPagination.Add(joPagination); //1.获取全部HIS目录 if (hIS.getHISDir(jaPagination, jaParams, out joHISRtn, out errMsg) != 0) { return -1; } joRtn = mIS.GetNoMappHISDir(joHISRtn); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } } return 0; } private int queryExportData_CallBack(object[] o,out string errMsg, DataLoader.ProgressCallback callback, DataLoader.ProgressMaxCallback maxCallback, BackgroundWorker worker) { if (queryExportData(out errMsg) != 0) { return -1; } //test.Stop(); this.pgHISDirect.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.pgHISDirect_PageChanged); if (dtExport.Rows.Count > 0) { string directoryType = string.Empty; string sBZ = ""; switch (rbgDirecType_C.SelectedIndex) { case 0: { directoryType = "药品"; break; } case 1: { directoryType = "诊疗"; break; } case 2: { directoryType = "材料"; break; } } if (rbAll.Checked) sBZ = "全部"; else if (rbMaped.Checked) sBZ = "已对照"; else if (rbNoMaped.Checked) sBZ = "未对照"; string LSH = DateTime.Now.ToString("yyyy-MM-dd"); //DateTime.Now.ToString("MMddHHmmssffff"); string filename = LSH + "(" + directoryType + ")医保目录" + sBZ + "信息.xls"; string sFliePathName = Global.curEvt.path + "\\MapRelation\\" + filename; //string sFliePathName = @"D:\" + LSH + "(" + directoryType + ")医保目录" + sBZ + "信息.xls"; //如果不存在目录,则创建目录 if (!Directory.Exists(Global.curEvt.path + "\\MapRelation")) { //创建文件夹 DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\MapRelation"); } //如存在同名文件不询问直接删除 if (File.Exists(sFliePathName)) { File.Delete(sFliePathName); } //新版方法,用的EPPLUS,方便 ExportToExcel.ExportDataTableToExcel(dtExport, sFliePathName); if (true) { errMsg = ($"导出成功,文件保存路径:{sFliePathName}"); return 0; } else { errMsg = ("导出失败!"); return -1; } } else { errMsg = "查询数据集为空!"; return -1; } } private void tsmUploadAllMappedData_Click(object sender, EventArgs e) { AllUpLoad(); } private void tsmCancelAllUploadedData_Click(object sender, EventArgs e) { AllCancelUpload(); } private void tsmUpdateCellPriceOfAllMapped_Click(object sender, EventArgs e) { batchUpdateMappedInsuInfo(updateCellPriceWrapper); } private void tsmUpdateAllMapped_Click(object sender, EventArgs e) { batchUpdateMappedInsuInfo(updateAuxAndCellPriceWrapper); } private void batchUpdateMappedInsuInfo( Func _action) { action = _action; string sqlStr = $"select * from HB_MedInsuMapRelation where Interface_Dr='{Global.inf.interfaceDr}' and Hospital_Dr ='{Global.inf.hospitalDr}'"; JObject joSqlstr = new JObject(); joSqlstr.Add("sqlStr", sqlStr); JObject joRtn = mIS.QueryMappedData(joSqlstr, "查询所有已对照数据"); iTotalCount = int.Parse(joRtn["result"]["total"].ToString()); dtAllMapped = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable)); DataLoader _dataLoader; _dataLoader = new DataLoader(updateMappedInsuInfo,this); _dataLoader.SetProgressBar(ProgressBarStyle.Continuous,"正在更新...",50); _dataLoader.Start(new object[] { iTotalCount }, (result, errMsg) => { // 在这里处理结果和错误信息 if (result == 0) { MessageBox.Show(errMsg); } else { MessageBox.Show(errMsg); } }); } private int updateMappedInsuInfo(object[] o,out string errMsg, DataLoader.ProgressCallback callback, DataLoader.ProgressMaxCallback maxCallback, BackgroundWorker worker) { int iFalse = 0; int iCount = 0; List errList = new List(); if (maxCallback != null) { maxCallback(iTotalCount); } foreach (DataRow dr in dtAllMapped.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 (worker.CancellationPending) { errMsg = "操作取消!"; return -1; // 或者其他表示取消的返回值 } if (callback != null) { callback(iCount); } } if (iFalse != 0) { errMsg = ($"总共{iCount}条数据更新完成,但有{iFalse}条更新发生错误!"); Global.writeLog($"{errMsg}\r\n{errList}"); } else { errMsg = ($"全部数据({iCount}条)更新完成"); } return iFalse; } private int updateAuxAndCellPriceWrapper(JObject jo, OutParamWrapper outParamWrapper) { string err; int iresult = updateAuxAndCellPrice(jo, out err); outParamWrapper.Value = err; return iresult; } private int updateCellPriceWrapper(JObject jo, OutParamWrapper outParamWrapper) { string err; int iresult = updateCellingPrice(jo, out err); outParamWrapper.Value = err; return iresult; } private int updateSelfRatioWrapper(JObject jo, OutParamWrapper outParamWrapper) { string err; int iresult = updateSelfRatioInfo(jo, out err); outParamWrapper.Value = err; return iresult; } private int updateAuxInfoWrapper(JObject jo, OutParamWrapper outParamWrapper) { string err; int iresult = updateAuxInfo(jo, out err); outParamWrapper.Value = err; return iresult; } private int updateAuxAndCellPrice(JObject jo, out string error) { string err =""; int iResult=0; error = ""; if (updateAuxInfo(jo, out err) != 0) { error = $"更新目录信息失败{err}"; iResult--; } err = ""; if (updateCellingPrice(jo, out err) != 0) { error = $"{error};更新限价信息失败{err}"; iResult--; } return iResult; } private void tsmUpdateLevelTypeOfAllMappedData_Click(object sender, EventArgs e) { batchUpdateMappedInsuInfo(updateAuxInfoWrapper); } private void tsmSingleUpdateInsuInfo_Click(object sender, EventArgs e) { if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true)) { MessageBox.Show("请查询HIS目录对照关系,注意选择已对照!"); return; } int iMapped = dgvHISDirectory.CurrentRow.Index; string insuCode = dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString(); if (string.IsNullOrEmpty(insuCode)) { MessageBox.Show("未检测到对应的医保目录,请检查该目录是否已对照!"); return; } JObject jo = new JObject(); jo.Add("code", dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString()); jo.Add("HisType", rbgDirecType_C.SelectedIndex + 1); string error; if (updateAuxAndCellPrice(jo, out error) != 0) { MessageBox.Show($"更新失败{error}"); } else { MessageBox.Show("更新成功!"); } } private void dgvHISDirectory_SelectionChanged(object sender, EventArgs e) { int i = dgvHISDirectory.CurrentRow.Index; if (dgvHISDirectory.Rows[i].Cells["insuCode"].Value.ToString() != "") { tbInsuCode.Text = dgvHISDirectory.Rows[i].Cells["insuCode"].Value.ToString(); tbCenterDirectoryFilter.Text = ""; tbApprovalNO.Text = ""; } else { tbInsuCode.Text = ""; if (rbOnlyName.Checked) { tbInsuCode.Text = ""; tbApprovalNO.Text = ""; tbCenterDirectoryFilter.Text = "%" + dgvHISDirectory.Rows[i].Cells["itemDesc"].Value.ToString() + "%"; } if (rbOnlyApprNO.Checked) { tbCenterDirectoryFilter.Text = ""; tbInsuCode.Text = ""; tbApprovalNO.Text = "%" + dgvHISDirectory.Rows[i].Cells["pprovalNo"].Value.ToString() + "%"; } if (rbBoth.Checked) { tbInsuCode.Text = ""; tbCenterDirectoryFilter.Text = "%" + dgvHISDirectory.Rows[i].Cells["itemDesc"].Value.ToString() + "%"; tbApprovalNO.Text = "%" + dgvHISDirectory.Rows[i].Cells["pprovalNo"].Value.ToString() + "%"; } } } private void tsmSingleUpdateSelfRatioInfo_Click(object sender, EventArgs e) { if ((dgvHISDirectory.CurrentRow == null) || (rbMaped.Checked != true)) { MessageBox.Show("请查询HIS目录对照关系,注意选择已对照!"); return; } int iMapped = dgvHISDirectory.CurrentRow.Index; string insuCode = dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString(); if (string.IsNullOrEmpty(insuCode)) { MessageBox.Show("未检测到对应的医保目录,请检查该目录是否已对照!"); return; } JObject jo = new JObject(); jo.Add("code", dgvHISDirectory.Rows[iMapped].Cells["insuCode"].Value.ToString()); jo.Add("HisType", rbgDirecType_C.SelectedIndex + 1); string error; if (updateSelfRatioInfo(jo, out error) != 0) { MessageBox.Show($"更新失败{error}"); } else { MessageBox.Show("更新成功!"); } } private void tsmUpdateSelfRatioOfAllMapped_Click(object sender, EventArgs e) { batchUpdateMappedInsuInfo(updateSelfRatioWrapper); } public int UpdateDictionaryBySelf(AddSingleDictionary addDic, out string errMsg) { string outParam = "", HBDictionaryDr = ""; JObject joRtn; JObject jo = addDic.joPamam; try { //if (JsonHelper.getDestValue(jo, "operateType") == "0") //{ //插入并获取字典主表的DR JObject joDic = JObject.FromObject(jo["dicObj"]); joRtn = mIS.insertDictionary(joDic); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } else { HBDictionaryDr = JsonHelper.getDestValue(joRtn, "data.HBDictionaryDr"); if (HBDictionaryDr == "") { errMsg = "HBDictionaryDr返回值为空"; return -1; } } //} //else //{ // if (addDic.dr != null) // { // HBDictionaryDr = addDic.dr["hBDictionaryID"].ToString(); // } // else // { // errMsg = "修改状态下未获得字典主表ID!请联系管理员"; // return -1; // } //} //插入明细表 JObject joDicDetail = JObject.FromObject(jo["detailObj"]); joDicDetail.Add("HBDictionaryDr", HBDictionaryDr); JArray jaParams = new JArray(); jaParams.Add(joDicDetail); joRtn = mIS.insertDictionaryDataDetail(jaParams); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } else { return 0; } } catch (Exception ex) { errMsg = ex.Message; return -1; } } private string SelectExcelFile() { //打开窗口选择文件 OpenFileDialog openFileDialog = new OpenFileDialog { InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop), // 设置初始目录 Filter = "Excel files (*.xlsx)|*.xlsx", // 设置文件过滤器 FilterIndex = 1, // 设置默认的文件过滤器索引 RestoreDirectory = true // 对话框关闭前是否恢复原始目录 }; string selectedFilePath = ""; if (openFileDialog.ShowDialog() == DialogResult.OK) { selectedFilePath = openFileDialog.FileName; } return selectedFilePath; } private int ImportMapRelation(object[] o, out string errMsg, DataLoader.ProgressCallback callback, DataLoader.ProgressMaxCallback maxCallback, BackgroundWorker worker) { int iFalse = 0; string err = ""; string excelPath = o[0].ToString(); errMsg = ""; //加载EXCEL using (ExcelPackage package = new ExcelPackage(excelPath)) { ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; int colCount = worksheet.Dimension.End.Column; //get Column Count int rowCount = worksheet.Dimension.End.Row ; //get row count if (maxCallback != null) { maxCallback(rowCount - 1); //去除首行 } //建立索引字典 Dictionary indexDic = new Dictionary(); //通过第一行来确定每列的数据与后台对应关系 for (int col = 1; col <= colCount; col++) { string colHearder = worksheet.Cells[1, col].Value?.ToString().Trim(); switch (colHearder) { case "HIS编码": indexDic.Add("HISCode", col); break; case "HIS名称": indexDic.Add("HISName", col); break; case "目录类型": indexDic.Add("HisType", col); break; case "医保编码": indexDic.Add("InsuCode", col); break; case "医保名称": indexDic.Add("InsuName", col); break; default: break; } } Global.writeLog(JsonConvert.SerializeObject(indexDic)); JArray jaTmp = new JArray(); for (int row = 2; row <= rowCount; row++) { // 检查是否应取消操作 if (worker.CancellationPending) { errMsg = "操作取消!"; return -1; // 或者其他表示取消的返回值 } JObject joTmp = new JObject(); //for (int col = 1; col <= colCount; col++) //{ joTmp.Add("HospitalDr", Global.inf.hospitalDr); //医院编号 joTmp.Add("InterfaceDr", Global.inf.interfaceDr); // 接口编号 - HBMedInsuInterface 类型(假设用字符串表示) //joTmp.Add("ChargeItemDr", worksheet.Cells[row, indexDic["ChargeItemDr"]]?.Value?.ToString().Trim()); // 收费项ID - %Integer joTmp.Add("HISCode", worksheet.Cells[row, indexDic["HISCode"]]?.Value?.ToString().Trim()); // HIS编码 - %String joTmp.Add("HISName", worksheet.Cells[row, indexDic["HISName"]]?.Value?.ToString().Trim()); // HIS名称 - %String //joTmp.Add("DiretoryDr", worksheet.Cells[row, indexDic["Direcotry_Dr"]]?.Value?.ToString().Trim()); // 医保目录Dr - HBMedInsuDirectory(字符串处理) joTmp.Add("HisType", worksheet.Cells[row, indexDic["HisType"]]?.Value?.ToString().Trim()); // 医院目录类型 - %String joTmp.Add("State", "1"); // 状态 - 1.已对照 2.已对照但未上传 3 已对照且已上传 joTmp.Add("UpdateDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // 更新时间 - %DateTime joTmp.Add("InsuCode", worksheet.Cells[row, indexDic["InsuCode"]]?.Value?.ToString().Trim()); // 医保编码 - %String joTmp.Add("InsuName", worksheet.Cells[row, indexDic["InsuName"]]?.Value?.ToString().Trim()); // 医保名称 //} jaTmp.Add(joTmp); if (callback != null) { callback(row - 1); } //每50条传一次 if (((row - 1) % 50 == 0) || ((row + 0) == rowCount)) { JObject joIn = new JObject(); joIn.Add(new JProperty("params", jaTmp)); joIn.Add("code", "09010040"); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "导入对照关系"); // 更新对照关系表返回的数据 if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0) { iFalse++; errMsg = errMsg + "\r\n" + err; } jaTmp = new JArray(); } } } return iFalse ; } private void tsmImportMapRelation_Click(object sender, EventArgs e) { object[] o = new object[] { SelectExcelFile() } ; DataLoader _dataLoader; _dataLoader = new DataLoader(ImportMapRelation, this); _dataLoader.SetProgressBar(ProgressBarStyle.Continuous, "正在导入...", 50); _dataLoader.Start(o,(result, errMsg) => { MessageBox.Show(errMsg); }); } private void tsmImportExcelDir_Click(object sender, EventArgs e) { object[] o = new object[] { SelectExcelFile() }; DataLoader _dataLoader; _dataLoader = new DataLoader(ImportExcelDir, this); _dataLoader.SetProgressBar(ProgressBarStyle.Continuous, "正在导入...", 50); _dataLoader.Start(o, (result, errMsg) => { MessageBox.Show(errMsg); }); } private int ImportExcelDir(object[] o, out string errMsg, DataLoader.ProgressCallback callback, DataLoader.ProgressMaxCallback maxCallback, BackgroundWorker worker) { int iFalse = 0; string err = ""; string excelPath = o[0]?.ToString(); if (string.IsNullOrEmpty(excelPath)) { errMsg = "文件路径无效。"; return -1; } // 定义字段映射:Excel列名 -> JSON字段名 var columnMapping = new Dictionary { //{ "医院编号", "HospitalDr" }, //{ "接口编号", "InterfaceDr" }, { "医保编码", "Code" }, { "医保名称", "Name" }, { "医院目录类型", "HisType" }, { "医院类型名称", "HisTypeName" }, { "医保本地编码", "LocateCode" }, { "医保本地名称", "LocateName" }, { "本位码", "DrugSafetyStandardCode" }, { "剂型编码", "DosageFormCode" }, { "剂型名称", "DosageFormName" }, { "类别编码", "CategoryCode" }, { "类别名称", "CategoryName" }, { "规格", "Specification" }, { "规格代码", "SpecificationCode" }, { "包装单位", "UnitOfPackag" }, { "计价单位", "UnitOfValuation" }, { "开始日期", "StartDate" }, { "结束日期", "EndDate" }, { "拼音助记码", "PinyinSearchCode" }, { "说明", "Instructions" }, { "除外内容", "ExceptContent" }, { "项目内涵", "Connotation" }, { "有效标志", "ValidFlag" }, { "备注", "Note" }, { "批准文号", "ApprovalNO" }, { "版本号", "VersionNO" }, { "版本名称", "VersionName" }, { "使用标志", "UseFlag" }, { "特殊药品标志", "SpecialFlag" }, { "限制标志", "LimitFlag" }, { "限制范围", "LimitRange" }, { "唯一记录号", "UniqueRecordNO" }, { "厂家", "Manufacturers" }, { "国家项目编码", "NationalCode" }, { "国家项目名称", "NationalName" }, { "更新时间", "UpdateTime" }, { "收费项目等级", "ChargeItemLevel" }, { "收费项目等级名称", "ChargeItemLevelName" }, { "自付比例", "SelfPercent" }, { "医疗收费项目类别", "ChargeItemType" }, { "收费标准", "ChargeStandards" }, { "最高限价", "CeilingPrice" }, { "包装材质", "PackagingMaterial" }, { "最小包装数量", "MinPackagingQuantity" }, { "最小制剂单位", "MinDosageUnit" }, { "最小包装单位", "MinPackagingUnit" }, { "累计增负标志", "CumulativeNegativeBurdenFlag" }, { "目录类型", "ListType" }, { "目录支付比例", "DirectoryPayPercent" } }; errMsg = ""; //加载EXCEL using (ExcelPackage package = new ExcelPackage(excelPath)) { var worksheet = package.Workbook.Worksheets[0]; int colCount = worksheet.Dimension?.Columns ?? 0; int rowCount = worksheet.Dimension?.Rows ?? 0; if (rowCount < 2) { errMsg = "Excel 文件中没有有效的数据行。"; return -1; } if (maxCallback != null) maxCallback(rowCount - 1); // 建立索引字典 var indexDic = new Dictionary(); for (int col = 1; col <= colCount; col++) { var header = worksheet.Cells[1, col].Value?.ToString().Trim(); if (columnMapping.TryGetValue(header, out string jsonField)) { indexDic[jsonField] = col; } else { // 可选:记录未识别的列头 Global.writeLog($"未知列头: {header}"); } } Global.writeLog(JsonConvert.SerializeObject(indexDic)); JArray jaTmp = new JArray(); for (int row = 2; row <= rowCount; row++) { Global.writeLog(callback.Target.GetType().Name); // 检查是否应取消操作 if ( worker.CancellationPending) { errMsg = "操作取消!"; return -1; // 或者其他表示取消的返回值 } if (callback != null) callback(row - 1); JObject joTmp = new JObject(); foreach (var pair in indexDic) { string fieldName = pair.Key; int colIndex = pair.Value; var cellValue = worksheet.Cells[row, colIndex]?.Value?.ToString().Trim(); joTmp.Add(fieldName, cellValue ?? string.Empty); } //手动增加医院ID 和接口ID joTmp.Add("HospitalDr", Global.inf.hospitalDr); //医院编号 joTmp.Add("InterfaceDr", Global.inf.interfaceDr); // 接口编号 jaTmp.Add(joTmp); //每50条传一次 if (((row - 1) % 50 == 0) || ((row ) == rowCount)) { JObject joIn = new JObject(); joIn.Add(new JProperty("params", jaTmp)); joIn.Add("code", "09010035"); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "更新医保目录"); // 更新对照关系表返回的数据 if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0) { iFalse++; errMsg = errMsg + "\r\n" + err; } jaTmp = new JArray(); } } } if (iFalse == 0) { errMsg = "全部导入"; } else { errMsg = "导入有错误,请检查日志"; } return iFalse; } private void tsmExportMappedDataByLeft_Click(object sender, EventArgs e) { } } public class OutParamWrapper { public string Value { get; set; } } }