From db01c5a87b5662cb8febc11f3171486bdb9526a6 Mon Sep 17 00:00:00 2001 From: "AERWEN\\26795" <123456789a> Date: Wed, 25 Oct 2023 16:07:57 +0800 Subject: [PATCH] =?UTF-8?q?fixed=20=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Vo/Api/OrderManage/Orders/OrderApiVo.cs | 5 + .../Vo/Api/OrderManage/Orders/OrderItem.cs | 5 + .../CustomerServiceServiceApi.cs | 2 +- .../OrderRefunds/OrderRefundServiceApi.cs | 52 ++++-- .../OrderManage/Orders/OrderServiceApi.cs | 53 +++++++ .../OrderRefunds/IOrderRefundServiceApi.cs | 2 +- .../OrderManage/Orders/IOrderServiceApi.cs | 24 ++- .../OrderRefunds/OrderRefundService.cs | 24 ++- .../TaskScheduler/Business/OrderTask_Job.cs | 2 +- .../OrderRefunds/OrderRefundApiController.cs | 8 +- .../OrderManage/Orders/OrderApiController.cs | 65 +++++--- .../OrderRefunds/OrderRefundController.cs | 150 +++++++++++++++++- 12 files changed, 330 insertions(+), 62 deletions(-) diff --git a/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs b/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs index d4667e2..8787ba0 100644 --- a/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs +++ b/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs @@ -212,6 +212,11 @@ namespace ARW.Model.Vo.Api.OrderManage.Orders public string OrderStatusName { get; set; } + /// + /// 下单时间 + /// + public DateTime CreateTime { get; set; } + } } diff --git a/ARW.Model/Vo/Api/OrderManage/Orders/OrderItem.cs b/ARW.Model/Vo/Api/OrderManage/Orders/OrderItem.cs index d34b00b..7a771f5 100644 --- a/ARW.Model/Vo/Api/OrderManage/Orders/OrderItem.cs +++ b/ARW.Model/Vo/Api/OrderManage/Orders/OrderItem.cs @@ -45,6 +45,11 @@ namespace ARW.Model.Vo.Api.OrderManage.Orders public string GoodsPictureUrl { get; set; } + /// + /// 描述 : 单价 + /// + public decimal Price { get; set; } + /// /// 描述 :购买数量 /// diff --git a/ARW.Service/Api/BusinessService/CustomerServices/CustomerServiceServiceApi.cs b/ARW.Service/Api/BusinessService/CustomerServices/CustomerServiceServiceApi.cs index f067810..9b9c4e1 100644 --- a/ARW.Service/Api/BusinessService/CustomerServices/CustomerServiceServiceApi.cs +++ b/ARW.Service/Api/BusinessService/CustomerServices/CustomerServiceServiceApi.cs @@ -59,7 +59,7 @@ namespace ARW.Service.Api.BusinessService.CustomerServices CustomerServicePhone = s.CustomerServicePhone, CustomerServiceImg = s.CustomerServiceImg, WorkingHoursBeginTime = s.WorkingHoursBeginTime, - WorkingHoursEndTime = s.WorkingHoursEndTime, + WorkingHoursEndTime = s.WorkingHoursEndTime, CustomerServiceSort = s.CustomerServiceSort, }); diff --git a/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs b/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs index f3713db..c5a47df 100644 --- a/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs +++ b/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs @@ -57,9 +57,10 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds private readonly IOrderServiceApi _OrderServiceApi; private readonly IRegionService _RegionService; private readonly ISysDictDataService _SysDictDataService; + private readonly GoodsSkuRepository _GoodsSkuRepository; - public OrderRefundServiceImplApi(OrderRefundRepository OrderRefundRepository, OrderRepository orderRepository, OrderGoodsRepository orderGoodsRepository, GoodsRepository goodsRepository, IOrderServiceApi orderServiceApi, ShopAddressRepository shopAddressRepository, IRegionService regionService, ISysDictDataService sysDictDataService, LogisticsCompanyRepository logisticsCompanyRepository) + public OrderRefundServiceImplApi(OrderRefundRepository OrderRefundRepository, OrderRepository orderRepository, OrderGoodsRepository orderGoodsRepository, GoodsRepository goodsRepository, IOrderServiceApi orderServiceApi, ShopAddressRepository shopAddressRepository, IRegionService regionService, ISysDictDataService sysDictDataService, LogisticsCompanyRepository logisticsCompanyRepository, GoodsSkuRepository goodsSkuRepository) { this._OrderRefundRepository = OrderRefundRepository; _OrderRepository = orderRepository; @@ -70,6 +71,7 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds _RegionService = regionService; _SysDictDataService = sysDictDataService; _LogisticsCompanyRepository = logisticsCompanyRepository; + _GoodsSkuRepository = goodsSkuRepository; } #region Api接口代码 @@ -139,20 +141,23 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds { item.Status = 2; item.EserRightsStatusDesc = "商家已审核确认,预计1小时内发起退款"; - var buttonVoList = new List(); - var buttonVo = new ButtonVO() + if(item.RefundType != 2) { - Name = "填写运单号", - Type = 3 - }; - buttonVoList.Add(buttonVo); - item.ButtonVOs = buttonVoList; + var buttonVoList = new List(); + var buttonVo = new ButtonVO() + { + Name = "填写运单号", + Type = 3 + }; + buttonVoList.Add(buttonVo); + item.ButtonVOs = buttonVoList; + } } // 已发货 if (item.IsCustomerSend == 2 && item.OrderRefundStatus == 1) { item.Status = 3; - item.EserRightsStatusDesc = "商家已退款,退回资金将原路三个工作日内返回您的账户"; + item.EserRightsStatusDesc = "买家已发货,等待商家收货"; //var buttonVoList = new List(); //var buttonVo = new ButtonVO() //{ @@ -165,7 +170,7 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds if (item.OrderRefundStatus == 3) { item.Status = 4; - item.EserRightsStatusDesc = "退款/售后己完成"; + item.EserRightsStatusDesc = "退款/售后己完成,商家已退款,退回资金将原路三个工作日内返回您的账户"; } if (item.OrderRefundStatus == 4) { @@ -183,7 +188,7 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds /// /// 添加售后单记录表 /// - public async Task AddOrderRefund(OrderRefund model) + public async Task AddOrderRefund(OrderRefund model) { model.GoodsReceiveStatus = 1; model.MerchantAuditStatus = 1; @@ -192,7 +197,7 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds model.IsMerchantReceive = 1; var response = await _OrderRefundRepository.InsertReturnSnowflakeIdAsync(model); - return "添加成功!"; + return response; } @@ -297,32 +302,38 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds /* 处理售后订单状态描述 */ // 待审核 - if (data.MerchantAuditStatus == 1) + if (data.MerchantAuditStatus == 1 && data.OrderRefundStatus == 1) { data.Status = 1; data.StatusName = "待审核"; data.EserRightsStatusDesc = "商家将尽快确认您的退款申请"; } // 已审核 - if (data.MerchantAuditStatus == 2) + if (data.MerchantAuditStatus == 2 && data.OrderRefundStatus == 1) { data.Status = 2; data.StatusName = "已审核"; data.EserRightsStatusDesc = "商家已审核确认,预计1小时内发起退款"; } // 已发货 - if (data.IsCustomerSend == 2) + if (data.IsCustomerSend == 2 && data.OrderRefundStatus == 1) { data.Status = 3; data.StatusName = "已发货"; - data.EserRightsStatusDesc = "商家已退款,退回资金将原路三个工作日内返回您的账户"; + data.EserRightsStatusDesc = "买家已发货,等待商家收货"; } // 已完成 if (data.OrderRefundStatus == 3) { data.Status = 4; data.StatusName = "已完成"; - data.EserRightsStatusDesc = "退款/售后己完成"; + data.EserRightsStatusDesc = "退款/售后己完成,商家已退款,退回资金将原路三个工作日内返回您的账户"; + } + if (data.OrderRefundStatus == 4) + { + data.Status = 5; + data.StatusName = "已取消"; + data.EserRightsStatusDesc = "退款/售后己取消"; } // 商家地址 @@ -377,7 +388,14 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds BuyQuantity = _item.GoodsTotalNum }; if (_item.GoodsSkuId != 0) + { + var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == _item.GoodsSkuId); + if (!string.IsNullOrEmpty(sku.GoodsSkuImg)) + { + orderGood.Thumb = sku.GoodsSkuImg; + } orderGood.Specifications = await _OrderServiceApi.GetGoodsSpecList(_item.GoodsSkuId); + } orderRefundGoodList.Add(orderGood); } diff --git a/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs b/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs index 80e3474..0e8278b 100644 --- a/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs +++ b/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs @@ -30,6 +30,7 @@ using Infrastructure.Kuaidi100; using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; using ARW.Repository.Business.LogisticsManage.LogisticsCompanys; using ARW.Repository.Business.OrderManage.OrderRefunds; +using MimeKit.Cryptography; namespace ARW.Service.Api.BusinessService.OrderManage.Orders { @@ -130,13 +131,21 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders BuyQuantity = _item.GoodsTotalNum }; if (_item.GoodsSkuId != 0) + { + var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == _item.GoodsSkuId); + if (!string.IsNullOrEmpty(sku.GoodsSkuImg)) + { + orderGood.Thumb = sku.GoodsSkuImg; + } orderGood.Specifications = await GetGoodsSpecList(_item.GoodsSkuId); + } goodsList.Add(orderGood); } item.GoodsList = goodsList; + #region 处理订单状态 /* 处理订单状态 */ if (item.PayStatus == 1 && item.OrderStatus == 1) { @@ -240,12 +249,49 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders item.StatusName = "待取消"; } + #endregion } return list; } + /// + /// 获取售后订单商品列表(Api) + /// + /// + /// + public async Task> GetOrderRefundGoodsList(OrderDtoApi parm) + { + + var order = await _OrderRepository.GetFirstAsync(s => s.OrderGuid == parm.OrderGuid); + + // 订单商品 + var orderItemList = new List(); + var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == parm.OrderGuid); + foreach (var item in orderGoodsList) + { + var orderItem = new OrderItem(); + + var good = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == item.GoodsGuid); + + orderItem.SpuId = item.GoodsGuid; + orderItem.SkuId = item.GoodsSkuId; + orderItem.GoodsName = good.GoodsName; + orderItem.GoodsPictureUrl = good.GoodsPicture.Split(',').First(); + orderItem.BuyQuantity = item.GoodsTotalNum; + + if (item.GoodsSkuId != 0) + { + orderItem.Specifications = await GetGoodsSpecList(orderItem.SkuId); + } + + orderItemList.Add(orderItem); + } + return orderItemList; + } + + /// /// 待付款取消订单 /// @@ -393,6 +439,7 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders FreightFee = s.ExpressPrice, CouponAmount = s.CouponMoney, Remark = s.OrderRemark, + CreateTime = s.Create_time }).Take(1); @@ -420,9 +467,15 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders orderItem.GoodsName = good.GoodsName; orderItem.GoodsPictureUrl = good.GoodsPicture.Split(',').First(); orderItem.BuyQuantity = item.GoodsTotalNum; + orderItem.Price = item.GoodsPrice; if (item.GoodsSkuId != 0) { + var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == item.GoodsSkuId); + if (!string.IsNullOrEmpty(sku.GoodsSkuImg)) + { + orderItem.GoodsPictureUrl = sku.GoodsSkuImg; + } orderItem.Specifications = await GetGoodsSpecList(orderItem.SkuId); } diff --git a/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs b/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs index 7386c77..557a560 100644 --- a/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs +++ b/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs @@ -39,7 +39,7 @@ namespace ARW.Service.Api.IBusinessService.OrderManage.OrderRefunds /// /// /// - Task AddOrderRefund(OrderRefund parm); + Task AddOrderRefund(OrderRefund parm); /// diff --git a/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs b/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs index cbcbab7..3d84e41 100644 --- a/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs +++ b/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs @@ -27,6 +27,21 @@ namespace ARW.Service.Api.IBusinessService.OrderManage.Orders Task> GetOrderListApi(OrderQueryDtoApi parm); + /// + /// 获取售后订单商品列表 + /// + /// + /// + Task> GetOrderRefundGoodsList(OrderDtoApi parm); + + /// + /// 获取订单详情(Api) + /// + /// + /// + Task GetOrderDetails(OrderDtoApi parm); + + /// /// 待付款取消订单 /// @@ -59,14 +74,6 @@ namespace ARW.Service.Api.IBusinessService.OrderManage.Orders Task AddComment(GoodsComment parm); - /// - /// 获取订单详情(Api) - /// - /// - /// - Task GetOrderDetails(OrderDtoApi parm); - - /// /// 获取订单商品规格 /// @@ -74,5 +81,6 @@ namespace ARW.Service.Api.IBusinessService.OrderManage.Orders /// Task> GetGoodsSpecList(int? skuId); + } } diff --git a/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs b/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs index 945daf5..fb513d7 100644 --- a/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs +++ b/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs @@ -156,7 +156,7 @@ namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds GoodsReceiveStatus = s.GoodsReceiveStatus, MerchantAuditStatus = s.MerchantAuditStatus, MerchantRefuseDesc = s.MerchantRefuseDesc, - RefundMoney = s.RefundMoney, + RefundMoney = s.RefundActualMoney, ShopRefundAddressGuid = s.ShopRefundAddressGuid, IsCustomerSend = s.IsCustomerSend, CustomerSendTime = s.CustomerSendTime, @@ -197,11 +197,25 @@ namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds // 同意 if (parm.IsAgree == true) { - await _OrderRefundRepository.UpdateAsync(f => new OrderRefund + var orderRefund = await _OrderRefundRepository.GetFirstAsync(s => s.OrderRefundGuid == parm.OrderRefundGuid); + + if(orderRefund.RefundType == 1) { - MerchantAuditStatus = 2, - ShopRefundAddressGuid = parm.ShopAddressGuid, - }, s => s.OrderRefundGuid == parm.OrderRefundGuid); + await _OrderRefundRepository.UpdateAsync(f => new OrderRefund + { + MerchantAuditStatus = 2, + ShopRefundAddressGuid = parm.ShopAddressGuid, + }, s => s.OrderRefundGuid == parm.OrderRefundGuid); + } + if(orderRefund.RefundType == 2) + { + await _OrderRefundRepository.UpdateAsync(f => new OrderRefund + { + MerchantAuditStatus = 2, + OrderRefundStatus = 3, + }, s => s.OrderRefundGuid == parm.OrderRefundGuid); + } + str = "同意申请!"; } diff --git a/ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs b/ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs index 92e1cb0..0bbf2bf 100644 --- a/ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs +++ b/ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs @@ -92,7 +92,7 @@ namespace ARW.Tasks.TaskScheduler.Business throw new CustomException("订单关闭失败!"); else { - var respones = _PaymentService.UpdateAsync(f => new Payment + var respones = await _PaymentService.UpdateAsync(f => new Payment { PaymentStatus = 3, Update_time = DateTime.Now diff --git a/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs b/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs index 36d38f9..c688197 100644 --- a/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs +++ b/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs @@ -20,6 +20,7 @@ using ARW.Service.Business.IBusinessService.OrderManage.OrderRefunds; using ARW.Admin.WebApi.Framework; using ARW.Service.Business.IBusinessService.LogisticsManage.LogisticsCompanys; using ARW.Service.System.IService; +using ARW.Service.Business.IBusinessService.OrderManage.Orders; namespace ARW.WebApi.Controllers.Api.OrderManage.OrderRefunds { @@ -36,16 +37,18 @@ namespace ARW.WebApi.Controllers.Api.OrderManage.OrderRefunds private readonly IOrderRefundServiceApi _OrderRefundServiceApi; private readonly ILogisticsCompanyService _LogisticsCompanyService; private readonly ISysDictDataService _SysDictDataService; + private readonly IOrderService _OrderService; /// /// 依赖注入 /// /// 售后单记录表售后单记录表Api服务 - public OrderRefundApiController(IOrderRefundServiceApi OrderRefundServiceApi, ILogisticsCompanyService logisticsCompanyService, ISysDictDataService sysDictDataService) + public OrderRefundApiController(IOrderRefundServiceApi OrderRefundServiceApi, ILogisticsCompanyService logisticsCompanyService, ISysDictDataService sysDictDataService, IOrderService orderService) { _OrderRefundServiceApi = OrderRefundServiceApi; _LogisticsCompanyService = logisticsCompanyService; _SysDictDataService = sysDictDataService; + _OrderService = orderService; } @@ -126,6 +129,9 @@ namespace ARW.WebApi.Controllers.Api.OrderManage.OrderRefunds var user = JwtUtil.GetLoginUser(App.HttpContext); parm.CustomerGuid = user.UserId; + var order = await _OrderService.GetFirstAsync(s => s.OrderGuid == parm.OrderGuid); + parm.ShopGuid = order.ShopGuid; + var modal = parm.Adapt().ToCreate(HttpContext); var res = await _OrderRefundServiceApi.AddOrderRefund(modal); return SUCCESS(res); diff --git a/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs b/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs index 751c0e0..91b086c 100644 --- a/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs +++ b/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs @@ -63,6 +63,46 @@ namespace ARW.WebApi.Controllers.Api.OrderManage.Orders } + /// + /// 获取售后订单商品列表(Api) + /// + /// 查询参数 + /// + [HttpGet("getOrderRefundGoods")] + public async Task GetOrderRefundGoods([FromQuery] OrderDtoApi parm) + { + var res = await _OrderServiceApi.GetOrderRefundGoodsList(parm); + return SUCCESS(res); + } + + + + /// + /// 获取Order详情(Api) + /// + /// 查询参数 + /// + [HttpGet("getOrderDetails")] + public async Task GetOrderDetails([FromQuery] OrderDtoApi parm) + { + if (parm == null) throw new CustomException("参数错误!"); + + var res = await _OrderServiceApi.GetOrderDetails(parm); + + if (res != "[]") + { + var data = res.FromJSON(); + return SUCCESS(data); + } + else + { + return SUCCESS(res); + } + + } + + + /// /// 待付款取消订单 /// @@ -130,31 +170,6 @@ namespace ARW.WebApi.Controllers.Api.OrderManage.Orders } - /// - /// 获取Order详情(Api) - /// - /// 查询参数 - /// - [HttpGet("getOrderDetails")] - public async Task GetOrderDetails([FromQuery] OrderDtoApi parm) - { - if (parm == null) throw new CustomException("参数错误!"); - - var res = await _OrderServiceApi.GetOrderDetails(parm); - - if (res != "[]") - { - var data = res.FromJSON(); - return SUCCESS(data); - } - else - { - return SUCCESS(res); - } - - } - - /// /// 删除订单 /// diff --git a/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs b/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs index 89486ac..7194699 100644 --- a/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs +++ b/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs @@ -18,6 +18,14 @@ using ARW.Admin.WebApi.Framework; using ARW.Service.Business.IBusinessService.OrderManage.Orders; using Geocoding; using ARW.Service.Business.IBusinessService.ShopManager.Shops; +using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus; +using ARW.Service.Business.IBusinessService.OrderManage.OrderGoodss; +using ARW.Service.Business.IBusinessService.Payments; +using Infrastructure.WeChat.TenPay; +using System.Net.Http; +using ARW.Service.Business.IBusinessService.GoodsManager.Goodss; +using Senparc.CO2NET.HttpUtility; +using ARW.Model.Models.Business.Payments; namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds { @@ -33,15 +41,26 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds { private readonly IOrderRefundService _OrderRefundService; private readonly IShopService _ShopService; - + private readonly IPaymentService _PaymentService; + private readonly SenparcHttpClient _httpClient; + private readonly IGoodsService _GoodsService; + private readonly IGoodsSkuService _GoodsSkuService; + private readonly IOrderService _OrderService; + private readonly IOrderGoodsService _OrderGoodsService; /// /// 依赖注入 /// /// 售后单记录表服务 - public OrderRefundController(IOrderRefundService OrderRefundService, IShopService shopService) + public OrderRefundController(IOrderRefundService OrderRefundService, IShopService shopService, IPaymentService paymentService, SenparcHttpClient httpClient, IGoodsService goodsService, IGoodsSkuService goodsSkuService, IOrderService orderService, IOrderGoodsService orderGoodsService) { _OrderRefundService = OrderRefundService; _ShopService = shopService; + _PaymentService = paymentService; + _httpClient = httpClient; + _GoodsService = goodsService; + _GoodsSkuService = goodsSkuService; + _OrderService = orderService; + _OrderGoodsService = orderGoodsService; } @@ -103,7 +122,72 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds { if (parm == null) { throw new CustomException("请求参数错误"); } - var res = await _OrderRefundService.AuditOrderRefund(parm); + if (parm.IsAgree == true) + { + var orderRefund = await _OrderRefundService.GetFirstAsync(s => s.OrderRefundGuid == parm.OrderRefundGuid); + var order = await _OrderService.GetFirstAsync(s => s.OrderGuid == orderRefund.OrderGuid); + var payment = await _PaymentService.GetFirstAsync(s => s.PaymentGuid == order.PaymentGuid); + + if (orderRefund.RefundType == 2) + { + Pay pay = new Pay(_httpClient); + var transactionId = payment.PaymentWeixinNumber; + string paymentRefundNumber = ""; + if (!string.IsNullOrEmpty(payment.PaymentRefundNumber)) + { + paymentRefundNumber = payment.PaymentRefundNumber; + } + + var totalFee = payment.PaymentMoney * 100; + var canleRes = await pay.Refund(transactionId, totalFee, paymentRefundNumber, "商品退款"); + if (canleRes.ResultCode.Success == false) + throw new CustomException("订单退款失败!"); + else + { + await _OrderRefundService.UpdateAsync(f => new OrderRefund + { + RefundActualMoney = totalFee, + }, f => f.OrderRefundGuid == orderRefund.OrderRefundGuid); + + await _PaymentService.UpdateAsync(f => new Payment + { + PaymentRefundNumber = canleRes.out_refund_no, + }, f => f.PaymentNumber == canleRes.out_trade_no); + + var orderGoodsList = await _OrderGoodsService.GetListAsync(s => s.OrderGuid == orderRefund.OrderGuid); + // 库存加回来 + foreach (var orderGood in orderGoodsList) + { + var goods = await _GoodsService.GetFirstAsync(s => s.GoodsGuid == orderGood.GoodsGuid); + var shop = await _ShopService.GetFirstAsync(s => s.ShopGuid == goods.ShopGuid); + + goods.GoodsSalesActual += orderGood.GoodsTotalNum; + await _GoodsService.UpdateAsync(goods); + shop.ShopSalesOrderCount += orderGood.GoodsTotalNum; + await _ShopService.UpdateAsync(shop); + + if (goods.GoodsDeductStockType == 2) + { + if (orderGood.GoodsSkuId != 0) + { + var sku = await _GoodsSkuService.GetFirstAsync(s => s.GoodsSkuId == orderGood.GoodsSkuId); + sku.GoodsSkuStockNum += orderGood.GoodsTotalNum; + goods.GoodsTotalInventory += orderGood.GoodsTotalNum; + await _GoodsSkuService.UpdateAsync(sku); + await _GoodsService.UpdateAsync(goods); + } + else + { + goods.GoodsTotalInventory += orderGood.GoodsTotalNum; + await _GoodsService.UpdateAsync(goods); + } + } + } + } + } + } + + var res = await _OrderRefundService.AuditOrderRefund(parm); return SUCCESS(res); } @@ -119,6 +203,66 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds { if (parm == null) { throw new CustomException("请求参数错误"); } + var orderRefund = await _OrderRefundService.GetFirstAsync(s => s.OrderRefundGuid == parm.OrderRefundGuid); + var order = await _OrderService.GetFirstAsync(s => s.OrderGuid == orderRefund.OrderGuid); + var payment = await _PaymentService.GetFirstAsync(s => s.PaymentGuid == order.PaymentGuid); + + Pay pay = new Pay(_httpClient); + var transactionId = payment.PaymentWeixinNumber; + string paymentRefundNumber = ""; + if (!string.IsNullOrEmpty(payment.PaymentRefundNumber)) + { + paymentRefundNumber = payment.PaymentRefundNumber; + } + + var totalFee = payment.PaymentMoney * 100; + var canleRes = await pay.Refund(transactionId, totalFee, paymentRefundNumber, "商品退款"); + if (canleRes.ResultCode.Success == false) + throw new CustomException("订单退款失败!"); + else + { + await _OrderRefundService.UpdateAsync(f => new OrderRefund + { + RefundActualMoney = totalFee, + }, f => f.OrderRefundGuid == orderRefund.OrderRefundGuid); + + var respones = await _PaymentService.UpdateAsync(f => new Payment + { + PaymentRefundNumber = canleRes.out_refund_no, + }, f => f.PaymentNumber == canleRes.out_trade_no); + + var orderGoodsList = await _OrderGoodsService.GetListAsync(s => s.OrderGuid == orderRefund.OrderGuid); + // 库存加回来 + foreach (var orderGood in orderGoodsList) + { + var goods = await _GoodsService.GetFirstAsync(s => s.GoodsGuid == orderGood.GoodsGuid); + var shop = await _ShopService.GetFirstAsync(s => s.ShopGuid == goods.ShopGuid); + + goods.GoodsSalesActual += orderGood.GoodsTotalNum; + await _GoodsService.UpdateAsync(goods); + shop.ShopSalesOrderCount += orderGood.GoodsTotalNum; + await _ShopService.UpdateAsync(shop); + + if (goods.GoodsDeductStockType == 2) + { + if (orderGood.GoodsSkuId != 0) + { + var sku = await _GoodsSkuService.GetFirstAsync(s => s.GoodsSkuId == orderGood.GoodsSkuId); + sku.GoodsSkuStockNum += orderGood.GoodsTotalNum; + goods.GoodsTotalInventory += orderGood.GoodsTotalNum; + await _GoodsSkuService.UpdateAsync(sku); + await _GoodsService.UpdateAsync(goods); + } + else + { + goods.GoodsTotalInventory += orderGood.GoodsTotalNum; + await _GoodsService.UpdateAsync(goods); + } + } + } + + } + var res = await _OrderRefundService.ConfirmsReceipt(parm); return SUCCESS(res); }