old_flsystem/FLSystem/Forms/OneKeyExchangeForm.cs

420 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}");
}
}
}
}