using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Common; using Newtonsoft.Json.Linq; using PTMedicalInsurance.FormSetter; using PTMedicalInsurance.Variables; using FastReport; using Newtonsoft.Json; using System.Threading; using PTMedicalInsurance.Business; namespace PTMedicalInsurance.Forms { public partial class DownLoad : Form { private int hospitalDr; private int interfaceDr; private string hospitalNO; private string interfaceNO; private string hospitalName; private string hospitalAreaCode; public DataTable dtInsuInfo; private bool disposed = false; Thread thread_test; private InvokeHelper invoker = new InvokeHelper(); public DownLoad() { InitializeComponent(); hospitalDr = Global.inf.hospitalDr; hospitalNO = Global.inf.hospitalNO; hospitalName = Global.inf.hospitalName; hospitalAreaCode = Global.inf.areaCode; } public DownLoad(JObject joParam) { InitializeComponent(); int a = int.Parse(cbxInterface_down.SelectedValue.ToString()); queryHISInsuDirectory(rbgDirecType.SelectedIndex, 1, 50, dgvDirectoy, a); } public void Dispose() { Dispose1(true); GC.SuppressFinalize(this); } protected virtual void Dispose1(bool disposing) { if (thread_test == null) return; if (disposed == false) { if (disposing == true) { Thread.Sleep(100); Global.writeLog("Main - aborting my thread."); thread_test.Abort();//终止线程myThread thread_test.Join();//等待线程myThread结束 Global.writeLog("Main - ending."); } // //释放托管资源的代码 } disposed = true; } private void uiButton3_Click(object sender, EventArgs e) { } private void btnExit_Click(object sender, EventArgs e) { Close(); } private void FormDownLoad_Load(object sender, EventArgs e) { try { this.WindowState = FormWindowState.Maximized; ComboxSetter cbxSetter = new ComboxSetter(); //cbxSetter.setCbxInterfaceDataSource(cbxInterface_down); cbxSetter.setCbxInterfaceDataSource(cbxInterface_down); this.cbxInterface_down.SelectedValueChanged += new System.EventHandler(this.cbxInterface_down_SelectedValueChanged); } catch (Exception ex) { MessageBox.Show("异常:" + ex.Message); } } private void btnQuery_Click(object sender, EventArgs e) { if ((rbgDirecType.SelectedIndex < 0) || (rbgDirecType.SelectedIndex > 20)) { MessageBox.Show("请先选择查询类型!"); return; } int a = int.Parse(cbxInterface_down.SelectedValue.ToString()); queryHISInsuDirectory(rbgDirecType.SelectedIndex, 1, 50, dgvDirectoy, a); } private void queryHISInsuDirectory(int directoryType, int pageIndex, int count, Sunny.UI.UIDataGridView dgv, int directoryDr) { string code = ""; if ((rbgDirecType.SelectedIndex <= 13)&& (rbgDirecType.SelectedIndex >0)) { if (rbgDirecType.SelectedIndex == 8) code = "09010043"; else if (rbgDirecType.SelectedIndex == 20) code = "090100XX"; //暂时未定义医疗机构下载Code else code = "09010042"; queryInsuDirectory(pageIndex, count, directoryType + 1, directoryDr, code); setHeaderTxt(directoryType, dgv); } else if ((rbgDirecType.SelectedIndex > 13) && (rbgDirecType.SelectedIndex < 21)) //几个医保查询交易处理 { string funNo = ""; string sOutpar = ""; HisBusiness hisBus = new HisBusiness(); dynamic joData = new JObject(); joData = GetInput(rbgDirecType.SelectedIndex, out funNo); if (hisBus.InsuMedQuery(joData, funNo, out sOutpar) != 0) { MessageBox.Show(sOutpar); return; } //处理调用查询接口医保返回JSON结果和展示 //JObject joOutparam = JObject.Parse(sOutpar); //dtInsuInfo = (DataTable)joOutparam["output"].ToObject(typeof(DataTable)); //dgvDirectoy.DataSource = dtInsuInfo; Sunny.UI.UIPagination pg; pg = pgDownload; JObject jo = (JObject)JsonConvert.DeserializeObject(sOutpar); JObject joOutparam = JObject.Parse(jo.ToString()); DataTable dt; if (rbgDirecType.SelectedIndex == 20) { dt = (DataTable)joOutparam["result"]["body"]["output"]["medinsinfo"].ToObject(typeof(DataTable)); } else { dt = (DataTable)joOutparam["result"]["body"]["output"].ToObject(typeof(DataTable)); } //int totalCount = int.Parse(joOutparam["result"]["TotalCount"].ToString()); //pg.TotalCount = totalCount; pg.TotalCount = int.Parse(TexBYSJL.Text); pg.PageSize = 50; dgv.DataSource = dt; dgv.Columns[0].ReadOnly = true; //生成DataView列 setHeaderTxt(directoryType, dgv); } } private void queryInsuDirectory(int currentPage, int pageSize, int directoryType, int directoryDr, string code) { string dirCode = tbDirectoryCode.Text; string dirName = tbDircetoryName.Text; Sunny.UI.UIDataGridView dgv; Sunny.UI.UIPagination pg; dirCode = tbDirectoryCode.Text; dirName = tbDircetoryName.Text; dgv = dgvDirectoy; pg = pgDownload; IrisInterfaceService irisService = new IrisInterfaceService(); JObject joRtn = irisService.getDirectoryByPagination(currentPage, pageSize, code, directoryType, dirCode, dirName, directoryDr); if (joRtn["errorCode"].ToString() != "0") { MessageBox.Show("IRIS数据返回错误:" + joRtn["errorMessage"].ToString()); return; } if (joRtn["result"]["Data"] == null) { MessageBox.Show("该节点不存在"); return; } if (joRtn["result"]["TotalCount"].ToString() == "0") { MessageBox.Show("未查询到数据"); dgv.DataSource = null; return; } DataTable dt = (DataTable)joRtn["result"]["Data"].ToObject(typeof(DataTable)); int totalCount = int.Parse(joRtn["result"]["TotalCount"].ToString()); pg.TotalCount = totalCount; pg.PageSize = 50; dgv.DataSource = dt; dgv.Columns[0].ReadOnly = true; } /// /// 刷新窗体表格的数据 /// /// /// 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://按病种付费病种 { 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); break; } case 13://中医证候下载 { gvdSetter.GetTCMSyndromeJsonByTxt(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; } } } private void cbxInterface_down_SelectedValueChanged(object sender, EventArgs e) { //int i = 0; //if (int.TryParse(cbxInterface_down.SelectedValue.ToString(), out i)) //{ GlobalVariables.interfaceDr_Download = i; } //else //{ // GlobalVariables.interfaceDr_Download = 0; //} GlobalVariables.interfaceDr_Download = int.Parse(cbxInterface_down.SelectedValue.ToString()); IrisInterfaceService iris = new IrisInterfaceService(); JObject joInterface = iris.getInterface(cbxInterface_down.SelectedValue.ToString()); //赋值 GlobalVariables.hospitalNO = (string)joInterface["HospitalNO"]; GlobalVariables.hospitalDr = (int)joInterface["HospitalDr"]; GlobalVariables.interfaceNO = (string)joInterface["InterfaceNO"]; GlobalVariables.interfaceDr = (int)joInterface["ID"]; GlobalVariables.centerURL = (string)joInterface["CenterURL"]; GlobalVariables.businessDllName = (string)joInterface["DLLName"]; GlobalVariables.patientMedInsuAreaCode = (string)joInterface["AreaCode"]; } /// /// 主窗体关闭事件 /// /// /// private void DownLoad_FormClosed(object sender, FormClosedEventArgs e) { Dispose(); } /// /// 下载按钮事件 /// /// /// private void btnDownload_Click(object sender, EventArgs e) { string errorMessage = string.Empty; HisBusiness hisBus = new HisBusiness(); if ((rbgDirecType.SelectedIndex < 0)|| (rbgDirecType.SelectedIndex > 20)) { MessageBox.Show("请先选择下载类型!"); return; } //字典数据下载 if (rbgDirecType.SelectedIndex == 8) { dynamic joData = new JObject(); joData.type = tbDicType.Text; joData.parentValue = ""; joData.admdvs = ""; joData.date = tbDicDate.Text; joData.vali_flag = ""; if (hisBus.downloadDicionary(joData, uiProcessBar1, out errorMessage) != 0) { MessageBox.Show(errorMessage); return; } } else if ((rbgDirecType.SelectedIndex > 13) && (rbgDirecType.SelectedIndex < 21)) { //医疗机构信息下载并保存 if (rbgDirecType.SelectedIndex == 20) { if (TexYYMC.Text == "") { MessageBox.Show("下载医疗机构信息,医院名称信息不能为空,可输入名称进行模糊匹配!"); return; } string funNo = ""; dynamic joData = new JObject(); joData = GetInput(rbgDirecType.SelectedIndex, out funNo); if (hisBus.InsuMedQuery(joData, funNo, out errorMessage) == 0) { string code = "090100XX"; //暂时未定医疗机构新增Code Sunny.UI.UIPagination pg; pg = pgDownload; //调用IRIS接口服务保存医疗机构信息 if (hisBus.MedicalInstitutionSave(errorMessage,code,out string sOutMsg) != 0) { MessageBox.Show(sOutMsg); return; } } else { MessageBox.Show(errorMessage); return; } } else //其它查询信息只下载查询不保存 { string funNo = ""; dynamic joData = new JObject(); joData = GetInput(rbgDirecType.SelectedIndex, out funNo); if (hisBus.InsuMedQuery(joData, funNo, out errorMessage) != 0) { MessageBox.Show(errorMessage); return; } } } else //医保目录下载 { if (rbSingleDown.Checked) { string ver = tbVer.Text; if (tbVer.Text != "") { ver = tbVer.Text; } if (hisBus.SingleDownload(ver, rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0) { MessageBox.Show(errorMessage); return; } } if (rbAutoDown.Checked) { if (hisBus.AutoDownload(rbgDirecType.SelectedIndex, uiProcessBar1, out errorMessage) != 0) { MessageBox.Show(errorMessage); return; } } } //下载完后刷新页面数据 btnQuery_Click(sender, e); } private void rbgDirecType_ValueChanged(object sender, int index, string text) { //选定项不同调用的接口也不相同,Index值大于 if (rbgDirecType.SelectedIndex > 13) { uiGroupBox1.Visible = false; uiGroupBox2.Visible = false; uiGroupBox4.Visible = false; uiGroupBox5.Visible = false; uiProcessBar1.Visible = false; uiGroupBox5.Visible = true; btnQuery.Visible = true; btnDownload.Visible = false; } else { uiGroupBox1.Visible = true; uiGroupBox2.Visible = true; uiGroupBox4.Visible = true; uiGroupBox5.Visible = true; uiGroupBox5.Visible = false; uiProcessBar1.Visible = true; btnQuery.Visible = false; btnDownload.Visible = true; } } /// /// 几个医保查询的交易组织入参 /// /// /// /// private JObject GetInput(int Index, out string funNo) { funNo = ""; dynamic joData = new JObject(); switch (Index) { case 14://民族药品目 { funNo = "1304"; joData.med_list_codg = ""; //医疗目录编码 joData.genname_codg = ""; //通用名编号 joData.drug_genname = ""; //药品通用名 joData.drug_prodname = ""; //药品商品名 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://目录信息查询 { funNo = "1312"; joData.query_date = ""; //查询时间点 joData.hilist_code = ""; //医保目录编码 joData.insu_admdvs = ""; //参保机构医保区划 joData.begndate = ""; //开始日期 joData.hilist_name = ""; //医保目录名称 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://医疗与医保目录匹配 { funNo = "1316"; joData.query_date = ""; //查询时间点 joData.medins_list_codg = ""; //定点医药机构目录编号 joData.hilist_code = ""; //医保目录编码 joData.list_type = ""; //目录类别 joData.insu_admdvs = ""; //参保机构医保区划 joData.begndate = ""; //开始日期 joData.vali_flag = ""; //有效标志 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 17://医药机构目录匹配 { funNo = "1317"; joData.query_date = ""; //查询时间点 joData.fixmedins_code = ""; //定点医药机构编号 joData.medins_list_codg = ""; //定点医药机构目录编号 joData.medins_list_name = ""; //定点医药机构目录名称 joData.insu_admdvs = ""; //参保机构医保区划 joData.list_type = ""; //目录类别 joData.med_list_codg = ""; //医疗目录编码 joData.begndate = ""; //开始日期 joData.vali_flag = ""; //有效标志 joData.updt_time = TexDate.Text; //更新时间 joData.page_num = TexDQYS.Text; //当前页数 joData.page_size = TexBYSJL.Text; //本页数据量 break; } case 18://医保目录限价 { funNo = "1318"; joData.query_date = ""; //查询时间点 joData.hilist_code = ""; //医保目录编码 joData.hilist_lmtpric_type = ""; //医保目录限价类型 joData.overlmt_dspo_way = ""; //医保目录超限处理方式 joData.insu_admdvs = ""; //参保机构医保区划 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://医保目录先自付比例 { funNo = "1319"; joData.query_date = ""; //查询时间点 joData.hilist_code = ""; //医保目录编码 joData.selfpay_prop_psn_type = "";//医保目录自付比例人员类别 joData.selfpay_prop_type = ""; //目录自付比例类别 joData.insu_admdvs = ""; //参保机构医保区划 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://医药机构信息 { funNo = "1201"; joData.fixmedins_type = "1"; //定点医疗服务机构类型 1定点医疗机构,2定点零售药店,3工伤定点康复机构,4辅助器具配置机构,5计划生育服务机构 joData.fixmedins_name = ""; //定点医药机构名称 joData.fixmedins_code = ""; //定点医药机构编号 break; } } return joData; } private void AddDGVColumn(DataGridView dgv, string headerText, string dataPropertyName, int width = 120) { DataGridViewColumn newColumn = new DataGridViewTextBoxColumn(); newColumn.HeaderText = headerText; newColumn.Width = width; newColumn.DataPropertyName = dataPropertyName; newColumn.Name = dataPropertyName; dgv.Columns.Add(newColumn); } private void setDgvColonum() { AddDGVColumn(dgvDirectoy, "余额", "balc", 80); AddDGVColumn(dgvDirectoy, "险种类型", "insutype", 200); AddDGVColumn(dgvDirectoy, "人员类别", "psn_type"); AddDGVColumn(dgvDirectoy, "人员参保状态", "psn_insu_stas",300); AddDGVColumn(dgvDirectoy, "个人参保日期", "psn_insu_date", 300); AddDGVColumn(dgvDirectoy, "暂停参保日期", "paus_insu_date", 300); AddDGVColumn(dgvDirectoy, "公务员标志", "cvlserv_flag", 60); AddDGVColumn(dgvDirectoy, "参保地医保区划", "insuplc_admdvs", 200); AddDGVColumn(dgvDirectoy, "单位名称", "emp_name", 300); dgvDirectoy.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold); dgvDirectoy.ColumnHeadersHeight = 40; } } }