123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531 |
- 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 = "<multiclass>1</multiclass>";
- //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
- }
- /// <summary>
- /// 获取电子处方预核验入参
- /// </summary>
- /// <param name="AdmID"></param>
- /// <param name="prescNo"></param>
- /// <param name="outParam"></param>
- /// <returns></returns>
- 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
- + " <rxdiagnosisinfo> "
- + " <curetype>"+ curetype + "</curetype> " // 医疗类别 √
- + " <rxno>"+ rxno + "</rxno> " //处方序号 √
- + " <diagnoseno>"+ diagnoseno + "</diagnoseno> " //诊断序号 √
- + " <recipedate>"+ recipedate + "</recipedate> " //处方日期/时间 √
- + " <recipetype>"+ recipetype + "</recipetype> " //处方类别 √
- + " <diagnosename>"+ diagnosename + "</diagnosename> " //诊断名称
- + " <diagnosecode>"+ diagnosecode + "</diagnosecode> " //诊断编码
- + " <medicalrecord></medicalrecord> " //病历信息
- + " <sectioncode>10</sectioncode> " //就诊科别代码
- + " <sectionname>"+ sectionname + "</sectionname> " //就诊科别名称
- + " <hissectionname>眼科</hissectionname> " //HIS就诊科别名称
- + " <drid>"+ drid + "</drid> " //医师编码
- + " <drname>"+ drname + "</drname> " //医师姓名
- + " <drlevel></drlevel> " //drlevel
- + " <registertradeno></registertradeno> " //挂号交易流水号
- + " <billstype>"+ billstype + "</billstype> " //单据类型
- + " </rxdiagnosisinfo> ";
- }
- sRxdiagnosisinfoarray = "<rxdiagnosisinfoarray>"+ sRxdiagnosisInfo + "</rxdiagnosisinfoarray>";
- //循环取 费用明细信息
- 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
- + " <feeitem "
- + " rxitemno= " + comp.quotedStr(rxitemno) //外配处方明细序号 √
- + " rxno= " + comp.quotedStr(rxno) //处方序号 √
- + " itemcode= " + comp.quotedStr(itemcode) //HIS项目代码 √
- + " hisname= " + comp.quotedStr(hisname) //HIS项目名称 √
- + " itemtype= " + comp.quotedStr(itemtype) //项目类别 √
- + " unitprice= " + comp.quotedStr(unitPrice) //单价
- + " count= " + comp.quotedStr(count) //数量
- + " fee= " + comp.quotedStr(fee) //费用总金额
- + " dose= " + comp.quotedStr(InsuCodeDose) //剂型 √
- + " specification= " + comp.quotedStr("") //规格
- + " unit= " + comp.quotedStr("") //单位
- + " howtouse= " + comp.quotedStr(InsuHowtouseCode) //用法(用药频次) √
- + " dosage= " + comp.quotedStr(dosage) //单次用量 √
- + " packaging= " + comp.quotedStr("") //包装单位
- + " minpackage= " + comp.quotedStr("") //最小包装
- + " conversion= " + comp.quotedStr("") //换算率
- + " days= " + comp.quotedStr(days) //用药天数 √
- + " drugapprovalnumber= " + comp.quotedStr("") //药品批准文号
- + " /> ";
- }
- sFeeitemarray = "<feeitemarray>"+ sFeeitemInfo + "</feeitemarray>";
- sText = " <autouploadflag>0</autouploadflag> " //自动上传标识,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);
- }
- /// <summary>
- /// 获取HIS就诊信息
- /// </summary>
- /// <param name="joParam"></param>
- /// <param name="outParam"></param>
- /// <returns></returns>
- 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);
- }
- }
- /// <summary>
- /// 获取HIS就诊信息
- /// </summary>
- /// <param name="dtST"></param>
- /// <param name="dtED"></param>
- /// <param name="PatInfo"></param>
- /// <param name="errMsg"></param>
- /// <param name="DT"></param>
- /// <returns></returns>
- 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;
- }
- }
- }
- /// <summary>
- /// 获取HIS费用明细信息
- /// </summary>
- /// <param name="PrescNo"></param>
- /// <param name="errMsg"></param>
- /// <param name="DT"></param>
- /// <returns></returns>
- 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;
- }
- }
- }
|