public async Task <ActionResult> Create([NamedModelBinder(typeof(CommaSeparatedModelBinder), "orderIds")] string[] orderIds) { if (!orderIds.Any()) { return(Error("订单号不能为空")); } var orderManager = new OrderManager(User); var orders = await orderManager.GetOrdersAsync(orderIds); //if (!orders.All(r => r.OrderStatus == OrderStatus.ToBeShip)) // return Error("订单号状态不是待出货"); var customers = orders.Select(r => r.Customer).Distinct().ToList(); if (customers.Count > 1) { return(Error("生成出货单不能选择了多个公司")); } var customer = customers.FirstOrDefault(); var discountRateManager = new DiscountRateManager(); var discountRate = await discountRateManager.GetCustomerDiscountRateAsync(customer.Id); var shipmentOrderViewModel = new ShipmentOrderViewModel() { SideStoneRate = (double)discountRate.SideStone / 100, StoneSetterRate = (double)discountRate.StoneSetter / 100 }; shipmentOrderViewModel.ShipmentOrderInfos = await Task.WhenAll(orders.Select(async o => { var dailyGoldPriceManager = new DailyGoldPriceManager(); var dailyGoldPrice = await dailyGoldPriceManager.GetNewDailyGoldPriceAsync(o.ColorFormId); var shipmentOrderInfoViewModel = new ShipmentOrderInfoViewModel(o) { GoldPrice = dailyGoldPrice == null ? 0 : dailyGoldPrice.Price, LossRate = o.ColorForm.Name.ToLower().Contains("pt") ? discountRate.LossPt : discountRate.Loss18K, }; shipmentOrderInfoViewModel.Hhz = Math.Round(shipmentOrderInfoViewModel.GoldWeight * (1 + shipmentOrderInfoViewModel.LossRate / 100), 2); shipmentOrderInfoViewModel.GoldAmount = shipmentOrderInfoViewModel.GoldPrice *shipmentOrderInfoViewModel.Hhz; shipmentOrderInfoViewModel.TotalSetStoneWorkingCost = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.SetStoneWorkingCost) * ((double)discountRate.StoneSetter / 100); shipmentOrderInfoViewModel.SideStoneNumber = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.Number); shipmentOrderInfoViewModel.SideStoneWeight = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.Weight); shipmentOrderInfoViewModel.SideStoneTotalAmount = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.TotalAmount) * ((double)discountRate.SideStone / 100);; shipmentOrderInfoViewModel.RushCost = GetOrderRushCost(o); shipmentOrderInfoViewModel.RiskFee = o.IsInsure ? GetRiskFee(o.Insurance, o.RiskType) : 0; return(shipmentOrderInfoViewModel); })); shipmentOrderViewModel.CustomerName = customer.Name; shipmentOrderViewModel.CustomerId = customer.Id; shipmentOrderViewModel.TotalNumber = shipmentOrderViewModel.ShipmentOrderInfos.Sum(r => r.Number); return(View(shipmentOrderViewModel)); }
public async Task <IHttpActionResult> SpotGoods(SpotGoodsQueryRequest request) { var manager = new SpotGoodsManager(); var spotGoods = await manager.GetSpotGoodsAsync(request.GetSpotGoodsListQueryFilter()); if (spotGoods == null) { return(NotFound("现货不存在")); } var spotGoodsViewModel = new SpotGoodListItemViewModel(spotGoods); var dailyGoldPriceManager = new DailyGoldPriceManager(); var dailyGoldPrice = await dailyGoldPriceManager.GetNewDailyGoldPriceAsync(spotGoodsViewModel.ColorFormId); spotGoodsViewModel.DailyGoldPrice = dailyGoldPrice.Price; if (spotGoodsViewModel.Price == 0) { var goldCost = dailyGoldPrice.Price * spotGoodsViewModel.GoldWeight * (1 + (double)spotGoodsViewModel.Loss18KRate / 100); spotGoodsViewModel.Price = decimal.Round(((decimal)(spotGoodsViewModel.BasicCost + goldCost + spotGoods.SetStoneInfos.Sum(r => r.Price * r.Weight + r.Number * r.WorkingCost))), 2); } return(Ok(spotGoodsViewModel)); }