예제 #1
0
        /// <summary>
        /// 强制核收时创建多付退款单
        /// </summary>
        /// <param name="netpayEntity">支付信息实体</param>
        /// <param name="refundEntity">退款信息实体</param>
        private void CreateRefundInfoForForceCheck(NetPayInfo netpayEntity, SOIncomeRefundInfo refundEntity)
        {
            refundEntity.RefundPoint  = 0;
            refundEntity.RefundReason = 5;     //客户多付款
            refundEntity.HaveAutoRMA  = false; //非物流拒收
            refundEntity.Status       = RefundStatus.Origin;
            refundEntity.OrderType    = RefundOrderType.OverPayment;
            refundEntity.SOSysNo      = netpayEntity.SOSysNo;
            refundEntity.OrderSysNo   = netpayEntity.SOSysNo;

            //查询是否已经存在退款信息
            var refundList = ObjectFactory <SOIncomeRefundProcessor> .Instance.GetListByCriteria(new SOIncomeRefundInfo()
            {
                OrderSysNo = netpayEntity.SOSysNo.Value,
                OrderType  = RefundOrderType.OverPayment
            });

            if (refundList != null && refundList.Count > 0)
            {
                refundEntity.SysNo = refundList[0].SysNo;
                ObjectFactory <SOIncomeRefundProcessor> .Instance.Update(refundEntity);
            }
            else
            {
                refundEntity.PayAmount = netpayEntity.PayAmount;
                ObjectFactory <SOIncomeRefundProcessor> .Instance.Create(refundEntity);
            }
        }
예제 #2
0
        /// <summary>
        /// 审核移仓单
        /// </summary>
        protected virtual void VerifyShiftRequest(NetPayInfo netpayInfo)
        {
            int shiftSysNo = ExternalDomainBroker.GetShiftSysNoBySOSysNo(netpayInfo.SOSysNo.Value);

            if (shiftSysNo > 0)
            {
                try
                {
                    //调用Inventory接口审核移仓单
                    ExternalDomainBroker.VerifyShiftRequest(shiftSysNo);
                    //记录操作日志,该支付单的移仓单审核成功
                    ObjectFactory <ICommonBizInteract> .Instance.CreateOperationLog(
                        GetMessageString("NetPay_Log_VerifyShiftRequestSuccess", ServiceContext.Current.UserSysNo, netpayInfo.SysNo.Value)
                        , ECCentral.BizEntity.Common.BizLogType.Finance_NetPay_Verify
                        , netpayInfo.SysNo.Value
                        , netpayInfo.CompanyCode);
                }
                catch (System.Exception ex)
                {
                    //审核移仓单失败,记录操作日志,该支付单的移仓单审核失败
                    ObjectFactory <ICommonBizInteract> .Instance.CreateOperationLog(
                        GetMessageString("NetPay_Log_VerifyShiftRequestFailed", ServiceContext.Current.UserSysNo, netpayInfo.SysNo.Value, ex.Message)
                        , ECCentral.BizEntity.Common.BizLogType.Finance_NetPay_Verify
                        , netpayInfo.SysNo.Value
                        , netpayInfo.CompanyCode);
                }
            }
        }
예제 #3
0
        public RefundResult Refund(RefundEntity refundEntity)
        {
            RefundResult result = new RefundResult();

            result.IsSync = true;
            NetPayInfo netpayInfo = ObjectFactory <NetPayProcessor> .Instance.GetValidBySOSysNo(refundEntity.SOSysNo);

            string    partner        = AppSettingManager.GetSetting("Invoice", "IPSPartner");
            string    IPSSecurityKey = AppSettingManager.GetSetting("Invoice", "IPSSecurityKey");
            string    sign           = Sign(string.Format("{0}{1}{2}{3}{4}", partner, refundEntity.SOSysNo.ToString(), refundEntity.OrderDate.ToString("yyyyMMdd"), refundEntity.RefundAmt.ToString("f2"), IPSSecurityKey));
            RefundMsg msg            = new IPSPay.ServiceSoapClient().Refund(partner, sign, refundEntity.OrderDate.ToString("yyyyMMdd"), refundEntity.SOSysNo.ToString(), (double)refundEntity.RefundAmt, "");

            if (msg.ErrCode == "0000")
            {
                if (msg.Sign == Sign(string.Format("{0}{1}{2}{3}{4}{5}{6}", partner, msg.TradeBillNo, msg.TradeTime, msg.RealRefundAmount.ToString("f2"), msg.CanRefundAmount.ToString("f2"), msg.RefundBillNo, IPSSecurityKey)))
                {
                    result.Result = true;
                }
                else
                {
                    result.Result  = false;
                    result.Message = "验签失败";
                }
            }
            else
            {
                result.Result  = false;
                result.Message = GetMessage(msg.ErrCode);
                //result.Message += refundEntity.SOSysNo.ToString() + " " + refundEntity.OrderDate.ToString("YYYYMMDD");
            }

            return(result);
        }
예제 #4
0
 /// <summary>
 /// CS审核退款单前预检查
 /// </summary>
 /// <param name="entity"></param>
 protected virtual void PreCheckForCSAudit(SOIncomeRefundInfo entity, SOIncomeRefundInfo info)
 {
     ////创建人,客服审核人,财务审核人不能相同
     //if (entity.CreateUserSysNo == info.AuditUserSysNo)
     //{
     //    ThrowBizException("SOInComeRefund_CSAudit_CreateUserAndAuditUserCanNotSame");
     //}
     if (entity.Status != RefundStatus.Origin)
     {
         ThrowBizException("SOIncomeRefund_CSAudit_CanNotAudit");
     }
     //多付款退款单需要NetPay或邮局电汇审核通过后才能进行审核
     if (entity.OrderType == RefundOrderType.OverPayment)
     {
         NetPayInfo netPayQueryCriteria = new NetPayInfo
         {
             SOSysNo = entity.SOSysNo,
             Status = NetPayStatus.Approved
         };
         List<NetPayInfo> netPayList = ObjectFactory<NetPayProcessor>.Instance.GetListByCriteria(netPayQueryCriteria);
         if (netPayList.Count == 0)
         {
             List<PostPayInfo> postPayList = ObjectFactory<PostPayProcessor>.Instance.GetListBySOSysNoAndStatus(entity.SOSysNo.Value, PostPayStatus.Yes, PostPayStatus.Splited);
             if (postPayList.Count == 0)
             {
                 ThrowBizException("SOIncomeRefund_CSAudit_NoValidNetPayOrPostPay");
             }
         }
     }
 }
예제 #5
0
 /// <summary>
 /// 创建网上支付信息
 /// </summary>
 /// <param name="input">待创建的网上支付信息</param>
 /// <returns>创建后的网上支付信息</returns>
 public virtual NetPayInfo Create(NetPayInfo netpayEntity, SOIncomeRefundInfo refundEntity, bool isForceCheck)
 {
     if (netpayEntity.SOSysNo == null)
     {
         throw new ArgumentNullException("netpayEntity.SOSysNo");
     }
     return(ObjectFactory <NetPayProcessor> .Instance.Create(netpayEntity, refundEntity, isForceCheck));
 }
예제 #6
0
        public NetPayInfo CreateNetPay(CheckNetPayReq request)
        {
            NetPayInfo         netPayInfo = null;
            SOIncomeRefundInfo refundInfo = null;

            request.Convert(out netPayInfo, out refundInfo);
            return(ObjectFactory <NetPayAppService> .Instance.Create(netPayInfo, refundInfo, request.IsForceCheck.Value));
        }
예제 #7
0
파일: NetPayDA.cs 프로젝트: sanlonezhang/ql
        /// <summary>
        /// 创建netpay
        /// </summary>
        /// <param name="entity">netpay实体信息</param>
        /// <returns>创建好的netpay</returns>
        public NetPayInfo Create(NetPayInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("InsertNetPay");

            command.SetParameterValue(entity);
            entity.SysNo = Convert.ToInt32(command.ExecuteScalar());
            return(LoadBySysNo(entity.SysNo.Value));
        }
예제 #8
0
 /// <summary>
 /// 拆分NetPay时更新NetPay
 /// </summary>
 /// <param name="entity"></param>
 public virtual void SplitForSO(NetPayInfo entity)
 {
     if (!entity.SysNo.HasValue)
     {
         throw new ArgumentNullException("entity.SysNo");
     }
     m_NetpayDA.UpdateStatusSplitForSO(entity);
 }
예제 #9
0
        /// <summary>
        /// 创建NetPay
        /// </summary>
        /// <param name="netpayEntity">网上支付实体</param>
        /// <param name="refundEntity">退款实体</param>
        /// <param name="isForceCheck">是否强制核收,如果是强制核收,refundEntity必须要有值</param>
        /// <returns>创建好的netpay实体</returns>
        public virtual NetPayInfo Create(NetPayInfo netpayEntity, SOIncomeRefundInfo refundEntity, bool isForceCheck)
        {
            SOBaseInfo soBaseInfo = ExternalDomainBroker.GetSOBaseInfo(netpayEntity.SOSysNo.Value);

            //创建前预检查
            PreCheckForCreate(netpayEntity, refundEntity, soBaseInfo, isForceCheck);

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.ReadCommitted;
            options.Timeout        = TimeSpan.FromMinutes(2);
            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //Step 1:写入退款信息
                bool isOverpay = netpayEntity.PayAmount > soBaseInfo.ReceivableAmount;
                if (isForceCheck && isOverpay)
                {
                    refundEntity.CompanyCode = soBaseInfo.CompanyCode;
                    CreateRefundInfoForForceCheck(netpayEntity, refundEntity);
                }

                //Step 2:写入网上支付信息
                netpayEntity.Status        = NetPayStatus.Origin;
                netpayEntity.ExternalKey   = m_NetpayDA.GetExternalKeyBySOSysNo(netpayEntity.SOSysNo.Value);
                netpayEntity.MasterSoSysNo = soBaseInfo.SOSplitMaster;
                netpayEntity.CompanyCode   = soBaseInfo.CompanyCode;
                if (string.IsNullOrEmpty(netpayEntity.Note))
                {
                    netpayEntity.Note = "add by newegg employees.";
                }
                netpayEntity = m_NetpayDA.Create(netpayEntity);

                //如果生成netpay记录的订单有母单,则更新netpay的母单信息
                if (soBaseInfo.SOSplitMaster.HasValue && soBaseInfo.SOSplitMaster.Value > 0)
                {
                    var masterSO = ExternalDomainBroker.GetSOBaseInfo(soBaseInfo.SOSplitMaster.Value);
                    m_NetpayDA.UpdateMasterSOAmt(masterSO);
                }

                //发送创建netpay消息
                EventPublisher.Publish(new CreateNetpayMessage()
                {
                    NetpaySysNo      = netpayEntity.SysNo.Value,
                    CurrentUserSysNo = ServiceContext.Current.UserSysNo
                });

                ts.Complete();
            }

            //记录业务Log
            ObjectFactory <ICommonBizInteract> .Instance.CreateOperationLog(
                GetMessageString("NetPay_Log_Create", ServiceContext.Current.UserSysNo, netpayEntity.SysNo)
                , ECCentral.BizEntity.Common.BizLogType.Finance_NetPay_AddVerified
                , netpayEntity.SysNo.Value
                , netpayEntity.CompanyCode);

            return(netpayEntity);
        }
예제 #10
0
파일: NetPayDA.cs 프로젝트: sanlonezhang/ql
        public void UpdateStatusSplitForSO(NetPayInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdateNetPayStatusSplitForSO");

            command.SetParameterValue("@SysNo", entity.SysNo);
            command.SetParameterValue("@Status", entity.Status);

            command.ExecuteNonQuery();
        }
예제 #11
0
        /// <summary>
        /// 作废网上支付
        /// </summary>
        /// <param name="sysNo"></param>
        public virtual void Abandon(int sysNo)
        {
            NetPayInfo netpay = LoadBySysNo(sysNo);

            if (netpay == null)
            {
                ThrowBizException("NetPay_RecordNotExist", sysNo);
            }

            if (netpay.Status != NetPayStatus.Origin)
            {
                ThrowBizException("NetPay_StatusNotAllowAbandon");
            }

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.ReadUncommitted;
            options.Timeout        = TimeSpan.FromMinutes(2);
            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //更新netpay状态为已作废
                m_NetpayDA.UpdateStatus(sysNo, NetPayStatus.Abandon);

                //2012-06-13 fixbug:检查订单是否有多付退款记录,有则将多付退款记录作废
                var overpayRefundList = ObjectFactory <SOIncomeRefundProcessor> .Instance.GetListByCriteria(new SOIncomeRefundInfo()
                {
                    OrderSysNo = netpay.SOSysNo,
                    OrderType  = RefundOrderType.OverPayment,
                    Status     = RefundStatus.Origin
                });

                if (overpayRefundList != null && overpayRefundList.Count > 0)
                {
                    //作废多付退款记录
                    ObjectFactory <ISOIncomeRefundDA> .Instance.UpdateStatus(overpayRefundList[0].SysNo.Value
                                                                             , ServiceContext.Current.UserSysNo, RefundStatus.Abandon, DateTime.Now);
                }

                //发送netpay作废Message
                EventPublisher.Publish <NetpayAbandonedMessage>(new NetpayAbandonedMessage()
                {
                    NetpaySysNo      = sysNo,
                    CurrentUserSysNo = ServiceContext.Current.UserSysNo
                });

                ts.Complete();
            }
            //记录操作日志
            ObjectFactory <ICommonBizInteract> .Instance.CreateOperationLog(
                GetMessageString("NetPay_Log_Abandon", ServiceContext.Current.UserSysNo, netpay.SysNo)
                , ECCentral.BizEntity.Common.BizLogType.Finance_NetPay_Abandon
                , netpay.SysNo.Value
                , netpay.CompanyCode);
        }
예제 #12
0
        /// <summary>
        /// 一单款到发货通过
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="soNetPayinfo"></param>
        private void PassPIASO(SOInfo entity, NetPayInfo soNetPayinfo)
        {
            //Jin:去掉了NETPAY状态需要为Origin的判断,因为前台网站重构后,对于网上支付,银行回调成功后直接就是审核通过的NETPAY和SOIncome
            //if (entity.BaseInfo.SOType != SOType.GroupBuy || soNetPayinfo.Status == NetPayStatus.Origin)
            //{
            //    ExternalDomainBroker.AuditNetPay(soNetPayinfo.SysNo.Value);
            //}
            //还原原始审核人员
            m_auditUserSysNoTemp = m_auditUserSysNo;

            if (entity.BaseInfo.SplitType == SOSplitType.Force || entity.BaseInfo.SplitType == SOSplitType.Customer)
            {
                ObjectFactory <SOProcessor> .Instance.ProcessSO(new SOAction.SOCommandInfo {
                    Command = SOAction.SOCommand.Split, SOInfo = entity, Parameter = new object[] { true }
                });

                m_da.UpdateCheckShippingAuditTypeBySysNo(entity.SysNo.Value, AuditType.Manual, "自动审单通过,自动拆单.");
                m_da.UpdateSO4AuditUserInfo(entity.SysNo.Value, m_auditUserSysNo);
                ObjectFactory <SOLogProcessor> .Instance.WriteSOLog(new SOLogInfo()
                {
                    SOSysNo = entity.BaseInfo.SysNo, OperationType = BizLogType.Sale_SO_Audit, Note = "自动审单通过,自动拆单."
                });
            }
            else
            {
                //更新时需要验证当前的SO状态

                //bool isSuccess = m_da.UpdateSO4PassAutoAudit(entity.SysNo.Value,m_auditUserSysNoTemp);
                ObjectFactory <SOProcessor> .Instance.ProcessSO(new SOAction.SOCommandInfo {
                    Command = SOAction.SOCommand.Audit, SOInfo = entity, Parameter = new object[] { true }
                });

                //if (isSuccess)
                //{
                entity.BaseInfo.Status = SOStatus.WaitingOutStock;
                m_da.UpdateCheckShippingAuditTypeBySysNo(entity.SysNo.Value, AuditType.Auto, "自动审单通过[款到发货]");
                ObjectFactory <SOLogProcessor> .Instance.WriteSOLog(new SOLogInfo()
                {
                    SOSysNo = entity.BaseInfo.SysNo, OperationType = BizLogType.Sale_SO_Audit, Note = "自动审单通过[款到发货]"
                });

                //}
                //else
                //{
                //    ThrowException(entity, "订单不存在或状态已不再是待审核状态");
                //}
                //发送审核邮件
                ObjectFactory <SOProcessor> .Instance.SendMessage(entity, false, false, true);

                //更新自动审核发送邮件的标识
                m_da.AuditSendMailAndUpdateSO(entity.SysNo.Value);
            }
        }
예제 #13
0
        /// <summary>
        /// 赠品订单自动创建
        /// </summary>
        /// <param name="soSysNo">订单编号</param>
        /// <param name="payAmount">支付金额</param>
        /// <param name="payTypeSysNo">支付类型</param>
        /// <param name="companyCode">公司编号</param>
        /// <returns>NetPay信息</returns>
        internal static ECCentral.BizEntity.Invoice.NetPayInfo CreatNetPay(int soSysNo, decimal payAmount, int payTypeSysNo, string companyCode)
        {
            NetPayInfo netpay = new NetPayInfo();

            netpay.SOSysNo        = soSysNo;
            netpay.PayAmount      = payAmount;
            netpay.PayTypeSysNo   = payTypeSysNo;
            netpay.RelatedSoSysNo = soSysNo;
            netpay.CompanyCode    = companyCode;
            netpay.Note           = "赠品订单自动创建";
            netpay.Source         = NetPaySource.Bank;
            return(ObjectFactory <IInvoiceBizInteract> .Instance.CreateNetPay(netpay, null, false));
        }
예제 #14
0
파일: NetPayDA.cs 프로젝트: sanlonezhang/ql
        /// <summary>
        /// 根据查询条件取得netpay列表
        /// </summary>
        /// <param name="query">查询条件</param>
        /// <returns></returns>
        public List <NetPayInfo> GetListByCriteria(NetPayInfo query)
        {
            CustomDataCommand cmd = DataCommandManager.CreateCustomDataCommandFromConfig("GetNetPayList");

            using (DynamicQuerySqlBuilder sb = new DynamicQuerySqlBuilder(cmd.CommandText, cmd, null, "SysNo DESC"))
            {
                sb.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "SysNo", DbType.Int32, "@SysNo", QueryConditionOperatorType.Equal, query.SysNo);
                sb.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "SOSysNo", DbType.Int32, "@SOSysNo", QueryConditionOperatorType.Equal, query.SOSysNo);
                sb.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "Status", DbType.Int32, "@Status", QueryConditionOperatorType.Equal, query.Status);
                cmd.CommandText = sb.BuildQuerySql();
                return(cmd.ExecuteEntityList <NetPayInfo>());
            }
        }
예제 #15
0
 private void map(NetPayInfo oParam, DataRow tempdr)
 {
     oParam.SysNo            = Util.TrimIntNull(tempdr["SysNo"]);
     oParam.SOSysNo          = Util.TrimIntNull(tempdr["SOSysNo"]);
     oParam.PayTypeSysNo     = Util.TrimIntNull(tempdr["PayTypeSysNo"]);
     oParam.PayAmount        = Util.TrimDecimalNull(tempdr["PayAmount"]);
     oParam.Source           = Util.TrimIntNull(tempdr["Source"]);
     oParam.InputTime        = Util.TrimDateNull(tempdr["InputTime"]);
     oParam.InputUserSysNo   = Util.TrimIntNull(tempdr["InputUserSysNo"]);
     oParam.ApproveUserSysNo = Util.TrimIntNull(tempdr["ApproveUserSysNo"]);
     oParam.ApproveTime      = Util.TrimDateNull(tempdr["ApproveTime"]);
     oParam.Note             = Util.TrimNull(tempdr["Note"]);
     oParam.Status           = Util.TrimIntNull(tempdr["Status"]);
 }
예제 #16
0
        /// <summary>
        /// 查询网上支付情况
        /// </summary>
        /// <param name="sosysno">订单编号</param>
        /// <returns>true: 已通过网上支付 / false: 未通过网上支付</returns>
        protected bool IsPayed(int sosysno)
        {
            //查询网上支付情况
            NetPayInfo netpay = NetPayManager.GetInstance().Load(sosysno);

            if (netpay == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
예제 #17
0
        public void Insert(NetPayInfo oParam)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                new NetPayDac().Insert(oParam);

                scope.Complete();
            }
        }
예제 #18
0
        public void Test_Invoice_NetPayEntityClone()
        {
            var now = DateTime.Now;

            NetPayInfo netpayInfo = new NetPayInfo();

            netpayInfo.ApproveTime       = now;
            netpayInfo.ApproveUserSysNo  = 1;
            netpayInfo.ChannelID         = "channel";
            netpayInfo.CompanyCode       = "8601";
            netpayInfo.ExternalKey       = "externalkey";
            netpayInfo.GiftCardPayAmt    = 1000;
            netpayInfo.MasterSoSysNo     = 100000;
            netpayInfo.Note              = "note";
            netpayInfo.OrderAmt          = 1000;
            netpayInfo.PayAmount         = 1000;
            netpayInfo.PayTypeSysNo      = 1;
            netpayInfo.PointPay          = 1000;
            netpayInfo.PrePayAmt         = 1000;
            netpayInfo.RelatedSoSysNo    = 100000;
            netpayInfo.ReviewedTime      = now;
            netpayInfo.ReviewedUserSysNo = 1;
            netpayInfo.SOSysNo           = 100000;
            netpayInfo.Source            = NetPaySource.Bank;
            netpayInfo.Status            = NetPayStatus.Abandon;
            netpayInfo.SysNo             = 1000;

            var cloneNetPayInfo = SerializationUtility.DeepClone <NetPayInfo>(netpayInfo);

            Assert.AreEqual(now, cloneNetPayInfo.ApproveTime);
            Assert.AreEqual(1, cloneNetPayInfo.ApproveUserSysNo);
            Assert.AreEqual("channel", cloneNetPayInfo.ChannelID);
            Assert.AreEqual("8601", cloneNetPayInfo.CompanyCode);
            Assert.AreEqual("externalkey", cloneNetPayInfo.ExternalKey);
            Assert.AreEqual(1000, cloneNetPayInfo.GiftCardPayAmt);
            Assert.AreEqual(100000, cloneNetPayInfo.MasterSoSysNo);
            Assert.AreEqual("note", cloneNetPayInfo.Note);
            Assert.AreEqual(1000, cloneNetPayInfo.OrderAmt);
            Assert.AreEqual(1000, cloneNetPayInfo.PayAmount);
            Assert.AreEqual(1, cloneNetPayInfo.PayTypeSysNo);
            Assert.AreEqual(1000, cloneNetPayInfo.PointPay);
            Assert.AreEqual(1000, cloneNetPayInfo.PrePayAmt);
            Assert.AreEqual(100000, cloneNetPayInfo.RelatedSoSysNo);
            Assert.AreEqual(now, cloneNetPayInfo.ReviewedTime);
            Assert.AreEqual(1, cloneNetPayInfo.ReviewedUserSysNo);
            Assert.AreEqual(100000, cloneNetPayInfo.SOSysNo);
            Assert.AreEqual(NetPaySource.Bank, cloneNetPayInfo.Source);
            Assert.AreEqual(NetPayStatus.Abandon, cloneNetPayInfo.Status);
            Assert.AreEqual(1000, cloneNetPayInfo.SysNo);
        }
예제 #19
0
        public void AddVerified(NetPayInfo oParam, int userSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                this.Insert(oParam);
                this.Verify(oParam.SysNo, userSysNo);

                scope.Complete();
            }
        }
예제 #20
0
        protected void btnEnter_Click(object sender, EventArgs e)
        {
            if (txtTradeNo.Text != string.Empty)
            {
                int          Result  = 0;
                bool         IsAdd   = true;
                int          SOSysNo = Int32.Parse(lblSOID.Text.Substring(1));
                SOAlipayInfo oInfo   = SaleManager.GetInstance().LoadSOAlipay(SOSysNo);
                if (oInfo == null)
                {
                    oInfo               = new SOAlipayInfo();
                    oInfo.SOSysNo       = SOSysNo;
                    oInfo.AlipayTradeNo = txtTradeNo.Text.Trim();
                    Result              = SaleManager.GetInstance().InsertSOAlipay(oInfo);
                    lblResult.Text      = "输入支付宝交易号完成!";
                }
                else
                {
                    IsAdd = false;
                    oInfo.AlipayTradeNo = txtTradeNo.Text.Trim();
                    Result         = SaleManager.GetInstance().UpdateSOAlipay(oInfo);
                    lblResult.Text = "更新支付宝交易号完成!";
                }

                if (Result == 1)
                {
                    SOInfo order = SaleManager.GetInstance().LoadSOMaster(SOSysNo);
                    if (order != null)
                    {
                        if (IsAdd)
                        {
                            NetPayInfo netpay = new NetPayInfo();

                            netpay.SOSysNo      = SOSysNo;
                            netpay.PayTypeSysNo = order.PayTypeSysNo;
                            netpay.InputTime    = DateTime.Now;
                            netpay.Source       = (int)AppEnum.NetPaySource.Bank;
                            netpay.PayAmount    = order.GetTotalAmt();
                            netpay.Status       = (int)AppEnum.NetPayStatus.Origin;
                            netpay.Note         = "支付宝即时到帐付款";
                            NetPayManager.GetInstance().Insert(netpay);
                        }
                    }
                    lblResult.Visible = true;
                }
            }
        }
예제 #21
0
        /// <summary>
        /// 审核netpay预检查
        /// </summary>
        /// <param name="netpayInfo"></param>
        /// <param name="soBaseInfo"></param>
        /// <param name="isForceCheck"></param>
        protected virtual void PreCheckForAudit(NetPayInfo netpayInfo, SOBaseInfo soBaseInfo)
        {
            if (netpayInfo.Status != NetPayStatus.Origin)
            {
                ThrowBizException("NetPay_StatusNotAllowCheck");
            }
            if (soBaseInfo.ReferenceSysNo.HasValue && soBaseInfo.SOType == SOType.GroupBuy)
            {
                //团购正在进行中,请待团购结束后再进行审核   部分失败的团购订单也予以审核通过
                if (soBaseInfo.SettlementStatus != SettlementStatus.Success && soBaseInfo.SettlementStatus != SettlementStatus.PlanFail)
                {
                    ThrowBizException("NetPay_GroupingBuyOrderNotAllowCheck", netpayInfo.SOSysNo);
                }
            }
            if (soBaseInfo.HoldStatus == SOHoldStatus.WebHold)
            {
                ThrowBizException("NetPay_HoldOrderNotAllowCheck", netpayInfo.SOSysNo);
            }

            //输入的订单的支付方式要与订单中的支付方式一致
            if (netpayInfo.PayTypeSysNo != soBaseInfo.PayTypeSysNo)
            {
                ThrowBizException("NetPay_PayTypeNotSameNotAllowCheck");
            }

            //验证订单的付款方式是不是“网上支付”
            if (!IsNetPayType(soBaseInfo.PayTypeSysNo.Value, soBaseInfo.SysNo.Value))
            {
                ThrowBizException("NetPay_SOPayTypeIsNotNet");
            }

            //Nick.Y.Zheng 实收金额与订单金额不相等,且误差超过1分钱,则不通过,否则通过
            //实收金额少于订单金额,不允许核收。
            decimal currPayAmount = netpayInfo.PayAmount.HasValue ? netpayInfo.PayAmount.Value : 0m;

            //if (netpayInfo.PayAmount != soBaseInfo.ReceivableAmount
            //    && Math.Abs(currPayAmount - soBaseInfo.ReceivableAmount) > 0.01m)
            //{
            //    ThrowBizException("NetPay_PayAmoutNotEqualNotAllowCheck");
            //}
            //实收金额少于订单金额,不允许核收。
            if (netpayInfo.PayAmount < soBaseInfo.ReceivableAmount && Math.Abs(currPayAmount - soBaseInfo.ReceivableAmount) > 0.01m)
            {
                ThrowBizException("NetPay_PayAmoutNotEnoughNotAllowCheck");
            }
        }
예제 #22
0
        private void Abandon(NetPayInfo dbInfo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                Hashtable ht = new Hashtable(5);
                ht.Add("SysNo", dbInfo.SysNo);
                ht.Add("Status", (int)AppEnum.NetPayStatus.Abandon);

                new NetPayDac().Update(ht);

                scope.Complete();
            }
        }
예제 #23
0
        public void Verify(int netpaySysNo, int userSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                NetPayInfo dbInfo = Load(netpaySysNo);
                if (dbInfo.Status != (int)AppEnum.NetPayStatus.Origin)
                {
                    throw new BizException("netpay: not origin, can't verify");
                }

                dbInfo.Status = (int)AppEnum.NetPayStatus.Verified;

                Hashtable ht = new Hashtable(5);
                ht.Add("SysNo", dbInfo.SysNo);
                ht.Add("ApproveUserSysNo", userSysNo);
                ht.Add("ApproveTime", DateTime.Now);
                ht.Add("Status", dbInfo.Status);

                new NetPayDac().Update(ht);

                //so income 的唯一性那边会判断的
                SOIncomeInfo oIncome = new SOIncomeInfo();
                oIncome.OrderType       = (int)AppEnum.SOIncomeOrderType.SO;
                oIncome.OrderSysNo      = dbInfo.SOSysNo;
                oIncome.OrderAmt        = dbInfo.PayAmount;
                oIncome.IncomeStyle     = (int)AppEnum.SOIncomeStyle.Advanced;
                oIncome.IncomeAmt       = dbInfo.PayAmount;
                oIncome.IncomeUserSysNo = userSysNo;
                oIncome.IncomeTime      = DateTime.Now;
                oIncome.Status          = (int)AppEnum.SOIncomeStatus.Origin;

                SOIncomeManager.GetInstance().Insert(oIncome);

                scope.Complete();
            }
        }
예제 #24
0
        public NetPayInfo LoadVerified(int soSysNo)
        {
            NetPayInfo         oInfo   = null;
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                string  sql = "select * from finance_netpay where sosysno =" + soSysNo + " and status=" + (int)AppEnum.NetPayStatus.Verified;
                DataSet ds  = SqlHelper.ExecuteDataSet(sql);
                if (Util.HasMoreRow(ds))
                {
                    oInfo = new NetPayInfo();
                    map(oInfo, ds.Tables[0].Rows[0]);
                }
                scope.Complete();
            }
            return(oInfo);
        }
예제 #25
0
        /// <summary>
        /// 构造销售收款单信息
        /// </summary>
        private SOIncomeInfo CreateSOIncomeInfo(NetPayInfo netpayInfo, SOBaseInfo soBaseInfo)
        {
            var soIncomeInfo = new SOIncomeInfo()
            {
                IncomeStyle    = SOIncomeOrderStyle.Advanced,
                OrderType      = SOIncomeOrderType.SO,
                OrderSysNo     = netpayInfo.SOSysNo,
                OrderAmt       = soBaseInfo.SOTotalAmount,
                IncomeAmt      = netpayInfo.PayAmount,
                PrepayAmt      = soBaseInfo.PrepayAmount,
                Status         = SOIncomeStatus.Origin,
                MasterSoSysNo  = soBaseInfo.SOSplitMaster,
                PointPay       = soBaseInfo.PointPay / decimal.Parse(AppSettingManager.GetSetting("Invoice", "PointExChangeRate")),
                GiftCardPayAmt = soBaseInfo.GiftCardPay,
                PayAmount      = netpayInfo.PayAmount,
                CompanyCode    = soBaseInfo.CompanyCode //取订单上的CompanyCode
            };

            //SOIncomeProcessor检查,如果已经存在收款单记录,则不允许创建
            return(ObjectFactory <SOIncomeProcessor> .Instance.Create(soIncomeInfo));
        }
예제 #26
0
        public void SOIncomeAbandon(int soSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                NetPayInfo dbInfo = LoadVerified(soSysNo);

                if (dbInfo != null)
                {
                    if (dbInfo.Status != (int)AppEnum.NetPayStatus.Verified)
                    {
                        throw new BizException("netpay: not verified, can't abandon");
                    }

                    Abandon(dbInfo);
                }
                scope.Complete();
            }
        }
예제 #27
0
        public void ManualAbandon(int netpaySysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                NetPayInfo dbInfo = Load(netpaySysNo);

                if (dbInfo.Status != (int)AppEnum.NetPayStatus.Origin)
                {
                    throw new BizException("netpay: not origin, can't abandon");
                }



                Abandon(dbInfo);

                scope.Complete();
            }
        }
예제 #28
0
        /// <summary>
        /// 根据订单编号作废netpay
        /// </summary>
        /// <param name="soSysNo"></param>
        public virtual void AbandonBySOSysNo(int soSysNo)
        {
            NetPayInfo netpayInfo = GetValidBySOSysNo(soSysNo);

            if (netpayInfo != null)
            {
                TransactionOptions options = new TransactionOptions();
                options.IsolationLevel = IsolationLevel.ReadUncommitted;
                options.Timeout        = TimeSpan.FromMinutes(2);
                using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
                {
                    m_NetpayDA.AbandonBySOSysNo(soSysNo);

                    //发送netpay作废Message
                    EventPublisher.Publish <NetpayAbandonedMessage>(new NetpayAbandonedMessage()
                    {
                        NetpaySysNo      = netpayInfo.SysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    ts.Complete();
                }
            }
        }
예제 #29
0
 /// <summary>
 /// 创建NetPay
 /// </summary>
 /// <param name="netpayEntity">网上支付实体</param>
 /// <param name="refundEntity">退款实体</param>
 /// <param name="isForceCheck">是否强制核收,如果是强制核收,refundEntity必须要有值</param>
 /// <returns>创建好的netpay实体</returns>
 public NetPayInfo CreateNetPay(NetPayInfo netpayEntity, SOIncomeRefundInfo refundEntity, bool isForceCheck)
 {
     return(ObjectFactory <NetPayProcessor> .Instance.Create(netpayEntity, refundEntity, isForceCheck));
 }
예제 #30
0
//		public void UnVerify(NetPayInfo oParam)
//		{
//			TransactionContext ctx =
//				TransactionContextFactory.GetContext(TransactionAffinity.Required);
//			try
//			{
//				ctx.Enter();
//
//				NetPayInfo dbInfo = Load(oParam.SysNo);
//				if ( dbInfo.Status != (int)AppEnum.NetPayStatus.Verified)
//					throw new BizException("netpay: not verified, can't cancel verify");
//
//				oParam.Status = (int)AppEnum.NetPayStatus.Origin;
//
//				Hashtable ht = new Hashtable(5);
//				ht.Add("SysNo", oParam.SysNo);
//				ht.Add("ApproveUserSysNo", oParam.ApproveUserSysNo);
//				ht.Add("ApproveTime", oParam.ApproveTime);
//				ht.Add("Status", oParam.Status);
//
//				new NetPayDac().Update(ht);
//
//				//???????????????????????
//				//SOIncomeManager.GetInstance().Delete((int)AppEnum.SOIncomeOrderType.SO, oParam.SOSysNo);
//
//
//			}
//			catch(Exception ex)
//			{
//				ctx.VoteRollback();
//				throw ex;
//			}
//			finally
//			{
//				ctx.Exit();
//			}
//		}

        public void Import()
        {
            /* 涉及的问题
             * 1 还货记录的处理
             * 2 库存的处理
             * 3 状态的处理
             * 4 还有单据id的对应,这个要特别注意
             */
            if (!AppConfig.IsImportable)
            {
                throw new BizException("Is Importable is false");
            }

            string  sql = " select top 1 sysno from finance_netpay";
            DataSet ds  = SqlHelper.ExecuteDataSet(sql);

            if (Util.HasMoreRow(ds))
            {
                throw new BizException("the table finance_netpay is not empty");
            }

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //因为原来没有inputuser,所以用1
                string sql_old = @"select 
									a.sosysno, a.payamount,
									a.source, a.inputtime,
									con_paytype.newsysno as paytypesysno,
									con_user.newsysno as approveUserSysno,
									a.approveTime,
									a.note,
									a.status,
									'1' as inputusersysno,
									'1' as sysno
								from 
									ipp2003..net_pay as a,
									ippconvert..paytype as con_paytype,
									ippconvert..sys_user as con_user
								where
									a.paytypesysno = con_paytype.oldsysno
									and a.approveusersysno *= con_user.oldsysno
									--and status <>-1
								order by sosysno, a.status desc"                                ;

                DataSet ds_old = SqlHelper.ExecuteDataSet(sql_old);
                if (!Util.HasMoreRow(ds_old))
                {
                    return;
                }

                //int currentSoSysNo = AppConst.IntNull;
                foreach (DataRow dr in ds_old.Tables[0].Rows)
                {
                    /* oldstatus
                     * -1	deleted
                     * 0	origin
                     * 1	aduited
                     *
                     * oldsource
                     * 0 bank insert
                     * 1 employee insert
                     * 导数据的规则是:只插入遇到相同的sosysno的第一个
                     */
                    NetPayInfo oNetPay = new NetPayInfo();
                    map(oNetPay, dr);
//					if ( currenSoSysNo != oNetPay.SOSysNo )
//					{
//						currenSoSysNo = oNetPay.SOSysNo;
//						this.Insert(oNetPay);
//					}
                    this.Insert(oNetPay);
                }


                scope.Complete();
            }
        }