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