【新增】增加【服务订单】超市未支付自定取消订单,后台【商城设置】【平台设置】【订单管理】的tab第一条可以设置超时时间。

This commit is contained in:
大灰灰
2023-01-01 22:13:55 +08:00
parent 0307562fe4
commit 614b05d8b1
7 changed files with 110 additions and 3 deletions

View File

@@ -81,6 +81,11 @@ namespace CoreCms.Net.Configuration
/// </summary>
public const string OrderCancelTime = "orderCancelTime";
/// <summary>
/// 服务订单取消时间
/// </summary>
public const string ServiceOrderCancelTime = "serviceOrderCancelTime";
/// <summary>
/// 订单完成时间
/// </summary>

View File

@@ -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" });

View File

@@ -46,5 +46,12 @@ namespace CoreCms.Net.IServices
Expression<Func<CoreCmsUserServicesOrder, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false);
/// <summary>
/// 自动取消订单(定时任务使用)
/// </summary>
/// <returns></returns>
Task<WebApiCallBack> AutoCancelOrder();
}
}

View File

@@ -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 使
/// <summary>
/// 自动取消订单(定时任务使用)
/// </summary>
/// <returns></returns>
public async Task<WebApiCallBack> 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<CoreCmsUserServicesOrder>();
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
}
}

View File

@@ -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
{
/// <summary>
/// 未付款服务订单超时后取消订单操作任务
/// </summary>
public class AutoCancelServiceOrderJob
{
private readonly ICoreCmsUserServicesOrderServices _userServicesOrderServices;
public AutoCancelServiceOrderJob(ICoreCmsUserServicesOrderServices userServicesOrderServices)
{
_userServicesOrderServices = userServicesOrderServices;
}
public async System.Threading.Tasks.Task Execute()
{
await _userServicesOrderServices.AutoCancelOrder();
}
}
}

View File

@@ -40,7 +40,6 @@ namespace CoreCms.Net.Task
//这里呢就是需要触发的方法 "0/10 * * * * ? " 可以自行搜索cron表达式 代表循环的规律很简单
//CancelOrderJob代表你要触发的类 Execute代表你要触发的方法
//自动取消订单任务
RecurringJob.AddOrUpdate<AutoCancelOrderJob>(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Local); // 每5分钟取消一次订单
@@ -68,6 +67,10 @@ namespace CoreCms.Net.Task
//定时清理用户连续签到信息
RecurringJob.AddOrUpdate<ClearUserContinuousCheckInJob>(s => s.Execute(), "0 0 0 */1 * ? ", TimeZoneInfo.Local); // 每天0点执行。
//自动取消服务器订单任务
RecurringJob.AddOrUpdate<AutoCancelServiceOrderJob>(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Local); // 每5分钟取消一次订单
}
#endregion

View File

@@ -420,6 +420,14 @@
</div>
<div class="layui-tab-item">
<div class="layui-form coreshop-form">
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['serviceOrderCancelTime']['sKey']}}</label>
<div class="layui-input-inline layui-inline-2">
<input type="number" min="1" max="999999" name="serviceOrderCancelTime" value="{{d.data.configs['serviceOrderCancelTime']['sValue']}}" lay-verify="title|number" autocomplete="off" placeholder="请输入正整数" class="layui-input" list="defaultNumbers">
</div>
<div class="layui-form-mid layui-word-aux">未付款服务订单取消的时间间隔单位为分钟请设置10分钟以上时间因为订单取消时间5分钟执行一次,建议设置30分钟</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['orderCancelTime']['sKey']}}</label>
<div class="layui-input-inline layui-inline-2">
@@ -433,7 +441,7 @@
<div class="layui-input-inline layui-inline-2">
<input type="number" min="1" max="999999" name="orderCompleteTime" value="{{d.data.configs['orderCompleteTime']['sValue']}}" lay-verify="title|number" autocomplete="off" placeholder="请输入正整数" class="layui-input" list="defaultNumbers">
</div>
<div class="layui-form-mid layui-word-aux">已付款的订单完成的时间间隔单位为一般设置3</div>
<div class="layui-form-mid layui-word-aux">已付款的订单完成的时间间隔单位为一般设置15</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['orderAutoSignTime']['sKey']}}</label>