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 Infrastructure; using ARW.Model; using ARW.Repository; using ARW.Repository.Business.OrderManage.OrderRefunds; using ARW.Service.Business.IBusinessService.OrderManage.OrderRefunds; using ARW.Model.Dto.Business.OrderManage.OrderRefunds; using ARW.Model.Models.Business.OrderManage.OrderRefunds; using ARW.Model.Vo.Business.OrderManage.OrderRefunds; using ARW.Model.Models.Business.Custom.Customers; using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Service.Business.IBusinessService.OrderManage.Orders; using ARW.Model.Models.Business.OrderManage.Orders; using ARW.Model.Dto.Api.OrderManage.OrderRefunds; using ARW.Model.Vo.Api.OrderManage.OrderRefunds; using ARW.Common; using ARW.Model.Vo.Business.OrderManage.Orders; using Senparc.CO2NET.Extensions; using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; using ARW.Model.Models.Business.ShopManager.ShopAddresss; using ARW.Repository.Business.ShopManager.ShopAddresss; using ARW.Service.Business.IBusinessService.Custom.Regions; using ARW.Repository.Business.LogisticsManage.LogisticsCompanys; namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds { /// /// 售后单记录表接口实现类 /// /// @author lwh /// @date 2023-08-29 /// [AppService(ServiceType = typeof(IOrderRefundService), ServiceLifetime = LifeTime.Transient)] public class OrderRefundServiceImpl : BaseService, IOrderRefundService { private readonly OrderRefundRepository _OrderRefundRepository; private readonly ShopAddressRepository _ShopAddressRepository; private readonly LogisticsCompanyRepository _LogisticsCompanyRepository; private readonly IOrderService _OrderService; private readonly IRegionService _RegionService; public OrderRefundServiceImpl(OrderRefundRepository OrderRefundRepository, IOrderService orderService, ShopAddressRepository shopAddressRepository, IRegionService regionService, LogisticsCompanyRepository logisticsCompanyRepository) { this._OrderRefundRepository = OrderRefundRepository; _OrderService = orderService; _ShopAddressRepository = shopAddressRepository; _RegionService = regionService; _LogisticsCompanyRepository = logisticsCompanyRepository; } #region 业务逻辑代码 /// /// 查询售后单记录表分页列表 /// public async Task> GetOrderRefundList(OrderRefundQueryDto parm) { //开始拼装查询条件d var predicate = Expressionable.Create(); predicate = predicate.AndIF(parm.ShopGuid != 0, s => s.ShopGuid == parm.ShopGuid); 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); predicate = predicate.AndIF(parm.BeginTime != DateTime.MinValue, s => s.Create_time >= parm.BeginTime); predicate = predicate.AndIF(parm.EndTime != DateTime.MinValue, s => s.Create_time <= parm.EndTime); var query = _OrderRefundRepository .Queryable() .LeftJoin((s, c) => s.CustomerGuid == c.CustomerGuid) .LeftJoin((s, c, d) => s.OrderGuid == d.OrderGuid) .Where(predicate.ToExpression()) .OrderBy(s => s.Create_time, OrderByType.Desc) .Select((s, c, d) => new OrderRefundVo { OrderRefundId = s.OrderRefundId, OrderRefundGuid = s.OrderRefundGuid, OrderGuid = s.OrderGuid, ShopGuid = s.ShopGuid, OrderNumber = d.OrderNumber, PayPrice = d.PayPrice, ExpressPrice = d.ExpressPrice, CustomerGuid = s.CustomerGuid, CustomerNickName = c.CustomerNickname, CustomerMobilePhoneNumber = c.CustomerMobilePhoneNumber, CustomerAvatar = c.CustomerAvatar, 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, IsMerchantReceive = s.IsMerchantReceive, CreateTime = s.Create_time.ToString("yyyy-MM-dd hh:mm") }); var list = await query.ToPageAsync(parm); foreach (var item in list.Result) { // 获取订单商品信息 item.GoodsInfoList = await _OrderService.GetOrderGoodsList(item.OrderGuid); } return list; } /// /// 查询售后单记录表详情 /// /// /// public async Task GetOrderRefundDetails(OrderRefundDetailsDto parm) { var query = _OrderRefundRepository .Queryable() .LeftJoin((s, c) => s.CustomerGuid == c.CustomerGuid) .LeftJoin((s, c, d) => s.OrderGuid == d.OrderGuid) .Where(s => s.OrderRefundId == parm.OrderRefundId) .Select((s, c, d) => new OrderRefundDetailVo { OrderRefundId = s.OrderRefundId, OrderRefundGuid = s.OrderRefundGuid, ShopGuid = s.ShopGuid, OrderGuid = s.OrderGuid, OrderNumber = d.OrderNumber, CustomerPhone = c.CustomerMobilePhoneNumber, RefundType = s.RefundType, RefundReason = s.RefundReason, CustomerRefundDesc = s.CustomerRefundDesc, CustomerRefundImg = s.CustomerRefundImg, GoodsReceiveStatus = s.GoodsReceiveStatus, MerchantAuditStatus = s.MerchantAuditStatus, MerchantRefuseDesc = s.MerchantRefuseDesc, RefundMoney = s.RefundActualMoney, ShopRefundAddressGuid = s.ShopRefundAddressGuid, IsCustomerSend = s.IsCustomerSend, CustomerSendTime = s.CustomerSendTime, LogisticsCompanyGuid = s.LogisticsCompanyGuid, ExpressNo = s.ExpressNo, OrderRefundStatus = s.OrderRefundStatus, IsMerchantReceive = s.IsMerchantReceive, CreateTime = s.Create_time.ToString("yyyy-MM-dd hh:mm") }).Take(1); var json = await query.ToJsonAsync(); if (json != "[]") { var data = Tools.JsonToVo(json); data.GoodsInfoList = await _OrderService.GetOrderGoodsList(data.OrderGuid); data.OrderReceive = await GetOrderReceive(data.ShopRefundAddressGuid); if (data.LogisticsCompanyGuid != null) { var company = await _LogisticsCompanyRepository.GetFirstAsync(s => s.LogisticsCompanyGuid == data.LogisticsCompanyGuid); data.LogisticsCompany = company.LogisticsCompanyName; } json = data.ToJson(); } return json; } /// /// 审核售后订单 /// public async Task AuditOrderRefund(OrderRefundAuditDto parm) { var str = "审核成功!"; // 同意 if (parm.IsAgree == true) { var orderRefund = await _OrderRefundRepository.GetFirstAsync(s => s.OrderRefundGuid == parm.OrderRefundGuid); if(orderRefund.RefundType == 1) { 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 = "同意申请!"; } // 拒绝 if (parm.IsAgree == false) { await _OrderRefundRepository.UpdateAsync(f => new OrderRefund { MerchantAuditStatus = 3, MerchantRefuseDesc = parm.MerchantRefuseDesc, OrderRefundStatus = 2 }, s => s.OrderRefundGuid == parm.OrderRefundGuid); str = "拒绝申请!"; } return str; } /// /// 商家确认收货 /// public async Task ConfirmsReceipt(OrderRefundAuditDto parm) { await _OrderRefundRepository.UpdateAsync(f => new OrderRefund { IsMerchantReceive = 2, MerchantReceiveTime = DateTime.Now, OrderRefundStatus = 3 }, s => s.OrderRefundGuid == parm.OrderRefundGuid); return "确认收货成功"; } #region Excel处理 /// /// Excel数据导出处理 /// public async Task> HandleExportData(List data) { return data; } #endregion /// /// 获取商家收货地址 /// /// 商家退货地址guid /// public async Task GetOrderReceive(long? shopAddressGuid) { var orderReceive = new OrderReceiveVo(); var shopAddress = await _ShopAddressRepository.GetFirstAsync(s => s.ShopAddressGuid == shopAddressGuid); if (shopAddress != null) { orderReceive.ConsigneeName = shopAddress.ShopAddressContactName; orderReceive.Phone = shopAddress.ShopAddressContactNumber; orderReceive.Detail = shopAddress.ShopAddressDetailedAddress; // 获取地区名称 orderReceive.Region = await _RegionService.GetRegionFullName(shopAddress.ProvinceId, shopAddress.CityId, shopAddress.DistrictId); } return orderReceive; } #endregion } }