emoticon_api/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs
2023-10-20 22:57:53 +08:00

285 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}