285 lines
11 KiB
C#
285 lines
11 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 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
|
||
{
|
||
/// <summary>
|
||
/// 售后单记录表接口实现类Api
|
||
///
|
||
/// @author lwh
|
||
/// @date 2023-10-16
|
||
/// </summary>
|
||
[AppService(ServiceType = typeof(IOrderRefundServiceApi), ServiceLifetime = LifeTime.Transient)]
|
||
public class OrderRefundServiceImplApi : BaseService<OrderRefund>, 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接口代码
|
||
|
||
|
||
/// <summary>
|
||
/// 查询售后单记录表列表(Api)
|
||
/// </summary>
|
||
/// <param name="parm"></param>
|
||
/// <returns></returns>
|
||
public async Task<PagedInfo<OrderRefundVoApi>> GetOrderRefundListApi(OrderRefundQueryDtoApi parm)
|
||
{
|
||
//开始拼装查询条件d
|
||
var predicate = Expressionable.Create<OrderRefund>();
|
||
|
||
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<Shop>((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<OrderGoodsApiVo>();
|
||
|
||
/* 获取售后订单商品列表 */
|
||
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;
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 添加售后单记录表
|
||
/// </summary>
|
||
public async Task<string> 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 "添加成功!";
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 撤销申请
|
||
/// </summary>
|
||
public async Task<string> RepealOrderRefund(AddOrderRefundApiDto parm)
|
||
{
|
||
var response = await _OrderRefundRepository.UpdateAsync(f => new OrderRefund
|
||
{
|
||
OrderRefundStatus = 4
|
||
}, s => s.OrderRefundGuid == parm.OrderRefundGuid);
|
||
return "撤销成功!";
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 买家发货(填写运单号)
|
||
/// </summary>
|
||
public async Task<string> 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 "发货成功!";
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 查询售后单记录表详情(Api)
|
||
/// </summary>
|
||
/// <param name="parm"></param>
|
||
/// <returns></returns>
|
||
public async Task<string> 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 业务方法调用
|
||
|
||
|
||
/// <summary>
|
||
/// 处理售后订单状态描述
|
||
/// </summary>
|
||
/// <param name="data"></param>
|
||
/// <returns></returns>
|
||
//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
|
||
|
||
}
|
||
}
|