Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <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); //计费成功且返回的信息也成功
        }