C# 模拟人工点击采集数据代码

99 阅读4分钟

这是模拟人工去点击拉取方法的代码。 实现了,选中一个时段,然后每次每次往后拉取 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 到 当前时间

image.png

image.png

代码

    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