using Api.Framework.Config;
using Api.Framework.Config;
using Api.Framework.Enums;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Timers;
using Api.Framework.Tools;
using Api.Framework.UIForm;
using Chat.Framework;
using CsharpHttpHelper;
using Api.Framework.Tools;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using ZXing;
using ZXing.Common;
using System.Reflection;
using Chat.Framework.WXSdk;
using System.Threading.Tasks;
using System.Collections.Concurrent;
using SuperSocket.SocketBase;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using Chat.Framework.PCRobotSDK.WechatEvents;
using PCRobot.Pack;
using SuperSocket.SocketEngine;
using Chat.Framework.PCRobotSDK;
using Chat.Framework.WXSdk.Events;
using Chat.Framework.WXSdk.Implement;
using Chat.Framework.PCRobotSDK.WorkWechatEvents;
using Grant.Framework;
using Newtonsoft.Json.Linq;
using System.Web.Configuration;
using System.Web.Security;
using static Api.Framework.Cps.AlimamaApi;
using Robot.Framework.Entities;
using Chat.Framework.QQSdk.QPlus;
using SuperSocket.SocketBase.Protocol;
using AppServer = SuperSocket.SocketBase.AppServer;
using Api.Framework.Properties;
using Api.Framework.Utils;
using Newtonsoft.Json;
namespace Api.Framework
{
///
/// Api端功能集合
///
public class ApiClient
{
///
/// 获取有效商品Id
///
///
///
public static string GetValidItemId(string numIid)
{
if (numIid == null)
{
return string.Empty;
}
if (numIid.Contains("-"))
{
var split = numIid.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
var itemIdB = split[1];
return itemIdB;
}
return numIid;
}
public static Func BlackMemberFunc;
public static bool IsBlackFlMemberInfo(fl_member_info member)
{
if (member.status != MemberType.白名单)
{
var isOnOff = BlackMemberFunc?.Invoke() ?? false;
if (isOnOff)
{
CloudBlack cloud = new CloudBlack();
if (cloud.QueryBlack(member.username, member.robot_type) != null)
{
return true;
}
}
}
return false;
}
///
/// 插件列表显示的插件
///
public static List ShowPluginList { get; set; }
private static PointManageConfig pointManageConfig = null;
///
/// 获取积分管理插件配置
///
/// 是否刷新
///
public static PointManageConfig GetPointManageConfig(bool flush = false)
{
if (pointManageConfig == null || flush)
pointManageConfig = PluginExtend.ReadConfig(null);
return pointManageConfig;
}
private static Version _version;
///
/// 当前版本
///
public static Version CurVersion
{
get
{
if (_version == null)
{
try
{
_version = new Version(UpdateClient.GetVersionName());
}
catch (Exception ex)
{
_version = new Version("0.0.0.0");
}
}
return _version;
}
}
#region superSocket 2.0
///
/// Socket服务
///
public static AppServer Server { get; private set; }
///
/// 关闭Socket服务
///
public static void StopSocketServer()
{
try
{
if (Server != null)
{
Server.Stop();
Server.NewSessionConnected -= appServer_NewSessionConnected;
Server.SessionClosed -= appServer_NewSessionClosed;
}
}
catch (Exception)
{ }
}
///
/// 有新的Socket连接
///
/// 连接端的信息
private static void appServer_NewSessionConnected(AppSession session)
{
var ip = session.RemoteEndPoint.Address + ":" + session.RemoteEndPoint.Port;
if (!ChatClient.PCRobotPool.ClientSessions.ContainsKey(ip))
ChatClient.PCRobotPool.ClientSessions.Add(ip, new PCRobotPool.AppSessionInfo() { appSession = session, device = string.Empty });
EventClient.OnEvent(session, $"{session.RemoteEndPoint.Address}-{session.RemoteEndPoint.Port} --> 连接成功!");
}
///
/// 有连接的Socket关闭
///
/// 断开端的信息
/// 关闭的原因
private static void appServer_NewSessionClosed(AppSession session, SuperSocket.SocketBase.CloseReason value)
{
try
{
var ip = session.RemoteEndPoint.Address + ":" + session.RemoteEndPoint.Port;
if (ChatClient.PCRobotPool.ClientSessions.ContainsKey(ip))
ChatClient.PCRobotPool.ClientSessions.Remove(ip);
else
{ }
EventClient.OnEvent(session, $"{session.RemoteEndPoint.Address}-{session.RemoteEndPoint.Port}--> 已关闭!");
var con = ApiClient.GetSession();
var name = Chat.Framework.ChatClient.PCRobotPool.Remove(session);
var r = con.FindRobots().FirstOrDefault(f => f.name == name);
if (r != null)
{
r.is_login = false;
con.Updateable(r).ExecuteCommand();
}
}
catch (Exception ex)
{
EventClient.OnEvent(session, $"{session.RemoteEndPoint.Address}-{session.RemoteEndPoint.Port},{value},{ex.Message}-{ex.StackTrace}--> 已关闭!");
}
}
///
/// 启动Socket服务
///
/// 端口
/// 通讯秘钥
///
public static bool StartSocketServer(int port, string password)
{
try
{
StopSocketServer();
Server = new AppServer();
var bufSize = 1024 * 256;
var serconfig = new SuperSocket.SocketBase.Config.ServerConfig
{
Ip = "Any",
Mode = SuperSocket.SocketBase.SocketMode.Tcp,
TextEncoding = "UTF-8",
Port = port,
MaxConnectionNumber = 100 * 5 + 50,
ReceiveBufferSize = bufSize,
MaxRequestLength = Int32.MaxValue,
SendingQueueSize = 400,
};
//var serconfig = new SuperSocket.SocketBase.Config.ServerConfig
//{
// Ip = "Any",
// Mode = SuperSocket.SocketBase.SocketMode.Tcp,
// TextEncoding = "UTF-8",
// Port = port,
// //MaxConnectionNumber = 350,
// ReceiveBufferSize = 1024 * 1024 * 3,
// MaxRequestLength = 1024 * 1024,
// SendingQueueSize = 300
//};
//-----------
//var size = 1024 * 1024 * 8;
//var serconfig = new SuperSocket.SocketBase.Config.ServerConfig();
//serconfig.TextEncoding = "UTF-8";
//serconfig.Ip = "Any";
//serconfig.Port = port;
//serconfig.SendBufferSize = size;
//serconfig.ReceiveBufferSize = size;
//serconfig.MaxRequestLength = size;
//serconfig.SendingQueueSize = 50;
//serconfig.MaxConnectionNumber = 500;
//serconfig.LogAllSocketException = true;
//serconfig.LogFactory = "SuperSocket.SocketBase.Logging.ConsoleLogFactory, SuperSocket.SocketBase";
//Console.WriteLine(serconfig.MaxConnectionNumber);
if (!Server.Setup(serconfig)) throw new Exception("监听端口失败,请检查是否关闭防火墙或端口被占用!");
////Try to start the appServer
if (!Server.Start()) throw new Exception("初始化端口失败,请检查是否关闭防火墙或端口被占用!");
ApiClient.Setting.ServerConfig.SocketPassword = password;
ApiClient.Setting.ServerConfig.SocketPort = port;
ApiClient.Setting.ServerConfig.SocketIsOpen = true;
Util.Save(Setting.ServerConfig);
ChatClient.SocketPassword = password;
Server.NewSessionConnected += appServer_NewSessionConnected;
Server.SessionClosed += appServer_NewSessionClosed;
////SocketCMD 是KEY
Server.NewRequestReceived += Server_NewRequestReceived;
return true;
}
catch (Exception ex)
{
EventClient.OnEvent("Socket服务端口", $"开启失败,原因:{ex.Message}");
ApiClient.Setting.ServerConfig.SocketIsOpen = false;
Util.Save(Setting.ServerConfig);
throw ex;
}
return false;
}
private static void Server_NewRequestReceived2(AppSession _session, StringRequestInfo _requestInfo)
{
new Thread(delegate ()
{
}).Start();
Task.Factory.StartNew(delegate ()
{
Thread.Sleep(10000);
//记录 msg 日志,并做逻辑处理
});
}
///
/// 收到Socket消息
///
/// 发送端的信息
/// 收到的信息
private static void Server_NewRequestReceived(AppSession _session, StringRequestInfo _requestInfo)
{
var session = _session;
var requestInfo = _requestInfo;
//var action = new Action(delegate ()
Task.Factory.StartNew(delegate ()
{
var data = string.Empty;
try
{
if (string.IsNullOrWhiteSpace(requestInfo.Key) || string.IsNullOrWhiteSpace(requestInfo.Body))
{
LogHelper.GetSingleObj().Debug("", $"收到客户端消息__:{requestInfo.Key} - {requestInfo.Body}");
return;
}
//EventClient.OnEvent(null,$"收到数据包:{requestInfo.Key} - {requestInfo.Body.Length}");
int key;
//var cmd = (PCRobot.Pack.PCRobotCMD)Enum.Parse(typeof(PCRobot.Pack.PCRobotCMD), requestInfo.Key);
try
{
data = PackTool.DecompressString(requestInfo.Body);
}
catch (Exception)
{
LogHelper.GetSingleObj().Debug("", $"收到客户端消息转换Body异常:{requestInfo.Key} - {requestInfo.Body}");
return;
}
PCRobot.Pack.PCRobotCMD cmd;
if (!Enum.TryParse(requestInfo.Key, out cmd))
{
LogHelper.GetSingleObj().Debug("", $"收到客户端消息CMD转换异常:{requestInfo.Key} - {data} - {data.Length}");
return;
}
#region 客户端软件之间,获取连接端设备信息
var ip = session.RemoteEndPoint.Address + ":" + session.RemoteEndPoint.Port;
LogHelper.GetSingleObj().Debug("", $"心跳?:{ip}");
if (cmd == PCRobotCMD.heartBreak)
{
if (Chat.Framework.ChatClient.PCRobotPool.ClientSessions.ContainsKey(ip))
{
var json = JsonConvert.DeserializeObject(data);
if (json == null) return;
if (json.Cmd == PCRobotCMD.heartBreak)
{
var appSession = Chat.Framework.ChatClient.PCRobotPool.ClientSessions[ip];
appSession.device = json.Data;
return;
}
}
else
{
}
}
#endregion
//EventClient.OnEvent(null, $"收到客户端消息:{requestInfo.Key} - {data}");
LogHelper.GetSingleObj().Debug("", $"收到客户端消息:{requestInfo.Key} - {data} - {data.Length}");
var dic = CsharpHttpHelper.HttpExtend.JsonToDictionary(data);
if (dic.ContainsKey("Key") && dic["Key"].ToString() != Setting.ServerConfig.SocketPassword)
{
var RobotUsernick = string.Empty;
if (dic.ContainsKey("RobotUsernick"))
RobotUsernick = dic["RobotUsernick"].ToString();
var RobotUsername = string.Empty;
if (dic.ContainsKey("RobotUsername"))
RobotUsername = dic["RobotUsername"].ToString();
RobotType robotType;
if (dic.ContainsKey("RobotType"))
{
var type = dic["RobotType"].ToString();
if (Enum.TryParse(type, out robotType))
throw new Exception($"{(robotType == RobotType.客户端微信 ? ChatType.微信 : robotType == RobotType.客户端企业微信 ? ChatType.企业微信 : robotType == RobotType.客户端扣扣 ? ChatType.QQ : ChatType.微信公众号)}:{RobotUsernick}({RobotUsername}) 易转发与软件秘钥不匹配,无法通讯!");
}
}
var cmd_int = (int)cmd;
var events = ChatClient.Events;
if (cmd.ToString().ToLower().StartsWith("offline".ToLower()))
{
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd = {data})");
var json = JsonConvert.DeserializeObject(data);
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd A = {data} # json = {(json == null ? string.Empty : JsonConvert.SerializeObject(json))}");
var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatStatusEvents(json);
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd B = {data} # evt = {(evt == null ? string.Empty : JsonConvert.SerializeObject(evt))}");
if (evt == null)
{
EventClient.OnEvent(null, $"{json.RobotUsername}({json.Uin})心跳发送失败");
return;
}
if (evt.Key != Setting.ServerConfig.SocketPassword)
{
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd RRR = {data}");
EventClient.OnEvent(null, $"{json.RobotUsername}({json.Uin})心跳发送失败,秘钥不一致");
}
try
{
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd CCCC = {data}");
var robot = GetRobotInfo(evt.RobotUsername, evt.RobotUsernick, evt.RobotType == RobotType.客户端微信 ? ChatType.微信 : ChatType.企业微信, json.Uin, json.Device);
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd C = {data} # robot = {(robot == null ? string.Empty : JsonConvert.SerializeObject(robot))}");
robot.is_login = evt.Status == Status.在线;
Chat.Framework.ChatClient.PCRobotPool.Update(evt.RobotUsername, session);
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd D = {data}");
var hook = FindHookRobot(robot, evt.RobotType);
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd E = {data} # hook = {(hook == null ? string.Empty : hook.GetType().Name)}");
if (hook != null)
{
hook.Receive(evt);
//LogHelper.GetSingleObj().Debug("", $"收到的消息cmd F = {data}");
if (string.IsNullOrWhiteSpace(robot.end_time))
{
var softId = (robot.type == Api.Framework.SDK.ChatType.QQ) ? 1002 : 1001;
var custm = GrantClient.Get().Refresh(robot.uin.ToString(), softId);
if (custm != null)
{
robot.end_time = custm.endTime;
ApiClient.GetSession().SaveOrUpdate(robot);
ApiClient.GetSession().FindRobots(true);
}
}
}
else
{
LogHelper.GetSingleObj().Debug("", $"客户端消息1:{requestInfo.Key} - Uin:{evt.Uin},{evt.RobotUsernick}({evt.RobotUsername}) - hook为空");
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Debug("", $"客户端消息2:{requestInfo.Key} - Uin:{evt.Uin},{evt.RobotUsernick}({evt.RobotUsername}) - 异常:{ex.Message} - {ex.StackTrace}");
}
finally
{
var isSend = session.TrySend($"{cmd} {(HttpHelper.ObjectToJson(new { RobotUsername = json.RobotUsername }))}\r\n");
//LogHelper.GetSingleObj().Debug("", $"客户端消息3:{requestInfo.Key} - {data} - 响应心跳:{isSend}");
}
}
else
{
//LogHelper.GetSingleObj().Debug("", $"收到的消息___cmd = {cmd} {data})");
}
//个人微信消息
if (cmd_int >= 2000 && cmd_int <= 2999)
{
switch (cmd)
{
case PCRobot.Pack.PCRobotCMD.rcvTxt:
case PCRobot.Pack.PCRobotCMD.rcvFile:
case PCRobot.Pack.PCRobotCMD.rcvImg:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatReceiveMsgEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
//EventClient.OnEvent(evt, evt);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
{
hook.Receive(evt);
}
}
break;
case PCRobotCMD.applyFriend:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatApplyFriendEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
}
break;
case PCRobot.Pack.PCRobotCMD.receivePay:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatReicevePayEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
}
break;
case PCRobotCMD.applyGroup:
{ }
break;
case PCRobotCMD.newfriend:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatNewFriendEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
}
break;
case PCRobotCMD.offline:
{
//var json = JsonConvert.DeserializeObject(data);
//var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatStatusEvents(json);
//if (evt == null)
//{
// EventClient.OnEvent(null, $"{json.RobotUsername}({json.Uin})心跳发送失败,秘钥不一致");
// return;
//}
//var robot = GetRobotInfo(evt.RobotUsername, evt.RobotUsernick, ChatType.微信, json.Uin);
//robot.is_login = evt.Status == Status.在线;
//Chat.Framework.ChatClient.PCRobotPool.Update(evt.RobotUsername, session);
//var hook = FindHookRobot(robot, evt.RobotType);
//if (hook != null)
//{
// hook.Receive(evt);
// if (string.IsNullOrWhiteSpace(robot.end_time))
// {
// var softId = (robot.type == Api.Framework.SDK.ChatType.QQ) ? 1002 : 1001;
// var custm = GrantClient.Get().Refresh(robot.uin.ToString(), softId);
// if (custm != null)
// {
// robot.end_time = custm.endTime;
// ApiClient.GetSession().SaveOrUpdate(robot);
// ApiClient.GetSession().FindRobots(true);
// }
// }
//}
}
break;
case PCRobotCMD.newMember:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WechatNewMemerEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
}
break;
case PCRobotCMD.rcvContactList:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WechatContactListEvents(json);
//if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
}
break;
case PCRobotCMD.rcvCircleData://朋友圈json数据
case PCRobotCMD.rcvMiniAppCode://朋友圈json数据
case PCRobotCMD.rcvCircleReturnId://成功发送朋友圈返回id
case PCRobotCMD.rcvCircleUploadImageUrl://朋友圈上传图片返回网络地址
case PCRobotCMD.rcvLoginCode://登录二维码
case PCRobotCMD.rcvFriendList://好友列表
{
var json = JsonConvert.DeserializeObject(data);
//var evt = new WechatContactListEvents(json);
if (json == null) return;
if (!string.IsNullOrWhiteSpace(json.RobotUsername))
{
var robot = GetRobotInfo(json.RobotUsername, json.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(json.RobotUsername, session);
}
else
{ }
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
//var hook = FindHookRobot(robot, json.RobotType);
//if (hook != null)
// hook.Receive(json);
}
break;
case PCRobotCMD.rcvContact:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WechatContactListEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
}
break;
case PCRobotCMD.rcvCheckUrl:
{
var json = JsonConvert.DeserializeObject(data);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
}
break;
case PCRobotCMD.rcvCreateRoom:
{
var json = JsonConvert.DeserializeObject(data);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
}
break;
case PCRobotCMD.rcvGroupMember:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WechatGroupMemberEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
}
break;
}
}
//企业微信消息处理
else if (cmd_int >= 3000 && cmd_int <= 3999)
{
switch (cmd)
{
case PCRobotCMD.rcvLoginCode_workWeChat://登录二维码
case PCRobotCMD.rcvFriendList_workWeChat://获取好友列表
{
var json = JsonConvert.DeserializeObject(data);
if (json == null) return;
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
//var hook = FindHookRobot(robot, json.RobotType);
//if (hook != null)
// hook.Receive(json);
}
break;
case PCRobotCMD.rcvTxt_workWeChat:
case PCRobotCMD.rcvFile_workWeChat:
case PCRobotCMD.rcvImg_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WorkWechatEvents.WorkWechatReceiveMsgEvents(json);
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
//EventClient.OnEvent(evt, evt);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
case PCRobotCMD.applyFriend_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WorkWechatEvents.WorkWechatApplyFriendEvents(json);
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
case PCRobotCMD.receivePay_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WorkWechatEvents.WorkWechatReicevePayEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
case PCRobotCMD.applyGroup_workWeChat:
{ }
break;
case PCRobotCMD.newfriend_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new Chat.Framework.PCRobotSDK.WorkWechatEvents.WorkWechatNewFriendEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
case PCRobotCMD.offline_workWeChat:
{
//var json = JsonConvert.DeserializeObject(data);
//var evt = new Chat.Framework.PCRobotSDK.WechatEvents.WechatStatusEvents(json);
//if (evt == null)
//{
// EventClient.OnEvent(null, $"{json.RobotUsername}({json.Uin})心跳发送失败,秘钥不一致");
// return;
//}
//var robot = GetRobotInfo(evt.RobotUsername, evt.RobotUsernick, ChatType.企业微信, json.Uin);
//robot.is_login = evt.Status == Status.在线;
//Chat.Framework.ChatClient.PCRobotPool.Update(evt.RobotUsername, session);
//var hook = FindHookRobot(robot, evt.RobotType);
//if (hook != null)
//{
// hook.Receive(evt);
// if (string.IsNullOrWhiteSpace(robot.end_time))
// {
// var softId = (robot.type == Api.Framework.SDK.ChatType.QQ) ? 1002 : 1001;
// var custm = GrantClient.Get().Refresh(robot.uin.ToString(), softId);
// if (custm != null)
// {
// robot.end_time = custm.endTime;
// ApiClient.GetSession().SaveOrUpdate(robot);
// ApiClient.GetSession().FindRobots(true);
// }
// }
//}
}
break;
case PCRobotCMD.newMember_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WorkWechatNewMemerEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
case PCRobotCMD.rcvContact_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WorkWechatContactListEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
}
break;
case PCRobotCMD.rcvContactList_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WorkWechatContactListEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
case PCRobotCMD.rcvGroupMember_workWeChat:
{
var json = JsonConvert.DeserializeObject(data);
var evt = new WorkWechatGroupMemberEvents(json);
if (evt == null) return;
var robot = GetRobotInfo(evt.Data.RobotUsername, evt.Data.RobotUsernick, ChatType.企业微信);
Chat.Framework.ChatClient.PCRobotPool.Update(evt.Data.RobotUsername, session);
var hook = FindHookRobot(robot, evt.Data.RobotType);
if (hook != null)
hook.Receive(evt);
else
{ }
}
break;
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Debug("", $"收到的消息cmd ERROR = {data}");
EventClient.OnEvent(null, $"{ex.Message}.");
}
});
//action.BeginInvoke(null, null);
}
#endregion
///
/// 锁获取机器人对象,确保唯一
///
private static readonly object GetRobotLock = new object();
///
/// 获取机器人对象
///
///
///
private static WeixinBase FindHookRobot(fl_robot_info robot, RobotType robotType)
{
lock (GetRobotLock)
{
try
{
var strb = new StringBuilder();
var clients = ChatClient.WXClient;
foreach (KeyValuePair item in clients)
{
strb.AppendLine($"key:{item.Key},Uin:{item.Value.User.Uin},{item.Value.User.Nick}({item.Value.User.Username})");
}
strb.AppendLine();
strb.AppendLine($"状态:{robot.is_login},微信-{robotType}:{robot.nick}({robot.name})");
//LogHelper.GetSingleObj().Info("", $"客户端微信集合 = {strb.ToString()}");
}
catch (Exception)
{ }
var v = ChatClient.WXClient.FirstOrDefault(f => f.Key == robot.name).Value;
if (!robot.is_login && v == null)
return null;
switch (robotType)
{
case RobotType.客户端系统:
break;
case RobotType.客户端微信:
if (v == null)
{
v = new WXClientImpl_HOOK(robot.name, robot.nick, long.Parse(robot.uin));
//LogHelper.GetSingleObj().Info("", $"初始化客户端微信 = {robot.uin},{robot.nick}({robot.name})");
}
break;
case RobotType.客户端企业微信:
if (v == null)
{
v = new WXClientImpl_QYHOOK(robot.name, robot.nick, long.Parse(robot.uin));
//LogHelper.GetSingleObj().Info("", $"初始化客户端企业微信 = {robot.uin},{robot.nick}({robot.name})");
}
break;
case RobotType.客户端扣扣:
break;
}
return v;
}
}
///
/// 获取机器人对象
///
/// 机器人账号
/// 机器人昵称
/// 机器人所属hook类型
///
[Obsolete("这个函数已经过时了", true)]
private static WeixinBase FindHookRobot(string username, string usernick, RobotType robotType)
{
lock (GetRobotLock)
{
var v = ChatClient.WXClient.FirstOrDefault(f => f.Key == username).Value;
switch (robotType)
{
case RobotType.客户端系统:
break;
case RobotType.客户端微信:
if (v == null)
v = new WXClientImpl_HOOK(username, usernick);
break;
case RobotType.客户端企业微信:
if (v == null)
v = new WXClientImpl_QYHOOK(username, usernick);
break;
case RobotType.客户端扣扣:
break;
}
return v;
}
}
///
/// 锁 - 获取机器人
///
private readonly static object robot_lock = new object();
///
/// 获取机器人数据库对象
///
/// 要查询的机器人账号
/// 机器人昵称
/// 平台类型
/// 机器人的uin,企业微信/QQ的为自己的账号
///
private static fl_robot_info GetRobotInfo(string robotUsername, string robotUsernick, ChatType chatType, string uin = "", string device = "")
{
var s = ApiClient.GetSession();
fl_robot_info robot = null;
if (string.IsNullOrWhiteSpace(robotUsername))
return null;
lock (robot_lock)
{
robot = s.FindRobotInfo(robotUsername, chatType);
if (robot == null)
{
robot = new fl_robot_info()
{
name = robotUsername,
nick = Util.RemoveEmoji(robotUsernick),
uin = uin,
type = chatType,
token = device,
remark = "PCWechat HOOK"
};
robot = s.Insertable(robot).ExecuteReturnEntity();
try
{
var result = UserRobotUpLoad.CustomerLink_UpLoadRobot(new List()
{
new UserRobotUpLoad.CustomerRobotInput()
{
HeadUrl = string.Empty,
NickName = robot.nick,
Remark = robot.remark,
RobotType = UserRobotUpLoad.ConvertRobotType(robot.type),
UserName = robot.name
}
});
}
catch (Exception e)
{ }
s.FindRobots(true);
}
else
{
if (!string.IsNullOrWhiteSpace(robotUsernick) && (string.IsNullOrWhiteSpace(robot.nick) || robot.nick != robotUsernick))
{
robot.nick = Util.RemoveEmoji(robotUsernick);
s.Saveable(robot).ExecuteCommand();
s.FindRobots(true);
}
if ((!string.IsNullOrWhiteSpace(uin) && uin != robot.uin) || (!string.IsNullOrWhiteSpace(device) && device != robot.token))
{
robot.uin = uin;
robot.token = device;
robot.remark = "PCWechat HOOK";
s.Saveable(robot).ExecuteCommand();
s.FindRobots(true);
}
else
{ }
}
robot.is_login = true;
}
return robot;
}
///
/// 配置
///
public static Setting Setting { get; set; }
///
/// 清理垃圾
///
private static ClearGarbageTimer _ClearGarbage;
///
/// 判断是否已经配置数据库
///
///
public static bool SelectDbbase()
{
Setting = new Setting();
//选择数据库
if (string.IsNullOrEmpty(Setting.DbConfig.ConnectionString))
{
SetConnectionConfig connection = new SetConnectionConfig();
connection.ShowDialog();
if (!connection.IsOk) return false;
return true;
}
return true;
}
///
/// 初始化
///
public static bool Initialization()
{
try
{
Cache = CacheTool.GetSingleObj();
//初始化
var session = GetSession();
try
{
bool first = CreateTables(session);
Setting.Iniconfig();
if (string.IsNullOrWhiteSpace(Setting.SystemConfig.cps_server_api))
{
Setting.SystemConfig.cps_server_api = "http://cps.api.52cmg.cn/";
}
if (first)
{
Setting.Plugins.Add("PointManage.Class1");
Setting.Plugins.Add("TBRebate.Class1");
Setting.Plugins.Add("PDDRebate.Class1");
Setting.Plugins.Add("UserFission.Class1");
Setting.Plugins.Add("AutoAnswer.Class1");
}
string key = "2lThVzrziUuYbxfzgQ9CpivZANcSOVzUaV9Uacw8gCaudDjT6Vn6Mv+HyMKUnZB4zCwBOYkFuMjS8gfoog3Dk26TkHxAp7izE3RK8ptL7vzqozaMioqak05binUrZxLiy4X/5D9+Ny+lueuQjCIjn6eXL0D595NbAlTw/uOHodE=AQAB";
CpsClient.SetEnckey(10003, ApiClient.Setting.SystemConfig.cps_server_api, key);
//var ip = (CpsClient.SendServer("find_config", "webtool.asmx", new { name = "Grpc微信服务器" }) as string).Split(',');
ChatClient.GetServerDataMethod = GetServerConfig;
// var ip = "193.112.217.56:81".Split(','); ;
//var ip = "193.112.217.56:81".Split(','); ;
// ip = new string[] { "118.25.53.240:9888" };
ChatClient.SetWeixinCore(null, new string[] { "1001", "13101A4D25A0C46B97BB58799C0D5CC7" });
ChatClient.Events.WXGetDeviceEvent += Events_WXGetDeviceEvent;
ChatClient.GetDBWechatFriend = GetDBWechatFriend;
PluginClient.LodingPlugin();//加载插件
ResetTimer();
return true;
}
catch (Exception ex)
{
throw ex;
return false;
// session.Rollback();
}
}
catch (Exception ex)
{
throw ex;
//MessageBox.Show(ex.Message + ex.StackTrace != null ? "\r\n" + ex.StackTrace : "", "初始化失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
///
/// 服务端Socket启动
///
public static void SocketInitialization()
{
if (Setting.ServerConfig.IsOpen)
{
WebClient.Start(Setting.ServerConfig.Host, ApiClient.Setting.ServerConfig.Port, false);
}
if (Setting.ServerConfig.SocketIsOpen)
{
StartSocketServer(Setting.ServerConfig.SocketPort, Setting.ServerConfig.SocketPassword);
}
}
///
/// 通过用户id查库获取Friend用户对象
///
///
///
private static Chat.Framework.WXSdk.Friend GetDBWechatFriend(string username)
{
try
{
var session = GetSession();
var member = session.FindSingle("select * from fl_member_info where (robot_type = @robot_type1 or robot_type = @robot_type2) and username = @username", new { username = username, robot_type1 = ChatType.微信, robot_type2 = ChatType.企业微信 });
if (member != null)
return new Chat.Framework.WXSdk.Friend() { UserName = member.username, NickName = member.usernick, Alias = member.wechatid };
}
catch (Exception)
{ }
return new Chat.Framework.WXSdk.Friend() { UserName = username };
}
///
/// 协议微信设备信息更新
///
///
///
private static void Events_WXGetDeviceEvent(object sender, Chat.Framework.WXSdk.Events.WXGetDevice e)
{
try
{
var session = GetSession();
//var device = session.Queryable().Where(f => f.weixinhao == e.Client.WeixinHao).Single();
var device = session.FindSingle("select * from fl_wechat_device where weixinhao = @weixinhao", new { weixinhao = e.Client.WeixinHao });
if (device != null)
{
e.DeviceInfo = string.IsNullOrEmpty(device.device_info) ? string.Empty : device.device_info;
}
}
catch (Exception)
{ }
}
public static string GetServerConfig(string key)
{
return CpsClient.SendServer("find_config", "webtool.asmx", new { name = key }) as string;
}
#region 临时用的,返回false不用管,返回true表示已经删除了(删除了,重新新建索引)
private static bool checkIndex(SqlSugarClient session, string tableName, params object[] values)
{
try
{
if (session.CurrentConnectionConfig.DbType == DbType.MySql)
{
if (session.IndexExist(tableName, values[0].ToString()))
return session.DeleteIndex(tableName, values[0].ToString());
}
else if (session.CurrentConnectionConfig.DbType == DbType.Sqlite)
{
if (session.IndexExist(tableName, tableName + "_" + string.Join("_", values)))
return session.DeleteIndex(tableName, tableName + "_" + string.Join("_", values));
}
}
catch (Exception)
{ }
return false;
}
#endregion
///
/// 创建表,没有表则创建
///
///
///
public static bool CreateTables(SqlSugarClient session)
{
var strb = new StringBuilder();
try
{
if (!session.TableExist())
{
strb.AppendLine("fl_ratio_info_custom_group");
session.CreateTable();
session.AddUnique("cps_type", "name");
}
if (!session.TableExist())
{
strb.AppendLine("fl_ratio_info_custom");
session.CreateTable();
session.AddUnique("cps_type", "cgid", "comm");
}
//全额免单
if (!session.TableExist())
{
strb.AppendLine("fl_plugin_allrebatesactivity_info");
session.CreateTable();
session.AddIndex("name");//增加索引.以后数据多了.查询速度会比较快
session.AddUnique("name");//增加唯一约束
}
//全额免单订单
if (!session.TableExist())
{
strb.AppendLine("fl_plugin_allrebatesactivity_orderlist");
session.CreateTable();
}
if (!session.TableExist())
{
strb.AppendLine("fl_prevent_theft_cache");
session.CreateTable();
session.AddIndex("order_id");
session.AddUnique("order_id");
}
//推广位组
if (!session.TableExist())
{
strb.AppendLine("fl_adzone_group");
session.CreateTable();
session.AddIndex("cps_type");
session.AddUnique("name");
}
else
{
strb.AppendLine("fl_adzone_group 2");
if (!session.ColumnExist("fl_adzone_group", "remark"))
{
session.AddColumn("fl_adzone_group", "remark", "varchar(255) default ''");
}
}
//推广位
if (!session.TableExist())
{
strb.AppendLine("fl_adzone_info");
session.CreateTable();
}
else
{
if (!session.ColumnExist("fl_adzone_info", "is_auto_bind"))
{
strb.AppendLine("fl_adzone_info 2");
session.AddColumn("fl_adzone_info", "is_auto_bind", "boolean default 0");
}
if (!session.ColumnExist("fl_adzone_info", "adzone_group"))
{
strb.AppendLine("fl_adzone_info 3");
session.AddColumn("fl_adzone_info", "adzone_group", "integer default 0");
}
}
//用户自定义变量
if (!session.TableExist())
{
strb.AppendLine("fl_uservariate_info");
session.CreateTable();
session.AddUnique("variate");
}
if (!session.TableExist())
{
try
{
strb.AppendLine("fl_dy_ck");
session.CreateTable();
session.AddUnique("cpsname", "chname");
}
catch (Exception ex)
{
}
}
if (!session.TableExist())
{
strb.AppendLine("fl_wechat_contacts");
session.CreateTable();
session.AddUnique("user_name");
}
if (!session.TableExist())
{
strb.AppendLine("fl_noticeapi_info");
session.CreateTable();
session.AddUnique("name");
}
//dubug日志
if (!session.TableExist())
{
strb.AppendLine("fl_debug_log");
session.CreateTable();
}
//群负责人
if (!session.TableExist())
{
strb.AppendLine("fl_group_person");
session.CreateTable();
session.AddIndex("groupid");
}
//私人pid
if (!session.TableExist())
{
strb.AppendLine("fl_private_pid");
session.CreateTable();
}
if (!session.TableExist())
{
strb.AppendLine("fl_refund_hist_point");
session.CreateTable();
session.AddUnique("orderid", "orderid2");
session.AddIndex("cpstype", "orderid", "orderid2");
}
//阿里妈妈维权表
if (!session.TableExist())
{
strb.AppendLine("fl_order_refund_alimama");
session.CreateTable();
session.AddIndex("tbtradeparentid", "tbtradeid");
}
else
{
#region 以后可以删除
try
{
if (session.CurrentConnectionConfig.DbType == DbType.Sqlite)
{
strb.AppendLine("fl_order_refund_alimama 2");
session.ExcuteSQL("drop index fl_order_refund_alimama_tbTradeParentId_", new { });
}
else if (session.CurrentConnectionConfig.DbType == DbType.MySql)
{
strb.AppendLine("fl_order_refund_alimama 3");
session.ExcuteSQL("ALTER TABLE fl_order_refund_alimama DROP INDEX tbTradeParentId", new { });
}
}
catch (Exception ex)
{
}
#endregion
}
//微信设备信息
if (!session.TableExist())
{
strb.AppendLine("fl_wechat_device");
session.CreateTable();
session.AddUnique("fl_wechat_device", "weixinhao");
}
else
{
#region 修改mysql中varchar类型,类中text的类型 以后可以删除
if (session.CurrentConnectionConfig.DbType == DbType.MySql)
{
try
{
PropertyInfo[] Propertys = typeof(fl_wechat_device).GetProperties();
foreach (var item in Propertys)
{
string _name = item.Name;
if (_name.ToLower() == "device_info".ToLower())
{
if (item.PropertyType.FullName == typeof(string).ToString())
session.ExcuteSQL("ALTER TABLE fl_wechat_device MODIFY COLUMN " + _name + " Text", new { });
}
}
}
catch (Exception ex)
{ }
}
#endregion
}
//用户信息表
if (!session.TableExist())
{
strb.AppendLine("fl_member_info");
session.CreateTable();
session.AddUnique("robot_type", "username");
//session.AddIndex("inviter_id", "robot_type", "username");
//session.AddIndex("status", "robot_name");
session.AddIndex("robot_type", "username");
session.AddIndex("crt_time", "robot_name");
session.AddIndex("status");
session.AddIndex("inviter_id");
session.AddIndex("usernick");
}
else
{
//if (!session.IndexExist("inviter_id"))
//{
// session.AddIndex("inviter_id", "status", "robot_name");
//}
var flag1 = checkIndex(session, "fl_member_info", "inviter_id", "robot_type", "username");
var flag2 = checkIndex(session, "fl_member_info", "status", "robot_name");
var flag3 = checkIndex(session, "fl_member_info", "inviter_id", "status", "robot_name");
if (flag1 || flag2 || flag3)
{
strb.AppendLine("fl_member_info 1");
session.AddIndex("robot_type", "username");
session.AddIndex("crt_time", "robot_name");
session.AddIndex("status");
session.AddIndex("inviter_id");
session.AddIndex("usernick");
}
if (!session.ColumnExist("fl_member_info", "ignore_group_update"))
{
strb.AppendLine("fl_member_info 2");
session.AddColumn("fl_member_info", "ignore_group_update", "integer default 0");
}
if (!session.ColumnExist("fl_member_info", "chat_count"))
{
strb.AppendLine("fl_member_info 3");
session.AddColumn("fl_member_info", "chat_count", "integer default 0");
session.AddColumn("fl_member_info", "blackout_time", "datetime default '2000-01-01 00:00:00'");
}
if (!session.ColumnExist("fl_member_info", "identity_card"))
{
strb.AppendLine("fl_member_info 4");
session.AddColumn("fl_member_info", "identity_card", "varchar(255)");
}
if (!session.ColumnExist("fl_member_info", "headurl"))
{
strb.AppendLine("fl_member_info 4.1");
session.AddColumn("fl_member_info", "headurl", "varchar(255) default ''");
}
if (!session.ColumnExist("fl_member_info", "identity_name"))
{
strb.AppendLine("fl_member_info 5");
session.AddColumn("fl_member_info", "identity_name", "varchar(255)");
}
if (!session.ColumnExist("fl_member_info", "ban_exchange_time"))
{
strb.AppendLine("fl_member_info 6");
session.AddColumn("fl_member_info", "ban_exchange_time", "datetime default '2000-01-01 00:00:00'");
}
if (!session.ColumnExist("fl_member_info", "private_ratio"))
{
strb.AppendLine("fl_member_info 7");
session.AddColumn("fl_member_info", "private_ratio", "double default 0");
}
if (!session.ColumnExist("fl_member_info", "exchange_type"))
{
strb.AppendLine("fl_member_info 7-1");
session.AddColumn("fl_member_info", "exchange_type", "integer default 0");
}
if (!session.ColumnExist("fl_member_info", "realnick"))
{
strb.AppendLine("fl_member_info 8");
session.AddColumn("fl_member_info", "realnick", "varchar(255) default ''");
session.AddColumn("fl_member_info", "wechatid", "varchar(255) default ''");
}
if (!session.ColumnExist("fl_member_info", "check_cloud_black_time"))
{
strb.AppendLine("fl_member_info 9");
session.AddColumn("fl_member_info", "check_cloud_black_time", "datetime default '2000-01-01 00:00:00'");
session.AddColumn("fl_member_info", "is_cloud_black", "boolean default 0");
}
if (!session.ColumnExist("fl_member_info", "bind_order"))
{
strb.AppendLine("fl_member_info 0");
session.AddColumn("fl_member_info", "bind_order", "integer default 0");
var members = session.Find("select * from fl_member_info").Where(f => f.finish_order != 0).ToList();
for (int i = 0; i < members.Count; i++)
{
members[i].bind_order = members[i].finish_order;
}
var _num = (int)Math.Ceiling((decimal)members.Count / 500m);
for (int o = 1; o <= _num; o++)
{
var _list = members.Skip((o - 1) * 500).Take(500).ToList();
session.Updateable(_list.ToArray()).ExecuteCommand();
}
}
}
//云黑名单
if (!session.TableExist())
{
strb.AppendLine("fl_cloud_black");
session.CreateTable();
session.AddUnique("memberid");
}
if (!session.TableExist())
{
strb.AppendLine("fl_blackuser");
session.CreateTable();
session.AddUnique("username", "usertype");
}
if (!session.TableExist())
{
strb.AppendLine("fl_douyin_record");
session.CreateTable();
session.AddUnique("product_id", "promotion_id");
session.AddIndex("product_id");
session.AddIndex("promotion_id");
}
if (!session.TableExist())
{
strb.AppendLine("fl_itempoint1_hist");
session.CreateTable();
session.AddUnique("guidkey");
session.AddIndex("guidkey");
}
//用户其他信息记录表
if (!session.TableExist())
{
strb.AppendLine("fl_statistics_record");
session.CreateTable();
session.AddIndex("uid");
session.AddUnique("uid");
}
else
{
strb.AppendLine("fl_statistics_record 2");
try
{
var result = session.FindTable("select uid from fl_statistics_record group by uid having count(uid) > 1 order by uid");
if (result.Rows.Count != 0)
{
for (int i = 0; i < result.Rows.Count; i++)
{
var uid = result.Rows[i]["uid"].ToString();
var records = session.Find("uid = @uid", new { uid = uid });
fl_statistics_record _record = null;
foreach (var record in records)
{
if (_record == null)
_record = record;
else
{
if (_record.ex1 == 0)
_record.ex1 += record.ex1;
if (_record.ex2 == 0)
_record.ex2 += record.ex2;
_record.ex3 += record.ex3;
_record.ex4 += record.ex4;
_record.ex5 += record.ex5;
_record.ex6 += record.ex6;
_record.ex7 += record.ex7;
_record.ex8 += record.ex8;
_record.ex9 += record.ex9;
_record.ex10 += record.ex10;
_record.ex11 += record.ex11;
_record.ex12 += record.ex12;
_record.querynum += record.querynum;
session.Deleteable().In(record.id).ExecuteCommand();
}
}
if (_record != null)
session.Updateable(_record).ExecuteCommand();
}
}
if (!session.ExistUnique("fl_statistics_record", "uid"))
session.AddUnique("uid");
}
catch (Exception ex)
{ }
}
if (!session.TableExist())
{
strb.AppendLine("fl_member_level");
session.CreateTable();
}
if (!session.TableExist())
{
strb.AppendLine("fl_alimama_tlj_create_record");
session.CreateTable();
session.AddUnique("cpsname");
}
if (!session.TableExist())
{
strb.AppendLine("fl_alimama_tlj_get_record");
session.CreateTable();
session.AddUnique("itemid");
session.AddIndex("itemid", "expiredate");
}
if (!session.TableExist())
{
strb.AppendLine("fl_plugin_info");
session.CreateTable();
}
if (!session.TableExist())
{
strb.AppendLine("fl_robot_info");
session.CreateTable();
session.AddUnique("name", "type");
}
else
{
strb.AppendLine("fl_robot_info 2");
if (!session.ColumnExist("fl_robot_info", "is_receives"))
{
session.AddColumn("fl_robot_info", "is_receives", "integer default 1");
}
if (!session.ColumnExist("fl_robot_info", "off_line_tip"))
{
session.AddColumn("fl_robot_info", "off_line_tip", "integer default 1");
}
if (!session.ColumnExist("fl_robot_info", "off_line_auto_login"))
{
session.AddColumn("fl_robot_info", "off_line_auto_login", "integer default 1");
}
}
if (session.TableExist("fl_member_private_config"))
{
strb.AppendLine("fl_member_private_config");
session.DropTable("fl_member_private_config");
}
if (!session.TableExist())
{
strb.AppendLine("fl_weixin_password");
session.CreateTable();
session.AddUnique("robot_id");
}
else
{
strb.AppendLine("fl_weixin_password 2");
//这个字段没有什么用,最早之前不知道为什么要给fl_weixin_password继承base_model
if (!session.ColumnExist("fl_weixin_password", "db_status_time"))
{
session.AddColumn("fl_weixin_password", "db_status_time", "varchar(25)");
}
}
if (!session.TableExist())
{
strb.AppendLine("fl_cps_member");
session.CreateTable();
session.AddUnique("username", "cpstype");
}
else
{
strb.AppendLine("fl_cps_member 2");
if (!session.ColumnExist("fl_cps_member", "abnormal_tip"))
{
session.AddColumn("fl_cps_member", "abnormal_tip", "integer default 1");
}
if (!session.ColumnExist("fl_cps_member", "is_download"))
{
session.AddColumn("fl_cps_member", "is_download", "integer default 1");
}
if (!session.ColumnExist("fl_cps_member", "is_valid"))
{
session.AddColumn("fl_cps_member", "is_valid", "boolean default 1");
}
if (!session.ColumnExist("fl_cps_member", "other"))
{
session.AddColumn("fl_cps_member", "other", "text");
}
}
try
{
session.UpdateColumnType("fl_cps_member", "cookies", "longText");
}
catch (Exception)
{ }
if (!session.TableExist())
{
strb.AppendLine("fl_point_hist");
session.CreateTable();
session.AddIndex("crt_time", "type", "rid", "uid");
session.AddIndex("uid", "type");
session.AddIndex("uid", "type", "message");
}
else
{
strb.AppendLine("fl_point_hist 2");
if (!session.ColumnExist("fl_point_hist", "after_point"))
{
session.AddColumn("fl_point_hist", "after_point", "double default 0");
session.AddColumn("fl_point_hist", "before_point", "double default 0");
}
if (!session.ColumnExist("fl_point_hist", "rid"))
{
session.AddColumn("fl_point_hist", "rid", "integer default 0");
}
if (!session.IndexExist("uid", "type", "message"))
{
session.AddIndex("uid", "type", "message");
}
}
if (!session.TableExist())
{
strb.AppendLine("fl_create_info");
session.CreateTable();
session.AddUnique("groupid", "chat_type");
}
if (!session.TableExist())
{
strb.AppendLine("fl_alimama_order_lastnum");
session.CreateTable();
session.AddUnique("lastnumber", "userid");
session.AddIndex("lastnumber");
}
if (!session.TableExist())
{
strb.AppendLine("fl_alimama_tlj_info");
session.CreateTable();
session.AddUnique("username");
}
if (!session.TableExist())
{
strb.AppendLine("fl_tb_relation");
session.CreateTable();
session.AddUnique("cps_memberid", "special_id");
}
//添加淘宝比例
if (!session.TableExist())
{
strb.AppendLine("fl_ratio_info");
session.CreateTable();
session.AddUnique("comm", "cps_type");
session.Insertable(new fl_ratio_info() { cps_type = CpsType.阿里妈妈, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.阿里妈妈, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.阿里妈妈, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.京东联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.京东联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.京东联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.多多进宝, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.多多进宝, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.多多进宝, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.唯品联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.唯品联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.唯品联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.抖音联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.抖音联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.抖音联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.苏宁易购, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.苏宁易购, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.苏宁易购, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.快手联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.快手联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.快手联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
}
else
{
strb.AppendLine("fl_ratio_info 2");
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.唯品联盟).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_ratio_info() { cps_type = CpsType.唯品联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.唯品联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.唯品联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.抖音联盟).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_ratio_info() { cps_type = CpsType.抖音联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.抖音联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.抖音联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.苏宁易购).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_ratio_info() { cps_type = CpsType.苏宁易购, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.苏宁易购, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.苏宁易购, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.快手联盟).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_ratio_info() { cps_type = CpsType.快手联盟, comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.快手联盟, comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_ratio_info() { cps_type = CpsType.快手联盟, comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
}
}
catch (Exception)
{ }
}
if (!session.TableExist())
{
strb.AppendLine("fl_member_group");
session.CreateTable();
session.AddUnique("name");
session.AddUnique("terms", "terms_ordersum");
session.Insertable(new fl_member_group() { name = "大众会员", terms = 0, terms_ordersum = 0, subsidy = 0.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_member_group() { name = "黄金会员", terms = 20, terms_ordersum = 5, subsidy = 0.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_member_group() { name = "铂金会员", terms = 100, terms_ordersum = 15, subsidy = 0.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
session.Insertable(new fl_member_group() { name = "钻石会员", terms = 500, terms_ordersum = 50, subsidy = 0.00, subsidy_type = SubsidyType.百分比 }).ExecuteCommand();
}
else
{
strb.AppendLine("fl_member_group 2");
if (!session.ColumnExist("fl_member_group", "terms_ordersum"))
{
session.AddColumn("fl_member_group", "terms_ordersum", "integer default 0");
try
{
session.AddUnique("terms", "terms_ordersum");
if (session.CurrentConnectionConfig.DbType == DbType.Sqlite)
{
session.ExcuteSQL("drop INDEX fl_member_group_terms_", new { });
}
else if (session.CurrentConnectionConfig.DbType == DbType.MySql)
{
session.ExcuteSQL("ALTER TABLE fl_member_group DROP INDEX terms", new { });
}
}
catch (Exception ex)
{
}
}
if (!session.ColumnExist("fl_member_group", "ratio_custom_tb"))
{
session.AddColumn("fl_member_group", "ratio_custom_tb", "integer default 0");
session.AddColumn("fl_member_group", "ratio_custom_pdd", "integer default 0");
session.AddColumn("fl_member_group", "ratio_custom_jd", "integer default 0");
session.AddColumn("fl_member_group", "ratio_custom_wph", "integer default 0");
session.AddColumn("fl_member_group", "ratio_custom_dy", "integer default 0");
}
if (!session.ColumnExist("fl_member_group", "ratio_custom_sn"))
{
session.AddColumn("fl_member_group", "ratio_custom_sn", "integer default 0");
}
if (!session.ColumnExist("fl_member_group", "ratio_custom_ks"))
{
session.AddColumn("fl_member_group", "ratio_custom_ks", "integer default 0");
}
}
if (!session.TableExist())
{
strb.AppendLine("fl_order_sleep");
session.CreateTable();
session.AddUnique("money", "cps_type");
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.阿里妈妈 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.阿里妈妈 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.京东联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.京东联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.多多进宝 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.多多进宝 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.唯品联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.唯品联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.抖音联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.抖音联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.苏宁易购 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.苏宁易购 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.快手联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.快手联盟 }).ExecuteCommand();
}
else
{
strb.AppendLine("fl_order_sleep 2");
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.唯品联盟).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.唯品联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.唯品联盟 }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.抖音联盟).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.抖音联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.抖音联盟 }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.苏宁易购).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.苏宁易购 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.苏宁易购 }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable().Where(f => f.cps_type == CpsType.快手联盟).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType.快手联盟 }).ExecuteCommand();
session.Insertable(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType.快手联盟 }).ExecuteCommand();
}
}
catch (Exception)
{ }
}
if (!session.TableExist())
{
strb.AppendLine("fl_query_ratio_hist");
session.CreateTable();
session.AddUnique("cpstype", "db_orderid");
}
if (!session.TableExist())
{
strb.AppendLine("fl_operation_log");
session.CreateTable();
session.AddIndex("otype", "datetime");
session.AddIndex("datetime");
}
if (!session.TableExist())
{
strb.AppendLine("fl_query_hist");
session.CreateTable