Beispiel #1
0
        public async Task <Result> SetTrackingNumber([FromBody] RefundSetTrackingNumberRequest request)
        {
            var item = await _orderItemRepository.Query()
                       .Include(e => e.ReturnApply)
                       .FirstOrDefaultAsync(e => e.Id == request.Id);

            if (item == null)
            {
                return(Result.Fail(ResultCodes.IdInvalid));
            }
            if (item.Status != OrderItemStatus.ConfirmApply)
            {
                return(Result.Fail(ResultCodes.RequestParamError, "当前状态不允许设置快递单号"));
            }

            var returnApply = item.ReturnApply;

            if (string.IsNullOrEmpty(request.CourierCompany))
            {
                returnApply.CourierCompany = CourierCompanyHelper.GetCompanyName(request.CourierCompanyCode);
            }
            else
            {
                returnApply.CourierCompany = request.CourierCompany;
            }

            returnApply.Status             = ReturnAuditStatus.ReturnGoods;
            returnApply.CourierCompanyCode = request.CourierCompanyCode;
            returnApply.TrackingNumber     = request.TrackingNumber;

            item.Status = OrderItemStatus.ReturnGoods;

            await _orderItemRepository.UpdateAsync(item);

            return(Result.Ok());
        }
Beispiel #2
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());
        }