948 lines
45 KiB
C#
948 lines
45 KiB
C#
using Api.Framework;
|
||
using Api.Framework.Cps;
|
||
using Api.Framework.Enums;
|
||
using Api.Framework.Model;
|
||
using Api.Framework.SDK;
|
||
using Api.Framework.Tools;
|
||
using Chat.Framework.Utils;
|
||
using Chat.Framework.WXSdk;
|
||
using Chat.Framework.WXSdk.Implement;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using UI.Framework.Controls;
|
||
using UI.Framework.Forms;
|
||
using Weixin.CircleTools;
|
||
using Weixin.CircleTools.Entitys;
|
||
using Weixin.CircleTools.Properties;
|
||
using static Api.Framework.ApiClient;
|
||
using static CircleFriendsTools.Enums;
|
||
using ChooseType = CircleFriendsTools.Enums.ChooseType;
|
||
|
||
namespace CircleFriendsTools
|
||
{
|
||
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
|
||
{
|
||
#region 任务列表展示
|
||
pageControl1.Bind((page, size) =>
|
||
{
|
||
var session = ApiClient.GetSession();
|
||
var parm = session.NewParamMap();
|
||
parm.setPageParamters(page, size);
|
||
var result = session.FindPage<fl_plugin_circletools_taskinfos>("select * from fl_plugin_circletools_taskinfos", parm);
|
||
return new PageControl.SerchResult() { Result = result.DataList, Total = result.Total };
|
||
}, gridControl1, 40, true, true);
|
||
|
||
label1.Visible = gridView1.RowCount == 0;
|
||
|
||
#endregion
|
||
|
||
#region 控件赋值
|
||
foreach (TransmitStyleType item in Enum.GetValues(typeof(TransmitStyleType)))
|
||
{
|
||
this.comboBoxEdit1.Properties.Items.Add(item.ToString());
|
||
}
|
||
this.comboBoxEdit1.SelectedIndex = (int)Class1.Config.TransmitStyle;
|
||
this.textEdit4.Text = Class1.Config.LocationContent;
|
||
this.textEdit5.Text = Class1.Config.GatherPoiCrowd;
|
||
this.textEdit1.Text = Class1.Config.MonitorCrowd;
|
||
this.numericUpDown1.Value = Class1.Config.MonitorIntervalTime;
|
||
this.textEdit2.Text = Class1.Config.CustomWebApi;
|
||
this.buttonCheck2.Checked = Class1.Config.AutoPraise;
|
||
this.numericUpDown2.Value = Class1.Config.AutoPraiseInterval;
|
||
this.numericUpDown3.Value = Class1.Config.CustomWebApiIntervalTime;
|
||
this.buttonCheck1.Checked = linkLabel3.Enabled = Class1.Config.AutoTurn;
|
||
this.checkBox1.Checked = Class1.Config.Turn_Obstinate;
|
||
this.memoEdit6.Text = Class1.Config.AppendComment;
|
||
|
||
var adzone = ApiClient.GetSession().FindAdzoneInfos().FirstOrDefault(f => f.custom_type == Resources.NonautomaticSoftwareType && f.alliance_id == (int)CpsType.阿里妈妈);
|
||
if (adzone != null)
|
||
textBox1.Text = adzone.adzone_name;
|
||
#endregion
|
||
|
||
#region 将enum的值加载到列表中 修改的将勾选
|
||
var clients = Chat.Framework.ChatClient.WXClient;
|
||
foreach (var client in clients.Values)
|
||
{
|
||
if ((client.WeixinType == WeixinType.Grpc微信 || client.WeixinType == WeixinType.Hook微信) && client.Status == WxStatus.在线)
|
||
{
|
||
if (Class1.Config.send_usernames.Select(f => f.Trim()).Contains(client.WeixinHao.Trim()))
|
||
checkedComboBoxEdit_UsernameType.Properties.Items.Add(client.WeixinHao, client.User.Nick.ToString(), CheckState.Checked, true);
|
||
else
|
||
checkedComboBoxEdit_UsernameType.Properties.Items.Add(client.WeixinHao, client.User.Nick.ToString(), CheckState.Unchecked, true);
|
||
|
||
if (Class1.Config.manually_send_usernames.Contains(client.WeixinHao.Trim()))
|
||
checkedComboBoxEdit1.Properties.Items.Add(client.WeixinHao, client.User.Nick.ToString(), CheckState.Checked, true);
|
||
else
|
||
checkedComboBoxEdit1.Properties.Items.Add(client.WeixinHao, client.User.Nick.ToString(), CheckState.Unchecked, true);
|
||
|
||
if (Class1.Config.transpond_send_usernames.Contains(client.WeixinHao.Trim()))
|
||
checkedComboBoxEdit2.Properties.Items.Add(client.WeixinHao, client.User.Nick.ToString(), CheckState.Checked, true);
|
||
else
|
||
checkedComboBoxEdit2.Properties.Items.Add(client.WeixinHao, client.User.Nick.ToString(), CheckState.Unchecked, true);
|
||
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
comboBox1.SelectedIndex = (int)Class1.Config.qrImage;
|
||
|
||
ShowContentModel();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
|
||
}
|
||
|
||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(textEdit2.Text) && !Regex.IsMatch(textEdit2.Text.Replace("&", "&"), CsharpHttpHelper.HttpExtend.REGEX_GETURL, RegexOptions.IgnoreCase))
|
||
{
|
||
if (MessageBox.Show("系统监听的链接不合法,是否继续保存?", "系统提示", MessageBoxButtons.YesNo) == DialogResult.No)
|
||
e.Cancel = true;
|
||
else
|
||
textEdit2.Text = string.Empty;
|
||
}
|
||
|
||
Class1.Config.send_usernames = checkedComboBoxEdit_UsernameType.Properties.GetCheckedItems().ToString().Replace(", ", ",").Replace(" ,", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
||
|
||
Class1.Config.manually_send_usernames = checkedComboBoxEdit1.Properties.GetCheckedItems().ToString().Replace(", ", ",").Replace(" ,", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
||
|
||
Class1.Config.transpond_send_usernames = checkedComboBoxEdit2.Properties.GetCheckedItems().ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
||
|
||
if (!e.Cancel)
|
||
{
|
||
tokenSource.Cancel();
|
||
Class1.Config.TransmitStyle = (TransmitStyleType)Enum.ToObject(typeof(TransmitStyleType), comboBoxEdit1.SelectedIndex);
|
||
Class1.Config.LocationContent = textEdit4.Text;
|
||
Class1.Config.GatherPoiCrowd = textEdit5.Text;
|
||
Class1.Config.MonitorCrowd = textEdit1.Text.Trim();
|
||
Class1.Config.MonitorIntervalTime = (int)numericUpDown1.Value;
|
||
Class1.Config.CustomWebApi = textEdit2.Text.Trim();
|
||
Class1.Config.AutoPraise = buttonCheck2.Checked;
|
||
Class1.Config.AutoPraiseInterval = (int)numericUpDown2.Value;
|
||
Class1.Config.CustomWebApiIntervalTime = (int)numericUpDown3.Value;
|
||
Class1.Config.AutoTurn = buttonCheck1.Checked;
|
||
Class1.Config.Turn_Obstinate = checkBox1.Checked;
|
||
Class1.Config.qrImage = (QrImageType)comboBox1.SelectedIndex;
|
||
Class1.Config.AppendComment = memoEdit6.Text;
|
||
|
||
Api.Framework.Tools.Util.Save(Class1.Config); //保存配置文件
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
e.Cancel = true;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 检测新账号
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void simpleButton1_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(textEdit1.Text))
|
||
{
|
||
var form = new XtraForm1(textEdit1.Text.Trim());
|
||
form.ShowDialog();
|
||
}
|
||
else ShowError("用户账号为空,不支持检测");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private CancellationTokenSource tokenSource = new CancellationTokenSource();
|
||
|
||
private void simpleButton2_Click(object sender, EventArgs e)
|
||
{
|
||
this.simpleButton2.Enabled = false;
|
||
try
|
||
{
|
||
if (string.IsNullOrWhiteSpace(checkedComboBoxEdit1.Text)) throw new Exception("选择要发送的微信");
|
||
if (!string.IsNullOrWhiteSpace(memoEdit1.Text))
|
||
{
|
||
if (!Regex.IsMatch(memoEdit1.Text, @"\[图片=([^]]*)\]"))
|
||
{
|
||
ShowError($"推送内容中至少添加一张图片.");
|
||
return;
|
||
}
|
||
var clients = Chat.Framework.ChatClient.WXClient;
|
||
var usernames = checkedComboBoxEdit1.Properties.GetCheckedItems().ToString().Replace(", ", ",").Replace(" ,", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
||
var t1 = Task.Run(() =>
|
||
{
|
||
Parallel.ForEach(clients.Values, item =>
|
||
{
|
||
try
|
||
{
|
||
if ((item.WeixinType == WeixinType.Grpc微信 || item.WeixinType == WeixinType.Hook微信) && item.Status == WxStatus.在线 && usernames.Contains(item.WeixinHao.Trim()))
|
||
{
|
||
var json = item.SendCircle(memoEdit1.Text);
|
||
if (!string.IsNullOrWhiteSpace(memoEdit2.Text))
|
||
{
|
||
var reg = Regex.Match(json, @"<id>(?<id>\d{15,})</id>");//获取返回的朋友圈id
|
||
if (reg.Success) item.SendCircleComment(item.User.Username, reg.Groups["id"].Value, memoEdit2.Text.Trim());
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
EventClient.OnEvent(this, $"{ex.Message}");
|
||
}
|
||
});
|
||
}, tokenSource.Token);
|
||
t1.ContinueWith(f =>
|
||
{
|
||
this.Invoke(new Action(() =>
|
||
{
|
||
this.simpleButton2.Enabled = true;
|
||
if (!this.IsDisposed) ShowSuccess("推送发送成功");
|
||
}));
|
||
}, tokenSource.Token);
|
||
}
|
||
else
|
||
if (!this.IsDisposed) ShowError($"推送内容不能为空.");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
this.simpleButton2.Enabled = true;
|
||
if (!this.IsDisposed) ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void 增加任务ToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var sendTask = new SendTaskForm();
|
||
if (sendTask.ShowDialog() == DialogResult.OK)
|
||
{
|
||
pageControl1.GotoPage(1);
|
||
label1.Visible = gridView1.RowCount == 0;
|
||
ApiClient.GetSession().FindTaskInfosTempGroups(true);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void 修改选中ToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var selectRows = gridView1.GetSelectedRows();
|
||
|
||
if (selectRows.Length > 0)
|
||
{
|
||
var id = int.Parse(gridView1.GetRowCellValue(selectRows[0], "id").ToString());
|
||
var task_name = gridView1.GetRowCellValue(selectRows[0], "task_name").ToString();
|
||
var task_working_day = gridView1.GetRowCellValue(selectRows[0], "task_working_day").ToString();
|
||
var task_time = gridView1.GetRowCellValue(selectRows[0], "task_time").ToString();
|
||
var task_sendtext = gridView1.GetRowCellValue(selectRows[0], "task_sendtext").ToString();
|
||
var task_comment = string.Empty;
|
||
if (gridView1.GetRowCellValue(selectRows[0], "task_comment") != null)
|
||
task_comment = (gridView1.GetRowCellValue(selectRows[0], "task_comment").ToString());
|
||
var is_circulate = (gridView1.GetRowCellValue(selectRows[0], "is_circulate").ToString());
|
||
var robotnames = (gridView1.GetRowCellValue(selectRows[0], "robotnames").ToString());
|
||
|
||
var sendTask = new SendTaskForm(new fl_plugin_circletools_taskinfos() { id = id, task_name = task_name, task_working_day = task_working_day, task_time = task_time, task_sendtext = task_sendtext, is_circulate = is_circulate == "是" ? ChooseType.是 : ChooseType.否, task_comment = task_comment, robotnames = robotnames });
|
||
if (sendTask.ShowDialog() == DialogResult.OK)
|
||
{
|
||
pageControl1.GotoPage(1);
|
||
label1.Visible = gridView1.RowCount == 0;
|
||
ApiClient.GetSession().FindTaskInfosTempGroups(true);
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void 删除选中ToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var selectRows = gridView1.GetSelectedRows();
|
||
|
||
if (selectRows.Length > 0)
|
||
{
|
||
var id = long.Parse(gridView1.GetRowCellValue(selectRows[0], "id").ToString());
|
||
var session = ApiClient.GetSession();
|
||
session.ExcuteSQL("delete from fl_plugin_circletools_taskinfos where id = @id", new { id = id });
|
||
pageControl1.GotoPage(1);
|
||
label1.Visible = gridView1.RowCount == 0;
|
||
ApiClient.GetSession().FindTaskInfosTempGroups(true);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void simpleButton3_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var tgwForm = new SetTGWForm();
|
||
tgwForm.ShowDialog();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void buttonCheck1_Click(object sender, EventArgs e)
|
||
{
|
||
this.linkLabel3.Enabled = buttonCheck1.Checked;
|
||
}
|
||
|
||
private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e)
|
||
{
|
||
if (comboBoxEdit1.SelectedIndex == 1)
|
||
labelControl15.Enabled = buttonCheck1.Checked = linkLabel3.Enabled = buttonCheck1.Enabled = true;
|
||
else
|
||
labelControl15.Enabled = buttonCheck1.Checked = linkLabel3.Enabled = buttonCheck1.Enabled = false;
|
||
}
|
||
|
||
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var tgwForm = new SetTGWForm();
|
||
tgwForm.ShowDialog();
|
||
var session = ApiClient.GetSession();
|
||
session.FindAdzoneInfos(true);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void linkLabel4_MouseHover(object sender, EventArgs e)
|
||
{
|
||
toolTip_Text.AutoPopDelay = 10000;
|
||
toolTip_Text.InitialDelay = 500;
|
||
toolTip_Text.ReshowDelay = 500;
|
||
toolTip_Text.ShowAlways = true;
|
||
toolTip_Text.SetToolTip(this.linkLabel4, @"您可以从""发单群""、""选品网站""
|
||
直接复制推广文案到此处即可");
|
||
}
|
||
|
||
private void linkLabel6_MouseHover(object sender, EventArgs e)
|
||
{
|
||
toolTip_Pic.AutoPopDelay = 10000;
|
||
toolTip_Pic.InitialDelay = 500;
|
||
toolTip_Pic.ReshowDelay = 500;
|
||
toolTip_Pic.ShowAlways = true;
|
||
toolTip_Pic.SetToolTip(this.linkLabel6, @"不填写图片, 程序会自动检测默认图片。
|
||
填写图片后,程序会以提供的图片为准。");
|
||
}
|
||
|
||
private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var tgwObj = CpsClient.SelectTuiguangwei(CpsType.阿里妈妈);
|
||
if (tgwObj != null)
|
||
{
|
||
var tgw = tgwObj as Tuiguangwei;
|
||
var session = ApiClient.GetSession();
|
||
var adzone = session.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.custom_type == Resources.NonautomaticSoftwareType);
|
||
if (adzone != null)//数据库中存在的情况
|
||
{
|
||
adzone.adzone_pid_cps_name = tgw.Member.username;
|
||
adzone.adzone_pid = tgw.Pid;
|
||
adzone.adzone_name = tgw.Name;
|
||
|
||
session.SaveOrUpdate(adzone);
|
||
}
|
||
else
|
||
{
|
||
//session.BeginTransaction();
|
||
try
|
||
{
|
||
adzone = new fl_adzone_info()
|
||
{
|
||
custom_type = Resources.NonautomaticSoftwareType, //自定义类型
|
||
adzone_name = tgw.Name, //推广位名称
|
||
adzone_pid = tgw.Pid, //推广位pid
|
||
adzone_pid_cps_name = tgw.Member.username, //推广位cps名称
|
||
alliance_id = (int)CpsType.阿里妈妈, //联盟id
|
||
robot_id = 0, //机器人id
|
||
group_id = string.Empty, //群id
|
||
member_id = 0, //私人id
|
||
is_download = false, //不下载
|
||
onoff = false //不禁用
|
||
};
|
||
session.SaveOrUpdate(adzone);
|
||
if (0 == adzone.id)
|
||
throw new Exception("对不起,推广位设置异常,请稍后重试!");
|
||
//else session.Commit();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//session.Rollback();
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
textBox1.Text = adzone.adzone_name;
|
||
session.FindAdzoneInfos(true);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存一键发送的产品数据
|
||
/// </summary>
|
||
Dictionary<string, object> goodsDic = new Dictionary<string, object>();
|
||
|
||
/// <summary>
|
||
/// 加入产品待发送区
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void button1_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (gridView2.RowCount >= 9) throw new Exception("最多添加9个产品");
|
||
if (string.IsNullOrWhiteSpace(memoEdit3.Text.Trim())) throw new Exception("请添加文案");
|
||
var adzone = ApiClient.GetSession().FindAdzoneInfos().FirstOrDefault(f => f.custom_type == Resources.NonautomaticSoftwareType && f.alliance_id == (int)CpsType.阿里妈妈);
|
||
if (adzone == null) throw new Exception("请先设置推广位");
|
||
var tbAnalysis = new TBHelper.TbAnalysis();
|
||
|
||
var itemId = tbAnalysis.FindTbItemIdByStr(memoEdit3.Text);
|
||
if (string.IsNullOrWhiteSpace(itemId)) throw new Exception("您发送的链接中未带宝贝信息!");
|
||
var date = DateTime.Now.ToString("yyyyMMdd");
|
||
if (Class1.Config.recordSendGoods.ContainsKey(date))
|
||
{
|
||
if (Class1.Config.recordSendGoods[date].Contains(itemId))
|
||
throw new Exception("今天已经发送过该商品,以防重复系统予以提示!");
|
||
}
|
||
|
||
var tb_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈 && f.username == adzone.adzone_pid_cps_name);
|
||
var api = CpsClient.CreateAlimamaRequest(tb_cps);
|
||
if (api == null) throw new Exception("创建阿里妈妈API请求失败");
|
||
|
||
var activityId = string.Empty;
|
||
var urls = CsharpHttpHelper.HttpExtend.RegexMatchesUrl(memoEdit3.Text);
|
||
if (urls != null && urls.Count != 0)
|
||
{
|
||
foreach (var item in urls)
|
||
{
|
||
if (item.ToLower().Contains("uland.taobao"))
|
||
{
|
||
var reg = Regex.Match(item, @"activityId=(?<活动ID>[A-Za-z0-9]+)", RegexOptions.IgnoreCase);
|
||
if (reg.Success)
|
||
activityId = reg.Groups["活动ID"].Value;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
AnalyzeGoods analyze = new AnalyzeGoods();
|
||
//goodsinfo.goods_id = itemId;
|
||
var goodsinfo = analyze.FindGoodsInfoToItemId(itemId, adzone.adzone_pid_cps_name, adzone.adzone_pid);
|
||
analyze.AnalysisText(memoEdit3.Text, goodsinfo);
|
||
if (goodsinfo != null)
|
||
{
|
||
var coupon_url = goodsinfo.shopping_url + "&activityId=" + activityId;
|
||
//检测优惠券的有效性
|
||
var coupon = api.CheckCoupon(coupon_url);
|
||
//查到宝贝返利存在异常,直接提示没有返利
|
||
if (coupon == null || coupon.retStatus != 0) throw new Exception("该产品优惠券已经过期,请重新获取。");
|
||
|
||
var lastIndex = memoEdit3.Text.Trim().LastIndexOf(@"
|
||
");
|
||
var describe = memoEdit3.Text.Substring(lastIndex + 4).Trim();
|
||
|
||
decimal final_price = 0;
|
||
if (double.Parse(coupon.startFee) > goodsinfo.normal_price)
|
||
final_price = (decimal)goodsinfo.normal_price;
|
||
else
|
||
final_price = ((decimal)goodsinfo.normal_price - decimal.Parse(coupon.amount));
|
||
var good = new { goods_name = goodsinfo.goods_name, price = goodsinfo.normal_price, final_price = final_price, rebate = final_price * ((decimal)goodsinfo.promotion_rate / 100m), rate = goodsinfo.promotion_rate + "%", pic = string.IsNullOrEmpty(textBox3.Text.Trim()) ? goodsinfo.goods_thumbnail_url : textBox3.Text.Trim(), coupon_discount = decimal.Parse(coupon.amount), itemid = goodsinfo.goods_id, describe = goodsinfo.goods_desc, coupon_url = coupon_url };
|
||
if (goodsDic.ContainsKey(goodsinfo.goods_name)) throw new Exception("对不起,该商品已存在");
|
||
goodsDic.Add(goodsinfo.goods_name, good);
|
||
gridControl2.DataSource = goodsDic.Values.ToList();
|
||
label_num.Text = (int.Parse(label_num.Text) + 1).ToString();
|
||
memoEdit3.Text = textBox3.Text = string.Empty;
|
||
}
|
||
else
|
||
throw new Exception("该商品无返利");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 一键发单删除选中项
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void 删除选中ToolStripMenuItem1_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var selectRows = gridView2.GetSelectedRows();
|
||
|
||
if (selectRows.Length > 0)
|
||
{
|
||
var title = gridView2.GetRowCellValue(selectRows[0], "goods_name").ToString();
|
||
goodsDic.Remove(title);
|
||
gridControl2.DataSource = goodsDic.Values.ToList();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private StringBuilder strb = new StringBuilder();
|
||
|
||
private void gridView3_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var selectRow = gridView3.GetSelectedRows()[0];
|
||
var modelName = this.gridView3.GetRowCellValue(selectRow, "ModelName").ToString();//获取列的数据
|
||
var sendModel = Class1.Config.send_templates.FirstOrDefault(f => f.ModelName == modelName);
|
||
if (sendModel != null)
|
||
memoEdit4.Text = sendModel.Content;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 显示一键发送模板(刷新)
|
||
/// </summary>
|
||
private void ShowContentModel()
|
||
{
|
||
try
|
||
{
|
||
//var modelName = Class1.Config.send_templates.Select(f => f.ModelName).ToList();
|
||
//gridControl3.DataSource = modelName;
|
||
List<object> obj = new List<object>();
|
||
foreach (var item in Class1.Config.send_templates)
|
||
{
|
||
obj.Add(new { ModelName = item.ModelName });
|
||
}
|
||
gridControl3.DataSource = obj;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void button4_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var form = new SetSendModelForm();
|
||
form.ShowDialog();
|
||
ShowContentModel();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private async void simpleButton3_Click_1(object sender, EventArgs e)
|
||
{
|
||
simpleButton3.Enabled = false;
|
||
|
||
Class1.Config.TransmitStyle = (TransmitStyleType)Enum.ToObject(typeof(TransmitStyleType), comboBoxEdit1.SelectedIndex);
|
||
Class1.Config.LocationContent = textEdit4.Text;
|
||
Class1.Config.GatherPoiCrowd = textEdit5.Text;
|
||
Class1.Config.MonitorCrowd = textEdit1.Text.Trim();
|
||
Class1.Config.MonitorIntervalTime = (int)numericUpDown1.Value;
|
||
Class1.Config.CustomWebApi = textEdit2.Text.Trim();
|
||
Class1.Config.AutoPraise = buttonCheck2.Checked;
|
||
Class1.Config.AutoPraiseInterval = (int)numericUpDown2.Value;
|
||
Class1.Config.CustomWebApiIntervalTime = (int)numericUpDown3.Value;
|
||
Class1.Config.AutoTurn = buttonCheck1.Checked;
|
||
Class1.Config.Turn_Obstinate = checkBox1.Checked;
|
||
Class1.Config.transpond_send_usernames = checkedComboBoxEdit2.Properties.GetCheckedItems().ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
||
Util.Save(Class1.Config); //保存配置文件
|
||
|
||
var t1 = Task.Run(delegate
|
||
{
|
||
var timer = TimerTask.GetTimer<MonitorThread>() as MonitorThread;
|
||
timer.Run("立即检测", false);
|
||
}, tokenSource.Token);
|
||
|
||
try
|
||
{
|
||
await t1;
|
||
if (!this.IsDisposed) ShowSuccess("立即执行定时检测完成!");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
if (!this.IsDisposed) ShowError(ex);
|
||
}
|
||
simpleButton3.Enabled = true;
|
||
}
|
||
|
||
private async void simpleButton4_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
await Task.Run(delegate
|
||
{
|
||
var clients = Chat.Framework.ChatClient.WXClient.Values.ToList(); //获取机器人集合
|
||
var monitorCrowd = string.Empty; //用户的集合中的id
|
||
List<Dictionary<string, object>> news = null; //获取朋友圈的动态
|
||
foreach (var item in clients)
|
||
{
|
||
try
|
||
{
|
||
if ((item.WeixinType == WeixinType.Grpc微信 || item.WeixinType == WeixinType.Hook微信) && item.Status == WxStatus.在线)
|
||
{
|
||
monitorCrowd = textEdit5.Text.Trim();//undone 获取用户真正的微信id
|
||
news = item.FindCircle(monitorCrowd);
|
||
|
||
//EventClient.OnEvent(this, $"采集账号:{item.WeixinHao} 采集量 = {news.Count}");
|
||
|
||
if (news != null && news.Count != 0)
|
||
{
|
||
if (news[0].ContainsKey("ObjectDesc"))
|
||
{
|
||
var objectDesc = news[0]["ObjectDesc"].ToString(); //新动态的内容部分
|
||
|
||
var reg = Regex.Match(objectDesc, @"(?<地址信息>\<location.*?\</location\>)");
|
||
if (reg.Success)
|
||
{
|
||
var location = reg.Groups["地址信息"].Value;
|
||
reg = Regex.Match(location, @"poiClassifyId=""(?<poi>[^""]+?)""");
|
||
if (reg.Success)
|
||
{
|
||
textEdit4.Text = reg.Groups["poi"].ToString();
|
||
if (!this.IsDisposed) ShowSuccess("获取poi信息成功");
|
||
return;
|
||
}
|
||
else
|
||
if (!this.IsDisposed) ShowError("获取poi信息失败");
|
||
}
|
||
else
|
||
if (!this.IsDisposed) ShowError("该用户第一条朋友圈不存在poi信息");
|
||
}
|
||
}
|
||
else
|
||
if (!this.IsDisposed) ShowError("该用户朋友圈无动态");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
EventClient.OnEvent(this, $"朋友圈工具 - 朋友圈获取poi异常:{ex.Message}");
|
||
}
|
||
}
|
||
}, tokenSource.Token);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
if (!this.IsDisposed) ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void checkedComboBoxEdit_UsernameType_EditValueChanged(object sender, EventArgs e)
|
||
{
|
||
if (checkedComboBoxEdit_UsernameType.EditValue != null)
|
||
Class1.Config.send_usernames = checkedComboBoxEdit_UsernameType.EditValue.ToString().Split(',').Select(f => f.Trim()).ToList();
|
||
else
|
||
Class1.Config.send_usernames = new List<string>();
|
||
}
|
||
|
||
private void hyperlinkLabelControl2_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
var image = new ImageForm();
|
||
image.ShowDialog();
|
||
if (!string.IsNullOrWhiteSpace(Class1.Config.NetworkUrl))
|
||
{
|
||
var strb = new StringBuilder();
|
||
var images = Class1.Config.NetworkUrl.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||
for (int i = 0; i < images.Length; i++)
|
||
{
|
||
strb.AppendLine($"[图片={images[i]}]");
|
||
}
|
||
memoEdit1.Text += strb.ToString();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void hyperlinkLabelControl1_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
Stream mystream;
|
||
OpenFileDialog openfiledialog1 = new OpenFileDialog();
|
||
openfiledialog1.Multiselect = true;//允许同时选择多个文件
|
||
openfiledialog1.InitialDirectory = "c:\\";
|
||
openfiledialog1.Filter = "All Image Files|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png;*.tif;*.tiff|(*.bmp)|*.bmp|(*.ico)|*.ico|(*.gif)|(*.gif)|(*.jpg)|*.jpg;*.jpeg|(*.png)|*.png";
|
||
openfiledialog1.FilterIndex = 1;
|
||
openfiledialog1.RestoreDirectory = true;
|
||
var dialog = openfiledialog1.ShowDialog();
|
||
if (dialog == DialogResult.OK)
|
||
{
|
||
if ((mystream = openfiledialog1.OpenFile()) != null)
|
||
{
|
||
for (int fi = 0; fi < openfiledialog1.FileNames.Length; fi++)
|
||
{
|
||
memoEdit1.Text += $"[图片={openfiledialog1.FileNames[fi].ToString()}]\r\n"; //保存图片路径
|
||
}
|
||
mystream.Close();
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private async void button3_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
button3.Enabled = false;
|
||
fl_plugin_circletools_taskinfos t1 = await Task.Run(() =>
|
||
{
|
||
try
|
||
{
|
||
if (goodsDic.Count == 0) throw new Exception("请添加要发布的产品文案");
|
||
if (string.IsNullOrWhiteSpace(memoEdit4.Text)) throw new Exception("请选择模板");
|
||
var adzone = ApiClient.GetSession().FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.custom_type == Resources.NonautomaticSoftwareType);
|
||
if (adzone == null) throw new Exception("请先设置推广位");
|
||
if (string.IsNullOrWhiteSpace(checkedComboBoxEdit_UsernameType.Text)) throw new Exception("请选择要发送的机器人");
|
||
QrImageType qrImage = QrImageType.模板A;
|
||
this.Invoke(new Action(() =>
|
||
{
|
||
qrImage = (comboBox1.Text == "模板A" ? ApiClient.QrImageType.模板A : ApiClient.QrImageType.模板B);
|
||
}));
|
||
strb.Length = 0;
|
||
var tb_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈 && f.username == adzone.adzone_pid_cps_name);
|
||
var api = CpsClient.CreateAlimamaRequest(tb_cps);
|
||
var pid_split = adzone.adzone_pid.Split('_');
|
||
var tbAnalysis = new TBHelper.TbAnalysis();
|
||
strb.Append(memoEdit4.Text);
|
||
foreach (var item in goodsDic.Values)
|
||
{
|
||
var pic = item.GetType().GetProperty("pic").GetValue(item).ToString();
|
||
var item_id = item.GetType().GetProperty("itemid").GetValue(item).ToString();
|
||
var title = item.GetType().GetProperty("goods_name").GetValue(item).ToString();
|
||
var coupon_click_url = item.GetType().GetProperty("coupon_url").GetValue(item).ToString();//优惠券地址
|
||
var describe = item.GetType().GetProperty("describe").GetValue(item).ToString();//商品介绍
|
||
|
||
//获取淘口令
|
||
var tklInfo = tbAnalysis.FindTKL(coupon_click_url, api);
|
||
if (tklInfo == null) continue;
|
||
var shortUrl = tbAnalysis.FindShortUrlBySrcUrl(coupon_click_url, api);
|
||
var temp_url = api.ComposeTbClick(item_id, pic, tklInfo.tkl, tklInfo.isoUrl, true, adzone.adzone_pid, Setting.SystemConfig.ZjyComposeType == ComposeType.有推荐商品, (int)DwzType.快站短网址, isCircleZjy: true);
|
||
|
||
//var temp_url = ApiClient.ShortURL(api.ComposeTbClick(item_id, pic, tkl, coupon_click_url)).Result;//中间页地址
|
||
|
||
strb.Append("[图片=" + ApiClient.GetQRImage(title, item.GetType().GetProperty("price").GetValue(item).ToString(), item.GetType().GetProperty("coupon_discount").GetValue(item).ToString(), item.GetType().GetProperty("final_price").GetValue(item).ToString(), pic, temp_url, qrImage, CpsType.阿里妈妈, describe) + "]");
|
||
}
|
||
|
||
var taskinfo = new fl_plugin_circletools_taskinfos();
|
||
taskinfo.task_sendtext = strb.ToString();
|
||
taskinfo.task_comment = memoEdit5.Text;
|
||
taskinfo.robotnames = checkedComboBoxEdit_UsernameType.EditValue.ToString();
|
||
return Task.FromResult(taskinfo);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
return null;
|
||
}, tokenSource.Token);
|
||
|
||
button3.Enabled = true;
|
||
AddAutoSendForm sendForm = new AddAutoSendForm(t1);
|
||
sendForm.ShowDialog();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 一键发单 发布按钮
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private async void button2_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
button2.Enabled = false;
|
||
if (goodsDic.Count == 0) throw new Exception("请添加要发布的产品文案");
|
||
if (string.IsNullOrWhiteSpace(memoEdit4.Text)) throw new Exception("请选择模板");
|
||
var adzone = ApiClient.GetSession().FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.custom_type == Resources.NonautomaticSoftwareType);
|
||
if (adzone == null) throw new Exception("请先设置推广位");
|
||
if (string.IsNullOrWhiteSpace(checkedComboBoxEdit_UsernameType.Text)) throw new Exception("请选择要发送的机器人");
|
||
var qrImage = (comboBox1.Text == "模板A" ? ApiClient.QrImageType.模板A : ApiClient.QrImageType.模板B);
|
||
strb.Length = 0;
|
||
var t3 = Task.Factory.StartNew(() =>
|
||
{
|
||
var tb_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈 && f.username == adzone.adzone_pid_cps_name);
|
||
var api = CpsClient.CreateAlimamaRequest(tb_cps);
|
||
//var pid_split = adzone.adzone_pid.Split('_');
|
||
var tbAnalysis = new TBHelper.TbAnalysis();
|
||
strb.Append(memoEdit4.Text);
|
||
foreach (var item in goodsDic.Values)
|
||
{
|
||
var pic = item.GetType().GetProperty("pic").GetValue(item).ToString();
|
||
var item_id = item.GetType().GetProperty("itemid").GetValue(item).ToString();
|
||
var title = item.GetType().GetProperty("goods_name").GetValue(item).ToString();
|
||
var coupon_click_url = item.GetType().GetProperty("coupon_url").GetValue(item).ToString();//优惠券地址
|
||
var describe = item.GetType().GetProperty("describe").GetValue(item).ToString();//商品介绍
|
||
|
||
var date = DateTime.Now.ToString("yyyyMMdd");
|
||
|
||
if (!Class1.Config.recordSendGoods.ContainsKey(date))
|
||
{
|
||
Class1.Config.recordSendGoods.Clear();
|
||
Class1.Config.recordSendGoods.Add(date, new List<string>() { item_id });
|
||
}
|
||
else
|
||
Class1.Config.recordSendGoods[date].Add(item_id);
|
||
|
||
//获取淘口令
|
||
var tklInfo = tbAnalysis.FindTKL(coupon_click_url, api);
|
||
if (tklInfo == null) continue;
|
||
|
||
var shortUrl = tbAnalysis.FindShortUrlBySrcUrl(coupon_click_url, api);
|
||
|
||
var temp_url = api.ComposeTbClick(item_id, pic, tklInfo.tkl, tklInfo.isoUrl, true, adzone.adzone_pid, ApiClient.Setting.SystemConfig.ZjyComposeType == ComposeType.有推荐商品, (int)DwzType.快站短网址, isCircleZjy: true);
|
||
//var temp_url = ApiClient.ShortURL(api.ComposeTbClick(item_id, pic, tkl, coupon_click_url)).Result;//中间页地址
|
||
|
||
strb.Append("[图片=" + GetQRImage(title, item.GetType().GetProperty("price").GetValue(item).ToString(), item.GetType().GetProperty("coupon_discount").GetValue(item).ToString(), item.GetType().GetProperty("final_price").GetValue(item).ToString(), pic, temp_url, qrImage, CpsType.阿里妈妈, describe) + "]");
|
||
}
|
||
|
||
var usernames = checkedComboBoxEdit_UsernameType.EditValue.ToString().Split(',').Select(f => f.Trim()).ToList();
|
||
var clients = Chat.Framework.ChatClient.WXClient;
|
||
foreach (var item in clients.Values)
|
||
{
|
||
try
|
||
{
|
||
if ((item.WeixinType == WeixinType.Grpc微信 || item.WeixinType == WeixinType.Hook微信) && usernames.Contains(item.WeixinHao.Trim()) && item.Status == WxStatus.在线)
|
||
{
|
||
var json = item.SendCircle(strb.ToString());
|
||
if (!string.IsNullOrWhiteSpace(memoEdit5.Text))
|
||
{
|
||
var reg = Regex.Match(json, @"<id>(?<id>\d{15,})</id>");//获取返回的朋友圈id
|
||
if (reg.Success) item.SendCircleComment(item.User.Username, reg.Groups["id"].Value, memoEdit5.Text.Trim());
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
EventClient.OnEvent(this, $"一键发送异常:{item.User.Nick} - {ex.Message}");
|
||
}
|
||
}
|
||
}, tokenSource.Token);
|
||
|
||
try
|
||
{
|
||
await t3;
|
||
if (!this.IsDisposed)
|
||
{
|
||
button2.Enabled = true;
|
||
label_num.Text = "0";
|
||
gridControl2.DataSource = null;
|
||
ShowSuccess("发送成功");
|
||
goodsDic.Clear();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{ }
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
button2.Enabled = true;
|
||
ShowError(ex);
|
||
}
|
||
}
|
||
|
||
private void memoEdit3_Click(object sender, EventArgs e)
|
||
{
|
||
memoEdit3.SelectAll();
|
||
}
|
||
|
||
private void labelControl29_Click(object sender, EventArgs e)
|
||
{
|
||
memoEdit6.Text += labelControl29.Text;
|
||
}
|
||
}
|
||
} |