diff --git a/CoreCms.Net.Configuration/CoreCms.Net.Configuration.csproj b/CoreCms.Net.Configuration/CoreCms.Net.Configuration.csproj index b89bd190..473010bf 100644 --- a/CoreCms.Net.Configuration/CoreCms.Net.Configuration.csproj +++ b/CoreCms.Net.Configuration/CoreCms.Net.Configuration.csproj @@ -5,7 +5,7 @@ - + diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs index 34bd6636..641ae4e3 100644 --- a/CoreCms.Net.Configuration/GlobalEnumVars.cs +++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs @@ -109,7 +109,6 @@ namespace CoreCms.Net.Configuration QiNiuKoDo = 3, } - /// /// 本地存储位置 /// @@ -121,6 +120,7 @@ namespace CoreCms.Net.Configuration API = 1 } + #endregion #region User用户相关=========================================================================== @@ -772,6 +772,24 @@ namespace CoreCms.Net.Configuration #endregion + #region MyRegion + /// + /// 购物车数量设置方式(1是直接增加/2是赋值) + /// + public enum CartSetNumType + { + /// + /// 增加 + /// + Increase = 1, + /// + /// 设置 + /// + Set = 2 + } + + #endregion + #region OrderLog订单日志===================================================== /// @@ -2731,7 +2749,6 @@ namespace CoreCms.Net.Configuration #endregion - #region 接龙相关 public enum SolitaireStatus @@ -2751,6 +2768,7 @@ namespace CoreCms.Net.Configuration #endregion #region redis缓存类型 + public enum AccessTokenEnum { @@ -2771,5 +2789,44 @@ namespace CoreCms.Net.Configuration } #endregion + #region 自定义交易组件 + + /// + /// 售后订单状态 + /// + public enum ShopAftersaleAddStatus + { + 未受理 = 0, + 用户取消 = 1, + 商家受理中 = 2, + 商家逾期未处理 = 3, + 商家拒绝退款 = 4, + 商家拒绝退货退款 = 5, + 待买家退货 = 6, + 退货退款关闭 = 7, + 待商家收货 = 8, + 商家退款中 = 11, + 商家逾期未退款 = 12, + 退款完成 = 13, + 退货退款完成 = 14, + 换货完成 = 15, + 待商家发货 = 16, + 待用户确认收货 = 17, + 商家拒绝换货 = 18, + 商家已收到货 = 19 + } + /// + /// 售后类型 + /// + public enum ShopAftersaleAddType + { + 退款 = 0, + 退款退货 = 1, + 换货 = 2 + } + + + #endregion + } } diff --git a/CoreCms.Net.IServices/Bill/ICoreCmsBillDeliveryServices.cs b/CoreCms.Net.IServices/Bill/ICoreCmsBillDeliveryServices.cs index 7d570b45..6fca4f60 100644 --- a/CoreCms.Net.IServices/Bill/ICoreCmsBillDeliveryServices.cs +++ b/CoreCms.Net.IServices/Bill/ICoreCmsBillDeliveryServices.cs @@ -34,10 +34,11 @@ namespace CoreCms.Net.IServices /// 省市区id /// 收货地址 /// 发货描述 + /// 直播物流编码 /// Task BatchShip(string[] orderId, string logiCode, string logiNo, Dictionary items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", - string memo = ""); + string memo = "", string deliveryCompanyId = ""); /// @@ -53,12 +54,11 @@ namespace CoreCms.Net.IServices /// 省市区id /// 收货地址 /// 发货描述 + /// 直播物流编码 /// Task Ship(string orderId, string logiCode, string logiNo, Dictionary items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", - string memo = ""); - - + string memo = "", string deliveryCompanyId = ""); /// diff --git a/CoreCms.Net.IServices/Order/ICoreCmsOrderServices.cs b/CoreCms.Net.IServices/Order/ICoreCmsOrderServices.cs index 1f58cf0e..1b7fe478 100644 --- a/CoreCms.Net.IServices/Order/ICoreCmsOrderServices.cs +++ b/CoreCms.Net.IServices/Order/ICoreCmsOrderServices.cs @@ -14,8 +14,8 @@ 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 CoreCms.Net.Model.ViewModels.DTO; +using CoreCms.Net.Model.ViewModels.UI; using SqlSugar; namespace CoreCms.Net.IServices @@ -77,6 +77,14 @@ namespace CoreCms.Net.IServices /// Task GetOrderInfoByOrderId(string id, int userId = 0, int aftersaleLevel = 0); + + /// + /// 把退款金额和退货商品查出来判断是否能进行售后 + /// + /// + /// 取售后单的时候,售后单的等级,0:待审核的和审核通过的售后单,1未审核的,2审核通过的 + void AfterSalesVal(CoreCmsOrder order, int afterSaleLevel = 0); + /// /// 获取订单不同状态的数量 /// @@ -112,9 +120,10 @@ namespace CoreCms.Net.IServices /// 商家获取订单列表 /// /// - Task GetOrderPageByMerchant(string dateType, string[] date, int status = 0, int storeId = 0, + Task GetOrderPageByMerchant(string dateType, string[] date, int status = 0, int receiptType = 0, int storeId = 0, int page = 1, int limit = 5); + /// /// 根据搜索条件商家获取订单列表 /// @@ -154,17 +163,19 @@ namespace CoreCms.Net.IServices /// - /// 构建需要发货的数据,和发货单密切关联 + /// 构建多个需要发货的数据,和发货单密切关联 /// /// Task GetOrderShipInfo(string[] ids); + /// /// 构建单个需要发货的数据,和发货单密切关联 /// /// Task GetOrderShipInfo(string orderId); + /// /// 发货改状态 /// @@ -273,8 +284,6 @@ namespace CoreCms.Net.IServices /// Task RemindOrderPay(); - - /// /// 重写根据条件列表数据 /// diff --git a/CoreCms.Net.Mapping/CoreCms.Net.Mapping.csproj b/CoreCms.Net.Mapping/CoreCms.Net.Mapping.csproj index b1a695f6..c68211fe 100644 --- a/CoreCms.Net.Mapping/CoreCms.Net.Mapping.csproj +++ b/CoreCms.Net.Mapping/CoreCms.Net.Mapping.csproj @@ -5,7 +5,7 @@ - + diff --git a/CoreCms.Net.Model/Entities/WeChat/WeChatTransactionComponentGoodSKU.cs b/CoreCms.Net.Model/Entities/WeChat/WeChatTransactionComponentGoodSKU.cs index 54494a41..abef5150 100644 --- a/CoreCms.Net.Model/Entities/WeChat/WeChatTransactionComponentGoodSKU.cs +++ b/CoreCms.Net.Model/Entities/WeChat/WeChatTransactionComponentGoodSKU.cs @@ -4,7 +4,7 @@ * Web: https://www.corecms.net * Author: 大灰灰 * Email: jianweie@163.com - * CreateTime: 2021/7/31 15:51:02 + * CreateTime: 2022/2/7 1:09:51 * Description: 暂无 ***********************************************************************/ @@ -25,152 +25,152 @@ namespace CoreCms.Net.Model.Entities public WeChatTransactionComponentGoodSKU() { } - + /// /// 序列 /// [Display(Name = "序列")] - + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Int32 id { get; set; } - - + + + + public System.Int32 id { get; set; } + + /// /// 交易组件平台自定义skuID /// [Display(Name = "交易组件平台自定义skuID")] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Int64 skuId { get; set; } - - + + + + public System.Int64 skuId { get; set; } + + /// /// 商家自定义商品ID /// [Display(Name = "商家自定义商品ID")] - + [Required(ErrorMessage = "请输入{0}")] - [StringLength(maximumLength:50,ErrorMessage = "{0}不能超过{1}字")] - - - public System.String outProductId { get; set; } - - + [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")] + + + public System.String outProductId { get; set; } + + /// /// 商家自定义skuID /// [Display(Name = "商家自定义skuID")] - + [Required(ErrorMessage = "请输入{0}")] - [StringLength(maximumLength:50,ErrorMessage = "{0}不能超过{1}字")] - - - public System.String outSkuId { get; set; } - - + [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")] + + + public System.String outSkuId { get; set; } + + /// /// sku小图 /// [Display(Name = "sku小图")] - + [Required(ErrorMessage = "请输入{0}")] - [StringLength(maximumLength:255,ErrorMessage = "{0}不能超过{1}字")] - - - public System.String thumbImg { get; set; } - - + [StringLength(maximumLength: 255, ErrorMessage = "{0}不能超过{1}字")] + + + public System.String thumbImg { get; set; } + + /// /// 成本价格 /// [Display(Name = "成本价格")] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Int32 costprice { get; set; } - - + + + + public System.Decimal costprice { get; set; } + + /// /// 售卖价格 /// [Display(Name = "售卖价格")] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Int32 salePrice { get; set; } - - + + + + public System.Decimal salePrice { get; set; } + + /// /// 市场价格 /// [Display(Name = "市场价格")] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Int32 marketPrice { get; set; } - - + + + + public System.Decimal marketPrice { get; set; } + + /// /// 库存 /// [Display(Name = "库存")] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Int32 stockNum { get; set; } - - + + + + public System.Int32 stockNum { get; set; } + + /// /// 条形码 /// [Display(Name = "条形码")] - - - [StringLength(maximumLength:50,ErrorMessage = "{0}不能超过{1}字")] - - - public System.String barCode { get; set; } - - + + + [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")] + + + public System.String barCode { get; set; } + + /// /// 商品编码 /// [Display(Name = "商品编码")] - - - [StringLength(maximumLength:50,ErrorMessage = "{0}不能超过{1}字")] - - - public System.String skuCode { get; set; } - - + + + [StringLength(maximumLength: 50, ErrorMessage = "{0}不能超过{1}字")] + + + public System.String skuCode { get; set; } + + /// /// 是否选择 /// [Display(Name = "是否选择")] - + [Required(ErrorMessage = "请输入{0}")] - - - - public System.Boolean isSelect { get; set; } - - + + + + public System.Boolean isSelect { get; set; } + + } } diff --git a/CoreCms.Net.Model/ViewModels/DTO/BillAftersalesDto.cs b/CoreCms.Net.Model/ViewModels/DTO/BillAftersalesDto.cs index 495d59b3..1f343dfc 100644 --- a/CoreCms.Net.Model/ViewModels/DTO/BillAftersalesDto.cs +++ b/CoreCms.Net.Model/ViewModels/DTO/BillAftersalesDto.cs @@ -16,7 +16,7 @@ namespace CoreCms.Net.Model.ViewModels.DTO /// /// OrderToAftersales返回类 /// - public class OrderToAftersalesDto + public class OrderToAfterSalesDto { public decimal refundMoney { get; set; } = 0; diff --git a/CoreCms.Net.Model/ViewModels/QueryMuch/QMAftersalesItems.cs b/CoreCms.Net.Model/ViewModels/QueryMuch/QMAftersalesItems.cs index 029f3501..76d3cf53 100644 --- a/CoreCms.Net.Model/ViewModels/QueryMuch/QMAftersalesItems.cs +++ b/CoreCms.Net.Model/ViewModels/QueryMuch/QMAftersalesItems.cs @@ -14,7 +14,7 @@ namespace CoreCms.Net.Model.ViewModels.QueryMuch /// /// 根据订单号查询已经售后的内容.算退货商品明细 /// - public class QMAftersalesItems + public class QMAfterSalesItems { public int orderItemsId { get; set; } public int nums { get; set; } diff --git a/CoreCms.Net.RedisMQ/Subscribe/TCOrderAfterSaleCreateSyncSubscribe.cs b/CoreCms.Net.RedisMQ/Subscribe/TCOrderAfterSaleCreateSyncSubscribe.cs index 8d258bee..fd984cdc 100644 --- a/CoreCms.Net.RedisMQ/Subscribe/TCOrderAfterSaleCreateSyncSubscribe.cs +++ b/CoreCms.Net.RedisMQ/Subscribe/TCOrderAfterSaleCreateSyncSubscribe.cs @@ -10,14 +10,19 @@ 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.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.Subscribe { @@ -29,23 +34,22 @@ namespace CoreCms.Net.RedisMQ.Subscribe private readonly string _wxOpenAppId = AppSettingsConstVars.WxOpenAppId; private readonly string _wxOpenAppSecret = AppSettingsConstVars.WxOpenAppSecret; - private readonly ICoreCmsUserWeChatInfoServices _userWeChatInfoServices; - private readonly ICoreCmsBillDeliveryServices _billDeliveryServices; private readonly ICoreCmsOrderServices _orderServices; - private readonly ICoreCmsOrderItemServices _orderItemServices; - private readonly ICoreCmsUserWeChatInfoServices _weChatInfoServices; private readonly IWeChatTransactionComponentOrderServices _tcOrderServices; + private readonly WeChat.Service.HttpClients.IWeChatApiHttpClientFactory _weChatApiHttpClientFactory; + private readonly ICoreCmsBillAftersalesServices _billAftersalesServices; + private readonly ICoreCmsBillAftersalesItemServices _billAftersalesItemServices; - public TCOrderAfterSaleCreateSyncSubscribe(ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsBillDeliveryServices billDeliveryServices, ICoreCmsOrderServices orderServices, ICoreCmsUserWeChatInfoServices weChatInfoServices, IWeChatTransactionComponentOrderServices tcOrderServices, ICoreCmsOrderItemServices orderItemServices) + + public TCOrderAfterSaleCreateSyncSubscribe(ICoreCmsOrderServices orderServices, IWeChatTransactionComponentOrderServices tcOrderServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsBillAftersalesServices billAftersalesServices, ICoreCmsBillAftersalesItemServices billAftersalesItemServices) { - _userWeChatInfoServices = userWeChatInfoServices; - _billDeliveryServices = billDeliveryServices; _orderServices = orderServices; - _weChatInfoServices = weChatInfoServices; _tcOrderServices = tcOrderServices; - _orderItemServices = orderItemServices; + _weChatApiHttpClientFactory = weChatApiHttpClientFactory; + _billAftersalesServices = billAftersalesServices; + _billAftersalesItemServices = billAftersalesItemServices; } /// @@ -75,33 +79,59 @@ namespace CoreCms.Net.RedisMQ.Subscribe return; } - ////获取小程序认证 - //var accessToken = await new WeChatHelper().GetWxOpenAccessToken(); - ////检查场景值是否在支付校验范围内 - ////接口调用请求地址 - //var sceneUrl = WeChat.TransactionComponent.Api.Delivery.recieve(accessToken); + //获取售后单 + var aftersale = await _billAftersalesServices.QueryByClauseAsync(p => p.aftersalesId == orderModel.billAftersalesId); + //获取售后单详情 + var aftersaleItems = await _billAftersalesItemServices.QueryListByClauseAsync(p => p.aftersalesId == orderModel.billAftersalesId); - ////组合请求 - //var sceneClient = new RestClient(sceneUrl); - //var request = new RestRequest(RestSharp.Method.POST); + //获取小程序认证 + var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); + var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); - //request.AddHeader("Content-Type", "application/json"); - //request.AddJsonBody(new - //{ - // out_order_id = orderModel.orderId, - // openid = tcOrderModel.openid, - //}); - //var response = await sceneClient.ExecuteAsync(request); - //var result = JsonConvert.DeserializeObject(response.Content); + var request = new ShopAftersaleAddRequest(); + request.AccessToken = accessToken; + request.OutOrderId = orderModel.orderId; + request.OutAftersaleOrderId = orderModel.billAftersalesId; + request.PagePath = "pages/member/afterSales/detail/detail?aftersalesId=" + orderModel.billAftersalesId; + request.RefundFee = Convert.ToInt32(aftersale.refundAmount * 100); + request.OpenId = tcOrderModel.openid; - //if (result != null && result.errcode == 0) - //{ - // NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", JsonConvert.SerializeObject(result)); - //} - //else - //{ - // NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", JsonConvert.SerializeObject(result)); - //} + if (aftersale.refundAmount > 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Refund) + { + request.Type = (int)GlobalEnumVars.ShopAftersaleAddType.退款; + } + else if (aftersale.refundAmount > 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Reship) + { + request.Type = (int)GlobalEnumVars.ShopAftersaleAddType.退款退货; + + } + else if (Convert.ToInt32(aftersale.refundAmount) == 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Reship) + { + request.Type = (int)GlobalEnumVars.ShopAftersaleAddType.退款退货; + } + else if (Convert.ToInt32(aftersale.refundAmount) == 0 && aftersale.type == (int)GlobalEnumVars.BillAftersalesIsReceive.Refund) + { + request.Type = (int)GlobalEnumVars.ShopAftersaleAddType.退款; + } + + request.Status = 0; + request.CreateTime = aftersale.createTime; + request.IsFinishAll = false; + + request.ProductList = new List(); + aftersaleItems.ForEach(p => + { + var product = new ShopAftersaleAddRequest.Types.Product(); + product.Count = p.nums; + product.OutProductId = p.goodsId.ToString(); + product.OutSKUId = p.productId.ToString(); + request.ProductList.Add(product); + }); + + var response = await client.ExecuteShopAftersaleAddAsync(request); + + NLogUtil.WriteAll(response.IsSuccessful() ? NLog.LogLevel.Info : NLog.LogLevel.Error, + LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", JsonConvert.SerializeObject(response)); } else { @@ -115,7 +145,6 @@ namespace CoreCms.Net.RedisMQ.Subscribe { wxOpenAppId = _wxOpenAppId, wxOpenAppSecret = _wxOpenAppSecret, - msg }; NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步创建售后单", JsonConvert.SerializeObject(obj), ex); throw; diff --git a/CoreCms.Net.RedisMQ/Subscribe/TCPayOrderSyncSubscribe.cs b/CoreCms.Net.RedisMQ/Subscribe/TCPayOrderSyncSubscribe.cs index b7309d98..315d9373 100644 --- a/CoreCms.Net.RedisMQ/Subscribe/TCPayOrderSyncSubscribe.cs +++ b/CoreCms.Net.RedisMQ/Subscribe/TCPayOrderSyncSubscribe.cs @@ -1,12 +1,12 @@ /*********************************************************************** - * Project: CoreCms - * ProjectName: 核心内容管理系统 - * Web: https://www.corecms.net - * Author: 大灰灰 - * Email: jianweie@163.com - * CreateTime: 2021/7/10 22:41:46 - * Description: 暂无 - ***********************************************************************/ +* Project: CoreCms +* ProjectName: 核心内容管理系统 +* Web: https://www.corecms.net +* Author: 大灰灰 +* Email: jianweie@163.com +* CreateTime: 2021/7/10 22:41:46 +* Description: 暂无 +***********************************************************************/ using System; @@ -59,33 +59,26 @@ namespace CoreCms.Net.RedisMQ.Subscribe var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); - var sceneRequest = new ShopSceneCheckRequest(); - sceneRequest.AccessToken = accessToken; - sceneRequest.Scene = orderModel.scene; - - var sceneResponse = await client.ExecuteShopSceneCheckAsync(sceneRequest); - if (sceneResponse.IsSuccessful() && sceneResponse.IsMatched == true) + var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.userId == orderModel.userId); + if (userInfo != null) { - var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.userId == orderModel.userId); - if (userInfo != null) - { - var payment = orderModel.paymentItem[0]; + var payment = orderModel.paymentItem[0]; - //获取同步地址接口地址 - var request = new ShopOrderPayRequest(); - request.OutOrderId = orderModel.orderId; - request.OpenId = userInfo.openid; - request.ActionType = 1; - request.TransactionId = payment.tradeNo; - request.PayTime = payment.createTime; - - var response = await client.ExecuteShopOrderPayAsync(request); - } - else - { - NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步订单状态", "微信用户数据获取失败"); - } + //获取同步地址接口地址 + var request = new ShopOrderPayRequest(); + request.AccessToken = accessToken; + request.OutOrderId = orderModel.orderId; + request.OpenId = userInfo.openid; + request.ActionType = 1; + request.TransactionId = payment.tradeNo; + request.PayTime = payment.createTime; + var response = await client.ExecuteShopOrderPayAsync(request); + NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步订单状态", JsonConvert.SerializeObject(response)); + } + else + { + NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-同步订单状态", "微信用户数据获取失败"); } } else diff --git a/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentAuditCategoryRepository.cs b/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentAuditCategoryRepository.cs index 4862ad80..a675ef28 100644 --- a/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentAuditCategoryRepository.cs +++ b/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentAuditCategoryRepository.cs @@ -53,7 +53,7 @@ namespace CoreCms.Net.Repository return jm; } //事物处理过程开始 - oldModel.id = entity.id; + //oldModel.id = entity.id; oldModel.licenseImage = entity.licenseImage; oldModel.level1 = entity.level1; oldModel.level1Name = entity.level1Name; @@ -62,11 +62,11 @@ namespace CoreCms.Net.Repository oldModel.level3 = entity.level3; oldModel.level3Name = entity.level3Name; oldModel.certificateImage = entity.certificateImage; - oldModel.auditId = entity.auditId; - oldModel.status = entity.status; - oldModel.brandId = entity.brandId; - oldModel.rejectReason = entity.rejectReason; - oldModel.createTime = entity.createTime; + //oldModel.auditId = entity.auditId; + //oldModel.status = entity.status; + //oldModel.brandId = entity.brandId; + //oldModel.rejectReason = entity.rejectReason; + //oldModel.createTime = entity.createTime; //事物处理过程结束 var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync(); diff --git a/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentGoodRepository.cs b/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentGoodRepository.cs index 208c333d..aa9c390b 100644 --- a/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentGoodRepository.cs +++ b/CoreCms.Net.Repository/WeChat/WeChatTransactionComponentGoodRepository.cs @@ -119,7 +119,7 @@ namespace CoreCms.Net.Repository return jm; } //事物处理过程开始 - oldModel.id = entity.id; + //oldModel.id = entity.id; oldModel.productId = entity.productId; oldModel.createTime = entity.createTime; oldModel.outProductId = entity.outProductId; @@ -138,9 +138,44 @@ namespace CoreCms.Net.Repository //事物处理过程结束 var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync(); + + if (entity.sku == null || entity.sku.Count < 0) + { + jm.msg = "请提交sku列表"; + return jm; + } + + var isSelectCount = entity.sku.Count(p => p.isSelect == true); + if (isSelectCount <= 0) + { + jm.msg = "请至少勾选一个需要提交的sku"; + return jm; + } + + var oldSku = await DbClient.Queryable() + .Where(p => p.outProductId == oldModel.outProductId).ToListAsync(); + oldSku.ForEach(p => + { + var newSku = entity.sku.Find(o => o.outSkuId == p.outSkuId); + if (newSku != null) + { + p.thumbImg = newSku.thumbImg; + p.costprice = newSku.costprice; + p.salePrice = newSku.salePrice; + p.marketPrice = newSku.marketPrice; + p.stockNum = newSku.stockNum; + p.isSelect = newSku.isSelect; + } + }); + + await DbClient.Updateable(oldSku).ExecuteCommandAsync(); + jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; + + + return jm; } diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillAftersalesServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillAftersalesServices.cs index 9223026c..f84f0cc9 100644 --- a/CoreCms.Net.Services/Bill/CoreCmsBillAftersalesServices.cs +++ b/CoreCms.Net.Services/Bill/CoreCmsBillAftersalesServices.cs @@ -22,13 +22,14 @@ using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.ViewModels.Basics; +using CoreCms.Net.Model.ViewModels.DTO; using CoreCms.Net.Model.ViewModels.QueryMuch; using CoreCms.Net.Model.ViewModels.UI; -using CoreCms.Net.Model.ViewModels.DTO; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; @@ -46,7 +47,8 @@ namespace CoreCms.Net.Services private readonly ICoreCmsMessageCenterServices _messageCenterServices; private readonly ICoreCmsUserPointLogServices _userPointLogServices; private readonly IRedisOperationRepository _redisOperationRepository; - + + public CoreCmsBillAftersalesServices(IUnitOfWork unitOfWork, ICoreCmsBillAftersalesRepository dal, IServiceProvider serviceProvider, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsUserPointLogServices userPointLogServices, IRedisOperationRepository redisOperationRepository) { this._dal = dal; @@ -94,12 +96,12 @@ namespace CoreCms.Net.Services var refundMoney = base.GetSum(where, p => p.refundAmount); //算退货商品明细 - var list = base.QueryMuch( + var list = base.QueryMuch( (child, parent) => new object[] { JoinType.Inner, child.aftersalesId == parent.aftersalesId }, - (child, parent) => new QMAftersalesItems + (child, parent) => new QMAfterSalesItems { orderItemsId = child.orderItemsId, nums = child.nums, @@ -127,7 +129,7 @@ namespace CoreCms.Net.Services } var billAftersales = base.QueryListByClause(where); - jm.data = new OrderToAftersalesDto + jm.data = new OrderToAfterSalesDto { refundMoney = refundMoney, reshipGoods = reshipGoods, @@ -181,19 +183,32 @@ namespace CoreCms.Net.Services using var container = _serviceProvider.CreateScope(); var orderServices = container.ServiceProvider.GetService(); - var settingServices = container.ServiceProvider.GetService(); + var orderItemServices = container.ServiceProvider.GetService(); + //var settingServices = container.ServiceProvider.GetService(); var imagesServices = container.ServiceProvider.GetService(); var itemServices = container.ServiceProvider.GetService(); - var result = await orderServices.GetOrderInfoByOrderId(orderId, userId); - if (result.status == false) + var aftersalesServices = container.ServiceProvider.GetService(); + + + //判断是否存在还未处理的售后单据。 + var haveAS = await aftersalesServices.ExistsAsync(p => p.orderId == orderId && p.userId == userId && p.status == (int)GlobalEnumVars.BillAftersalesStatus.WaitAudit); + if (haveAS) + { + jm.msg = "存在未处理的售后单"; + jm.status = false; + return jm; + } + + var orderInfo = await orderServices.QueryByClauseAsync(p => p.orderId == orderId && p.userId == userId); + if (orderInfo == null) { jm.msg = GlobalErrorCodeVars.Code13101; jm.code = 13101; return jm; } + orderInfo.items = await orderItemServices.QueryListByClauseAsync(p => p.orderId == orderInfo.orderId); - var orderInfo = new CoreCmsOrder(); - orderInfo = result.data as CoreCmsOrder; + orderServices.AfterSalesVal(orderInfo); if (orderInfo.addAftersalesStatus == false) { @@ -202,7 +217,7 @@ namespace CoreCms.Net.Services return jm; } //生成售后单号 - var aftersalesId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.售后单编号); + var afterSalesId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.售后单编号); //校验订单是否可以进行此售后,并且校验订单价格是否合理 var verifyResult = Verify(type, orderInfo, refund, items); @@ -218,7 +233,6 @@ namespace CoreCms.Net.Services verifyResult }; - //判断图片是否大于系统限定 //var allConfigs = await settingServices.GetConfigDictionaries(); @@ -229,9 +243,29 @@ namespace CoreCms.Net.Services return jm; } + var aftersalesItemData = new List(); + if (items != null && items.Any()) + { + //如果是退货,判断退货明细,数量是否超出可退的数量 + var aftersalesItems = FormatAfterSalesItems(orderInfo, items, afterSalesId); + if (!aftersalesItems.status) + { + return aftersalesItems; + } + //保存售后明细 + if (aftersalesItems.data != null) + { + aftersalesItemData = aftersalesItems.data as List; + } + else + { + jm.msg = "售后明细获取失败"; + return jm; + } + } var billAftersales = new CoreCmsBillAftersales(); - billAftersales.aftersalesId = aftersalesId; + billAftersales.aftersalesId = afterSalesId; billAftersales.orderId = orderId; billAftersales.userId = userId; billAftersales.type = type; @@ -241,22 +275,7 @@ namespace CoreCms.Net.Services billAftersales.createTime = DateTime.Now; //保存主表数据 await _dal.InsertAsync(billAftersales); - - if (items != null && items.Any()) - { - //如果是退货,判断退货明细,数量是否超出可退的数量 - var aftersalesItems = formatAftersalesItems(orderInfo, items, aftersalesId); - if (!aftersalesItems.status) - { - return aftersalesItems; - } - //保存售后明细 - if (aftersalesItems.data != null) - { - var list = aftersalesItems.data as List; - await itemServices.InsertAsync(list); - } - } + await itemServices.InsertAsync(aftersalesItemData); //保存图片 if (images.Length > 0) @@ -266,7 +285,7 @@ namespace CoreCms.Net.Services { imagesList.Add(new CoreCmsBillAftersalesImages() { - aftersalesId = aftersalesId, + aftersalesId = afterSalesId, imageUrl = images[i], sortId = i }); @@ -277,11 +296,15 @@ namespace CoreCms.Net.Services //消息模板推送给客户 SmsHelper.SendMessage(); + orderInfo.billAftersalesId = afterSalesId; + + // 微信自定义交易组件-同步创建售后单 + await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.TransactionComponentAfterSaleCreateSync, JsonConvert.SerializeObject(orderInfo)); + jm.status = true; jm.data = billAftersales; - + jm.msg = "售后申请成功!"; return jm; - } #endregion @@ -385,7 +408,7 @@ namespace CoreCms.Net.Services /// 前台选择的退货商品信息 /// 将要保存的售后单的单号 /// - private WebApiCallBack formatAftersalesItems(CoreCmsOrder orderInfo, JArray items, string aftersalesId) + private WebApiCallBack FormatAfterSalesItems(CoreCmsOrder orderInfo, JArray items, string aftersalesId) { var jm = new WebApiCallBack(); var data = new List(); @@ -433,7 +456,6 @@ namespace CoreCms.Net.Services { jm.msg = GlobalErrorCodeVars.Code13202; jm.data = jm.code = 13202; - return jm; } jm.status = true; @@ -533,7 +555,7 @@ namespace CoreCms.Net.Services var billAftersalesItems = new List(); if (items.Count > 0) { - var aftersalesItems = formatAftersalesItems(orderInfo, items, aftersalesId); + var aftersalesItems = FormatAfterSalesItems(orderInfo, items, aftersalesId); if (!aftersalesItems.status) { return aftersalesItems; @@ -698,7 +720,6 @@ namespace CoreCms.Net.Services } } } - //更新状态 await orderServices.UpdateAsync( p => new CoreCmsOrder() { status = orderInfo.status, payStatus = orderInfo.payStatus }, diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillDeliveryServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillDeliveryServices.cs index bbd7c942..507ff1cd 100644 --- a/CoreCms.Net.Services/Bill/CoreCmsBillDeliveryServices.cs +++ b/CoreCms.Net.Services/Bill/CoreCmsBillDeliveryServices.cs @@ -20,8 +20,8 @@ using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Api; -using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Model.ViewModels.DTO; +using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Helper; using Flurl.Http; using Google.Protobuf.WellKnownTypes; @@ -69,6 +69,7 @@ namespace CoreCms.Net.Services _redisOperationRepository = redisOperationRepository; } + /// /// 批量发货,可以支持多个订单合并发货,单个订单拆分发货等。 /// @@ -82,8 +83,9 @@ namespace CoreCms.Net.Services /// 省市区id /// 收货地址 /// 发货描述 + /// 直播物流编码 /// - public async Task BatchShip(string[] orderId, string logiCode, string logiNo, Dictionary items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", string memo = "") + public async Task BatchShip(string[] orderId, string logiCode, string logiNo, Dictionary items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", string memo = "", string deliveryCompanyId = "") { using var container = _serviceProvider.CreateScope(); var jm = new WebApiCallBack(); @@ -139,7 +141,7 @@ namespace CoreCms.Net.Services billDelivery.status = (int)GlobalEnumVars.BillDeliveryStatus.Already; billDelivery.memo = memo; billDelivery.createTime = DateTime.Now; - + billDelivery.thirdPartylogiCode = deliveryCompanyId; //设置发货明细 var bdRel = new List(); @@ -229,15 +231,14 @@ namespace CoreCms.Net.Services /// 省市区id /// 收货地址 /// 发货描述 + /// 直播物流编码 /// - public async Task Ship(string orderId, string logiCode, string logiNo, Dictionary items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", string memo = "") + public async Task Ship(string orderId, string logiCode, string logiNo, Dictionary items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", string memo = "", string deliveryCompanyId = "") { using var container = _serviceProvider.CreateScope(); var jm = new WebApiCallBack(); var orderService = container.ServiceProvider.GetService(); - var stockServices = container.ServiceProvider.GetService(); - //获取订单详情 var dInfoResult = await orderService.GetOrderShipInfo(orderId); if (!dInfoResult.status) @@ -287,7 +288,7 @@ namespace CoreCms.Net.Services billDelivery.status = (int)GlobalEnumVars.BillDeliveryStatus.Already; billDelivery.memo = memo; billDelivery.createTime = DateTime.Now; - + billDelivery.thirdPartylogiCode = deliveryCompanyId; //设置发货明细 var bdRel = new List(); @@ -315,6 +316,7 @@ namespace CoreCms.Net.Services //构建发货单明细 var bdItem = new CoreCmsBillDeliveryItem(); bdItem.deliveryId = billDelivery.deliveryId; + bdItem.orderId = orderItem.orderId; bdItem.productId = orderItem.productId; bdItem.goodsId = orderItem.goodsId; bdItem.bn = orderItem.bn; @@ -322,7 +324,7 @@ namespace CoreCms.Net.Services bdItem.weight = orderItem.weight; bdItem.name = orderItem.name; bdItem.addon = !string.IsNullOrEmpty(orderItem.addon) ? orderItem.addon : ""; - bdItem.nums = item.Value; + bdItem.nums = orderItem.nums; bdRel.Add(bdItem); } if (tNum < 1) @@ -342,16 +344,8 @@ namespace CoreCms.Net.Services //订单更新发货状态,发送各种消息 await OrderShip(orderInfo, items, billDelivery, storeId); - var stock = new CoreCmsStock - { - manager = 0, - id = billDelivery.deliveryId, - createTime = DateTime.Now, - type = (int)GlobalEnumVars.StockType.DeliverGoods, - memo = "订单发货操作,发货单号:" + billDelivery.deliveryId - }; - - await stockServices.InsertAsync(stock); + //发货同步处理 + await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.TransactionComponentOrderShipSync, billDelivery.deliveryId); jm.status = true; jm.msg = "发货成功"; diff --git a/CoreCms.Net.Services/CoreCms.Net.Services.csproj b/CoreCms.Net.Services/CoreCms.Net.Services.csproj index 4e47b103..b511cb0b 100644 --- a/CoreCms.Net.Services/CoreCms.Net.Services.csproj +++ b/CoreCms.Net.Services/CoreCms.Net.Services.csproj @@ -7,13 +7,13 @@ - + - + diff --git a/CoreCms.Net.Services/Order/CoreCmsOrderServices.cs b/CoreCms.Net.Services/Order/CoreCmsOrderServices.cs index 0c1d22d8..6d5cd882 100644 --- a/CoreCms.Net.Services/Order/CoreCmsOrderServices.cs +++ b/CoreCms.Net.Services/Order/CoreCmsOrderServices.cs @@ -25,13 +25,11 @@ using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.FromBody; using CoreCms.Net.Model.ViewModels.Basics; -using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Model.ViewModels.DTO; +using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using Microsoft.AspNetCore.Http; -using Microsoft.Net.Http.Headers; -using Microsoft.OpenApi.Validations; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; @@ -75,6 +73,11 @@ namespace CoreCms.Net.Services private readonly ISysTaskLogServices _taskLogServices; private readonly ICoreCmsPromotionRecordServices _promotionRecordServices; private readonly IRedisOperationRepository _redisOperationRepository; + private readonly ICoreCmsUserWeChatInfoServices _userWeChatInfoServices; + private readonly IWeChatTransactionComponentOrderServices _tcOrderServices; + + + public CoreCmsOrderServices(ICoreCmsOrderRepository dal , IHttpContextAccessor httpContextAccessor @@ -100,7 +103,7 @@ namespace CoreCms.Net.Services , ICoreCmsPaymentsServices paymentsServices , ICoreCmsBillRefundServices billRefundServices , ICoreCmsBillLadingServices billLadingServices - , ICoreCmsBillReshipServices billReshipServices, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsGoodsCommentServices goodsCommentServices, ISysTaskLogServices taskLogServices, ICoreCmsPromotionRecordServices promotionRecordServices, IRedisOperationRepository redisOperationRepository) + , ICoreCmsBillReshipServices billReshipServices, ICoreCmsMessageCenterServices messageCenterServices, ICoreCmsGoodsCommentServices goodsCommentServices, ISysTaskLogServices taskLogServices, ICoreCmsPromotionRecordServices promotionRecordServices, IRedisOperationRepository redisOperationRepository, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, IWeChatTransactionComponentOrderServices tcOrderServices) { this._dal = dal; base.BaseDal = dal; @@ -134,6 +137,8 @@ namespace CoreCms.Net.Services _taskLogServices = taskLogServices; _promotionRecordServices = promotionRecordServices; _redisOperationRepository = redisOperationRepository; + _userWeChatInfoServices = userWeChatInfoServices; + _tcOrderServices = tcOrderServices; } @@ -246,6 +251,7 @@ namespace CoreCms.Net.Services order.status = (int)GlobalEnumVars.OrderStatus.Normal; order.confirmStatus = (int)GlobalEnumVars.OrderConfirmStatus.ReceiptNotConfirmed; order.createTime = DateTime.Now; + order.scene = scene; //开始事务处理 await _dal.InsertAsync(order); @@ -820,7 +826,7 @@ namespace CoreCms.Net.Services if (item.status == (int)GlobalEnumVars.BillAftersalesStatus.WaitAudit) break; } } - //把退款金额和退货商品查出来 + //把退款金额和退货商品查出来判断是否能进行售后 AfterSalesVal(order, aftersaleLevel); //促销信息 if (!string.IsNullOrEmpty(order.promotionList)) @@ -830,7 +836,7 @@ namespace CoreCms.Net.Services //发票信息 var invoiceModel = await _invoiceServices.GetOrderInvoiceInfo(order.orderId); - if (invoiceModel != null && invoiceModel.status) + if (invoiceModel is { status: true }) { order.invoice = invoiceModel.data; } @@ -844,6 +850,9 @@ namespace CoreCms.Net.Services }; } + order.tcOrder = await _tcOrderServices.QueryByClauseAsync(p => p.outOrderId == order.orderId); + + jm.status = true; jm.data = order; jm.msg = GlobalConstVars.GetDataSuccess; @@ -853,9 +862,9 @@ namespace CoreCms.Net.Services #endregion - #region 把退款的金额和退货的商品数量保存起来 + #region 把退款金额和退货商品查出来判断是否能进行售后 /// - /// 把退款的金额和退货的商品数量保存起来 + /// 把退款金额和退货商品查出来判断是否能进行售后 /// /// /// 取售后单的时候,售后单的等级,0:待审核的和审核通过的售后单,1未审核的,2审核通过的 @@ -863,7 +872,7 @@ namespace CoreCms.Net.Services { var addAftersalesStatus = false; var res = _billAftersalesServices.OrderToAftersales(order.orderId, aftersaleLevel); - var resData = res.data as OrderToAftersalesDto; + var resData = res.data as OrderToAfterSalesDto; //已经退过款的金额 order.refunded = resData.refundMoney; //算退货商品数量 @@ -1126,7 +1135,7 @@ namespace CoreCms.Net.Services /// 商家获取订单列表-微信小程序 /// /// - public async Task GetOrderPageByMerchant(string dateType, string[] date, int status = 0, int storeId = 0, int page = 1, int limit = 5) + public async Task GetOrderPageByMerchant(string dateType, string[] date, int status = 0, int receiptType = 0, int storeId = 0, int page = 1, int limit = 5) { var jm = new WebApiCallBack { status = true }; @@ -1139,6 +1148,12 @@ namespace CoreCms.Net.Services where = where.And(p => p.storeId == storeId); } + if (receiptType > 0) + { + where = where.And(p => p.receiptType == receiptType); + + } + DateTime dt = DateTime.Now; if (dateType == "today") @@ -1171,6 +1186,7 @@ namespace CoreCms.Net.Services //本月第一天时间 DateTime dtFirst = dt.AddDays(1 - (dt.Day)); dtFirst = new DateTime(dtFirst.Year, dtFirst.Month, dtFirst.Day, 0, 0, 0); + //获得某年某月的天数 int dayCount = DateTime.DaysInMonth(dt.Date.Year, dt.Date.Month); //本月最后一天时间 @@ -1231,7 +1247,6 @@ namespace CoreCms.Net.Services #endregion - #region 商家获取订单列表通过检索手机号码和订单号-微信小程序 /// /// 商家获取订单列表通过检索手机号码和订单号-微信小程序 @@ -1296,6 +1311,7 @@ namespace CoreCms.Net.Services #endregion + #region 订单支付 /// @@ -1329,15 +1345,14 @@ namespace CoreCms.Net.Services order.paymentCode = paymentCode; order.payStatus = (int)GlobalEnumVars.OrderPayStatus.Yes; - var isUpdate = await _dal.UpdateAsync( - p => new CoreCmsOrder() - { - paymentCode = paymentCode, - payStatus = (int)GlobalEnumVars.OrderPayStatus.Yes, - paymentTime = order.paymentTime, - payedAmount = order.orderAmount, - updateTime = order.updateTime - }, p => p.orderId == order.orderId); + var isUpdate = await _dal.UpdateAsync(p => new CoreCmsOrder() + { + paymentCode = paymentCode, + payStatus = (int)GlobalEnumVars.OrderPayStatus.Yes, + paymentTime = order.paymentTime, + payedAmount = order.orderAmount, + updateTime = order.updateTime + }, p => p.orderId == order.orderId); jm.data = isUpdate; if (isUpdate) @@ -1723,6 +1738,7 @@ namespace CoreCms.Net.Services } #endregion + #region 构建单个需要发货的数据,和发货单密切关联 /// /// 构建单个需要发货的数据,和发货单密切关联 @@ -1772,7 +1788,6 @@ namespace CoreCms.Net.Services } AfterSalesVal(orderInfo, 0); - if (!jm.status) { return jm; @@ -1885,7 +1900,7 @@ namespace CoreCms.Net.Services Dictionary items, string shipName, string shipMobile, string shipAddress, string memo, int storeId = 0, int shipAreaId = 0, string deliveryCompanyId = "") { - var result = await _billDeliveryServices.BatchShip(ids, logiCode, logiNo, items, storeId, shipName, shipMobile, shipAreaId, shipAddress, memo); + var result = await _billDeliveryServices.BatchShip(ids, logiCode, logiNo, items, storeId, shipName, shipMobile, shipAreaId, shipAddress, memo, deliveryCompanyId); return result; } @@ -1911,14 +1926,12 @@ namespace CoreCms.Net.Services public async Task Ship(string orderId, string logiCode, string logiNo, Dictionary items, string shipName, string shipMobile, string shipAddress, string memo, int storeId = 0, int shipAreaId = 0, string deliveryCompanyId = "") { - var result = await _billDeliveryServices.Ship(orderId, logiCode, logiNo, items, storeId, shipName, shipMobile, shipAreaId, shipAddress, memo); + var result = await _billDeliveryServices.Ship(orderId, logiCode, logiNo, items, storeId, shipName, shipMobile, shipAreaId, shipAddress, memo, deliveryCompanyId); return result; } #endregion - - #region 完成订单 /// @@ -1991,6 +2004,10 @@ namespace CoreCms.Net.Services //订单完成结算订单 await _redisOperationRepository.SortedSetAddAsync(RedisMessageQueueKey.OrderFinishCommand, orderInfo.orderId, score); + // 微信自定义交易组件-订单确认收货 + await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.TransactionComponentOrderDeliveryRecieveSync, JsonConvert.SerializeObject(orderInfo)); + + jm.status = true; jm.msg = "订单完成"; @@ -2026,12 +2043,19 @@ namespace CoreCms.Net.Services where = where.And(p => p.status == (int)GlobalEnumVars.OrderStatus.Normal); where = where.And(p => p.confirmStatus != (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt); + var orderInfo = await _dal.QueryByClauseAsync(where); + if (orderInfo == null) + { + jm.status = false; + jm.msg = "订单查询失败"; + } + var bl = await _dal.UpdateAsync( p => new CoreCmsOrder() { confirmStatus = (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt, confirmTime = DateTime.Now - }, where); + }, p => p.orderId == orderInfo.orderId); if (!bl) { jm.msg = "确认收货失败"; @@ -2050,6 +2074,10 @@ namespace CoreCms.Net.Services }; await _orderLogServices.InsertAsync(orderLog); + + // 微信自定义交易组件-订单确认收货 + await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.TransactionComponentOrderDeliveryRecieveSync, JsonConvert.SerializeObject(orderInfo)); + jm.status = true; jm.msg = "确认收货成功"; @@ -2096,6 +2124,7 @@ namespace CoreCms.Net.Services } #endregion + #region 重写根据条件列表数据 /// /// 重写根据条件列表数据 diff --git a/CoreCms.Net.Services/Pay/WeChatPayServices.cs b/CoreCms.Net.Services/Pay/WeChatPayServices.cs index f503fa03..24a96dd4 100644 --- a/CoreCms.Net.Services/Pay/WeChatPayServices.cs +++ b/CoreCms.Net.Services/Pay/WeChatPayServices.cs @@ -151,6 +151,7 @@ namespace CoreCms.Net.Services if (payment != null) { var is_matched = 0; + var sceneResponse = new ShopSceneCheckResponse(); #region 校验是否微信自定义交易组件 var orderModel = await orderServices.QueryByClauseAsync(p => p.orderId == payment.sourceId); var orderInfo = new OrderInfo(); @@ -165,9 +166,10 @@ namespace CoreCms.Net.Services sceneRequest.AccessToken = accessToken; sceneRequest.Scene = orderModel.scene; - var sceneResponse = await client.ExecuteShopSceneCheckAsync(sceneRequest); + sceneResponse = await client.ExecuteShopSceneCheckAsync(sceneRequest); is_matched = sceneResponse.IsMatched ? 1 : 0; - if (sceneResponse.IsSuccessful() && sceneResponse.IsMatched == true) + //if (sceneResponse.IsSuccessful() && sceneResponse.IsMatched == true) + if (sceneResponse.IsSuccessful()) { //基础 orderInfo.create_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); @@ -246,6 +248,8 @@ namespace CoreCms.Net.Services }); } + + var tcOrder = await weChatTransactionComponentOrderServices.QueryByClauseAsync(p => p.outOrderId == orderModel.orderId); if (tcOrder == null) { @@ -267,7 +271,8 @@ namespace CoreCms.Net.Services orderInfo, checkSceneResult = new { - is_matched + is_matched, + sceneResponse } }; diff --git a/CoreCms.Net.Services/Shop/CoreCmsPagesServices.cs b/CoreCms.Net.Services/Shop/CoreCmsPagesServices.cs index c102bbb4..883bbfb5 100644 --- a/CoreCms.Net.Services/Shop/CoreCmsPagesServices.cs +++ b/CoreCms.Net.Services/Shop/CoreCmsPagesServices.cs @@ -156,7 +156,6 @@ namespace CoreCms.Net.Services item.parameters = item.parameters.Replace("/images/empty-banner.png", "/static/images/common/empty-banner.png"); - if (item.widgetCode == "search") //搜索 { dto.parameters = (JObject)JsonConvert.DeserializeObject(item.parameters); @@ -280,6 +279,7 @@ namespace CoreCms.Net.Services { var list = JArray.Parse(parameters["list"].ToString()); var newList = new JArray(); + var count = 0; foreach (var jToken in list) { var child = (JObject)jToken; @@ -373,6 +373,7 @@ namespace CoreCms.Net.Services child.Add("list", new JArray()); } } + count++; newList.Add(child); } @@ -384,7 +385,6 @@ namespace CoreCms.Net.Services } dto.parameters = parameters; } - else if (item.widgetCode == "goods") { JObject parameters = (JObject)JsonConvert.DeserializeObject(item.parameters); @@ -437,7 +437,7 @@ namespace CoreCms.Net.Services else { var orderBy = string.Empty; - var goodidsStr = string.Empty; + string goodidsStr; if (parameters != null && parameters.ContainsKey("list")) { JArray result = JArray.Parse(parameters["list"].ToString()); @@ -533,10 +533,10 @@ namespace CoreCms.Net.Services var promotionId = ((JObject)ss)["id"].ObjectToInt(0); if (promotionId > 0) { - var promotionModel = await _promotionServices.QueryByClauseAsync(p => p.id == promotionId && p.isEnable == true && p.startTime <= dt && p.endTime > dt); + var promotionModel = await _promotionServices.QueryByClauseAsync(p => p.id == promotionId && p.isEnable == true && p.startTime <= dt && p.endTime > dt, true); if (promotionModel != null) { - var condition = await _promotionConditionServices.QueryByClauseAsync(p => p.promotionId == promotionId); + var condition = await _promotionConditionServices.QueryByClauseAsync(p => p.promotionId == promotionId, true); if (condition != null) { var obj = (JObject)JsonConvert.DeserializeObject(condition.parameters); diff --git a/CoreCms.Net.Uni-App/CoreShop/components/coreshop-page/coreshop-imgSlide.vue b/CoreCms.Net.Uni-App/CoreShop/components/coreshop-page/coreshop-imgSlide.vue index 8224794d..aedd36a6 100644 --- a/CoreCms.Net.Uni-App/CoreShop/components/coreshop-page/coreshop-imgSlide.vue +++ b/CoreCms.Net.Uni-App/CoreShop/components/coreshop-page/coreshop-imgSlide.vue @@ -1,6 +1,6 @@ @@ -16,6 +16,8 @@ data() { return { swiperItems: [], + swiperHeight: 130, + swiperDuration: 2500, }; }, computed: { @@ -37,6 +39,8 @@ } this.swiperItems.push(moder); } + this.swiperHeight = this.coreshopdata.parameters.height; + this.swiperDuration = this.coreshopdata.parameters.duration; }, watch: {}, methods: { diff --git a/CoreCms.Net.Uni-App/CoreShop/components/coreshop-payments/coreshop-paymentsByWx.vue b/CoreCms.Net.Uni-App/CoreShop/components/coreshop-payments/coreshop-paymentsByWx.vue index 527a5b57..0b93563b 100644 --- a/CoreCms.Net.Uni-App/CoreShop/components/coreshop-payments/coreshop-paymentsByWx.vue +++ b/CoreCms.Net.Uni-App/CoreShop/components/coreshop-payments/coreshop-paymentsByWx.vue @@ -128,7 +128,8 @@ case 'wechatpay': this.$u.api.pay(data).then(res => { if (res.status) { - if (res.otherData.checkSceneResult && res.otherData.checkSceneResult.is_matched == 1) { + if (res.otherData.checkSceneResult) { + console.log("自定义交易组件"); wx.requestOrderPayment({ timeStamp: res.data.timeStamp, nonceStr: res.data.nonceStr, diff --git a/CoreCms.Net.Uni-App/CoreShop/components/coreshop-share-wx/coreshop-share-wx.vue b/CoreCms.Net.Uni-App/CoreShop/components/coreshop-share-wx/coreshop-share-wx.vue index afdfada5..08da4e3e 100644 --- a/CoreCms.Net.Uni-App/CoreShop/components/coreshop-share-wx/coreshop-share-wx.vue +++ b/CoreCms.Net.Uni-App/CoreShop/components/coreshop-share-wx/coreshop-share-wx.vue @@ -13,7 +13,7 @@ - + diff --git a/CoreCms.Net.Uni-App/CoreShop/pages/serviceGoods/index/index.vue b/CoreCms.Net.Uni-App/CoreShop/pages/serviceGoods/index/index.vue index 91816e34..36afb773 100644 --- a/CoreCms.Net.Uni-App/CoreShop/pages/serviceGoods/index/index.vue +++ b/CoreCms.Net.Uni-App/CoreShop/pages/serviceGoods/index/index.vue @@ -27,7 +27,9 @@ - + + + {{item.title}} {{item.description}} diff --git a/CoreCms.Net.Uni-App/CoreShop/static/style/corePage.scss b/CoreCms.Net.Uni-App/CoreShop/static/style/corePage.scss index 49a3bb8b..ee4b510a 100644 --- a/CoreCms.Net.Uni-App/CoreShop/static/style/corePage.scss +++ b/CoreCms.Net.Uni-App/CoreShop/static/style/corePage.scss @@ -65,12 +65,15 @@ /*分享浮层*/ -.coreshop-share-Box { width: 100%; height: 120px; background: #FFFFFF; } -.coreshop-share-pop { height: 120px; width: 100%; display: flex; } +.coreshop-share-Box { width: 100%; background: #FFFFFF; } +.coreshop-share-pop { width: 100%; display: flex; } .coreshop-share-item { flex: 1; text-align: center; font-size: 13px; color: #333; padding: 10px 0; image { width: 40px; height: 40px; margin: 10px; } .coreshop-btn { line-height: 1; display: block; font-size: 13px; background-color: #fff; } } +.coreshop-share-bottomBox { background-color: #fff; height: 45px; width: 100%; display: flex; box-shadow: 0 0 10px #ccc; + .coreshop-btn { flex: 1; } +} //顶部通用标题 .coreshop-bar-view-box { position: fixed; top: 0; width: 100%; z-index: 10000; background: #FAFAFA; /* #ifndef MP */ height: calc(var(--status-bar-height) + 50px); /* #endif */ /* #ifdef MP */ height: calc(var(--status-bar-height) + 65px); /* #endif */ padding: var(--status-bar-height) 14px 0 14px; align-items: center; @@ -156,8 +159,7 @@ .orderWrap { display: flex; flex-direction: column; height: calc(100vh - var(--window-top)); width: 100%; } .orderList { background-color: #ffffff; margin: 10px; border-radius: 10px; box-sizing: border-box; padding: 10px; font-size: 14px; .item { display: flex; margin: 10px 0 0; - .left { margin-right: 10px; - } + .left { margin-right: 10px; } .content { .title { font-size: 14px; line-height: 25px; } .type { margin: 5px 0; font-size: 12px; color: $core-tips-color; } @@ -632,4 +634,4 @@ -.contact-btn { margin: 0 auto; } \ No newline at end of file +.contact-btn { margin: 0 auto; } diff --git a/CoreCms.Net.WeChat.Service/Configuration/EventType.cs b/CoreCms.Net.WeChat.Service/Configuration/EventType.cs index 8f023f57..629d982c 100644 --- a/CoreCms.Net.WeChat.Service/Configuration/EventType.cs +++ b/CoreCms.Net.WeChat.Service/Configuration/EventType.cs @@ -55,8 +55,15 @@ namespace CoreCms.Net.WeChat.Service.Configuration #endregion #region 自定义交易组件 + /// + /// 商品审核结果回调 + /// + public const string OpenProductSpuAudit = "open_product_spu_audit"; + /// + /// 类目审核结果回调 + /// + public const string OpenProductCategoryAudit = "open_product_category_audit"; - #endregion diff --git a/CoreCms.Net.Web.Admin/Controllers/Com/ToolsController.cs b/CoreCms.Net.Web.Admin/Controllers/Com/ToolsController.cs index e389bf96..26ce11e6 100644 --- a/CoreCms.Net.Web.Admin/Controllers/Com/ToolsController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/Com/ToolsController.cs @@ -26,10 +26,9 @@ using CoreCms.Net.IServices; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.FromBody; -using CoreCms.Net.Model.ViewModels.Echarts; -using CoreCms.Net.Model.ViewModels.Options; -using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Model.ViewModels.DTO; +using CoreCms.Net.Model.ViewModels.Echarts; +using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using CoreCms.Net.WeChat.Service.HttpClients; @@ -38,7 +37,6 @@ using COSXML.Auth; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; using Newtonsoft.Json; using SKIT.FlurlHttpClient.Wechat.Api; using SKIT.FlurlHttpClient.Wechat.Api.Models; @@ -56,7 +54,6 @@ namespace CoreCms.Net.Web.Admin.Controllers public class ToolsController : ControllerBase { private readonly ICoreCmsAreaServices _areaServices; - private readonly ICodeGeneratorServices _codeGeneratorServices; private readonly ICoreCmsArticleServices _coreCmsArticleServices; private readonly ICoreCmsArticleTypeServices _coreCmsArticleTypeServices; private readonly ICoreCmsFormServices _coreCmsFormServices; @@ -89,9 +86,7 @@ namespace CoreCms.Net.Web.Admin.Controllers - private readonly WeChat.Service.HttpClients.IWeChatApiHttpClientFactory _weChatApiHttpClientFactory; - - + private readonly IWeChatApiHttpClientFactory _weChatApiHttpClientFactory; /// /// 构造函数 @@ -112,8 +107,9 @@ namespace CoreCms.Net.Web.Admin.Controllers , ISysRoleServices sysRoleServices , ISysMenuServices sysMenuServices , ISysUserRoleServices sysUserRoleServices - , ISysOrganizationServices sysOrganizationServices, ICodeGeneratorServices codeGeneratorServices, - ICoreCmsLogisticsServices logisticsServices, ISysLoginRecordServices sysLoginRecordServices, ISysNLogRecordsServices sysNLogRecordsServices, ICoreCmsBillPaymentsServices paymentsServices, ICoreCmsBillDeliveryServices billDeliveryServices, ICoreCmsUserServices userServices, ICoreCmsOrderServices orderServices, ICoreCmsBillAftersalesServices aftersalesServices, ICoreCmsSettingServices settingServices, ICoreCmsProductsServices productsServices, ICoreCmsServicesServices servicesServices, IOptions filesStorageOptions, ISysRoleMenuServices sysRoleMenuServices, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsPagesServices pagesServices, IToolsServices toolsServices) + , ISysOrganizationServices sysOrganizationServices, + ICoreCmsLogisticsServices logisticsServices, ISysLoginRecordServices sysLoginRecordServices, ISysNLogRecordsServices sysNLogRecordsServices, ICoreCmsBillPaymentsServices paymentsServices, ICoreCmsBillDeliveryServices billDeliveryServices, ICoreCmsUserServices userServices, ICoreCmsOrderServices orderServices, ICoreCmsBillAftersalesServices aftersalesServices, ICoreCmsSettingServices settingServices, ICoreCmsProductsServices productsServices, ICoreCmsServicesServices servicesServices, ISysRoleMenuServices sysRoleMenuServices + , IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsPagesServices pagesServices, IToolsServices toolsServices) { _user = user; _webHostEnvironment = webHostEnvironment; @@ -132,7 +128,6 @@ namespace CoreCms.Net.Web.Admin.Controllers _sysMenuServices = sysMenuServices; _sysUserRoleServices = sysUserRoleServices; _sysOrganizationServices = sysOrganizationServices; - _codeGeneratorServices = codeGeneratorServices; _logisticsServices = logisticsServices; _sysLoginRecordServices = sysLoginRecordServices; _sysNLogRecordsServices = sysNLogRecordsServices; @@ -145,6 +140,7 @@ namespace CoreCms.Net.Web.Admin.Controllers _productsServices = productsServices; _servicesServices = servicesServices; _sysRoleMenuServices = sysRoleMenuServices; + _weChatApiHttpClientFactory = weChatApiHttpClientFactory; _pagesServices = pagesServices; _toolsServices = toolsServices; @@ -264,6 +260,7 @@ namespace CoreCms.Net.Web.Admin.Controllers return jm; } + if (entity.password == entity.oldPassword) { jm.msg = "请设置与旧密码不同的新密码"; @@ -619,7 +616,6 @@ namespace CoreCms.Net.Web.Admin.Controllers if (filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.LocalStorage.ToString()) { url = _toolsServices.UpLoadBase64ForLocalStorage(filesStorageOptions, memStream); - } else if (filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.AliYunOSS.ToString()) { @@ -776,7 +772,7 @@ namespace CoreCms.Net.Web.Admin.Controllers var newObj = list.Select(p => new { p.id, - image = !string.IsNullOrEmpty(p.images) ? p.images.Split(",")[0] : "/static/images/common/empty.png", + p.image, p.images, p.price, p.name, @@ -830,6 +826,7 @@ namespace CoreCms.Net.Web.Admin.Controllers #endregion + #region 根据商品序列获取货品数据==================================================== // POST: Api/Tools/GetProducts @@ -891,6 +888,7 @@ namespace CoreCms.Net.Web.Admin.Controllers #endregion + #region 获取文章列表============================================================ // POST: Api/Tools/GetArticles @@ -912,8 +910,7 @@ namespace CoreCms.Net.Web.Admin.Controllers if (!string.IsNullOrEmpty(title)) where = where.And(p => p.title.Contains(title)); //获取数据 - var list = await _coreCmsArticleServices.QueryPageAsync(where, p => p.id, OrderByType.Asc, pageCurrent, - pageSize); + var list = await _coreCmsArticleServices.QueryPageAsync(where, p => p.id, OrderByType.Asc, pageCurrent, pageSize); //返回数据 jm.data = list; jm.code = 0; @@ -1221,6 +1218,7 @@ namespace CoreCms.Net.Web.Admin.Controllers } } + jm = await _logisticsServices.ExpressPoll(entity.code, entity.no, entity.mobile); return jm; @@ -1251,12 +1249,7 @@ namespace CoreCms.Net.Web.Admin.Controllers var menuIds = sysRoleMenu.Select(p => p.menuId).ToList(); - - var where = PredicateBuilder.True(); - where = where.And(p => p.deleted == false && p.hide == false && p.menuType == 0); - where = where.And(p => menuIds.Contains(p.id)); - - var navs = await _sysMenuServices.QueryListByClauseAsync(where, p => p.sortNumber, OrderByType.Asc); + var navs = await _sysMenuServices.QueryListByClauseAsync(p => menuIds.Contains(p.id) && p.deleted == false && p.hide == false && p.menuType == 0, p => p.sortNumber, OrderByType.Asc); var menus = GetMenus(navs, 0); jm.data = menus; @@ -1519,8 +1512,8 @@ namespace CoreCms.Net.Web.Admin.Controllers var series = new List { - new SeriesDataIntItem() {name = "新增记录", type = "line", data = regs.Select(p => p.nums).ToList()}, - new SeriesDataIntItem() {name = "活跃记录", type = "line", data = orders.Select(p => p.nums).ToList()} + new() {name = "新增记录", type = "line", data = regs.Select(p => p.nums).ToList()}, + new() {name = "活跃记录", type = "line", data = orders.Select(p => p.nums).ToList()} }; @@ -1581,12 +1574,13 @@ namespace CoreCms.Net.Web.Admin.Controllers goodsStaticsTotalWarn }; + + return jm; } #endregion - //微信自定义交易组件================================================================ #region 自定义交易组件上传图片==================================================== @@ -1717,5 +1711,163 @@ namespace CoreCms.Net.Web.Admin.Controllers #endregion + #region 自定义交易组件上传图片(Url交换)==================================================== + + /// + /// 自定义交易组件上传图片(Url交换) + /// + /// + [HttpPost] + public async Task MiNiShopOpenComponent2_UploadImgByUrl([FromBody] FMStringId entity) + { + var jm = new AdminUiCallBack(); + + var filesStorageOptions = await _coreCmsSettingServices.GetFilesStorageOptions(); + + if (string.IsNullOrEmpty(entity.id)) + { + jm.msg = "请提交合法图片地址"; + return jm; + } + + var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); + var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); + var request = new ShopImageUploadRequest(); + request.AccessToken = accessToken; + request.ImageUrl = entity.id; + request.ResponseType = 1; + + var response = await client.ExecuteShopImageUploadAsync(request); + if (response.IsSuccessful()) + { + jm.code = 0; + jm.msg = "上传成功!"; + jm.data = new + { + fileUrl = response.Image.TempImageUrl, + src = response.Image.TempImageUrl + }; + } + else + { + jm.code = 1; + jm.msg = response.ErrorMessage; + } + jm.otherData = response; + + return jm; + } + + #endregion + + #region 自定义交易组件上传图片(Url交换)==================================================== + + /// + /// 自定义交易组件上传图片(Url交换) + /// + /// + [HttpPost] + public async Task MiNiShopOpenComponent2_UploadImgByUrlArr([FromBody] FMArrayStringIds entity) + { + var jm = new AdminUiCallBack(); + + var filesStorageOptions = await _coreCmsSettingServices.GetFilesStorageOptions(); + + if (entity.id.Length <= 0) + { + jm.msg = "请提交合法图片地址"; + return jm; + } + + var urlArr = new String[] { "store.mp.video.tencent-cloud.com", "mmbizurl.cn", "mmecimage.cn" }; + + var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); + var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); + + for (var index = 0; index < entity.id.Length; index++) + { + var img = entity.id[index]; + if (img.Contains(urlArr[0]) || img.Contains(urlArr[1]) || img.Contains(urlArr[2])) + { + continue; + } + else + { + var request = new ShopImageUploadRequest(); + request.AccessToken = accessToken; + request.ImageUrl = img; + request.ResponseType = 1; + + var response = await client.ExecuteShopImageUploadAsync(request); + if (response.IsSuccessful()) + { + entity.id[index] = response.Image.TempImageUrl; + } + } + } + + jm.code = 0; + jm.msg = "同步成功"; + jm.data = entity.id; + + return jm; + } + + #endregion + + #region 自定义交易组件上传图片(Url交换单张)==================================================== + + /// + /// 自定义交易组件上传图片(Url交换单张) + /// + /// + [HttpPost] + public async Task MiNiShopOpenComponent2_UploadImgByUrlSingle([FromBody] FMStringId entity) + { + var jm = new AdminUiCallBack(); + + var filesStorageOptions = await _coreCmsSettingServices.GetFilesStorageOptions(); + + if (string.IsNullOrEmpty(entity.id)) + { + jm.msg = "请提交合法图片地址"; + return jm; + } + + var urlArr = new String[] { "store.mp.video.tencent-cloud.com", "mmbizurl.cn", "mmecimage.cn" }; + + var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken(); + var client = _weChatApiHttpClientFactory.CreateWxOpenClient(); + + if (entity.id.Contains(urlArr[0]) || entity.id.Contains(urlArr[1]) || entity.id.Contains(urlArr[2])) + { + jm.msg = "合法图片,无需同步"; + return jm; + } + else + { + var request = new ShopImageUploadRequest(); + request.AccessToken = accessToken; + request.ImageUrl = entity.id; + request.ResponseType = 1; + + var response = await client.ExecuteShopImageUploadAsync(request); + if (response.IsSuccessful()) + { + jm.code = 0; + jm.msg = "同步成功"; + jm.data = response.Image.TempImageUrl; + } + else + { + jm.code = 1; + jm.msg = "同步失败" + response.ErrorMessage; + } + } + + return jm; + } + + #endregion } } \ No newline at end of file diff --git a/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs b/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs index ca5e783e..bf632aa7 100644 --- a/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/Order/CoreCmsOrderController.cs @@ -19,6 +19,7 @@ using CoreCms.Net.Caching.AutoMate.RedisCache; using CoreCms.Net.Configuration; using CoreCms.Net.Filter; using CoreCms.Net.IServices; +using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.FromBody; @@ -31,6 +32,7 @@ using CoreCms.Net.WeChat.Service.TransactionComponent.Enum; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; using NPOI.HSSF.UserModel; using NPOI.SS.Util; using SKIT.FlurlHttpClient.Wechat.Api; @@ -1221,7 +1223,7 @@ namespace CoreCms.Net.Web.Admin.Controllers //订单状态 int - var orderUnifiedStatus = Request.Form["orderUnifiedStatus"].FirstOrDefault().ObjectToInt(0); + var orderUnifiedStatus = ObjectExtensions.ObjectToInt(Request.Form["orderUnifiedStatus"].FirstOrDefault(), 0); if (orderUnifiedStatus > 0) { if (orderUnifiedStatus == (int)GlobalEnumVars.OrderCountType.payment) @@ -1776,6 +1778,29 @@ namespace CoreCms.Net.Web.Admin.Controllers p => p.id == tcOrder.id && p.outOrderId == tcOrder.outOrderId); } + if (response.Order is { OrderId: > 0 } && (response.Order.Status == 11 || response.Order.Status == 10) && (orderModel.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes || orderModel.payStatus == (int)GlobalEnumVars.OrderPayStatus.PartialYes)) + { + var payment = await _billPaymentsServices.QueryByClauseAsync(p => + p.sourceId == orderModel.orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed); + if (payment != null) + { + var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.userId == orderModel.userId); + //获取同步地址接口地址 + var refreshRequest = new ShopOrderPayRequest(); + refreshRequest.AccessToken = accessToken; + refreshRequest.OutOrderId = orderModel.orderId; + refreshRequest.OpenId = userInfo.openid; + refreshRequest.ActionType = 1; + refreshRequest.TransactionId = payment.tradeNo; + refreshRequest.PayTime = payment.createTime; + + var refreshResponse = await client.ExecuteShopOrderPayAsync(refreshRequest); + NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "自定义交易组件-手动同步", JsonConvert.SerializeObject(refreshResponse)); + } + + + } + return jm; } diff --git a/CoreCms.Net.Web.Admin/Controllers/WeChat/WeChatTransactionComponentGoodController.cs b/CoreCms.Net.Web.Admin/Controllers/WeChat/WeChatTransactionComponentGoodController.cs index 5ddd02de..820303f5 100644 --- a/CoreCms.Net.Web.Admin/Controllers/WeChat/WeChatTransactionComponentGoodController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/WeChat/WeChatTransactionComponentGoodController.cs @@ -429,8 +429,8 @@ namespace CoreCms.Net.Web.Admin.Controllers item.OutProductId = p.outProductId; item.OutSKUId = p.outSkuId; item.ThumbnailUrl = p.thumbImg; - item.SalePrice = p.salePrice * 100; - item.MarketPrice = p.marketPrice * 100; + item.SalePrice = Convert.ToInt32(p.salePrice * 100); + item.MarketPrice = Convert.ToInt32(p.marketPrice * 100); item.Stock = p.stockNum; item.BarCode = p.barCode; item.SKUCode = p.skuCode; @@ -536,8 +536,8 @@ namespace CoreCms.Net.Web.Admin.Controllers item.OutProductId = p.outProductId; item.OutSKUId = p.outSkuId; item.ThumbnailUrl = p.thumbImg; - item.SalePrice = p.salePrice * 100; - item.MarketPrice = p.marketPrice * 100; + item.SalePrice = Convert.ToInt32(p.salePrice * 100); + item.MarketPrice = Convert.ToInt32(p.marketPrice * 100); item.Stock = p.stockNum; item.BarCode = p.barCode; item.SKUCode = p.skuCode; diff --git a/CoreCms.Net.Web.Admin/CoreCms.Net.Web.Admin.csproj b/CoreCms.Net.Web.Admin/CoreCms.Net.Web.Admin.csproj index 2576ecb2..bdda70e8 100644 --- a/CoreCms.Net.Web.Admin/CoreCms.Net.Web.Admin.csproj +++ b/CoreCms.Net.Web.Admin/CoreCms.Net.Web.Admin.csproj @@ -66,7 +66,7 @@ - + diff --git a/CoreCms.Net.Web.Admin/wwwroot/lib/custom/js/main.js b/CoreCms.Net.Web.Admin/wwwroot/lib/custom/js/main.js index 97d1b7cf..737caf90 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/lib/custom/js/main.js +++ b/CoreCms.Net.Web.Admin/wwwroot/lib/custom/js/main.js @@ -4,6 +4,7 @@ var allWidget = { "name": "图片轮播", "value": { "duration": 2500, + "height": 130, "list": [{ "image": "/static/images/common/empty-banner.png", "linkType": '', diff --git a/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/config.js b/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/config.js index bda9a261..301c5d38 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/config.js +++ b/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/config.js @@ -28,7 +28,7 @@ layui.define(['laytpl', 'layer', 'element', 'util'], function (exports) { //额外增加 , apiUrl: '/' //api请求地址 , fileUrl: '/' //资源请求地址 - , noImagePicUrl: layui.cache.base + 'style/res/noImage.jpg' //api请求地址 + , noImagePicUrl: 'https://files.cdn.coreshop.cn/static/images/empty/noImage.jpg' //api请求地址 //自定义响应字段 , response: { diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/shop/pages/design.html b/CoreCms.Net.Web.Admin/wwwroot/views/shop/pages/design.html index 87a39b12..196570fb 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/shop/pages/design.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/shop/pages/design.html @@ -822,6 +822,13 @@

轮播图自动切换的间隔时间,单位:毫秒

+
+ 高度: +
+ +

默认高度为130px,单位:像素

+
+
  • diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/create.html index cf5aff75..ea3e0d74 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/create.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/create.html @@ -158,11 +158,14 @@ , url: layui.setter.apiUrl + 'Api/Tools/MiNiShopOpenComponent2_UploadImg' , before: function (obj) { obj.preview(function (index, file, result) { - + layer.msg('上传中', { icon: 16, shade: 0.4 }); }); } , done: function (res) { - if (res.code > 0) { return layer.msg('上传失败'); } + layer.closeAll('loading'); //关闭加载层 + if (res.code > 0) { + return layer.msg('上传失败'); + } layer.msg('上传成功'); $('#viewImgBoxlicenseImage').attr('src', res.data.fileUrl); $("#licenseImageInput").val(res.data.fileUrl); @@ -182,11 +185,14 @@ , url: layui.setter.apiUrl + 'Api/Tools/MiNiShopOpenComponent2_UploadImg' , before: function (obj) { obj.preview(function (index, file, result) { - //$('#viewImgBoxlicenseImage').attr('src', result); + layer.msg('上传中', { icon: 16, shade: 0.4 }); }); } , done: function (res) { - if (res.code > 0) { return layer.msg('上传失败'); } + layer.closeAll('loading'); //关闭加载层 + if (res.code > 0) { + return layer.msg('上传失败'); + } layer.msg('上传成功'); imgs.push(res.data.fileUrl); $('#certificateImage').val(imgs); diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/edit.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/edit.html index b1533f4c..ea732483 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/edit.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/edit.html @@ -166,11 +166,14 @@ , url: layui.setter.apiUrl + 'Api/Tools/MiNiShopOpenComponent2_UploadImg' , before: function (obj) { obj.preview(function (index, file, result) { - + layer.msg('上传中', { icon: 16, shade: 0.4 }); }); } , done: function (res) { - if (res.code > 0) { return layer.msg('上传失败'); } + layer.closeAll('loading'); //关闭加载层 + if (res.code > 0) { + return layer.msg('上传失败'); + } layer.msg('上传成功'); $('#viewImgBoxlicenseImage').attr('src', res.data.fileUrl); $("#licenseImageInput").val(res.data.fileUrl); @@ -190,11 +193,14 @@ , url: layui.setter.apiUrl + 'Api/Tools/MiNiShopOpenComponent2_UploadImg' , before: function (obj) { obj.preview(function (index, file, result) { - //$('#viewImgBoxlicenseImage').attr('src', result); + layer.msg('上传中', { icon: 16, shade: 0.4 }); }); } , done: function (res) { - if (res.code > 0) { return layer.msg('上传失败'); } + layer.closeAll('loading'); //关闭加载层 + if (res.code > 0) { + return layer.msg('上传失败'); + } layer.msg('上传成功'); imgs.push(res.data.fileUrl); $('#certificateImage').val(imgs); diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/index.html index 2339e391..64cb4246 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/index.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/auditcategory/index.html @@ -133,12 +133,21 @@ //{ field: 'level3', title: '三级类目', sort: false, width: 105 }, { field: 'level3Name', title: '三级类目名称', sort: false, width: 105 }, { - field: 'certificateImage', title: '资质材料', width: 100, sort: false, + field: 'certificateImage', title: '资质材料', width: 180, sort: false, templet: function (d) { if (d.certificateImage) { - return ''; + var arr = d.certificateImage.split(','); + if (Array.isArray(arr) && arr.length) { + var html = ''; + for (var i = 0; i < arr.length; i++) { + html += ' ' + } + return html; + } else { + return ''; + } } else { - return ''; + return ''; } } }, diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/create.html index 51cad909..c53520b2 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/create.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/create.html @@ -26,13 +26,6 @@ - -
    @@ -58,53 +51,34 @@
    -
    - 图集:[建议数量控制在10张以内]: +
    + +
    +
    + 请保证图集地址域名为:【store.mp.video.tencent-cloud.com】【mmbizurl.cn】【mmecimage.cn/p/】中某个
    -
    -
    -
    -
    +
    +
    -
    货品
    - - - -
    - -
    -
    - -
    @@ -112,18 +86,38 @@ - - - - + \ No newline at end of file diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/edit.html b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/edit.html index e2a392eb..4fdaf9fb 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/edit.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/wechat/transactioncomponent/goods/edit.html @@ -1,8 +1,8 @@ - - - - diff --git a/CoreCms.Net.Web.WebApi/Controllers/CartController.cs b/CoreCms.Net.Web.WebApi/Controllers/CartController.cs index 6a4a93c1..d44236e0 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/CartController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/CartController.cs @@ -17,6 +17,7 @@ using CoreCms.Net.Utility.Helper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; +using CoreCms.Net.Configuration; namespace CoreCms.Net.Web.WebApi.Controllers { @@ -116,7 +117,7 @@ namespace CoreCms.Net.Web.WebApi.Controllers [Authorize] public async Task SetCartNum([FromBody] FMSetCartNum entity) { - var jm = await _cartServices.SetCartNum(entity.id, entity.nums, _user.ID, 2, 1); + var jm = await _cartServices.SetCartNum(entity.id, entity.nums, _user.ID, (int)GlobalEnumVars.CartSetNumType.Set, (int)GlobalEnumVars.OrderType.Common); return jm; } diff --git a/CoreCms.Net.Web.WebApi/Controllers/WeChatOAuth/WxOpenController.cs b/CoreCms.Net.Web.WebApi/Controllers/WeChatOAuth/WxOpenController.cs index b5b51f64..2a22c896 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/WeChatOAuth/WxOpenController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/WeChatOAuth/WxOpenController.cs @@ -47,7 +47,6 @@ namespace CoreCms.Net.Web.WebApi.Controllers.WeChatOAuth private readonly IMediator _mediator; - /// /// 原始的加密请求(如果不加密则为null) /// @@ -123,7 +122,6 @@ namespace CoreCms.Net.Web.WebApi.Controllers.WeChatOAuth postModel.EncodingAESKey = _weChatOptions.WxOpenEncodingAESKey;//根据自己后台的设置保持一致 postModel.AppId = _weChatOptions.WxOpenAppId;//根据自己后台的设置保持一致(必须提供) - var body = Request.Body; //获取流数据转xml流 XDocument postDataDocument = XmlUtility.Convert(Request.GetRequestStream()); @@ -165,7 +163,6 @@ namespace CoreCms.Net.Web.WebApi.Controllers.WeChatOAuth switch (requestType) { - case RequestMsgType.Text: var textMessageEvent = client.DeserializeEventFromXml(msgXml); callBack = await _mediator.Send(new TextMessageEventCommand() { EventObj = textMessageEvent }); @@ -206,6 +203,20 @@ namespace CoreCms.Net.Web.WebApi.Controllers.WeChatOAuth break; + + case EventType.OpenProductSpuAudit: + + var openProductSpuAuditEvent = client.DeserializeEventFromXml(msgXml); + callBack = await _mediator.Send(new OpenProductSPUAuditEventCommand() { EventObj = openProductSpuAuditEvent }); + + break; + case EventType.OpenProductCategoryAudit: + + var openProductCategoryAuditEvent = client.DeserializeEventFromXml(msgXml); + callBack = await _mediator.Send(new OpenProductCategoryAuditEventCommand() { EventObj = openProductCategoryAuditEvent }); + + break; + default: NLogUtil.WriteFileLog(LogLevel.Info, LogType.WxPost, "接收服务器推送(处理xml内容/Event无匹配)", JsonConvert.SerializeObject(sourceXml)); break; diff --git a/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.csproj b/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.csproj index a20c9339..38888c78 100644 --- a/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.csproj +++ b/CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.csproj @@ -58,7 +58,7 @@ - + diff --git a/数据库/MySql/20220209/升级脚本/dbo.WeChatTransactionComponentGoodSKU.sql b/数据库/MySql/20220209/升级脚本/dbo.WeChatTransactionComponentGoodSKU.sql new file mode 100644 index 00000000..f7bbbb2e --- /dev/null +++ b/数据库/MySql/20220209/升级脚本/dbo.WeChatTransactionComponentGoodSKU.sql @@ -0,0 +1,4 @@ +ALTER TABLE WeChatTransactionComponentGoodSKU modify column costprice decimal(10, 2) NOT NULL; +ALTER TABLE WeChatTransactionComponentGoodSKU modify column marketPrice decimal(10, 2) NOT NULL; +ALTER TABLE WeChatTransactionComponentGoodSKU modify column salePrice decimal(10, 2) NOT NULL; + diff --git a/数据库/MySql/20220209/完整数据库脚本/coreshop20220209.rar b/数据库/MySql/20220209/完整数据库脚本/coreshop20220209.rar new file mode 100644 index 00000000..14af4038 Binary files /dev/null and b/数据库/MySql/20220209/完整数据库脚本/coreshop20220209.rar differ diff --git a/数据库/SqlServer/20220209/升级脚本/dbo.WeChatTransactionComponentGoodSKU.sql b/数据库/SqlServer/20220209/升级脚本/dbo.WeChatTransactionComponentGoodSKU.sql new file mode 100644 index 00000000..3fe13956 --- /dev/null +++ b/数据库/SqlServer/20220209/升级脚本/dbo.WeChatTransactionComponentGoodSKU.sql @@ -0,0 +1,5 @@ +GO +ALTER TABLE [dbo].[WeChatTransactionComponentGoodSKU] ALTER COLUMN [costprice] DECIMAL (18, 2) NOT NULL; +ALTER TABLE [dbo].[WeChatTransactionComponentGoodSKU] ALTER COLUMN [marketPrice] DECIMAL (18, 2) NOT NULL; +ALTER TABLE [dbo].[WeChatTransactionComponentGoodSKU] ALTER COLUMN [salePrice] DECIMAL (18, 2) NOT NULL; + diff --git a/数据库/SqlServer/20220209/完整数据库/202202090158完整数据库.rar b/数据库/SqlServer/20220209/完整数据库/202202090158完整数据库.rar new file mode 100644 index 00000000..6a1d5302 Binary files /dev/null and b/数据库/SqlServer/20220209/完整数据库/202202090158完整数据库.rar differ