Exemple #1
0
        public async Task <Result> ConfirmApply([FromBody] AdminRefundConfirmApplyRequest request)
        {
            var returnApply = await _returnApplyRepository.Query()
                              .Include(e => e.OrderItem)
                              .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (returnApply == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (returnApply.Status != ReturnAuditStatus.NotAudit)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前申请不允许修改状态"));
            }

            var address = await _addressRepository.Query()
                          .Include(e => e.Province)
                          .Include(e => e.City)
                          .Include(e => e.Area)
                          .FirstOrDefaultAsync(e => e.Id == request.RefundAddressId);

            if (address == null)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "无效地址"));
            }

            var returnAddress = new ReturnAddress
            {
                ReturnApplyId = returnApply.Id,
                AreaName      = address.Area.Name,
                CityName      = address.City.Name,
                Createat      = DateTime.Now,
                DetailInfo    = address.DetailInfo,
                PostalCode    = address.PostalCode.ToString(),
                ProvinceName  = address.Province.Name,
                Remarks       = request.Remarks,
                TelNumber     = address.TelNumber,
                UserName      = address.UserName,
            };

            returnApply.Status           = ReturnAuditStatus.Agree;
            returnApply.AuditMessage     = request.Remarks;
            returnApply.AuditTime        = DateTime.Now;
            returnApply.OrderItem.Status = OrderItemStatus.ConfirmApply;

            _returnApplyRepository.Update(returnApply, false);
            using (var transaction = _returnApplyRepository.BeginTransaction())
            {
                await _returnApplyRepository.SaveAsync();

                await _refundAddressRepository.InsertAsync(returnAddress);

                transaction.Commit();
            }

            return(Result.Ok());
        }
Exemple #2
0
        public async Task <Result> Cancel([FromBody] AdminWithdrawalCancelRequest request)
        {
            var apply = await _withdrawalHistoryRepository.FirstOrDefaultAsync(request.Id);

            if (apply == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (apply.Status != WithdrawalStatus.Apply)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前申请状态不允许确认"));
            }

            apply.Status      = WithdrawalStatus.Failed;
            apply.Description = request.Message;
            apply.Message     = request.Message;

            _withdrawalHistoryRepository.Update(apply, false);

            using (var transaction = _withdrawalHistoryRepository.BeginTransaction())
            {
                await _withdrawalHistoryRepository.SaveAsync();

                await _customerManager.UpdateAssets(apply.CustomerId, 0, apply.Total, -apply.ReservedAmount, "提现失败返回金额");

                transaction.Commit();
            }

            return(Result.Ok());
        }
        /// <summary>
        /// 确认收货
        /// </summary>
        /// <param name="shipmentId"></param>
        /// <returns></returns>
        public async Task <Result> Confirm(int shipmentId)
        {
            var shipment = await _shipmentRepository.Query()
                           .Include(e => e.ShipmentOrderItems).ThenInclude(e => e.OrderItem).ThenInclude(e => e.CommissionHistory)
                           .FirstOrDefaultAsync(e => e.Id == shipmentId);

            if (shipment == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }

            if (shipment.ShippingStatus == ShippingStatus.Complete)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前订单已完成确认收货"));
            }
            if (shipment.ShippingStatus != ShippingStatus.Shipped)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前订单状态不允许确认收货"));
            }

            shipment.ShippingStatus = ShippingStatus.Complete;
            shipment.CompleteTime   = DateTime.Now;

            var orderItems      = shipment.ShipmentOrderItems.Select(e => e.OrderItem);
            var totalCommission = 0;
            var states          = new[] { OrderItemStatus.ApplyFaild, OrderItemStatus.Shipped };

            foreach (var item in orderItems)
            {
                if (!states.Contains(item.Status))
                {
                    continue;
                }
                item.Status           = OrderItemStatus.Complete;
                item.CompleteTime     = DateTime.Now;
                item.WarrantyDeadline = DateTime.Now.AddYears(1);

                if (item.CommissionHistory != null)
                {
                    item.CommissionHistory.Status = CommissionStatus.Complete;
                    totalCommission += item.CommissionHistory.Commission;
                }
            }

            _shipmentRepository.Update(shipment, false);

            using (var transaction = _shipmentRepository.BeginTransaction())
            {
                await _shipmentRepository.SaveAsync();

                if (totalCommission > 0)
                {
                    var parentUser = await _customerRelationRepository.Query().FirstOrDefaultAsync(e => e.ChildrenId == shipment.CustomerId && e.Level == 1);

                    if (parentUser != null)
                    {
                        await _customerManager.UpdateAssets(parentUser.ParentId, -totalCommission, totalCommission, "返佣金");
                    }
                }

                transaction.Commit();
            }

            return(Result.Ok());
        }
        public async Task <Result> Edit(int id, [FromBody] AdminGoodsCreateRequest request)
        {
            var goods = await _goodsRepository.Query()
                        .Include(e => e.GoodsMedias)
                        .Include(e => e.Childrens).ThenInclude(e => e.OptionCombinations)
                        .Include(e => e.Childrens)
                        .Include(e => e.OptionValues).ThenInclude(e => e.Option)
                        .FirstOrDefaultAsync(e => e.Id == id);

            if (goods == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }

            var goodsMedias = new List <GoodsMedia>();

            if (request.GoodsMediaIds != null && request.GoodsMediaIds.Count > 0)
            {
                foreach (var mediaId in request.GoodsMediaIds)
                {
                    goodsMedias.Add(new GoodsMedia(mediaId));
                }
            }

            goods.Name             = request.Name;
            goods.Description      = request.Description;
            goods.Price            = request.Price;
            goods.ThumbnailImageId = request.ThumbnailImageId;
            goods.DisplayOrder     = request.DisplayOrder;
            goods.CityDiscount     = request.CityDiscount;
            goods.BranchDiscount   = request.BranchDiscount;
            goods.GoodsMedias      = goodsMedias;

            if (request.IsPublished)
            {
                if (!goods.IsPublished)
                {
                    goods.IsPublished = request.IsPublished;
                    goods.PublishedOn = DateTime.Now;
                }
            }
            else
            {
                goods.PublishedOn = null;
                goods.IsPublished = false;
            }

            var optionValues = new List <GoodsOptionValue>();
            var options      = request.Options.Distinct();

            foreach (var option in options)
            {
                foreach (var item in option.Values.Distinct())
                {
                    var ov = goods.OptionValues.FirstOrDefault(c => c.OptionId == option.Id && c.Value == item.Value);
                    if (ov == null)
                    {
                        optionValues.Add(new GoodsOptionValue(option.Id, item.Value, item.DisplayOrder));
                    }
                    else
                    {
                        ov.DisplayOrder = item.DisplayOrder;
                        optionValues.Add(ov);
                    }
                }
            }
            goods.OptionValues = optionValues;

            var variations = request.Variations.Distinct();
            var childrens  = new List <Goods>();

            foreach (var variation in variations)
            {
                Goods child = null;
                if (variation.Id > 0)
                {
                    child = goods.Childrens.FirstOrDefault(e => e.Id == variation.Id);
                }

                if (child == null)
                {
                    var optionCombinations = new List <GoodsOptionCombination>();
                    var coms = variation.OptionCombinations.Distinct();
                    foreach (var combination in coms)
                    {
                        if (!goods.OptionValues.Any(c => c.OptionId == combination.OptionId))
                        {
                            return(Result.Fail(ResultCodes.RequestParamError, "商品组合中的选项不存在"));
                        }
                        if (!goods.OptionValues.Any(c => c.Value == combination.Value))
                        {
                            return(Result.Fail(ResultCodes.RequestParamError, "商品组合中的选项值不存在"));
                        }
                        if (optionCombinations.Any(c => c.OptionId == combination.OptionId && c.Value == combination.Value))
                        {
                            continue;
                        }

                        optionCombinations.Add(new GoodsOptionCombination
                        {
                            OptionId     = combination.OptionId,
                            Value        = combination.Value,
                            DisplayOrder = combination.DisplayOrder,
                            Createat     = DateTime.Now
                        });
                    }

                    child = new Goods
                    {
                        Name               = goods.Name + variation.NormalizedName,
                        NormalizedName     = variation.NormalizedName,
                        Price              = variation.Price,
                        HasOptions         = false,
                        IsVisible          = true,
                        StockQuantity      = variation.StockQuantity,
                        Createat           = DateTime.Now,
                        OptionCombinations = optionCombinations
                    };
                }
                else
                {
                    child.Name           = request.Name + variation.NormalizedName;
                    child.NormalizedName = variation.NormalizedName;
                    child.Price          = variation.Price;
                    child.StockQuantity  = variation.StockQuantity;
                }
                childrens.Add(child);
            }
            var deleteChildrens = goods.Childrens.Where(x => variations.All(c => c.Id != x.Id));

            foreach (var deleteChild in deleteChildrens)
            {
                _goodsRepository.Remove(deleteChild, false);
            }

            goods.Childrens = childrens;

            if (!goods.IsPublished)
            {
                foreach (var item in goods.Childrens.Where(e => e.IsPublished))
                {
                    item.IsPublished = false;
                    item.PublishedOn = null;
                }
            }

            _goodsRepository.Update(goods, false);

            using (var transaction = _goodsRepository.BeginTransaction())
            {
                await _goodsRepository.SaveAsync();

                transaction.Commit();
            }

            return(Result.Ok());
        }
        public async Task <Result> Edit([FromBody] AdminOrderEditRequest request)
        {
            var order = await _orderRepository.Query()
                        .Include(e => e.OrderItems).ThenInclude(e => e.CommissionHistory)
                        .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (order == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            var status = new[] { OrderStatus.Closed, OrderStatus.PaymentReceived, OrderStatus.Complete };

            if (status.Contains(order.OrderStatus))
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前订单状态不允许修改"));
            }

            var totalCommission = 0;
            var totalAmount     = 0;
            var commissions     = order.OrderItems.Where(e => e.CommissionHistory != null).Select(e => e.CommissionHistory);

            if (commissions.Count() > 0)
            {
                foreach (var item in commissions)
                {
                    if (order.IsFirstOrder)
                    {
                        totalAmount        += item.Commission;
                        item.Status         = CommissionStatus.Complete;
                        item.SettlementTime = DateTime.Now;
                    }
                    else
                    {
                        item.Status      = CommissionStatus.PendingSettlement;
                        totalCommission += item.Commission;
                    }
                }
            }

            order.PaymentType   = request.PaymentType;
            order.PaymentMethod = request.PaymentMethod;
            order.PaymentTime   = DateTime.Now;
            order.PaymentFee    = order.ActuallyAmount;
            order.OrderStatus   = OrderStatus.PaymentReceived;

            _orderRepository.Update(order, false);

            using (var transaction = _orderRepository.BeginTransaction())
            {
                await _orderRepository.SaveAsync();

                if (totalCommission > 0 || totalAmount > 0)
                {
                    var parentId = commissions.Select(e => e.CustomerId).FirstOrDefault();
                    await _customerManager.UpdateAssets(parentId, totalCommission, totalAmount, "下级首单返佣金");
                }

                if (!string.IsNullOrEmpty(order.ExtendParams))
                {
                    var result = Enum.TryParse <PartnerRole>(order.ExtendParams, true, out var role);
                    if (result)
                    {
                        await _customerRepository.UpdateProperyAsync(new Customer
                        {
                            Id   = order.CustomerId,
                            Role = role
                        }, nameof(Customer.Role));
                    }
                }

                transaction.Commit();
            }

            return(Result.Ok());
        }
        public async Task <Result> Address(ShipmentAddressRequest request)
        {
            var shipment = await _shipmentRepository.Query()
                           .Include(e => e.ShipmentOrderItems).ThenInclude(e => e.OrderItem)
                           .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (shipment == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }

            ShippingAddress shippingAddress = null;

            if (request.ShippingAddressId > 0)
            {
                var address = await _customerAddressRepository.Query()
                              .Include(e => e.Province)
                              .Include(e => e.City)
                              .Include(e => e.Area)
                              .FirstOrDefaultAsync(e => e.Id == request.ShippingAddressId);

                if (address == null)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, "送货地址不存在"));
                }

                shippingAddress = new ShippingAddress
                {
                    ShipmentId   = request.Id,
                    PostalCode   = address.PostalCode.ToString(),
                    ProvinceName = address.Province.Name,
                    CityName     = address.City.Name,
                    AreaName     = address.Area.Name,
                    DetailInfo   = address.DetailInfo,
                    TelNumber    = address.TelNumber,
                    UserName     = address.UserName,
                    Createat     = DateTime.Now
                };
            }
            else if (request.ShippingAddress != null && !string.IsNullOrEmpty(request.ShippingAddress.UserName))
            {
                shippingAddress = new ShippingAddress
                {
                    ShipmentId   = request.Id,
                    PostalCode   = request.ShippingAddress.PostalCode,
                    ProvinceName = request.ShippingAddress.ProvinceName,
                    CityName     = request.ShippingAddress.CityName,
                    AreaName     = request.ShippingAddress.CountyName,
                    DetailInfo   = request.ShippingAddress.DetailInfo,
                    TelNumber    = request.ShippingAddress.TelNumber,
                    UserName     = request.ShippingAddress.UserName,
                    Createat     = DateTime.Now
                };
            }
            else
            {
                return(Result.Fail(ResultCodes.RequestParamError, "请选择送货地址"));
            }

            var orderItems = shipment.ShipmentOrderItems.Select(e => e.OrderItem);
            var goodsIds   = orderItems.Select(e => e.GoodsItemId);
            var goodses    = await _goodsRepository.Query().Where(e => goodsIds.Contains(e.Id)).ToListAsync();

            foreach (var item in orderItems)
            {
                var goods = goodses.FirstOrDefault(e => e.Id == item.GoodsItemId);
                if (goods == null)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, "商品不存在"));
                }
                if (goods.ParentId == null)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, "选择的商品不是有效的商品"));
                }
                if (goods.StockQuantity <= 0)
                {
                    return(Result.Fail(ResultCodes.RequestParamError, $"商品{goods.Name} {goods.NormalizedName} 库存不足"));
                }
                //减库存
                goods.StockQuantity -= item.Quantity;

                item.Status = OrderItemStatus.PendingShipment;
            }

            shipment.IsValid         = true;
            shipment.Remarks         = request.Remarks;
            shipment.ShippingAddress = shippingAddress;

            _shipmentRepository.Update(shipment, false);

            using (var transaction = _shipmentRepository.BeginTransaction())
            {
                await _shipmentRepository.SaveAsync();

                await _goodsRepository.UpdateRangeAsync(goodses);

                transaction.Commit();
            }

            var notify = new ShippingApplyNotify
            {
                Name = shippingAddress.UserName,
                Tel  = shippingAddress.TelNumber,
            };
            await _adminUserManager.WarehouseNotify(notify);

            return(Result.Ok());
        }
Exemple #7
0
        public async Task <Result> Apply(ReturnApplyRequest request)
        {
            var item = await _orderItemRepository.Query()
                       .Include(e => e.ShipmentOrderItems).ThenInclude(e => e.Shipment)
                       .Include(e => e.ReturnApply)
                       .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (item == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (item.IsFirstBatchGoods)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "首批商品不允许退货"));
            }
            if (item.Status != OrderItemStatus.Shipped)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前商品状态不允许退货"));
            }
            if (item.Status == OrderItemStatus.RefundApply)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前商品已申请退货"));
            }

            var user = await _customerManager.GetUserAsync();

            if (item.ReturnApply == null)
            {
                var shipment = item.ShipmentOrderItems.Where(e => e.Shipment.IsValid).Select(e => e.Shipment).FirstOrDefault();
                item.ReturnApply = new ReturnApply
                {
                    CustomerId      = user.Id,
                    Createat        = DateTime.Now,
                    Reason          = request.Reason,
                    Description     = string.Empty,
                    LogisticsStatus = request.LogisticsStatus,
                    ReturnType      = request.ReturnType,
                    PaymentAmount   = item.DiscountAmount,
                    RefundAmount    = item.DiscountAmount,
                    Status          = ReturnAuditStatus.NotAudit,
                    ShipmentId      = shipment.Id
                };
            }
            else
            {
                var returnApply = item.ReturnApply;
                returnApply.Createat        = DateTime.Now;
                returnApply.Reason          = request.Reason;
                returnApply.LogisticsStatus = request.LogisticsStatus;
                returnApply.ReturnType      = request.ReturnType;
                returnApply.Status          = ReturnAuditStatus.NotAudit;
            }

            item.Status = OrderItemStatus.RefundApply;

            _orderItemRepository.Update(item, false);

            using (var transaction = _orderItemRepository.BeginTransaction())
            {
                await _orderItemRepository.SaveAsync();

                transaction.Commit();
            }

            await _adminUserManager.AccountingNotify(new ReturnNotify
            {
                UserName = user.NickName
            });

            return(Result.Ok());
        }
Exemple #8
0
        public async Task <Result> Edit([FromBody] AdminPartnerApplyEditRequest request)
        {
            var partnerApply = await _partnerApplyRepository.Query()
                               .Include(e => e.PartnerApplyGoods)
                               .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (partnerApply == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (request.Goods == null || request.Goods.Count == 0)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "请选择商品"));
            }
            if (request.TotalAmount == 0)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "总金额不能为0"));
            }

            if (partnerApply.PartnerRole != request.PartnerRole)
            {
                var anyPartnerType = _partnerApplyRepository.Query().Any(e => e.Id != request.Id && e.PartnerRole == request.PartnerRole);
                return(Result.Fail(ResultCodes.RequestParamError, "当前合伙人类型已设置申请条件"));
            }

            partnerApply.ReferralCommissionRatio   = request.ReferralCommissionRatio;
            partnerApply.RepurchaseCommissionRatio = request.RepurchaseCommissionRatio;
            partnerApply.PartnerRole   = request.PartnerRole;
            partnerApply.ApplyType     = request.ApplyType;
            partnerApply.TotalQuantity = request.TotalQuantity;
            partnerApply.TotalAmount   = request.TotalAmount;
            partnerApply.OriginalPrice = request.OriginalPrice;

            var partnerApplyGoods = new List <PartnerApplyGoods>();

            foreach (var goods in request.Goods)
            {
                var first = partnerApply.PartnerApplyGoods.FirstOrDefault(e => e.GoodsId == goods.GoodsId);
                if (first == null)
                {
                    partnerApplyGoods.Add(new PartnerApplyGoods(goods.GoodsId, goods.Quantity, goods.Price));
                }
                else
                {
                    first.Quantity = goods.Quantity;
                    first.Price    = goods.Price;
                    partnerApplyGoods.Add(first);
                }
            }
            partnerApply.PartnerApplyGoods = partnerApplyGoods;

            _partnerApplyRepository.Update(partnerApply, false);

            using (var transaction = _partnerApplyRepository.BeginTransaction())
            {
                await _partnerApplyRepository.SaveAsync();

                transaction.Commit();
            }

            return(Result.Ok());
        }
        /// <summary>
        /// 支付接收
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task PaymentReceived(PaymentReceivedRequest request)
        {
            var order = await _orderRepository.Query()
                        .Include(e => e.OrderItems)
                        .ThenInclude(e => e.CommissionHistory)
                        .FirstOrDefaultAsync(e => e.OrderNo == request.OrderNo);

            if (order == null)
            {
                return;
            }

            var status = new OrderStatus[] { OrderStatus.PendingPayment, OrderStatus.PaymentFailed };

            if (!status.Contains(order.OrderStatus))
            {
                return;
            }

            var         roleResult = false;
            PartnerRole role       = PartnerRole.Default;

            if (!string.IsNullOrEmpty(order.ExtendParams))
            {
                roleResult = Enum.TryParse <PartnerRole>(order.ExtendParams, true, out role);
            }

            var totalCommission = 0;
            var totalAmount     = 0;
            var commissions     = order.OrderItems.Where(e => e.CommissionHistory != null).Select(e => e.CommissionHistory);

            if (commissions.Count() > 0)
            {
                foreach (var item in commissions)
                {
                    if (order.IsFirstOrder)
                    {
                        totalAmount        += item.Commission;
                        item.Status         = CommissionStatus.Complete;
                        item.SettlementTime = DateTime.Now;
                    }
                    else
                    {
                        totalCommission += item.Commission;
                        item.Status      = CommissionStatus.PendingSettlement;
                    }
                }
            }

            order.OrderStatus   = OrderStatus.PaymentReceived;
            order.PaymentMethod = request.PaymentMethod;
            order.PaymentTime   = request.PaymentTime;
            order.PaymentFee    = request.PaymentFee;

            _orderRepository.Update(order, false);

            using (var transaction = _orderRepository.BeginTransaction())
            {
                await _orderRepository.SaveAsync();

                if (roleResult)
                {
                    await _customerRepository.UpdateProperyAsync(new Customer
                    {
                        Id   = order.CustomerId,
                        Role = role
                    }, nameof(Customer.Role));
                }

                if (totalCommission > 0 || totalAmount > 0)
                {
                    var parentId = commissions.Select(e => e.CustomerId).FirstOrDefault();
                    await _customerManager.UpdateAssets(parentId, totalCommission, totalAmount, "下级首单返佣金");
                }

                if (order.WalletAmount > 0)
                {
                    await _customerManager.UpdateAssets(order.CustomerId, 0, 0, -order.WalletAmount, "商品抵扣金额");
                }

                transaction.Commit();
            }
        }
Exemple #10
0
        public async Task <Result> SetTrackingNumber(AdminShipmentSetTrackingNumberRequest request)
        {
            var shipment = await _shipmentRepository.Query()
                           .Include(e => e.ShipmentOrderItems).ThenInclude(e => e.OrderItem)
                           .Include(e => e.ShippingAddress)
                           .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (shipment == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }

            var status = new[] { ShippingStatus.PendingShipment, ShippingStatus.Shipped };

            if (!status.Contains(shipment.ShippingStatus))
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前订单不允许修改状态"));
            }

            if (string.IsNullOrEmpty(request.CourierCompany))
            {
                shipment.CourierCompany = CourierCompanyHelper.GetCompanyName(request.CourierCompanyCode);
            }
            else
            {
                shipment.CourierCompany = request.CourierCompany;
            }
            shipment.TrackingNumber     = request.TrackingNumber;
            shipment.CourierCompanyCode = request.CourierCompanyCode;
            if (shipment.ShippingStatus != ShippingStatus.Shipped)
            {
                shipment.ShippingStatus = ShippingStatus.Shipped;
                shipment.ShippingTime   = DateTime.Now;

                var orderItems = shipment.ShipmentOrderItems.Select(e => e.OrderItem);
                foreach (var item in orderItems)
                {
                    item.Status = OrderItemStatus.Shipped;
                }

                var message = new AutoReceivedShippingEvent
                {
                    ShipmentId = shipment.Id
                };
                var headers = new Dictionary <string, object>()
                {
                    { "x-delay", 10 * 24 * 60 * 60 * 1000 } // 延迟10天自动收货
                };
                var properties = _client.CreateProperties();
                properties.Headers = headers;

                _client.PushMessage(MQConstants.Exchange, MQConstants.AutoReceivedShippingKey, message, properties);

                var address = shipment.ShippingAddress;
                var notify  = new ShippingNotify
                {
                    TrackingNumber = request.TrackingNumber,
                    UserName       = address.UserName,
                    CourierCompany = shipment.CourierCompany
                };
                await _smsService.SendAsync(address.TelNumber, notify);
            }

            _shipmentRepository.Update(shipment, false);

            using (var transaction = _shipmentRepository.BeginTransaction())
            {
                await _shipmentRepository.SaveAsync();

                transaction.Commit();
            }

            return(Result.Ok());
        }