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