diff --git a/BBWY.Client/APIServices/AfterOrderService.cs b/BBWY.Client/APIServices/AfterOrderService.cs index b3d83ac0..1be993b5 100644 --- a/BBWY.Client/APIServices/AfterOrderService.cs +++ b/BBWY.Client/APIServices/AfterOrderService.cs @@ -42,7 +42,7 @@ namespace BBWY.Client.APIServices return SendRequest(globalContext.BBYWApiHost, $"api/AfterSaleOrder/GetAfterSaleOrderById/{afterSaleOrderId}", null, null, HttpMethod.Get); } - public ApiResponse EditAfterSaleOrderSku(long afterSaleOrderId, + public ApiResponse EditAfterSaleOrder(long afterSaleOrderId, string orderId, ProductResult productResult, ServiceResult serviceResult, @@ -51,7 +51,7 @@ namespace BBWY.Client.APIServices decimal reissueFreight, decimal reissueProductAmount) { - return SendRequest(globalContext.BBYWApiHost, "Api/Order/EditAfterSaleOrderSku", new + return SendRequest(globalContext.BBYWApiHost, "Api/AfterSaleOrder/EditAfterSaleOrder", new { Id = afterSaleOrderId, orderId, @@ -63,5 +63,21 @@ namespace BBWY.Client.APIServices reissueProductAmount }, null, HttpMethod.Post); } + + public ApiResponse EditAfterSaleOrderRefundPurchaseAmount(long afterSaleOrderId, + string orderId, + decimal refundPurchaseAmount, + string refundMerchantOrderNo, + string refundAlipayOrderNo) + { + return SendRequest(globalContext.BBYWApiHost, "Api/AfterSaleOrder/EditAfterSaleOrderRefundPurchaseAmount", new + { + Id = afterSaleOrderId, + orderId, + refundPurchaseAmount, + refundMerchantOrderNo, + refundAlipayOrderNo + }, null, HttpMethod.Post); + } } } \ No newline at end of file diff --git a/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs b/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs index 53fc593d..be16181b 100644 --- a/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs @@ -121,5 +121,15 @@ namespace BBWY.Client.Models public decimal AfterTotalCost { get; set; } = 0.0M; public decimal StorageAmount { get; set; } = 0.0M; + + /// + /// 退款商户订单号 + /// + public string RefundMerchantOrderNo { get; set; } + + /// + /// 退款支付宝订单号 + /// + public string RefundAlipayOrderNo { get; set; } } } diff --git a/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs b/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs index e4c07218..6fce77ac 100644 --- a/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs +++ b/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs @@ -107,6 +107,16 @@ namespace BBWY.Client.Models public decimal StorageAmount { get; set; } = 0.0M; + /// + /// 退款商户订单号 + /// + public string RefundMerchantOrderNo { get; set; } + + /// + /// 退款支付宝订单号 + /// + public string RefundAlipayOrderNo { get; set; } + public object Clone() { return this.MemberwiseClone(); diff --git a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs index cfb64ded..eef18d6e 100644 --- a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs +++ b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs @@ -114,13 +114,14 @@ namespace BBWY.Client.ViewModels public ICommand EditAfterSaleOrderCommand { get; set; } + public ICommand EditAfterSaleOrderRefundPurchaseAmountCommand { get; set; } + /// /// 当前条件利润汇总 /// public decimal CurrentConditionsTotalProfit { get => currentConditionsTotalProfit; set { Set(ref currentConditionsTotalProfit, value); } } - public OrderListViewModel(OrderService orderService, StatisticsService statisticsService, AfterOrderService afterOrderService, GlobalContext globalContext, ChoosePurchaseSchemeViewModel choosePurchaseSchemeViewModel) { random = new Random(); @@ -180,6 +181,7 @@ namespace BBWY.Client.ViewModels ExportCommand = new RelayCommand(Export); SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder); EditAfterSaleOrderCommand = new RelayCommand(EditAfterSaleOrder); + EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand(EditAfterSaleOrderRefundPurchaseAmount); SearchOrderCommand.Execute(null); } @@ -813,21 +815,20 @@ namespace BBWY.Client.ViewModels private void EditAfterSaleOrder(AfterSaleOrder afterSaleOrder) { - - var editAfterSaleOrderSku = new EditAfterSaleOrderSku(afterSaleOrder); - editAfterSaleOrderSku.Closed += EditAfterSaleOrderSku_Closed; - editAfterSaleOrderSku.ShowDialog(); + var w = new EditAfterSaleOrderSku(afterSaleOrder); + w.Closed += EditAfterSaleOrderSku_Closed; + w.ShowDialog(); } private void EditAfterSaleOrderSku_Closed(object sender, EventArgs e) { - var editAfterSaleOrderSku = sender as EditAfterSaleOrderSku; - if (editAfterSaleOrderSku.DialogResult != true) + var w = sender as EditAfterSaleOrderSku; + if (w.DialogResult != true) return; - var afterSaleOrder = editAfterSaleOrderSku.SaleOrder; + var afterSaleOrder = w.SaleOrder; IsLoading = true; - Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderSku(afterSaleOrder.Id, + Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrder(afterSaleOrder.Id, afterSaleOrder.OrderId, afterSaleOrder.ProductResult.Value, afterSaleOrder.ServiceResult.Value, @@ -846,5 +847,38 @@ namespace BBWY.Client.ViewModels RefreshAfterOrder(afterSaleOrder.Id); }); } + + private void EditAfterSaleOrderRefundPurchaseAmount(AfterSaleOrder afterSaleOrder) + { + var w = new EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder); + w.Closed += EditAfterSaleOrderRefundPurchaseAmount_Closed; + w.ShowDialog(); + } + + private void EditAfterSaleOrderRefundPurchaseAmount_Closed(object sender, EventArgs e) + { + var w = sender as EditAfterSaleOrderRefundPurchaseAmount; + if (w.DialogResult != true) + return; + + var afterSaleOrder = w.SaleOrder; + IsLoading = true; + Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder.Id, + afterSaleOrder.OrderId, + afterSaleOrder.RefundPurchaseAmount.Value, + afterSaleOrder.RefundMerchantOrderNo, + afterSaleOrder.RefundAlipayOrderNo)) + .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.Client/Views/Order/EditAfterSaleOrderRefundPurchaseAmount.xaml b/BBWY.Client/Views/Order/EditAfterSaleOrderRefundPurchaseAmount.xaml new file mode 100644 index 00000000..fc53620a --- /dev/null +++ b/BBWY.Client/Views/Order/EditAfterSaleOrderRefundPurchaseAmount.xaml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWY.Client/Views/Order/EditAfterSaleOrderRefundPurchaseAmount.xaml.cs b/BBWY.Client/Views/Order/EditAfterSaleOrderRefundPurchaseAmount.xaml.cs new file mode 100644 index 00000000..4ea01d1d --- /dev/null +++ b/BBWY.Client/Views/Order/EditAfterSaleOrderRefundPurchaseAmount.xaml.cs @@ -0,0 +1,29 @@ +using BBWY.Client.Models; +using BBWY.Controls; +using System.Windows; + +namespace BBWY.Client.Views.Order +{ + /// + /// EditAfterSaleOrderRefundPurchaseAmount.xaml 的交互逻辑 + /// + public partial class EditAfterSaleOrderRefundPurchaseAmount : BWindow + { + public AfterSaleOrder SaleOrder { get; set; } + + public EditAfterSaleOrderRefundPurchaseAmount(AfterSaleOrder afterSaleOrder) + { + InitializeComponent(); + this.SaleOrder = afterSaleOrder; + this.DataContext = this; + } + + private void btn_Save_Click(object sender, System.Windows.RoutedEventArgs e) + { + if (string.IsNullOrEmpty(SaleOrder.RefundAlipayOrderNo) && string.IsNullOrEmpty(SaleOrder.RefundMerchantOrderNo)) + return; + this.DialogResult = true; + this.Close(); + } + } +} diff --git a/BBWY.Client/Views/Order/EditAfterSaleOrderSku.xaml b/BBWY.Client/Views/Order/EditAfterSaleOrderSku.xaml index ec924e91..061ffb7c 100644 --- a/BBWY.Client/Views/Order/EditAfterSaleOrderSku.xaml +++ b/BBWY.Client/Views/Order/EditAfterSaleOrderSku.xaml @@ -38,7 +38,7 @@ - + diff --git a/BBWY.Server.API/Controllers/AfterSaleOrderController.cs b/BBWY.Server.API/Controllers/AfterSaleOrderController.cs index b4ef6999..e519fe12 100644 --- a/BBWY.Server.API/Controllers/AfterSaleOrderController.cs +++ b/BBWY.Server.API/Controllers/AfterSaleOrderController.cs @@ -31,9 +31,29 @@ namespace BBWY.Server.API.Controllers /// /// [HttpGet] - public AfterSaleOrderResponse GetAfterSaleOrderById([FromRoute]long afterSaleOrderId) + public AfterSaleOrderResponse GetAfterSaleOrderById([FromRoute] long afterSaleOrderId) { return afterSaleOrderBusiness.GetAfterSaleOrderById(afterSaleOrderId); } + + /// + /// 手动更新服务单成本 + /// + /// + [HttpPost] + public void EditAfterSaleOrder(EditAfterSaleOrderRequest editAfterSaleOrderRequest) + { + afterSaleOrderBusiness.EditAfterSaleOrder(editAfterSaleOrderRequest); + } + + /// + /// 手动更新退款采购成本 + /// + /// + [HttpPost] + public void EditAfterSaleOrderRefundPurchaseAmount([FromBody] EditAfterSaleOrderRefundPurchaseAmountRequest request) + { + afterSaleOrderBusiness.EditAfterSaleOrderRefundPurchaseAmount(request); + } } } diff --git a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs index ab4f1e20..63dc51fc 100644 --- a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs +++ b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs @@ -49,7 +49,9 @@ namespace BBWY.Server.Business Mobile = oc.Mobile, ItemTotal = osku.ItemTotal.Value, Price = osku.Price.Value, - AfterTotalCost = aso.AfterTotalCost + AfterTotalCost = aso.AfterTotalCost, + RefundAlipayOrderNo = aso.RefundAlipayOrderNo, + RefundMerchantOrderNo = aso.RefundMerchantOrderNo }; } @@ -132,7 +134,7 @@ namespace BBWY.Server.Business else dbAfterSaleOrder.DeliveryExpressFreight = editAfterSaleOrderRequest.ReissueFreight; //代发单更新快递费 } - else if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.换新) + else if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.换新 && dbOrderCostDetail != null) { dbAfterSaleOrder.ConsumableAmount = dbOrderCostDetail.ConsumableAmount; dbAfterSaleOrder.DeliveryExpressFreight = dbOrderCostDetail.DeliveryExpressFreight; @@ -188,6 +190,28 @@ namespace BBWY.Server.Business }); } + /// + /// 手动更新退款信息 + /// + /// + public void EditAfterSaleOrderRefundPurchaseAmount(EditAfterSaleOrderRefundPurchaseAmountRequest request) + { + var afterSaleOrderList = fsql.Select().Where(aso => aso.OrderId == request.OrderId).ToList(); + var dbAfterSaleOrder = afterSaleOrderList.FirstOrDefault(aso => aso.Id == request.Id); + var dbOrder = fsql.Select(request.OrderId).ToOne(); + var dbOrderCost = fsql.Select(request.OrderId).ToOne(); + + dbAfterSaleOrder.RefundAlipayOrderNo = request.RefundAlipayOrderNo; + dbAfterSaleOrder.RefundMerchantOrderNo = request.RefundMerchantOrderNo; + dbAfterSaleOrder.RefundPurchaseAmount = request.RefundPurchaseAmount; + dbOrderCost.CalculationOrderProfitAndCost(dbOrder, afterSaleOrderList); + + fsql.Transaction(() => + { + fsql.Update().SetSource(dbOrderCost).ExecuteAffrows(); + fsql.Update().SetSource(dbAfterSaleOrder).ExecuteAffrows(); + }); + } } } diff --git a/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs b/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs index 9dae2dc5..7ebac0c9 100644 --- a/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs +++ b/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs @@ -139,6 +139,17 @@ namespace BBWY.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal StorageAmount { get; set; } = 0.0M; + /// + /// 退款商户订单号 + /// + [Column(StringLength = 100)] + public string RefundMerchantOrderNo { get; set; } + + /// + /// 退款支付宝订单号 + /// + [Column(StringLength = 100)] + public string RefundAlipayOrderNo { get; set; } } } diff --git a/BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRefundPurchaseAmountRequest.cs b/BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRefundPurchaseAmountRequest.cs new file mode 100644 index 00000000..6a55ed21 --- /dev/null +++ b/BBWY.Server.Model/Dto/Request/AfterSaleOrder/EditAfterSaleOrderRefundPurchaseAmountRequest.cs @@ -0,0 +1,15 @@ +namespace BBWY.Server.Model.Dto +{ + public class EditAfterSaleOrderRefundPurchaseAmountRequest + { + public long Id { get; set; } + + public string OrderId { get; set; } + + public decimal RefundPurchaseAmount { get; set; } + + public string RefundMerchantOrderNo { get; set; } + + public string RefundAlipayOrderNo { get; set; } + } +}