From f6c84c46ad80ea91305174ea81de48e6d3976788 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 16 Aug 2022 20:26:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=94=AE=E5=90=8E=E5=88=A9=E6=B6=A6=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWY.Client/APIServices/AfterOrderService.cs | 27 ++++ BBWY.Client/APIServices/OrderService.cs | 5 - .../ViewModels/Order/OrderListViewModel.cs | 50 ++++++-- .../Controllers/AfterSaleOrderController.cs | 11 ++ .../Controllers/OrderController.cs | 10 -- .../AfterSaleOrder/AfterSaleOrderBusiness.cs | 120 ++++++++++++++---- BBWY.Server.Business/Order/OrderBusiness.cs | 68 ---------- .../EditAfterSaleOrderRequest.cs | 14 ++ .../Order/EditAfterSaleOrderSkuRequest.cs | 9 -- .../AfterSaleOrder/AfterSaleOrderResponse.cs | 4 + BBWY.Server.Model/MappingProfiles.cs | 2 - 11 files changed, 191 insertions(+), 129 deletions(-) create mode 100644 BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRequest.cs delete mode 100644 BBWY.Server.Model/Dto/Request/Order/EditAfterSaleOrderSkuRequest.cs diff --git a/BBWY.Client/APIServices/AfterOrderService.cs b/BBWY.Client/APIServices/AfterOrderService.cs index 13ea9ce8..b3d83ac0 100644 --- a/BBWY.Client/APIServices/AfterOrderService.cs +++ b/BBWY.Client/APIServices/AfterOrderService.cs @@ -36,5 +36,32 @@ namespace BBWY.Client.APIServices pageSize }, null, HttpMethod.Post); } + + public ApiResponse GetAfterSaleOrderById(long afterSaleOrderId) + { + return SendRequest(globalContext.BBYWApiHost, $"api/AfterSaleOrder/GetAfterSaleOrderById/{afterSaleOrderId}", null, null, HttpMethod.Get); + } + + public ApiResponse EditAfterSaleOrderSku(long afterSaleOrderId, + string orderId, + ProductResult productResult, + ServiceResult serviceResult, + ProductHealth productHealth, + decimal reissueAfterSaleAmount, + decimal reissueFreight, + decimal reissueProductAmount) + { + return SendRequest(globalContext.BBYWApiHost, "Api/Order/EditAfterSaleOrderSku", new + { + Id = afterSaleOrderId, + orderId, + serviceResult, + productResult, + productHealth, + reissueAfterSaleAmount, + reissueFreight, + reissueProductAmount + }, null, HttpMethod.Post); + } } } \ No newline at end of file diff --git a/BBWY.Client/APIServices/OrderService.cs b/BBWY.Client/APIServices/OrderService.cs index 949af663..b381e87d 100644 --- a/BBWY.Client/APIServices/OrderService.cs +++ b/BBWY.Client/APIServices/OrderService.cs @@ -258,10 +258,5 @@ namespace BBWY.Client.APIServices excludeCanceled }, null, HttpMethod.Post); } - - public ApiResponse EditAfterSaleOrderSku(AfterSaleOrder afterSaleOrder) - { - return SendRequest(globalContext.BBYWApiHost, "Api/Order/EditAfterSaleOrderSku", afterSaleOrder, null, HttpMethod.Post); - } } } diff --git a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs index 65f63411..cfb64ded 100644 --- a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs +++ b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs @@ -261,6 +261,25 @@ namespace BBWY.Client.ViewModels } + public void RefreshAfterOrder(long afterSaleOrderId) + { + var afterSaleOrder = AfterSaleOrderList.FirstOrDefault(aso => aso.Id == afterSaleOrderId); + if (afterSaleOrder == null) + { + IsLoading = false; + return; + } + var afterSaleOrderResponse = afterOrderService.GetAfterSaleOrderById(afterSaleOrderId); + var newAfterSaleOrder = afterSaleOrderResponse.Data.Map(); + App.Current.Dispatcher.Invoke(() => + { + var index = AfterSaleOrderList.IndexOf(afterSaleOrder); + AfterSaleOrderList.Remove(afterSaleOrder); + AfterSaleOrderList.Insert(index, newAfterSaleOrder); + }); + + } + private void LoadOrder(int pageIndex) { if (IncludeAfterOrder == true) @@ -807,18 +826,25 @@ namespace BBWY.Client.ViewModels return; var afterSaleOrder = editAfterSaleOrderSku.SaleOrder; - //IsLoading = true; - //Task.Factory.StartNew(() => orderService.EditAfterSaleOrderSku(afterSaleOrder)).ContinueWith(t => - //{ - // var response = t.Result; - // if (!response.Success) - // { - // IsLoading = false; - // App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改售后")); - // return; - // } - // RefreshOrder(afterSaleOrder.OrderId); - //}); + IsLoading = true; + Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderSku(afterSaleOrder.Id, + afterSaleOrder.OrderId, + afterSaleOrder.ProductResult.Value, + afterSaleOrder.ServiceResult.Value, + afterSaleOrder.ProductHealth.Value, + afterSaleOrder.ReissueAfterSaleAmount, + afterSaleOrder.ReissueFreight, + afterSaleOrder.ReissueProductAmount)).ContinueWith(t => + { + var response = t.Result; + if (!response.Success) + { + IsLoading = false; + App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改售后")); + return; + } + RefreshAfterOrder(afterSaleOrder.Id); + }); } } } diff --git a/BBWY.Server.API/Controllers/AfterSaleOrderController.cs b/BBWY.Server.API/Controllers/AfterSaleOrderController.cs index 2e19509a..b4ef6999 100644 --- a/BBWY.Server.API/Controllers/AfterSaleOrderController.cs +++ b/BBWY.Server.API/Controllers/AfterSaleOrderController.cs @@ -24,5 +24,16 @@ namespace BBWY.Server.API.Controllers { return afterSaleOrderBusiness.GetAfterSaleOrderList(request); } + + /// + /// 获取单个服务单 + /// + /// + /// + [HttpGet] + public AfterSaleOrderResponse GetAfterSaleOrderById([FromRoute]long afterSaleOrderId) + { + return afterSaleOrderBusiness.GetAfterSaleOrderById(afterSaleOrderId); + } } } diff --git a/BBWY.Server.API/Controllers/OrderController.cs b/BBWY.Server.API/Controllers/OrderController.cs index 96badb05..fc1786c1 100644 --- a/BBWY.Server.API/Controllers/OrderController.cs +++ b/BBWY.Server.API/Controllers/OrderController.cs @@ -131,15 +131,5 @@ namespace BBWY.Server.API.Controllers { orderBusiness.EditVenderRemark(editVenderRemarkRequest); } - - /// - /// 修改售后 - /// - /// - [HttpPost] - public void EditAfterSaleOrderSku([FromBody] EditAfterSaleOrderSkuRequest editAfterSaleOrderSkuRequest) - { - orderBusiness.EditAfterSaleOrderSku(editAfterSaleOrderSkuRequest); - } } } diff --git a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs index e39c95b5..819861e1 100644 --- a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs +++ b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs @@ -1,6 +1,9 @@ using BBWY.Common.Models; using BBWY.Server.Model.Db; using BBWY.Server.Model.Dto; +using System; +using System.Linq; +using System.Linq.Expressions; using Yitter.IdGenerator; namespace BBWY.Server.Business @@ -12,30 +15,10 @@ namespace BBWY.Server.Business } - public AfterSaleOrderListResponse GetAfterSaleOrderList(SearchAfterSaleOrderRequest request) + private Expression> GetExpressionField() { - var select = fsql.Select().InnerJoin((aso, osku, oc) => aso.OrderId == osku.OrderId && aso.SkuId == osku.SkuId) - .InnerJoin((aso, osku, oc) => aso.OrderId == oc.OrderId); - if (!string.IsNullOrEmpty(request.ServiceId)) + return (aso, osku, oc) => new AfterSaleOrderResponse(aso.Id) { - select = select.Where((aso, osku, o) => aso.ServiceId == request.ServiceId); - } - else - { - select = select.WhereIf(request.StartDate != null, (aso, osku, oc) => aso.ApplyTime >= request.StartDate) - .WhereIf(request.EndDate != null, (aso, osku, oc) => aso.ApplyTime <= request.EndDate) - .WhereIf(!string.IsNullOrEmpty(request.Spu), (aso, osku, oc) => aso.ProductId == request.Spu) - .WhereIf(!string.IsNullOrEmpty(request.Sku), (aso, osku, oc) => aso.SkuId == request.Sku) - .WhereIf(!string.IsNullOrEmpty(request.OrderId), (aso, osku, oc) => aso.OrderId == request.OrderId); - } - select = select.Where((aso, osku, oc) => aso.ShopId == request.ShopId) - .OrderByDescending((aso, osku, oc) => aso.ApplyTime) - .Count(out var total) - .Page(request.PageIndex, request.PageSize); - - var list = select.ToList((aso, osku, oc) => new AfterSaleOrderResponse - { - Id = aso.Id, ApplyTime = aso.ApplyTime, ConsumableAmount = aso.ConsumableAmount, CreateTime = aso.CreateTime, @@ -65,12 +48,103 @@ namespace BBWY.Server.Business ItemTotal = osku.ItemTotal.Value, Price = osku.Price.Value, AfterTotalCost = aso.AfterTotalCost - }); + }; + } + + public AfterSaleOrderListResponse GetAfterSaleOrderList(SearchAfterSaleOrderRequest request) + { + var select = fsql.Select().InnerJoin((aso, osku, oc) => aso.OrderId == osku.OrderId && aso.SkuId == osku.SkuId) + .InnerJoin((aso, osku, oc) => aso.OrderId == oc.OrderId); + if (!string.IsNullOrEmpty(request.ServiceId)) + { + select = select.Where((aso, osku, o) => aso.ServiceId == request.ServiceId); + } + else + { + select = select.WhereIf(request.StartDate != null, (aso, osku, oc) => aso.ApplyTime >= request.StartDate) + .WhereIf(request.EndDate != null, (aso, osku, oc) => aso.ApplyTime <= request.EndDate) + .WhereIf(!string.IsNullOrEmpty(request.Spu), (aso, osku, oc) => aso.ProductId == request.Spu) + .WhereIf(!string.IsNullOrEmpty(request.Sku), (aso, osku, oc) => aso.SkuId == request.Sku) + .WhereIf(!string.IsNullOrEmpty(request.OrderId), (aso, osku, oc) => aso.OrderId == request.OrderId); + } + select = select.Where((aso, osku, oc) => aso.ShopId == request.ShopId) + .OrderByDescending((aso, osku, oc) => aso.ApplyTime) + .Count(out var total) + .Page(request.PageIndex, request.PageSize); + + var list = select.ToList(GetExpressionField()); return new AfterSaleOrderListResponse() { Count = total, Items = list }; } + + public AfterSaleOrderResponse GetAfterSaleOrderById(long afterSaleOrderId) + { + var response = fsql.Select().InnerJoin((aso, osku, oc) => aso.OrderId == osku.OrderId && aso.SkuId == osku.SkuId) + .InnerJoin((aso, osku, oc) => aso.OrderId == oc.OrderId) + .Where((aso, osku, oc) => aso.Id == afterSaleOrderId) + .ToOne(GetExpressionField()); + return response; + } + + public void EditAfterSaleOrder(EditAfterSaleOrderRequest editAfterSaleOrderRequest) + { + var afterSaleOrderList = fsql.Select().Where(aso => aso.OrderId == editAfterSaleOrderRequest.OrderId).ToList(); + var dbAfterSaleOrder = afterSaleOrderList.FirstOrDefault(aso => aso.Id == editAfterSaleOrderRequest.Id); + var dbOrder = fsql.Select(editAfterSaleOrderRequest.OrderId).ToOne(); + + #region 更新当前服务单属性 + dbAfterSaleOrder.ServiceResult = editAfterSaleOrderRequest.ServiceResult; + dbAfterSaleOrder.ProductResult = editAfterSaleOrderRequest.ProductResult; + dbAfterSaleOrder.ProductHealth = editAfterSaleOrderRequest.ProductHealth; + + dbAfterSaleOrder.ReissueAfterSaleAmount = editAfterSaleOrderRequest.ReissueAfterSaleAmount; + dbAfterSaleOrder.ConsumableAmount = 0M; + dbAfterSaleOrder.DeliveryExpressFreight = 0M; + dbAfterSaleOrder.FirstFreight = 0M; + dbAfterSaleOrder.InStorageAmount = 0M; + dbAfterSaleOrder.OutStorageAmount = 0M; + dbAfterSaleOrder.RefundInStorageAmount = 0M; + dbAfterSaleOrder.ReissueFreight = 0M; + dbAfterSaleOrder.ReissueProductAmount = 0M; + dbAfterSaleOrder.AfterTotalCost = 0M; + + if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.维修 || + dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发 || + dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.线下换新) + { + if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发) + dbAfterSaleOrder.ProductHealth = Model.Enums.ProductHealth.客户无退货; + + dbAfterSaleOrder.ReissueProductAmount = editAfterSaleOrderRequest.ReissueProductAmount; + dbAfterSaleOrder.ReissueFreight = editAfterSaleOrderRequest.ReissueFreight; + } + else if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.退货) + { + if (dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回云仓 || + dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回京仓) + { + + } + } + + + if (dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.可二次销售) + { + //原sku采购成本 + } + else if (dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.残次品_无法二次销售 || + dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.客户无退货 || + dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.破损) + { + dbAfterSaleOrder.RefundPurchaseAmount = 0M; + } + + + #endregion + + } } } diff --git a/BBWY.Server.Business/Order/OrderBusiness.cs b/BBWY.Server.Business/Order/OrderBusiness.cs index 62c3ceac..b6a7e6f5 100644 --- a/BBWY.Server.Business/Order/OrderBusiness.cs +++ b/BBWY.Server.Business/Order/OrderBusiness.cs @@ -991,73 +991,5 @@ namespace BBWY.Server.Business .Set(o => o.VenderRemark, editVenderRemarkRequest.VenderRemark) .ExecuteAffrows(); } - - /// - /// 修改售后 - /// - /// - /// - public void EditAfterSaleOrderSku(EditAfterSaleOrderSkuRequest editAfterSaleOrderSkuRequest) - { - var dbOrder = fsql.Select(editAfterSaleOrderSkuRequest.OrderId).ToOne(); - if (dbOrder == null) - throw new BusinessException("订单不存在"); - var dbOrderCost = fsql.Select(editAfterSaleOrderSkuRequest.OrderId).ToOne(); - if (dbOrderCost == null) - throw new BusinessException("缺少订单成本"); - - - IInsert insertAfterSaleOrder = null; - IUpdate updateAfterSaleOrder = null; - IUpdate updateOrderCost = null; - - var afterSaleOrderSkuList = fsql.Select().Where(aso => aso.OrderId == editAfterSaleOrderSkuRequest.OrderId).ToList(); - if (afterSaleOrderSkuList.Any(aso => aso.Id == editAfterSaleOrderSkuRequest.Id)) - { - var dbAfterSaleOrderSku = afterSaleOrderSkuList.FirstOrDefault(aso => aso.Id == editAfterSaleOrderSkuRequest.Id); - editAfterSaleOrderSkuRequest.Map(dbAfterSaleOrderSku); - updateAfterSaleOrder = fsql.Update().SetSource(dbAfterSaleOrderSku).IgnoreColumns(aso => new { aso.CreateTime }); - } - else - { - editAfterSaleOrderSkuRequest.Id = idGenerator.NewLong(); - var afterSaleOrder = editAfterSaleOrderSkuRequest.Map(); - afterSaleOrder.CreateTime = DateTime.Now; - insertAfterSaleOrder = fsql.Insert(afterSaleOrder); - afterSaleOrderSkuList.Add(afterSaleOrder); - } - - //var refundAfterSaleOrderSkuIds = afterSaleOrderSkuList.Where(aso => aso.RefundAmount != 0 && aso.ProductResult == Enums.ProductResult.退款退货).Select(aso => aso.SkuId); - - - dbOrderCost.RefundAmount = afterSaleOrderSkuList.Sum(aso => aso.RefundAmount ?? 0); - //dbOrderCost.ReissueProductAmount = afterSaleOrderSkuList.Sum(aso => aso.ReissueProductAmount ?? 0); - //dbOrderCost.ReissueFreight = afterSaleOrderSkuList.Sum(aso => aso.ReissueFreight ?? 0); - //dbOrderCost.ReissueAfterSaleAmount = afterSaleOrderSkuList.Sum(aso => aso.ReissueAfterSaleAmount ?? 0); - - //退款采购货款 - //dbOrderCost.RefundPurchaseAmount = fsql.Select().Where(ocd => ocd.OrderId == editAfterSaleOrderSkuRequest.OrderId && refundAfterSaleOrderSkuIds.Contains(ocd.SkuId)).Sum(ocd => ocd.TotalCost); - - //退款之后平台扣点 - dbOrderCost.PlatformCommissionAmount = (dbOrder.OrderSellerPrice - dbOrderCost.RefundAmount) * (dbOrderCost?.PlatformCommissionRatio ?? 0.05M); - - - - //订单利润 - dbOrderCost.Profit = dbOrder.OrderSellerPrice + dbOrder.FreightPrice - dbOrderCost.RefundAmount - - (dbOrderCost.PurchaseAmount - dbOrderCost.RefundPurchaseAmount) - - dbOrderCost.DeliveryExpressFreight - - dbOrderCost.PlatformCommissionAmount - - dbOrderCost.AfterTotalCost; - updateOrderCost = fsql.Update().SetSource(dbOrderCost).IgnoreColumns(oc => new { oc.CreateTime }); - - fsql.Transaction(() => - { - fsql.Update(editAfterSaleOrderSkuRequest.OrderId).Set(o => o.IsAfterSaleOrder, true).ExecuteAffrows(); - updateOrderCost.ExecuteAffrows(); - insertAfterSaleOrder?.ExecuteAffrows(); - updateAfterSaleOrder?.ExecuteAffrows(); - }); - } } } diff --git a/BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRequest.cs b/BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRequest.cs new file mode 100644 index 00000000..a45ea28f --- /dev/null +++ b/BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRequest.cs @@ -0,0 +1,14 @@ +namespace BBWY.Server.Model.Dto +{ + public class EditAfterSaleOrderRequest + { + public long Id { get; set; } + public string OrderId { get; set; } + public Enums.ProductResult ProductResult { get; set; } + public Enums.ServiceResult ServiceResult { get; set; } + public Enums.ProductHealth? ProductHealth { get; set; } + public decimal ReissueAfterSaleAmount { get; set; } + public decimal ReissueFreight { get; set; } + public decimal ReissueProductAmount { get; set; } + } +} diff --git a/BBWY.Server.Model/Dto/Request/Order/EditAfterSaleOrderSkuRequest.cs b/BBWY.Server.Model/Dto/Request/Order/EditAfterSaleOrderSkuRequest.cs deleted file mode 100644 index a1fbebfa..00000000 --- a/BBWY.Server.Model/Dto/Request/Order/EditAfterSaleOrderSkuRequest.cs +++ /dev/null @@ -1,9 +0,0 @@ -using BBWY.Server.Model.Db; - -namespace BBWY.Server.Model.Dto -{ - public class EditAfterSaleOrderSkuRequest: AfterSaleOrder - { - - } -} diff --git a/BBWY.Server.Model/Dto/Response/AfterSaleOrder/AfterSaleOrderResponse.cs b/BBWY.Server.Model/Dto/Response/AfterSaleOrder/AfterSaleOrderResponse.cs index 5e03bb81..7dd8dedd 100644 --- a/BBWY.Server.Model/Dto/Response/AfterSaleOrder/AfterSaleOrderResponse.cs +++ b/BBWY.Server.Model/Dto/Response/AfterSaleOrder/AfterSaleOrderResponse.cs @@ -4,6 +4,10 @@ namespace BBWY.Server.Model.Dto { public class AfterSaleOrderResponse : AfterSaleOrder { + public AfterSaleOrderResponse(long id) + { + this.Id = id; + } public string Logo { get; set; } public string Title { get; set; } diff --git a/BBWY.Server.Model/MappingProfiles.cs b/BBWY.Server.Model/MappingProfiles.cs index ee2fadbe..a69a5351 100644 --- a/BBWY.Server.Model/MappingProfiles.cs +++ b/BBWY.Server.Model/MappingProfiles.cs @@ -24,8 +24,6 @@ namespace BBWY.Server.Model CreateMap(); CreateMap(); - CreateMap(); - CreateMap(); CreateMap(); CreateMap();