using Newtonsoft.Json.Linq;
using System;
using System.IO;
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.Common;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.FormSetter;
using PTMedicalInsurance.Business;
using PTMedicalInsurance.Variables;
namespace PTMedicalInsurance.Forms
{
public partial class MedInsuQuery : Form
{
DataTable dtExport;
//1.声明自适应类实例
AutoResizeForm asc = new AutoResizeForm();
private InvokeHelper invoker = new InvokeHelper();
private HisIrisServices hIS = new HisIrisServices();
private HisMainBusiness hBus = new HisMainBusiness();
public MedInsuQuery()
{
InitializeComponent();
asc.controllInitializeSize(this);
asc.controlAutoSize(this);
}
private void btnClose_Click(object sender, EventArgs e)
{
Close();
}
private void MedInsuQuery_Load(object sender, EventArgs e)
{
//this.WindowState = FormWindowState.Maximized;
tbcMain.SelectedIndex = 1;
dpST.Text = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
dpED.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
dt_ST.Text = DateTime.Now.ToString("yyyy-MM-01 00:00:00");
dt_ET.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
// dgvSettlRecord.AutoGenerateColumns = false;
cbbLevel.SelectedIndex = 0;
cbbOverPrice.SelectedIndex = 0;
GridViewSetter grdSetter = new GridViewSetter();
grdSetter.SetHeaderTextOfMedInsuHosPerInfo(dgvSettlRecord);
grdSetter.SetHeaderTextOfSettltMentFeelDetailInfo(dgvInsuFeeUpload);
grdSetter.DatagridviewColumnWidthAdaptation(dgvInsuFeeUpload);
grdSetter.SetHeaderTextOfSettltMentSelfFeelDetailInfo(dgvSelfFeeData);
}
private void btnQuery_Click(object sender, EventArgs e)
{
btnPrint.Enabled = false;
string sCZYXM = Global.user.name;
string SqlHeard = " Adm_Dr,MdtrtID,Name as PatientName,Age,PsnCertNO,Gend,PsnType,EmpName,AdmInDepName,insuplcAdmdvs,sZYZT AS sZTSM, "
+ " AdmBed,RegDate,MainDiagName,AttendDoctorNO,ChiefPhyDocName,'"+ sCZYXM+ "' as OpertName,'' as InHospNo,''Address ";
string SqlStrMain = " SELECT a.*,b.*,a.PatientName AS Name,a.PsnType AS PsnTypeCode,'在院' sZYZT FROM BS_MIPatCurrentInsuInfo a LEFT JOIN BS_MedInsuRegisterInfo b "
+ " ON a.MdtrtID=b.InsuRegID AND a.Interface_Dr=b.Interface_Dr AND a.Hospital_Dr=b.Hospital_Dr "
+ " WHERE b.Type=1 AND b.ValidFlag=1 AND b.Hospital_Dr= " + Global.inf.hospitalDr + " AND b.Interface_Dr= " + Global.inf.interfaceDr
+ " AND b.InsuRegID NOT IN (SELECT MdtrtID FROM BS_MedInsuSettlement WHERE MdtrtID=b.InsuRegID AND BillType=1 AND ValidFlag=1 AND AdmType=2) "
+ " AND b.RegDate<='" + dpED.Text + "' AND b.RegDate>'" + dpST.Text + "' " //
+ " UNION ALL "
+ " SELECT a.*,b.*,a.PatientName AS Name,a.PsnType AS PsnTypeCode,'已结算' AS sZYZT "
+ " FROM BS_MIPatCurrentInsuInfo a LEFT JOIN BS_MedInsuRegisterInfo b "
+ " ON a.MdtrtID=b.InsuRegID AND a.Interface_Dr=b.Interface_Dr AND a.Hospital_Dr=b.Hospital_Dr "
+ " LEFT JOIN BS_MedInsuSettlement c ON a.MdtrtID=b.InsuRegID AND b.InsuRegID=c.MdtrtID AND a.Interface_Dr=b.Interface_Dr AND b.Interface_Dr=c.Interface_Dr "
+ " WHERE b.Type=1 AND b.ValidFlag=1 AND c.BillType=1 AND b.Hospital_Dr= " + Global.inf.hospitalDr + " AND b.Interface_Dr= " + Global.inf.interfaceDr
+ " AND c.AdmType=2 AND c.SettlementDateTime<='" + dpED.Text + "' AND c.SettlementDateTime>'" + dpST.Text + "' "; //
string sqlStr = " SELECT "+ SqlHeard + " FROM ("+ SqlStrMain +") M ";
//MessageBox.Show(sqlStr);
JObject joSqlstr = new JObject();
joSqlstr.Add("sqlStr", sqlStr);
joSqlstr.Add("Type", "MedInsuHosPInfo");
joSqlstr.Add("hospID", Global.inf.hisHospitalDr);
JArray jaParam = new JArray();
jaParam.Add(joSqlstr);
JObject joSettlQuery = new JObject();
joSettlQuery.Add("params", jaParam);
joSettlQuery.Add("code", "09010059");
InvokeHelper invoker = new InvokeHelper();
JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询结算信息");
//MessageBox.Show(joRtn.ToString());
if (joRtn["result"]["data"].ToString() == "[]")
{
MessageBox.Show("查询结果为空!");
return;
}
DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
dgvSettlRecord.DataSource = dt;
if (dt.Rows.Count != 0)
{
btnPrint.Enabled = true;
dtExport = dt;
//从HIS获取患者的床号(分床前医保登记的病人床号没有写入医保平台登记表)
for (int i = 0; i < dt.Rows.Count; i++)
{
string BedNo, BedDocName, InHospNo, Address;
JObject joTmp = new JObject();
joTmp.Add("admID", dt.Rows[i]["Adm_Dr"].ToString());
JObject joRtn2 = invoker.invokeHISService(JsonHelper.setIrisInpar("05110014", joTmp).ToString(), "获取患者就诊信息");
if (JsonHelper.parseIrisRtnValue(joRtn2, out string errMsg) == 0)
{
BedNo = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.adm_bed");
BedDocName = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.chfpdr_name");
InHospNo = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.medrcdno");
Address = JsonHelper.getDestValue(JObject.Parse(joRtn2.ToString()), "mdtrtinfo.Address");
dt.Rows[i]["AdmBed"] = BedNo;
dt.Rows[i]["AttendDoctorNO"] = BedDocName;
dt.Rows[i]["InHospNo"] = InHospNo;
dt.Rows[i]["Address"] = Address;
}
else
{
if (errMsg.IndexOf("请重新登录") > 0)
{
MessageBox.Show("获取患者信息失败,请重新登录系统!");
break;
}
}
}
}
}
private void btnPrint_Click(object sender, EventArgs e)
{
string LSH = DateTime.Now.ToString("yyyy-MM-dd"); //DateTime.Now.ToString("MMddHHmmssffff");
string sFliePathName = @"C:\Users\Administrator\Desktop\" + LSH + "医保在院患者登记或结算信息.xls";
string ReturnFileName = ExportToExcel.DataTabletoExcel(dtExport, sFliePathName);
if (ReturnFileName != "")
{
MessageBox.Show("导出成功,文件保存路径:【" + ReturnFileName + "】");
System.Diagnostics.Process.Start(ReturnFileName); //打开excel文件
}
else
{
MessageBox.Show("导出失败!");
}
}
private void btnOK_Click(object sender, EventArgs e)
{
string sqlStr;
sqlStr = " SELECT a.Adm_Dr,c.Name, b.HISCode, b.MedInsuNO, b.Price,b.Sumamt,b.ChargeItemLevel,c.ChargeItemLevelName,b.SelfPayProp, ";
sqlStr = sqlStr + " b.UpLimitAmount,b.OverLimitAmount,b.InScopeAmount,b.FullOwnPayAmount,b.PreSelfPayAmount,b.LimitUsedFlag ";
sqlStr = sqlStr + " FROM BS_MedInsuSettlement a LEFT JOIN BS_MedInsuFeeUploadRecord b ";
sqlStr = sqlStr + " ON a.Hospital_Dr=b.Hospital_Dr AND a.MdtrtID=b.MdtrtID AND a.PersonnelNO=b.PersonnelNO ";
sqlStr = sqlStr + " LEFT JOIN HB_MedInsuDirectory c ON b.MedInsuNO=c.Code AND a.Interface_Dr=c.Interface_Dr AND a.Hospital_Dr=c.Hospital_Dr ";
sqlStr = sqlStr + " WHERE b.MedInsuNO<>'' and a.ValidFlag=1 AND a.BillType=1 AND a.AdmType=2 ";
sqlStr = sqlStr + " AND a.Interface_Dr=" + Global.inf.interfaceDr;
sqlStr = sqlStr + " AND a.Hospital_Dr= " + Global.inf.hospitalDr;
sqlStr = sqlStr + " AND a.OccurTime>'" + dt_ST.Text + "'";
sqlStr = sqlStr + " AND a.OccurTime<'" + dt_ET.Text + "'";
if (tb_InHospNo.Text != "")
{
sqlStr = sqlStr + " and a.BillID='" + tb_InHospNo.Text + "'";
}
if (tb_SettleID.Text != "")
{
sqlStr = sqlStr + " and a.SettlementID='" + tb_SettleID.Text + "'";
}
if (cbbOverPrice.Text == "是")
{
sqlStr = sqlStr + " AND b.OverLimitAmount>0 ";
}
else if (cbbOverPrice.Text == "否")
{
sqlStr = sqlStr + " AND b.OverLimitAmount<=0 ";
}
if (cbbLevel.Text == "甲类")
{
sqlStr = sqlStr + " AND b.ChargeItemLevel='01' ";
}
else if (cbbLevel.Text == "乙类")
{
sqlStr = sqlStr + " AND b.ChargeItemLevel='02' ";
}
else if (cbbLevel.Text == "丙类")
{
sqlStr = sqlStr + " AND b.ChargeItemLevel='03' ";
}
JObject joSqlstr = new JObject();
joSqlstr.Add("sqlStr", sqlStr);
JArray jaParam = new JArray();
jaParam.Add(joSqlstr);
JObject joSettlQuery = new JObject();
joSettlQuery.Add("params", jaParam);
joSettlQuery.Add("code", "09010118");
JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询医保结算费用信息");
DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
dgvInsuFeeUpload.DataSource = dt;
}
private void btnFind_Click(object sender, EventArgs e)
{
string errMsg;
try
{
JObject joTmp = new JObject();
joTmp.Add("hospCode", Global.user.hosCode);
joTmp.Add("staDate", dpt_ST.Text);
joTmp.Add("endDate", dpt_ET.Text);
//joTmp.Add("error", "");
//joTmp.Add("patInfo", tb_PatInfo.Text);
//joTmp.Add("componentName", "ZFAdm4201AList");
JObject joRtn = invoker.invokeHISService(JsonHelper.setIrisInpar("09030038", joTmp).ToString(), "获取自费患者就诊信息");
if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
{
MessageBox.Show("获取自费患者就诊信息失败,请联系管理员!" + errMsg);
return;
}
else
{
if ((joRtn["result"].ToString() == "[]"))
{
MessageBox.Show("查询HIS自费患者就诊信息结果为空!");
return;
}
DataTable DT = (DataTable)joRtn["result"].ToObject(typeof(DataTable));
dgvSelfFeeData.DataSource = DT;
}
}
catch (Exception ex)
{
MessageBox.Show("IRIS接口服务【02020085】获取自费患者就诊信息 异常:" + ex.Message);
return;
}
}
private void btnUpload_Click(object sender, EventArgs e)
{
if ((dgvSelfFeeData.DataSource == null) || (dgvSelfFeeData.Rows[dgvSelfFeeData.CurrentRow.Index].Cells["id"].Value.ToString() == ""))
return;
for (int i = 0; i < dgvSelfFeeData.Rows.Count; i++)
{
JArray ja = new JArray();
string errorMsg = "";
string admID = dgvSelfFeeData.Rows[i].Cells["admID"].Value.ToString();
//1.获取HIS费用信息
if (GetSelfPayFeeInfoParam(admID, out ja, out errorMsg) == 0)
{
//按指定条数分割后上传,保存,更新
if (hBus.uploadFeeToCenterSelfPay(TradeEnum.UploadSelfPayFeeInfo, 100, ja, out errorMsg) != 0)
{
MessageBox.Show("费用上传失败:" + errorMsg);
return;
}
}
}
MessageBox.Show("上传完成!");
}
///
/// 获取自费患者结算费用信息入参
///
///
///
///
///
public int GetSelfPayFeeInfoParam(string AdmID, out JArray jaFeeInfo, out string outMsg)
{
jaFeeInfo = null;
JArray ja = new JArray();
JObject jo = new JObject();
jo.Add("admID", AdmID);
JObject joRtn = hIS.GetHISSelfPayFeeInfo(jo);
if (JsonHelper.parseIrisRtnValue(joRtn, out outMsg) != 0)
{
outMsg = "获取HIS自费患者结算费用入参失败,请联系管理员!" + outMsg;
return -1;
}
else
{
JArray jaFee = JArray.Parse(JsonHelper.getDestValue(joRtn, "result.fsiOwnpayPatnFeeListDDTO"));
for (int i = 0; i < jaFee.Count; i++)
{
//重新组织深圳基线版2595接口上传入参
JObject joParam = new JObject();
joParam.Add("reim_acp_id", jaFee[i]["fixmedins_mdtrt_id"].ToString()); //零报受理号
joParam.Add("invoice_no", jaFee[i]["memo"]["invoice_no"].ToString()); //发票号
joParam.Add("fee_ocur_time", jaFee[i]["fee_ocur_time"].ToString()); //费用发生时间
joParam.Add("psn_no", ""); //人员编号
joParam.Add("insu_admdvs", "440300"); //参保区划
joParam.Add("cnt", jaFee[i]["cnt"].ToString()); //数量
joParam.Add("med_type", jaFee[i]["med_type"].ToString()); //医疗类别
joParam.Add("pric", jaFee[i]["pric"].ToString()); //单价
joParam.Add("det_item_fee_sumamt", jaFee[i]["det_item_fee_sumamt"].ToString()); //医疗费总额(元)
joParam.Add("med_list_codg", jaFee[i]["med_list_codg"].ToString()); //医疗目录编码
joParam.Add("medins_list_name", jaFee[i]["medins_list_name"].ToString()); //医药机构目录名称
joParam.Add("medins_list_codg", jaFee[i]["medins_list_codg"].ToString()); //医药机构目录编码
joParam.Add("bkkp_sn", jaFee[i]["bkkp_sn"].ToString()); //费用明细流水号
joParam.Add("bilg_dr_codg", jaFee[i]["bilg_dr_code"].ToString()); //开单医生编码
joParam.Add("bilg_dr_name", jaFee[i]["bilg_dr_name"].ToString()); //开单医师姓名
joParam.Add("lmt_used_flag", "0"); //限制使用标志
joParam.Add("hosp_appr_flag", jaFee[i]["memo"]["hosp_appr_flag"].ToString()); //医院审批标志
joParam.Add("BZ1", "");
joParam.Add("BZ2", "");
joParam.Add("BZ3", "");
joParam.Add("BZ4", "");
joParam.Add("BZ5", "");
ja.Add(joParam);
}
jaFeeInfo = ja;
}
return 0;
}
private void btnCancel_Click(object sender, EventArgs e)
{
string errMsg = "";
if ((dgvSelfFeeData.DataSource == null) || (dgvSelfFeeData.Rows[dgvSelfFeeData.CurrentRow.Index].Cells["id"].Value.ToString() == ""))
return;
for (int i = 0; i < dgvSelfFeeData.Rows.Count; i++)
{
string admID = dgvSelfFeeData.Rows[i].Cells["admID"].Value.ToString();
JObject jo = new JObject();
jo.Add("reim_acp_id", admID); //零报受理号-上传的时候2595这个传参传的是admID
jo.Add("bkkp_sn", "0000"); //传入0000删除所有已经上传的费用明细
jo.Add("psn_no", "");
jo.Add("BZ1", "");
JObject joInput = new JObject();
joInput.Add("data", jo);
JObject joRtn = invoker.invokeCenterService(TradeEnum.CancelSelfPayFeeInfo, joInput);
if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
{
MessageBox.Show(errMsg);
return;
}
}
MessageBox.Show("撤销完成!");
}
}
}