feat 添加订单取消任务(定时任务)
This commit is contained in:
parent
8d8b6d3478
commit
4a29dfea07
60
ARW.Model/Dto/Business/OrderTasks/OrderTaskDto.cs
Normal file
60
ARW.Model/Dto/Business/OrderTasks/OrderTaskDto.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
|
||||
namespace ARW.Model.Dto.Business.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务输入对象
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
public class OrderTaskDto
|
||||
{
|
||||
|
||||
public int OrderTaskId { get; set; }
|
||||
|
||||
public long OrderTaskGuid { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "客户guid(外键)不能为空")]
|
||||
public long CustomerGuid { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "订单guid(外键)不能为空")]
|
||||
public long OrderGuid { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "订单结束时间不能为空")]
|
||||
public DateTime? EndTime { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "订单支付状态(1未支付 2已支付)不能为空")]
|
||||
public int PayStatus { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "订单取消状态(1待取消 2已取消)不能为空")]
|
||||
public int CancelStatus { get; set; }
|
||||
|
||||
public string ErrorMsg { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 订单取消任务查询对象
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
public class OrderTaskQueryDto : PagerInfo
|
||||
{
|
||||
|
||||
public string ids { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
91
ARW.Model/Models/Business/OrderTasks/OrderTask.cs
Normal file
91
ARW.Model/Models/Business/OrderTasks/OrderTask.cs
Normal file
@ -0,0 +1,91 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SqlSugar;
|
||||
using OfficeOpenXml.Attributes;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ARW.Model.Models.Business.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务,数据实体对象
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
[SugarTable("tb_order_task")]
|
||||
public class OrderTask : BusinessBase
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单取消任务id
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "order_task_id")]
|
||||
public int OrderTaskId { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单取消任务guid
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = false, ColumnName = "order_task_guid")]
|
||||
public long OrderTaskGuid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :客户guid(外键)
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
[SugarColumn(ColumnName = "customer_guid")]
|
||||
public long CustomerGuid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单guid(外键)
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
[SugarColumn(ColumnName = "order_guid")]
|
||||
public long OrderGuid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单结束时间
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "end_time")]
|
||||
public DateTime? EndTime { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单支付状态(1未支付 2已支付)
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "pay_status")]
|
||||
public int PayStatus { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单取消状态(1待取消 2已取消)
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "cancel_status")]
|
||||
public int CancelStatus { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :失败原因
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "error_msg")]
|
||||
public string ErrorMsg { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
69
ARW.Model/Vo/Business/OrderTasks/OrderTaskVo.cs
Normal file
69
ARW.Model/Vo/Business/OrderTasks/OrderTaskVo.cs
Normal file
@ -0,0 +1,69 @@
|
||||
using Newtonsoft.Json;
|
||||
using OfficeOpenXml.Attributes;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
|
||||
namespace ARW.Model.Vo.Business.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务展示对象
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
public class OrderTaskVo
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单取消任务id
|
||||
/// </summary>
|
||||
public int OrderTaskId { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单取消任务guid
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
public long OrderTaskGuid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :客户guid(外键)
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
public long CustomerGuid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单guid(外键)
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
public long OrderGuid { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单结束时间
|
||||
/// </summary>
|
||||
public DateTime? EndTime { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单支付状态(1未支付 2已支付)
|
||||
/// </summary>
|
||||
public int PayStatus { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :订单取消状态(1待取消 2已取消)
|
||||
/// </summary>
|
||||
public int CancelStatus { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :失败原因
|
||||
/// </summary>
|
||||
public string ErrorMsg { get; set; }
|
||||
|
||||
}
|
||||
}
|
20
ARW.Repository/Business/OrderTasks/OrderTaskRepository.cs
Normal file
20
ARW.Repository/Business/OrderTasks/OrderTaskRepository.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using Infrastructure.Attribute;
|
||||
using ARW.Repository.System;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
|
||||
namespace ARW.Repository.Business.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务仓储
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
[AppService(ServiceLifetime = LifeTime.Transient)]
|
||||
public class OrderTaskRepository : BaseRepository<OrderTask>
|
||||
{
|
||||
#region 业务逻辑代码
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -33,6 +33,9 @@ using ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons;
|
||||
using ARW.Model.Vo.Business.Marketing.CouponManage.CustomerCoupons;
|
||||
using System.Linq;
|
||||
using ARW.Model.Vo.Api.OrderManage.Orders;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
using ARW.Model.Vo.Business.OrderManage.OrderCustomerAddreses;
|
||||
using ARW.Repository.Business.OrderTasks;
|
||||
|
||||
namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
{
|
||||
@ -63,10 +66,11 @@ namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
private readonly OrderCustomerAddressRepository _OrderCustomerAddressRepository;
|
||||
private readonly CustomerAddressRepository _CustomerAddressRepository;
|
||||
private readonly CustomerCouponRepository _CustomerCouponRepository;
|
||||
private readonly OrderTaskRepository _OrderTaskRepository;
|
||||
|
||||
|
||||
|
||||
public PayServiceApi(ShopRepository ShopRepository, GoodsCategoryRepository goodsCategoryRepository, CustomerRepository customerRepository, OrderRepository orderRepository, PaymentRepository paymentRepository, CouponRepository couponRepository, SenparcHttpClient httpClient, GoodsRepository goodsRepository, GoodsSkuRepository goodsSkuRepository, IGoodsServiceApi goodsServiceApi, CartRepository cartRepository, OrderGoodsRepository orderGoodsRepository, OrderCustomerAddressRepository orderCustomerAddressRepository, CustomerAddressRepository customerAddressRepository, CustomerCouponRepository customerCouponRepository)
|
||||
public PayServiceApi(ShopRepository ShopRepository, GoodsCategoryRepository goodsCategoryRepository, CustomerRepository customerRepository, OrderRepository orderRepository, PaymentRepository paymentRepository, CouponRepository couponRepository, SenparcHttpClient httpClient, GoodsRepository goodsRepository, GoodsSkuRepository goodsSkuRepository, IGoodsServiceApi goodsServiceApi, CartRepository cartRepository, OrderGoodsRepository orderGoodsRepository, OrderCustomerAddressRepository orderCustomerAddressRepository, CustomerAddressRepository customerAddressRepository, CustomerCouponRepository customerCouponRepository, OrderTaskRepository orderTaskRepository)
|
||||
{
|
||||
this._ShopRepository = ShopRepository;
|
||||
_GoodsCategoryRepository = goodsCategoryRepository;
|
||||
@ -83,6 +87,7 @@ namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
_OrderCustomerAddressRepository = orderCustomerAddressRepository;
|
||||
_CustomerAddressRepository = customerAddressRepository;
|
||||
_CustomerCouponRepository = customerCouponRepository;
|
||||
_OrderTaskRepository = orderTaskRepository;
|
||||
}
|
||||
|
||||
#region Api接口代码
|
||||
@ -152,7 +157,7 @@ namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
jsApiUiPackage = payEntity,
|
||||
outTradeNo = orderNo,
|
||||
CreateTime = res.Create_time,
|
||||
OverTime = res.Create_time.AddMinutes(30)
|
||||
OverTime = res.Create_time.AddMinutes(2)
|
||||
};
|
||||
return payRes;
|
||||
|
||||
@ -411,6 +416,8 @@ namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
if (response == 0)
|
||||
throw new CustomException("业务订单数据加入失败");
|
||||
|
||||
/* 添加订单取消任务 */
|
||||
await AddOrderTask(commitPayDtoApi, response);
|
||||
/* 添加订单商品 */
|
||||
await AddOrderGoods(commitPayDtoApi, response);
|
||||
/* 添加订单用户地址 */
|
||||
@ -421,6 +428,29 @@ namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加订单取消任务
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <param name="orderGuid"></param>
|
||||
/// <returns></returns>
|
||||
public async Task AddOrderTask(CommitPayDtoApi parm, long orderGuid)
|
||||
{
|
||||
var order = await _OrderRepository.GetFirstAsync(s => s.OrderGuid == orderGuid);
|
||||
var orderTask = new OrderTask
|
||||
{
|
||||
CustomerGuid = parm.UserId,
|
||||
OrderGuid = orderGuid,
|
||||
EndTime = order.Create_time.AddMinutes(2),
|
||||
PayStatus = 1,
|
||||
CancelStatus = 1,
|
||||
};
|
||||
var response = await _OrderTaskRepository.InsertReturnSnowflakeIdAsync(orderTask);
|
||||
if (response == 0)
|
||||
throw new CustomException("订单用户地址数据加入失败");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加OrderGoods(订单商品副表)
|
||||
/// </summary>
|
||||
@ -564,6 +594,12 @@ namespace ARW.Service.Api.BusinessService.PaymentManage
|
||||
Update_time = DateTime.Now,
|
||||
}, f => f.OrderGuid == item.OrderGuid);
|
||||
|
||||
// 修改订单取消列表
|
||||
await _OrderTaskRepository.UpdateAsync(f => new OrderTask
|
||||
{
|
||||
PayStatus = 2,
|
||||
}, f => f.OrderGuid == item.OrderGuid);
|
||||
|
||||
|
||||
var order = await _OrderRepository.GetFirstAsync(s => s.OrderNumber == item.OrderNumber);
|
||||
|
||||
|
@ -0,0 +1,95 @@
|
||||
using Infrastructure.Attribute;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Infrastructure;
|
||||
using ARW.Model;
|
||||
using ARW.Repository;
|
||||
using ARW.Repository.Business.OrderTasks;
|
||||
using ARW.Service.Business.IBusinessService.OrderTasks;
|
||||
using ARW.Model.Dto.Business.OrderTasks;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
using ARW.Model.Vo.Business.OrderTasks;
|
||||
|
||||
namespace ARW.Service.Business.BusinessService.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务接口实现类
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IOrderTaskService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class OrderTaskServiceImpl : BaseService<OrderTask>, IOrderTaskService
|
||||
{
|
||||
private readonly OrderTaskRepository _OrderTaskRepository;
|
||||
|
||||
public OrderTaskServiceImpl(OrderTaskRepository OrderTaskRepository)
|
||||
{
|
||||
this._OrderTaskRepository = OrderTaskRepository;
|
||||
}
|
||||
|
||||
#region 业务逻辑代码
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询订单取消任务分页列表
|
||||
/// </summary>
|
||||
public async Task<PagedInfo<OrderTaskVo>> GetOrderTaskList(OrderTaskQueryDto parm)
|
||||
{
|
||||
//开始拼装查询条件d
|
||||
var predicate = Expressionable.Create<OrderTask>();
|
||||
|
||||
var query = _OrderTaskRepository
|
||||
.Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderBy(s => s.Update_time,OrderByType.Desc)
|
||||
.Select(s => new OrderTaskVo
|
||||
{
|
||||
OrderTaskId = s.OrderTaskId,
|
||||
OrderTaskGuid = s.OrderTaskGuid,
|
||||
CustomerGuid = s.CustomerGuid,
|
||||
OrderGuid = s.OrderGuid,
|
||||
EndTime = s.EndTime,
|
||||
PayStatus = s.PayStatus,
|
||||
CancelStatus = s.CancelStatus,
|
||||
ErrorMsg = s.ErrorMsg,
|
||||
});
|
||||
|
||||
|
||||
return await query.ToPageAsync(parm);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加或修改订单取消任务
|
||||
/// </summary>
|
||||
public async Task<string> AddOrUpdateOrderTask(OrderTask model)
|
||||
{
|
||||
if (model.OrderTaskId != 0)
|
||||
{
|
||||
var response = await _OrderTaskRepository.UpdateAsync(model);
|
||||
return "修改成功!";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var response = await _OrderTaskRepository.InsertReturnSnowflakeIdAsync(model);
|
||||
return "添加成功!";
|
||||
}
|
||||
}
|
||||
|
||||
#region Excel处理
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ARW.Model;
|
||||
using ARW.Model.Dto.Business.OrderTasks;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
using ARW.Model.Vo.Business.OrderTasks;
|
||||
|
||||
namespace ARW.Service.Business.IBusinessService.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务接口类
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
public interface IOrderTaskService : IBaseService<OrderTask>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取订单取消任务分页列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedInfo<OrderTaskVo>> GetOrderTaskList(OrderTaskQueryDto parm);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加或修改订单取消任务
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
Task<string> AddOrUpdateOrderTask(OrderTask parm);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
149
ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs
Normal file
149
ARW.Tasks/TaskScheduler/Business/OrderTask_Job.cs
Normal file
@ -0,0 +1,149 @@
|
||||
using ARW.Common;
|
||||
using ARW.Model.Models.Business.OrderManage.Orders;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
using ARW.Model.Models.Business.SubscribeTasks;
|
||||
using ARW.Model.System;
|
||||
using ARW.Service.Business.IBusinessService.Custom.Customers;
|
||||
using ARW.Service.Business.IBusinessService.OrderManage.Orders;
|
||||
using ARW.Service.Business.IBusinessService.OrderTasks;
|
||||
using ARW.Service.Business.IBusinessService.SubscribeTasks;
|
||||
using ARW.Service.System.IService;
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.WeChat.SubScribe;
|
||||
using Quartz;
|
||||
using Senparc.CO2NET.Extensions;
|
||||
using Senparc.Weixin.Entities.TemplateMessage;
|
||||
using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using SystemTime = System.SystemTime;
|
||||
|
||||
namespace ARW.Tasks.TaskScheduler.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(OrderTask_Job), ServiceLifetime = LifeTime.Scoped)]
|
||||
public class OrderTask_Job : JobBase, IJob
|
||||
{
|
||||
private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
private readonly ISysTasksLogService SysTasksLogService;
|
||||
private readonly ISysTasksQzService SysTasksQzService;
|
||||
|
||||
private readonly IOrderTaskService _OrderTaskService;
|
||||
private readonly IOrderService _OrderService;
|
||||
private readonly ICustomerService _CustomerService;
|
||||
|
||||
|
||||
public OrderTask_Job(ISysTasksLogService sysTasksLogService, ISysTasksQzService sysTasksQzService, IOrderTaskService orderTaskService, IOrderService orderService, ICustomerService customerService)
|
||||
{
|
||||
SysTasksLogService = sysTasksLogService;
|
||||
SysTasksQzService = sysTasksQzService;
|
||||
_OrderTaskService = orderTaskService;
|
||||
_OrderService = orderService;
|
||||
_CustomerService = customerService;
|
||||
}
|
||||
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
var message = await Run();
|
||||
var logModel = await ExecuteJob(context, async () => await Run(), message);
|
||||
await RecordTaskLog(context, logModel);
|
||||
}
|
||||
|
||||
|
||||
public async Task<string> Run()
|
||||
{
|
||||
await Task.Delay(1);
|
||||
//TODO 业务逻辑
|
||||
|
||||
var waitCancelList = await _OrderTaskService.GetListAsync(s => s.PayStatus == 1 && s.CancelStatus == 1);
|
||||
if (waitCancelList.Count > 0)
|
||||
{
|
||||
var taskList = new List<string>();
|
||||
foreach (var item in waitCancelList)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (item.EndTime < DateTime.Now)
|
||||
{
|
||||
//logger.Info("推送结果:" + res);
|
||||
|
||||
// 修改订单状态
|
||||
await _OrderService.UpdateAsync(f => new Order
|
||||
{
|
||||
OrderStatus = 2
|
||||
}, s => s.OrderGuid == item.OrderGuid);
|
||||
|
||||
// 修改订单取消任务状态
|
||||
await _OrderTaskService.UpdateAsync(f => new OrderTask
|
||||
{
|
||||
CancelStatus = 2
|
||||
}, s => s.OrderGuid == item.OrderGuid);
|
||||
|
||||
var customer = await _CustomerService.GetFirstAsync(s => s.CustomerGuid == item.CustomerGuid);
|
||||
var order = await _OrderService.GetFirstAsync(s => s.OrderGuid == item.OrderGuid);
|
||||
|
||||
taskList.Add("订单号:" + order.OrderNumber + " " + customer.CustomerNickname + "用户的订单已取消");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ex.ToString();
|
||||
}
|
||||
}
|
||||
return taskList.ToJson().ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
return "没有需要执行的任务";
|
||||
}
|
||||
//return "执行成功!";
|
||||
|
||||
#region 公众号模板消息信息 -- DPBMARK MP
|
||||
|
||||
//可选参数(需要和公众号模板消息匹配):
|
||||
//var templateData = new
|
||||
//{
|
||||
// first = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("预约健身开始提醒"),
|
||||
// keyword1 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("测试门店"),
|
||||
// keyword2 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("佛山市顺德区xxx健身"),
|
||||
// keyword3 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem(SystemTime.Now.ToString("yyyy年MM月dd日 HH:mm")),
|
||||
// keyword4 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("1小时"),
|
||||
// keyword5 = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("还有1个小时开始健身,请熟知!"),
|
||||
// remark = new Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage.TemplateDataItem("您的 OpenId:" + openId),
|
||||
//};
|
||||
#endregion DPBMARK_END
|
||||
//System.Console.WriteLine("job test");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 记录到日志
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="logModel"></param>
|
||||
public async Task RecordTaskLog(IJobExecutionContext context, SysTasksLog logModel)
|
||||
{
|
||||
|
||||
//可以直接获取 JobDetail 的值
|
||||
IJobDetail job = context.JobDetail;
|
||||
|
||||
logModel.InvokeTarget = job.JobType.FullName;
|
||||
logModel = await SysTasksLogService.AddTaskLog(job.Key.Name, logModel);
|
||||
//成功后执行次数+1
|
||||
if (logModel.Status == "0")
|
||||
{
|
||||
await SysTasksQzService.UpdateAsync(f => new SysTasksQz()
|
||||
{
|
||||
RunTimes = f.RunTimes + 1,
|
||||
LastRunTime = DateTime.Now
|
||||
}, f => f.ID.ToString() == job.Key.Name);
|
||||
}
|
||||
logger.Info($"执行任务【{job.Key.Name}|{logModel.JobName}】结果={logModel.JobMessage}");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Enums;
|
||||
using Infrastructure.Model;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ARW.Admin.WebApi.Extensions;
|
||||
using ARW.Admin.WebApi.Filters;
|
||||
using ARW.Common;
|
||||
using ARW.Model.Dto.Business.OrderTasks;
|
||||
using ARW.Service.Business.IBusinessService.OrderTasks;
|
||||
using ARW.Admin.WebApi.Controllers;
|
||||
using ARW.Model.Models.Business.OrderTasks;
|
||||
using ARW.Model.Vo.Business.OrderTasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using ARW.Admin.WebApi.Framework;
|
||||
|
||||
|
||||
namespace ARW.WebApi.Controllers.Business.OrderTasks
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单取消任务控制器
|
||||
///
|
||||
/// @author lwh
|
||||
/// @date 2023-10-23
|
||||
/// </summary>
|
||||
[Verify]
|
||||
[Route("business/[controller]")]
|
||||
public class OrderTaskController : BaseController
|
||||
{
|
||||
private readonly IOrderTaskService _OrderTaskService;
|
||||
|
||||
/// <summary>
|
||||
/// 依赖注入
|
||||
/// </summary>
|
||||
/// <param name="OrderTaskService">订单取消任务服务</param>
|
||||
public OrderTaskController(IOrderTaskService OrderTaskService)
|
||||
{
|
||||
_OrderTaskService = OrderTaskService;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取订单取消任务列表
|
||||
/// </summary>
|
||||
/// <param name="parm">查询参数</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("getOrderTaskList")]
|
||||
[ActionPermissionFilter(Permission = "business:ordertask:list")]
|
||||
public async Task<IActionResult> GetOrderTaskList([FromQuery] OrderTaskQueryDto parm)
|
||||
{
|
||||
var res = await _OrderTaskService.GetOrderTaskList(parm);
|
||||
return SUCCESS(res);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加或修改订单取消任务
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("addOrUpdateOrderTask")]
|
||||
[ActionPermissionFilter(Permission = "business:ordertask:addOrUpdate")]
|
||||
[Log(Title = "添加或修改订单取消任务", BusinessType = BusinessType.ADDORUPDATE)]
|
||||
public async Task<IActionResult> AddOrUpdateOrderTask([FromBody] OrderTaskDto parm)
|
||||
{
|
||||
if (parm == null) { throw new CustomException("请求参数错误"); }
|
||||
|
||||
var modal = new OrderTask();
|
||||
if (parm.OrderTaskId != 0) modal = parm.Adapt<OrderTask>().ToUpdate(HttpContext);
|
||||
else modal = parm.Adapt<OrderTask>().ToCreate(HttpContext);
|
||||
|
||||
var res = await _OrderTaskService.AddOrUpdateOrderTask(modal);
|
||||
return SUCCESS(res);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除订单取消任务
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{ids}")]
|
||||
[ActionPermissionFilter(Permission = "business:ordertask:delete")]
|
||||
[Log(Title = "订单取消任务删除", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult Delete(string ids)
|
||||
{
|
||||
long[] idsArr = Tools.SpitLongArrary(ids);
|
||||
if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
|
||||
var response = _OrderTaskService.Delete(idsArr);
|
||||
return SUCCESS("删除成功!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user