using Infrastructure.Attribute; using Microsoft.AspNetCore.Http; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ARW.Model; using ARW.Repository; using ARW.Repository.Business.OrderManage.OrderRefunds; using ARW.Service.Api.IBusinessService.OrderManage.OrderRefunds; using ARW.Model.Dto.Api.OrderManage.OrderRefunds; using ARW.Model.Models.Business.OrderManage.OrderRefunds; using ARW.Model.Vo.Api.OrderManage.OrderRefunds; using System.Reflection.Metadata; using ARW.Model.Models.Business.ShopManager.Shops; using ARW.Model.Vo.Api.OrderManage.Orders; using ARW.Repository.Business.OrderManage.Orders; using ARW.Repository.Business.OrderManage.OrderGoodss; using ARW.Repository.Business.GoodsManager.Goodss; using ARW.Repository.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.SpecValues; using ARW.Repository.Business.GoodsManager.GoodsSpecs.SpecValues; using ARW.Service.Api.IBusinessService.OrderManage.Orders; using OfficeOpenXml; namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds { /// /// 售后单记录表接口实现类Api /// /// @author lwh /// @date 2023-10-16 /// [AppService(ServiceType = typeof(IOrderRefundServiceApi), ServiceLifetime = LifeTime.Transient)] public class OrderRefundServiceImplApi : BaseService, IOrderRefundServiceApi { private readonly OrderRefundRepository _OrderRefundRepository; private readonly OrderRepository _OrderRepository; private readonly OrderGoodsRepository _OrderGoodsRepository; private readonly GoodsRepository _GoodsRepository; private readonly IOrderServiceApi _OrderServiceApi; public OrderRefundServiceImplApi(OrderRefundRepository OrderRefundRepository, OrderRepository orderRepository, OrderGoodsRepository orderGoodsRepository, GoodsRepository goodsRepository, IOrderServiceApi orderServiceApi) { this._OrderRefundRepository = OrderRefundRepository; _OrderRepository = orderRepository; _OrderGoodsRepository = orderGoodsRepository; _GoodsRepository = goodsRepository; _OrderServiceApi = orderServiceApi; } #region Api接口代码 /// /// 查询售后单记录表列表(Api) /// /// /// public async Task> GetOrderRefundListApi(OrderRefundQueryDtoApi parm) { //开始拼装查询条件d var predicate = Expressionable.Create(); predicate = predicate.AndIF(parm.CustomerGuid != 0, s => s.CustomerGuid == parm.CustomerGuid); predicate = predicate.AndIF(parm.RefundType != null, s => s.RefundType == parm.RefundType); predicate = predicate.AndIF(parm.RefundReason != null, s => s.RefundReason == parm.RefundReason); predicate = predicate.AndIF(parm.GoodsReceiveStatus != null, s => s.GoodsReceiveStatus == parm.GoodsReceiveStatus); predicate = predicate.AndIF(parm.MerchantAuditStatus != null, s => s.MerchantAuditStatus == parm.MerchantAuditStatus); predicate = predicate.AndIF(parm.IsCustomerSend != null, s => s.IsCustomerSend == parm.IsCustomerSend); predicate = predicate.AndIF(parm.OrderRefundStatus != null, s => s.OrderRefundStatus == parm.OrderRefundStatus); var query = _OrderRefundRepository .Queryable() .Where(predicate.ToExpression()) .LeftJoin((s, c) => s.ShopGuid == c.ShopGuid) .OrderBy(s => s.Create_time, OrderByType.Desc) .Select((s, c) => new OrderRefundVoApi { OrderRefundId = s.OrderRefundId, OrderRefundGuid = s.OrderRefundGuid, StoreName = c.ShopName, OrderGuid = s.OrderGuid, RefundType = s.RefundType, MerchantAuditStatus = s.MerchantAuditStatus, RefundMoney = s.RefundMoney, IsCustomerSend = s.IsCustomerSend, OrderRefundStatus = s.OrderRefundStatus, }); var list = await query.ToPageAsync(parm); foreach (var item in list.Result) { var orderRefundGood = new List(); /* 获取售后订单商品列表 */ var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == item.OrderGuid); foreach (var _item in orderGoodsList) { var good = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == _item.GoodsGuid); var orderGood = new OrderGoodsApiVo { GoodsGuId = good.GoodsGuid, Thumb = good.GoodsPicture.Split(',').First(), Title = good.GoodsName, SkuId = _item.GoodsSkuId, Price = _item.GoodsPrice, BuyQuantity = _item.GoodsTotalNum }; if (_item.GoodsSkuId != 0) orderGood.Specifications = await _OrderServiceApi.GetGoodsSpecList(_item.GoodsSkuId); orderRefundGood.Add(orderGood); } item.OrderRefundGoodList = orderRefundGood; /* 处理售后订单状态描述 */ // 待审核 if (item.MerchantAuditStatus == 1) { item.Status = 1; item.EserRightsStatusDesc = "商家将尽快确认您的退款申请"; } // 已审核 if (item.MerchantAuditStatus == 2) { item.Status = 2; item.EserRightsStatusDesc = "商家已审核确认,预计1小时内发起退款"; } // 已发货 if (item.IsCustomerSend == 2) { item.Status = 3; item.EserRightsStatusDesc = "商家已退款,退回资金将原路三个工作日内返回您的账户"; } if (item.OrderRefundStatus == 3) { item.Status = 4; item.EserRightsStatusDesc = "退款/售后己完成"; } } return list; } /// /// 添加售后单记录表 /// public async Task AddOrderRefund(OrderRefund model) { model.GoodsReceiveStatus = 1; model.MerchantAuditStatus = 1; model.IsCustomerSend = 1; model.OrderRefundStatus = 1; model.IsMerchantReceive = 1; var response = await _OrderRefundRepository.InsertReturnSnowflakeIdAsync(model); return "添加成功!"; } /// /// 撤销申请 /// public async Task RepealOrderRefund(AddOrderRefundApiDto parm) { var response = await _OrderRefundRepository.UpdateAsync(f => new OrderRefund { OrderRefundStatus = 4 }, s => s.OrderRefundGuid == parm.OrderRefundGuid); return "撤销成功!"; } /// /// 买家发货(填写运单号) /// public async Task BuyerDelivery(BuyerDeliveryApiDto parm) { var response = await _OrderRefundRepository.UpdateAsync(f => new OrderRefund { LogisticsCompanyGuid = parm.LogisticsCompanyGuid, ExpressNo = parm.ExpressNo, CustomerWaybillRemark = parm.CustomerWaybillRemark, IsCustomerSend = 2, CustomerSendTime = DateTime.Now, }, s => s.OrderRefundGuid == parm.OrderRefundGuid); return "发货成功!"; } /// /// 查询售后单记录表详情(Api) /// /// /// public async Task GetOrderRefundDetails(OrderRefundDtoApi parm) { var query = _OrderRefundRepository .Queryable() .Where(s => s.OrderRefundGuid == parm.OrderRefundGuid) .Select(s => new OrderRefundApiDetailsVo { OrderRefundId = s.OrderRefundId, OrderRefundGuid = s.OrderRefundGuid, OrderGuid = s.OrderGuid, CustomerGuid = s.CustomerGuid, RefundType = s.RefundType, RefundReason = s.RefundReason, CustomerRefundDesc = s.CustomerRefundDesc, CustomerRefundImg = s.CustomerRefundImg, GoodsReceiveStatus = s.GoodsReceiveStatus, MerchantAuditStatus = s.MerchantAuditStatus, MerchantRefuseDesc = s.MerchantRefuseDesc, RefundMoney = s.RefundMoney, ShopRefundAddressGuid = s.ShopRefundAddressGuid, IsCustomerSend = s.IsCustomerSend, CustomerSendTime = s.CustomerSendTime, LogisticsCompanyGuid = s.LogisticsCompanyGuid, ExpressNo = s.ExpressNo, OrderRefundStatus = s.OrderRefundStatus, }).Take(1); return await query.ToJsonAsync(); } #region 业务方法调用 /// /// 处理售后订单状态描述 /// /// /// //public OrderRefundVoApi GetOrderRefundStatus(OrderRefundVoApi data) //{ // // 待审核 // if (data.MerchantAuditStatus == 1) // { // data.Status = 1; // data.EserRightsStatusDesc = "商家将尽快确认您的退款申请"; // } // // 已审核 // if (data.MerchantAuditStatus == 2) // { // data.Status = 2; // data.EserRightsStatusDesc = "商家已审核确认,预计1小时内发起退款"; // } // // 已发货 // if (data.IsCustomerSend == 2) // { // data.Status = 3; // data.EserRightsStatusDesc = "商家已退款,退回资金将原路三个工作日内返回您的账户"; // } // if (data.OrderRefundStatus == 3) // { // data.Status = 4; // data.EserRightsStatusDesc = "退款/售后己完成"; // } // return data; //} #endregion #endregion } }