这是模拟人工去点击拉取方法的代码。 实现了,选中一个时段,然后每次每次往后拉取 30分钟范围数据,当最后时间到达当前时间,就去当前前30分钟数据,每次完后移动5分钟
比如 当前时间 2023-10-26 9:30
选中时间是 2023-10-25 9:30
那么第一次查询是 2023-10-25 9:30 到 2023-10-25 10:00 第二次查询是 2023-10-25 9:35 到 2023-10-25 10:05 第二次查询是 2023-10-25 9:40 到 2023-10-25 10:10 …… 当时间到达当前时间了 变成 第N次查询是 当前时间-30 到 当前时间 第N+1次查询是 当前时间-30 到 当前时间
代码
private bool CaiJiWorkOrder = true; //采集工单标识
private bool TimeUninterrupted = false;//时间不间断,即不重新开始
private DateTime UninterruptedStartTime;
private DateTime UninterruptedEndTime;
private void btnStopCaiJi_Click(object sender, EventArgs e)
{
try
{
this.Invoke(new Action(() => { SetEnableState(false, "btnStopCaiJi"); }));
this.Invoke(new Action(() => { SetEnableState(true, "btnStartCaiJi"); }));
this.Invoke(new Action(() =>
{
CaiJiWorkOrder = false;
// endWorkOrderDate.Enabled = true;
startWorkOrderDate.Enabled = true;
TimeUninterrupted = true;
}));
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("停止采集工单..."));
}
catch (Exception ex)
{
logger.Error("停止采集工单:" + ex.Message.ToString());
}
}
static long ConvertToTimestamp(DateTime dateTime)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(dateTime - startTime).TotalSeconds;
}
private void btnStartCaiJi_Click(object sender, EventArgs e)
{
try
{
this.Invoke(new Action(() => { SetEnableState(false, "btnStartCaiJi"); }));
this.Invoke(new Action(() => { SetEnableState(true, "btnStopCaiJi"); }));
this.Invoke(new Action(() =>
{
CaiJiWorkOrder = true;
}));
//获取开始的采集时间范围,
//转化为时间戳,传过去,
//运行完,然后加上时间间隔
//在转化为时间戳,传过去
long custom_from_date = 0;
long custom_from_to=0;
DateTime startTime;
DateTime endTime;
if (TimeUninterrupted)
{
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("接上次时间继续采集工单信息..."));
startTime = UninterruptedStartTime;
endTime = UninterruptedEndTime;
custom_from_date = ConvertToTimestamp(startTime);//第一次的时间d
custom_from_to = ConvertToTimestamp(endTime); //第一次的时间
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("时间范围是{0}---{1}之间,{2}分钟,每页采集条数{3}", startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss"), start_end_interval, get_page_size));
TimeUninterrupted = false;
}
else
{
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("开始采集工单信息..."));
string startWorkOrderDateTime = GetDatePickVal("startWorkOrderDate");
string endWorkOrderDateTime = GetDatePickVal("endWorkOrderDate");
endWorkOrderDate.Enabled = false;
startWorkOrderDate.Enabled = false;
startTime = DateTime.Parse(startWorkOrderDateTime);
endTime = DateTime.Parse(endWorkOrderDateTime);
custom_from_date = ConvertToTimestamp(startTime);//第一次的时间d
custom_from_to = ConvertToTimestamp(endTime); //第一次的时间
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("时间范围是{0}---{1}之间,30分钟,每页采集条数{2}", startWorkOrderDateTime, endWorkOrderDateTime, get_page_size));
UninterruptedStartTime = startTime;
UninterruptedEndTime = endTime;
}
Task.Factory.StartNew(async () =>
{
// 异步循环
while (CaiJiWorkOrder)
{
var result= SendCommand( custom_from_date, custom_from_to);
await result;
//第二次,第N次
//如果选的时间远远小于当前时间
DateTime currentDateTime = DateTime.Now;
if (endTime < currentDateTime)
{
DateTime TempDateTime = startTime;
DateTime newStartTime = startTime.AddMinutes(20).AddSeconds(-5);
DateTime newEndTime=TempDateTime.AddMinutes(20);
UninterruptedStartTime = newStartTime;
UninterruptedEndTime = newEndTime;
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("时间范围是{0}---{1}之间,{2}分钟,每页采集条数{3}", newStartTime.ToString("yyyy-MM-dd HH:mm:ss"), newEndTime.ToString("yyyy-MM-dd HH:mm:ss"), 30, 50));
custom_from_date = ConvertToTimestamp(newStartTime); ;//第二次,第N次
custom_from_to = ConvertToTimestamp(newEndTime);
endTime = newEndTime;
startTime = newStartTime;
}
else
{
DateTime newEndTime = DateTime.Now ;// 查询时间范围
DateTime newStartTime = newEndTime.AddMinutes(-30).AddSeconds(-5);//提前5秒 避免错过一些信息
UninterruptedStartTime = newStartTime;
UninterruptedEndTime = newEndTime;
RichTextBoxHelper.SetMsg(workorder_msg, string.Format("时间范围是{0}---{1}之间,{2}分钟,每页采集条数{3}", newStartTime.ToString("yyyy-MM-dd HH:mm:ss"), newEndTime.ToString("yyyy-MM-dd HH:mm:ss"), 30, 50));
custom_from_date = ConvertToTimestamp(newStartTime); ;//第二次,第N次
custom_from_to = ConvertToTimestamp(newEndTime);
}
await Task.Delay(5 * 60 * 1000);//5分钟采集一次
}
});
}
catch (Exception ex)
{
logger.Error("采集工单信息:" + ex.Message.ToString());
RichTextBoxHelper.SetMsg(workorder_msg, "采集结异常信息1" + ex.Message.ToString());
}
}
private async Task SendCommand(long custom_from_date, long custom_from_to)
{
try
{
TicketsReq requestInfo = new TicketsReq();
requestInfo.start_updated_at = custom_from_date;
requestInfo.end_updated_at = custom_from_to;
requestInfo.page = 1;
requestInfo.page_size = get_page_size;
string body = JsonConvert.SerializeObject(requestInfo);
var responeInfo= await HttpClinetService.HttpPostAsync(sendGetTicketCommandUrl, body, "application/json", null, 30000);
RichTextBoxHelper.SetMsg(workorder_msg, "采集结果是" + responeInfo);
}
catch (Exception ex)
{
logger.Error(ex);
RichTextBoxHelper.SetMsg(workorder_msg, "采集结异常信息2" + ex.Message.ToString());
}
}
时间设置代码
void startWorkOrderDate_ValueChanged(object sender, EventArgs e)
{
TimeUninterrupted = false; //改动且用选择的时间继续
DateTime currentDateTime = DateTime.Now;
// 设置 DateTimePicker 控件的最大日期为当前时间
startWorkOrderDate.MaxDate = currentDateTime;
// 确保 DateTimePicker 控件的值不大于当前时间
if (startWorkOrderDate.Value > currentDateTime)
{
startWorkOrderDate.Value = currentDateTime;
}
DateTime selectedDateTime = startWorkOrderDate.Value;
this.endWorkOrderDate.Value = selectedDateTime.AddMinutes(30);
}
public void InitDate()
{
DateTime workOrderDate = DateTime.Now;
endWorkOrderDate.Value = workOrderDate; //截止采集的时间 2023-10-23
startWorkOrderDate.Value = workOrderDate.AddMinutes(-30); //增加30分钟
endWorkOrderDate.Enabled= false;
}
按钮设置代码
#region 设置按钮状态
public void SetEnableState(bool state, string button_name = null)
{
if (button_name == "btnStartCaiJi")//采集按钮
{
if (state)
{
btnStartCaiJi.Text = "开始采集工单信息";
btnStartCaiJi.Enabled = true;
}
else
{
btnStartCaiJi.Enabled = false;
btnStartCaiJi.Text = "正在采集工单信息..";
}
}
else if (button_name == "btnStopCaiJi")
{
if (state)
{
btnStopCaiJi.Text = "停止采集工单信息";
btnStopCaiJi.Enabled = true;
}
else
{
btnStopCaiJi.Enabled = false;
btnStopCaiJi.Text = "正在停止采集工单信息..";
}
}
else
{
btnStartCaiJi.Enabled = true;
btnStopCaiJi.Enabled = false;
}
}
#endregion