micro_mall_api/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs
2023-10-16 23:02:09 +08:00

245 lines
10 KiB
C#

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
{
/// <summary>
/// 售后单记录表接口实现类
///
/// @author lwh
/// @date 2023-08-29
/// </summary>
[AppService(ServiceType = typeof(IOrderRefundService), ServiceLifetime = LifeTime.Transient)]
public class OrderRefundServiceImpl : BaseService<OrderRefund>, 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)
{
this._OrderRefundRepository = OrderRefundRepository;
_OrderService = orderService;
_ShopAddressRepository = shopAddressRepository;
_RegionService = regionService;
}
#region
/// <summary>
/// 查询售后单记录表分页列表
/// </summary>
public async Task<PagedInfo<OrderRefundVo>> GetOrderRefundList(OrderRefundQueryDto parm)
{
//开始拼装查询条件d
var predicate = Expressionable.Create<OrderRefund>();
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<Customer>((s, c) => s.CustomerGuid == c.CustomerGuid)
.LeftJoin<Order>((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,
OrderNumber = d.OrderNumber,
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:HH:dd mm:ss")
});
var list = await query.ToPageAsync(parm);
foreach (var item in list.Result)
{
// 获取订单商品信息
item.GoodsInfoList = await _OrderService.GetOrderGoodsList(item.OrderGuid);
}
return list;
}
/// <summary>
/// 查询售后单记录表详情
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public async Task<string> GetOrderRefundDetails(OrderRefundDetailsDto parm)
{
var query = _OrderRefundRepository
.Queryable()
.LeftJoin<Customer>((s, c) => s.CustomerGuid == c.CustomerGuid)
.LeftJoin<Order>((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,
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.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:HH:dd mm:ss")
}).Take(1);
var json = await query.ToJsonAsync();
if (json != "[]")
{
var data = Tools.JsonToVo<OrderRefundDetailVo>(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;
}
/// <summary>
/// 添加或修改售后单记录表
/// </summary>
public async Task<string> AddOrUpdateOrderRefund(OrderRefund model)
{
if (model.OrderRefundId != 0)
{
var response = await _OrderRefundRepository.UpdateAsync(model);
return "修改成功!";
}
else
{
var response = await _OrderRefundRepository.InsertReturnSnowflakeIdAsync(model);
return "添加成功!";
}
}
#region Excel处理
/// <summary>
/// Excel数据导出处理
/// </summary>
public async Task<List<OrderRefundVo>> HandleExportData(List<OrderRefundVo> data)
{
return data;
}
#endregion
/// <summary>
/// 获取商家收货地址
/// </summary>
/// <param name="shopAddressGuid">商家退货地址guid</param>
/// <returns></returns>
public async Task<OrderReceiveVo> 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
}
}