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