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;
}
///
/// 获取退款列表
///
///
///
[HttpPost]
public IActionResult GetRefundList([FromBody] GetRefundListRequest request)
{
var expression = Expressionable.Create().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);
}
///
/// 有赞同意退款
///
///
[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);
}
///
/// 1688申请退款
///
///
///
[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);
}
///
/// 上传买家发货信息
///
///
///
[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);
}
///
/// 拒绝退款
///
///
///
[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 aliOids = new List();
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 reasonList = JSONUtil.JsonToObject>(JSONUtil.ObjectToJson(reason));
response.ReasonList = reasonList;
return Success(response);
}
///
/// 获取1688退款地址信息
///
///
///
[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);
}
}
}