using AlibabaSDK.Api;
|
using AlibabaSDK.Request;
|
using Operater.DAL;
|
using Operater.DTO.System;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using CommonUtil;
|
using static AlibabaSDK.Request.AlibabaCreateRefundRequest;
|
using Operater.DbModel;
|
using YouZanSDKStandard.Api.Request;
|
using YouZanSDKStandard.Api;
|
using System.Linq;
|
using AlibabaSDK.Response;
|
|
namespace Operater.Service.System
|
{
|
public class RefundService : IRefundService
|
{
|
/// <summary>
|
/// 有赞同意退款、退货
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
public CreateRefundResponse CreateRefund(AgressRefundPriceRequest request)
|
{
|
CreateRefundResponse response = new CreateRefundResponse();
|
//获取退款关系
|
var refundRelation = new YzRefundDAL().GetById(request.refundId);
|
//有赞同意退款
|
if (request.disputeRequest == "returnRefund")
|
{//退货退款
|
if (request.name.IsNullOrEmpty() || request.address.IsNullOrEmpty() || request.mobile.IsNullOrEmpty())
|
{
|
response.Success = false;
|
response.ErrorMsg = "退货地址信息必填";
|
return response;
|
}
|
YouZanReturnGoodsAgreeRequest goodsReq = new YouZanReturnGoodsAgreeRequest()
|
{
|
version = long.Parse(refundRelation.Version),
|
refund_id = refundRelation.RefundId,
|
name = request.name,
|
mobile = request.mobile,
|
address = request.address
|
};
|
var goodsRsp = YouZanClient.Execute(goodsReq, request.YzToken);
|
if (goodsRsp.IsNull() || !goodsRsp.success)
|
{
|
response.Success = false;
|
response.ErrorMsg = "有赞退款失败:" + (goodsRsp.IsNull() ? "接口返回null" : goodsRsp.message);
|
return response;
|
}
|
}
|
else
|
{//仅退款
|
YouZanRefundAgreeRequest yzReq = new YouZanRefundAgreeRequest()
|
{
|
refund_id = refundRelation.RefundId,
|
version = long.Parse(refundRelation.Version)
|
};
|
var yzRsp = YouZanClient.Execute(yzReq, request.YzToken);
|
if (yzRsp.IsNull() || !yzRsp.data.is_success)
|
{
|
response.Success = false;
|
response.ErrorMsg = "有赞退款失败:" + (yzRsp.IsNull() ? "接口返回null" : yzRsp.message);
|
return response;
|
}
|
}
|
//记录关系
|
YzRefund yzRefund = new YzRefund()
|
{
|
RelationYzRefund = 1
|
};
|
new YzRefundDAL().Update(yzRefund, i => new { i.AliRefundId, i.RelationYzRefund }, t => t.RefundId == request.refundId);
|
response.Success = true;
|
return response;
|
}
|
|
/// <summary>
|
/// 1688申请退款
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
public CreateRefundResponse ApplyForAli(AliApplyForRequest request)
|
{
|
CreateRefundResponse response = new CreateRefundResponse();
|
//获取退款关系
|
var refundRelation = new YzRefundDAL().GetById(request.RefundId);
|
if (refundRelation.AliOid.IsNullOrEmpty())
|
{
|
response.Success = false;
|
response.ErrorMsg = "未创建1688订单";
|
return response;
|
}
|
//获取1688订单详情
|
AlibabaTradeDeatilGetRequest aliTradeRequest = new AlibabaTradeDeatilGetRequest()
|
{
|
orderId = refundRelation.AliTid,
|
webSite = "1688"
|
};
|
var aliTraderesponse = AliabaClient.Execute(aliTradeRequest, request.AliToken);
|
if (aliTraderesponse.IsNull() || !aliTraderesponse.Success || aliTraderesponse.result.IsNull())
|
{//接口请求失败
|
LogUtil.Info("接口获取1688订单详情error:" + (aliTraderesponse.IsNull() ? "null" : aliTraderesponse.ErrorMsg), "1688订单详情eror");
|
response.Success = false;
|
response.ErrorMsg = "接口获取1688订单详情失败:" + (aliTraderesponse.IsNull() ? "null" : aliTraderesponse.ErrorMsg);
|
return response;
|
}
|
//判断1688订单是否已付款
|
if (aliTraderesponse.result.baseInfo.status == "waitbuyerpay")
|
{//1688订单是等待买家付款状态
|
//需要取消订单
|
AlibabaTradeCancelRequest cancelReq = new AlibabaTradeCancelRequest()
|
{
|
webSite = "1688",
|
tradeID = refundRelation.AliTid,
|
cancelReason = "buyerCancel"
|
};
|
var cancelRsp = AliabaClient.Execute(cancelReq, request.AliToken);
|
if (cancelRsp.IsNull() || !cancelRsp.Success)
|
{
|
response.Success = false;
|
response.ErrorMsg = "1688取消交易失败:" + (cancelRsp.IsNull() ? "null" : cancelRsp.ErrorMsg);
|
return response;
|
}
|
YzRefund yzRefund = new YzRefund()
|
{
|
RelationYzRefund = 2
|
};
|
new YzRefundDAL().Update(yzRefund, i => new { i.RelationYzRefund }, t => t.RefundId == request.RefundId);
|
response.Success = true;
|
return response;
|
}
|
else
|
{
|
//先从1688添加退款申请
|
List<long> oids = new List<long>();
|
oids.Add(long.Parse(refundRelation.AliOid));
|
AlibabaCreateRefundRequest aliReq = new AlibabaCreateRefundRequest()
|
{
|
orderId = long.Parse(refundRelation.AliTid),
|
orderEntryIds = oids,
|
disputeRequest = request.disputeRequest,
|
applyPayment = long.Parse((request.applyPayment * 100).ToString(("0.#"))),
|
applyReasonId = request.applyReasonId,
|
description = request.description,
|
goodsStatus = request.goodsStatus
|
};
|
//运费
|
aliReq.applyCarriage = request.applyCarriage == 0 ? 0 : long.Parse((request.applyCarriage * 100).ToString());
|
//子订单退款数量。仅在售中买家已收货(退款退货)时,可指定退货数量;默认,全部退货。
|
//if (request.disputeRequest == "returnRefund" && request.goodsStatus == "refundBuyerReceived")
|
//{
|
// List<AliRefundOrderEntryCountList> aliRefundOrderEntryCountLists = new List<AliRefundOrderEntryCountList>();
|
// AliRefundOrderEntryCountList aliRefundOrderEntryCountList = new AliRefundOrderEntryCountList()
|
// {
|
// id = long.Parse(refundRelation.AliOid),
|
// count = request.count
|
// };
|
// aliRefundOrderEntryCountLists.Add(aliRefundOrderEntryCountList);
|
// aliReq.orderEntryCountList = aliRefundOrderEntryCountLists;
|
//}
|
var aliRsp = AliabaClient.Execute(aliReq, request.AliToken);
|
if (aliRsp.IsNull() || aliRsp.result.IsNull() || !aliRsp.result.success)
|
{
|
response.Success = false;
|
response.ErrorMsg = (aliRsp.IsNull() ? "接口返回null" : aliRsp.result.message);
|
return response;
|
}
|
//记录关系
|
YzRefund yzRefund = new YzRefund()
|
{
|
AliRefundId = aliRsp.result.result.refundId,
|
RelationYzRefund = 1
|
};
|
new YzRefundDAL().Update(yzRefund, i => new { i.AliRefundId, i.RelationYzRefund }, t => t.RefundId == request.RefundId);
|
response.Success = true;
|
return response;
|
}
|
|
}
|
|
|
public CreateRefundResponse ReturnGoods(ReturnGoodsRequest request)
|
{
|
CreateRefundResponse response = new CreateRefundResponse();
|
try
|
{
|
//获取退货详情
|
YouZanReturnOrderGetRequest refReq = new YouZanReturnOrderGetRequest()
|
{
|
return_order_no = request.RefundId
|
};
|
var refRsp = YouZanClient.Execute(refReq, request.YzToken);
|
if (refRsp.IsNull() || !refRsp.success)
|
{
|
response.Success = false;
|
response.ErrorMsg = "获取有赞退款详情失败:" + (refRsp.IsNull() ? "返回null" : refRsp.message);
|
return response;
|
}
|
if (refRsp.data.status != "WAIT_RECEIVED")
|
{//状态不是买家已经退货,等待卖家确认收货
|
response.Success = false;
|
response.ErrorMsg = "当前退款状态不是[卖家待收货],不可操作";
|
return response;
|
}
|
//获取1688对应的物流公司编号
|
var aliExp = new AliExpressDAL().ListGet(t => t.YzId == int.Parse(refRsp.data.logistics_info.company_code));
|
var yzExp = new YzExpressDAL().GetById(int.Parse(refRsp.data.logistics_info.company_code));
|
//获取退款关联关系
|
var relateRefudn = new YzRefundDAL().GetById(request.RefundId);
|
//提交退货信息给1688
|
AlibabaRefundReturnGoodsRequest aliReq = new AlibabaRefundReturnGoodsRequest()
|
{
|
refundId = relateRefudn.AliRefundId,
|
logisticsCompanyNo = aliExp[0].Id.ToString(),
|
freightBill = refRsp.data.logistics_info.logistics_no,
|
description = yzExp.Name
|
};
|
var aliRsp = AliabaClient.Execute(aliReq, request.AliToken);
|
if (aliRsp.IsNull() || !aliRsp.Success)
|
{
|
response.Success = false;
|
response.ErrorMsg = "提交退货信息给1688失败:" + (aliRsp.IsNull() ? "接口返回null" : aliRsp.result.errorInfo);
|
return response;
|
}
|
//修改关系
|
YzRefund yzRefund = new YzRefund()
|
{
|
RelationYzRefund = 4
|
};
|
new YzRefundDAL().Update(yzRefund, i => new { i.RelationYzRefund }, t => t.RefundId == request.RefundId);
|
response.Success = true;
|
return response;
|
}
|
catch (Exception e)
|
{
|
response.Success = false;
|
response.ErrorMsg = e.Message;
|
return response;
|
}
|
}
|
|
}
|
}
|