/// <summary> /// 出院处理 /// </summary> /// <param name="zyh"></param> /// <param name="db"></param> /// <returns></returns> public static bool Cycl(string zyh, RelationalDatabase db) { InstanceOldHISDb(); Judgeorder jd = new Judgeorder(db); ReturnInfo ri = new ReturnInfo(); string gflb = ""; string ls_return = ""; string ssql = ""; bool lb_ff = false; DataTable tb = new DataTable(); DataRow dr = tb.NewRow(); Ts_zygl_ybgl.FrmDataGridView frmDv = new Ts_zygl_ybgl.FrmDataGridView(); try { gflb = jd.GetLb(zyh); if (gflb == "新医保") { bool isOk = Ybcydj(zyh, db); if (!isOk) { return(isOk); } } zyh = Convert.ToInt64(zyh).ToString(); //打开病人出院登记界面 switch (gflb) { case "工会会员": //这个返回值为空,应该是屏蔽了,不写了 { //lb_ff = true; //Open(w_bq_yzgl_djcysj_bzxz); break; } case "合作医疗": case "新农合(东西湖)": { lb_ff = true; //Open(w_bq_yzgl_djcysj_bzxz_hzyl); tb = GetHzylDm(); break; } case "合约(部分病种结算)": { lb_ff = true; //Open(w_bq_yzgl_djcysj_bzxz2); tb = GetHyDm(); break; } } if (gflb == "") { ssql = "select gflb from zy_brjbxx where zyh = '" + zyh + "'"; gflb = Convertor.IsNull(InFomixDb.GetDataResult(ssql), ""); } ssql = "select count(*) from nb_brxx where zyh = '" + zyh + "'"; if (Convert.ToInt32(Convertor.IsNull(InFomixDb.GetDataResult(ssql), "0")) > 0) { if (MessageBox.Show("该新农合病人是否为外伤患者?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { ssql = "update zy_zybrxx set bz = '1' where zyh = '" + zyh + "'"; InFomixDb.DoCommand(ssql); } } //ssql = "select count(*) from zy_dbzjs where gflb = '" + DAL.BaseDal.GetEncodingStringToInforMix(gflb) + "'"; ssql = "select count(*) from zy_dbzjs where gflb = '" + gflb + "'"; if (Convert.ToInt32(Convertor.IsNull(InFomixDb.GetDataResult(ssql), "0")) > 0) { lb_ff = true; //openwithparm(w_bq_yzgl_djcysj_jslx,is_gflb); //ssql = "SELECT bzbm code,bzmc name FROM zy_dbzjs WHERE gflb = '" + DAL.BaseDal.GetEncodingStringToInforMix(gflb) + "'"; ssql = "SELECT bzbm code,bzmc name FROM zy_dbzjs WHERE gflb = '" + gflb + "'"; tb = InFomixDb.GetDataTable(ssql); //做转换 //for (int r = 0; r < tb.Rows.Count; r++) //{ // for (int c = 0; c < tb.Columns.Count; c++) // { // tb.Rows[r][c] = DAL.BaseDal.GetEncodingString(Convertor.IsNull(tb.Rows[r][c], "")); // } //} } if (lb_ff) { if (tb == null || tb.Rows.Count == 0) { throw new Exception("未找到需填写的的信息!"); } frmDv = new Ts_zygl_ybgl.FrmDataGridView(); frmDv.dgv.DataSource = tb; frmDv.dgv.MultiSelect = false; frmDv.ShowDialog(); if (frmDv.DialogResult == System.Windows.Forms.DialogResult.Yes) { if (frmDv.dgv.SelectedRows.Count == 0) { throw new Exception("未选择数据!"); } else { ls_return = Convertor.IsNull(tb.Rows[frmDv.dgv.SelectedRows[0].Index]["code"], ""); } } if (ls_return == "") { return(false); } else { ls_return = Convert.ToInt32(ls_return).ToString(); if (ls_return == "0") { if (MessageBox.Show("您所填写的是无优惠政策的病种,确定吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { return(false); } } //ssql = "UPDATE zy_zybrxx Set fybh = '" + DAL.BaseDal.GetEncodingStringToInforMix(ls_return) + "' Where zyh = '" + zyh + "'"; ssql = "UPDATE zy_zybrxx Set fybh = '" + ls_return + "' Where zyh = '" + zyh + "'"; InFomixDb.DoCommand(ssql); } } //ls_return = '' //OpenWithParm(w_bq_yzgl_djcysj,GetParm) //ls_return = Message.StringParm //IF ls_return <> 'OK' THEN // ll_return = 1 OK // RETURN -1 //END IF //RETURN 1 } catch (Exception ex) { throw ex; } return(true); }
/// <summary> /// 检查并修正病人信息 /// </summary> /// <param name="zyh"></param> /// <param name="db"></param> /// <returns></returns> public static bool Check(string zyh, RelationalDatabase db) { //Modify By Tany 2015-01-30 如果连接不是正式库,则不验证 string conn = db.ConnectionString; string[] s = conn.Split(';'); if (s.Length > 0) { for (int i = 0; i < s.Length; i++) { if (s[i].IndexOf("initial catalog=") >= 0) { if (s[i].Replace("initial catalog=", "").ToLower() != "trasen") { return(true); } } } } InstanceOldHISDb(); string oldzyh = ""; string sql = ""; try { if (zyh.Trim() == "") { throw new Exception("住院号为空,请检查!"); } oldzyh = Convert.ToInt64(zyh).ToString(); sql = "select * from vi_zy_vinpatient_all where flag<>10 and inpatient_no='" + zyh + "' and dept_id in (select deptid from vi_zy_newhishsz)"; DataTable newPatTb = db.GetDataTable(sql); //上线新护士站的病人才进行验证 if (newPatTb != null && newPatTb.Rows.Count > 0) { sql = "select * from zy_zybrxx where zyh='" + oldzyh + "'"; DataTable oldPatTb = InFomixDb.GetDataTable(sql); if (oldPatTb == null || oldPatTb.Rows.Count == 0) { throw new Exception("在老系统未找到住院号为【" + oldzyh + "】的病人!"); } string oldKs = HisFunctions.ConvertOldhisidToNewHisid(HisFunctions.DataMapType.JC_DEPT_PROPERTY, oldPatTb.Rows[0]["ks"].ToString().Trim(), db); if (oldKs == "") { throw new Exception("未找到该科室[" + oldPatTb.Rows[0]["ks"].ToString().Trim() + "]对应的科室信息!"); } string oldCwh = oldPatTb.Rows[0]["cwh"].ToString().Trim(); bool isTs = false; //如果老系统科室和新系统不一样,则调用新系统到老系统的转科事件 if (oldKs != newPatTb.Rows[0]["dept_id"].ToString()) { isTs = true; MessageBox.Show("该病人在新系统中的科室与老系统的科室不符,系统将尝试修复老系统数据!\r\n\r\n点击确定后将继续操作......", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //不能调用转科WS,只能直接更新数据 string _ks = HisFunctions.ConvertNewhisidToOldHisid(HisFunctions.DataMapType.JC_DEPT_PROPERTY, newPatTb.Rows[0]["dept_id"].ToString(), db);; sql = "SELECT BQ FROM zy_bqksdzb Where KS = '" + _ks + "'"; string _bq = Convertor.IsNull(InFomixDb.GetDataResult(sql), ""); System.Data.Odbc.OdbcConnection connection = new System.Data.Odbc.OdbcConnection(DAL.BaseDal.oldhis_constr); System.Data.Odbc.OdbcTransaction tx = null; System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(); try { connection.Open(); cmd.Connection = connection; tx = connection.BeginTransaction(); cmd.Transaction = tx; //清空老床位信息 sql = "UPDATE ZY_CWXX Set zyh = '',xm = '',APZ = '',ZT = '空闲' Where zyh = '" + oldzyh + "'"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); //更新病人信息 sql = "UPDATE ZY_ZYBRXX SET CWH='',BQ='" + _bq + "',ks='" + _ks + "',bf='',sfapcw='N' WHERE ZYH='" + oldzyh + "'"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); tx.Commit(); } catch (Exception err) { tx.Rollback(); throw err; } finally { cmd.Dispose(); connection.Close(); } } //这里需要在检查一下这个病人的床位号如果不为空的情况下,在老系统床位表上是不是有信息 Modify By Tany 2015-01-22 string cwZyh = ""; if (oldCwh != "") { sql = "select zyh from zy_cwxx where ks='" + oldPatTb.Rows[0]["ks"].ToString() + "' and cwh='" + oldCwh + "'"; cwZyh = Convertor.IsNull(InFomixDb.GetDataResult(sql), ""); } //如果老系统科室和新系统或者床位不一样,则调用新系统到老系统的转床事件 //if (oldKs != newPatTb.Rows[0]["dept_id"].ToString() || oldCwh != newPatTb.Rows[0]["bed_no"].ToString() || cwZyh != oldzyh) //Modify By Tany 2015-05-05 修正这里的判断,因为新老系统床位名称可能不一致,判断床位的时候,需要通过对应关系去验证床号是否正确 string mapCwh = HisFunctions.ConvertNewhisidToOldHisid(HisFunctions.DataMapType.ZY_BEDDICTION, newPatTb.Rows[0]["bed_id"].ToString(), db); string[] ss = mapCwh.Replace("||", "|").Split("|".ToCharArray()); if (ss.Length > 1) { mapCwh = ss[1]; } if (oldKs != newPatTb.Rows[0]["dept_id"].ToString() || oldCwh != mapCwh || cwZyh != oldzyh) { if (!isTs) { isTs = true; MessageBox.Show("该病人在新系统中的床位与老系统的床位不符,系统将尝试修复老系统数据!\r\n\r\n点击确定后将继续操作......", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } TrasenWS.TrasenWS ws = new TrasenHIS.TrasenWS.TrasenWS(); string strXML = ""; strXML = ws.GetXml("n2oZc.HIS", newPatTb.Rows[0]["inpatient_id"].ToString()); strXML = ws.ExeWebService("n2oZc.HIS", strXML); DataSet dset = HisFunctions.ConvertXmlToDataSet(strXML); if (dset.Tables["HEAD"].Rows.Count > 0) { if (dset.Tables["HEAD"].Rows[0]["ERRCODE"].ToString() == "-1") { throw new Exception("调用WS转床时出现错误:" + dset.Tables["HEAD"].Rows[0]["ERRTEXT"].ToString()); } } } if (isTs) { MessageBox.Show("老系统数据修复完成,将继续完成您的操作!"); } } return(true); } catch (Exception ex) { MessageBox.Show("检查新老系统病人状态时出错,您的操作将不能继续!\r\n\r\n" + ex.Message); return(false); } }