using Api.Framework; using Api.Framework.Enums; using Api.Framework.Model; using Api.Framework.SDK; using System.Text; using Api.Framework.Tools; using Chat.Framework; using Chat.Framework.WXSdk.Implement; using DevExpress.XtraEditors; using SignContacts.Entitys; using SignContacts.Enums; using SignContacts.Properties; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using UI.Framework.Forms; using System.Reflection; using System.Data; namespace SignContacts { public partial class MainForm : BaseForm { SqlSugarClient session = null; public MainForm() { InitializeComponent(); this.Text = Resources.MainFormTitle; session = ApiClient.GetSession(); } public void Initialization() { try { var caption = string.Empty; switch (radioGroup1.SelectedIndex) { case 0: caption = "订单笔数低于"; break; case 1: caption = "查询次数低于"; break; case 2: caption = "提现次数低于"; break; case 3: caption = "邀请人数低于"; break; default: caption = "数量低于"; break; } var session = ApiClient.GetSession(); var groups = session.FindSigns(int.Parse(this.radioGroup1.EditValue.ToString()), true); } catch (Exception ex) { BaseForm.ShowError(ex); } } 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 { te_NotesFormat.Text = Class1.Config.NotesFormat; bc_NotesSwitch.Checked = Class1.Config.NotesSwitch == SwitchType.开启; te_NewFriend.Text = Class1.Config.NotesFormat_NewFirend; te_QueryNotOrder.Text = Class1.Config.NotesFormat_QueryNotOrder; te_FirstOrder.Text = Class1.Config.NotesFormat_FirstOrder; _RefreshData(); } catch (Exception ex) { ShowError(ex); } } private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { try { if (listView1.SelectedItems.Count == 0) { _ButtonEnabled(false); return; } else { var id = long.Parse(listView1.SelectedItems[0].SubItems[0].Text); List signInfoS = null; if (listView1.Tag != null) signInfoS = listView1.Tag as List; else signInfoS = session.Find("select * from fl_plugin_signcontacts_sign_info where signtype = @signtype order by amount asc", new { signtype = xtraTabControl1.TabIndex }); if (signInfoS != null && signInfoS.Count != 0) { var signInfo = signInfoS.FirstOrDefault(f => f.id == id); if (signInfo == null) return; _FillDate(signInfo); _ButtonEnabled(true); } } } catch (Exception ex) { ShowError(ex); } } /// /// 填充数据到控件中 /// private void _FillDate(fl_plugin_signcontacts_sign_info signInfo) { radioGroup1.SelectedIndex = (int)signInfo.signtype; var variate = string.Empty; switch ((int)signInfo.signtype) { case 0: variate = Class1.Config.DayVariate; break; case 1: variate = Class1.Config.QueryVariate; break; case 2: variate = Class1.Config.OrderVariate; break; case 3: variate = Class1.Config.RefundVariate; break; case 4: variate = Class1.Config.InviteVariate; break; } textEdit5.Text = variate; numericUpDown1.Value = (decimal)signInfo.amount; textEdit4.Text = signInfo.sign; groupControl4.Tag = signInfo; } /// /// 按钮状态 /// /// private void _ButtonEnabled(bool flag) { simpleButton2.Enabled = simpleButton3.Enabled = flag; } /// /// 增加 /// /// /// private void simpleButton1_Click(object sender, EventArgs e) { try { fl_plugin_signcontacts_sign_info signInfo = new fl_plugin_signcontacts_sign_info(); //if (groupControl4.Tag != null) // signInfo = groupControl4.Tag as fl_plugin_signcontacts_sign_info; //else // signInfo = new fl_plugin_signcontacts_sign_info(); signInfo.id = 0; signInfo.signtype = (SignType)radioGroup1.SelectedIndex; signInfo.amount = (long)numericUpDown1.Value; List signInfoS = null; //if (listView1.Tag != null) // signInfoS = listView1.Tag as List; //else signInfoS = session.Find("select * from fl_plugin_signcontacts_sign_info where signtype = @signtype order by amount asc", new { signtype = xtraTabControl1.TabIndex }); if (signInfoS != null && signInfoS.Count != 0) { var _signInfo = signInfoS.FirstOrDefault(f => f.signtype == signInfo.signtype && f.amount == signInfo.amount); if (_signInfo != null) throw new Exception("该条件已经存在,无法增加"); } signInfo.sign = textEdit4.Text.Trim(); session.Insertable(signInfo).ExecuteCommand(); _RefreshData((int)signInfo.signtype); simpleButton2.Enabled = simpleButton3.Enabled = false; } catch (Exception ex) { if (ex.Message.Contains("not unique")) ShowError("数据重复"); else ShowError(ex); } } /// /// 修改 /// /// /// private void simpleButton2_Click(object sender, EventArgs e) { try { fl_plugin_signcontacts_sign_info signInfo = null; if (groupControl4.Tag != null) { signInfo = groupControl4.Tag as fl_plugin_signcontacts_sign_info; signInfo.signtype = (SignType)radioGroup1.SelectedIndex; signInfo.amount = (long)numericUpDown1.Value; signInfo.sign = textEdit4.Text.Trim(); List signInfoS = null; if (listView1.Tag != null) signInfoS = listView1.Tag as List; else signInfoS = session.Find("select * from fl_plugin_signcontacts_sign_info where signtype = @signtype order by amount asc", new { signtype = xtraTabControl1.TabIndex }); if (signInfoS != null && signInfoS.Count != 0) { var _signInfo = signInfoS.FirstOrDefault(f => f.signtype == signInfo.signtype && f.amount == signInfo.amount); //if (_signInfo != null) throw new Exception("该条件已经存在,无法增加"); } session.Updateable(signInfo).ExecuteCommand(); _RefreshData((int)signInfo.signtype); } } catch (Exception ex) { ShowError(ex); } } /// /// 删除 /// /// /// private void simpleButton3_Click(object sender, EventArgs e) { try { fl_plugin_signcontacts_sign_info signInfo = null; if (groupControl4.Tag != null) { signInfo = groupControl4.Tag as fl_plugin_signcontacts_sign_info; session.Deleteable(signInfo).ExecuteCommand(); _RefreshData((int)signInfo.signtype); } } catch (Exception ex) { ShowError(ex); } } /// /// tab下标改变 (可以当刷新用) /// /// /// private void xtraTabControl1_SelectedPageChanging(object sender, DevExpress.XtraTab.TabPageChangingEventArgs e) { _RefreshData(e.Page.TabIndex); } /// /// 数显数据 /// private void _RefreshData(int index = 0) { try { listView1.Tag = null; if (groupControl4.Tag == null) _ButtonEnabled(false); var signInfoS = session.Find("select * from fl_plugin_signcontacts_sign_info where signtype = @signtype order by amount asc", new { signtype = index }); listView1.Items.Clear(); foreach (var sign in signInfoS) { var item = new ListViewItem(); item.Text = sign.id.ToString(); item.SubItems.Add(sign.amount.ToString()); item.SubItems.Add(sign.sign.ToString()); listView1.Items.Add(item); } listView1.Tag = signInfoS; session.FindSignInfos((SignType)index, true); } catch (Exception ex) { ShowError(ex); } } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { SaveConfig(); } private void SaveConfig() { try { Class1.Config.NotesFormat = te_NotesFormat.Text; Class1.Config.NotesSwitch = bc_NotesSwitch.Checked ? SwitchType.开启 : SwitchType.关闭; Class1.Config.NotesFormat_NewFirend = te_NewFriend.Text; Class1.Config.NotesFormat_QueryNotOrder = te_QueryNotOrder.Text; Class1.Config.NotesFormat_FirstOrder = te_FirstOrder.Text; Util.Save(Class1.Config); } catch (Exception ex) { } } private void radioGroup1_SelectedIndexChanged(object sender, EventArgs e) { try { var variate = string.Empty; switch (radioGroup1.SelectedIndex) { case 0: variate = Class1.Config.DayVariate; break; case 1: variate = Class1.Config.QueryVariate; break; case 2: variate = Class1.Config.OrderVariate; break; case 3: variate = Class1.Config.RefundVariate; break; case 4: variate = Class1.Config.InviteVariate; break; } textEdit5.Text = variate; xtraTabControl1.SelectedTabPageIndex = radioGroup1.SelectedIndex; } catch (Exception ex) { ShowError(ex); } } private void hyperlinkLabelControl1_Click(object sender, EventArgs e) { try { if (sender is HyperlinkLabelControl) { var label = sender as HyperlinkLabelControl; if (index == 0) te_NewFriend.Text += label.Text; else if (index == 1) te_QueryNotOrder.Text += label.Text; else if (index == 2) te_FirstOrder.Text += label.Text; else if (index == 3) te_NotesFormat.Text += label.Text; else te_NotesFormat.Text += label.Text; } } catch (Exception ex) { ShowError(ex); } } private void button1_Click(object sender, EventArgs e) { try { Class1.Config.NotesSwitch = SwitchType.开启; SaveConfig(); if (string.IsNullOrWhiteSpace(Class1.Config.NotesFormat) && string.IsNullOrWhiteSpace(Class1.Config.NotesFormat_NewFirend) && string.IsNullOrWhiteSpace(Class1.Config.NotesFormat_QueryNotOrder) && string.IsNullOrWhiteSpace(Class1.Config.NotesFormat_FirstOrder)) { throw new Exception("请先设置所有备注格式"); } if (MessageBox.Show(@"是否同步用户标记? 执行的过程会比较漫长", "温馨提示", MessageBoxButtons.OKCancel) == DialogResult.OK) { SaveConfig(); button1.Enabled = false; var t = Task.Run(() => { SyncMembersSign(); try { this.Invoke(new Action(() => { button1.Enabled = true; })); } catch (Exception) { } }); } } catch (Exception ex) { ShowErrorAutoClose(ex); } } #region 一键同步用户昵称 private void SyncMembersSign() { try { var wxs = ChatClient.WXClient.Values.Where(f => f.Status == Chat.Framework.WXSdk.WxStatus.在线).ToList(); List tasks = new List(); for (int i = 0; i < wxs.Count; i++) { var wx = wxs[i]; var client = wx as WXClientImpl_IPAD; if (client == null) continue; tasks.Add(Task.Run(() => { if (!client.IsRefreshContact) client.RefreshContact(); var endTmp = DateTime.Now.AddMinutes(15); do { if (!client.IsRefreshContact) break; Thread.Sleep(500); } while (endTmp >= DateTime.Now); if (client.Friends == null) { EventClient.OnEvent("", $"获取{client.WeixinHao}({client.User.Nick}),好友列表异常,终止同步!"); return; } var friends = client.Friends.Where(f => !f.Key.Contains("@") && f.Key != "newsapp" && f.Key != "weixin" && !f.Key.StartsWith("gh_")).Select(f => f.Value).ToList(); if (friends != null && friends.Count != 0) { //#region 导出用户 //this.Invoke(new Action(() => //{ // gridControl1.DataSource = friends; //})); //#endregion var c = new Class1(); var session = ApiClient.GetSession(); foreach (var friend in friends) { var member = session.Find("select * from fl_member_info where username = @username", new { username = friend.UserName }).FirstOrDefault(); if (member == null) { member = new fl_member_info() { crt_time = DateTime.Now, usernick = friend.NickName, realnick = friend.NickName, robot_name = client.WeixinHao, robot_type = client.WeixinType == WeixinType.QYHook微信 ? ChatType.企业微信 : ChatType.微信, username = friend.UserName, alipay_name = string.Empty, alipay_num = string.Empty, remark = string.Empty }; member = session.Saveable(member).ExecuteReturnEntity(); } c.NewUsername(client, member, UserType.未知); } } EventClient.OnEvent("", $"{client.WeixinHao}({client.User.Nick}),同步好友标记执行完毕!"); })); Thread.Sleep(10); } Task.WaitAll(tasks.ToArray()); } catch (Exception ex) { } } #endregion private void labelControl11_Click(object sender, EventArgs e) { } private void 导出为EceToolStripMenuItem_Click(object sender, EventArgs e) { try { if (this.gridControl1 == null) throw new Exception("没有需要导出的数据!"); if (XtraMessageBox.Show("确定要将本页面数据导入到Excel内?", "请选择", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { var table = this.gridControl1.DataSource as DataTable; //if (table == null || table.Rows.Count == 0) throw new Exception("没有需要导出的数据!"); this.saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls"; if (this.saveFileDialog1.ShowDialog(this) == DialogResult.OK) { DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(); this.gridControl1.ExportToXls(this.saveFileDialog1.FileName); XtraMessageBox.Show("恭喜您,已完成数据导出!", "导出完成", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } catch (Exception vErr) { XtraMessageBox.Show(vErr.Message, "导出错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void tabPage3_MouseClick(object sender, MouseEventArgs e) { } public int index = 0; private void te_NewFriend_Enter(object sender, EventArgs e) { index = 0; } private void te_QueryNotOrder_Enter(object sender, EventArgs e) { index = 1; } private void te_FirstOrder_Enter(object sender, EventArgs e) { index = 2; } private void te_NotesFormat_Enter(object sender, EventArgs e) { index = 3; } } }