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;
}
}
}