/*********************************************************************** * Project: CoreCms * ProjectName: 核心内容管理系统 * Web: https://www.corecms.net * Author: 大灰灰 * Email: jianweie@163.com * CreateTime: 2021/7/10 22:41:46 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Threading.Tasks; using CoreCms.Net.Caching.AccressToken; using CoreCms.Net.Configuration; using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.WeChat.Service.Enums; using CoreCms.Net.WeChat.Service.HttpClients; using InitQ.Abstractions; using InitQ.Attributes; using Newtonsoft.Json; using SKIT.FlurlHttpClient.Wechat.Api; using SKIT.FlurlHttpClient.Wechat.Api.Models; namespace CoreCms.Net.RedisMQ { /// /// 自定义交易组件-同步创建售后单 /// public class TCOrderAfterSaleCreateSyncSubscribe : IRedisSubscribe { private readonly string _wxOpenAppId = AppSettingsConstVars.WxOpenAppId; private readonly string _wxOpenAppSecret = AppSettingsConstVars.WxOpenAppSecret; private readonly ICoreCmsOrderServices _orderServices; private readonly IWeChatTransactionComponentOrderServices _tcOrderServices; private readonly WeChat.Service.HttpClients.IWeChatApiHttpClientFactory _weChatApiHttpClientFactory; private readonly ICoreCmsBillAftersalesServices _billAftersalesServices; private readonly ICoreCmsBillAftersalesItemServices _billAftersalesItemServices; public TCOrderAfterSaleCreateSyncSubscribe(ICoreCmsOrderServices orderServices, IWeChatTransactionComponentOrderServices tcOrderServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsBillAftersalesServices billAftersalesServices, ICoreCmsBillAftersalesItemServices billAftersalesItemServices) { _orderServices = orderServices; _tcOrderServices = tcOrderServices; _weChatApiHttpClientFactory = weChatApiHttpClientFactory; _billAftersalesServices = billAftersalesServices; _billAftersalesItemServices = billAftersalesItemServices; } /// /// 自定义交易组件-同步创建售后单 /// /// /// [Subscribe(RedisMessageQueueKey.TransactionComponentAfterSaleCreateSync)] private async Task TransactionComponentAfterSaleCreateSync(string msg) { try { var orderModel = JsonConvert.DeserializeObject(msg); if (orderModel is { scene: > 0 }) { var tcOrderModel = await _tcOrderServices.QueryByClauseAsync(p => p.outOrderId == orderModel.orderId, true); if (tcOrderModel == null) { NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", "未查询到远程订单推送记录"); return; } var orderInfo = await _orderServices.QueryByClauseAsync(p => p.orderId == orderModel.orderId, true); if (orderInfo == null) { NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", "订单信息获取失败"); return; } //获取售后单 var aftersale = await _billAftersalesServices.QueryByClauseAsync(p => p.aftersalesId == orderModel.billAftersalesId); //获取售后单详情 var aftersaleItems = await _billAftersalesItemServices.QueryListByClauseAsync(p => p.aftersalesId == orderModel.billAftersalesId); //获取小程序认证 var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); var request = new ShopECAftersaleAddRequest(); request.AccessToken = accessToken; request.OutOrderId = orderModel.orderId; request.OutAftersaleOrderId = orderModel.billAftersalesId; request.OpenId = tcOrderModel.openid; //request.PagePath = "pages/member/afterSales/detail/detail?aftersalesId=" + orderModel.billAftersalesId; request.RefundAmount = Convert.ToInt32(aftersale.refundAmount * 100); if (aftersale.refundAmount > 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Refund) { request.Type = (int)AfterSalesEnum.AfterSaleType.仅退款; } else if (aftersale.refundAmount > 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Reship) { request.Type = (int)AfterSalesEnum.AfterSaleType.退货退款; } else if (Convert.ToInt32(aftersale.refundAmount) == 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Reship) { request.Type = (int)AfterSalesEnum.AfterSaleType.退货退款; } else if (Convert.ToInt32(aftersale.refundAmount) == 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Refund) { request.Type = (int)AfterSalesEnum.AfterSaleType.仅退款; } request.RefundReasonType = (int)AfterSalesEnum.AfterSalesReasonType.不想要了; request.RefundReason = aftersale.reason; //新自定义交易组件,只能申请一个商品售后。 request.Product = new ShopECAftersaleAddRequest.Types.Product() { Count = aftersaleItems[0].nums, OutProductId = aftersaleItems[0].goodsId.ToString(), OutSKUId = aftersaleItems[0].productId.ToString() }; //aftersaleItems.ForEach(p => //{ // var product = new ShopECAftersaleAddRequest.Types.Product(); // product.Count = p.nums; // product.OutProductId = p.goodsId.ToString(); // product.OutSKUId = p.productId.ToString(); // request.Product.Add(product); //}); var response = await client.ExecuteShopECAftersaleAddAsync(request); NLogUtil.WriteAll(response.IsSuccessful() ? NLog.LogLevel.Info : NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", JsonConvert.SerializeObject(response)); } else { NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", "订单获取失败"); } } catch (Exception ex) { var obj = new { wxOpenAppId = _wxOpenAppId, wxOpenAppSecret = _wxOpenAppSecret, }; NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", JsonConvert.SerializeObject(obj), ex); throw; } await Task.CompletedTask; } } }