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 { /// 循环查询服务器任务状态的间隔(秒) private const int TaskStatusPollIntervalSeconds = 60; private readonly System.Timers.Timer _timer; private readonly WxOrderServiceApi _kjdApi = new WxOrderServiceApi(); public List Tasks { get; } /// /// 刷新倒计时 /// public int ResetCountdown { get; private set; } private TaskService() { _timer = new System.Timers.Timer(); _timer.Interval = 1000; _timer.Elapsed += _timer_Elapsed; Tasks = new List(); } 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(object sender, TEventArgs data); public event TaskEventHandler> 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; } /// /// 查询服务器任务信息 /// 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); } }