old_flsystem/应用/CleaningTools/MainForm.cs

742 lines
31 KiB
C#

using Api.Framework;
using Api.Framework.Model;
using Api.Framework.Tools;
using Chat.Framework.WXSdk;
using Chat.Framework.WXSdk.Implement;
using CleaningTools.Entity;
using CleaningTools.Properties;
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.Utils.Extensions;
using UI.Framework.Forms;
namespace CleaningTools
{
public partial class MainForm : BaseForm
{
public MainForm()
{
InitializeComponent();
this.Text = Resources.MainFormTitle;
}
public void CloseForm()
{
try
{
if (!this.IsDisposed)
{
this.Invoke(new Action(delegate
{
this.Close();
this.Dispose();
}));
}
}
catch (Exception ex)
{
ShowError(ex);
}
}
private void MainForm_Load(object sender, EventArgs e)
{
try
{
toolStripComboBox1.Items.Clear();
dateTimePicker1.Value = DateTime.Parse(Class1.Config.timing_time);
#region
toolStripComboBox1.Items.Add($"选择机器人");
toolStripComboBox1.Items.Add($"全部机器人");
toolStripComboBox2.Items.Add($"选择机器人");
toolStripComboBox2.Items.Add($"全部机器人");
toolStripComboBox1.SelectedIndex = toolStripComboBox2.SelectedIndex = 0;
Dictionary<int, string> dicstr = new Dictionary<int, string>();
var clients = Chat.Framework.ChatClient.WXClient;
foreach (var item in clients)
{
if ((item.Value.WeixinType == WeixinType.Grpc微信 || item.Value.WeixinType == WeixinType.Hook微信) && item.Value.Status == WxStatus.线)
{
dicstr.Add(toolStripComboBox1.Items.Count, item.Value.WeixinHao);
toolStripComboBox1.Items.Add($"{item.Value.User.Nick}({item.Value.WeixinHao})");
toolStripComboBox2.Items.Add($"{item.Value.User.Nick}({item.Value.WeixinHao})");
}
}
toolStripComboBox1.Tag = toolStripComboBox2.Tag = dicstr;
#endregion
this.checkBox3.Checked = Class1.Config.switch_delete_friend;
this.checkBox1.Checked = Class1.Config.timing;
this.numericUpDown1.Value = Class1.Config.autocleanday;
this.numericUpDown2.Value = Class1.Config.cleansleep;
this.numericUpDown3.Value = Class1.Config.cleanslimit;
this.dateTimePicker3.Value = DateTime.Parse(Class1.Config.clear_msg_time);
this.checkBox6.Checked = Class1.Config.isAutoClearChatMsg;
this.dateTimePicker2.Value = DateTime.Now.Date.AddMonths(-10);
simpleButton2.Enabled = !isRunFlag;
}
catch (Exception ex)
{
ShowError(ex);
}
}
/// <summary>
/// 缓存目录文件删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton1_Click(object sender, EventArgs e)
{
Loding.ShowWaitForm();
ThreadPool.QueueUserWorkItem(f =>
{
try
{
var tools = new Tools();
var cachePath = Util.MapPath(Util.MapPath(@"Cache"));
if (Directory.Exists(cachePath))
{
tools.DelectDir(cachePath);
}
cachePath = Util.MapPath(Util.MapPath(@"Assembly\apifile"));
if (Directory.Exists(cachePath))
{
tools.DelectDir(cachePath, true);
}
//清理超过7天的加人数据
var session = ApiClient.GetSession();
if (session.TableExist("fl_plugin_userfission_applyfriend_info")) session.ExcuteSQL("delete from fl_plugin_userfission_applyfriend_info where crt_time <= @crttime", new { crttime = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd HH:mm:ss") });
//清理问答7天未响应数据
if (session.TableExist("fl_plugin_autoanswer__log")) session.ExcuteSQL("delete from fl_plugin_autoanswer__log where datetime <= @crttime", new { crttime = DateTime.Now.AddDays(-4).ToString("yyyy-MM-dd HH:mm:ss") });
//清理聊天记录3天之前的
if (session.TableExist("fl_plugin_messagesupervises_messinfo")) session.ExcuteSQL("delete from fl_plugin_messagesupervises_messinfo where send_time <= @time", new { time = DateTime.Now.AddDays(-3) });
//清理查询记录7天前的所有记录
if (session.TableExist("fl_query_hist")) session.ExcuteSQL("delete from fl_query_hist where crt_time <= @time", new { time = DateTime.Now.Date.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss") });
//清理Debug调试数据
if (session.TableExist("fl_debug_log")) session.ExcuteSQL("delete from fl_debug_log where crt_time <= @crt_time", new { crt_time = DateTime.Now.AddDays(-1) });
ShowSuccessAutoClose("清理完成!");
}
catch (Exception ex)
{
this.Invoke(new Action(delegate
{
ShowErrorAutoClose(ex);
}));
}
finally
{
try
{
this.Invoke(new Action(delegate
{
Loding.CloseWaitForm();
}));
}
catch (Exception)
{ }
}
});
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
Class1.Config.switch_delete_friend = this.checkBox3.Checked;
Class1.Config.timing = this.checkBox1.Checked;
Class1.Config.autocleanday = (int)this.numericUpDown1.Value;
Class1.Config.cleansleep = (int)this.numericUpDown2.Value;
Class1.Config.cleanslimit = (int)this.numericUpDown3.Value;
Class1.Config.clear_msg_time = dateTimePicker3.Value.ToString("HH:mm");
Class1.Config.isAutoClearChatMsg = checkBox6.Checked;
Util.Save(Class1.Config);
}
catch (Exception)
{ }
}
#region
/// <summary>
/// 清粉之选机器人账号改变按钮状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (toolStripComboBox1.SelectedIndex == 0)
{
ToolStripMenuItem.Enabled = false;
ToolStripMenuItem.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F);
ToolStripMenuItem.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64);
this.gridControl1.DataSource = null;//清空数据
}
else
{
ToolStripMenuItem.Enabled = true;
ToolStripMenuItem.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F, System.Drawing.FontStyle.Underline);
ToolStripMenuItem.ForeColor = System.Drawing.Color.Blue;
List<KeyValuePair<string, WeixinBase>> clients = null;
if (toolStripComboBox1.SelectedIndex == 1) clients = Chat.Framework.ChatClient.WXClient.Where(f => (f.Value.WeixinType == WeixinType.Grpc微信 || f.Value.WeixinType == WeixinType.Hook微信) && f.Value.Status == WxStatus.线).ToList();
else
{
var dicstr = toolStripComboBox1.Tag as Dictionary<int, string>;
var weixinHao = dicstr[toolStripComboBox1.SelectedIndex];
clients = Chat.Framework.ChatClient.WXClient.Where(f => f.Value.WeixinHao == weixinHao && (f.Value.WeixinType == WeixinType.Grpc微信 || f.Value.WeixinType == WeixinType.Hook微信) && f.Value.Status == WxStatus.线).ToList();
}
if (clients != null && clients.Count > 0) gridControl1.DataSource = CleaningThread.GetUnFriend(clients);//展示数据
}
}
/// <summary>
/// 机器人好友僵尸粉列表(展示)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
Loding.ShowWaitForm();//开启等待
_SetControlEnabled(false);
List<KeyValuePair<string, WeixinBase>> clients = null;
if (toolStripComboBox1.SelectedIndex == 0)//还未选择
throw new Exception("请选择要清理的机器人账号");
else if (toolStripComboBox1.SelectedIndex == 1)//全部机器人的僵尸粉
clients = Chat.Framework.ChatClient.WXClient.Where(f => (f.Value.WeixinType == WeixinType.Grpc微信 || f.Value.WeixinType == WeixinType.Hook微信) && f.Value.Status == WxStatus.线).ToList();
else//个体
{
var dicstr = toolStripComboBox1.Tag as Dictionary<int, string>;
var weixinHao = dicstr[toolStripComboBox1.SelectedIndex];
clients = Chat.Framework.ChatClient.WXClient.Where(f => f.Value.WeixinHao == weixinHao && (f.Value.WeixinType == WeixinType.Grpc微信 || f.Value.WeixinType == WeixinType.Hook微信) && f.Value.Status == WxStatus.线).ToList();
}
if (clients != null && clients.Count != 0)
{
foreach (var item in clients)
{
if (item.Value.GetType() == typeof(WXClientImpl_IPAD))
{
var wx = item.Value as WXClientImpl_IPAD;
if (item.Value.Status == WxStatus.线 && !wx.IsRefreshContact)
item.Value.RefreshContact();
}
else if (item.Value.GetType() == typeof(WXClientImpl_HOOK))
{
var wx = item.Value as WXClientImpl_HOOK;
wx.GetZombie();
}
}
ShowSuccess("已启动任务缓慢刷新通讯录,耗时可能较长!");
}
else
throw new Exception("没有在线的微信号,或者没有符合的微信号");
}
catch (Exception ex)
{
ShowError(ex);
}
finally
{
_SetControlEnabled(true);
Loding.CloseWaitForm();//关闭等待
}
}
/// <summary>
/// 设置控件的交互状态
/// </summary>
/// <param name="flag"></param>
private void _SetControlEnabled(bool flag = false)
{
foreach (var item in menuStrip1.Items)
{
if (item is ToolStripTextBox)
(item as ToolStripTextBox).Enabled = flag;
else if (item is ToolStripMenuItem)
(item as ToolStripMenuItem).Enabled = flag;
else if (item is ToolStripComboBox)
(item as ToolStripComboBox).Enabled = flag;
}
}
#endregion
private string[] not_delete = new string[] { "fmessage", "floatbottle" };
private bool delete_ing = false;
private void DeleteIng(int count = 0)
{
if (count == 0)
{
delete_ing = false;
toolStripComboBox1.Enabled = ToolStripMenuItem.Enabled = ToolStripMenuItem2.Enabled = true;
label2.Visible = this.label1.Visible = this.progressBar1.Visible = false;
gridControl1.DataSource = new List<UnFriends>();
}
else
{
toolStripComboBox1.Enabled = ToolStripMenuItem.Enabled = ToolStripMenuItem2.Enabled = false;
delete_ing = true;
this.label1.Text = "准备就绪";
this.progressBar1.Maximum = count;
this.progressBar1.Value = 0;
label2.Visible = this.label1.Visible = this.progressBar1.Visible = true;
}
}
Thread delete_thread = null;
/// <summary>
/// 一键清理僵尸粉
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem2_Click(object sender, EventArgs e)
{
try
{
if (delete_thread != null && delete_thread.IsAlive) throw new Exception("当前已经有线程正在执行清理操作,请稍后!");
var unFriends = this.gridView1.DataSource as List<UnFriends>;
if (unFriends == null || unFriends.Count == 0) throw new Exception("当前列表中,没有可清理数据!");
//初始化删除操作
DeleteIng(unFriends.Count);
//启动线程去执行删除
delete_thread = new Thread(new ThreadStart(delegate
{
try
{
int number = 0;
do
{
if (!delete_ing) return;//便于做终止操作,防止卡死
var item = unFriends.FirstOrDefault();//取出默认数据
if (item == null) break;//没有数据了
try
{
var wxBase = item.Client; //获取对应的微信对象
if (wxBase.Status == WxStatus.线)
{
number++;
var result = wxBase.DeleteFriend(item.Friend.UserName);//删除
this.Invoke(new Action(delegate
{
this.label1.Text = string.Format("删除第{0}位:{1}={2}", number, item.weixinnice, string.IsNullOrEmpty(result) ? "成功" : result);
this.progressBar1.Value++;
Application.DoEvents();//不卡界面刷新
})); //更新进度条
Thread.Sleep(Class1.Config.cleansleep * 1000);
}
if (wxBase.GetType() == typeof(WXClientImpl_HOOK))
{
var hook = wxBase as WXClientImpl_HOOK;
hook.Friends.Remove(item.Friend.UserName);
}
}
catch { }
unFriends.Remove(item);//不管是否删除成功,移除列表数据
} while (true);
}
catch (Exception) { }
finally
{
this.Invoke(new Action(delegate
{
ShowSuccess("删除好友完成!");
DeleteIng();
}));
}
}));
delete_thread.IsBackground = true;
delete_thread.Start();
}
catch (Exception ex)
{
ShowError(ex);
}
}
/// <summary>
/// gridviwe 增加标识列
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
/// <summary>
/// 僵尸粉清理之休眠时间,自动清理天数,输入限制(只能为数字)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != '\b')//这是允许输入退格键
{
if ((e.KeyChar < '0') || (e.KeyChar > '9'))//这是允许输入0-9数字
{
e.Handled = true;
}
}
}
private void label2_Click(object sender, EventArgs e)
{
try
{
//传0表示终止
DeleteIng();
//强制销毁
if (delete_thread != null) delete_thread.Abort();
}
catch (Exception) { }
delete_thread = null;
}
/// <summary>
/// 清粉之选机器人账号改变按钮状态 - 未交互的用户
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripComboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (toolStripComboBox2.SelectedIndex == 0)
{
toolStripMenuItem3.Enabled = false;
toolStripMenuItem3.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F);
toolStripMenuItem3.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64);
this.gridControl2.DataSource = null;//清空数据
}
else
{
toolStripMenuItem3.Enabled = true;
toolStripMenuItem3.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F, System.Drawing.FontStyle.Underline);
toolStripMenuItem3.ForeColor = System.Drawing.Color.Blue;
List<KeyValuePair<string, WeixinBase>> clients = null;
if (toolStripComboBox2.SelectedIndex == 1) clients = Chat.Framework.ChatClient.WXClient.Where(f => f.Value.WeixinType == WeixinType.Grpc微信 && f.Value.Status == WxStatus.线).ToList();
else
{
var dicstr = toolStripComboBox2.Tag as Dictionary<int, string>;
var weixinHao = dicstr[toolStripComboBox2.SelectedIndex];
clients = Chat.Framework.ChatClient.WXClient.Where(f => f.Value.WeixinHao == weixinHao && f.Value.WeixinType == WeixinType.Grpc微信 && f.Value.Status == WxStatus.线).ToList();
}
if (clients != null && clients.Count > 0) gridControl2.DataSource = CleaningThread.GetNoInteractionFriend(clients, (int)numericUpDown4.Value);//展示数据
}
}
//??
private void label5_Click(object sender, EventArgs e)
{
try
{
//传0表示终止
DeleteIng();
//强制销毁
if (delete_thread != null) delete_thread.Abort();
}
catch (Exception) { }
delete_thread = null;
}
private void gridView2_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
private void numericUpDown4_ValueChanged(object sender, EventArgs e)
{
toolStripComboBox2_SelectedIndexChanged(null, null);
}
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
try
{
Loding.ShowWaitForm();//开启等待
_SetControlEnabled(false);
List<KeyValuePair<string, WeixinBase>> clients = null;
if (toolStripComboBox2.SelectedIndex == 0)//还未选择
throw new Exception("请选择要清理的机器人账号");
else if (toolStripComboBox2.SelectedIndex == 1)//全部机器人的僵尸粉
{
clients = Chat.Framework.ChatClient.WXClient.Where(f => f.Value.WeixinType == WeixinType.Grpc微信 && f.Value.Status == WxStatus.线).ToList();
}
else//个体
{
var dicstr = toolStripComboBox2.Tag as Dictionary<int, string>;
var weixinHao = dicstr[toolStripComboBox2.SelectedIndex];
clients = Chat.Framework.ChatClient.WXClient.Where(f => f.Value.WeixinHao == weixinHao && f.Value.WeixinType == WeixinType.Grpc微信 && f.Value.Status == WxStatus.线).ToList();
}
if (clients != null && clients.Count != 0)
{
foreach (var item in clients)
{
var ipad = item.Value as WXClientImpl_IPAD;
if (ipad.Status == WxStatus.线 && !ipad.IsRefreshContact)
{
ipad.RefreshContact();
}
}
ShowSuccess("已启动任务缓慢刷新通讯录,耗时可能较长!");
}
else
throw new Exception("没有在线的微信号,或者没有符合的微信号");
}
catch (Exception ex)
{
ShowError(ex);
}
finally
{
_SetControlEnabled(true);
Loding.CloseWaitForm();//关闭等待
}
}
private bool delete_ing2 = false;
private void DeleteIng2(int count = 0)
{
if (count == 0)
{
delete_ing2 = false;
toolStripComboBox2.Enabled = toolStripMenuItem3.Enabled = toolStripMenuItem5.Enabled = true;
label5.Visible = this.label4.Visible = this.progressBar5.Visible = false;
gridControl2.DataSource = new List<UnFriends>();
}
else
{
toolStripComboBox2.Enabled = toolStripMenuItem3.Enabled = toolStripMenuItem5.Enabled = false;
delete_ing2 = true;
this.label4.Text = "准备就绪";
this.progressBar5.Maximum = count;
this.progressBar5.Value = 0;
label5.Visible = this.label4.Visible = this.progressBar5.Visible = true;
}
}
private void toolStripMenuItem5_Click(object sender, EventArgs e)
{
try
{
if (delete_thread != null && delete_thread.IsAlive) throw new Exception("当前已经有线程正在执行清理操作,请稍后!");
var unFriends = this.gridView2.DataSource as List<UnFriends>;
if (unFriends == null || unFriends.Count == 0) throw new Exception("当前列表中,没有可清理数据!");
//初始化删除操作
DeleteIng(unFriends.Count);
//启动线程去执行删除
delete_thread = new Thread(new ThreadStart(delegate
{
try
{
int number = 0;
do
{
if (!delete_ing) return;//便于做终止操作,防止卡死
var item = unFriends.FirstOrDefault();//取出默认数据
if (item == null) break;//没有数据了
try
{
var wxBase = item.Client; //获取对应的微信对象
if (wxBase.Status == WxStatus.线)
{
number++;
var result = wxBase.DeleteFriend(item.Friend.UserName);//删除
this.Invoke(new Action(delegate
{
this.label4.Text = string.Format("删除第{0}位:{1}={2}", number, item.weixinnice, string.IsNullOrEmpty(result) ? "成功" : result);
this.progressBar5.Value++;
System.Windows.Forms.Application.DoEvents();//不卡界面刷新
})); //更新进度条
Thread.Sleep(Class1.Config.cleansleep * 1000);
}
}
catch { }
unFriends.Remove(item);//不管是否删除成功,移除列表数据
} while (true);
}
catch (Exception) { }
finally
{
this.Invoke(new Action(delegate
{
ShowSuccess("删除好友完成!");
DeleteIng();
}));
}
}));
delete_thread.IsBackground = true;
delete_thread.Start();
}
catch (Exception ex)
{
ShowError(ex);
}
}
private void button1_Click(object sender, EventArgs e)
{
var tb = checkBox2.Checked;
var jd = checkBox4.Checked;
var pdd = checkBox5.Checked;
var wph = checkBox7.Checked;
var datetime = dateTimePicker2.Value;
try
{
if (!(tb || jd || pdd || wph)) throw new Exception("请选择要清理的联盟");
if (XtraMessageBox.Show($@"确定要清理{datetime.ToString("yyyy-MM-dd HH:mm:ss")}之前的订单吗?
{datetime.ToString("yyyy-MM-dd HH:mm:ss")}", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
{
return;
}
}
catch (Exception ex)
{
ShowError(ex);
return;
}
button1.Enabled = false;
Task.Run(() =>
{
try
{
var session = ApiClient.GetSession();
if (tb)
{
//session.Deleteable<fl_order_alimama>(f => f.create_time < datetime).ExecuteCommand();
session.ExcuteSQL("DELETE FROM fl_order_alimama where create_time < @datetime", new { datetime = datetime });
}
if (jd)
{
//session.Deleteable<fl_order_jingdong>(f => f.orderTime < datetime).ExecuteCommand();
session.ExcuteSQL("DELETE FROM fl_order_jingdong where orderTime < @datetime", new { datetime = datetime });
}
if (pdd)
{
//session.Deleteable<fl_order_pinduoduo>(f => f.order_create_time < datetime).ExecuteCommand();
session.ExcuteSQL("DELETE FROM fl_order_pinduoduo where order_create_time < @datetime", new { datetime = datetime });
}
if (wph)
{
var timeSpan = Util.GetTimeSpan(datetime);
//session.Deleteable<fl_order_weipinhui>(f => f.orderTime < timeSpan).ExecuteCommand();
session.ExcuteSQL("DELETE FROM fl_order_weipinhui where orderTime < @datetime", new { datetime = timeSpan });
}
ShowSuccessAutoClose("历史订单清理完成");
}
catch (Exception ex)
{
ShowError(ex);
}
finally
{
this.Invoke(new Action(() =>
{
button1.Enabled = true;
}));
}
});
ShowSuccessAutoClose("已成功创建历史订单清理任务,后台运行中");
}
private static bool isRunFlag = false;
private void simpleButton2_Click(object sender, EventArgs e)
{
var msg = "清理任务执行完成,一共执行了{0}个机器人";
//try
//{
simpleButton2.Enabled = false;
var task = Task.Run(() =>
{
try
{
isRunFlag = true;
var clients = Chat.Framework.ChatClient.WXClient.Values.Where(f => f.WeixinType == WeixinType.Hook微信 && f.Status == WxStatus.线).ToList();
msg = string.Format(msg, clients.Count);
foreach (var client in clients)
{
try
{
client.ClearChatHistoryMsg();
Thread.Sleep(3300);
}
catch (Exception ex)
{ }
}
if (!this.IsDisposed)
{
this.simpleButton2.InvokeSafe(() =>
{
simpleButton2.Enabled = true;
});
}
isRunFlag = false;
}
catch (Exception ex)
{ }
});
//task.Wait();
//}
//catch (Exception ex)
//{
// msg = "清理任务异常:" + ex.Message;
//}
//finally
//{
// simpleButton2.Enabled = true;
//}
//ShowSuccessAutoClose(msg);
}
}
}