diff --git a/CoreCms.Net.Configuration/GlobalConstVars.cs b/CoreCms.Net.Configuration/GlobalConstVars.cs
index 106365a3..cb2ec660 100644
--- a/CoreCms.Net.Configuration/GlobalConstVars.cs
+++ b/CoreCms.Net.Configuration/GlobalConstVars.cs
@@ -353,6 +353,10 @@ namespace CoreCms.Net.Configuration
///
public const string WeChatPayNotice = "WeChatPayNoticeQueue";
///
+ /// 微信支付成功后推送到接口进行发货处理
+ ///
+ public const string WeChatPayShipping = "WeChatPayShippingQueue";
+ ///
/// 微信模板消息
///
public const string SendWxTemplateMessage = "SendWxTemplateMessage";
diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs
index 21ef2068..ea958e7a 100644
--- a/CoreCms.Net.Configuration/GlobalEnumVars.cs
+++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs
@@ -1066,12 +1066,6 @@ namespace CoreCms.Net.Configuration
///
[Description("接龙")]
Solitaire = 8,
- ///
- /// 微信交易组件
- ///
- [Description("微信交易组件")]
- TransactionComponent = 10,
-
}
///
@@ -3260,5 +3254,91 @@ namespace CoreCms.Net.Configuration
#endregion
+ #region 微信发货管理
+
+ ///
+ /// 微信发货信息管理订单状态
+ ///
+ public enum WeChatShippingOrderStatus
+ {
+ ///
+ /// 待发货
+ ///
+ [Description("")]
+ 待发货 = 1,
+
+ ///
+ /// 已发货
+ ///
+ [Description("")]
+ 已发货 = 2,
+
+ ///
+ /// 确认收货
+ ///
+ [Description("")]
+ 确认收货 = 3,
+
+ ///
+ /// 交易完成
+ ///
+ [Description("")]
+ 交易完成 = 4,
+
+ ///
+ /// 已退款
+ ///
+ [Description("")]
+ 已退款 = 5
+ }
+
+ ///
+ /// 物流模式
+ ///
+ public enum WeChatShippingLogisticsType
+ {
+ ///
+ /// 物流配送
+ ///
+ [Description("")]
+ 物流配送 = 1,
+
+ ///
+ /// 同城配送
+ ///
+ [Description("")]
+ 同城配送 = 2,
+
+ ///
+ /// 虚拟商品
+ ///
+ [Description("")]
+ 虚拟商品 = 3,
+
+ ///
+ /// 用户自提
+ ///
+ [Description("")]
+ 用户自提 = 4,
+ }
+
+ ///
+ /// 发货模式
+ ///
+ public enum WeChatShippingDeliveryMode
+ {
+ ///
+ /// 统一发货
+ ///
+ UNIFIED_DELIVERY = 1,
+
+ ///
+ /// 分拆发货
+ ///
+ SPLIT_DELIVERY = 2
+ }
+
+ #endregion
+
}
}
diff --git a/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs b/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs
index 853e7a90..cb5f05dc 100644
--- a/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs
+++ b/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs
@@ -29,6 +29,7 @@ namespace CoreCms.Net.Core.Config
//对应的订阅者类,需要new一个实例对象,当然你也可以传参,比如日志对象
m.ListSubscribe = new List() {
typeof(MessagePushSubscribe),
+ typeof(WeChatPayShippingSubscribe),
typeof(RefundSubscribe),
typeof(OrderAgentOrDistributionSubscribe),
typeof(OrderAutomaticDeliverySubscribe),
diff --git a/CoreCms.Net.DTO/WeChatShipping/GetDeliveryListResult.cs b/CoreCms.Net.DTO/WeChatShipping/GetDeliveryListResult.cs
new file mode 100644
index 00000000..4b9b604b
--- /dev/null
+++ b/CoreCms.Net.DTO/WeChatShipping/GetDeliveryListResult.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CoreCms.Net.DTO.WeChatShipping
+{
+ ///
+ /// 获取运力id列表get_delivery_list返回值处理
+ ///
+
+ public class GetDeliveryListResult
+ {
+ ///
+ /// 返回码
+ ///
+ public int errcode { get; set; }
+
+ ///
+ /// 运力公司个数
+ ///
+ public int count { get; set; }
+
+ ///
+ /// 运力公司列表
+ ///
+ public List delivery_list { get; set; }
+
+
+ }
+
+ ///
+ /// 快递公司实体
+ ///
+ public class deliveryModel
+ {
+ ///
+ /// 公司编码
+ ///
+ public string delivery_id { get; set; }
+
+ ///
+ /// 公司名称
+ ///
+ public string delivery_name { get; set; }
+
+
+ }
+
+}
diff --git a/CoreCms.Net.DTO/WeChatShipping/OrderShippingCreatePost.cs b/CoreCms.Net.DTO/WeChatShipping/OrderShippingCreatePost.cs
new file mode 100644
index 00000000..4e0be3fd
--- /dev/null
+++ b/CoreCms.Net.DTO/WeChatShipping/OrderShippingCreatePost.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CoreCms.Net.DTO.WeChatShipping
+{
+ ///
+ /// 发货信息录入接口提交参数
+ ///
+ public class OrderShippingCreatePost
+ {
+ ///
+ /// 同城配送快递编码
+ ///
+ public string? cityDistributionName { get; set; }
+ ///
+ /// 同城配送快递单号
+ ///
+ public string? cityDistributionNumber { get; set; }
+
+ ///
+ /// 是否全部发货
+ ///
+ public bool is_all_delivered { get; set; } = false;
+
+ ///
+ /// 商品信息
+ ///
+ public string item_desc { get; set; }
+
+ ///
+ /// 发货类型
+ ///
+ public int logistics_type { get; set; }
+
+ ///
+ /// 交易单号
+ ///
+ public string transaction_id { get; set; }
+
+ ///
+ /// 物流信息
+ ///
+ public List? shipping_list { get; set; }
+
+ ///
+ /// openid
+ ///
+ public string openid { get; set; }
+
+ ///
+ /// 商户号
+ ///
+ public string merchant_id { get; set; }
+
+ ///
+ /// 商家订单编号
+ ///
+ public string merchant_trade_no { get; set; }
+
+
+ }
+
+ public class ShippingList
+ {
+ ///
+ /// 快递公司名称
+ ///
+ public string express_company { get; set; }
+
+ ///
+ /// 快递单号
+ ///
+ public string tracking_no { get; set; }
+
+ }
+
+}
diff --git a/CoreCms.Net.IRepository/WeChatShipping/IWeChatShippingDeliveryRepository.cs b/CoreCms.Net.IRepository/WeChatShipping/IWeChatShippingDeliveryRepository.cs
new file mode 100644
index 00000000..9775d45e
--- /dev/null
+++ b/CoreCms.Net.IRepository/WeChatShipping/IWeChatShippingDeliveryRepository.cs
@@ -0,0 +1,98 @@
+/***********************************************************************
+ * Project: CoreCms
+ * ProjectName: 核心内容管理系统
+ * Web: https://www.corecms.net
+ * Author: 大灰灰
+ * Email: jianweie@163.com
+ * CreateTime: 2023/9/15 23:09:53
+ * Description: 暂无
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+
+namespace CoreCms.Net.IRepository
+{
+ ///
+ /// 微信发货快递公司信息 工厂接口
+ ///
+ public interface IWeChatShippingDeliveryRepository : IBaseRepository
+ {
+ #region 重写增删改查操作===========================================================
+
+ ///
+ /// 重写异步插入方法
+ ///
+ ///
+ ///
+ Task InsertAsync(WeChatShippingDelivery entity);
+
+
+ ///
+ /// 重写异步更新方法
+ ///
+ ///
+ ///
+ Task UpdateAsync(WeChatShippingDelivery entity);
+
+
+ ///
+ /// 重写异步更新方法
+ ///
+ ///
+ ///
+ Task UpdateAsync(List entity);
+
+
+ ///
+ /// 重写删除指定ID的数据
+ ///
+ ///
+ ///
+ Task DeleteByIdAsync(object id);
+
+
+ ///
+ /// 重写删除指定ID集合的数据(批量删除)
+ ///
+ ///
+ ///
+ Task DeleteByIdsAsync(int[] ids);
+
+ #endregion
+
+ #region 获取缓存的所有数据==========================================================
+
+ ///
+ /// 获取缓存的所有数据
+ ///
+ ///
+ Task> GetCaChe();
+
+ #endregion
+
+
+ ///
+ /// 重写根据条件查询分页数据
+ ///
+ /// 判断集合
+ /// 排序方式
+ /// 当前页面索引
+ /// 分布大小
+ ///
+ /// 是否使用WITH(NOLOCK)
+ ///
+ Task> QueryPageAsync(
+ Expression> predicate,
+ Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+ int pageSize = 20, bool blUseNoLock = false);
+
+ }
+}
diff --git a/CoreCms.Net.IServices/WeChatShipping/IWeChatShippingDeliveryServices.cs b/CoreCms.Net.IServices/WeChatShipping/IWeChatShippingDeliveryServices.cs
new file mode 100644
index 00000000..39372d73
--- /dev/null
+++ b/CoreCms.Net.IServices/WeChatShipping/IWeChatShippingDeliveryServices.cs
@@ -0,0 +1,100 @@
+/***********************************************************************
+ * Project: CoreCms
+ * ProjectName: 核心内容管理系统
+ * Web: https://www.corecms.net
+ * Author: 大灰灰
+ * Email: jianweie@163.com
+ * CreateTime: 2023/9/15 23:09:53
+ * Description: 暂无
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+namespace CoreCms.Net.IServices
+{
+ ///
+ /// 微信发货快递公司信息 服务工厂接口
+ ///
+ public interface IWeChatShippingDeliveryServices : IBaseServices
+ {
+ #region 重写增删改查操作===========================================================
+
+ ///
+ /// 重写异步插入方法
+ ///
+ ///
+ ///
+ Task InsertAsync(WeChatShippingDelivery entity);
+
+ ///
+ /// 重写异步更新方法
+ ///
+ ///
+ ///
+ Task UpdateAsync(WeChatShippingDelivery entity);
+
+ ///
+ /// 重写异步更新方法
+ ///
+ ///
+ ///
+ Task UpdateAsync(List entity);
+
+ ///
+ /// 重写删除指定ID的数据
+ ///
+ ///
+ ///
+ Task DeleteByIdAsync(object id);
+
+ ///
+ /// 重写删除指定ID集合的数据(批量删除)
+ ///
+ ///
+ ///
+ Task DeleteByIdsAsync(int[] ids);
+
+ #endregion
+
+ #region 获取缓存的所有数据==========================================================
+
+ ///
+ /// 获取缓存的所有数据
+ ///
+ ///
+ Task> GetCaChe();
+
+ #endregion
+
+ #region 重写根据条件查询分页数据
+ ///
+ /// 重写根据条件查询分页数据
+ ///
+ /// 判断集合
+ /// 排序方式
+ /// 当前页面索引
+ /// 分布大小
+ ///
+ /// 是否使用WITH(NOLOCK)
+ ///
+ Task> QueryPageAsync(
+ Expression> predicate,
+ Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+ int pageSize = 20, bool blUseNoLock = false);
+ #endregion
+
+
+ ///
+ /// 通过接口更新所有快递公司信息
+ ///
+ Task DoUpdateCompany();
+
+ }
+}
diff --git a/CoreCms.Net.Model/Entities/WeChatShipping/WeChatShippingDelivery.cs b/CoreCms.Net.Model/Entities/WeChatShipping/WeChatShippingDelivery.cs
new file mode 100644
index 00000000..e51a8a17
--- /dev/null
+++ b/CoreCms.Net.Model/Entities/WeChatShipping/WeChatShippingDelivery.cs
@@ -0,0 +1,68 @@
+/***********************************************************************
+ * Project: CoreCms
+ * ProjectName: 核心内容管理系统
+ * Web: https://www.corecms.net
+ * Author: 大灰灰
+ * Email: jianweie@163.com
+ * CreateTime: 2023/9/15 23:09:53
+ * Description: 暂无
+ ***********************************************************************/
+
+using SqlSugar;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+namespace CoreCms.Net.Model.Entities
+{
+ ///
+ /// 微信发货快递公司信息
+ ///
+ public partial class WeChatShippingDelivery
+ {
+ ///
+ /// 构造函数
+ ///
+ public WeChatShippingDelivery()
+ {
+ }
+
+ ///
+ /// 序列
+ ///
+ [Display(Name = "序列")]
+
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+
+ [Required(ErrorMessage = "请输入{0}")]
+
+
+
+ public System.Int32 id { get; set; }
+
+
+ ///
+ /// 快递公司编码
+ ///
+ [Display(Name = "快递公司编码")]
+
+ [Required(ErrorMessage = "请输入{0}")]
+ [StringLength(maximumLength:50,ErrorMessage = "{0}不能超过{1}字")]
+
+
+ public System.String deliveryId { get; set; }
+
+
+ ///
+ /// 快递公司名称
+ ///
+ [Display(Name = "快递公司名称")]
+
+ [Required(ErrorMessage = "请输入{0}")]
+ [StringLength(maximumLength:50,ErrorMessage = "{0}不能超过{1}字")]
+
+
+ public System.String deliveryName { get; set; }
+
+
+ }
+}
diff --git a/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs b/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs
new file mode 100644
index 00000000..da6a12be
--- /dev/null
+++ b/CoreCms.Net.RedisMQ/WeChatPayShippingSubscribe.cs
@@ -0,0 +1,278 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using CoreCms.Net.Caching.AccressToken;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.IServices;
+using CoreCms.Net.Loging;
+using CoreCms.Net.Utility.Extensions;
+using CoreCms.Net.Utility.Helper;
+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 WeChatPayShippingSubscribe : IRedisSubscribe
+ {
+ private readonly IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
+ private readonly ICoreCmsServicesServices _servicesServices;
+ private readonly ICoreCmsBillPaymentsServices _billPaymentsServices;
+ private readonly ICoreCmsBillDeliveryServices _billDeliveryServices;
+ private readonly ICoreCmsOrderItemServices _orderItemServices;
+ private readonly ICoreCmsUserServices _userServices;
+ private readonly ICoreCmsUserWeChatInfoServices _weChatInfoServices;
+ private readonly ICoreCmsOrderServices _orderServices;
+ private readonly ICoreCmsSettingServices _settingServices;
+
+
+
+ public WeChatPayShippingSubscribe(ICoreCmsBillPaymentsServices billPaymentsServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsServicesServices servicesServices, ICoreCmsBillDeliveryServices billDeliveryServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsUserServices userServices, ICoreCmsUserWeChatInfoServices weChatInfoServices, ICoreCmsOrderServices orderServices, ICoreCmsSettingServices settingServices)
+ {
+ _billPaymentsServices = billPaymentsServices;
+ _weChatApiHttpClientFactory = weChatApiHttpClientFactory;
+ _servicesServices = servicesServices;
+ _billDeliveryServices = billDeliveryServices;
+ _orderItemServices = orderItemServices;
+ _userServices = userServices;
+ _weChatInfoServices = weChatInfoServices;
+ _orderServices = orderServices;
+ _settingServices = settingServices;
+ }
+
+ ///
+ /// 微信支付成功后推送到接口进行发货处理
+ ///
+ ///
+ ///
+ [Subscribe(RedisMessageQueueKey.WeChatPayShipping)]
+ private async Task WeChatPayNotice(string msg)
+ {
+ try
+ {
+ var paymentOrder = await _billPaymentsServices.QueryByClauseAsync(p => p.paymentId == msg);
+ if (paymentOrder == null)
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":支付单不存在");
+ return;
+ }
+ else
+ {
+ if (paymentOrder.paymentCode != GlobalEnumVars.PaymentsTypes.wechatpay.ToString())
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":非微信支付方式不予处理");
+ return;
+ }
+
+
+
+
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+
+ var isTradeManagedRequest = new WxaSecOrderIsTradeManagedRequest()
+ {
+ AccessToken = accessToken
+ };
+ //商品名称
+ var orderTitle = string.Empty;
+ //检索是否开启了微信发货信息功能,才会进行后面的发货操作
+ var responseIsTradeManagedResponse = await client.ExecuteWxaSecOrderIsTradeManagedAsync(isTradeManagedRequest);
+ if (responseIsTradeManagedResponse.IsSuccessful() && responseIsTradeManagedResponse.IsTradeManaged)
+ {
+ //判断不同支付单类型下如何获取商品标题,目前只是简单标题,非商品订单如果需要详细到具体明细,建议扩展获取其他关联信息。
+ switch (paymentOrder.type)
+ {
+ case (int)GlobalEnumVars.BillPaymentsType.Recharge:
+ orderTitle = "用户充值" + paymentOrder.money + "元";
+ break;
+ case (int)GlobalEnumVars.BillPaymentsType.FormOrder:
+ orderTitle = "表单订单";
+ break;
+ case (int)GlobalEnumVars.BillPaymentsType.FormPay:
+ orderTitle = "表单付款码支付";
+ break;
+ case (int)GlobalEnumVars.BillPaymentsType.ServiceOrder:
+ {
+ var id = Convert.ToInt32(paymentOrder.sourceId);
+ var serviceModel = await _servicesServices.QueryByClauseAsync(p => p.id == id);
+ if (serviceModel == null)
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":服务项目获取失败");
+ return;
+ }
+ orderTitle = serviceModel.title;
+ break;
+ }
+ case (int)GlobalEnumVars.BillPaymentsType.Common:
+ case (int)GlobalEnumVars.BillPaymentsType.PinTuan:
+ case (int)GlobalEnumVars.BillPaymentsType.Group:
+ case (int)GlobalEnumVars.BillPaymentsType.Seckill:
+ case (int)GlobalEnumVars.BillPaymentsType.Solitaire:
+ {
+ var orderItems = await _orderItemServices.QueryListByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ if (!orderItems.Any())
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":订单详情获取失败");
+ return;
+ }
+
+ if (orderItems.Count == 1)
+ {
+ orderTitle = orderItems.FirstOrDefault()?.name;
+ }
+ else
+ {
+ orderItems.ForEach(p => { orderTitle += p.name + ";"; });
+ }
+
+ break;
+ }
+ case (int)GlobalEnumVars.BillPaymentsType.Bargain:
+ orderTitle = "砍价活动";
+ break;
+ case (int)GlobalEnumVars.BillPaymentsType.Giveaway:
+ orderTitle = "购物赠品";
+ break;
+ default:
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":订单类型获取失败");
+ return;
+ }
+
+
+ //构建请求
+ var request = new WxaSecOrderUploadShippingInfoRequest
+ {
+ AccessToken = accessToken,
+ OrderKey = new WxaSecOrderUploadCombinedShippingInfoRequest.Types.OrderKey()
+ {
+ OrderNumberType = 2,
+ TransactionId = paymentOrder.tradeNo,
+ },
+ IsFinishAll = true
+ };
+
+
+ //组装参数
+
+ //获取openid
+ var user = await _userServices.QueryByClauseAsync(p => p.id == paymentOrder.userId);
+ if (user == null)
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":用户信息获取失败");
+ return;
+ }
+
+ var weChatUserInfo = await _weChatInfoServices.QueryByClauseAsync(p => p.userId == user.id);
+ if (weChatUserInfo == null)
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":用户信息openId获取失败");
+ return;
+ }
+
+ request.Payer = new WxaSecOrderUploadCombinedShippingInfoRequest.Types.Payer() { OpenId = weChatUserInfo.openid };
+
+ //设置发货信息
+ //如果是商品模式是,则去走快递或者自提及同城配送。
+ //两种情况:1支付单支付成功后,自动调用此模式处理充值,服务商品,用户自提的订单,2、如果是后台手动发货,处理发货的订单业务。
+ var shippingList = new List();
+
+ if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Common
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.PinTuan
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Group
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Seckill
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Solitaire)
+ {
+ //获取订单
+ var order = await _orderServices.QueryByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ if (order == null)
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":订单获取失败");
+ return;
+ }
+
+ request.LogisticsType = order.receiptType switch
+ {
+ //设置物流的发货模式
+ (int)GlobalEnumVars.OrderReceiptType.SelfDelivery => (int)GlobalEnumVars.WeChatShippingLogisticsType.用户自提,
+ (int)GlobalEnumVars.OrderReceiptType.IntraCityService => (int)GlobalEnumVars.WeChatShippingLogisticsType.同城配送,
+ (int)GlobalEnumVars.OrderReceiptType.Logistics => (int)GlobalEnumVars.WeChatShippingLogisticsType.物流配送,
+ _ => request.LogisticsType
+ };
+
+ //判断订单是否发货
+ if (order.shipStatus is (int)GlobalEnumVars.OrderShipStatus.PartialYes or (int)GlobalEnumVars.OrderShipStatus.Yes)
+ {
+ //获取订单的发货信息
+ var orderBillDeliveries = await _billDeliveryServices.QueryListByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ if (orderBillDeliveries == null || !orderBillDeliveries.Any())
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":未获取到发货信息,自动发货停止操作");
+ return;
+ }
+ shippingList.AddRange(orderBillDeliveries.Select(item => new WxaSecOrderUploadShippingInfoRequest.Types.Shipping { ItemDescription = orderTitle, ExpressCompany = item.thirdPartylogiCode, TrackingNumber = item.logiNo }));
+
+ request.DeliveryMode = orderBillDeliveries.Count > 1
+ ? (int)GlobalEnumVars.WeChatShippingDeliveryMode.SPLIT_DELIVERY
+ : (int)GlobalEnumVars.WeChatShippingDeliveryMode.UNIFIED_DELIVERY;
+ }
+ else
+ {
+ //判断是否门店订单自动发货
+ var allConfigs = await _settingServices.GetConfigDictionaries();
+ var storeOrderAutomaticDelivery = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.StoreOrderAutomaticDelivery).ObjectToInt(1);
+ if (storeOrderAutomaticDelivery == 1 || order.receiptType == (int)GlobalEnumVars.OrderReceiptType.SelfDelivery)
+ {
+ shippingList.Add(new WxaSecOrderUploadShippingInfoRequest.Types.Shipping() { ItemDescription = orderTitle, ExpressCompany = "", TrackingNumber = "" });
+ }
+ else
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":未获取到发货信息,自动发货停止操作");
+ return;
+ }
+ }
+ }
+ else
+ {
+ //非商品模式,直接走虚拟发货。
+ request.LogisticsType = (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品;
+ request.DeliveryMode = (int)GlobalEnumVars.WeChatShippingDeliveryMode.UNIFIED_DELIVERY;
+ shippingList.Add(new WxaSecOrderUploadShippingInfoRequest.Types.Shipping() { ItemDescription = orderTitle, ExpressCompany = "", TrackingNumber = "" });
+ }
+
+ request.ShippingList = shippingList;
+
+ var response = await client.ExecuteWxaSecOrderUploadShippingInfoAsync(request);
+ if (response.IsSuccessful())
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "微信发货信息处理", msg + ":发货提交成功");
+ }
+ else
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理-推送接口", JsonConvert.SerializeObject(response));
+
+ }
+ }
+ else
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理-获取是否需要推送", JsonConvert.SerializeObject(responseIsTradeManagedResponse));
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "微信发货信息处理", msg, ex);
+ throw;
+ }
+ await Task.CompletedTask;
+ }
+
+ }
+}
diff --git a/CoreCms.Net.Repository/Bill/CoreCmsBillPaymentsRepository.cs b/CoreCms.Net.Repository/Bill/CoreCmsBillPaymentsRepository.cs
index e635768b..cd18b042 100644
--- a/CoreCms.Net.Repository/Bill/CoreCmsBillPaymentsRepository.cs
+++ b/CoreCms.Net.Repository/Bill/CoreCmsBillPaymentsRepository.cs
@@ -46,7 +46,7 @@ namespace CoreCms.Net.Repository
{
var dt = DateTime.Now.AddDays(-8);
- var types = new int[] { (int)GlobalEnumVars.BillPaymentsType.Common, (int)GlobalEnumVars.BillPaymentsType.PinTuan, (int)GlobalEnumVars.BillPaymentsType.Group, (int)GlobalEnumVars.BillPaymentsType.Seckill, (int)GlobalEnumVars.BillPaymentsType.Bargain, (int)GlobalEnumVars.BillPaymentsType.Giveaway, (int)GlobalEnumVars.BillPaymentsType.Solitaire, (int)GlobalEnumVars.BillPaymentsType.TransactionComponent };
+ var types = new int[] { (int)GlobalEnumVars.BillPaymentsType.Common, (int)GlobalEnumVars.BillPaymentsType.PinTuan, (int)GlobalEnumVars.BillPaymentsType.Group, (int)GlobalEnumVars.BillPaymentsType.Seckill, (int)GlobalEnumVars.BillPaymentsType.Bargain, (int)GlobalEnumVars.BillPaymentsType.Giveaway, (int)GlobalEnumVars.BillPaymentsType.Solitaire };
var list = await DbClient.Queryable()
.Where(p => p.createTime >= dt && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed && types.Contains(p.type))
diff --git a/CoreCms.Net.Repository/WeChatShipping/WeChatShippingDeliveryRepository.cs b/CoreCms.Net.Repository/WeChatShipping/WeChatShippingDeliveryRepository.cs
new file mode 100644
index 00000000..04052fc3
--- /dev/null
+++ b/CoreCms.Net.Repository/WeChatShipping/WeChatShippingDeliveryRepository.cs
@@ -0,0 +1,196 @@
+/***********************************************************************
+ * Project: CoreCms
+ * ProjectName: 核心内容管理系统
+ * Web: https://www.corecms.net
+ * Author: 大灰灰
+ * Email: jianweie@163.com
+ * CreateTime: 2023/9/15 23:09:53
+ * Description: 暂无
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Caching.Manual;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.IRepository;
+using CoreCms.Net.IRepository.UnitOfWork;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+namespace CoreCms.Net.Repository
+{
+ ///
+ /// 微信发货快递公司信息 接口实现
+ ///
+ public class WeChatShippingDeliveryRepository : BaseRepository, IWeChatShippingDeliveryRepository
+ {
+ private readonly IUnitOfWork _unitOfWork;
+ public WeChatShippingDeliveryRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
+ {
+ _unitOfWork = unitOfWork;
+ }
+
+ #region 实现重写增删改查操作==========================================================
+
+ ///
+ /// 重写异步插入方法
+ ///
+ /// 实体数据
+ ///
+ public async Task InsertAsync(WeChatShippingDelivery entity)
+ {
+ var jm = new AdminUiCallBack();
+
+ var bl = await DbClient.Insertable(entity).ExecuteReturnIdentityAsync() > 0;
+ jm.code = bl ? 0 : 1;
+ jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure;
+
+ return jm;
+ }
+
+ ///
+ /// 重写异步更新方法
+ ///
+ ///
+ ///
+ public async Task UpdateAsync(WeChatShippingDelivery entity)
+ {
+ var jm = new AdminUiCallBack();
+
+ var oldModel = await DbClient.Queryable().In(entity.id).SingleAsync();
+ if (oldModel == null)
+ {
+ jm.msg = "不存在此信息";
+ return jm;
+ }
+ //事物处理过程开始
+ oldModel.id = entity.id;
+ oldModel.deliveryId = entity.deliveryId;
+ oldModel.deliveryName = entity.deliveryName;
+
+ //事物处理过程结束
+ var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
+ jm.code = bl ? 0 : 1;
+ jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+ return jm;
+ }
+
+ ///
+ /// 重写异步更新方法
+ ///
+ ///
+ ///
+ public async Task UpdateAsync(List entity)
+ {
+ var jm = new AdminUiCallBack();
+
+ var bl = await DbClient.Updateable(entity).ExecuteCommandHasChangeAsync();
+ jm.code = bl ? 0 : 1;
+ jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+ return jm;
+ }
+
+ ///
+ /// 重写删除指定ID的数据
+ ///
+ ///
+ ///
+ public async Task DeleteByIdAsync(object id)
+ {
+ var jm = new AdminUiCallBack();
+
+ var bl = await DbClient.Deleteable(id).ExecuteCommandHasChangeAsync();
+ jm.code = bl ? 0 : 1;
+ jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
+
+ return jm;
+ }
+
+ ///
+ /// 重写删除指定ID集合的数据(批量删除)
+ ///
+ ///
+ ///
+ public async Task DeleteByIdsAsync(int[] ids)
+ {
+ var jm = new AdminUiCallBack();
+
+ var bl = await DbClient.Deleteable().In(ids).ExecuteCommandHasChangeAsync();
+ jm.code = bl ? 0 : 1;
+ jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
+
+ return jm;
+ }
+
+ #endregion
+
+ #region 获取缓存的所有数据==========================================================
+
+ ///
+ /// 获取缓存的所有数据
+ ///
+ ///
+ public async Task> GetCaChe()
+ {
+ var list = await DbClient.Queryable().With(SqlWith.NoLock).WithCache().ToListAsync();
+ return list;
+ }
+
+ #endregion
+
+
+ #region 重写根据条件查询分页数据
+ ///
+ /// 重写根据条件查询分页数据
+ ///
+ /// 判断集合
+ /// 排序方式
+ /// 当前页面索引
+ /// 分布大小
+ ///
+ /// 是否使用WITH(NOLOCK)
+ ///
+ public async Task> QueryPageAsync(Expression> predicate,
+ Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+ int pageSize = 20, bool blUseNoLock = false)
+ {
+ RefAsync totalCount = 0;
+ List page;
+ if (blUseNoLock)
+ {
+ page = await DbClient.Queryable()
+ .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
+ .WhereIF(predicate != null, predicate).Select(p => new WeChatShippingDelivery
+ {
+ id = p.id,
+ deliveryId = p.deliveryId,
+ deliveryName = p.deliveryName,
+
+ }).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
+ }
+ else
+ {
+ page = await DbClient.Queryable()
+ .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
+ .WhereIF(predicate != null, predicate).Select(p => new WeChatShippingDelivery
+ {
+ id = p.id,
+ deliveryId = p.deliveryId,
+ deliveryName = p.deliveryName,
+
+ }).ToPageListAsync(pageIndex, pageSize, totalCount);
+ }
+ var list = new PageList(page, pageIndex, pageSize, totalCount);
+ return list;
+ }
+
+ #endregion
+
+ }
+}
diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs
index d05b2d1e..34ab5c1b 100644
--- a/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs
+++ b/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs
@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
+using CoreCms.Net.Caching.AutoMate.RedisCache;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
@@ -61,6 +62,7 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsTopUpTypeServices _topUpTypeServices;
private readonly ICoreCmsUserPointLogServices _userPointLogServices;
private readonly WeChatOptions _weChatOptions;
+ private readonly IRedisOperationRepository _redisOperationRepository;
@@ -77,7 +79,7 @@ namespace CoreCms.Net.Services
, IServiceProvider serviceProvider, ICoreCmsServicesServices servicesServices
, ICoreCmsUserServicesOrderServices userServicesOrderServices
, ICoreCmsUserWeChatInfoServices userWeChatInfoServices
- , IOptions weChatOptions, ICoreCmsTopUpTypeServices topUpTypeServices, ICoreCmsUserPointLogServices userPointLogServices)
+ , IOptions weChatOptions, ICoreCmsTopUpTypeServices topUpTypeServices, ICoreCmsUserPointLogServices userPointLogServices, IRedisOperationRepository redisOperationRepository)
{
this._dal = dal;
base.BaseDal = dal;
@@ -97,6 +99,7 @@ namespace CoreCms.Net.Services
_userWeChatInfoServices = userWeChatInfoServices;
_topUpTypeServices = topUpTypeServices;
_userPointLogServices = userPointLogServices;
+ _redisOperationRepository = redisOperationRepository;
_weChatOptions = weChatOptions.Value;
}
@@ -126,7 +129,6 @@ namespace CoreCms.Net.Services
|| type == (int)GlobalEnumVars.BillPaymentsType.Bargain
|| type == (int)GlobalEnumVars.BillPaymentsType.Giveaway
|| type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
- || type == (int)GlobalEnumVars.BillPaymentsType.TransactionComponent
)
{
//如果是订单生成支付单的话,取第一条订单的店铺id,后面的所有订单都要保证是此店铺的id
@@ -286,7 +288,6 @@ namespace CoreCms.Net.Services
|| type == (int)GlobalEnumVars.BillPaymentsType.Bargain
|| type == (int)GlobalEnumVars.BillPaymentsType.Giveaway
|| type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
- || type == (int)GlobalEnumVars.BillPaymentsType.TransactionComponent
)
{
//如果是订单生成支付单的话,取第一条订单的店铺id,后面的所有订单都要保证是此店铺的id
@@ -694,7 +695,6 @@ namespace CoreCms.Net.Services
|| billPaymentInfo.type == (int)GlobalEnumVars.BillPaymentsType.Bargain
|| billPaymentInfo.type == (int)GlobalEnumVars.BillPaymentsType.Giveaway
|| billPaymentInfo.type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
- || billPaymentInfo.type == (int)GlobalEnumVars.BillPaymentsType.TransactionComponent
)
{
//如果是订单类型,做支付后处理
@@ -733,6 +733,10 @@ namespace CoreCms.Net.Services
{
//::todo 其他业务逻辑
}
+
+ //微信发货信息管理API发货
+ await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.WeChatPayShipping, billPaymentInfo.paymentId);
+
}
jm.status = true;
jm.data = paymentId;
@@ -792,7 +796,7 @@ namespace CoreCms.Net.Services
|| entity.type == (int)GlobalEnumVars.BillPaymentsType.Bargain
|| entity.type == (int)GlobalEnumVars.BillPaymentsType.Giveaway
|| entity.type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
- || entity.type == (int)GlobalEnumVars.BillPaymentsType.TransactionComponent)
+ )
{
var orderItem = await _orderItemServices.QueryByClauseAsync(p => p.orderId == entity.sourceId);
if (orderItem != null)
@@ -852,7 +856,6 @@ namespace CoreCms.Net.Services
|| type == (int)GlobalEnumVars.BillPaymentsType.Bargain
|| type == (int)GlobalEnumVars.BillPaymentsType.Giveaway
|| type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
- || type == (int)GlobalEnumVars.BillPaymentsType.TransactionComponent
)
{
var orderInfo = await orderServices.QueryByIdAsync(orderId);
diff --git a/CoreCms.Net.Services/WeChatShipping/WeChatShippingDeliveryServices.cs b/CoreCms.Net.Services/WeChatShipping/WeChatShippingDeliveryServices.cs
new file mode 100644
index 00000000..f58a31db
--- /dev/null
+++ b/CoreCms.Net.Services/WeChatShipping/WeChatShippingDeliveryServices.cs
@@ -0,0 +1,175 @@
+/***********************************************************************
+ * Project: CoreCms
+ * ProjectName: 核心内容管理系统
+ * Web: https://www.corecms.net
+ * Author: 大灰灰
+ * Email: jianweie@163.com
+ * CreateTime: 2023/9/15 23:09:53
+ * Description: 暂无
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Caching.AccressToken;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.DTO.WeChatShipping;
+using CoreCms.Net.IRepository;
+using CoreCms.Net.IRepository.UnitOfWork;
+using CoreCms.Net.IServices;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Api;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.Model.ViewModels.UI;
+using CoreCms.Net.WeChat.Service.HttpClients;
+using Flurl.Http;
+using SKIT.FlurlHttpClient.Wechat.Api.Models;
+using SqlSugar;
+
+
+namespace CoreCms.Net.Services
+{
+ ///
+ /// 微信发货快递公司信息 接口实现
+ ///
+ public class WeChatShippingDeliveryServices : BaseServices, IWeChatShippingDeliveryServices
+ {
+ private readonly IWeChatShippingDeliveryRepository _dal;
+ private readonly IUnitOfWork _unitOfWork;
+ private readonly IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
+
+
+ public WeChatShippingDeliveryServices(IUnitOfWork unitOfWork, IWeChatShippingDeliveryRepository dal, IWeChatApiHttpClientFactory weChatApiHttpClientFactory)
+ {
+ this._dal = dal;
+ _weChatApiHttpClientFactory = weChatApiHttpClientFactory;
+ base.BaseDal = dal;
+ _unitOfWork = unitOfWork;
+ }
+
+ #region 实现重写增删改查操作==========================================================
+
+ ///
+ /// 重写异步插入方法
+ ///
+ /// 实体数据
+ ///
+ public async Task InsertAsync(WeChatShippingDelivery entity)
+ {
+ return await _dal.InsertAsync(entity);
+ }
+
+ ///
+ /// 重写异步更新方法方法
+ ///
+ ///
+ ///
+ public async Task UpdateAsync(WeChatShippingDelivery entity)
+ {
+ return await _dal.UpdateAsync(entity);
+ }
+
+ ///
+ /// 重写异步更新方法方法
+ ///
+ ///
+ ///
+ public async Task UpdateAsync(List entity)
+ {
+ return await _dal.UpdateAsync(entity);
+ }
+
+ ///
+ /// 重写删除指定ID的数据
+ ///
+ ///
+ ///
+ public async Task DeleteByIdAsync(object id)
+ {
+ return await _dal.DeleteByIdAsync(id);
+ }
+
+ ///
+ /// 重写删除指定ID集合的数据(批量删除)
+ ///
+ ///
+ ///
+ public async Task DeleteByIdsAsync(int[] ids)
+ {
+ return await _dal.DeleteByIdsAsync(ids);
+ }
+
+ #endregion
+
+ #region 获取缓存的所有数据==========================================================
+
+ ///
+ /// 获取缓存的所有数据
+ ///
+ ///
+ public async Task> GetCaChe()
+ {
+ return await _dal.GetCaChe();
+ }
+
+ #endregion
+
+ #region 重写根据条件查询分页数据
+ ///
+ /// 重写根据条件查询分页数据
+ ///
+ /// 判断集合
+ /// 排序方式
+ /// 当前页面索引
+ /// 分布大小
+ ///
+ /// 是否使用WITH(NOLOCK)
+ ///
+ public async Task> QueryPageAsync(Expression> predicate,
+ Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+ int pageSize = 20, bool blUseNoLock = false)
+ {
+ return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
+ }
+ #endregion
+
+
+ ///
+ /// 通过接口更新所有快递公司信息
+ ///
+ public async Task DoUpdateCompany()
+ {
+ var jm = new AdminUiCallBack();
+
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+
+ var url = $"https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/get_delivery_list?access_token={accessToken}";
+
+ var postData = new { accessToken };
+
+ var result = await url.PostJsonAsync(postData).ReceiveJson();
+
+ var bl = result != null;
+
+ if (result is { errcode: 0 })
+ {
+ //先清空历史表
+ await _dal.DeleteAsync(p => p.id > 0, true);
+ //组装插入数据
+ var insertData = result.delivery_list.Select(item => new WeChatShippingDelivery() { deliveryId = item.delivery_id, deliveryName = item.delivery_name }).ToList();
+ //更新数据库
+ bl = await _dal.InsertAsync(insertData, true) > 0;
+
+ }
+
+ jm.data = result;
+
+ jm.code = bl ? 0 : 1;
+ jm.msg = bl ? "数据刷新成功" : "数据刷新失败";
+ return jm;
+ }
+
+ }
+}
diff --git a/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs b/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs
index 9491fada..c19e102e 100644
--- a/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs
+++ b/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs
@@ -64,6 +64,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
private readonly ICoreCmsUserWeChatInfoServices _userWeChatInfoServices;
private readonly IRedisOperationRepository _redisOperationRepository;
private readonly CoreCms.Net.WeChat.Service.HttpClients.IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
+ private readonly IWeChatShippingDeliveryServices _weChatShippingDeliveryServices;
private readonly ICoreCmsOrderItemServices _orderItemServices;
@@ -82,7 +83,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
, ICoreCmsLogisticsServices logisticsServices
, ICoreCmsBillPaymentsServices billPaymentsServices
, ICoreCmsPaymentsServices paymentsServices
- , ICoreCmsSettingServices settingServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, IRedisOperationRepository redisOperationRepository, ICoreCmsBillDeliveryServices billDeliveryServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsOrderItemServices orderItemServices)
+ , ICoreCmsSettingServices settingServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, IRedisOperationRepository redisOperationRepository, ICoreCmsBillDeliveryServices billDeliveryServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsOrderItemServices orderItemServices, IWeChatShippingDeliveryServices weChatShippingDeliveryServices)
{
_webHostEnvironment = webHostEnvironment;
_coreCmsOrderServices = coreCmsOrderServices;
@@ -99,6 +100,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
_billDeliveryServices = billDeliveryServices;
_weChatApiHttpClientFactory = weChatApiHttpClientFactory;
_orderItemServices = orderItemServices;
+ _weChatShippingDeliveryServices = weChatShippingDeliveryServices;
}
#region 获取列表============================================================
@@ -493,7 +495,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
var storeList = await _storeServices.QueryAsync();
var logistics = await _logisticsServices.QueryListByClauseAsync(p => p.isDelete == false);
-
+ var deliveryCompany = await _weChatShippingDeliveryServices.GetCaChe();
var result = await _coreCmsOrderServices.GetOrderShipInfo(entity.id);
if (!result.status)
{
@@ -517,6 +519,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
jm.data = new
{
orderModel = result.data,
+ deliveryCompany,
storeList,
logistics,
};
@@ -543,10 +546,32 @@ namespace CoreCms.Net.Web.Admin.Controllers
{
var ids = entity.orderId.Split(",");
result = await _coreCmsOrderServices.BatchShip(ids, entity.logiCode, entity.logiNo, entity.items, entity.shipName, entity.shipMobile, entity.shipAddress, entity.memo, entity.storeId, entity.shipAreaId, entity.deliveryCompanyId);
+
+ if (result.status)
+ {
+ var orderPaymentIds = await _billPaymentsServices.QueryListByClauseAsync(p => ids.Contains(p.sourceId) && p.paymentCode == GlobalEnumVars.PaymentsTypes.wechatpay.ToString() && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed);
+ if (orderPaymentIds.Any())
+ {
+ //依次推入队列.
+ foreach (var item in orderPaymentIds)
+ {
+ await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.WeChatPayShipping, item.paymentId);
+ }
+ }
+
+ }
+
}
else
{
result = await _coreCmsOrderServices.Ship(entity.orderId, entity.logiCode, entity.logiNo, entity.items, entity.shipName, entity.shipMobile, entity.shipAddress, entity.memo, entity.storeId, entity.shipAreaId, entity.deliveryCompanyId);
+
+ //微信发货信息管理API发货
+ if (result.status && await _billPaymentsServices.QueryByClauseAsync(p => p.sourceId == entity.orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed) is { } paymentInfo)
+ {
+ await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.WeChatPayShipping, paymentInfo.paymentId);
+ }
+
}
jm.code = result.status ? 0 : 1;
@@ -603,6 +628,12 @@ namespace CoreCms.Net.Web.Admin.Controllers
result = await _coreCmsOrderServices.Ship(order.orderId, "benditongcheng", "无", items, order.shipName, order.shipMobile, order.shipAddress, order.memo, order.storeId, order.shipAreaId, "OTHERS");
}
+ //微信发货信息管理API发货
+ if (result.status && await _billPaymentsServices.QueryByClauseAsync(p => p.sourceId == order.orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed) is { } paymentInfo)
+ {
+ await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.WeChatPayShipping, paymentInfo.paymentId);
+ }
+
jm.code = result.status ? 0 : 1;
jm.msg = result.msg;
jm.data = result.data;
@@ -1716,7 +1747,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
return jm;
}
#endregion
-
+
#region 预览快递进度============================================================
// POST: Api/CoreCmsOrder/GetDetails/10
///
diff --git a/CoreCms.Net.Web.Admin/Controllers/WeChatShipping/WeChatShippingDeliveryController.cs b/CoreCms.Net.Web.Admin/Controllers/WeChatShipping/WeChatShippingDeliveryController.cs
new file mode 100644
index 00000000..be8db853
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/Controllers/WeChatShipping/WeChatShippingDeliveryController.cs
@@ -0,0 +1,157 @@
+/***********************************************************************
+ * Project: CoreCms
+ * ProjectName: 核心内容管理系统
+ * Web: https://www.corecms.net
+ * Author: 大灰灰
+ * Email: jianweie@163.com
+ * CreateTime: 2023/9/15 23:09:53
+ * Description: 暂无
+ ***********************************************************************/
+
+
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.Entities.Expression;
+using CoreCms.Net.Model.FromBody;
+using CoreCms.Net.Model.ViewModels.UI;
+using CoreCms.Net.Filter;
+using CoreCms.Net.Loging;
+using CoreCms.Net.IServices;
+using CoreCms.Net.Utility.Helper;
+using CoreCms.Net.Utility.Extensions;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Mvc;
+using NPOI.HSSF.UserModel;
+using SqlSugar;
+using CoreCms.Net.Services;
+
+namespace CoreCms.Net.Web.Admin.Controllers
+{
+ ///
+ /// 微信发货快递公司信息
+ ///
+ [Description("微信发货快递公司信息")]
+ [Route("api/[controller]/[action]")]
+ [ApiController]
+ [RequiredErrorForAdmin]
+ [Authorize(Permissions.Name)]
+ public class WeChatShippingDeliveryController : ControllerBase
+ {
+ private readonly IWebHostEnvironment _webHostEnvironment;
+ private readonly IWeChatShippingDeliveryServices _weChatShippingDeliveryServices;
+
+ ///
+ /// 构造函数
+ ///
+ public WeChatShippingDeliveryController(IWebHostEnvironment webHostEnvironment
+ ,IWeChatShippingDeliveryServices weChatShippingDeliveryServices
+ )
+ {
+ _webHostEnvironment = webHostEnvironment;
+ _weChatShippingDeliveryServices = weChatShippingDeliveryServices;
+ }
+
+ #region 获取列表============================================================
+ // POST: Api/WeChatShippingDelivery/GetPageList
+ ///
+ /// 获取列表
+ ///
+ ///
+ [HttpPost]
+ [Description("获取列表")]
+ public async Task GetPageList()
+ {
+ var jm = new AdminUiCallBack();
+ var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
+ var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);
+ var where = PredicateBuilder.True();
+ //获取排序字段
+ var orderField = Request.Form["orderField"].FirstOrDefault();
+
+ Expression> orderEx = orderField switch
+ {
+ "id" => p => p.id,"deliveryId" => p => p.deliveryId,"deliveryName" => p => p.deliveryName,
+ _ => p => p.id
+ };
+
+ //设置排序方式
+ var orderDirection = Request.Form["orderDirection"].FirstOrDefault();
+ var orderBy = orderDirection switch
+ {
+ "asc" => OrderByType.Asc,
+ "desc" => OrderByType.Desc,
+ _ => OrderByType.Desc
+ };
+ //查询筛选
+
+ //序列 int
+ var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0);
+ if (id > 0)
+ {
+ where = where.And(p => p.id == id);
+ }
+ //快递公司编码 nvarchar
+ var deliveryId = Request.Form["deliveryId"].FirstOrDefault();
+ if (!string.IsNullOrEmpty(deliveryId))
+ {
+ where = where.And(p => p.deliveryId.Contains(deliveryId));
+ }
+ //快递公司名称 nvarchar
+ var deliveryName = Request.Form["deliveryName"].FirstOrDefault();
+ if (!string.IsNullOrEmpty(deliveryName))
+ {
+ where = where.And(p => p.deliveryName.Contains(deliveryName));
+ }
+ //获取数据
+ var list = await _weChatShippingDeliveryServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true);
+ //返回数据
+ jm.data = list;
+ jm.code = 0;
+ jm.count = list.TotalCount;
+ jm.msg = "数据调用成功!";
+ return jm;
+ }
+ #endregion
+
+ #region 首页数据============================================================
+ // POST: Api/WeChatShippingDelivery/GetIndex
+ ///
+ /// 首页数据
+ ///
+ ///
+ [HttpPost]
+ [Description("首页数据")]
+ public AdminUiCallBack GetIndex()
+ {
+ //返回数据
+ var jm = new AdminUiCallBack { code = 0 };
+ return jm;
+ }
+ #endregion
+
+ #region 拉取数据更新============================================================
+
+ // POST: Api/CoreCmsLogistics/DoDelete/10
+ ///
+ /// 拉取数据更新
+ ///
+ [HttpPost]
+ [Description("单选删除")]
+ public async Task DoUpdateCompany()
+ {
+ var jm = await _weChatShippingDeliveryServices.DoUpdateCompany();
+ return jm;
+
+ }
+
+ #endregion
+
+ }
+}
diff --git a/CoreCms.Net.Web.Admin/Controllers/WeChatShipping/WeChatShippingOrderController.cs b/CoreCms.Net.Web.Admin/Controllers/WeChatShipping/WeChatShippingOrderController.cs
new file mode 100644
index 00000000..55933247
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/Controllers/WeChatShipping/WeChatShippingOrderController.cs
@@ -0,0 +1,661 @@
+using System;
+using System.Collections.Generic;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.Filter;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System.ComponentModel;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.Entities.Expression;
+using CoreCms.Net.Model.ViewModels.UI;
+using CoreCms.Net.Utility.Extensions;
+using CoreCms.Net.Utility.Helper;
+using SqlSugar;
+using Azure.Core;
+using CoreCms.Net.Caching.AccressToken;
+using CoreCms.Net.DTO.WeChatShipping;
+using CoreCms.Net.IServices;
+using CoreCms.Net.Model.ViewModels.Api;
+using Flurl.Http;
+using CoreCms.Net.WeChat.Service.HttpClients;
+using CoreCms.Net.WeChat.Service.Enums;
+using SKIT.FlurlHttpClient.Wechat.Api.Models;
+using SKIT.FlurlHttpClient.Wechat.Api;
+using CoreCms.Net.Model.FromBody;
+using CoreCms.Net.Services;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressBusinessDeliveryGetAllResponse.Types;
+using CoreCms.Net.Loging;
+
+namespace CoreCms.Net.Web.Admin.Controllers.WeChatShipping
+{
+
+ ///
+ /// 微信发货信息订单管理
+ ///
+ [Description("微信发货信息订单管理")]
+ [Route("api/[controller]/[action]")]
+ [ApiController]
+ [RequiredErrorForAdmin]
+ [Authorize(Permissions.Name)]
+ public class WeChatShippingOrderController : ControllerBase
+ {
+
+ private readonly IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
+ private readonly ICoreCmsBillPaymentsServices _billPaymentsServices;
+ private readonly ICoreCmsOrderServices _orderServices;
+ private readonly ICoreCmsOrderItemServices _orderItemServices;
+ private readonly ICoreCmsServicesServices _servicesServices;
+ private readonly IWeChatShippingDeliveryServices _weChatShippingDeliveryServices;
+ private readonly ICoreCmsBillDeliveryServices _billDeliveryServices;
+
+
+ ///
+ /// 构造函数
+ ///
+ public WeChatShippingOrderController(IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsOrderServices orderServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsServicesServices servicesServices, IWeChatShippingDeliveryServices weChatShippingDeliveryServices, ICoreCmsBillDeliveryServices billDeliveryServices)
+ {
+ _weChatApiHttpClientFactory = weChatApiHttpClientFactory;
+ _billPaymentsServices = billPaymentsServices;
+ _orderServices = orderServices;
+ _orderItemServices = orderItemServices;
+ _servicesServices = servicesServices;
+ _weChatShippingDeliveryServices = weChatShippingDeliveryServices;
+ _billDeliveryServices = billDeliveryServices;
+ }
+
+
+ #region 获取列表============================================================
+
+ // POST: Api/CoreCmsBillReship/GetPageList
+ ///
+ /// 获取列表
+ ///
+ ///
+ [HttpPost]
+ [Description("获取列表")]
+ public async Task GetPageList()
+ {
+ var jm = new AdminUiCallBack();
+ var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
+ var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(20);
+
+ var last_index = Request.Form["last_index"].FirstOrDefault();
+
+ //获取排序字段
+
+ //设置排序方式
+ var orderDirection = Request.Form["orderDirection"].FirstOrDefault();
+ var orderBy = orderDirection switch
+ {
+ "asc" => OrderByType.Asc,
+ "desc" => OrderByType.Desc,
+ _ => OrderByType.Desc
+ };
+ //查询筛选
+
+
+ //构建请求
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+ var request = new WxaSecOrderGetOrderListRequest()
+ {
+ AccessToken = accessToken
+ };
+
+ //构建查询
+ var status = Request.Form["status"].FirstOrDefault().ObjectToInt(0);
+ if (status > 0)
+ {
+ request.OrderState = status;
+ }
+
+ if (pageCurrent > 1)
+ {
+ request.Limit = pageCurrent;
+ }
+
+ if (!string.IsNullOrEmpty(last_index))
+ {
+ request.Offset = last_index;
+ }
+
+ if (pageSize > 0)
+ {
+ request.Limit = pageSize;
+ }
+
+ var response = await client.ExecuteWxaSecOrderGetOrderListAsync(request, HttpContext.RequestAborted);
+ if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功)
+ {
+
+ //返回数据
+ jm.data = response.OrderList;
+ jm.otherData = response;
+ jm.code = 0;
+ jm.count = 10000;
+ jm.msg = "数据调用成功!";
+ }
+ else
+ {
+ jm.code = 1;
+ jm.msg = response.ErrorMessage;
+ }
+
+ //获取数据
+
+ return jm;
+ }
+
+ #endregion
+
+ #region 首页数据============================================================
+
+ // POST: Api/CoreCmsBillReship/GetIndex
+ ///
+ /// 首页数据
+ ///
+ ///
+ [HttpPost]
+ [Description("首页数据")]
+ public AdminUiCallBack GetIndex()
+ {
+ //返回数据
+ var jm = new AdminUiCallBack { code = 0 };
+
+ var status = EnumHelper.EnumToList();
+ var logisticsType = EnumHelper.EnumToList();
+
+ jm.data = new
+ {
+ status,
+ logisticsType
+ };
+
+
+ return jm;
+ }
+
+ #endregion
+
+ #region 创建发货单============================================================
+ ///
+ /// 创建发货单
+ ///
+ ///
+ [HttpPost]
+ [Description("创建数据")]
+ public async Task GetCreate([FromBody] FMStringId entity)
+ {
+ //返回数据
+ var jm = new AdminUiCallBack { code = 0 };
+
+ var paymentOrder = await _billPaymentsServices.QueryByClauseAsync(p => p.paymentId == entity.id);
+ if (paymentOrder == null)
+ {
+ jm.msg = "支付单获取失败";
+ return jm;
+ }
+
+ var billDeliveryList = new List();
+
+ var orderTitle = string.Empty;
+ var logisticsTypeValue = 0;
+ if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Recharge)
+ {
+ orderTitle = "用户充值" + paymentOrder.money + "元";
+ logisticsTypeValue = (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品;
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.FormOrder)
+ {
+ orderTitle = "表单订单";
+ logisticsTypeValue = (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品;
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.FormPay)
+ {
+ orderTitle = "表单付款码支付";
+ logisticsTypeValue = (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品;
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.ServiceOrder)
+ {
+ var id = Convert.ToInt32(paymentOrder.sourceId);
+ var serviceModel = await _servicesServices.QueryByClauseAsync(p => p.id == id);
+ if (serviceModel == null)
+ {
+ jm.msg = "服务项目获取失败";
+ return jm;
+ }
+
+ orderTitle = serviceModel.title;
+ logisticsTypeValue = (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品;
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Common
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.PinTuan
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Group
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Seckill
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
+ )
+ {
+
+ billDeliveryList = await _billDeliveryServices.QueryListByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ //获取订单
+ var order = await _orderServices.QueryByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ if (order == null)
+ {
+ jm.msg = "关联订单获取失败";
+ return jm;
+ }
+
+ logisticsTypeValue = order.receiptType switch
+ {
+ //设置物流的发货模式
+ (int)GlobalEnumVars.OrderReceiptType.SelfDelivery => (int)GlobalEnumVars.WeChatShippingLogisticsType.用户自提,
+ (int)GlobalEnumVars.OrderReceiptType.IntraCityService => (int)GlobalEnumVars.WeChatShippingLogisticsType.同城配送,
+ (int)GlobalEnumVars.OrderReceiptType.Logistics => (int)GlobalEnumVars.WeChatShippingLogisticsType.物流配送,
+ _ => logisticsTypeValue
+ };
+ var orderItems = await _orderItemServices.QueryListByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ if (!orderItems.Any())
+ {
+ jm.msg = "订单详情获取失败";
+ return jm;
+ }
+ else
+ {
+ if (orderItems.Count == 1)
+ {
+ orderTitle = orderItems.FirstOrDefault()?.name;
+ }
+ else
+ {
+ orderItems.ForEach(p => { orderTitle += p.name + ";"; });
+ }
+ }
+
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Bargain)
+ {
+ orderTitle = "砍价活动";
+ logisticsTypeValue = (int)GlobalEnumVars.WeChatShippingLogisticsType.物流配送;
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Giveaway)
+ {
+ orderTitle = "购物赠品";
+ logisticsTypeValue = (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品;
+ }
+ else
+ {
+ jm.msg = "订单类型获取失败";
+ return jm;
+ }
+
+ var status = EnumHelper.EnumToList();
+ var logisticsType = EnumHelper.EnumToList();
+
+
+ //构建请求
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+ var request = new WxaSecOrderGetOrderRequest
+ {
+ AccessToken = accessToken,
+ TransactionId = entity.data.ToString(),
+ OutTradeNumber = entity.id
+ };
+
+ var deliveryCompany = await _weChatShippingDeliveryServices.GetCaChe();
+
+
+ var response = await client.ExecuteWxaSecOrderGetOrderAsync(request, HttpContext.RequestAborted);
+ if (response.IsSuccessful())
+ {
+ jm.code = 0;
+ jm.data = new
+ {
+ response.Order,
+ status,
+ logisticsType,
+ orderTitle,
+ deliveryCompany,
+ billDeliveryList,
+ paymentOrder,
+ logisticsTypeValue
+ };
+ }
+ else
+ {
+ jm.code = 1;
+ jm.msg = response.ErrorMessage;
+ }
+ return jm;
+ }
+ #endregion
+
+ #region 创建提交============================================================
+ // POST: Api/CoreCmsAgent/DoCreate
+ ///
+ /// 创建提交
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Description("创建提交")]
+ public async Task DoCreate([FromBody] OrderShippingCreatePost entity)
+ {
+ var jm = new AdminUiCallBack();
+
+ var shippingList = new List();
+
+ if (entity.logistics_type == (int)GlobalEnumVars.WeChatShippingLogisticsType.物流配送)
+ {
+ if (entity.shipping_list == null || !entity.shipping_list.Any())
+ {
+ jm.msg = "物流配送请完善快递信息";
+ return jm;
+ }
+
+ foreach (var item in entity.shipping_list)
+ {
+ if (string.IsNullOrEmpty(item.express_company) && string.IsNullOrEmpty(item.tracking_no))
+ {
+ jm.msg = "请填写完整的快递信息";
+ return jm;
+ }
+ var shipping = new WxaSecOrderUploadShippingInfoRequest.Types.Shipping
+ {
+ ItemDescription = entity.item_desc,
+ ExpressCompany = item.express_company,
+ TrackingNumber = item.tracking_no
+ };
+ shippingList.Add(shipping);
+ }
+ }
+ else if (entity.logistics_type == (int)GlobalEnumVars.WeChatShippingLogisticsType.同城配送)
+ {
+ var shipping = new WxaSecOrderUploadShippingInfoRequest.Types.Shipping
+ {
+ ItemDescription = entity.item_desc,
+ ExpressCompany = entity.cityDistributionName,
+ TrackingNumber = entity.cityDistributionNumber
+ };
+ shippingList.Add(shipping);
+ }
+ else if (entity.logistics_type == (int)GlobalEnumVars.WeChatShippingLogisticsType.用户自提 || entity.logistics_type == (int)GlobalEnumVars.WeChatShippingLogisticsType.虚拟商品)
+ {
+ var shipping = new WxaSecOrderUploadShippingInfoRequest.Types.Shipping
+ {
+ ItemDescription = entity.item_desc
+ };
+ shippingList.Add(shipping);
+ }
+ else
+ {
+ jm.msg = "请提交合理的物流模式";
+ return jm;
+ }
+
+ var request = new WxaSecOrderUploadShippingInfoRequest
+ {
+ OrderKey = new WxaSecOrderUploadCombinedShippingInfoRequest.Types.OrderKey()
+ {
+ OrderNumberType = 2,
+ TransactionId = entity.transaction_id,
+ MerchantId = entity.merchant_id,
+ OutTradeNumber = entity.merchant_trade_no
+ },
+ LogisticsType = entity.logistics_type,
+ IsFinishAll = entity.is_all_delivered,
+ ShippingList = shippingList,
+ Payer = new WxaSecOrderUploadCombinedShippingInfoRequest.Types.Payer() { OpenId = entity.openid }
+ };
+
+ if (request.LogisticsType == (int)GlobalEnumVars.WeChatShippingLogisticsType.物流配送 && request.IsFinishAll == true)
+ {
+ if (shippingList.Count == 1)
+ {
+ request.DeliveryMode = (int)GlobalEnumVars.WeChatShippingDeliveryMode.UNIFIED_DELIVERY;
+ }
+ else
+ {
+ request.DeliveryMode = (int)GlobalEnumVars.WeChatShippingDeliveryMode.SPLIT_DELIVERY;
+ }
+ }
+ else if (request.LogisticsType == (int)GlobalEnumVars.WeChatShippingLogisticsType.物流配送 && request.IsFinishAll == false)
+ {
+ request.DeliveryMode = (int)GlobalEnumVars.WeChatShippingDeliveryMode.SPLIT_DELIVERY;
+ }
+ else
+ {
+ request.DeliveryMode = (int)GlobalEnumVars.WeChatShippingDeliveryMode.UNIFIED_DELIVERY;
+ }
+
+
+
+ //构建请求
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+
+ request.AccessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+
+ var response = await client.ExecuteWxaSecOrderUploadShippingInfoAsync(request, HttpContext.RequestAborted);
+
+ if (response.IsSuccessful())
+ {
+ jm.code = 0;
+ jm.data = new
+ {
+ response
+ };
+ jm.msg = "提交成功";
+ }
+ else
+ {
+ jm.code = 1;
+ jm.msg = response.ErrorMessage;
+ }
+
+ return jm;
+ }
+ #endregion
+
+ #region 重新发货============================================================
+ ///
+ /// 重新发货
+ ///
+ ///
+ [HttpPost]
+ [Description("创建数据")]
+ public async Task GetUpdate([FromBody] FMStringId entity)
+ {
+ //返回数据
+ var jm = new AdminUiCallBack { code = 0 };
+
+ var paymentOrder = await _billPaymentsServices.QueryByClauseAsync(p => p.paymentId == entity.id);
+ if (paymentOrder == null)
+ {
+ jm.msg = "支付单获取失败";
+ return jm;
+ }
+
+ var status = EnumHelper.EnumToList();
+ var logisticsType = EnumHelper.EnumToList();
+
+
+ //构建请求
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+ var request = new WxaSecOrderGetOrderRequest
+ {
+ AccessToken = accessToken,
+ TransactionId = entity.data.ToString(),
+ OutTradeNumber = entity.id
+ };
+
+ var deliveryCompany = await _weChatShippingDeliveryServices.GetCaChe();
+
+
+ var response = await client.ExecuteWxaSecOrderGetOrderAsync(request, HttpContext.RequestAborted);
+ if (response.IsSuccessful())
+ {
+ jm.code = 0;
+ jm.data = new
+ {
+ response.Order,
+ status,
+ logisticsType,
+ deliveryCompany
+ };
+ }
+ else
+ {
+ jm.code = 1;
+ jm.msg = response.ErrorMessage;
+ }
+ return jm;
+ }
+ #endregion
+
+ #region 重新发货提交============================================================
+ ///
+ /// 重新发货提交
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Description("创建提交")]
+ public AdminUiCallBack DoUpdate([FromBody] Object entity)
+ {
+ var jm = new AdminUiCallBack();
+
+ return jm;
+ }
+ #endregion
+
+ #region 预览数据============================================================
+ // POST: Api/CoreCmsAgent/GetDetails/10
+ ///
+ /// 预览数据
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Description("预览数据")]
+ public async Task GetDetails([FromBody] FMStringId entity)
+ {
+ //返回数据
+ var jm = new AdminUiCallBack { code = 0 };
+
+ var paymentOrder = await _billPaymentsServices.QueryByClauseAsync(p => p.paymentId == entity.id);
+ if (paymentOrder == null)
+ {
+ jm.msg = "支付单获取失败";
+ return jm;
+ }
+
+ var orderTitle = string.Empty;
+
+ if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Recharge)
+ {
+ orderTitle = "用户充值" + paymentOrder.money + "元";
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.FormOrder)
+ {
+ orderTitle = "表单订单";
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.FormPay)
+ {
+ orderTitle = "表单付款码支付";
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.ServiceOrder)
+ {
+ var id = Convert.ToInt32(paymentOrder.sourceId);
+ var serviceModel = await _servicesServices.QueryByClauseAsync(p => p.id == id);
+ if (serviceModel == null)
+ {
+ jm.msg = "服务项目获取失败";
+ return jm;
+ }
+
+ orderTitle = serviceModel.title;
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Common
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.PinTuan
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Group
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Seckill
+ || paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Solitaire
+ )
+ {
+ var orderItems = await _orderItemServices.QueryListByClauseAsync(p => p.orderId == paymentOrder.sourceId);
+ if (!orderItems.Any())
+ {
+ jm.msg = "订单详情获取失败";
+ return jm;
+ }
+ else
+ {
+ if (orderItems.Count == 1)
+ {
+ orderTitle = orderItems.FirstOrDefault()?.name;
+ }
+ else
+ {
+ orderItems.ForEach(p => { orderTitle += p.name + ";"; });
+ }
+ }
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Bargain)
+ {
+ orderTitle = "砍价活动";
+ }
+ else if (paymentOrder.type == (int)GlobalEnumVars.BillPaymentsType.Giveaway)
+ {
+ orderTitle = "购物赠品";
+ }
+ else
+ {
+ jm.msg = "订单类型获取失败";
+ return jm;
+ }
+
+ var status = EnumHelper.EnumToList();
+ var logisticsType = EnumHelper.EnumToList();
+
+
+ //构建请求
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+ var request = new WxaSecOrderGetOrderRequest
+ {
+ AccessToken = accessToken,
+ TransactionId = entity.data.ToString(),
+ OutTradeNumber = entity.id
+ };
+
+ var deliveryCompany = await _weChatShippingDeliveryServices.GetCaChe();
+
+
+ var response = await client.ExecuteWxaSecOrderGetOrderAsync(request, HttpContext.RequestAborted);
+ if (response.IsSuccessful())
+ {
+ jm.code = 0;
+ jm.data = new
+ {
+ response.Order,
+ status,
+ logisticsType,
+ orderTitle,
+ deliveryCompany
+ };
+ }
+ else
+ {
+ jm.code = 1;
+ jm.msg = response.ErrorMessage;
+ }
+ return jm;
+ }
+ #endregion
+
+ }
+}
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/create.html
new file mode 100644
index 00000000..308652d6
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/create.html
@@ -0,0 +1,47 @@
+
+
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/details.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/details.html
new file mode 100644
index 00000000..cd8c7be1
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/details.html
@@ -0,0 +1,54 @@
+
+
\ No newline at end of file
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/edit.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/edit.html
new file mode 100644
index 00000000..468dc04b
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/edit.html
@@ -0,0 +1,48 @@
+
+
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/index.html
new file mode 100644
index 00000000..f98ecb0c
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/delivery/index.html
@@ -0,0 +1,148 @@
+微信发货快递公司信息
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/create.html
new file mode 100644
index 00000000..4110abb1
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/create.html
@@ -0,0 +1,236 @@
+
+
+
+
+
+
+
+
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/details.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/details.html
new file mode 100644
index 00000000..c9dbfe31
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/details.html
@@ -0,0 +1,104 @@
+
+
\ No newline at end of file
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/index.html
new file mode 100644
index 00000000..ce13da14
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/index.html
@@ -0,0 +1,387 @@
+微信自动回复消息表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/update.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/update.html
new file mode 100644
index 00000000..3a51aeda
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechatshipping/order/update.html
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
diff --git a/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.xml b/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.xml
index 46020818..c791a721 100644
--- a/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.xml
+++ b/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.xml
@@ -1527,23 +1527,6 @@
-
-
- 微信小程序自定义交易组件
-
-
-
-
-
-
-
-
-
-
- 获取用户是否订阅
-
-
-
微信公众号消息推送对接
diff --git a/数据库/MySql/20231008/升级脚本/1、创建微信发货物流公司信息表.sql b/数据库/MySql/20231008/升级脚本/1、创建微信发货物流公司信息表.sql
new file mode 100644
index 00000000..ad3d490a
--- /dev/null
+++ b/数据库/MySql/20231008/升级脚本/1、创建微信发货物流公司信息表.sql
@@ -0,0 +1,20 @@
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for WeChatShippingDelivery
+-- ----------------------------
+DROP TABLE IF EXISTS `WeChatShippingDelivery`;
+CREATE TABLE `WeChatShippingDelivery` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序列',
+ `deliveryId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '快递公司编码',
+ `deliveryName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '快递公司名称',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信发货快递公司信息' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of WeChatShippingDelivery
+-- ----------------------------
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/数据库/MySql/20231008/升级脚本/2、创建后台管理菜单.sql b/数据库/MySql/20231008/升级脚本/2、创建后台管理菜单.sql
new file mode 100644
index 00000000..87ea0600
--- /dev/null
+++ b/数据库/MySql/20231008/升级脚本/2、创建后台管理菜单.sql
@@ -0,0 +1,13 @@
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2638, 0, 'wechatshipping', '微信发货信息', 'layui-icon layui-icon-ok-circle', '', '', 0, 90, '', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2639, 2638, 'delivery', '快递公司管理', '', 'wechatshipping/delivery/index', '', 0, 1, '', NULL, NULL, 0, 0,'2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2641, 2639, 'GetPageList', '获取列表', NULL, NULL, '/Api/WeChatShippingDelivery/GetPageList', 1, 0, 'WeChatShippingDelivery:GetPageList', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2642, 2639, 'GetIndex', '首页数据', NULL, NULL, '/Api/WeChatShippingDelivery/GetIndex', 1, 1, 'WeChatShippingDelivery:GetIndex', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2643, 2639, 'DoUpdateCompany', '单选删除', NULL, NULL, '/Api/WeChatShippingDelivery/DoUpdateCompany', 1, 2, 'WeChatShippingDelivery:DoUpdateCompany', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2644, 2638, 'order', '发货信息列表', '', 'wechatshipping/order/index', '', 0, 10, '', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2653, 2644, 'GetPageList', '获取列表', NULL, NULL, '/Api/WeChatShippingOrder/GetPageList', 1, 0, 'WeChatShippingOrder:GetPageList', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2654, 2644, 'GetIndex', '首页数据', NULL, NULL, '/Api/WeChatShippingOrder/GetIndex', 1, 1, 'WeChatShippingOrder:GetIndex', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2655, 2644, 'GetCreate', '创建数据', NULL, NULL, '/Api/WeChatShippingOrder/GetCreate', 1, 2, 'WeChatShippingOrder:GetCreate', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2656, 2644, 'DoCreate', '创建提交', NULL, NULL, '/Api/WeChatShippingOrder/DoCreate', 1, 3, 'WeChatShippingOrder:DoCreate', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2657, 2644, 'GetUpdate', '创建数据', NULL, NULL, '/Api/WeChatShippingOrder/GetUpdate', 1, 4, 'WeChatShippingOrder:GetUpdate', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2658, 2644, 'DoUpdate', '创建提交', NULL, NULL, '/Api/WeChatShippingOrder/DoUpdate', 1, 5, 'WeChatShippingOrder:DoUpdate', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
+INSERT INTO SysMenu (id, parentId, identificationCode, menuName, menuIcon, path, component, menuType, sortNumber, authority, target, iconColor, hide, deleted, createTime, updateTime) VALUES (2659, 2644, 'GetDetails', '预览数据', NULL, NULL, '/Api/WeChatShippingOrder/GetDetails', 1, 6, 'WeChatShippingOrder:GetDetails', NULL, NULL, 0, 0, '2023-09-15 23:14:27', null);
\ No newline at end of file
diff --git a/数据库/MySql/20231008/升级脚本/3、注意.txt b/数据库/MySql/20231008/升级脚本/3、注意.txt
new file mode 100644
index 00000000..0078fac2
--- /dev/null
+++ b/数据库/MySql/20231008/升级脚本/3、注意.txt
@@ -0,0 +1 @@
+记得给角色权限
\ No newline at end of file
diff --git a/数据库/MySql/20231008/完整数据库带商品演示20231008.rar b/数据库/MySql/20231008/完整数据库带商品演示20231008.rar
new file mode 100644
index 00000000..e15d1956
Binary files /dev/null and b/数据库/MySql/20231008/完整数据库带商品演示20231008.rar differ
diff --git a/数据库/MySql/数据库更新日志.txt b/数据库/MySql/数据库更新日志.txt
index 875b5b68..05db41d5 100644
--- a/数据库/MySql/数据库更新日志.txt
+++ b/数据库/MySql/数据库更新日志.txt
@@ -1,3 +1,6 @@
+20231008
+【新增】表【WeChatShippingDelivery】微信发货快递公司信息表
+
2023-09-02
【移除】移除旧版自定义组件相关的业务表。
【移除】WeChatTransactionComponentAuditCategory;
diff --git a/数据库/SqlServer/20231008/升级脚本/1、创建微信发货物流公司信息表.sql b/数据库/SqlServer/20231008/升级脚本/1、创建微信发货物流公司信息表.sql
new file mode 100644
index 00000000..9300f4f9
--- /dev/null
+++ b/数据库/SqlServer/20231008/升级脚本/1、创建微信发货物流公司信息表.sql
@@ -0,0 +1,25 @@
+
+CREATE TABLE [dbo].[WeChatShippingDelivery](
+ [id] [int] IDENTITY(1,1) NOT NULL,
+ [deliveryId] [nvarchar](50) NOT NULL,
+ [deliveryName] [nvarchar](50) NOT NULL,
+ CONSTRAINT [PK_WeChatShippingDelivery] PRIMARY KEY CLUSTERED
+(
+ [id] ASC
+)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatShippingDelivery', @level2type=N'COLUMN',@level2name=N'id'
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'ݹ˾' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatShippingDelivery', @level2type=N'COLUMN',@level2name=N'deliveryId'
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'ݹ˾' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatShippingDelivery', @level2type=N'COLUMN',@level2name=N'deliveryName'
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'ŷݹ˾Ϣ' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatShippingDelivery'
+GO
+
+
diff --git a/数据库/SqlServer/20231008/升级脚本/2、创建后台管理菜单.sql b/数据库/SqlServer/20231008/升级脚本/2、创建后台管理菜单.sql
new file mode 100644
index 00000000..0b69f8b2
Binary files /dev/null and b/数据库/SqlServer/20231008/升级脚本/2、创建后台管理菜单.sql differ
diff --git a/数据库/SqlServer/20231008/完整数据库带商品演示20231008.rar b/数据库/SqlServer/20231008/完整数据库带商品演示20231008.rar
new file mode 100644
index 00000000..f7fc074f
Binary files /dev/null and b/数据库/SqlServer/20231008/完整数据库带商品演示20231008.rar differ
diff --git a/数据库/SqlServer/数据库更新日志.txt b/数据库/SqlServer/数据库更新日志.txt
index 3bd0b2bf..01f17e60 100644
--- a/数据库/SqlServer/数据库更新日志.txt
+++ b/数据库/SqlServer/数据库更新日志.txt
@@ -1,3 +1,6 @@
+20231008
+【新增】表【WeChatShippingDelivery】微信发货快递公司信息表
+
2023-09-02
【移除】移除旧版自定义组件相关的业务表。
【移除】WeChatTransactionComponentAuditCategory;
diff --git a/数据库/数据库文档/CoreShopProfessional表结构信息20231008.rar b/数据库/数据库文档/CoreShopProfessional表结构信息20231008.rar
new file mode 100644
index 00000000..3bb9858c
Binary files /dev/null and b/数据库/数据库文档/CoreShopProfessional表结构信息20231008.rar differ