420 lines
20 KiB
C#
420 lines
20 KiB
C#
|
using Api.Framework;
|
|||
|
using Api.Framework.Enums;
|
|||
|
using Api.Framework.Model;
|
|||
|
using Api.Framework.Tools;
|
|||
|
using Chat.Framework;
|
|||
|
using Chat.Framework.WXSdk.IPAD;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows.Forms;
|
|||
|
using UI.Framework.Forms;
|
|||
|
|
|||
|
namespace FLSystem.Forms
|
|||
|
{
|
|||
|
public partial class OneKeyExchangeForm : BaseForm
|
|||
|
{
|
|||
|
List<point_manage_control.exchange_list_temp> exchangeList = null;
|
|||
|
string name = string.Empty;
|
|||
|
public OneKeyExchangeForm(List<point_manage_control.exchange_list_temp> exchangeList, string name)
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
this.exchangeList = exchangeList;
|
|||
|
this.name = name;
|
|||
|
}
|
|||
|
|
|||
|
private void OneKeyExchangeForm_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Task.Run(new Action(() =>
|
|||
|
{
|
|||
|
Run();
|
|||
|
}));
|
|||
|
}
|
|||
|
|
|||
|
private object lock_obj4 = new object();
|
|||
|
private void AddJindu(string text = "", int max = 0)
|
|||
|
{
|
|||
|
base.UpdateUI(() =>
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
lock (lock_obj4)
|
|||
|
{
|
|||
|
if (!string.IsNullOrEmpty(text) && max == 0)
|
|||
|
{
|
|||
|
richTextBox1.AppendText(text + "\r\n");
|
|||
|
}
|
|||
|
else if (!string.IsNullOrEmpty(text) && max != 0)
|
|||
|
{
|
|||
|
richTextBox1.AppendText(text + "\r\n");
|
|||
|
this.progressBar1.Value = 0;
|
|||
|
this.progressBar1.Maximum = max;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (this.progressBar1.Value < this.progressBar1.Maximum) this.progressBar1.Value++;
|
|||
|
richTextBox1.AppendText($"一共{this.progressBar1.Maximum}个任务,正在执行第:{this.progressBar1.Value}个\r\n");
|
|||
|
}
|
|||
|
richTextBox1.Focus();
|
|||
|
}
|
|||
|
Application.DoEvents();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
public void Run()
|
|||
|
{
|
|||
|
var pointConfig = ApiClient.GetPointManageConfig();
|
|||
|
if (pointConfig == null)
|
|||
|
{
|
|||
|
AddJindu($@"获取基础配置超时,请稍后重试");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
AddJindu("获取基础配置完成");
|
|||
|
|
|||
|
switch (name)
|
|||
|
{
|
|||
|
case "商户支付":
|
|||
|
Shanghu();
|
|||
|
break;
|
|||
|
case "微信支付":
|
|||
|
WeixinPay();
|
|||
|
break;
|
|||
|
case "没收兑换":
|
|||
|
MoShou();
|
|||
|
break;
|
|||
|
case "退回兑换":
|
|||
|
TuiHui();
|
|||
|
break;
|
|||
|
case "已审核":
|
|||
|
YiShen();
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
AddJindu("\r\n所有操作执行完毕~!!!");
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 已审核
|
|||
|
/// </summary>
|
|||
|
private void YiShen()
|
|||
|
{
|
|||
|
AddJindu("执行已审核", exchangeList.Count);
|
|||
|
foreach (var exchange in exchangeList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
exchange.state = ApplyType.已审核;
|
|||
|
exchange.remark = "一键审核【已审核】";
|
|||
|
Update(exchange);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu(ex.Message);
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
AddJindu();
|
|||
|
Thread.Sleep(200);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 退回
|
|||
|
/// </summary>
|
|||
|
private void TuiHui()
|
|||
|
{
|
|||
|
AddJindu("执行退回兑换", exchangeList.Count);
|
|||
|
foreach (var exchange in exchangeList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
exchange.state = ApplyType.退回兑换;
|
|||
|
exchange.remark = "一键审核【退回兑换】";
|
|||
|
Update(exchange);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu(ex.Message);
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
AddJindu();
|
|||
|
Thread.Sleep(200);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 没收
|
|||
|
/// </summary>
|
|||
|
private void MoShou()
|
|||
|
{
|
|||
|
AddJindu("执行没收兑换", exchangeList.Count);
|
|||
|
foreach (var exchange in exchangeList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
exchange.state = ApplyType.没收兑换;
|
|||
|
exchange.remark = "一键审核【没收兑换】";
|
|||
|
Update(exchange);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu(ex.Message);
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
AddJindu();
|
|||
|
Thread.Sleep(200);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 微信支付
|
|||
|
/// </summary>
|
|||
|
private void WeixinPay()
|
|||
|
{
|
|||
|
var session = ApiClient.GetSession();
|
|||
|
|
|||
|
AddJindu("执行微信支付", exchangeList.Count);
|
|||
|
|
|||
|
foreach (var exchange in exchangeList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (exchange.chattype != Api.Framework.SDK.ChatType.微信)
|
|||
|
throw new Exception($"平台:{exchange.chattype},{exchange.robot_nick}({exchange.robot_name}),暂时不支持自动转账,跳过该兑换");
|
|||
|
|
|||
|
var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
|
|||
|
if (client == null) throw new Exception(exchange.robot_name + ",该帐号没有登录!");
|
|||
|
if (client.WeixinType != Chat.Framework.WXSdk.Implement.WeixinType.Grpc微信)
|
|||
|
throw new Exception($"平台:{exchange.chattype},{exchange.robot_nick}({exchange.robot_name}),您当前登录的微信版本,暂不支持自动转账,跳过该兑换");
|
|||
|
|
|||
|
var robot = session.FindRobotInfo(exchange.robot_name, exchange.chattype);
|
|||
|
if (robot == null) throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),机器人数据获取异常,跳过该兑换");
|
|||
|
var passInfo = session.FindWeixinpassword(robot.id);//微信自动转账
|
|||
|
|
|||
|
if (!string.IsNullOrWhiteSpace(exchange.groupid))
|
|||
|
{
|
|||
|
var user = client.GetContact(exchange.username);
|
|||
|
if (user == null) throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username})兑换用户数据异常,跳过该兑换");
|
|||
|
if (!string.IsNullOrWhiteSpace(user.Ticket))//非好友
|
|||
|
throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),该用户为非好友,请使用支付宝转账,跳过该兑换");
|
|||
|
}
|
|||
|
|
|||
|
if (passInfo != null && !string.IsNullOrEmpty(passInfo.password))//是否设置了账号密码
|
|||
|
{
|
|||
|
var bank = passInfo.GetBank();
|
|||
|
var pointConfig = ApiClient.GetPointManageConfig();
|
|||
|
if (pointConfig == null)
|
|||
|
throw new Exception("获取积分管理配置为空");
|
|||
|
string result = client.SendPay(exchange.username, pointConfig.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchange.point.ToString("0.00")), (int)((decimal)exchange.point * 100m), passInfo.password, 1, (PayType)Enum.ToObject(typeof(PayType), (int)pointConfig.Exchange_PayType), bank);
|
|||
|
if (!string.IsNullOrEmpty(result)) throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}), {(bank != null ? "银行" : "余额")},转账:{exchange.point.ToString("0.00")},{result}");
|
|||
|
exchange.state = ApplyType.已审核;
|
|||
|
exchange.check_time = DateTime.Now;
|
|||
|
exchange.remark = "一键审核【微信支付】";
|
|||
|
Update(exchange);
|
|||
|
}
|
|||
|
else
|
|||
|
throw new Exception($@"{robot.nick}({robot.name}),尚未设置支付密码!
|
|||
|
请在机器人管理中,右击机器人设置密码!");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu($"{ex.Message}");
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
AddJindu();
|
|||
|
Thread.Sleep(200);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 商户支付
|
|||
|
/// </summary>
|
|||
|
private void Shanghu()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
AddJindu("执行商户支付", exchangeList.Count);
|
|||
|
var pointConfig = ApiClient.GetPointManageConfig();
|
|||
|
if (pointConfig == null)
|
|||
|
throw new Exception("获取积分管理配置为空.");
|
|||
|
foreach (var exchange in exchangeList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
|
|||
|
|
|||
|
if (client == null || client.Status != Chat.Framework.WXSdk.WxStatus.在线)
|
|||
|
throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),该机器人没有登录,跳过该兑换");
|
|||
|
|
|||
|
var db = ApiClient.GetSession();
|
|||
|
var robot = db.FindRobotInfo(exchange.robot_name, exchange.chattype);
|
|||
|
if (robot == null)
|
|||
|
throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),机器人数据获取异常,跳过该兑换");
|
|||
|
|
|||
|
if (client != null && !string.IsNullOrWhiteSpace(exchange.groupid))
|
|||
|
{
|
|||
|
var user = client.GetContact(exchange.username);
|
|||
|
if (user == null)
|
|||
|
throw new Exception($"机器人:{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),未能获取该用户数据,跳过该兑换");
|
|||
|
|
|||
|
if (!string.IsNullOrWhiteSpace(user.Ticket) && user.Ticket != "-1" && user.Ticket != "0")//非好友
|
|||
|
throw new Exception($"机器人:{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),该用户为非好友或已拉黑,请使用支付宝转账,跳过该兑换");
|
|||
|
}
|
|||
|
|
|||
|
if (string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialPayTip))
|
|||
|
throw new Exception($"机器人:{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),商户付款通知提示语不能为空,请到积分兑换插件中设置,跳过该兑换");
|
|||
|
|
|||
|
else if (!pointConfig.ExchangeCommercialPayTip.Contains("[领取地址]"))
|
|||
|
throw new Exception($@"机器人:{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),
|
|||
|
商户付款通知提示语中不包含 [领取地址] 变量,请到积分兑换插件中设置,请到积分兑换插件中设置,跳过该兑换");
|
|||
|
|
|||
|
|
|||
|
EventClient.OnEvent(this, $"机器人:{robot.nick}【{robot.uin}】一键审核【商户付款】用户:{exchange.usernick}({exchange.username}) begin:{DateTime.Now.ToString("u")}");
|
|||
|
|
|||
|
var mess = string.Empty;
|
|||
|
var ispaid = false;
|
|||
|
object appinfo = null;
|
|||
|
|
|||
|
var ExchangePacketTitle = @"兑换成功:[兑换金额]";
|
|||
|
if (!string.IsNullOrWhiteSpace(pointConfig.ExchangePacketTitle))
|
|||
|
ExchangePacketTitle = pointConfig.ExchangePacketTitle;
|
|||
|
|
|||
|
string url = ApiClient.SendWechatPay(new { robot_nick = robot.nick, robot_name = robot.name, username = exchange.username, usernick = exchange.usernick }, ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchange.point.ToString()), exchange.point, out ispaid, out appinfo);
|
|||
|
if (string.IsNullOrEmpty(url))
|
|||
|
throw new Exception($@"机器人:{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),服务器繁忙,请稍后重试,跳过该兑换");
|
|||
|
|
|||
|
if (ispaid)
|
|||
|
{
|
|||
|
var ExchangeCommercialEftTip = @"一一一一商 户 转 账 成 功一一一一
|
|||
|
[兑换金额]兑换成功
|
|||
|
已直接转入您的账户!";
|
|||
|
if (!string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialEftTip))
|
|||
|
ExchangeCommercialEftTip = pointConfig.ExchangeCommercialEftTip;
|
|||
|
|
|||
|
mess = ExchangeCommercialEftTip.Replace("[兑换金额]", exchange.point.ToString("0.00"));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
EventClient.OnEvent(this, $@"机器人:{robot.nick}【{robot.uin}】一键审核【商户付款】用户:{exchange.usernick}({exchange.username})
|
|||
|
end:{DateTime.Now.ToString("u")}
|
|||
|
url:{url}
|
|||
|
appinfo is null:{(appinfo == null)}");
|
|||
|
|
|||
|
bool isSendMiNi = false;
|
|||
|
if (pointConfig.ExchangeCommercialPayTip_MiniApp == SwitchType.开启 && appinfo != null)
|
|||
|
{
|
|||
|
var xml = Util.GetMiNiAppXml(appinfo, robot.type);
|
|||
|
if (!string.IsNullOrWhiteSpace(xml))
|
|||
|
{
|
|||
|
mess = xml;
|
|||
|
isSendMiNi = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (!isSendMiNi)
|
|||
|
{
|
|||
|
var ExchangeCommercialPayTip = @"一一一一等 待 领 取一一一一
|
|||
|
|
|||
|
[领取地址]
|
|||
|
|
|||
|
点击链接,领取红包到您钱包!";
|
|||
|
if (!string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialPayTip))
|
|||
|
ExchangeCommercialPayTip = pointConfig.ExchangeCommercialPayTip;
|
|||
|
|
|||
|
mess = ExchangeCommercialPayTip.Replace("[领取地址]", ApiClient.ShortURL(url).Result).Replace("[兑换金额]", exchange.point.ToString("0.00"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
exchange.state = ApplyType.已审核;
|
|||
|
exchange.check_time = DateTime.Now;
|
|||
|
exchange.remark = $"一键审核【商户付款】 商户链接:{url}";
|
|||
|
//is_auto_pay = true;
|
|||
|
EventClient.OnEvent(this, $"{robot.nick}【{robot.uin}】商户付款信息 = " + mess);
|
|||
|
Update(exchange, url, mess);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu(ex.Message);
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
AddJindu();
|
|||
|
Thread.Sleep(200);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu($@"商户一键兑换未知异常:{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Update(point_manage_control.exchange_list_temp exchange, string url = "", string mess = "")
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var session = ApiClient.GetSession();
|
|||
|
if (exchange.state != ApplyType.未审核)
|
|||
|
{
|
|||
|
var exchangeResult = session.Find<fl_exchange_info>("select * from fl_exchange_info where id = @id", new { id = exchange.id }).FirstOrDefault();
|
|||
|
if (exchangeResult == null) throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),兑换数据异常,请稍后重试!");
|
|||
|
session.ExcuteSQL("update fl_exchange_info set state = @state,remark = @remark,check_time = @check_time where id = @id", new { state = exchange.state, check_time = DateTime.Now, remark = exchange.remark, id = exchange.id });
|
|||
|
var robot_info = session.FindRobotInfo(exchange.robot_name, exchange.chattype);
|
|||
|
var member_info = session.Find<fl_member_info>("select * from fl_member_info where id = @id", new { id = exchangeResult.uid }).FirstOrDefault();
|
|||
|
|
|||
|
var pointConfig = ApiClient.GetPointManageConfig();
|
|||
|
if (pointConfig == null)
|
|||
|
throw new Exception("获取积分管理配置为空");
|
|||
|
if (member_info != null && robot_info != null)
|
|||
|
{
|
|||
|
if (exchange.state == ApplyType.退回兑换)
|
|||
|
{
|
|||
|
member_info = session.ChangePoint(PointType.退回积分, exchangeResult.point, member_info.id, $"退回兑换{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
|
|||
|
if (robot_info != null)
|
|||
|
ApiClient.SendMessage(robot_info, exchange.username, new VariateReplace().CommonReplace(pointConfig.ExchangeReturnTip.Replace("[兑换金额]", exchangeResult.point.ToString()).Replace("[备注]", exchange.remark), member_info), exchange.groupid);
|
|||
|
}
|
|||
|
else if (exchange.state == ApplyType.已审核)
|
|||
|
{
|
|||
|
var messTmp = new VariateReplace().CommonReplace(pointConfig.ExchangeAdoptTip.Replace("[兑换金额]", exchangeResult.point.ToString()).Replace("[领取地址]", url), member_info);
|
|||
|
var sends = new List<temp_send_data>();
|
|||
|
if (!string.IsNullOrWhiteSpace(mess))
|
|||
|
sends.Add(new temp_send_data() { Groupid = exchange.groupid, Message = mess, Robot = robot_info, TouserName = exchange.username });
|
|||
|
sends.Add(new temp_send_data() { Groupid = exchange.groupid, Message = messTmp, Robot = robot_info, TouserName = exchange.username });
|
|||
|
|
|||
|
ApiClient.SendMessage(sends.ToArray());
|
|||
|
}
|
|||
|
else //没收兑换
|
|||
|
{
|
|||
|
ApiClient.SendMessage(robot_info, exchange.username, new VariateReplace().CommonReplace(pointConfig.ExchangeConfiscateTip.Replace("[兑换金额]", exchangeResult.point.ToString()).Replace("[备注]", exchange.remark), member_info), exchange.groupid);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (exchange.state == ApplyType.退回兑换)
|
|||
|
throw new Exception($"{exchange.robot_nick}({exchange.robot_name}),用户:{exchange.usernick}({exchange.username}),兑换退回失败,请稍后重试.");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
AddJindu($@"一键兑换异常:{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|