Exemple #1
0
        internal static void ProcessOrderRefundment(RefundFailedRecord refundInfo)
        {
            var refundBill = DistributionQueryService.QueryNormalRefundBill(refundInfo.ApplyformId);

            if (refundBill != null)
            {
                var refundResults = Refund(refundBill, refundInfo.BusinessType);
                if (refundResults.Any(item => item.Success))
                {
                    var purchaserSucceed = refundBill.Purchaser.Success;
                    DistributionProcessService.NormalRefundSuccess(refundBill, refundResults);
                    using (var command = Order.Repository.Factory.CreateCommand()) {
                        command.BeginTransaction();
                        try {
                            var distributionRepository = Order.Repository.Factory.CreateDistributionRepository(command);
                            distributionRepository.UpdateRefundBillForRefundSuccess(refundBill);
                            command.CommitTransaction();
                        } catch (Exception ex) {
                            command.RollbackTransaction();
                            LogService.SaveExceptionLog(ex, "交易分润退款");
                            throw;
                        }
                    }
                    if (!purchaserSucceed && refundBill.Purchaser.Success)
                    {
                        var applyform = ApplyformQueryService.QueryRefundOrScrapApplyform(refundInfo.ApplyformId);
                        var notifier  = new Order.Notify.RefundApplyformNotifier(applyform);
                        notifier.RefundSuccess();
                    }
                }
            }
        }
Exemple #2
0
        internal static void ProcessPostponeRefundment(RefundFailedRecord refundInfo)
        {
            var refundBill = DistributionQueryService.QueryPostponeRefundBill(refundInfo.ApplyformId);

            if (refundBill != null)
            {
                var refundResult = Refund(refundInfo.OrderId, refundBill);
                if (refundResult.Success)
                {
                    DistributionProcessService.PostponeRefundSuccess(refundBill, refundResult.RefundTime.Value);
                    using (var command = Order.Repository.Factory.CreateCommand()) {
                        command.BeginTransaction();
                        try {
                            var distributionRepository = Order.Repository.Factory.CreateDistributionRepository(command);
                            distributionRepository.UpdateRefundBillForRefundSuccess(refundBill);
                            command.CommitTransaction();
                        } catch (Exception ex) {
                            command.RollbackTransaction();
                            LogService.SaveExceptionLog(ex, "申请单退款");
                            throw;
                        }
                    }
                }
            }
        }
Exemple #3
0
        public void Update(RefundFailedRecord record)
        {
            var sql = "INSERT INTO dbo.T_RefundFailedInfo ErrorMsg=@ErrorMsg WHERE ApplyformId=@ApplyformId";

            using (var dbOperator = new DbOperator(Provider, ConnectionString)) {
                dbOperator.AddParameter("ApplyformId", record.ApplyformId);
                dbOperator.AddParameter("ErrorMsg", record.RefundFailedInfo);
                dbOperator.ExecuteNonQuery(sql);
            }
        }
Exemple #4
0
        public void Save(RefundFailedRecord record)
        {
            var sql = "IF EXISTS(SELECT NULL FROM dbo.T_RefundFailedInfo WHERE ApplyformId=@ApplyformId) "
                      + "UPDATE dbo.T_RefundFailedInfo SET ErrorMsg=@ErrorMsg WHERE ApplyformId=@ApplyformId "
                      + "ELSE INSERT INTO dbo.T_RefundFailedInfo (OrderId,ApplyformId,BusinessType,PayTradeNo,RefundTime,ErrorMsg) VALUES "
                      + "(@OrderId,@ApplyformId,@BusinessType,@PayTradeNo,@RefundTime,@ErrorMsg)";

            using (var dbOperator = new DbOperator(Provider, ConnectionString)) {
                dbOperator.AddParameter("OrderId", record.OrderId);
                dbOperator.AddParameter("ApplyformId", record.ApplyformId);
                dbOperator.AddParameter("BusinessType", (byte)record.BusinessType);
                dbOperator.AddParameter("PayTradeNo", record.PayTradeNo);
                dbOperator.AddParameter("RefundTime", record.RefundTime);
                dbOperator.AddParameter("ErrorMsg", record.RefundFailedInfo);
                dbOperator.ExecuteNonQuery(sql);
            }
        }
Exemple #5
0
        internal static void ProcessTradeRefundemnt(RefundFailedRecord refundInfo)
        {
            //if(refundInfo.BusinessType == RefundBusinessType.PayTimeout) {
            //    var order = OrderQueryService.QueryOrder(refundInfo.OrderId);
            //    if(order != null) {
            //        TradeRefund(order, refundInfo.PayTradeNo);
            //    }
            //    return;
            //}
            var refundBill = DistributionQueryService.QueryNormalRefundBill(refundInfo.ApplyformId);

            if (refundBill != null)
            {
                var refundResult = TradeRefund(refundBill, refundInfo.BusinessType);
                if (refundResult != null && refundResult.Success)
                {
                    DistributionProcessService.NormalRefundSuccess(refundBill, new[] { refundResult });
                    using (var command = Order.Repository.Factory.CreateCommand()) {
                        command.BeginTransaction();
                        try {
                            var distributionRepository = Order.Repository.Factory.CreateDistributionRepository(command);
                            distributionRepository.UpdateRefundBillForRefundSuccess(refundBill);
                            command.CommitTransaction();
                        } catch (Exception ex) {
                            command.RollbackTransaction();
                            LogService.SaveExceptionLog(ex, "交易退款");
                            throw;
                        }
                        var order = OrderQueryService.QueryOrder(refundInfo.OrderId);
                        //发取消出票退款成功通知
                        var notifier = new Order.Notify.OrderNotifier(order);
                        notifier.SendRefundSuccessNotify();
                    }
                }
            }
        }