old_flsystem/应用/PointManage/Class1.cs

891 lines
56 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.SDK;
using Api.Framework.Tools;
using Chat.Framework;
using Chat.Framework.WXSdk.IPAD;
using CsharpHttpHelper;
using PointManage.Entitys;
using PointManage.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Api.Framework.Utils;
namespace PointManage
{
public class Class1 : Plugin
{
public Class1()
{
this.Logo = Resources.;
this.Name = Resources.PluginName;
this.Note = Resources.PluginNote;
}
#region
public static PointManageConfig Config;
private MainForm mainForm = null;
#endregion
public override void Start()
{
try
{
var session = ApiClient.GetSession();
#region
if (!session.TableExist<fl_plugin_pointmanage_checkin_info>())
{
session.CreateTable<fl_plugin_pointmanage_checkin_info>();
session.AddIndex<fl_plugin_pointmanage_checkin_info>("uid");
}
if (!session.TableExist<fl_plugin_pointmanage_extra_award>())
{
session.CreateTable<fl_plugin_pointmanage_extra_award>();
}
#endregion
//创建配置文件
Config = this.ReadConfig<PointManageConfig>();
// Config.Unsettled_Forbid_Exchange_Tip = @"一一一申 请 失 败一一一
//亲,系统检测到你有【付款成功】订单,
//请收货完成后再来发起提现申请哦!";
// Config.NotReceiving_Forbid_Exchange_Tip = @"一一一申 请 失 败一一一
//亲,系统未检测到你有订单记录,
//请完成首单后再来发起提现申请哦!";
// Util.Save(Config);
SDK.ReciveIMEvent += SDK_ReciveIMEvent;
SDK.OrderNoticeEvent += SDK_OrderNoticeEvent;
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
private readonly object lockAward2 = new object();
private void SDK_OrderNoticeEvent(object sender, Api.Framework.Events.OrderNoticeEvent e)
{
try
{
if (Config.Extra_Award_Switch == SwitchType. && e.OrderNoticeType == OrderNoticeType.)
{
if (e.ChatType == CpsType.)
return;
var order = e.Order as base_model_order;
if (order.db_status != SystemOrderStatus.) return;
lock (lockAward2)
{
var session = ApiClient.GetSession();
var award = session.FindSingle<fl_plugin_pointmanage_extra_award>("select * from fl_plugin_pointmanage_extra_award where uid = @uid", new { uid = e.Member.id });
if (award == null)
award = new fl_plugin_pointmanage_extra_award() { uid = e.Member.id, count = 1 };
else
award.count++;
session.SaveExtraAward(award);
}
}
}
catch (Exception ex)
{
this.OnLog($"{ex.Message} - {ex.StackTrace}");
}
}
public override void ShowForm()
{
try
{
if (mainForm == null || mainForm.IsDisposed)
{
mainForm = new MainForm();
mainForm.Show();
}
mainForm.Activate();
}
catch (Exception ex)
{
this.OnLog("执行时被" + ex.Message);
}
}
public override void Stop()
{
try
{
if (mainForm != null)
{
mainForm.CloseForm();
mainForm = null;
}
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
private static Queue<exchange_info> exchangeQueue = new Queue<exchange_info>();//提现队列
private static exchange_info GetExchange_info()
{
try
{
return exchangeQueue.Dequeue();
}
catch (Exception)
{ }
return null;
}
private static bool _IsRun = false;
private void _ExchangeAction()
{
if (_IsRun) return;
_IsRun = true;
Task.Run(() =>
{
try
{
var info = GetExchange_info();
while (info != null)
{
Thread.Sleep(100);
try
{
var session = ApiClient.GetSession();
var member = session.FindMemberInfoById(info.uid);
if (member == null) throw new Exception("用户数据异常");
var robot = session.FindRobots().Where(f => f.id == info.rid).FirstOrDefault();
if (robot == null) continue;
var exchangePoint = member.cur_point;
if (exchangePoint >= Config.Exchange_Min_Point)
{
//查询用户今日兑换数量
var exchange_num = session.Queryable<fl_point_hist>().Where(f => f.uid == member.id && f.type == "提现扣除" && f.crt_time >= DateTime.Today).Count();
if (exchange_num >= Config.Exchange_Num)
{
ApiClient.SendMessage(robot, member.username, new VariateReplace().CommonReplace(Config.ExchangeInsufficientNumTip.Replace("[兑换次数]", Config.Exchange_Num.ToString()), member));//兑换次数不足
continue;
}
}
else
{
ApiClient.SendMessage(robot, member.username, new VariateReplace().CommonReplace(Config.ExchangeErrorTip, member).Replace("[最低提现额度]", Config.Exchange_Min_Point.ToString()), info.groupid);//兑换失败,积分不足提示语
continue;
}
if (Config.Integer_Exchange_Switch == SwitchType. && exchangePoint >= 1)
exchangePoint = Math.Floor(exchangePoint);
var back_apply_wx = false;//微信后台申请提现
var remark = string.Empty;//人工审核原因
#region
//微信商户转账转账 (满足最低兑积分兑换以及自动转账的最高兑换)
if (member.exchange_type == ExchangeType.)
{
if ((member.robot_type == ChatType. || member.robot_type == ChatType.) && string.IsNullOrWhiteSpace(info.groupid) && Config.Exchange_PayType != PointPayType. && Config.Exchange_Transmatic_Maxpoint >= exchangePoint)
{
//当天微信自动转账金额中已经使用金额
var sumpoint = session.Queryable<fl_exchange_info>().Where(f => f.IsTransmatic == true && f.rid == robot.id && f.time >= DateTime.Today).Sum(f => f.point);
if (Config.Exchange_Transmatic_SumPoint >= sumpoint)//每天的微信自动转账每日上限
{
//操作提现次数小于N次人工审核
if (Config.Audit_Exchange_Frequency_SwitchType == SwitchType.)
{
if (long.Parse(session.FindTable("select count(id) as num from fl_exchange_info where uid = @uid", new { uid = member.id }).Rows[0]["num"].ToString()) < Config.Audit_Exchange_Frequency_Baseline)
{
member = session.ChangePoint(PointType., exchangePoint, member.id, "提现扣除【提交人工审核】.");//积分扣除
var exchangeList = new fl_exchange_info() { point = exchangePoint, state = ApplyType., time = DateTime.Now, uid = member.id, rid = robot.id, groupid = info.groupid };//保存用户兑换
session.Insertable(exchangeList).ExecuteCommand();
ApiClient.SendMessage(robot, member.username, new VariateReplace().CommonReplace(Config.ExchangeSuccessTip, member).Replace("[提现金额]", exchangePoint.ToString()), info.groupid);//成功提交兑换提示语
string msg = new VariateReplace().CommonReplace(Config.ExchangeFrequencyLimitDingdingTip, member, robot).Replace("[提现金额]", exchangePoint.ToString());
//ApiClient.SendNoticeMessage(msg);//给钉钉发送消息
if ((Config.notice_robotname == "请选择(钉钉/微信群机器人API名称"))
ApiClient.SendNoticeMessage(msg);//给钉钉发送消息
else
{
var api = session.FindNoticeapiRobots().FirstOrDefault(f => f.name == Config.notice_robotname);
if (api != null) ApiClient.SendNoticeMessage(api, msg);
}
ApiClient.SendAdminEmail(ApiClient.Setting.SystemConfig.account_admin_email, "兑换次数限制需审核提醒", msg, true);
continue;
}
}
if (Config.Exchange_PayType == PointPayType.)
{
if (string.IsNullOrWhiteSpace(Config.ExchangeCommercialPayTip))
{
this.OnLog($"{robot.name} - {member.username}:商户付款提示语为空,操作终止,设置提示语后才能正常使用商户付款");
continue;
}
var ispaid = false;
object appinfo = null;
string url = ApiClient.SendWechatPay(new { robot_name = robot.name, robot_nick = robot.nick, username = member.username, usernick = member.usernick }, Class1.Config.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchangePoint.ToString()), exchangePoint, out ispaid, out appinfo);
this.OnLog($@"{robot.name} - 【{member.usernick}({member.username})】商户连接:{(string.IsNullOrWhiteSpace(url) ? "" : url)}
appinfo is null:{(appinfo == null)}");
if (!string.IsNullOrEmpty(url))
{
member = session.ChangePoint(PointType., exchangePoint, member.id, "提现扣除【商户付款成功】");
session.Insertable<fl_exchange_info>(new fl_exchange_info() { point = exchangePoint, state = ApplyType., time = DateTime.Now, check_time = DateTime.Now, uid = member.id, remark = $"提现扣除【商户付款成功】 商户链接:{url}", rid = robot.id, IsTransmatic = true, groupid = info.groupid }).ExecuteCommand();//保存记录
var pay_url = string.Empty;
var mess_1 = string.Empty;
if (ispaid)
mess_1 = Config.ExchangeCommercialEftTip.Replace("[兑换金额]", exchangePoint.ToString());
else
{
//pay_url = url;// ApiClient.ShortURL(url).Result;
pay_url = ApiClient.ShortURL(url).Result;
LogHelper.GetSingleObj().Info("商户提现链接", $"{member.usernick}({member.username});金额:{exchangePoint};原始:{url} => 缩短:{pay_url}");
//if (string.IsNullOrWhiteSpace(pay_url))
//{
// pay_url = url;
//}
if (Config.ExchangeCommercialPayTip_MiniApp == SwitchType. && appinfo != null)
mess_1 = Util.GetMiNiAppXml(appinfo, robot.type);
if (string.IsNullOrWhiteSpace(mess_1))
mess_1 = Config.ExchangeCommercialPayTip.Replace("[领取地址]", pay_url).Replace("[兑换金额]", exchangePoint.ToString());
}
var mess_2 = new VariateReplace().CommonReplace(Config.ExchangeAdoptTip.Replace("[兑换金额]", exchangePoint.ToString()).Replace("[领取地址]", pay_url), member);
ApiClient.SendMessage(
new temp_send_data() { Groupid = info.groupid, Message = mess_1, Robot = robot, TouserName = member.username },
new temp_send_data() { Groupid = info.groupid, Message = mess_2, Robot = robot, TouserName = member.username }
);
continue;
}
}
var passInfo = session.FindWeixinpassword(robot.id);//微信自动转账
if (passInfo != null && !string.IsNullOrEmpty(passInfo.password))//是否设置了账号密码
{
if (member.robot_type != Api.Framework.SDK.ChatType.) throw new Exception("暂时不支持自动转账!");
var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == robot.name);
if (client == null) throw new Exception(robot.name + ",该帐号没有登录!");
if (client.WeixinType != Chat.Framework.WXSdk.Implement.WeixinType.Grpc微信) throw new Exception("您当前登录的微信版本,暂不支持自动转账!");
var flag = client.SendPay(member.username, Config.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchangePoint.ToString()), (int)((decimal)exchangePoint * 100m), passInfo.password, 1, (Chat.Framework.WXSdk.IPAD.PayType)Enum.ToObject(typeof(Chat.Framework.WXSdk.IPAD.PayType), string.IsNullOrEmpty(info.groupid) ? ((int)Config.Exchange_PayType) : 2), passInfo.GetBank());//用户在群中进行提现操作时,将不会进行红包操作,强制以转账形式进行
if (string.IsNullOrEmpty(flag))
{
member = session.ChangePoint(PointType., exchangePoint, member.id, "提现扣除【微信自动转账成功】");
session.Insertable<fl_exchange_info>(new fl_exchange_info() { point = exchangePoint, state = ApplyType., time = DateTime.Now, check_time = DateTime.Now, uid = member.id, remark = "微信自动转账.", rid = robot.id, IsTransmatic = true, groupid = info.groupid }).ExecuteCommand();//保存记录
ApiClient.SendMessage(robot, member.username, new VariateReplace().CommonReplace(Config.ExchangeTransmaticTip.Replace("[兑换金额]", exchangePoint.ToString()), member), info.groupid);//微信自动转账成功提示语
continue;
}
else//转账失败,将提现请求提交至后台
{
if (Config.IsPaymentFailedUseCommercialPaySwitchType == SwitchType.)//微信支付失败,使用商户付款
{
if (string.IsNullOrWhiteSpace(Config.ExchangeCommercialPayTip))
{
this.OnLog($"{robot.name} - {member.username}:商户付款提示语为空,操作终止,设置提示语后才能正常使用商户付款");
continue;
}
var ispaid = false;
object appinfo = null;
string url = ApiClient.SendWechatPay(new { robot_name = robot.name, robot_nick = robot.nick, username = member.username, usernick = member.usernick }, Class1.Config.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchangePoint.ToString()), exchangePoint, out ispaid, out appinfo);
this.OnLog($@"{robot.name} - 【{member.usernick}({member.username})】商户连接:{url}
appinfo is null:{(appinfo == null)}");
if (!string.IsNullOrEmpty(url))
{
member = session.ChangePoint(PointType., exchangePoint, member.id, "提现扣除【微信自动转账失败,商户付款成功】");
session.Insertable<fl_exchange_info>(new fl_exchange_info() { point = exchangePoint, state = ApplyType., time = DateTime.Now, check_time = DateTime.Now, uid = member.id, remark = $"提现扣除【微信自动转账失败,商户付款成功】 商户链接:{url}", rid = robot.id, IsTransmatic = true, groupid = info.groupid }).ExecuteCommand();//保存记录
var pay_url = string.Empty;
var mess_1 = string.Empty;
if (ispaid)
mess_1 = Config.ExchangeCommercialEftTip.Replace("[兑换金额]", exchangePoint.ToString());
else
{
if (Config.ExchangeCommercialPayTip_MiniApp == SwitchType. && appinfo != null)
mess_1 = Util.GetMiNiAppXml(appinfo, robot.type);
//pay_url = url;//ApiClient.ShortURL(url).Result;
pay_url = ApiClient.ShortURL(url).Result;
LogHelper.GetSingleObj().Info("商户提现链接", $"{member.usernick}({member.username});金额:{exchangePoint};原始:{url} = > 缩短:{pay_url}");
if (string.IsNullOrWhiteSpace(mess_1))
{
mess_1 = Config.ExchangeCommercialPayTip.Replace("[领取地址]", pay_url).Replace("[兑换金额]", exchangePoint.ToString());
}
}
var mess_2 = new VariateReplace().CommonReplace(Config.ExchangeAdoptTip.Replace("[兑换金额]", exchangePoint.ToString()).Replace("[领取地址]", pay_url), member);
ApiClient.SendMessage(
new temp_send_data() { Groupid = info.groupid, Message = mess_1, Robot = robot, TouserName = member.username },
new temp_send_data() { Groupid = info.groupid, Message = mess_2, Robot = robot, TouserName = member.username });
continue;
}
else this.OnLog($"{robot.name} - {member.username}:商户付款兑换积分失败:创建订单号失败");
}
back_apply_wx = true;
}
}
else
{
//未设置微信支付密码,使用商户开启
if (Class1.Config.IsEmptyPasswordUseCommercialPaySwitchType == SwitchType.)
{
if (string.IsNullOrWhiteSpace(Config.ExchangeCommercialPayTip))
{
this.OnLog($"{robot.name} - {member.username}:商户付款提示语为空,操作终止,设置提示语后才能正常使用商户付款");
continue;
}
var ispaid = false;
object appinfo = null;
string url = ApiClient.SendWechatPay(new { robot_name = robot.name, robot_nick = robot.nick, username = member.username, usernick = member.usernick }, Class1.Config.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchangePoint.ToString()), exchangePoint, out ispaid, out appinfo);
this.OnLog($@"{robot.name} - 【{member.usernick}({member.username})】商户连接:{url}
appinfo is null:{(appinfo == null)}");
if (!string.IsNullOrEmpty(url))
{
member = session.ChangePoint(PointType., exchangePoint, member.id, "提现扣除【微信字支付未开,商户付款成功】");
session.Insertable<fl_exchange_info>(new fl_exchange_info() { point = exchangePoint, state = ApplyType., time = DateTime.Now, check_time = DateTime.Now, uid = member.id, remark = $"提现扣除【微信支付未开,商户付款成功】 商户链接:{url}", rid = robot.id, IsTransmatic = true, groupid = info.groupid }).ExecuteCommand();//保存记录
var pay_url = string.Empty;
var mess_1 = string.Empty;
if (ispaid)
mess_1 = Config.ExchangeCommercialEftTip.Replace("[兑换金额]", exchangePoint.ToString());
else
{
if (Config.ExchangeCommercialPayTip_MiniApp == SwitchType. && appinfo != null)
mess_1 = Util.GetMiNiAppXml(appinfo, robot.type);
//pay_url = url;//ApiClient.ShortURL(url).Result;
pay_url = ApiClient.ShortURL(url).Result;
LogHelper.GetSingleObj().Info("商户提现链接", $"{member.usernick}({member.username});金额:{exchangePoint};原始:{url} = > 缩短:{pay_url}");
if (string.IsNullOrWhiteSpace(mess_1))
mess_1 = Config.ExchangeCommercialPayTip.Replace("[领取地址]", pay_url).Replace("[兑换金额]", exchangePoint.ToString());
}
var mess_2 = new VariateReplace().CommonReplace(Config.ExchangeAdoptTip.Replace("[兑换金额]", exchangePoint.ToString()).Replace("[领取地址]", pay_url), member);
ApiClient.SendMessage(
new temp_send_data() { Groupid = info.groupid, Message = mess_1, Robot = robot, TouserName = member.username },
new temp_send_data() { Groupid = info.groupid, Message = mess_2, Robot = robot, TouserName = member.username });
continue;
}
else this.OnLog($"{robot.name} - {member.username}:微信未设置支付密码。并且商户付款兑换积分失败:付款链接为空..已转至人工兑换");
}
else
//this.OnLog($"{robot.name} - {member.username}:微信支付积分兑换失败:未设置支付密码。已转至人工兑换");
this.OnLog($"{robot.name} - {member.username}:未设置支付密码使用商户付款-关闭状态。已转至人工兑换");
}
}
else
this.OnLog($"{robot.name} - {member.username}:今日微信自动转账金额已达上限({Config.Exchange_Transmatic_SumPoint}元),已转至人工兑换");
}
}
else
{
back_apply_wx = true;
remark = "系统设置人工审核";
}
#endregion
#region
var exchange_NotAudited = session.Find<fl_exchange_info>("select * from fl_exchange_info where uid = @uid and state = 1", new { uid = member.id });
if (exchange_NotAudited.Count != 0)//重复提交
{
ApiClient.SendMessage(robot, member.username, new VariateReplace().CommonReplace(Config.ExchangeUntreatedTip, member).Replace("[提现金额]", exchange_NotAudited[0].point.ToString()), info.groupid);//尚有未处理的订单
continue;
}
else
{
//微信人工兑换
double point = 0d;
if (Config.AlipaySwitch == SwitchType.)//支付宝兑换
{
//未绑定支付宝账号
if (string.IsNullOrWhiteSpace(member.alipay_name) || string.IsNullOrWhiteSpace(member.alipay_num))
{
ApiClient.SendMessage(robot, member.username, Config.ExchangeUnBindAlipayTip, info.groupid);
continue;
}
}
if (back_apply_wx)
point = exchangePoint;
else
point = Config.Exchange_Max_Point >= exchangePoint ? exchangePoint : Config.Exchange_Max_Point;//如果积分高于最高兑换,则只能兑换最高的积分值.反之只能兑换所有的积分
member = session.ChangePoint(PointType., point, member.id, $"提现扣除【提交人工审核】{remark}");//积分扣除
var exchangeList = new fl_exchange_info() { point = point, state = ApplyType., time = DateTime.Now, uid = member.id, rid = robot.id, groupid = info.groupid };//保存用户兑换
session.Insertable<fl_exchange_info>(exchangeList).ExecuteCommand();
ApiClient.SendMessage(robot, member.username, new VariateReplace().CommonReplace(Config.ExchangeSuccessTip, member).Replace("[提现金额]", point.ToString()), info.groupid);//成功提交兑换提示语
string msg = new VariateReplace().CommonReplace(Config.ExchangeSuccessDingdingTip, member, robot).Replace("[提现金额]", point.ToString());
if ((Config.notice_robotname == "请选择(钉钉/微信群机器人API名称"))
ApiClient.SendNoticeMessage(msg);//给钉钉发送消息
else
{
var api = session.FindNoticeapiRobots().FirstOrDefault(f => f.name == Config.notice_robotname);
if (api != null) ApiClient.SendNoticeMessage(api, msg);
}
ApiClient.SendAdminEmail(ApiClient.Setting.SystemConfig.account_admin_email, "兑换审核提醒", msg, true);
}
#endregion
}
catch (Exception ex)
{
this.OnLog($"提现异常:{ex.Message} ~ {ex.StackTrace}");
}
finally
{
info = GetExchange_info();
}
}
}
catch (Exception ex)
{
this.OnLog($"提现异常:{ex.Message} - {ex.StackTrace}");
}
finally
{
_IsRun = false;
}
});
}
private readonly object AwardLock = new object();
private readonly object ExchangeLock = new object();
private readonly object SignInLock = new object();
private static bool flag = false;
private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e)
{
try
{
#region
if (Config.Extra_Award_Switch == SwitchType. && !string.IsNullOrWhiteSpace(Config.Extra_Award_CMD))
{
var reg = Regex.Match(e.Message.Trim(), Config.Extra_Award_CMD);
if (reg.Success)
{
var session = ApiClient.GetSession();
var award = session.FindSingle<fl_plugin_pointmanage_extra_award>("select * from fl_plugin_pointmanage_extra_award where uid = @uid", new { uid = e.GetMemberinfo().id });
if (award == null)
{
award = new fl_plugin_pointmanage_extra_award() { uid = e.GetMemberinfo().id, count = 0 };
session.SaveExtraAward(award);
}
string mess = string.Empty;
if (award.count <= 0)
{
mess = new VariateReplace().CommonReplace(Config.Extra_AwardErrorTip, e.GetMemberinfo());
}
else
{
lock (AwardLock)
{
var point = Math.Round((new Random().Next(
int.Parse(Math.Round(Config.Extra_Award_Min_Point * 100, 2).ToString()),
int.Parse(Math.Round((Config.Extra_Award_Max_Point + 0.01) * 100, 2).ToString())
)) / 100d, 2);
var member = session.ChangePoint(PointType., point, e.GetMemberinfo().id, $"抢红包:{point}");
mess = new VariateReplace().CommonReplace(Config.Extra_AwardSuccessTip.Replace("[红包金额]", point.ToString("0.00")), member);
award.count--;
session.SaveExtraAward(award);
}
}
e.SendMessage(mess);
}
}
#endregion
#region
//签到指令
if (Config.Checkin_Switch == SwitchType.)
{
if (!string.IsNullOrWhiteSpace(Config.Checkin_CMD) && Regex.IsMatch(e.Message.Trim(), Config.Checkin_CMD))
{
lock (SignInLock)
{
var key = e.Username + "_SignIn";
if (Util.GetCache(key))
{
e.SendMessage(Config.CheckinRepeatTip);//重复签到提示
return;
}
Util.SetCache(key, 30);
}
string mess = string.Empty;
var session = ApiClient.GetSession();
var memberinfo = e.GetMemberinfo();
if (Config.Restrict_Switch == SwitchType.)
{
var day = DateTime.Today.AddMonths(-Config.CheckinRestrictMonth);
var data = session.FindRow($@"select COALESCE(SUM(num), 0) as num from(select count(*) as num from fl_order_alimama where db_userid = @id and db_status = 1002 and db_endtime >= @day
UNION all
select count(*) as num from fl_order_jingdong where db_userid = @id and db_status = 1002 and db_endtime >= @day
UNION all
select count(*) as num from fl_order_pinduoduo where db_userid = @id and db_status = 1002 and db_endtime >= @day
UNION all
select count(*) as num from fl_order_weipinhui where db_userid = @id and db_status = 1002 and db_endtime >= @day) as temp", new { id = e.GetMemberinfo().id, day = day.ToString("yyyy-MM-dd HH:mm:ss") })["num"].ToString();
if (int.Parse(data) <= 0)
{
e.SendMessage(Config.CheckinRestrictTip);
return;
}
}
var checkin = session.Find<fl_plugin_pointmanage_checkin_info>($"select * from fl_plugin_pointmanage_checkin_info where uid = '{e.GetMemberinfo().id}'").FirstOrDefault();
if (checkin == null)
{
checkin = new fl_plugin_pointmanage_checkin_info() { uid = e.GetMemberinfo().id, days = 1, time = DateTime.Now, chatType = e.ChatType, sumday = 1 };
//签到成功1天没有签到过
var point = SigninReward();
//积分的修改
memberinfo = session.ChangePoint(PointType., point, memberinfo.id, "签到积分奖励");
mess = new VariateReplace().CommonReplace(Config.CheckinSuccessTip, memberinfo)
.Replace("[签到奖励]", point.ToString())
.Replace("[连续签到次数]", "1")
.Replace("[总共签到次数]", "1")
.Replace("[每日语录]", Config.CheckinSuccessTip.Contains("[每日语录]") ? FindYuLu() : string.Empty);
}
else
{
var baseTime = DateTime.Parse("2019-09-01 00:00:00");
var newTime = DateTime.Now;
var intervalHours = Math.Floor((newTime - baseTime).TotalHours / Config.Checkin_Period);
var comparisonTime = baseTime.AddHours(intervalHours * Config.Checkin_Period);
if (comparisonTime < checkin.time)//如果用户的签到时间比当前签到时间大,那么这个用户已经签到过了
{
e.SendMessage(Config.CheckinRepeatTip);//重复签到提示
return;
}
else if ((checkin.time.AddHours(Config.Checkin_Period) >= comparisonTime))
{
//连续签到
checkin.time = DateTime.Now;
checkin.days += 1;
checkin.sumday += 1;
var point = SigninReward();
//积分的修改
memberinfo = session.ChangePoint(PointType., point, memberinfo.id, "签到积分奖励");
mess = new VariateReplace().CommonReplace(Config.CheckinSuccessTip, memberinfo)
.Replace("[签到奖励]", point.ToString())
.Replace("[连续签到次数]", checkin.days.ToString())
.Replace("[总共签到次数]", checkin.sumday.ToString())
.Replace("[每日语录]", Config.CheckinSuccessTip.Contains("[每日语录]") ? FindYuLu() : string.Empty);
}
else
{
//签到中断
checkin.time = DateTime.Now;
checkin.days = 1;
checkin.sumday += 1;
var point = SigninReward();
//积分的修改
memberinfo = session.ChangePoint(PointType., point, memberinfo.id, "签到积分奖励");
mess = new VariateReplace().CommonReplace(Config.CheckinSuccessTip, memberinfo)
.Replace("[签到奖励]", point.ToString())
.Replace("[连续签到次数]", "1")
.Replace("[总共签到次数]", checkin.sumday.ToString())
.Replace("[每日语录]", Config.CheckinSuccessTip.Contains("[每日语录]") ? FindYuLu() : string.Empty);
}
}
session.Saveable(checkin).ExecuteReturnEntity();
if (!string.IsNullOrEmpty(mess))
{
e.SendMessage(mess);
e.Cancel = true;
return;
}
//}
}
}
#endregion
#region
if (!string.IsNullOrWhiteSpace(Config.Alipay_Bind_CMD) && !string.IsNullOrWhiteSpace(Config.Alipay_ChatType))
{
var chatStr = Config.Alipay_ChatType.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
if (chatStr.Contains(e.ChatType.ToString()))
{
var reg = Regex.Match(e.Message.Trim(), Config.Alipay_Bind_CMD);
if (reg.Success)
{
var session = ApiClient.GetSession();
e.GetMemberinfo().alipay_num = reg.Groups["账号"].ToString().Trim();
e.GetMemberinfo().alipay_name = reg.Groups["名称"].ToString().Trim();
session.SaveOrUpdate(e.GetMemberinfo());
e.SendMessage(new VariateReplace().CommonReplace(Config.AlipayBindSuccessTip, e.GetMemberinfo()));
}
}
}
#endregion
#region
if (!string.IsNullOrWhiteSpace(Config.IdentityId_Bind_CMD))
{
var reg = Regex.Match(e.Message.Trim(), Config.IdentityId_Bind_CMD);
if (reg.Success)
{
var session = ApiClient.GetSession();
if (Regex.IsMatch(reg.Groups["身份证号"].ToString().Trim(), @"(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)"))
{
var idcard = reg.Groups["身份证号"].ToString().Trim();
var realname = reg.Groups["姓名"].ToString().Trim();
try
{
var flag = false;
if (string.IsNullOrWhiteSpace(Config.IdentityIdCheckAppKey) && string.IsNullOrWhiteSpace(Config.IdentityIdMatchAppKey))
{
flag = true;
}
var http = new HttpHelper();
var item = new HttpItem();
if (!string.IsNullOrWhiteSpace(Config.IdentityIdCheckAppKey))
{
item.URL = $"http://apis.juhe.cn/idcard/index?key={Config.IdentityIdCheckAppKey}&cardno={idcard}";
var result = http.GetHtml(item);
var jsonObj = HttpExtend.JsonToDictionary(result.Html);
if (jsonObj != null)
{
if (jsonObj.ContainsKey("resultcode"))
{
if (jsonObj["resultcode"].ToString() != "200" && jsonObj.ContainsKey("reason")) throw new Exception("异常");
flag = true;
}
}
}
if ((string.IsNullOrWhiteSpace(Config.IdentityIdCheckAppKey) || flag) && !string.IsNullOrWhiteSpace(Config.IdentityIdMatchAppKey))
{
item.URL = $"http://op.juhe.cn/idcard/query?key={Config.IdentityIdMatchAppKey}&idcard={idcard}&realname={realname}";
var result = http.GetHtml(item);
var jsonObj = HttpExtend.JsonToDictionary(result.Html);
if (jsonObj != null && jsonObj.ContainsKey("error_code"))
{
if (jsonObj["error_code"].ToString() == "0")
{
if (jsonObj.ContainsKey("result"))
{
var _result = jsonObj["result"] as Dictionary<string, object>;
if (_result.ContainsKey("res"))
{
if (_result["res"].ToString() == "1") /*1匹配 2不匹配*/
{
e.GetMemberinfo().identity_card = idcard;
e.GetMemberinfo().identity_name = realname;
session.SaveOrUpdate(e.GetMemberinfo());
e.SendMessage(new VariateReplace().CommonReplace(Config.IdentityIdBindSuccessTip, e.GetMemberinfo()));
return;
}
}
}
}
throw new Exception("异常");
}
}
else if (flag && string.IsNullOrWhiteSpace(Config.IdentityIdMatchAppKey))
{
e.GetMemberinfo().identity_card = idcard;
e.GetMemberinfo().identity_name = realname;
session.SaveOrUpdate(e.GetMemberinfo());
e.SendMessage(new VariateReplace().CommonReplace(Config.IdentityIdBindSuccessTip, e.GetMemberinfo()));
return;
}
}
catch (Exception)
{
e.SendMessage(new VariateReplace().CommonReplace(Config.IdentityIdBindUSuccessTip.Replace("[姓名]", "[身份证姓名]").Replace("[身份证姓名]", realname).Replace("[身份证号]", "[身份证号码]").Replace("[身份证号码]", idcard), e.GetMemberinfo()));
}
}
else
e.SendMessage(new VariateReplace().CommonReplace(Config.IdentityIdBindUSuccessTip.Replace("[姓名]", "[身份证姓名]").Replace("[身份证姓名]", reg.Groups["姓名"].ToString().Trim()).Replace("[身份证号]", "[身份证号码]").Replace("[身份证号码]", reg.Groups["身份证号"].ToString().Trim()), e.GetMemberinfo()));
}
}
#endregion
#region
if (Regex.IsMatch(e.Message.Trim(), Config.CheckUserPoint_CMD))
{
var session = ApiClient.GetSession();
var _member = e.GetMemberinfo(true);
if (_member != null)
{
var str = new VariateReplace().CommonReplace(Config.CheckPointSuccessTip, _member);
e.SendMessage(str);
e.Cancel = true;
}
}
#endregion
#region
if (!string.IsNullOrWhiteSpace(Config.Exchange_CMD) && Regex.IsMatch(e.Message.Trim(), Config.Exchange_CMD))
{
lock (ExchangeLock)
{
var memberinfo = e.GetMemberinfo(true);
double exchangePoint = memberinfo.cur_point;//兑换积分
this.OnLog($"用户({memberinfo.username})余额:" + exchangePoint);
//限制兑换
if (DateTime.Now <= memberinfo.ban_exchange_time)
{
e.SendMessage(new VariateReplace().CommonReplace(Config.Ban_Exchange_Tip, memberinfo));
return;
}
//无购物不让提现
if (Config.Unsettled_Forbid_Exchange == SwitchType. && memberinfo.finish_order == 0)
{
if (memberinfo.bind_order != 0)
e.SendMessage(Config.Unsettled_Forbid_Exchange_Tip);//无购物记录不予兑换
else
e.SendMessage(Config.NotReceiving_Forbid_Exchange_Tip);//无购物记录不予兑换
return;
}
#region
if (Config.IdentityIdSwitch == SwitchType. && (string.IsNullOrWhiteSpace(e.GetMemberinfo().identity_card) || string.IsNullOrWhiteSpace(e.GetMemberinfo().identity_name)))
{
e.SendMessage(Config.IdentityIdUnBindExchangeTip);//当前未绑定身份证
return;
}
#endregion
var session = ApiClient.GetSession();
#region
var exchange_NotAudited_ = session.Find<fl_exchange_info>("select * from fl_exchange_info where uid = @uid and state = 1", new { uid = memberinfo.id });
if (exchange_NotAudited_.Count != 0)
{
e.SendMessage(new VariateReplace().CommonReplace(Config.ExchangeUntreatedTip, memberinfo.id).Replace("[提现金额]", exchange_NotAudited_[0].point.ToString()));//尚有未处理的订单
return;
}
#endregion
#region
if (!string.IsNullOrWhiteSpace(e.Groupid) && Config.ExchangeErrorGroupBan_SwitchType == SwitchType.)
{
e.SendMessage(new VariateReplace().CommonReplace(Config.ExchangeErrorGroupBanTip, memberinfo));
return;
}
#endregion
if (exchangePoint >= Config.Exchange_Min_Point)
{
//查询用户今日兑换数量
var exchange_num = session.Queryable<fl_point_hist>().Where(f => f.uid == memberinfo.id && f.type == "提现扣除" && f.crt_time >= DateTime.Today).Count();
if (exchange_num >= Config.Exchange_Num)
{
e.SendMessage(new VariateReplace().CommonReplace(Config.ExchangeInsufficientNumTip.Replace("[兑换次数]", Config.Exchange_Num.ToString()), memberinfo));//兑换次数不足
return;
}
else
{
var data = exchangeQueue.FirstOrDefault(f => f.uid == e.GetMemberinfo().id);
if (data == null)
{
exchangeQueue.Enqueue(new exchange_info() { uid = e.GetMemberinfo().id, rid = e.RobotInfo.id, groupid = e.Groupid });
_ExchangeAction();
}
else
{
e.SendMessage("提现处理中请稍后...");
}
e.Cancel = true;
}
}
else
e.SendMessage(new VariateReplace().CommonReplace(Config.ExchangeErrorTip, memberinfo).Replace("[最低提现额度]", Config.Exchange_Min_Point.ToString()));//兑换失败,积分不足提示语
}
}
#endregion
}
catch (Exception ex)
{
this.OnLog("A:" + ex.Message);
e.SendMessage(ApiClient.Setting.SystemConfig.msg_error);
}
}
#region
/// <summary>
/// 签到奖励积分
/// </summary>
/// <returns></returns>
private double SigninReward()
{
Random r = new Random(Guid.NewGuid().GetHashCode());
return Math.Round((r.Next((int)(Config.Checkin_Reward_Min * 100.00d), (int)(Config.Checkin_Reward_Max * 100.00d))) / 100.00d, 2);
}
#endregion
internal const string _key = "<RSAKeyValue><Modulus>wmUZgme6iOPOaMTZtPu5DKQ8Dph9fSgy6abFyQv25MD8xOMPBBo0wsLUOVt8r9sk+li11mIg1fs1HPJ75UmIle+w9xhIx/nsXWejuQhXlQV0VyJtzI+id8G+FcyYaog91MfPndJoO3m30fSjE/0KDLDmv1EeQcP24RAzeA29p7c=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
/// <summary>
///
/// </summary>
/// <returns></returns>
private string FindYuLu()
{
try
{
AuthEndpoint end = new AuthEndpoint()
{
Appid = 10004,
Enckey = _key,
//Host = "https://cps.api.52cmg.cn/api/webtool.asmx/send_data",
Host = $"{ApiClient.Setting.SystemConfig.cps_server_api}api/webtool.asmx/send_data",
Method = "find_yulu"
};
HttpHelper http = new HttpHelper();
var date = http.SendData(end, false);
if (date.ok)
return date.message.ToString();
else
return string.Empty;
}
catch (Exception ex)
{
this.OnLog("获取语录失败:" + ex.Message);
}
return string.Empty;
}
}
}