From 614b05d8b1354be1c00a081979b097f70f435c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=81=B0=E7=81=B0?= Date: Sun, 1 Jan 2023 22:13:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E3=80=90=E6=9C=8D=E5=8A=A1=E8=AE=A2=E5=8D=95=E3=80=91?= =?UTF-8?q?=E8=B6=85=E5=B8=82=E6=9C=AA=E6=94=AF=E4=BB=98=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95=EF=BC=8C=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E3=80=90=E5=95=86=E5=9F=8E=E8=AE=BE=E7=BD=AE=E3=80=91=E3=80=90?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=AE=BE=E7=BD=AE=E3=80=91=E3=80=90=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=E3=80=91=E7=9A=84tab=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=9D=A1=E5=8F=AF=E4=BB=A5=E8=AE=BE=E7=BD=AE=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SystemSettingConstVars.cs | 5 ++ .../SystemSettingDictionary.cs | 1 + .../ICoreCmsUserServicesOrderServices.cs | 7 +++ .../CoreCmsUserServicesOrderServices.cs | 56 ++++++++++++++++++- CoreCms.Net.Task/AutoCancelServiceOrderJob.cs | 29 ++++++++++ CoreCms.Net.Task/HangfireDispose.cs | 5 +- .../wwwroot/views/shop/setting/index.html | 10 +++- 7 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 CoreCms.Net.Task/AutoCancelServiceOrderJob.cs diff --git a/CoreCms.Net.Configuration/SystemSettingConstVars.cs b/CoreCms.Net.Configuration/SystemSettingConstVars.cs index 22e5e485..fa4f80e0 100644 --- a/CoreCms.Net.Configuration/SystemSettingConstVars.cs +++ b/CoreCms.Net.Configuration/SystemSettingConstVars.cs @@ -81,6 +81,11 @@ namespace CoreCms.Net.Configuration /// public const string OrderCancelTime = "orderCancelTime"; + /// + /// 服务订单取消时间 + /// + public const string ServiceOrderCancelTime = "serviceOrderCancelTime"; + /// /// 订单完成时间 /// diff --git a/CoreCms.Net.Configuration/SystemSettingDictionary.cs b/CoreCms.Net.Configuration/SystemSettingDictionary.cs index 94f494c5..2ce86472 100644 --- a/CoreCms.Net.Configuration/SystemSettingDictionary.cs +++ b/CoreCms.Net.Configuration/SystemSettingDictionary.cs @@ -91,6 +91,7 @@ namespace CoreCms.Net.Configuration di.Add(SystemSettingConstVars.OrderAutoEvalTime, new DictionaryKeyValues() { sKey = "订单自动评价时间", sValue = "30" }); di.Add(SystemSettingConstVars.RemindOrderTime, new DictionaryKeyValues() { sKey = "订单提醒付款时间", sValue = "1" }); + di.Add(SystemSettingConstVars.ServiceOrderCancelTime, new DictionaryKeyValues() { sKey = "服务订单取消时间", sValue = "30" }); di.Add(SystemSettingConstVars.StoreOrderAutomaticDelivery, new DictionaryKeyValues() { sKey = "门店自提自动发货", sValue = "2" }); diff --git a/CoreCms.Net.IServices/Service/ICoreCmsUserServicesOrderServices.cs b/CoreCms.Net.IServices/Service/ICoreCmsUserServicesOrderServices.cs index 82ffa10a..04cb7ab9 100644 --- a/CoreCms.Net.IServices/Service/ICoreCmsUserServicesOrderServices.cs +++ b/CoreCms.Net.IServices/Service/ICoreCmsUserServicesOrderServices.cs @@ -46,5 +46,12 @@ namespace CoreCms.Net.IServices Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false); + + /// + /// 自动取消订单(定时任务使用) + /// + /// + Task AutoCancelOrder(); + } } \ No newline at end of file diff --git a/CoreCms.Net.Services/Service/CoreCmsUserServicesOrderServices.cs b/CoreCms.Net.Services/Service/CoreCmsUserServicesOrderServices.cs index 619e0e8c..d80446dc 100644 --- a/CoreCms.Net.Services/Service/CoreCmsUserServicesOrderServices.cs +++ b/CoreCms.Net.Services/Service/CoreCmsUserServicesOrderServices.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; @@ -17,10 +18,13 @@ using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.IServices; using CoreCms.Net.Model.Entities; +using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.UI; +using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; using SqlSugar; @@ -33,13 +37,17 @@ namespace CoreCms.Net.Services { private readonly ICoreCmsUserServicesOrderRepository _dal; private readonly IServiceProvider _serviceProvider; + private readonly ICoreCmsSettingServices _settingServices; + private readonly ISysTaskLogServices _taskLogServices; private readonly IUnitOfWork _unitOfWork; - public CoreCmsUserServicesOrderServices(IUnitOfWork unitOfWork, ICoreCmsUserServicesOrderRepository dal, IServiceProvider serviceProvider) + public CoreCmsUserServicesOrderServices(IUnitOfWork unitOfWork, ICoreCmsUserServicesOrderRepository dal, IServiceProvider serviceProvider, ICoreCmsSettingServices settingServices, ISysTaskLogServices taskLogServices) { this._dal = dal; _serviceProvider = serviceProvider; + _settingServices = settingServices; + _taskLogServices = taskLogServices; base.BaseDal = dal; _unitOfWork = unitOfWork; } @@ -130,5 +138,51 @@ namespace CoreCms.Net.Services } #endregion + #region 自动取消订单(定时任务使用) + /// + /// 自动取消订单(定时任务使用) + /// + /// + public async Task AutoCancelOrder() + { + var jm = new WebApiCallBack(); + + var allConfigs = await _settingServices.GetConfigDictionaries(); + var time = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ServiceOrderCancelTime).ObjectToInt(30); + var endTime = DateTime.Now.AddMinutes(-time); + + var where = PredicateBuilder.True(); + where = where.And(p => p.isPay == false); + where = where.And(p => p.status == (int)GlobalEnumVars.ServicesOrderStatus.正常); + where = where.And(p => p.createTime <= endTime); + + var orderInfos = await _dal.QueryListByClauseAsync(where); + + jm.status = true; + jm.msg = "取消成功"; + + + if (orderInfos.Any()) + { + orderInfos.ForEach(p => p.status = (int)GlobalEnumVars.ServicesOrderStatus.作废); + + await _dal.UpdateAsync(orderInfos); + } + + //插入日志 + var model = new SysTaskLog + { + createTime = DateTime.Now, + isSuccess = jm.status, + name = "自动取消服务订单", + parameters = JsonConvert.SerializeObject(jm) + }; + await _taskLogServices.InsertAsync(model); + + return jm; + } + #endregion + + } } diff --git a/CoreCms.Net.Task/AutoCancelServiceOrderJob.cs b/CoreCms.Net.Task/AutoCancelServiceOrderJob.cs new file mode 100644 index 00000000..54905b4e --- /dev/null +++ b/CoreCms.Net.Task/AutoCancelServiceOrderJob.cs @@ -0,0 +1,29 @@ + +using System; +using CoreCms.Net.IServices; +using CoreCms.Net.Loging; +using CoreCms.Net.Model.Entities; +using Newtonsoft.Json; +using NLog; + +namespace CoreCms.Net.Task +{ + /// + /// 未付款服务订单超时后取消订单操作任务 + /// + public class AutoCancelServiceOrderJob + { + private readonly ICoreCmsUserServicesOrderServices _userServicesOrderServices; + + public AutoCancelServiceOrderJob(ICoreCmsUserServicesOrderServices userServicesOrderServices) + { + _userServicesOrderServices = userServicesOrderServices; + } + + public async System.Threading.Tasks.Task Execute() + { + await _userServicesOrderServices.AutoCancelOrder(); + } + + } +} diff --git a/CoreCms.Net.Task/HangfireDispose.cs b/CoreCms.Net.Task/HangfireDispose.cs index ca23f78f..0df46f1b 100644 --- a/CoreCms.Net.Task/HangfireDispose.cs +++ b/CoreCms.Net.Task/HangfireDispose.cs @@ -40,7 +40,6 @@ namespace CoreCms.Net.Task //这里呢就是需要触发的方法 "0/10 * * * * ? " 可以自行搜索cron表达式 代表循环的规律很简单 //CancelOrderJob代表你要触发的类 Execute代表你要触发的方法 - //自动取消订单任务 RecurringJob.AddOrUpdate(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Local); // 每5分钟取消一次订单 @@ -68,6 +67,10 @@ namespace CoreCms.Net.Task //定时清理用户连续签到信息 RecurringJob.AddOrUpdate(s => s.Execute(), "0 0 0 */1 * ? ", TimeZoneInfo.Local); // 每天0点执行。 + //自动取消服务器订单任务 + RecurringJob.AddOrUpdate(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Local); // 每5分钟取消一次订单 + + } #endregion diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html index 732fff1c..0c4a2b25 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html @@ -420,6 +420,14 @@
+
+ +
+ +
+ +
未付款服务订单取消的时间间隔,单位为【分钟】,请设置10分钟以上时间,因为订单取消时间5分钟执行一次,建议设置30分钟
+
@@ -433,7 +441,7 @@
-
已付款的订单完成的时间间隔,单位为【天】,一般设置3天
+
已付款的订单完成的时间间隔,单位为【天】,一般设置15天