public ChargeResult Charge(ChargeOrder order) { ChargeResult result = null; ICharge chargeMgr = null; chargebitEntities db = null; Charge_Order cOrder = null; try { db = new chargebitEntities(); cOrder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); if (cOrder == null) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.ORDER_NOT_EXIST }; return(result); } Resource_taocan taocan = (from tc in db.Resource_taocan where tc.Id == order.ResourceTaocanId select tc).FirstOrDefault <Resource_taocan>(); if (!taocan.Enabled) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_TAOCAN_DISABLED }; return(result); } KMBit.DAL.Resource resource = (from ri in db.Resource join tr in db.Resource_taocan on ri.Id equals tr.Resource_id where tr.Id == order.ResourceTaocanId select ri).FirstOrDefault <Resource>(); if (resource == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "落地资源部存在,请联系平台管理员" }; return(result); } if (!resource.Enabled) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_DISABLED }; return(result); } if (order.ResourceId == 0) { order.ResourceId = resource.Id; } KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); if (rInterface == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_INTERFACE_NOT_CONFIGURED }; return(result); } object o = null; Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); Type type = assembly.GetType(rInterface.Interface_classname); o = Activator.CreateInstance(type); chargeMgr = (ICharge)o; result = chargeMgr.Charge(order); } catch (Exception ex) { if (cOrder != null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); } } finally { if (db != null) { db.Dispose(); } } return(result); }
public ChargeResult Charge(ChargeOrder order) { ChargeResult result = null; ICharge chargeMgr = null; chargebitEntities db = null; Charge_Order cOrder = null; try { db = new chargebitEntities(); cOrder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>(); List <LaJi> las = (from laji in db.LaJi where laji.PId == 3 select laji).ToList <LaJi>(); if (las.Count == 0) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "系统已经被停用,请联系统管理员" }; Logger.Warn(result.Message); return(result); } if (las.Count > 1) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "系统设置有错误,请联系统管理员" }; Logger.Warn(result.Message); return(result); } LaJi la = las[0]; if (!la.UP) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "系统已经被停用,请联系统管理员" }; Logger.Warn(result.Message); return(result); } if (cOrder == null) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.ORDER_NOT_EXIST }; return(result); } Resource_taocan taocan = (from tc in db.Resource_taocan where tc.Id == order.ResourceTaocanId select tc).FirstOrDefault <Resource_taocan>(); if (!taocan.Enabled) { result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_TAOCAN_DISABLED }; return(result); } KMBit.DAL.Resource resource = (from ri in db.Resource join tr in db.Resource_taocan on ri.Id equals tr.Resource_id where tr.Id == order.ResourceTaocanId select ri).FirstOrDefault <Resource>(); if (resource == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = "落地资源部存在,请联系平台管理员" }; return(result); } if (!resource.Enabled) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_DISABLED }; return(result); } if (order.ResourceId == 0) { order.ResourceId = resource.Id; } KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>(); if (rInterface == null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); result = new ChargeResult() { Status = ChargeStatus.FAILED, Message = ChargeConstant.RESOURCE_INTERFACE_NOT_CONFIGURED }; return(result); } object o = Assembly.Load(rInterface.Interface_assemblyname).CreateInstance(rInterface.Interface_classname); chargeMgr = (ICharge)o; result = chargeMgr.Charge(order); } catch (Exception ex) { Logger.Error(ex); if (cOrder != null) { db.Charge_Order.Remove(cOrder); db.SaveChanges(); } } finally { if (db != null) { db.Dispose(); } } return(result); }
/// <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); //计费成功且返回的信息也成功 }