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天