/// <summary> /// 根据瓶签号,生成所有信息 /// </summary> /// <param name="labelNo">扫描到的瓶签号</param> /// <param name="chargeRtnValue">计费返回值0=计费失败;1=计费成功</param> /// <param name="chargeMsg">计费补充消息</param> private bool GetLabelResult(string labelNo, short chargeRtnValue, string chargeMsg, string employeeName, out MsgLabelResult msgLabelResult) { msgLabelResult = new MsgLabelResult(); try { msgLabelResult.EmployeeName = employeeName; DataSet dsLableInfo = dbHelp.GetPIVAsDB(GET_LABELINFO + labelNo); if (dsLableInfo.Tables[0].Rows.Count > 0) { msgLabelResult.WardName = dsLableInfo.Tables[0].Rows[0]["WardName"].ToString().Trim(); msgLabelResult.PatientName = dsLableInfo.Tables[0].Rows[0]["PatName"].ToString().Trim(); msgLabelResult.LabelNo = labelNo; msgLabelResult.ChargeResult = chargeRtnValue; msgLabelResult.ChargeMessage = chargeMsg; msgLabelResult.Drugs = GetDrugRowAndMixMethod(dsLableInfo); } return(true); } catch (Exception ex) { InternalLogger.Log.Error("根据瓶签号生成结果出错:" + ex.Message); } return(false); }
/// <summary> /// 收到瓶签收据 /// </summary> /// <returns></returns> public bool GetResultByLabelNo(string labelNo, out string result) { result = string.Empty; try { InternalLogger.Log.Info("收到瓶签号:" + labelNo); bool rtn = false; String labelData = String.Empty; if (IsLogionData(labelNo, out labelData)) //员工登录 { InternalLogger.Log.Debug(labelNo + "被判断为登录信息,因7777开头且长度为22"); MsgLoginResult msgLoginResult = null; rtn = HandleInOut(labelData, out msgLoginResult);//登录处理 if (rtn && msgLoginResult != null) { result = msgLoginResult.ToJson(); } } else if (IsLabelNo(labelNo, out labelData))//只对今天和明天的瓶签计费;并校验瓶签长度和瓶签标识 { InternalLogger.Log.Debug(labelNo + "被判断瓶签数据"); MsgLabelResult msgLabelResult = null; rtn = HandleLabelNo(labelData, out msgLabelResult); if (rtn && msgLabelResult != null) { result = msgLabelResult.ToJson(); } } else { InternalLogger.Log.Warn(labelNo + "被判断为非法Moxa数据,不做处理也不显示"); return(false); //跳出数据接收处理方法 } return(rtn); //登录成功与计费成功都返回rtn } catch (Exception ex) { InternalLogger.Log.Error("接收到Moxa数据,处理出错:" + ex.Message); } return(false); }
/// <summary> /// 处理单个瓶签 /// 瓶签处理的主要目的是计费;计费成功就OK; /// 计费失败需将失败原因获取到;ChargeResult /// </summary> /// <param name="labelData">瓶签数据</param> private bool HandleLabelNo(string labelData, out MsgLabelResult msgLabelResult) { bool bGetLabelResult = false; msgLabelResult = new MsgLabelResult(); string chargeMsg = String.Empty; //调用计费接口,计费错误时返回的错误原因; string chargeRtnValue = "0"; //调用计费接口的返回值,默认0为计费失败;9未知,其他认为计费成功; try { if (currentEmployeeID != string.Empty) //非空就是由药师处于登录状态 { if (IsChecked(labelData)) //脱机表中存在,表示已扫描且计费成功 { chargeMsg = ChargeResult_Const.RESCAN_CHARGE_SUCCESS; //重复扫描,已成功计过费 chargeRtnValue = "1"; //重复扫描,认为计费成功,可配置 } else { if (IsCharge)//根据配置判断是否计费 { InternalLogger.Log.Debug("开始调用计费接口"); chargeRtnValue = charge.Charge(labelData, currentEmployeeID, out chargeMsg); #region 测试 //chargeRtnValue = "1"; //chargeMsg = "计费成功"; #endregion } else { //配置文件中设设置,舱内核对时,不计费;认为成功,但追加日志记录 InternalLogger.Log.Warn("配置文件中设置,在舱内核对时,不计费;系统将此情况认为计费成功"); chargeMsg = ChargeResult_Const.NOTCONFIG_SUCCESS; chargeRtnValue = "1";//将结果设置为成功,UI操作在下面继续处理 } InternalLogger.Log.Debug("计费接口的返回值:" + chargeRtnValue); if (!chargeRtnValue.Trim().Equals("0"))//计费成功,更新值 { UpdateIVStatusAndInsertPZ(currentEmployeeID, labelData); //chargeMsg为接口中返回的值 chargeRtnValue = "1"; //将不等于0的情况,归类为等于1(计费成功) AddTodt(labelData); //标记是否已扫码且计费成功过 } } } else { chargeMsg = ChargeResult_Const.PHARMACIST_LOGOUT; //计费失败 } InternalLogger.Log.Info(String.Format("瓶签号:{0},计费结果:{1}", labelData, chargeMsg)); //这句日志是重要日志,可以据此查询计费结果 } catch (Exception ex) { InternalLogger.Log.Error("处理发送的单个瓶签时出错:" + ex.Message); chargeRtnValue = "0";//统一归类为失败 chargeMsg = ChargeResult_Const.LABELHANDLE_EXCEPTION; } finally { bGetLabelResult = GetLabelResult(labelData, short.Parse(chargeRtnValue), chargeMsg, currentEmployeeName, out msgLabelResult); } return((chargeRtnValue == "1") && bGetLabelResult); //计费成功且返回的信息也成功 }