159 lines
5.7 KiB
C#
159 lines
5.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.Json.Nodes;
|
|
using System.Threading.Tasks;
|
|
using Crm.Core.MsgTool.Domain.Dto;
|
|
|
|
namespace Crm.Core.MsgTool.Domain
|
|
{
|
|
/// <summary>
|
|
/// 企微任务助手处理类
|
|
/// </summary>
|
|
public class MsgToolTaskEventSingleton
|
|
{
|
|
private readonly IConfiguration _configuration;
|
|
private readonly IHttpClient _httpClient;
|
|
private readonly ICacheDomain _cacheDomain;
|
|
private readonly SystemConfig _systemConfig;
|
|
private readonly IOracleRepository<CrmDbContext> _crmRepository;
|
|
private List<MsgToolTaskEventDto> _msgToolTasks = new();
|
|
|
|
public MsgToolTaskEventSingleton(
|
|
IConfiguration configuration,
|
|
IHttpClient httpClient,
|
|
ICacheDomain cacheDomain,
|
|
IOracleRepository<CrmDbContext> crmRepository)
|
|
{
|
|
_configuration = configuration;
|
|
_httpClient = httpClient;
|
|
_cacheDomain = cacheDomain;
|
|
_crmRepository = crmRepository;
|
|
_systemConfig = configuration.GetSection("SystemConfig").Get<SystemConfig>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取任务队列
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<MsgToolTaskEventDto> GetMsgToolTaskEvents() => _msgToolTasks;
|
|
|
|
/// <summary>
|
|
/// 移除任务队列
|
|
/// </summary>
|
|
/// <param name="task"></param>
|
|
/// <returns></returns>
|
|
public List<MsgToolTaskEventDto> RemoveTimingTask(MsgToolTask task)
|
|
{
|
|
var taskid = task.PKID;
|
|
if (_msgToolTasks.Any(x => x.TaskId.Equals(taskid)))
|
|
{
|
|
_msgToolTasks.Remove(_msgToolTasks.First(x => x.TaskId == taskid));
|
|
}
|
|
return _msgToolTasks;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 批量移除任务队列
|
|
/// </summary>
|
|
/// <param name="tasks"></param>
|
|
/// <returns></returns>
|
|
public List<MsgToolTaskEventDto> RemoveTimingTasks(List<MsgToolTask> tasks)
|
|
{
|
|
foreach (var taks in tasks)
|
|
{
|
|
RemoveTimingTask(taks);
|
|
}
|
|
return _msgToolTasks;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加入任务队列
|
|
/// </summary>
|
|
/// <param name="appid"></param>
|
|
/// <param name="task"></param>
|
|
/// <returns></returns>
|
|
public List<MsgToolTaskEventDto> AddTimingTask(string? appid, MsgToolTask task)
|
|
{
|
|
var taskid = task.PKID;
|
|
var now = DateTime.Now;
|
|
var planTimes = new List<DateTime>();
|
|
if (_msgToolTasks.Any(x => x.TaskId.Equals(taskid)))
|
|
{
|
|
_msgToolTasks.Remove(_msgToolTasks.First(x => x.TaskId == taskid));
|
|
}
|
|
// 如果超过了过期时间就直接返回,不新增
|
|
if (!task.PLANEXETIME.HasValue)
|
|
{
|
|
return _msgToolTasks;
|
|
}
|
|
if (task.SENDTYPE == "tim")
|
|
{
|
|
planTimes.Add(task.PLANEXETIME.Value);
|
|
_msgToolTasks.Add(new MsgToolTaskEventDto
|
|
{
|
|
Appid = appid,
|
|
TaskId = taskid,
|
|
TaskName = task.PLANNAME,
|
|
PlanTimes = planTimes
|
|
});
|
|
return _msgToolTasks;
|
|
}
|
|
if (!task.DUEDATE.HasValue || task.DUEDATE < now || string.IsNullOrEmpty(task.PLANEXEHOUR)) return _msgToolTasks;
|
|
|
|
var planTime = task.PLANEXETIME.Value;
|
|
if (task.SENDTYPE == "daily")
|
|
{
|
|
var ts = task.DUEDATE.Value - planTime;
|
|
for (var day = 0; day <= ts.Days; day++)
|
|
{
|
|
if (DateTime.TryParse($"{planTime.AddDays(day):yyyy-MM-dd} {task.PLANEXEHOUR}", out DateTime time)
|
|
&& time > now)
|
|
{
|
|
planTimes.Add(time);
|
|
}
|
|
}
|
|
}
|
|
else if (task.SENDTYPE == "week" && !string.IsNullOrEmpty(task.PLANEXECYCLE))
|
|
{
|
|
var planExecycle = JsonSerializer.Deserialize<List<int>>(task.PLANEXECYCLE);
|
|
var ts = task.DUEDATE.Value - planTime;
|
|
for (var day = 0; day <= ts.Days; day++)
|
|
{
|
|
if (DateTime.TryParse($"{planTime.AddDays(day):yyyy-MM-dd} {task.PLANEXEHOUR}", out DateTime time)
|
|
&& time > now
|
|
&& planExecycle != null
|
|
&& planExecycle.Contains((int)time.DayOfWeek == 0 ? 7 : (int)time.DayOfWeek))
|
|
{
|
|
planTimes.Add(time);
|
|
}
|
|
}
|
|
}
|
|
else if (task.SENDTYPE == "month")
|
|
{
|
|
var ts = task.DUEDATE.Value - planTime;
|
|
var planExecycle = JsonSerializer.Deserialize<List<int>>(task.PLANEXECYCLE);
|
|
for (var day = 0; day <= ts.Days; day++)
|
|
{
|
|
if (DateTime.TryParse($"{planTime.AddDays(day):yyyy-MM-dd} {task.PLANEXEHOUR}", out DateTime time)
|
|
&& time > now
|
|
&& planExecycle != null && planExecycle.Contains(time.Day))
|
|
{
|
|
planTimes.Add(time);
|
|
}
|
|
}
|
|
}
|
|
if (planTimes == null || !planTimes.Any()) return _msgToolTasks;
|
|
_msgToolTasks.Add(new MsgToolTaskEventDto
|
|
{
|
|
Appid = appid,
|
|
TaskId = taskid,
|
|
TaskName = task.PLANNAME,
|
|
PlanTimes = planTimes
|
|
});
|
|
|
|
return _msgToolTasks;
|
|
}
|
|
}
|
|
} |