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
{
///
/// 有赞同意退款、退货
///
///
///
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;
}
///
/// 1688申请退款
///
///
///
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 oids = new List();
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 aliRefundOrderEntryCountLists = new List();
// 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;
}
}
}
}