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.Common;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.FormSetter;
using PTMedicalInsurance.Business;
using PTMedicalInsurance.Variables;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Xml;
namespace PTMedicalInsurance.Forms
{
public partial class PrescriptionCirculation : Form
{
//1.声明自适应类实例
AutoResizeForm asc = new AutoResizeForm();
HisIrisServices hIS = new HisIrisServices();
InvokeHelper invoker = new InvokeHelper();
AnalysisXML AnXML = new AnalysisXML();
ReadCardClass rcl = new ReadCardClass();
FileHandle comp = new FileHandle();
public string patInfo = "", ReadCardOutParam = "", CertNo = "";
public string presAdmLoc = "", presAdmDoc = "", presAdmID = "", presNo = "", hiRxno = "";
public string DrCode = "", DrName = "", DrInsuCode = "", DrCertNo = "";
public string HospRxno = "";
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void dgv_HISRegInfo_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgv_HISRegInfo.DataSource == null)
return;
if (dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["ID"].Value.ToString() == "")
return;
string outParam = "";
DataTable dt = null;
presAdmDoc = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["doc"].Value.ToString();
presAdmLoc = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["loc"].Value.ToString();
presNo = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["prescNo"].Value.ToString();
presAdmID = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["admID"].Value.ToString();
Global.pat.adm_Dr = int.Parse(presAdmID);
if (presNo == "") return;
//获取HIS处方明细信息
if (GetHISPrescFeeInfo(presNo, ref outParam, ref dt) != 0)
{
MessageBox.Show(outParam);
return;
}
dgv_PrescriptionInfo.DataSource = dt;
}
private void btnPresUpload_Click(object sender, EventArgs e)
{
string PutExRxInfo = "", Appmsg = "", AppRtnMsg = "", OutMsg = "", OutMsg_Close = "", InsuOutMsg = "", outParam = "";
Global.pat.mdtrtarea_admvs = "110105";
System.Type ComType = null;
dynamic ComInstance = null;
if (((DataTable)dgv_HISRegInfo.DataSource == null) || ((DataTable)dgv_PrescriptionInfo.DataSource == null))
{
MessageBox.Show("请先查询该患者就诊处方信息!");
return;
}
if (presNo == "")
{
MessageBox.Show("请选择处方就诊记录!");
return;
}
#region【获取外配处方上传业务入参】
if (GetPreVerificationInput(presAdmID, presNo, ref outParam) != 0)
{
MessageBox.Show("【医保外配处方流转业务】获取外配处方上传预核验业务入参失败:" + outParam);
return;
}
PutExRxInfo = outParam;
#endregion
#region【外配处方上传】
//1.创建首信医保Com实例
if (rcl.CreateBusinessObj(out ComType, out ComInstance) != 0)
{
MessageBox.Show("实例创建失败");
return;
}
else
{
Appmsg = "1";
//2.读卡前先Open
rcl.Open(ComType, ComInstance, out outParam);
//3.调用获取病人信息
Appmsg = JsonHelper.GetinPar(Appmsg, 0);
rcl.BussniessObj("GetPersonInfo_ExRx_RQ", Appmsg, ComType, ComInstance, out AppRtnMsg);
XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
if (AnXML.CheckState(xmlDoc, out OutMsg) == false)
{
rcl.Close(ComType, ComInstance, out OutMsg_Close);
MessageBox.Show("获取参保信息GetPersonInfo_ExRx_RQ失败,中心返回错误信息:" + OutMsg + "\r\n"
+ "调用【Close】关闭读卡设备输出:" + OutMsg_Close);
return;
}
else
{
MessageBox.Show(AppRtnMsg);
//4.调用提交外配处方信息
rcl.BussniessObj("PutExRxInfo", PutExRxInfo, ComType, ComInstance, out AppRtnMsg);
xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
if (AnXML.CheckState(xmlDoc, out OutMsg) == false)
{
rcl.Close(ComType, ComInstance, out OutMsg_Close);
MessageBox.Show("提交外配处方信息PutExRxInfo失败,中心返回错误信息:" + OutMsg + "\r\n"
+ "调用【Close】关闭读卡设备输出:" + OutMsg_Close);
return;
}
else
{
xmlDoc = null;
rcl.Close(ComType, ComInstance, out OutMsg_Close);
MessageBox.Show("提交外配处方信息成功:" + AppRtnMsg);
return;
}
}
}
#endregion
}
///
/// 获取电子处方预核验入参
///
///
///
///
///
private int GetPreVerificationInput(string AdmID, string prescNo, ref string outParam)
{
dynamic joTmp = new JObject();
joTmp.Add("prescNo", prescNo);
joTmp.Add("admID", AdmID);
JObject joRtnPreVerificationData = hIS.GetPreVerificationData(joTmp);
if (JsonHelper.parseIrisRtnValue(joRtnPreVerificationData, out outParam) != 0)
{
outParam = "获取外配处方上传入参失败,请联系管理员!" + outParam;
return -1;
}
else
{
if (joRtnPreVerificationData["result"]["rxdiagnosisinfo"].ToString() == "[]")
{
outParam = "获取外配处方上传入参结果为空!";
return -1;
}
else
{
//封装XML入参
outParam = GetPreVerificationInputXML(joRtnPreVerificationData);
return 0;
}
}
}
private string GetPreVerificationInputXML(JObject joInput)
{
string sData_XML = "", sText = "", OutMsg = "";
string sRxdiagnosisInfo = "", sFeeitemInfo = "";
string sRxdiagnosisinfoarray = "", sFeeitemarray = "";
string InsuCodeDose = "", InsuHowtouseCode = "";
JArray jaRxdiagnosisinfo = JArray.Parse(JsonHelper.getDestValue(joInput, "result.rxdiagnosisinfo"));
JArray jaFeeItem = JArray.Parse(JsonHelper.getDestValue(joInput, "result.feeitem"));
//循环取 处方信息
for (int i = 0; i < jaRxdiagnosisinfo.Count; i++)
{
string curetype = jaRxdiagnosisinfo[i]["curetype"].ToString();
string rxno = jaRxdiagnosisinfo[i]["rxno"].ToString();
string diagnoseno = jaRxdiagnosisinfo[i]["diagnoseno"].ToString();
string recipedate = jaRxdiagnosisinfo[i]["recipedate"].ToString();
string recipetype = jaRxdiagnosisinfo[i]["recipetype"].ToString();
string diagnosename = jaRxdiagnosisinfo[i]["diagnosename"].ToString();
string diagnosecode = jaRxdiagnosisinfo[i]["diagnosecode"].ToString();
string sectioncode = jaRxdiagnosisinfo[i]["sectioncode"].ToString();
string sectionname = jaRxdiagnosisinfo[i]["sectionname"].ToString();
string drname = jaRxdiagnosisinfo[i]["drname"].ToString();
string drid = jaRxdiagnosisinfo[i]["drid"].ToString();
string billstype = "2"; //jaRxdiagnosisinfo[i]["billstype"].ToString(); //2-西药或中成药处方;4-中草药处方;
//DateTime dt = Convert.ToDateTime(recipedate);
//recipedate = dt.ToString("yyyyMMHHmmss");
recipedate = recipedate.Trim().Replace(":", "").Replace("-", "").Replace(" ","");
sRxdiagnosisInfo = sRxdiagnosisInfo
+ " "
+ " "+ curetype + " " // 医疗类别 √
+ " "+ rxno + " " //处方序号 √
+ " "+ diagnoseno + " " //诊断序号 √
+ " "+ recipedate + " " //处方日期/时间 √
+ " "+ recipetype + " " //处方类别 √
+ " "+ diagnosename + " " //诊断名称
+ " "+ diagnosecode + " " //诊断编码
+ " " //病历信息
+ " 10 " //就诊科别代码
+ " "+ sectionname + " " //就诊科别名称
+ " 眼科 " //HIS就诊科别名称
+ " "+ drid + " " //医师编码
+ " "+ drname + " " //医师姓名
+ " " //drlevel
+ " " //挂号交易流水号
+ " "+ billstype + " " //单据类型
+ " ";
}
sRxdiagnosisinfoarray = ""+ sRxdiagnosisInfo + "";
//循环取 费用明细信息
for (int i = 0; i < jaFeeItem.Count; i++)
{
string rxitemno = jaFeeItem[i]["rxitemno"].ToString();
string rxno = jaFeeItem[i]["rxno"].ToString();
string itemcode = jaFeeItem[i]["itemcode"].ToString();
string hisname = jaFeeItem[i]["hisname"].ToString();
string itemtype = jaFeeItem[i]["itemtype"].ToString();
string dose = jaFeeItem[i]["dose"].ToString();
string howtouse = jaFeeItem[i]["howtouse"].ToString();
string dosage = jaFeeItem[i]["dosage"].ToString();
string days = jaFeeItem[i]["days"].ToString();
string fee = jaFeeItem[i]["fee"].ToString();
string count = jaFeeItem[i]["count"].ToString();
string unitPrice = jaFeeItem[i]["unitPrice"].ToString();
rxitemno = rxitemno.Trim().Replace("||", "-");
//查找剂型医保对照关系
if (hIS.GetRelationShipDir(70, "", dose, out OutMsg) == 0)
{
JArray jaRtnDose = (JArray)JObject.Parse(OutMsg)["result"]["data"];
InsuCodeDose = jaRtnDose[0]["InsuCode"].ToString();
}
//查找用法(用药频次)医保对照关系
if (hIS.GetRelationShipDir(229, "", howtouse, out OutMsg) == 0)
{
JArray jaRtnHowtouse = (JArray)JObject.Parse(OutMsg)["result"]["data"];
InsuHowtouseCode = jaRtnHowtouse[0]["InsuCode"].ToString();
}
sFeeitemInfo = sFeeitemInfo
+ " ";
}
sFeeitemarray = ""+ sFeeitemInfo + "";
sText = " 0 " //自动上传标识,0,不自动上传;1,自动上传
+ sRxdiagnosisinfoarray
+ sFeeitemarray;
sData_XML = JsonHelper.GetinPar(sText, 0);
//MessageBox.Show("sData_XML:" + sData_XML);
return sData_XML;
}
public PrescriptionCirculation(string PatInfo)
{
InitializeComponent();
asc.controllInitializeSize(this);
asc.controlAutoSize(this);
GridViewSetter grdSetter = new GridViewSetter();
grdSetter.SetHeaderTextOfHISRegister(dgv_HISRegInfo);
grdSetter.SetHeaderTextOfHISPrescFee(dgv_PrescriptionInfo);
grdSetter.DatagridviewColumnWidthAdaptation(dgv_HISRegInfo);
grdSetter.DatagridviewColumnWidthAdaptation(dgv_PrescriptionInfo);
dtST.Text = DateTime.Now.ToString("yyyy-MM-01 00:00:00");
dtED.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
if (PatInfo != "")
{
//查询HIS就诊信息
string outParam = "";
DataTable dt = null;
if (GetHISRegInfo(dtST.Text, dtED.Text, PatInfo, ref outParam, ref dt) != 0)
{
MessageBox.Show(outParam);
return;
}
dgv_HISRegInfo.DataSource = dt;
tb_CertNo.Text = PatInfo;
//查询处方明细信息
if (dt.Rows.Count == 0)
return;
if (dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["ID"].Value.ToString() == "")
return;
DataTable dt2 = null;
presAdmDoc = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["doc"].Value.ToString();
presAdmLoc = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["loc"].Value.ToString();
presNo = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["prescNo"].Value.ToString();
presAdmID = dgv_HISRegInfo.Rows[dgv_HISRegInfo.CurrentRow.Index].Cells["admID"].Value.ToString();
Global.pat.adm_Dr = int.Parse(presAdmID);
if (presNo == "") return;
//获取HIS处方明细信息
if (GetHISPrescFeeInfo(presNo, ref outParam, ref dt2) != 0)
{
MessageBox.Show(outParam);
return;
}
dgv_PrescriptionInfo.DataSource = dt2;
}
}
private void Other_FormClosed(object sender, FormClosedEventArgs e)
{
}
private void Other_Load(object sender, EventArgs e)
{
this.Height = 800;
this.Width = 1500;
this.WindowState = FormWindowState.Maximized;
asc.controllInitializeSize(this);
asc.controlAutoSize(this);
}
///
/// 获取HIS就诊信息
///
///
///
///
public JObject GetHISRegInfo(JObject joParam)
{
//string errMsg;
try
{
string serviceCode = "09030048";
string inpar = JsonHelper.setIrisInpar(serviceCode, joParam).ToString();
JObject joRtn = invoker.invokeHISService(inpar, "获取HIS就诊信息");
return joRtn;
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "获取HIS就诊信息异常:", ex.Message);
}
}
///
/// 获取HIS就诊信息
///
///
///
///
///
///
///
private int GetHISRegInfo(string dtST, string dtED, string PatInfo, ref string errMsg, ref DataTable DT)
{
dynamic joTmp = new JObject();
joTmp.Add("stDate", dtST);
joTmp.Add("endDate", dtED);
joTmp.Add("patInfo", PatInfo);
JObject joRtnHISRegInfo = hIS.GetHISRegInfo(joTmp);
if (JsonHelper.parseIrisRtnValue(joRtnHISRegInfo, out errMsg) != 0)
{
errMsg = "获取HIS患者就诊信息失败,请联系管理员!" + errMsg;
return -1;
}
else
{
if ((joRtnHISRegInfo["result"]["rows"].ToString() == "[]"))
{
errMsg = "查询HIS就诊信息结果为空!";
return -1;
}
else
{
DT = (DataTable)joRtnHISRegInfo["result"]["rows"].ToObject(typeof(DataTable));
return 0;
}
}
}
///
/// 获取HIS费用明细信息
///
///
///
///
///
private int GetHISPrescFeeInfo(string PrescNo, ref string errMsg, ref DataTable DT)
{
dynamic joTmp = new JObject();
joTmp.Add("prescNo", PrescNo);
JObject joRtnHISPrescFeeInfo = hIS.GetHISPrescFeeInfo(joTmp);
if (JsonHelper.parseIrisRtnValue(joRtnHISPrescFeeInfo, out errMsg) != 0)
{
errMsg = "获取HIS患者处方信息失败,请联系管理员!" + errMsg;
return -1;
}
else
{
if ((joRtnHISPrescFeeInfo["result"]["rows"].ToString() == "[]"))
{
errMsg = "查询HIS处方信息结果为空!";
return -1;
}
else
{
DT = (DataTable)joRtnHISPrescFeeInfo["result"]["rows"].ToObject(typeof(DataTable));
return 0;
}
}
}
private void btnGetInfo_Click(object sender, EventArgs e)
{
if (tb_CertNo.Text == "")
{
MessageBox.Show("请先输入患者身份证号进行查找患者未结算处方信息!");
return;
}
else
{
dgv_HISRegInfo.DataSource = null;
dgv_PrescriptionInfo.DataSource = null;
CertNo = tb_CertNo.Text;
Global.pat.certNO = tb_CertNo.Text;
}
#region【查询HIS就诊信息-用身份证号查询患者当日的就诊记录】
string outParam = "";
DataTable dt1 = null;
if (GetHISRegInfo(dtST.Text, dtED.Text, Global.pat.certNO, ref outParam, ref dt1) != 0)
{
MessageBox.Show(outParam);
return;
}
dgv_HISRegInfo.DataSource = dt1;
#endregion
#region【调用医保平台获取医保登记信息-根据HIS就诊信息查找医保登记信息 (接诊医生、接诊科室)】
/*
if (GetInsuRegIDFromHIS(presAdmID, presAdmDoc, presAdmLoc, out Global.pat.mdtrtID, out outParam) != 0)
{
MessageBox.Show(outParam);
return;
}
*/
#endregion
presAdmDoc = dgv_HISRegInfo.Rows[0].Cells["doc"].Value.ToString();
presAdmLoc = dgv_HISRegInfo.Rows[0].Cells["loc"].Value.ToString();
presNo = dgv_HISRegInfo.Rows[0].Cells["prescNo"].Value.ToString();
presAdmID = dgv_HISRegInfo.Rows[0].Cells["admID"].Value.ToString();
Global.pat.adm_Dr = int.Parse(presAdmID);
if (presNo == "") return;
DataTable dt2 = null;
//获取HIS处方明细信息
if (GetHISPrescFeeInfo(presNo, ref outParam, ref dt2) != 0)
{
MessageBox.Show(outParam);
return;
}
dgv_PrescriptionInfo.DataSource = dt2;
}
}
}