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