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()); }
public async Task <Result> Apply([FromBody] ShipmentApplyRequest request) { var userId = HttpContext.GetUserId(); 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 { 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) { shippingAddress = new ShippingAddress { 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 }; } var orderItemIds = request.Items.Select(e => e.Id).Distinct().ToList(); var orderItems = await _orderItemRepository.Query().Where(e => orderItemIds.Contains(e.Id)).ToListAsync(); // var goodsIds = request.Items.Select(e => e.GoodsId); // var goodses = await _goodsRepository.Query().Where(e => goodsIds.Contains(e.Id)).ToListAsync(); var shipmentOrderItems = new List <ShipmentOrderItem>(); foreach (var item in request.Items.Distinct()) { var first = orderItems.FirstOrDefault(e => e.Id == item.Id); if (first == null) { return(Result.Fail(ResultCodes.RequestParamError, $"订单不存在 {item.Id}")); } // var goods = goodses.FirstOrDefault(e => e.Id == item.GoodsId); // 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 -= first.Quantity; first.GoodsItemId = item.GoodsId; first.NormalizedName = item.NormalizedName; // first.ShippingStatus = ShippingStatus.PendingShipment; // first.ShippingTime = DateTime.Now; shipmentOrderItems.Add(new ShipmentOrderItem(first.Id)); } var shipment = new Shipment { CustomerId = userId, Quantity = orderItems.Count, ShippingStatus = ShippingStatus.PendingShipment, ShippingTime = DateTime.Now, Createat = DateTime.Now, Remarks = request.Remarks, ShippingAddress = shippingAddress, ShipmentOrderItems = shipmentOrderItems }; _shipmentRepository.Insert(shipment, false); using (var transaction = _shipmentRepository.BeginTransaction()) { await _shipmentRepository.SaveAsync(); // await _goodsRepository.UpdateRangeAsync(goodses); transaction.Commit(); } await _orderItemRepository.UpdateRangeAsync(orderItems); return(Result.Ok(_mapper.Map <ShipmentResponse>(shipment))); }