Files

111 lines
2.7 KiB
C#

using _29WxOrderWpf.Ctrls.Statistics.Models;
using AllBase;
using AllBase.Helper;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using Work;
using Work.KJDServer.API.Models;
using Work.KJDServer.API.WXOrder;
using WPFCommon.Events;
using WxOrder.Framework;
namespace _29WxOrderWpf.Services;
public class TaskService : SingleInstance<TaskService>
{
/// <summary>循环查询服务器任务状态的间隔(秒)</summary>
private const int TaskStatusPollIntervalSeconds = 60;
private readonly System.Timers.Timer _timer;
private readonly WxOrderServiceApi _kjdApi = new WxOrderServiceApi();
public List<TaskItem> Tasks { get; }
/// <summary>
/// 刷新倒计时
/// </summary>
public int ResetCountdown { get; private set; }
private TaskService()
{
_timer = new System.Timers.Timer();
_timer.Interval = 1000;
_timer.Elapsed += _timer_Elapsed;
Tasks = new List<TaskItem>();
}
private int _timeCount = 0;
private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
_timeCount++;
if (_timeCount % TaskStatusPollIntervalSeconds == 0)
{
_timeCount = 0;
_ = QueryTaskAsync();
}
ResetCountdown = TaskStatusPollIntervalSeconds - _timeCount;
}
public delegate void TaskEventHandler<TEventArgs>(object sender, TEventArgs data);
public event TaskEventHandler<IEnumerable<TaskItem>> TaskChanged;
//public DateTime StartDate { get; private set; } = DateTime.Now.AddMonths(-3);
public DateTime StartDate { get; private set; } = DateTime.Now.AddDays(-10);
public DateTime EndDate { get; private set; } = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
public void Start()
{
_timer.Start();
}
public void Stop()
{
_timer.Stop();
}
public void SetQueryParameters(DateTime startDate, DateTime endDate)
{
StartDate = startDate;
EndDate = endDate;
}
/// <summary>
/// 查询服务器任务信息
/// </summary>
public async Task QueryTaskAsync()
{
var tasks = await _kjdApi.GetWxTaskStatus(GlobalConfig.ShopLoginList.Select(a => a.ErpShopId), StartDate, EndDate);
if (tasks != null)
{
foreach (var item in tasks)
{
if (item.TaskType == TaskType.Gifts)
{
if (item.SubTasks?.Any() ?? false)
{
item.ObjectIds = string.Join(";", item.SubTasks.Select(a => a.ObjectId));
var subTask = item.SubTasks.First();
if (subTask.Status == 2)
{
item.TaskFailReason = subTask.SysMsg;
item.Status = 4;
}
}
}
}
Tasks.Clear();
Tasks.AddRange(tasks);
}
TaskChanged?.Invoke(this, this.Tasks);
}
}