using AlibabaSDK.Api;
|
using AlibabaSDK.Request;
|
using CommonUtil;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using Operater.DAL;
|
using Operater.DbModel;
|
using Operater.DTO.System;
|
using Operater.Service;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Threading.Tasks;
|
using YouZanSDKStandard.Api;
|
using YouZanSDKStandard.Api.Request;
|
|
namespace Api.Operater.Controllers
|
{
|
[Route(TopConstants.API_ROUTE)]
|
public class RefundManageController : BaseController
|
{
|
public ILoginUserInfoService _iloginUserInfoService;
|
public IRefundService _irefundService;
|
public RefundManageController(ILoginUserInfoService loginUserInfoService, IRefundService refundService)
|
{
|
_iloginUserInfoService = loginUserInfoService;
|
_irefundService = refundService;
|
}
|
/// <summary>
|
/// 获取退款列表
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult GetRefundList([FromBody] GetRefundListRequest request)
|
{
|
var expression = Expressionable.Create<YzRefund>().AndIF(!request.YzTid.IsNullOrEmpty(), t => t.YzTid == request.YzTid)
|
.AndIF(!request.YzRefundStatus.IsNullOrEmpty(), t => t.YzRefundStaus == request.YzRefundStatus)
|
.AndIF(request.RelationType >= 0, t => t.RelationYzRefund == request.RelationType)
|
.AndIF(request.RelationType==0,t=>t.AliTid!=null)
|
.AndIF(!request.YzOid.IsNullOrEmpty(), t => t.YzOid == request.YzOid)
|
.AndIF(!request.YzRefundId.IsNullOrEmpty(), t => t.YzTid == request.YzRefundId)
|
.ToExpression();
|
int totalCount = 0;
|
var refundList = new YzRefundDAL().ListPageGet(expression, t => t.UpdateTime, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalCount);
|
|
return Success(refundList, request.PageNo, request.PageSize, totalCount);
|
}
|
/// <summary>
|
/// 有赞同意退款
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult AgressRefundPrice([FromBody] AgressRefundPriceRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
request.YzToken = userInfo.YzToken;
|
request.AliToken = userInfo.AlibabaToken;
|
var rsp = _irefundService.CreateRefund(request);
|
if (rsp.Success)
|
{
|
return Success(true);
|
}
|
return Error(rsp.ErrorMsg);
|
}
|
|
/// <summary>
|
/// 1688申请退款
|
/// </summary>
|
/// <param name=""></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult AliApplyFor([FromBody] AliApplyForRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
request.YzToken = userInfo.YzToken;
|
request.AliToken = userInfo.AlibabaToken;
|
var rsp = _irefundService.ApplyForAli(request);
|
if (rsp.Success)
|
{
|
return Success(true);
|
}
|
return Error(rsp.ErrorMsg);
|
}
|
|
/// <summary>
|
/// 上传买家发货信息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult ReturnGoods([FromBody] ReturnGoodsRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
request.YzToken = userInfo.YzToken;
|
request.AliToken = userInfo.AlibabaToken;
|
var rsp = _irefundService.ReturnGoods(request);
|
if (rsp.Success)
|
{
|
return Success(true);
|
}
|
return Error(rsp.ErrorMsg);
|
}
|
|
[HttpPost]
|
public IActionResult JudgeAliTrade([FromBody] JudgeAliTradeRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
JudgeAliTradeResponse response = new JudgeAliTradeResponse();
|
var refundRecord = new YzRefundDAL().GetById(request.RefundId);
|
if (refundRecord.AliTid.IsNullOrEmpty())
|
{//没有创建订单
|
response.IsAliTrade = false;
|
return Success(response);
|
}
|
response.IsAliTrade = true;
|
//判断订单有没有付款
|
//获取1688订单详情
|
AlibabaTradeDeatilGetRequest aliTradeRequest = new AlibabaTradeDeatilGetRequest()
|
{
|
orderId = refundRecord.AliTid,
|
webSite = "1688"
|
};
|
var aliTraderesponse = AliabaClient.Execute(aliTradeRequest, userInfo.AlibabaToken);
|
if (aliTraderesponse.IsNull() || !aliTraderesponse.Success || aliTraderesponse.result.IsNull())
|
{//接口请求失败
|
LogUtil.Info("接口获取1688订单详情error:" + (aliTraderesponse.IsNull() ? "null" : aliTraderesponse.ErrorMsg), "1688订单详情eror");
|
return Error("接口获取1688订单详情error:" + (aliTraderesponse.IsNull() ? "null" : aliTraderesponse.ErrorMsg));
|
}
|
//判断订单是否已付款
|
if (aliTraderesponse.result.baseInfo.status != "waitbuyerpay")
|
{//已付款
|
response.IsAliTradePay = true;
|
}
|
return Success(response);
|
}
|
|
/// <summary>
|
/// 拒绝退款
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult RefuseRefund([FromBody] RefuseRefundRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
var refundRecord = new YzRefundDAL().GetById(request.RefundId);
|
//调用有赞接口
|
YouZanRefundRefuseRequest reReq = new YouZanRefundRefuseRequest()
|
{
|
version = refundRecord.Version,
|
refund_id = refundRecord.RefundId,
|
remark = request.Remark
|
};
|
var reRsp = YouZanClient.Execute(reReq, userInfo.YzToken);
|
if (reRsp.IsNull() || !reRsp.success)
|
{//
|
return Error($"拒绝失败:" + (reRsp.IsNull() ? "null" : reRsp.message));
|
}
|
//修改表里状态
|
YzRefund yzRefund = new YzRefund()
|
{
|
RelationYzRefund = 2
|
};
|
new YzRefundDAL().Update(yzRefund, i => new { i.RelationYzRefund }, t => t.RefundId == request.RefundId);
|
return Success(true);
|
}
|
|
[HttpPost]
|
public IActionResult GetRefundDetailUrl([FromBody] GetRefundDetailUrlRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
return Success($"https://dian{userInfo.YzShopId}.shangjia.youzan.com/v4/trade/refund/detail?orderNo={request.TradeId}&refundId={request.RefundId}");
|
}
|
|
[HttpPost]
|
public IActionResult GetRefundDetail([FromBody] GetRefundDetailRequest request)
|
{
|
GetRefundDetailResponse response = new GetRefundDetailResponse()
|
{
|
refundId = request.RefundId
|
};
|
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
var refundRecord = new YzRefundDAL().GetById(request.RefundId);
|
if (!refundRecord.AliRefundId.IsNullOrEmpty())
|
{
|
response.IsAliRefund = true;
|
return Success(response);
|
}
|
response.disputeRequest = refundRecord.RefundType == "REFUND_ONLY" ? "refund" : "returnRefund";
|
//获取1688订单详情
|
AlibabaTradeDeatilGetRequest aliTradeRequest = new AlibabaTradeDeatilGetRequest()
|
{
|
orderId = refundRecord.AliTid,
|
webSite = "1688"
|
};
|
var aliTraderesponse = AliabaClient.Execute(aliTradeRequest, userInfo.AlibabaToken);
|
if (aliTraderesponse.IsNull() || !aliTraderesponse.Success || aliTraderesponse.result.IsNull())
|
{//接口请求失败
|
LogUtil.Info("接口获取1688订单详情error:" + (aliTraderesponse.IsNull() ? "null" : aliTraderesponse.ErrorMsg), "1688订单详情eror");
|
return Error("接口获取1688订单详情error:" + (aliTraderesponse.IsNull() ? "null" : aliTraderesponse.ErrorMsg));
|
}
|
var proItems = aliTraderesponse.result.productItems.Where(t => t.subItemID == long.Parse(refundRecord.AliOid)).ToList();
|
if (proItems.IsNull() || proItems.Count == 0)
|
{
|
return Error("未找到对应1688子订单数据");
|
}
|
response.applyPayment = proItems[0].itemAmount;
|
response.applyCarriage = aliTraderesponse.result.baseInfo.shippingFee.IsNull() ? 0 : (decimal)aliTraderesponse.result.baseInfo.shippingFee;
|
|
|
switch (aliTraderesponse.result.baseInfo.status)
|
{
|
case "waitsellersend":
|
response.goodsStatus = "refundWaitSellerSend";
|
break;
|
case "waitbuyerreceive":
|
response.goodsStatus = "refundWaitBuyerReceive";
|
break;
|
case "confirm_goods":
|
response.goodsStatus = "refundBuyerReceived";
|
break;
|
case "success":
|
response.goodsStatus = "aftersaleBuyerReceived";
|
break;
|
default:
|
response.goodsStatus = "refundWaitSellerSend";
|
break;
|
}
|
//获取退款原因
|
List<long> aliOids = new List<long>();
|
aliOids.Add(long.Parse(refundRecord.AliOid));
|
AlibabaGetRefundReasonListRequest reasonReq = new AlibabaGetRefundReasonListRequest()
|
{
|
orderId = long.Parse(refundRecord.AliTid),
|
goodsStatus = response.goodsStatus,
|
orderEntryIds = aliOids
|
};
|
var reasonRsp = AliabaClient.Execute(reasonReq, userInfo.AlibabaToken);
|
if (reasonRsp.IsNull() || !reasonRsp.result.success)
|
{
|
return Error("获取1688退款原因失败:" + (reasonRsp.IsNull() ? "null" : reasonRsp.result.message));
|
}
|
var reason = reasonRsp.result.result.reasons.Where(t => t.needVoucher == false).ToList();
|
if (reason.IsNull() || reason.Count == 0)
|
{
|
return Error("获取1688退款原因失败");
|
}
|
List<AlibabRefundDetail> reasonList = JSONUtil.JsonToObject<List<AlibabRefundDetail>>(JSONUtil.ObjectToJson(reason));
|
response.ReasonList = reasonList;
|
return Success(response);
|
}
|
|
/// <summary>
|
/// 获取1688退款地址信息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult GetAliRefundDetail([FromBody] GetAliRefundDetailRequest request)
|
{
|
var userInfo = _iloginUserInfoService.GetUserInfo();
|
var refundRecord = new YzRefundDAL().GetById(request.RefundId);
|
GetAliRefundDetailResponse response = new GetAliRefundDetailResponse()
|
{
|
Name="赵333",
|
Mobile="12435345",
|
Address="常州市xxxx"
|
};
|
|
if (refundRecord.AliRefundId.IsNullOrEmpty())
|
{
|
return Success(response);
|
}
|
//调用1688退款单详情接口
|
AlibabaRefundDetailRequest aliReq = new AlibabaRefundDetailRequest()
|
{
|
orderId=refundRecord.AliTid,
|
queryType="3"
|
};
|
var aliRsp = AliabaClient.Execute(aliReq,userInfo.AlibabaToken);
|
if(aliRsp.IsNull()|| aliRsp.result.IsNull())
|
{
|
return Success(response);
|
}
|
response.Name = aliRsp.result.opOrderRefundModels[0].sellerRealName;
|
response.Mobile = aliRsp.result.opOrderRefundModels[0].sellerMobile;
|
response.Address = aliRsp.result.opOrderRefundModels[0].sellerReceiveAddress;
|
return Success(response);
|
}
|
}
|
}
|