Exemplo n.º 1
0
        private bool IsRuleMatch(ResponsibleUserInfo responsibleUser, TrackingInfo trackingInfo)
        {
            var soIncomeBL = ObjectFactory <SOIncomeProcessor> .Instance;

            if (trackingInfo.OrderType == SOIncomeOrderType.SO)
            {
                //订单不存在直接抛出异常,这个是数据错误。
                var soInfo = ExternalDomainBroker.GetSOInfo(trackingInfo.OrderSysNo.Value);

                if (responsibleUser.CustomerSysNo == soInfo.BaseInfo.CustomerSysNo ||
                    responsibleUser.ShipTypeSysNo == soInfo.ShippingInfo.ShipTypeSysNo ||
                    responsibleUser.PayTypeSysNo == soInfo.BaseInfo.PayTypeSysNo)
                {
                    return(true);
                }

                //比较收款类型,SO单只有货到付款和款到发货两种。
                if (!responsibleUser.CustomerSysNo.HasValue &&
                    !responsibleUser.ShipTypeSysNo.HasValue &&
                    !responsibleUser.PayTypeSysNo.HasValue &&
                    (int)responsibleUser.IncomeStyle.Value == (int)trackingInfo.IncomeStyle.Value
                    )
                {
                    return(true);
                }
            }
            else
            {
                if (!responsibleUser.CustomerSysNo.HasValue &&
                    !responsibleUser.ShipTypeSysNo.HasValue &&
                    !responsibleUser.PayTypeSysNo.HasValue &&
                    responsibleUser.IncomeStyle == ResponseUserOrderStyle.RefundException)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 审核网上支付
        /// </summary>
        /// <param name="netpaySysNo">netpay系统编号</param>
        public virtual void Audit(int netpaySysNo)
        {
            NetPayInfo netpayInfo = LoadBySysNo(netpaySysNo);

            if (netpayInfo == null)
            {
                ThrowBizException("NetPay_NeyPayRecordNotExist", netpaySysNo);
            }

            //if (netpayInfo.InputUserSysNo != AuditInfo.AuditUserSysNo)
            //{
            //    ThrowBizException("NetPay_InputAndAuditUserCannotSame", netpaySysNo);
            //}

            SOBaseInfo soBaseInfo = ExternalDomainBroker.GetSOBaseInfo(netpayInfo.SOSysNo.Value);

            SOInfo soInfo = ExternalDomainBroker.GetSOInfo(netpayInfo.SOSysNo.Value);

            if (soBaseInfo == null)
            {
                ThrowBizException("NetPay_SORecordNotExist", netpayInfo.SOSysNo);
            }

            //审核前检查
            PreCheckForAudit(netpayInfo, soBaseInfo);

            SOIncomeInfo soIncomeInfo;

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.ReadCommitted;
            options.Timeout        = TimeSpan.FromMinutes(2);

            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //1.创建销售收款
                //如果有主单,则更新主单的收款单金额
                soIncomeInfo = CreateSOIncomeInfo(netpayInfo, soBaseInfo);
                if (soBaseInfo.SOSplitMaster.HasValue && soBaseInfo.SOSplitMaster.Value > 0)
                {
                    var masterSO = ExternalDomainBroker.GetSOBaseInfo(soBaseInfo.SOSplitMaster.Value);
                    ObjectFactory <SOIncomeProcessor> .Instance.UpdateMasterSOAmt(masterSO);
                }

                //2.审核网上支付,将网上支付记录的状态修改为审核通过
                m_NetpayDA.UpdateApproveInfo(netpaySysNo, NetPayStatus.Approved);

                //3.审核财务多付退款记录
                var refundList = ObjectFactory <SOIncomeRefundProcessor> .Instance.GetListByCriteria(new SOIncomeRefundInfo()
                {
                    OrderSysNo = soIncomeInfo.OrderSysNo.Value,
                    OrderType  = RefundOrderType.OverPayment,
                    Status     = RefundStatus.Origin
                });

                SOIncomeRefundInfo overpayRefund = null;
                if (refundList != null && refundList.Count > 0)
                {
                    overpayRefund = refundList[0];
                }
                if (overpayRefund != null)
                {
                    //如果是现金退款,则退款信息自动审核通过
                    if (overpayRefund.RefundPayType == RefundPayType.CashRefund)
                    {
                        overpayRefund.Status = RefundStatus.Audit;
                        ObjectFactory <SOIncomeRefundProcessor> .Instance.Update(overpayRefund);
                    }
                    //创建财务负收款单
                    overpayRefund.PayAmount = netpayInfo.PayAmount;
                    ObjectFactory <SOIncomeProcessor> .Instance.CreateNegative(overpayRefund);
                }

                //发送netpay审核完成Message

                ts.Complete();
            }
            //待办事项通知,异常不处理,不影响正常业务
            try
            {
                EventPublisher.Publish <InvoiceNetpayAuditedMessage>(new InvoiceNetpayAuditedMessage()
                {
                    SoSysNo        = netpayInfo.SOSysNo.Value,
                    MerchantSysNo  = soInfo.Merchant.SysNo.GetValueOrDefault(),
                    SOType         = (int)soInfo.BaseInfo.SOType,
                    ReferenceSysNo = soInfo.BaseInfo.ReferenceSysNo ?? 0,
                    AuditUserName  = ServiceContext.Current.UserDisplayName,
                    AuditUserSysNo = ServiceContext.Current.UserSysNo,
                    NetpaySysNo    = netpayInfo.SysNo.Value,
                    SplitType      = (int)soInfo.BaseInfo.SplitType
                });
            }
            catch (Exception ex)
            {
                string ere = ex.Message;
            }
            //记录操作日志,用户审核了网上收款单
            ObjectFactory <ICommonBizInteract> .Instance.CreateOperationLog(
                GetMessageString("NetPay_Log_Audit", ServiceContext.Current.UserSysNo, netpaySysNo)
                , ECCentral.BizEntity.Common.BizLogType.Finance_NetPay_Verify
                , soIncomeInfo.SysNo.Value
                , soIncomeInfo.CompanyCode);

            //4、审核移仓单
            VerifyShiftRequest(netpayInfo);
            //库存模式同步送货单给ERP,此处仅限在线支付。货到的在订单审核时会发送
            if (soBaseInfo.PayWhenReceived == false)
            {
                SyncSHD(netpayInfo.SOSysNo.Value);
            }
        }
Exemplo n.º 3
0
        protected virtual string GetResponsibleUserName(TrackingInfo entity)
        {
            if (!entity.OrderSysNo.HasValue)
            {
                throw new ArgumentNullException("entity.OrderSysNo");
            }

            if (!entity.OrderType.HasValue)
            {
                throw new ArgumentNullException("entity.OrderType");
            }

            var allResponseUsers = GetAllResponsibleUsers(entity.CompanyCode);

            //fixbug:Dictionary键重复问题
            //原来的IPP在配置责任人的时候有bug,不能判断勾选了“特殊责任人”,但是实际条件又不满足“特殊责任人”的情况,导致生成重复的责任人数据(配送方式、支付方式、客户编号相同的数据)。
            //ECCentral不会产生这样的数据,但为了兼容之前的数据,作出下面的调整。
            var vipDict = allResponseUsers.Where(x => x.CustomerSysNo.HasValue)
                          .GroupBy(g => g.CustomerSysNo).ToDictionary(x => x.Key, x => x.FirstOrDefault());

            var shipTypeDict = allResponseUsers.Where(x => x.ShipTypeSysNo.HasValue)
                               .GroupBy(g => g.ShipTypeSysNo).ToDictionary(x => x.Key, x => x.FirstOrDefault());

            var payTypeDict = allResponseUsers.Where(x => x.PayTypeSysNo.HasValue)
                              .GroupBy(g => g.PayTypeSysNo).ToDictionary(x => x.Key, x => x.FirstOrDefault());

            var incomeStyleDict = allResponseUsers.Where(x => x.IncomeStyle.HasValue &&
                                                         !x.PayTypeSysNo.HasValue &&
                                                         !x.ShipTypeSysNo.HasValue &&
                                                         !x.CustomerSysNo.HasValue &&
                                                         !x.SourceType.HasValue).ToDictionary(x => x.IncomeStyle);

            if (entity.OrderType == SOIncomeOrderType.SO)
            {
                var soInfo = ExternalDomainBroker.GetSOInfo(entity.OrderSysNo.Value);

                if (soInfo == null)
                {
                    ThrowBizException("TrackingInfo_NotExistSORecord", entity.OrderSysNo);
                }

                var soIncomeInfo = ObjectFactory <SOIncomeProcessor> .Instance.GetListByCriteria(null, soInfo.SysNo, SOIncomeOrderType.SO, null)
                                   .Select(s => s).FirstOrDefault();

                var netpayInfo = ObjectFactory <NetPayProcessor> .Instance.GetListByCriteria(
                    new NetPayInfo()
                {
                    SOSysNo = soInfo.SysNo,
                }).Where(w => w.Status > NetPayStatus.Abandon).Select(s => s).FirstOrDefault();

                //责任人来源方式
                ResponsibleSource?souceType = null;
                if (soIncomeInfo.IncomeStyle == SOIncomeOrderStyle.Advanced)
                {
                    if (netpayInfo.Source == NetPaySource.Bank)
                    {
                        souceType = ResponsibleSource.NetPay;
                    }
                    else
                    {
                        souceType = ResponsibleSource.Manual;
                    }
                }

                //款到发货
                if (soIncomeInfo.IncomeStyle == SOIncomeOrderStyle.Advanced)
                {
                    #region CRL10309 By Kilin 根据来源方式(网关、手动)匹配责任人

                    //根据来源方式匹配
                    ResponsibleUserInfo responsibleUser = allResponseUsers
                                                          .Where(w => w.IncomeStyle == ResponseUserOrderStyle.Advanced &&
                                                                 w.SourceType.HasValue &&
                                                                 souceType.HasValue &&
                                                                 w.SourceType == souceType.Value)
                                                          .Select(s => s)
                                                          .FirstOrDefault();

                    if (responsibleUser != null)
                    {
                        return(responsibleUser.ResponsibleUserName);
                    }

                    //如果是 银行电汇
                    if (soInfo.BaseInfo.PayTypeSysNo.HasValue)
                    {
                        if (payTypeDict.ContainsKey(soInfo.BaseInfo.PayTypeSysNo.Value))
                        {
                            return(payTypeDict[soInfo.BaseInfo.PayTypeSysNo.Value].ResponsibleUserName);
                        }
                    }

                    //最后一步取支付方式和来源方式都为空的数据
                    responsibleUser = allResponseUsers
                                      .Where(w => w.IncomeStyle == ResponseUserOrderStyle.Advanced &&
                                             !w.PayTypeSysNo.HasValue &&
                                             !w.SourceType.HasValue)
                                      .Select(s => s)
                                      .FirstOrDefault();

                    if (responsibleUser != null)
                    {
                        return(responsibleUser.ResponsibleUserName);
                    }

                    #endregion CRL10309 By Kilin 根据来源方式(网关、手动)匹配责任人
                }
                //货到付款
                else if (soIncomeInfo.IncomeStyle == SOIncomeOrderStyle.Normal)
                {
                    //优先按照客户编号匹配责任人
                    if (vipDict.ContainsKey(soInfo.BaseInfo.CustomerSysNo.Value))
                    {
                        return(vipDict[soInfo.BaseInfo.CustomerSysNo.Value].ResponsibleUserName);
                    }

                    //其次是按照配送方式匹配责任人
                    if (shipTypeDict.ContainsKey(soInfo.ShippingInfo.ShipTypeSysNo.Value))
                    {
                        return(shipTypeDict[soInfo.ShippingInfo.ShipTypeSysNo.Value].ResponsibleUserName);
                    }
                }

                ResponseUserOrderStyle incomeStyle = ResponseUserOrderStyle.Normal;
                if (!soInfo.BaseInfo.PayWhenReceived.Value)
                {
                    incomeStyle = ResponseUserOrderStyle.Advanced;
                }

                //最后按照是否货到付款确定责任人
                if (incomeStyleDict.ContainsKey(incomeStyle))
                {
                    return(incomeStyleDict[incomeStyle].ResponsibleUserName);
                }
            }
            else
            {
                if (incomeStyleDict.ContainsKey(ResponseUserOrderStyle.RefundException))
                {
                    return(incomeStyleDict[ResponseUserOrderStyle.RefundException].ResponsibleUserName);
                }
            }
            return(string.Empty);
        }
Exemplo n.º 4
0
        /// <summary>
        /// CS审核退款单
        /// </summary>
        public virtual void CSAudit(SOIncomeRefundInfo info)
        {
            var entity = LoadBySysNo(info.SysNo.Value);

            PreCheckForCSAudit(entity, info);

            var soEntity = ExternalDomainBroker.GetSOInfo(entity.SOSysNo.Value);

            //判断订单是否是【增票订单】
            if (soEntity == null)
            {
                //ThrowBizException("没有找到对应的订单");
                ThrowBizException("SOIncomeRefund_OrderNotFound");
            }
            //add by norton 2012-11-7

            {
                if (!soEntity.InvoiceInfo.IsVAT.Value)
                {
                    //不是【增票订单】,状态直接改为【已审核】
                    using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
                    {
                        var flag = m_SOIncomeRefundDA.UpdateStatus(entity.SysNo.Value, ServiceContext.Current.UserSysNo, RefundStatus.Audit, DateTime.Now);
                        if (flag)
                        {
                            PassAudit(entity);
                        }


                        //发送cs审核退款审核Message
                        EventPublisher.Publish(new RefundCSAuditMessage()
                        {
                            RefundSysNo = entity.SysNo.Value,
                            CurrentUserSysNo = ServiceContext.Current.UserSysNo
                        });
                        ts.Complete();
                    }
                    //记录操作日志
                    ObjectFactory<ICommonBizInteract>.Instance.CreateOperationLog(
                        GetMessageString("SOIncomeRefund_Log_CSAudit", ServiceContext.Current.UserSysNo, entity.SysNo)
                       , BizLogType.AuditRefund_Update
                       , entity.SysNo.Value
                       , entity.CompanyCode);
                }
                else
                {
                    //是【增票订单】,状态改为【待财务审核】
                    using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
                    {
                        m_SOIncomeRefundDA.UpdateStatus(entity.SysNo.Value, ServiceContext.Current.UserSysNo, RefundStatus.WaitingFinAudit, DateTime.Now);

                        //发送cs审核退款审核Message
                        EventPublisher.Publish(new RefundCSAuditMessage()
                        {
                            RefundSysNo = entity.SysNo.Value,
                            CurrentUserSysNo = ServiceContext.Current.UserSysNo
                        });
                        ts.Complete();
                    }

                    ObjectFactory<ICommonBizInteract>.Instance.CreateOperationLog(
                        GetMessageString("SOIncomeRefund_Log_CSAuditIsVAT", ServiceContext.Current.UserSysNo, entity.SysNo)
                        , BizLogType.AuditRefund_Update
                        , entity.SysNo.Value
                        , entity.CompanyCode);
                }
            }
        }