111 lines
2.7 KiB
C#
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);
|
|
}
|
|
}
|