old_flsystem/类库/Api.Framework/ApiClient.cs

4215 lines
219 KiB
C#
Raw Permalink Normal View History

2022-09-20 03:10:29 +00:00
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
{
/// <summary>
/// Api端功能集合
/// </summary>
public class ApiClient
{
2022-11-09 07:44:08 +00:00
/// <summary>
/// 获取有效商品Id
/// </summary>
/// <param name="numIid"></param>
/// <returns></returns>
public static string GetValidItemId(string numIid)
{
2022-11-09 11:51:42 +00:00
if (numIid == null)
{
return string.Empty;
}
2022-11-09 07:44:08 +00:00
if (numIid.Contains("-"))
{
var split = numIid.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
var itemIdB = split[1];
return itemIdB;
}
return numIid;
}
public static Func<bool> 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;
}
2022-09-20 03:10:29 +00:00
/// <summary>
/// 插件列表显示的插件
/// </summary>
public static List<string> ShowPluginList { get; set; }
private static PointManageConfig pointManageConfig = null;
/// <summary>
/// 获取积分管理插件配置
/// </summary>
/// <param name="flush">是否刷新</param>
/// <returns></returns>
public static PointManageConfig GetPointManageConfig(bool flush = false)
{
if (pointManageConfig == null || flush)
pointManageConfig = PluginExtend.ReadConfig<PointManageConfig>(null);
return pointManageConfig;
}
private static Version _version;
/// <summary>
/// 当前版本
/// </summary>
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
/// <summary>
/// Socket服务
/// </summary>
public static AppServer Server { get; private set; }
/// <summary>
/// 关闭Socket服务
/// </summary>
public static void StopSocketServer()
{
try
{
if (Server != null)
{
Server.Stop();
Server.NewSessionConnected -= appServer_NewSessionConnected;
Server.SessionClosed -= appServer_NewSessionClosed;
}
}
catch (Exception)
{ }
}
/// <summary>
/// 有新的Socket连接
/// </summary>
/// <param name="session">连接端的信息</param>
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} --> 连接成功!");
}
/// <summary>
/// 有连接的Socket关闭
/// </summary>
/// <param name="session">断开端的信息</param>
/// <param name="value">关闭的原因</param>
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<fl_robot_info>(r).ExecuteCommand();
}
}
catch (Exception ex)
{
EventClient.OnEvent(session, $"{session.RemoteEndPoint.Address}-{session.RemoteEndPoint.Port}{value}{ex.Message}-{ex.StackTrace}--> 已关闭!");
}
}
/// <summary>
/// 启动Socket服务
/// </summary>
/// <param name="port">端口</param>
/// <param name="password">通讯秘钥</param>
/// <returns></returns>
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,
2022-10-03 03:31:32 +00:00
MaxConnectionNumber = 100 * 5 + 50,
2022-09-20 03:10:29 +00:00
ReceiveBufferSize = bufSize,
MaxRequestLength = Int32.MaxValue,
2022-10-03 03:31:32 +00:00
SendingQueueSize = 400,
2022-09-20 03:10:29 +00:00
};
//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 日志,并做逻辑处理
});
}
/// <summary>
/// 收到Socket消息
/// </summary>
/// <param name="_session">发送端的信息</param>
/// <param name="_requestInfo">收到的信息</param>
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<PCRobot.Pack.PCRobotCMD>(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<CommonResult>(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<RobotType>(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<WechatStatus>(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<WechatReceiveMsg>(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<WechatApplyFriend>(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<WechatReicevePay>(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<WechatNewFriend>(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<WechatStatus>(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<WechatNewMemer>(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<WechatContact>(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<CommonResult>(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<WechatContact>(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<CheckUrl>(data);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
}
break;
case PCRobotCMD.rcvCreateRoom:
{
var json = JsonConvert.DeserializeObject<CreateRoom>(data);
Chat.Framework.ChatClient.PCRobotPool.PackHist.SetResult(json);
}
break;
case PCRobotCMD.rcvGroupMember:
{
var json = JsonConvert.DeserializeObject<WechatGroupMember>(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<CommonResult>(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<WorkWechatReceiveMsg>(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<WorkWechatApplyFriend>(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<WorkWechatReicevePay>(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<WorkWechatNewFriend>(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<WechatStatus>(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<WorkWechatNewMemer>(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<WorkWechatContact>(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<WorkWechatContact>(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<WorkWechatGroupMember>(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
/// <summary>
/// 锁获取机器人对象,确保唯一
/// </summary>
private static readonly object GetRobotLock = new object();
/// <summary>
/// 获取机器人对象
/// </summary>
/// <param name="weixinhao"></param>
/// <returns></returns>
private static WeixinBase FindHookRobot(fl_robot_info robot, RobotType robotType)
{
lock (GetRobotLock)
{
try
{
var strb = new StringBuilder();
var clients = ChatClient.WXClient;
foreach (KeyValuePair<string, WeixinBase> 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;
}
}
/// <summary>
/// 获取机器人对象
/// </summary>
/// <param name="username">机器人账号</param>
/// <param name="usernick">机器人昵称</param>
/// <param name="robotType">机器人所属hook类型</param>
/// <returns></returns>
[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;
}
}
/// <summary>
/// 锁 - 获取机器人
/// </summary>
private readonly static object robot_lock = new object();
/// <summary>
/// 获取机器人数据库对象
/// </summary>
/// <param name="robotUsername">要查询的机器人账号</param>
/// <param name="robotUsernick">机器人昵称</param>
/// <param name="chatType">平台类型</param>
/// <param name="uin">机器人的uin,企业微信/QQ的为自己的账号</param>
/// <returns></returns>
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"
};
2022-10-24 03:11:14 +00:00
robot = s.Insertable<fl_robot_info>(robot).ExecuteReturnEntity();
try
{
var result = UserRobotUpLoad.CustomerLink_UpLoadRobot(new List<UserRobotUpLoad.CustomerRobotInput>()
{
new UserRobotUpLoad.CustomerRobotInput()
{
HeadUrl = string.Empty,
NickName = robot.nick,
Remark = robot.remark,
RobotType = UserRobotUpLoad.ConvertRobotType(robot.type),
UserName = robot.name
}
});
}
catch (Exception e)
{ }
2022-09-20 03:10:29 +00:00
s.FindRobots(true);
}
else
{
if (!string.IsNullOrWhiteSpace(robotUsernick) && (string.IsNullOrWhiteSpace(robot.nick) || robot.nick != robotUsernick))
{
robot.nick = Util.RemoveEmoji(robotUsernick);
s.Saveable<fl_robot_info>(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<fl_robot_info>(robot).ExecuteCommand();
s.FindRobots(true);
}
else
{ }
}
robot.is_login = true;
}
return robot;
}
/// <summary>
/// 配置
/// </summary>
public static Setting Setting { get; set; }
/// <summary>
/// 清理垃圾
/// </summary>
private static ClearGarbageTimer _ClearGarbage;
/// <summary>
/// 判断是否已经配置数据库
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 初始化
/// </summary>
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 = "<RSAKeyValue><Modulus>2lThVzrziUuYbxfzgQ9CpivZANcSOVzUaV9Uacw8gCaudDjT6Vn6Mv+HyMKUnZB4zCwBOYkFuMjS8gfoog3Dk26TkHxAp7izE3RK8ptL7vzqozaMioqak05binUrZxLiy4X/5D9+Ny+lueuQjCIjn6eXL0D595NbAlTw/uOHodE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
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;
}
}
/// <summary>
/// 服务端Socket启动
/// </summary>
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);
}
}
/// <summary>
/// 通过用户id查库获取Friend用户对象
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
private static Chat.Framework.WXSdk.Friend GetDBWechatFriend(string username)
{
try
{
var session = GetSession();
var member = session.FindSingle<fl_member_info>("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 };
}
/// <summary>
/// 协议微信设备信息更新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void Events_WXGetDeviceEvent(object sender, Chat.Framework.WXSdk.Events.WXGetDevice e)
{
try
{
var session = GetSession();
//var device = session.Queryable<fl_wechat_device>().Where(f => f.weixinhao == e.Client.WeixinHao).Single();
var device = session.FindSingle<fl_wechat_device>("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
/// <summary>
/// 创建表,没有表则创建
/// </summary>
/// <param name="session"></param>
/// <returns></returns>
public static bool CreateTables(SqlSugarClient session)
{
var strb = new StringBuilder();
try
{
2022-11-21 09:50:35 +00:00
if (!session.TableExist<databasemigration>())
{
strb.AppendLine("databasemigration");
session.CreateTable<databasemigration>();
}
2022-09-20 03:10:29 +00:00
if (!session.TableExist<fl_ratio_info_custom_group>())
{
strb.AppendLine("fl_ratio_info_custom_group");
session.CreateTable<fl_ratio_info_custom_group>();
session.AddUnique<fl_ratio_info_custom_group>("cps_type", "name");
}
if (!session.TableExist<fl_ratio_info_custom>())
{
strb.AppendLine("fl_ratio_info_custom");
session.CreateTable<fl_ratio_info_custom>();
session.AddUnique<fl_ratio_info_custom>("cps_type", "cgid", "comm");
}
//全额免单
if (!session.TableExist<fl_plugin_allrebatesactivity_info>())
{
strb.AppendLine("fl_plugin_allrebatesactivity_info");
session.CreateTable<fl_plugin_allrebatesactivity_info>();
session.AddIndex<fl_plugin_allrebatesactivity_info>("name");//增加索引.以后数据多了.查询速度会比较快
session.AddUnique<fl_plugin_allrebatesactivity_info>("name");//增加唯一约束
}
//全额免单订单
if (!session.TableExist<fl_plugin_allrebatesactivity_orderlist>())
{
strb.AppendLine("fl_plugin_allrebatesactivity_orderlist");
session.CreateTable<fl_plugin_allrebatesactivity_orderlist>();
}
if (!session.TableExist<fl_prevent_theft_cache>())
{
strb.AppendLine("fl_prevent_theft_cache");
session.CreateTable<fl_prevent_theft_cache>();
session.AddIndex<fl_prevent_theft_cache>("order_id");
session.AddUnique<fl_prevent_theft_cache>("order_id");
}
//推广位组
if (!session.TableExist<fl_adzone_group>())
{
strb.AppendLine("fl_adzone_group");
session.CreateTable<fl_adzone_group>();
session.AddIndex<fl_adzone_group>("cps_type");
session.AddUnique<fl_adzone_group>("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<fl_adzone_info>())
{
strb.AppendLine("fl_adzone_info");
session.CreateTable<fl_adzone_info>();
}
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<fl_uservariate_info>())
{
strb.AppendLine("fl_uservariate_info");
session.CreateTable<fl_uservariate_info>();
session.AddUnique<fl_uservariate_info>("variate");
}
if (!session.TableExist<fl_dy_ck>())
{
try
{
strb.AppendLine("fl_dy_ck");
session.CreateTable<fl_dy_ck>();
session.AddUnique<fl_dy_ck>("cpsname", "chname");
}
catch (Exception ex)
{
}
}
if (!session.TableExist<fl_wechat_contacts>())
{
strb.AppendLine("fl_wechat_contacts");
session.CreateTable<fl_wechat_contacts>();
session.AddUnique<fl_wechat_contacts>("user_name");
}
if (!session.TableExist<fl_noticeapi_info>())
{
strb.AppendLine("fl_noticeapi_info");
session.CreateTable<fl_noticeapi_info>();
session.AddUnique<fl_noticeapi_info>("name");
}
//dubug日志
if (!session.TableExist<fl_debug_log>())
{
strb.AppendLine("fl_debug_log");
session.CreateTable<fl_debug_log>();
}
//群负责人
if (!session.TableExist<fl_group_person>())
{
strb.AppendLine("fl_group_person");
session.CreateTable<fl_group_person>();
session.AddIndex<fl_group_person>("groupid");
}
//私人pid
if (!session.TableExist<fl_private_pid>())
{
strb.AppendLine("fl_private_pid");
session.CreateTable<fl_private_pid>();
}
if (!session.TableExist<fl_refund_hist_point>())
{
strb.AppendLine("fl_refund_hist_point");
session.CreateTable<fl_refund_hist_point>();
session.AddUnique<fl_refund_hist_point>("orderid", "orderid2");
session.AddIndex<fl_refund_hist_point>("cpstype", "orderid", "orderid2");
}
//阿里妈妈维权表
if (!session.TableExist<fl_order_refund_alimama>())
{
strb.AppendLine("fl_order_refund_alimama");
session.CreateTable<fl_order_refund_alimama>();
session.AddIndex<fl_order_refund_alimama>("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<fl_wechat_device>())
{
strb.AppendLine("fl_wechat_device");
session.CreateTable<fl_wechat_device>();
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<fl_member_info>())
{
strb.AppendLine("fl_member_info");
session.CreateTable<fl_member_info>();
session.AddUnique<fl_member_info>("robot_type", "username");
//session.AddIndex<fl_member_info>("inviter_id", "robot_type", "username");
//session.AddIndex<fl_member_info>("status", "robot_name");
session.AddIndex<fl_member_info>("robot_type", "username");
session.AddIndex<fl_member_info>("crt_time", "robot_name");
session.AddIndex<fl_member_info>("status");
session.AddIndex<fl_member_info>("inviter_id");
session.AddIndex<fl_member_info>("usernick");
}
else
{
//if (!session.IndexExist<fl_member_info>("inviter_id"))
//{
// session.AddIndex<fl_member_info>("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<fl_member_info>("robot_type", "username");
session.AddIndex<fl_member_info>("crt_time", "robot_name");
session.AddIndex<fl_member_info>("status");
session.AddIndex<fl_member_info>("inviter_id");
session.AddIndex<fl_member_info>("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<fl_member_info>("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<fl_cloud_black>())
{
strb.AppendLine("fl_cloud_black");
session.CreateTable<fl_cloud_black>();
session.AddUnique<fl_cloud_black>("memberid");
}
if (!session.TableExist<fl_blackuser>())
{
strb.AppendLine("fl_blackuser");
session.CreateTable<fl_blackuser>();
session.AddUnique<fl_blackuser>("username", "usertype");
}
if (!session.TableExist<fl_douyin_record>())
{
strb.AppendLine("fl_douyin_record");
session.CreateTable<fl_douyin_record>();
session.AddUnique<fl_douyin_record>("product_id", "promotion_id");
session.AddIndex<fl_statistics_record>("product_id");
session.AddIndex<fl_statistics_record>("promotion_id");
}
if (!session.TableExist<fl_itempoint1_hist>())
{
strb.AppendLine("fl_itempoint1_hist");
session.CreateTable<fl_itempoint1_hist>();
session.AddUnique<fl_itempoint1_hist>("guidkey");
session.AddIndex<fl_itempoint1_hist>("guidkey");
}
//用户其他信息记录表
if (!session.TableExist<fl_statistics_record>())
{
strb.AppendLine("fl_statistics_record");
session.CreateTable<fl_statistics_record>();
session.AddIndex<fl_statistics_record>("uid");
session.AddUnique<fl_statistics_record>("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<fl_statistics_record>("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<fl_statistics_record>().In(record.id).ExecuteCommand();
}
}
if (_record != null)
session.Updateable(_record).ExecuteCommand();
}
}
if (!session.ExistUnique("fl_statistics_record", "uid"))
session.AddUnique<fl_statistics_record>("uid");
}
catch (Exception ex)
{ }
}
if (!session.TableExist<fl_member_level>())
{
strb.AppendLine("fl_member_level");
session.CreateTable<fl_member_level>();
}
if (!session.TableExist<fl_alimama_tlj_create_record>())
{
strb.AppendLine("fl_alimama_tlj_create_record");
session.CreateTable<fl_alimama_tlj_create_record>();
session.AddUnique<fl_alimama_tlj_create_record>("cpsname");
}
if (!session.TableExist<fl_alimama_tlj_get_record>())
{
strb.AppendLine("fl_alimama_tlj_get_record");
session.CreateTable<fl_alimama_tlj_get_record>();
session.AddUnique<fl_alimama_tlj_get_record>("itemid");
session.AddIndex<fl_alimama_tlj_get_record>("itemid", "expiredate");
}
if (!session.TableExist<fl_plugin_info>())
{
strb.AppendLine("fl_plugin_info");
session.CreateTable<fl_plugin_info>();
}
if (!session.TableExist<fl_robot_info>())
{
strb.AppendLine("fl_robot_info");
session.CreateTable<fl_robot_info>();
session.AddUnique<fl_robot_info>("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<fl_weixin_password>())
{
strb.AppendLine("fl_weixin_password");
session.CreateTable<fl_weixin_password>();
session.AddUnique<fl_weixin_password>("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<fl_cps_member>())
{
strb.AppendLine("fl_cps_member");
session.CreateTable<fl_cps_member>();
session.AddUnique<fl_cps_member>("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");
}
2022-12-28 09:10:01 +00:00
if (!session.ColumnExist("fl_cps_member", "other2"))
{
session.AddColumn("fl_cps_member", "other2", "text");
}
2022-09-20 03:10:29 +00:00
}
try
{
session.UpdateColumnType("fl_cps_member", "cookies", "longText");
}
catch (Exception)
{ }
if (!session.TableExist<fl_point_hist>())
{
strb.AppendLine("fl_point_hist");
session.CreateTable<fl_point_hist>();
session.AddIndex<fl_point_hist>("crt_time", "type", "rid", "uid");
session.AddIndex<fl_point_hist>("uid", "type");
session.AddIndex<fl_point_hist>("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<fl_point_hist>("uid", "type", "message"))
{
session.AddIndex<fl_point_hist>("uid", "type", "message");
}
}
if (!session.TableExist<fl_create_info>())
{
strb.AppendLine("fl_create_info");
session.CreateTable<fl_create_info>();
session.AddUnique<fl_create_info>("groupid", "chat_type");
}
if (!session.TableExist<fl_alimama_order_lastnum>())
{
strb.AppendLine("fl_alimama_order_lastnum");
session.CreateTable<fl_alimama_order_lastnum>();
session.AddUnique<fl_alimama_order_lastnum>("lastnumber", "userid");
session.AddIndex<fl_alimama_order_lastnum>("lastnumber");
}
if (!session.TableExist<fl_alimama_tlj_info>())
{
strb.AppendLine("fl_alimama_tlj_info");
session.CreateTable<fl_alimama_tlj_info>();
session.AddUnique<fl_alimama_tlj_info>("username");
}
if (!session.TableExist<fl_tb_relation>())
{
strb.AppendLine("fl_tb_relation");
session.CreateTable<fl_tb_relation>();
session.AddUnique<fl_tb_relation>("cps_memberid", "special_id");
}
//添加淘宝比例
if (!session.TableExist<fl_ratio_info>())
{
strb.AppendLine("fl_ratio_info");
session.CreateTable<fl_ratio_info>();
session.AddUnique<fl_ratio_info>("comm", "cps_type");
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(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<fl_ratio_info>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(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<fl_ratio_info>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(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<fl_ratio_info>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(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<fl_ratio_info>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 10.00, subsidy_num = 50.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 30.00, subsidy_num = 40.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_ratio_info>(new fl_ratio_info() { cps_type = CpsType., comm = 99999.00, subsidy_num = 30.00, subsidy_type = SubsidyType. }).ExecuteCommand();
}
}
catch (Exception)
{ }
}
if (!session.TableExist<fl_member_group>())
{
strb.AppendLine("fl_member_group");
session.CreateTable<fl_member_group>();
session.AddUnique<fl_member_group>("name");
session.AddUnique<fl_member_group>("terms", "terms_ordersum");
session.Insertable<fl_member_group>(new fl_member_group() { name = "大众会员", terms = 0, terms_ordersum = 0, subsidy = 0.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_member_group>(new fl_member_group() { name = "黄金会员", terms = 20, terms_ordersum = 5, subsidy = 0.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_member_group>(new fl_member_group() { name = "铂金会员", terms = 100, terms_ordersum = 15, subsidy = 0.00, subsidy_type = SubsidyType. }).ExecuteCommand();
session.Insertable<fl_member_group>(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<fl_member_group>("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<fl_order_sleep>())
{
strb.AppendLine("fl_order_sleep");
session.CreateTable<fl_order_sleep>();
session.AddUnique<fl_order_sleep>("money", "cps_type");
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(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<fl_order_sleep>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable<fl_order_sleep>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable<fl_order_sleep>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
}
}
catch (Exception)
{ }
try
{
var tmps = session.Queryable<fl_order_sleep>().Where(f => f.cps_type == CpsType.).ToList();
if (tmps == null || tmps.Count == 0)
{
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 30.00, sleep = 24, cps_type = CpsType. }).ExecuteCommand();
session.Insertable<fl_order_sleep>(new fl_order_sleep() { money = 999999.00, sleep = 48, cps_type = CpsType. }).ExecuteCommand();
}
}
catch (Exception)
{ }
}
if (!session.TableExist<fl_query_ratio_hist>())
{
strb.AppendLine("fl_query_ratio_hist");
session.CreateTable<fl_query_ratio_hist>();
session.AddUnique<fl_query_ratio_hist>("cpstype", "db_orderid");
}
if (!session.TableExist<fl_operation_log>())
{
strb.AppendLine("fl_operation_log");
session.CreateTable<fl_operation_log>();
session.AddIndex<fl_operation_log>("otype", "datetime");
session.AddIndex<fl_operation_log>("datetime");
}
if (!session.TableExist<fl_query_hist>())
{
strb.AppendLine("fl_query_hist");
session.CreateTable<fl_query_hist>();
session.AddIndex<fl_query_hist>("userid", "itemid", "adzoneid", "crt_time");
}
else
{
strb.AppendLine("fl_query_hist 2");
if (!session.ColumnExist("fl_query_hist", "adzoneid"))
{
session.AddColumn("fl_query_hist", "adzoneid", "varchar(255)");
}
if (!session.ColumnExist("fl_query_hist", "is_multiple"))
{
session.AddColumn("fl_query_hist", "is_multiple", "boolean default 0");
}
if (!session.ColumnExist("fl_query_hist", "mallid"))
{
session.Deleteable<fl_query_hist>().Where(f => f.crt_time < DateTime.Now.AddMonths(-2)).ExecuteCommand();
session.AddColumn("fl_query_hist", "mallid", "varchar(30)");
}
if (!session.IndexExist<fl_query_hist>("compute_configdic"))
{
session.AddColumn("fl_query_hist", "compute_configdic", "text");
}
}
if (!session.TableExist<fl_order_alimama>())
{
strb.AppendLine("fl_order_alimama");
session.CreateTable<fl_order_alimama>();
session.AddUnique<fl_order_alimama>("trade_id", "trade_parent_id");
session.AddIndex<fl_order_alimama>("create_time", "db_status");
session.AddIndex<fl_order_alimama>("db_userid", "db_status", "db_endtime", "alipay_total_price");
session.AddIndex<fl_order_alimama>("create_time", "db_userid");
session.AddIndex<fl_order_alimama>("trade_parent_id");
session.AddIndex<fl_order_alimama>("paid_time", "db_status");
session.AddIndex<fl_order_alimama>("db_robotname", "db_robottype");
session.AddIndex<fl_order_alimama>("earning_time", "db_status");
//session.AddIndex<fl_order_alimama>("trade_parent_id", "db_userid", "adzone_id", "create_time");
//session.AddIndex<fl_order_alimama>("num_iid", "item_title", "db_cpsnick", "db_cpsname");
//session.AddIndex<fl_order_alimama>("db_status", "db_userid");
}
else
{
strb.AppendLine("fl_order_alimama 2");
//if (!session.IndexExist<fl_order_alimama>("db_status"))
//{
// session.AddIndex<fl_order_alimama>("db_status", "db_userid");
//}
if (!session.IndexExist<fl_order_alimama>("db_userid", "db_status", "db_endtime", "alipay_total_price"))
{
session.AddIndex<fl_order_alimama>("db_userid", "db_status", "db_endtime", "alipay_total_price");
}
if (!session.IndexExist<fl_order_alimama>("db_status", "db_endtime"))
{
session.AddIndex<fl_order_alimama>("db_status", "db_endtime");
}
if (!session.IndexExist<fl_order_alimama>("db_status", "create_time"))
{
session.AddIndex<fl_order_alimama>("db_status", "create_time");
}
var flag1 = checkIndex(session, "fl_order_alimama", "db_status", "db_userid");
var flag2 = checkIndex(session, "fl_order_alimama", "item_title", "db_cpsnick", "db_cpsname");
var flag3 = checkIndex(session, "fl_order_alimama", "trade_parent_id", "db_userid", "adzone_id", "create_time");
var flag4 = checkIndex(session, "fl_order_alimama", "num_iid", "item_title", "db_cpsnick", "db_cpsname");
var flag5 = checkIndex(session, "fl_order_alimama", "db_status", "db_userid");
var flag6 = checkIndex(session, "fl_order_alimama", "db_userid", "adzone_id", "num_iid", "create_time");
if (flag1 || flag2 || flag3 || flag4 || flag5 || flag6)
{
session.AddIndex<fl_order_alimama>("create_time", "db_status");
session.AddIndex<fl_order_alimama>("db_userid", "db_status");
session.AddIndex<fl_order_alimama>("create_time", "db_userid");
session.AddIndex<fl_order_alimama>("trade_parent_id");
session.AddIndex<fl_order_alimama>("paid_time", "db_status");
session.AddIndex<fl_order_alimama>("db_robotname", "db_robottype");
session.AddIndex<fl_order_alimama>("earning_time", "db_status");
}
if (!session.ColumnExist("fl_order_alimama", "seller_id"))
{
session.AddColumn("fl_order_alimama", "seller_id", "varchar(30)");
}
if (!session.ColumnExist("fl_order_alimama", "paid_time"))
{
session.AddColumn("fl_order_alimama", "paid_time", "datetime");
}
if (!session.ColumnExist("fl_order_alimama", "deposit_price"))
{
session.AddColumn("fl_order_alimama", "deposit_price", "varchar(30)");
}
if (!session.ColumnExist("fl_order_alimama", "tb_deposit_time"))
{
session.AddColumn("fl_order_alimama", "tb_deposit_time", "varchar(25)");
}
if (!session.ColumnExist("fl_order_alimama", "db_status_time"))
{
session.AddColumn("fl_order_alimama", "db_status_time", "varchar(25)");
}
if (!session.ColumnExist("fl_order_alimama", "alimama_rate"))
{
session.AddColumn("fl_order_alimama", "alimama_rate", "double default 0");
}
if (!session.ColumnExist("fl_order_alimama", "alimama_share_fee"))
{
session.AddColumn("fl_order_alimama", "alimama_share_fee", "double default 0");
}
if (!session.ColumnExist("fl_order_alimama", "special_id"))
{
session.AddColumn("fl_order_alimama", "special_id", "integer default 0");
}
if (!session.ColumnExist("fl_order_alimama", "relation_id"))
{
session.AddColumn("fl_order_alimama", "relation_id", "integer default 0");
}
}
if (!session.TableExist<fl_order_pinduoduo>())
{
strb.AppendLine("fl_order_pinduoduo");
session.CreateTable<fl_order_pinduoduo>();
session.AddUnique<fl_order_pinduoduo>("order_sn");
//session.AddIndex<fl_order_pinduoduo>("order_sn", "db_userid", "db_cpsnick", "order_create_time");
//session.AddIndex<fl_order_pinduoduo>("db_cpsname", "p_id", "goods_name", "goods_id");
//session.AddIndex<fl_order_pinduoduo>("db_status", "db_userid");
session.AddIndex<fl_order_pinduoduo>("db_userid", "db_status");
session.AddIndex<fl_order_pinduoduo>("order_create_time", "db_status");
session.AddIndex<fl_order_pinduoduo>("order_create_time", "db_userid");
session.AddIndex<fl_order_pinduoduo>("db_status", "db_endtime");
session.AddIndex<fl_order_pinduoduo>("db_robotname", "db_robottype");
//session.AddIndex<fl_order_pinduoduo>("goods_id", "order_create_time");
}
else
{
strb.AppendLine("fl_order_pinduoduo 2");
//if (!session.IndexExist<fl_order_pinduoduo>("goods_id", "order_create_time"))
//{
// session.AddIndex<fl_order_pinduoduo>("goods_id", "order_create_time");
//}
//if (!session.IndexExist<fl_order_pinduoduo>("db_status"))
//{
// session.AddIndex<fl_order_pinduoduo>("db_status", "db_userid");
//}
//if (!session.IndexExist<fl_order_pinduoduo>("db_userid"))
//{
// session.AddIndex<fl_order_pinduoduo>("db_userid", "db_cpsnick", "db_cpsname");
// session.AddIndex<fl_order_pinduoduo>("p_id", "goods_name", "goods_id", "order_create_time");
//}
var flag1 = checkIndex(session, "fl_order_pinduoduo", "order_sn", "db_userid", "db_cpsnick", "order_create_time");
var flag2 = checkIndex(session, "fl_order_pinduoduo", "db_cpsname", "p_id", "goods_name", "goods_id");
var flag3 = checkIndex(session, "fl_order_pinduoduo", "db_status", "db_userid");
var flag4 = checkIndex(session, "fl_order_pinduoduo", "db_userid", "db_cpsnick", "db_cpsname");
var flag5 = checkIndex(session, "fl_order_pinduoduo", "p_id", "goods_name", "goods_id", "order_create_time");
if (flag1 || flag2 || flag3 || flag4 || flag5)
{
session.AddIndex<fl_order_pinduoduo>("db_userid", "db_status");
session.AddIndex<fl_order_pinduoduo>("order_create_time", "db_status");
session.AddIndex<fl_order_pinduoduo>("order_create_time", "db_userid");
session.AddIndex<fl_order_pinduoduo>("db_status", "db_endtime");
session.AddIndex<fl_order_pinduoduo>("db_robotname", "db_robottype");
}
if (!session.ColumnExist("fl_order_pinduoduo", "mall_id"))
{
session.AddColumn("fl_order_pinduoduo", "mall_id", "varchar(30)");
}
if (!session.ColumnExist("fl_order_pinduoduo", "db_status_time"))
{
session.AddColumn("fl_order_pinduoduo", "db_status_time", "varchar(25)");
}
if (!session.ColumnExist("fl_order_pinduoduo", "price_compare_status"))
{
session.AddColumn("fl_order_pinduoduo", "price_compare_status", "integer");
}
}
if (!session.TableExist<fl_order_jingdong>())
{
strb.AppendLine("fl_order_jingdong");
session.CreateTable<fl_order_jingdong>();
session.AddUnique<fl_order_jingdong>("orderId", "skuId");
//session.AddIndex<fl_order_jingdong>("orderId", "db_userid", "db_cpsnick", "orderTime");
//session.AddIndex<fl_order_jingdong>("db_cpsname", "positionId", "skuId", "skuName");
session.AddIndex<fl_order_jingdong>("orderId");
session.AddIndex<fl_order_jingdong>("db_userid", "db_status", "db_endtime", "estimateCosPrice");
session.AddIndex<fl_order_jingdong>("orderTime", "db_status");
session.AddIndex<fl_order_jingdong>("orderTime", "db_userid");
session.AddIndex<fl_order_jingdong>("db_status", "finishTime");
session.AddIndex<fl_order_jingdong>("db_robotname", "db_robottype");
}
else
{
strb.AppendLine("fl_order_jingdong 2");
if (!session.IndexExist<fl_order_jingdong>("db_userid", "db_status", "db_endtime", "estimateCosPrice"))
{
session.AddIndex<fl_order_jingdong>("db_userid", "db_status", "db_endtime", "estimateCosPrice");
}
try
{
if (!session.IndexExist<fl_order_jingdong>("orderId"))
{
session.AddIndex<fl_order_jingdong>("orderId");
}
}
catch (Exception ex)
{ }
//if (!session.IndexExist<fl_order_jingdong>("db_status"))
//{
// session.AddIndex<fl_order_jingdong>("db_status", "db_userid");
//}
//if (!session.IndexExist<fl_order_jingdong>("db_userid"))
//{
// session.AddIndex<fl_order_jingdong>("db_userid", "db_cpsnick", "db_cpsname");
// session.AddIndex<fl_order_jingdong>("positionId", "skuId", "skuName", "orderTime");
//}
var flag1 = checkIndex(session, "fl_order_jingdong", "orderId", "db_userid", "db_cpsnick", "orderTime");
var flag2 = checkIndex(session, "fl_order_jingdong", "db_cpsname", "positionId", "skuId", "skuName");
var flag3 = checkIndex(session, "fl_order_jingdong", "db_status", "db_userid");
var flag4 = checkIndex(session, "fl_order_jingdong", "db_userid", "db_cpsnick", "db_cpsname");
var flag5 = checkIndex(session, "fl_order_jingdong", "positionId", "skuId", "skuName", "orderTime");
if (flag1 || flag2 || flag3 || flag4 || flag5)
{
session.AddIndex<fl_order_jingdong>("db_userid", "db_status");
session.AddIndex<fl_order_jingdong>("orderTime", "db_status");
session.AddIndex<fl_order_jingdong>("orderTime", "db_userid");
session.AddIndex<fl_order_jingdong>("db_status", "finishTime");
session.AddIndex<fl_order_jingdong>("db_robotname", "db_robottype");
}
#region plus
if (!session.ColumnExist("fl_order_jingdong", "plus"))
{
session.AddColumn("fl_order_jingdong", "plus", "integer default 0");
}
if (!session.ColumnExist("fl_order_jingdong", "db_status_time"))
{
session.AddColumn("fl_order_jingdong", "db_status_time", "varchar(25)");
}
if (!session.ColumnExist("fl_order_jingdong", "proPriceAmount"))
{
session.AddColumn("fl_order_jingdong", "proPriceAmount", "double default 0");
}
#endregion
#region mysql中int类型,long的类型
//获取公共属性
//if (session.CurrentConnectionConfig.DbType == DbType.MySql)
//{
// PropertyInfo[] Propertys = typeof(fl_order_jingdong).GetProperties();
// foreach (var item in Propertys)
// {
// string _name = item.Name;
// string _type = string.Empty;
// bool _primary = false;
// var _attribute = item.GetCustomAttributes().FirstOrDefault(f => f.GetType() == typeof(SugarColumn)) as SugarColumn;
// if (_attribute != null)
// { }
// if (item.Name.ToLower() == "id" || _primary)
// { }
// else if (!string.IsNullOrEmpty(_type))
// { }
// else
// {
// if (item.PropertyType.FullName == typeof(Int64).ToString())
// {
// session.ExcuteSQL("ALTER TABLE fl_order_jingdong MODIFY COLUMN " + _name + " bigint(11) DEFAULT 0", new { });
// }
// }
// }
//}
#endregion
#region ,, 退
//session.ExcuteSQL("update fl_order_jingdong set db_status = 1002 where db_status = 998");
#endregion
if (!session.ColumnExist("fl_order_jingdong", "refundcreatetime"))
{
session.AddColumn("fl_order_jingdong", "refundcreatetime", "datetime");
}
}
//000000
if (!session.TableExist<fl_order_weipinhui>())
{
strb.AppendLine("fl_order_weipinhui");
session.CreateTable<fl_order_weipinhui>();
session.AddUnique<fl_order_weipinhui>("orderSn", "goodsId", "sizeId");
//session.AddUnique<fl_order_weipinhui>("orderSn");
session.AddIndex<fl_order_weipinhui>("db_userid", "db_status", "db_endtime", "commissionTotalCost");
session.AddIndex<fl_order_weipinhui>("orderTime", "db_status");
session.AddIndex<fl_order_weipinhui>("orderTime", "db_userid");
session.AddIndex<fl_order_weipinhui>("db_status", "db_endtime");
session.AddIndex<fl_order_weipinhui>("db_robotname", "db_robottype");
}
else
{
strb.AppendLine("fl_order_weipinhui 2");
//if (session.CurrentConnectionConfig.DbType == DbType.Sqlite || (session.CurrentConnectionConfig.DbType == DbType.MySql && session.ExistUnique("fl_order_weipinhui", "orderSn")))
//{
// if (session.DeleteUnique("fl_order_weipinhui", "orderSn"))
// {
// try
// {
// session.AddUnique<fl_order_weipinhui>("orderSn", "goodsId");
// }
// catch (Exception ex)
// { }
// }
//}
if (!session.IndexExist<fl_order_weipinhui>("db_userid", "db_status", "db_endtime", "commissionTotalCost"))
{
session.AddIndex<fl_order_weipinhui>("db_userid", "db_status", "db_endtime", "commissionTotalCost");
}
if (session.CurrentConnectionConfig.DbType == DbType.Sqlite || (session.CurrentConnectionConfig.DbType == DbType.MySql && session.ExistUnique("fl_order_weipinhui", "orderSn", "goodsId")))
{
if (session.DeleteUnique("fl_order_weipinhui", "orderSn", "goodsId"))
{
try
{
session.AddUnique<fl_order_weipinhui>("orderSn", "goodsId", "sizeId");
}
catch (Exception ex)
{ }
}
}
}
//000000
if (!session.TableExist<fl_order_douyin>())
{
strb.AppendLine("fl_order_douyin");
session.CreateTable<fl_order_douyin>();
session.AddUnique<fl_order_douyin>("order_id", "product_id");
session.AddIndex<fl_order_douyin>("db_userid", "db_status", "db_endtime", "total_pay_amount");
session.AddIndex<fl_order_douyin>("pay_time", "db_status");
session.AddIndex<fl_order_douyin>("pay_time", "db_userid");
session.AddIndex<fl_order_douyin>("db_status", "db_endtime");
session.AddIndex<fl_order_douyin>("db_robotname", "db_robottype");
}
else
{
strb.AppendLine("fl_order_douyin 2");
if (!session.IndexExist<fl_order_douyin>("db_userid", "db_status", "db_endtime", "total_pay_amount"))
{
session.AddIndex<fl_order_douyin>("db_userid", "db_status", "db_endtime", "total_pay_amount");
}
}
if (!session.TableExist<fl_order_suning>())
{
strb.AppendLine("fl_order_suning");
session.CreateTable<fl_order_suning>();
session.AddUnique<fl_order_suning>("orderCode", "orderLineNumber");
session.AddIndex<fl_order_suning>("db_userid", "db_status", "db_endtime", "payAmount");
session.AddIndex<fl_order_suning>("payTime", "db_status");
session.AddIndex<fl_order_suning>("payTime", "db_userid");
session.AddIndex<fl_order_suning>("payTime", "pid");
session.AddIndex<fl_order_suning>("db_status", "db_endtime");
session.AddIndex<fl_order_suning>("db_robotname", "db_robottype");
}
else
{
strb.AppendLine("fl_order_suning 2");
if (!session.IndexExist<fl_order_suning>("db_userid", "db_status", "db_endtime", "payAmount"))
{
session.AddIndex<fl_order_suning>("db_userid", "db_status", "db_endtime", "payAmount");
}
}
if (!session.TableExist<fl_order_kuaishou>())
{
strb.AppendLine("fl_order_kuaishou");
session.CreateTable<fl_order_kuaishou>();
session.AddUnique<fl_order_kuaishou>("oid", "oid2");
session.AddIndex<fl_order_kuaishou>("db_userid", "db_status", "db_endtime", "itemPrice");
session.AddIndex<fl_order_kuaishou>("payTime", "db_status");
session.AddIndex<fl_order_kuaishou>("payTime", "db_userid");
session.AddIndex<fl_order_kuaishou>("payTime", "pid");
session.AddIndex<fl_order_kuaishou>("db_status", "db_endtime");
session.AddIndex<fl_order_kuaishou>("db_robotname", "db_robottype");
}
if (!session.TableExist<fl_suning_tgw>())
{
strb.AppendLine("fl_suning_tgw");
session.CreateTable<fl_suning_tgw>();
session.AddUnique<fl_suning_tgw>("username", "toolpid");
session.AddIndex<fl_suning_tgw>("username", "toolpid");
}
2022-10-24 03:11:14 +00:00
if (!session.TableExist<fl_upload_record>())
{
strb.AppendLine("fl_upload_record");
session.CreateTable<fl_upload_record>();
}
2022-09-20 03:10:29 +00:00
if (!session.TableExist<fl_bind_cache>())
{
strb.AppendLine("fl_bind_cache");
session.CreateTable<fl_bind_cache>();
session.AddIndex<fl_bind_cache>("orderid");
}
if (!session.TableExist<fl_shpay_hist>())
{
strb.AppendLine("fl_shpay_hist");
session.CreateTable<fl_shpay_hist>();
session.AddUnique<fl_shpay_hist>("orderid");
session.AddIndex<fl_shpay_hist>("rid", "ctime");
session.AddIndex<fl_shpay_hist>("paytype", "chattype");
}
//try
//{
// if (session.TableExist("fl_alimama_activity_pid"))
// session.DropTable("fl_alimama_activity_pid");
// session.DropTable("fl_alimama_pid_activity");
//}
//catch (Exception)
//{ }
bool first = false;
if (!session.TableExist<fl_dictionary_item>())
{
strb.AppendLine("fl_dictionary_item");
session.CreateTable<fl_dictionary_item>();
session.AddUnique<fl_dictionary_item>("dickey");
first = true;
}
if (!session.TableExist<fl_exchange_info>())
{
strb.AppendLine("fl_exchange_info");
session.CreateTable<fl_exchange_info>();
session.AddIndex<fl_exchange_info>("uid", "state");
if (session.TableExist("fl_plugin_pointmanage_exchange_list"))
{
var queryable = session.Queryable("fl_plugin_pointmanage_exchange_list", "pel").AddJoinInfo("fl_robot_info", "r", "r.name = pel.robot_name").Select<fl_exchange_info>("r.id as rid,pel.*").ToList();
session.Insertable(queryable).ExecuteCommand();
}
}
else
{
strb.AppendLine("fl_exchange_info 2");
if (!session.IndexExist<fl_exchange_info>("uid", "state"))
{
session.AddIndex<fl_exchange_info>("uid", "state");
}
if (!session.ColumnExist("fl_exchange_info", "groupid"))
{
session.AddColumn("fl_exchange_info", "groupid", "varchar(255)");
}
if (!session.ColumnExist("fl_exchange_info", "check_time"))
{
session.AddColumn("fl_exchange_info", "check_time", "datetime default '2000-01-01 00:00:00'");
}
}
// session.Commit();
return first;
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Debug("表异常", strb.ToString());
throw ex;
}
return false;
}
/// <summary>
/// 重置定时器
/// </summary>
internal static void ResetTimer()
{
//关闭以前的线程
TimerTask.Close<ClearGarbageTimer>();
TimerTask.Close<DownPinduoduoTimer>();
TimerTask.Close<DownAlimamaTimer>();
TimerTask.Close<DownJingdongTimer>();
TimerTask.Close<DownWeipinhuiTimer>();
TimerTask.Close<DownDouyinTimer>();
TimerTask.Close<DownSuningTimer>();
TimerTask.Close<Update_NoticeQueue>();
TimerTask.Close<Update_CpsStatus>();
//启动新的线程
TimerTask.NewTimer<Update_NoticeQueue>(1);//处理队列消息
TimerTask.NewTimer<Update_CpsStatus>(360);//更新联盟状态
TimerTask.NewTimer<ClearGarbageTimer>(Setting.SystemConfig.timer_clear_memory); //注册清理垃圾线程
TimerTask.NewTimer<DownPinduoduoTimer>(Setting.SystemConfig.time_down_pinduoduo); //下载拼多多订单线程
TimerTask.NewTimer<DownAlimamaTimer>(Setting.SystemConfig.timer_down_alimama); //下载阿里妈妈订单线程
TimerTask.NewTimer<DownJingdongTimer>(Setting.SystemConfig.time_down_jingdong); //下载京东订单线程
TimerTask.NewTimer<DownWeipinhuiTimer>(Setting.SystemConfig.time_down_weipinhui); //下载唯品会订单线程
TimerTask.NewTimer<DownDouyinTimer>(Setting.SystemConfig.time_down_douyin); //下载抖音订单线程
TimerTask.NewTimer<DownSuningTimer>(Setting.SystemConfig.time_down_suning); //下载苏宁订单线程
TimerTask.NewTimer<DownKuaiShouTimer>(Setting.SystemConfig.time_down_kuaishou); //下载快手订单线程
}
/// <summary>
/// 缓存
/// </summary>
public static CacheTool Cache { get; private set; }
private static object getsession_lock = new object();
/// <summary>
/// 获取数据库操作对象
/// </summary>
/// <param name="config">数据库连接配置,如果是软件的数据库该值不需要传</param>
/// <param name="iscache"></param>
/// <returns></returns>
public static SqlSugarClient GetSession(Api.Framework.Tools.ConnectionConfig config = null, bool iscache = true)
{
if (config == null) config = Setting.DbConfig;
DbType type = DbType.MySql;
if (config.DatabaseType == DatabaseType.SQLITE) type = DbType.Sqlite;
else if (config.DatabaseType == DatabaseType.MYSQL) type = DbType.MySql;
else return null;
SqlSugarClient session = new SqlSugarClient(new SqlSugar.ConnectionConfig()
{
MoreSettings = new ConnMoreSettings() { IsAutoRemoveDataCache = true },
ConnectionString = config.ConnectionString, //必填
DbType = type, //必填
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
session.Aop.OnLogExecuted = (sql, pars) =>
{
var timeOut = session.Ado.SqlExecutionTime.TotalSeconds;
if (timeOut >= 2)
{
//慢查询SQL
var temp = sql;
foreach (var item in pars)
{
temp = temp.Replace($"{item.ParameterName}", "'" + item.Value.ToString() + "'");
}
LogHelper.GetSingleObj().SqlMan("sql慢日志:", $"慢查询日志({timeOut}秒):{temp}");
}
//执行完了可以输出SQL执行时间 (OnLogExecutedDelegate)
};
return session;
}
/// <summary>
/// 发送信息
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="robot">通过哪个机器人发送</param>
public static void SendAdminMessage(string message, fl_robot_info robot, string title = "系统消息")
{
//邮件通知管理员
if (!string.IsNullOrEmpty(Setting.SystemConfig.account_admin_email))
{
//邮箱通知
var emails = Setting.SystemConfig.account_admin_email.Split(',');
foreach (var item in emails)
{
SendAdminEmail(item, title, title + "<br>" + message, true);
}
}
}
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="toemail">收件人</param>
/// <param name="title">标题</param>
/// <param name="content">内容</param>
/// <param name="tryException">捕获</param>
/// <param name="begin">异步</param>//ApiClient.SendAdminEmail(ApiClient.Setting.SystemConfig.account_admin_email, "机器人即将到期通知", msg, true);
public static void SendAdminEmail(string toemail, string title, string content, bool tryException = false, bool begin = true)
{
try
{
var config = Setting.SystemConfig;
Util.SendEmail(config.SMTP_Host, config.SMTP_Port, config.SMTP_User, config.SMTP_Pass, config.SMTP_SSL == SwitchType. ? true : false, toemail, title, content, begin);
}
catch (Exception ex)
{
if (tryException) return;
else EventClient.OnEvent(null, "发送邮件:" + ex.Message);
}
}
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="toemail">收件人</param>
/// <param name="title">标题</param>
/// <param name="content">内容</param>
/// <param name="file"></param>
/// <param name="tryException">捕获</param>
/// <param name="begin">异步</param>//ApiClient.SendAdminEmail(ApiClient.Setting.SystemConfig.account_admin_email, "机器人即将到期通知", msg, true);
public static void SendAdminEmail(string toemail, string title, string content, string file, bool tryException = false, bool begin = true)
{
try
{
var config = Setting.SystemConfig;
Util.SendEmail(config.SMTP_Host, config.SMTP_Port, config.SMTP_User, config.SMTP_Pass, config.SMTP_SSL == SwitchType., toemail, title, content, begin, file);
}
catch (Exception ex)
{
if (tryException) return;
else EventClient.OnEvent(null, "发送邮件:" + ex.Message);
}
}
/// <summary>
/// 商户支付
/// </summary>
/// <param name="remark"></param>
/// <param name="describe"></param>
/// <param name="money"></param>
/// <returns>返回 连接为点击领取
/// 返回 "已转账"为自动转账
/// 返回 空为异常</returns>
[Obsolete("改方法已过时")]
public static string SendWechatPay(object remark, string describe, double money)
{
try
{
var pay = new WechatPay();
var result = string.Empty;
if (!string.IsNullOrEmpty(Setting.SystemConfig.pay_wechat_hostSign))
{
result = pay.Create(Setting.SystemConfig.pay_wechat_hostSign, remark, describe, money);
//Console.WriteLine(result);
}
else
{
result = pay.Create(Setting.SystemConfig.pay_wechat_gzh_appid, Setting.SystemConfig.pay_wechat_sh_appid, Setting.SystemConfig.pay_wechat_gzh_appsecret, Setting.SystemConfig.pay_wechat_sh_appsecret, money, HttpHelper.ObjectToJson(remark), describe);
}
//if (string.IsNullOrEmpty(Setting.SystemConfig.pay_wechat_host)) throw new Exception("您没有填写服务器信息!");
if (!string.IsNullOrEmpty(result))
{
if (result == "操作超时")
{
EventClient.OnEvent(null, $"【{money}积分】商户连接:{result}");
return string.Empty;
}
else if (result == "已转账")
{
RecordShPay(result, remark, money, PayGetType.);
//返回为空,获取商户异常
return result;
}
RecordShPay(result, remark, money, PayGetType.);
}
return result;
}
catch (Exception ex)
{
EventClient.OnEvent(null, ex.Message);
}
return string.Empty;
}
/// <summary>
/// 发视商户支付
/// </summary>
/// <param name="remark"></param>
/// <param name="describe"></param>
/// <param name="money"></param>
/// <param name="ispaid"></param>
/// <returns></returns>
public static string SendWechatPay(object remark, string describe, double money, out bool ispaid)
{
ispaid = false;
try
{
var pay = new WechatPay();
var result = string.Empty;
if (!string.IsNullOrEmpty(Setting.SystemConfig.pay_wechat_hostSign))
{
result = pay.Create(Setting.SystemConfig.pay_wechat_hostSign, remark, describe, money, out ispaid);
//Console.WriteLine(result);
}
else
{
result = pay.Create(Setting.SystemConfig.pay_wechat_gzh_appid, Setting.SystemConfig.pay_wechat_sh_appid, Setting.SystemConfig.pay_wechat_gzh_appsecret, Setting.SystemConfig.pay_wechat_sh_appsecret, money, HttpHelper.ObjectToJson(remark), describe);
}
//if (string.IsNullOrEmpty(Setting.SystemConfig.pay_wechat_host)) throw new Exception("您没有填写服务器信息!");
if (!string.IsNullOrEmpty(result))
{
if (result == "操作超时")
{
EventClient.OnEvent(null, $"【{money}积分】商户连接:{result}");
ispaid = false;
return string.Empty;
}
//else if (result == "已转账")
//{
// //返回为空,获取商户异常
// return result;
//}
RecordShPay(result, remark, money, ispaid ? PayGetType. : PayGetType.);
}
return result;
}
catch (Exception ex)
{
EventClient.OnEvent(null, ex.Message);
}
return string.Empty;
}
/// <summary>
/// 发送商户支付
/// </summary>
/// <param name="remark">备注</param>
/// <param name="describe">描述</param>
/// <param name="money">金额</param>
/// <param name="ispaid">是否直接到账</param>
/// <param name="appinfo">小程序信息,微信可以用户发送小程序;不支持小程序返回null</param>
/// <returns></returns>
public static string SendWechatPay(object remark, string describe, double money, out bool ispaid, out object appinfo)
{
ispaid = false;
appinfo = null;
try
{
var pay = new WechatPay();
var result = string.Empty;
if (!string.IsNullOrEmpty(Setting.SystemConfig.pay_wechat_hostSign))
{
//念初 https://service-dbej45c6-1301483065.nj.apigw.tencentcs.com/api/624d64fe8805a?money=100&key=624d66df08ba5949556281&remark=付乐天
if (Setting.SystemConfig.pay_wechat_hostSign.ToLower().Contains("nj.apigw.tencentcs.com"))
result = pay.Create2(Setting.SystemConfig.pay_wechat_hostSign, remark, describe, money);
else
result = pay.Create(Setting.SystemConfig.pay_wechat_hostSign, remark, describe, money, out ispaid, out appinfo);
//Console.WriteLine(result);
}
else
{
result = pay.Create(Setting.SystemConfig.pay_wechat_gzh_appid, Setting.SystemConfig.pay_wechat_sh_appid, Setting.SystemConfig.pay_wechat_gzh_appsecret, Setting.SystemConfig.pay_wechat_sh_appsecret, money, HttpHelper.ObjectToJson(remark), describe);
}
//if (string.IsNullOrEmpty(Setting.SystemConfig.pay_wechat_host)) throw new Exception("您没有填写服务器信息!");
if (!string.IsNullOrEmpty(result))
{
if (result == "操作超时")
{
EventClient.OnEvent(null, $"【{money}积分】商户连接:{result}");
ispaid = false;
return string.Empty;
}
//else if (result == "已转账")
//{
// //返回为空,获取商户异常
// return result;
//}
RecordShPay(result, remark, money, ispaid ? PayGetType. : PayGetType.);
}
return result;
}
catch (Exception ex)
{
EventClient.OnEvent(null, ex.Message);
}
return string.Empty;
}
/// <summary>
/// 记录商户生成信息
/// </summary>
/// <param name="url">连接</param>
/// <param name="remark">备注</param>
/// <param name="money">金额</param>
/// <param name="paytype">领取状态</param>
private static void RecordShPay(string url, object remark, double money, PayGetType paytype)
{
if (remark != null)
{
try
{
var db = ApiClient.GetSession();
//robot_name = robot.name, robot_nick = robot.nick, username = member.username, usernick = member.usernick
var json = HttpHelper.ObjectToJson(remark);
if (!string.IsNullOrWhiteSpace(json))
{
//var reg = Regex.Match(url, "orderid=(?<商户id>[^&]+)", RegexOptions.IgnoreCase);
var reg = Regex.Match(url, "orderid=(?<商户id>[^&]+)", RegexOptions.IgnoreCase);
if (reg.Success)
{
//reg = Regex.Match(url, "^(?<商户id>[a-zA-Z0-9]+)$", RegexOptions.IgnoreCase);
var jObj = JObject.Parse(json);
var time = DateTime.Now;
var shpay = new fl_shpay_hist() { payurl = url, ctime = CsharpHttpHelper.HttpExtend.GetTimeStamp(time), ctimedate = CsharpHttpHelper.HttpExtend.GetTimeStamp(time.Date), point = money, paytype = paytype, orderid = (reg.Success ? reg.Groups["商户id"].Value : string.Empty) };
if (paytype == PayGetType.)
shpay.paytime = CsharpHttpHelper.HttpExtend.GetTimeStamp(time);
if (jObj["robot_name"] != null && jObj["username"] != null)
{
var r = db.FindRobots().FirstOrDefault(f => f.name == jObj["robot_name"].ToString());
if (r != null)
{
shpay.chattype = r.type;
shpay.rid = r.id;
}
var m = db.FindMemberInfoByUsername(jObj["username"].ToString());
if (m != null)
{
shpay.uid = m.id;
shpay.usernick = m.realnick;
}
shpay.username = jObj["username"].ToString();
shpay.robotname = jObj["robot_name"].ToString();
shpay.robotnick = jObj["robot_nick"].ToString();
db.Insertable(shpay).ExecuteCommand();
}
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("", $"记录商户生成连接异常:{ex.Message}");
}
}
}
/// <summary>
/// 通知钉钉机器人
/// </summary>
/// <param name="_message">发送消息</param>
/// <param name="api">通知机器人名称</param>
/// <param name="secret">secret字符串</param>
public static void SendNewDingdingMessage(string _message, string api = "", string secret = "")
{
if (!string.IsNullOrEmpty(api) && ApiClient.Setting.SystemConfig.notice_robotname != "请选择(钉钉/微信群机器人API名称")
{
SendNoticeMessage(_message);
return;
}
var _api = string.IsNullOrEmpty(api) ? ApiClient.Setting.SystemConfig.notice_dingding_robotapi : api;
var _api_token = string.IsNullOrEmpty(api) ? ApiClient.Setting.SystemConfig.notice_dingding_robotSecret : secret;
if (!string.IsNullOrEmpty(_api)) SendNoticeMessage(new fl_noticeapi_info() { name = "旧接口钉钉API地址", token = _api_token, api_location = _api, notice_apitype = NoticeApiType.API }, _message);
}
/// <summary>
/// 发送通知【钉钉/微信群机器人】消息
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="name">名称,为空为系统设置</param>
public static void SendNoticeMessage(string message, string name = "")
{
if (string.IsNullOrWhiteSpace(name) || name == "请选择(钉钉/微信群机器人API名称")
name = ApiClient.Setting.SystemConfig.notice_robotname;
var session = ApiClient.GetSession();
var api = session.FindNoticeapiRobots().FirstOrDefault(f => f.name == name);
if (api != null) SendNoticeMessage(api, message);
}
private static string LocalIp = "";
/// <summary>
/// 获取本机外网IP
/// </summary>
/// <returns></returns>
public static string QueryInternetIP()
{
try
{
if (string.IsNullOrWhiteSpace(LocalIp))
{
HttpHelper http = new HttpHelper();
string html = http.GetHtml("https://ip.tool.lu").Html;
Match match = Regex.Match(html, "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
if (match.Success)
LocalIp = match.Groups[1].Value;
}
}
catch (Exception ex)
{ }
return LocalIp;
}
/// <summary>
/// 通知机器人发送消息
/// </summary>
/// <param name="api_entity">通知机器人对象</param>
/// <param name="message">发送消息</param>
/// <param name="is_begin">异步发送</param>
public static void SendNoticeMessage(fl_noticeapi_info api_entity, string message, bool is_begin = true)
{
if (api_entity == null || api_entity.name == "请选择(钉钉/微信群机器人API名称") return;
var _info = api_entity;
var _message = message.Replace("\r\n", "\n");
if (string.IsNullOrWhiteSpace(_message)) return;
var appendIp = QueryInternetIP();
if (!string.IsNullOrWhiteSpace(appendIp))
_message += $@"
------------
IP{appendIp}";
Exception exception = null;
var action = new Action(delegate
{
for (int i = 0; i < 5; i++)
{
LogHelper.GetSingleObj().Error("", $@"【通知机器人】 => 发送消息:{_message})");
try
{
var http = new HttpHelper();
var item = http.GetItem(_info.api_location);
item.Method = "post";
item.ContentType = "application/json;";//返回类型 可选项有默认值
switch (_info.notice_apitype)
{
case NoticeApiType.API:
{
if (!string.IsNullOrEmpty(_info.token))
{
long dingTimestamp = (DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0).Ticks) / 10000;
string canonicalString = $"{dingTimestamp}\n{_info.token}";
string signature = Convert.ToBase64String(Sign(Encoding.UTF8.GetBytes(canonicalString), Encoding.UTF8.GetBytes(_info.token)));
item.URL = item.URL + $"&timestamp={dingTimestamp}&sign={signature}";
}
item.PostDataType = CsharpHttpHelper.Enum.PostDataType.Byte;
item.PostdataByte = Encoding.UTF8.GetBytes(HttpHelper.ObjectToJson(new { msgtype = "text", text = new { content = _message } }));
}
break;
case NoticeApiType.API:
{
item.PostDataType = CsharpHttpHelper.Enum.PostDataType.Byte;
item.PostdataByte = Encoding.UTF8.GetBytes(HttpHelper.ObjectToJson(new { msgtype = "text", text = new { content = _message } }));
}
break;
case NoticeApiType.API:
{
item.PostDataType = CsharpHttpHelper.Enum.PostDataType.Byte;
if (_info.api_location.Contains("bot/v2/hook"))
item.PostdataByte = Encoding.UTF8.GetBytes(HttpHelper.ObjectToJson(new { msg_type = "text", content = new { text = _message } }));
else
item.PostdataByte = Encoding.UTF8.GetBytes(HttpHelper.ObjectToJson(new { title = "", text = _message }));
}
break;
default: throw new Exception("无法识别的API类型!" + _info.notice_apitype.ToString());
}
var html = http.GetHtml(item).Html;
//Console.WriteLine(html);
if (html.Contains("ok") || html.Contains("success"))
return;
throw new Exception(html);
}
catch (Exception ex)
{
if (ex.Message.Contains("sign not match"))
{
Thread.Sleep(370);
continue;
}
exception = ex;
EventClient.OnEvent(null, $"{_info.name}提醒失败:" + ex.Message);
}
}
});
if (is_begin) action.BeginInvoke(null, null);
else
{
action.Invoke();
//抛出异常信息
if (exception != null) throw exception;
}
}
private static byte[] Sign(byte[] key, byte[] data)
{
HMACSHA256 sha256 = new HMACSHA256(data);
return sha256.ComputeHash(key);
}
static ConcurrentDictionary<string, ConcurrentQueue<temp_send_data>> MessageQueue = new ConcurrentDictionary<string, ConcurrentQueue<temp_send_data>>();
///// <summary>
///// 发送消息2
///// </summary>
///// <param name="robot">机器人</param>
///// <param name="tousername">发送给谁</param>
///// <param name="message">发送的消息SendNewDingdingMessage</param>
///// <param name="groupid">发送的群(空位私聊)</param>
///// <param name="TempMsgID">QQ的临时会话ID</param>
///// <param name="token">临时会话的token</param>
///// <returns></returns>
//public static Task SendWQMessage(fl_robot_info robot, string tousername, string message, string groupid = "", uint TempMsgID = 0, byte[] token = null)
//{
// return SendMessage(new temp_send_data() { Groupid = groupid, Message = message, TouserName = tousername, Robot = robot, TempMsgID = TempMsgID, token = token });
//}
/// <summary>
/// 发送消息1
/// </summary>
/// <param name="robot">机器人</param>
/// <param name="tousername">发送给谁</param>
/// <param name="message"></param>
/// <param name="groupid"></param>
public static Task SendMessage(fl_robot_info robot, string tousername, string message, string groupid = "")
{
return SendMessage(new temp_send_data() { Groupid = groupid, Message = message, TouserName = tousername, Robot = robot });
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="robot">机器人对象</param>
/// <param name="tousername">接收者账号</param>
/// <param name="message">消息</param>
/// <param name="isTemp">机器人为QQ时,临时聊天需要复制为true</param>
/// <returns></returns>
public static Task SendMessage(fl_robot_info robot, string tousername, string message, bool isTemp)
{
return SendMessage(new temp_send_data() { IsTemp = isTemp, Message = message, TouserName = tousername, Robot = robot });
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="data">temp_send_data对象集合</param>
/// <returns></returns>
public static Task SendMessage(params temp_send_data[] data)
{
var _data = data;
return Task.Run(() =>
{
try
{
for (int i = 0; i < _data.Length; i++)
{
var item = _data[i];
if (i > 0) Thread.Sleep(650);
try
{
#region
var session = ApiClient.GetSession();
var robots = session.FindRobots();
if (null != robots.FirstOrDefault(f => f.is_receives == Enums.SwitchType. && item.Robot.name == f.name))
continue;
#endregion
var groupid = item.Groupid;
var tousername = item.TouserName;
var robot = item.Robot;
var message = item.Message.Replace("[积分名称]", Setting.SystemConfig.PointName).Replace("[机器人账号]", robot.name).Replace("[机器人昵称]", robot.nick).Trim();
if (message.Contains("[编号]"))
{
string id = string.Empty;
var member = session.FindSingle<fl_member_info>("select * from fl_member_info where username = @username", new { username = item.TouserName });
if (member != null)
id = member.id.ToString();
message = message.Replace("[编号]", id);
}
switch (item.Robot.type)
{
case ChatType.QQ:
{
var qBase = ChatClient.QQClients.FirstOrDefault(f => f.Key.ToString() == robot.name).Value;
if (qBase is QQClientImpl_QQPlus)
{
var tmp = (qBase as QQClientImpl_QQPlus);
var qq = tmp.QQClient;
if (qq != null && qq.User != null && qq.User.LoginStatus == LoginStatus.Login)
{
if (!string.IsNullOrWhiteSpace(tousername))
{
//var member = session.FindBlacklistMemberInfos().FirstOrDefault(f => f.username == tousername);
//if (member != null) break;
2022-09-20 03:10:29 +00:00
//var m = session.FindMemberInfoByUsername(tousername);
//if (m.status != MemberType.白名单)
//{
// CloudBlack cloud = new CloudBlack();
// if (cloud.QueryBlack(tousername, item.Robot.type) != null)
// break;
//}
2022-09-20 03:10:29 +00:00
if (message.Contains("[昵称]"))
{
var member = session.FindSingle<fl_member_info>("select * from fl_member_info where robot_type = @robot_type and username = @username", new { username = tousername, robot_type = ChatType.QQ });
2022-09-20 03:10:29 +00:00
if (member != null)
message = message.Replace("[账号]", tousername).Replace("[昵称]", member.usernick);
else
message = message.Replace("[账号]", tousername).Replace("[昵称]", string.Empty);
}
}
message = new VariateReplace().ReplaceUserVariate(message).Replace("[时间]", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
uint target = 1;
var isGroup = false;
uint toUsernaem = 0;
if (string.IsNullOrEmpty(groupid))
uint.TryParse(tousername, out target);
else
{
uint.TryParse(groupid, out target);
isGroup = true;
}
tmp.SendMessage(target, message, isGroup, item.IsTemp);
}
}
}
break;
case ChatType.:
case ChatType.:
{
if (!string.IsNullOrWhiteSpace(tousername))
{
//var member = session.FindBlacklistMemberInfos().FirstOrDefault(f => f.username == tousername);
//if (member != null) break;
2022-09-20 03:10:29 +00:00
//var m = session.FindMemberInfoByUsername(tousername);
//if (m.status != MemberType.白名单)
//{
// CloudBlack cloud = new CloudBlack();
// if (cloud.QueryBlack(tousername, item.Robot.type) != null)
// break;
//}
2022-09-20 03:10:29 +00:00
if (message.Contains("[昵称]"))
{
var member = session.FindSingle<fl_member_info>("select * from fl_member_info where robot_type = @robot_type and username = @username", new { username = tousername, robot_type = item.Robot.type });
2022-09-20 03:10:29 +00:00
message = message.Replace("[昵称]", member == null ? string.Empty : member.usernick);
}
message = message.Replace("[账号]", tousername);
}
message = new VariateReplace().ReplaceUserVariate(message).Replace("[时间]", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var wx = ChatClient.WXClient.FirstOrDefault(f => f.Key == robot.name).Value;
if (wx != null && wx.Status == Chat.Framework.WXSdk.WxStatus.线)
{
message.Replace("[机器人微信]", wx.User.Username);
wx.SendMessage(string.IsNullOrWhiteSpace(groupid) ? tousername : groupid, message);
//EventClient.OnEvent(item, $"协议:{wx.WeixinHao} 给 {tousername} 发送 -> {message}");
}
else
{
//EventClient.OnEvent(item, $"pc {robot.name} 发送:{message}");
var client = ChatClient.PCRobotPool.GetSession(robot.name);
if (client != null)
{
WechatMsgType messageType = WechatMsgType.;
PCRobotCMD robotCMD = PCRobotCMD.sendTxt;
message.Replace("[机器人微信]", robot.name);
#region
var match = Regex.Match(message, @"\[图片\=([^\]]+)\]", RegexOptions.IgnoreCase);
if (match.Success)
{
var image = match.Groups[1].Value;
//if (!image.StartsWith("http"))
//{
// if (File.Exists(image))
// {
// var bitmap = Util.PercentImage(Util.ReadImageFile(image), 280);
// var _image = image + Path.GetExtension(image);//压缩图片的地址
// if (Util.YaSuo(bitmap, _image, 70))
// {
// image = Util.FileToBase64(_image);
// }
// }
//}
message = image;
messageType = WechatMsgType.;
robotCMD = PCRobotCMD.sendImg;
}
#endregion
#region
match = Regex.Match(message, @"\[视频\=([^\]]+)\]", RegexOptions.IgnoreCase);
if (match.Success)
{
//var video = Util.StrToHex(match.Groups[1].Value);
//if (video != null)
//{
// var video_json = Encoding.UTF8.GetString(video);
// var video_data = CsharpHttpHelper.HttpExtend.JsonToDictionary(video_json);
// if (video_data != null)
// {
// //(username, video_data["cdnurl"].ToString(), video_data["aeskey"].ToString(), CDNType.发送视频);
// }
//}
message = match.Groups[1].Value;
messageType = WechatMsgType.;
robotCMD = PCRobotCMD.sendFile;
}
#endregion
#region
match = Regex.Match(message, @"\[语音\=([^\]]+)\]", RegexOptions.IgnoreCase);
if (match.Success)
{
throw new Exception("PC协议不支持语音发送");
}
#endregion
if (string.IsNullOrWhiteSpace(message)) return;
var msg = new ServerWechatMsg()
{
Cmd = robotCMD,
RobotType = item.Robot.type == ChatType. ? RobotType. : RobotType.,
RobotUsername = robot.name,
RobotUsernick = string.Empty,
ToMessage = message,
ToMessageType = messageType,
ToUsername = string.IsNullOrWhiteSpace(groupid) ? tousername : groupid,
Key = Setting.ServerConfig.SocketPassword
};
//Console.WriteLine(groupid);
var json = HttpHelper.ObjectToJson(msg);
var text = PackTool.CompressString(json);
//AESCryption aes = new AESCryption();
//json = aes.AesEncrypt(json,Setting.ServerConfig.SocketPassword.Substring(0,16));
//Console.WriteLine(json);
var need_send = $"{msg.Cmd} {text}\r\n";
//var need_send_data = Encoding.UTF8.GetBytes(need_send);
LogHelper.GetSingleObj().Debug("", $"给客户端发送消息:{msg.Cmd} - {text.Length}");
client.TrySend(need_send);
}
}
}
break;
case ChatType.:
break;
case ChatType.:
break;
default:
break;
}
}
catch (Exception ex)
{
EventClient.OnEvent(item, $"发送通知消息失败:{item.Robot.name}->{item.TouserName}->{item.Message},{ex.Message} - {ex.StackTrace}");
}
}
}
catch (Exception)
{ }
});
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="robot_name">机器人账号</param>
/// <param name="robot_type">机器人类型</param>
/// <param name="tousername">发送给谁</param>
/// <param name="message">发送消息内容</param>
/// <param name="groupid">发送的群号</param>
public static void SendMessage(string robot_name, ChatType robot_type, string tousername, string message, string groupid = "")
{
var session = GetSession();
var robot = session.FindRobots().FirstOrDefault(f => f.name == robot_name && f.type == robot_type);
if (robot != null) SendMessage(robot, tousername, message, groupid);
}
/// <summary>
/// 缩短网址 - 根据配置的短网址类型
/// </summary>
/// <param name="url">目标URL</param>
/// <returns></returns>
public static Task<string> ShortURL(string url)
{
return ShortURL(url, Setting.SystemConfig.dwz_type);
}
/// <summary>
/// 缩短网址 - 自定义短网址类型
/// </summary>
/// <param name="url">目标网址</param>
/// <param name="type">缩短类型</param>
/// <returns></returns>
public static Task<string> ShortURL(string url, DwzType type)
{
return Task.Factory.StartNew<string>(() =>
{
var http = new HttpHelper();
int num = 0;
var html = string.Empty;
Next:
try
{
num++;
if (EventClient.ReplaceURL != null)
{
var temp = EventClient.ReplaceURL(0, url);
if (!string.IsNullOrEmpty(temp)) return temp;
}
switch (type)
{
#region xxx
//case DwzType.新浪短网址:
//{
// #region 老的新浪 xx
// //html = http.GetHtml("http://api.t.sina.com.cn/short_url/shorten.json?source=3271760578&url_long=" + HttpHelper.URLEncode(url)).Html;
// //if (!string.IsNullOrWhiteSpace(html) && html.ToLower().Contains("url_short"))
// //{
// // var array = JsonConvert.DeserializeObject<ArrayList>(html);
// // if (array != null && array.Count > 0)
// // {
// // var dic = array[0] as Dictionary<string, object>;
// // return dic["url_short"].ToString().Replace("http://", "https://");
// // }
// //}
// //break;
// #endregion
// #region 新浪
// var _url = $"https://service.weibo.com/share/share.php?url={HttpHelper.URLEncode(url)}&title=%e4%b8%ad%e9%97%b4%e9%a1%b5";
// html = http.GetHtml(_url).Html;
// if (!string.IsNullOrWhiteSpace(html))
// {
// var reg = Regex.Match(html, @"href=""(?<短连接>https?://t.cn/(?:[^""]+?))""");
// if (reg.Success)
// {
// var shorturl = reg.Groups["短连接"].Value;
// return shorturl.Replace("http://", "https://");
// }
// }
// break;
// #endregion
//}
//case DwzType.新新浪短网址:
//{
// var _url = $"https://service.weibo.com/share/share.php?url={HttpHelper.URLEncode(url)}&title=%e4%b8%ad%e9%97%b4%e9%a1%b5";
// html = http.GetHtml(_url).Html;
// if (!string.IsNullOrWhiteSpace(html))
// {
// var reg = Regex.Match(html, @"href=""(?<短连接>https?://t.cn/(?:[^""]+?))""");
// if (reg.Success)
// {
// var shorturl = reg.Groups["短连接"].Value;
// return shorturl.Replace("http://", "https://").Replace("t.cn/", "sinaurl.cn/");
// }
// }
// break;
//}
//case DwzType.腾讯短网址:
//{
// var data = CsharpHttpHelper.HttpHelper.URLEncode(url);
// html = http.GetHtml($"http://sa.sogou.com/gettiny?url={data}").Html;
// if (!string.IsNullOrWhiteSpace(html) && html.ToLower().Contains("url.cn"))
// return html;
// break;
//}
//case DwzType.百度短网址://收费
//{
//if (!string.IsNullOrWhiteSpace(Setting.SystemConfig.DwzToken))
//{
// try
// {
// var data = HttpHelper.ObjectToJson(new { Url = url, TermOfValidity = "1-year" });
// var item = new HttpItem()
// {
// URL = "https://dwz.cn/admin/v2/create",
// Method = "post",
// Encoding = Encoding.UTF8,
// UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本,操作系统 可选项有默认值
// ContentType = "application/json;",//返回类型 可选项有默认值
// PostDataType = CsharpHttpHelper.Enum.PostDataType.Byte,
// PostdataByte = Encoding.UTF8.GetBytes(data),//HttpUtility.UrlEncode(data),
// Timeout = 5000,
// ReadWriteTimeout = 5000
// };
// item.Header.Add("token", Setting.SystemConfig.DwzToken);
// html = http.GetHtml(item).Html;
// if (!string.IsNullOrWhiteSpace(html))
// {
// //{"Code":0,"ShortUrl":"https://dwz.cn/kiJerp0h","LongUrl":"https://www.hifige.com/collection-album/yuanzhua","ErrMsg":""}
// var json = HttpExtend.JsonToDictionary(html);
// if (json != null && json.ContainsKey("Code"))
// {
// var code = json["Code"].ToString();
// if (code == "0" && json.ContainsKey("ShortUrl"))
// {
// var shortUrl = json["ShortUrl"].ToString();
// return shortUrl;
// }
// EventClient.OnEvent(null, $"百度短连接获取失败:{html}");
// }
// }
// }
// catch (Exception ex)
// {
// EventClient.OnEvent(null, "百度短连接生成失败:" + ex.Message);
// }
//}
//else
//{
// EventClient.OnEvent(null, $"转链失败百度短网址Token值为空【系统设置 => 6.百度短网址设置 中设置】");
//}
//return url;
//break;
//}
//case DwzType.UC浏览器短网址:
//{
// // var url = "http://www.qq.com";
// byte[] sign_password = new byte[38];
// sign_password[0] = 48;
// sign_password[1] = 0;
// sign_password[2] = 57;
// sign_password[3] = 0;
// sign_password[4] = 58;
// sign_password[5] = 0;
// sign_password[6] = 49;
// sign_password[7] = 0;
// sign_password[8] = 53;
// sign_password[9] = 0;
// sign_password[10] = 89;
// sign_password[11] = 0;
// sign_password[12] = 103;
// sign_password[13] = 0;
// sign_password[14] = 125;
// sign_password[15] = 0;
// sign_password[16] = 78;
// sign_password[17] = 0;
// sign_password[18] = 74;
// sign_password[19] = 0;
// sign_password[20] = 112;
// sign_password[21] = 0;
// sign_password[22] = 125;
// sign_password[23] = 0;
// sign_password[24] = 85;
// sign_password[25] = 0;
// sign_password[26] = 67;
// sign_password[27] = 0;
// sign_password[28] = 83;
// sign_password[29] = 0;
// sign_password[30] = 104;
// sign_password[31] = 0;
// sign_password[32] = 97;
// sign_password[33] = 0;
// sign_password[34] = 114;
// sign_password[35] = 0;
// sign_password[36] = 101;
// sign_password[37] = 0;
// var sign = HttpHelper.ToMD5(System.Text.Encoding.Unicode.GetString(sign_password) + url).ToUpper();
// var item = http.GetItem("http://t.uc.cn/short_url/shorten", "", $"app_key=UCShare&url_long={HttpHelper.URLEncode(url)}&sign={sign}");
// html = http.GetHtml(item).Html;
// var success_reg = System.Text.RegularExpressions.Regex.Match(html, @"""url_short"":""http://fxt.ucdesk.cn/(.*?)""");
// if (success_reg.Success) return "http://t.uc.cn/" + success_reg.Groups[1].Value;
//}
//break;
#endregion
case DwzType.://收费
{
if (!string.IsNullOrWhiteSpace(Setting.SystemConfig.DwzToken))
{
try
{
var data = HttpHelper.ObjectToJson(new { Url = url, TermOfValidity = "1-year" });
var item = new HttpItem()
{
URL = "https://dwz.cn/admin/v2/create",
//URL = "https://dwz.cn/api/v3/short-urls",
Method = "post",
Encoding = Encoding.UTF8,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本,操作系统 可选项有默认值
ContentType = "application/json;",//返回类型 可选项有默认值
PostDataType = CsharpHttpHelper.Enum.PostDataType.Byte,
PostdataByte = Encoding.UTF8.GetBytes(data),//HttpUtility.UrlEncode(data),
Timeout = 5000,
ReadWriteTimeout = 5000
};
item.Header.Add("token", Setting.SystemConfig.DwzToken);
html = http.GetHtml(item).Html;
if (!string.IsNullOrWhiteSpace(html))
{
//{"Code":0,"ShortUrl":"https://dwz.cn/kiJerp0h","LongUrl":"https://www.hifige.com/collection-album/yuanzhua","ErrMsg":""}
var json = HttpExtend.JsonToDictionary(html);
if (json != null && json.ContainsKey("Code"))
{
var code = json["Code"].ToString();
if (code == "0" && json.ContainsKey("ShortUrl"))
{
var shortUrl = json["ShortUrl"].ToString();
return shortUrl;
}
EventClient.OnEvent(null, $"百度短连接获取失败:{html}");
}
}
}
catch (Exception ex)
{
EventClient.OnEvent(null, "百度短连接生成失败:" + ex.Message);
}
}
else
{
EventClient.OnEvent(null, $"转链失败百度短网址Token值为空【系统设置 => 6.百度短网址设置 中设置】");
}
return url;
break;
}
case DwzType.UC浏览器短网址:
case DwzType.:
case DwzType.:
case DwzType.:
//case DwzType.百度短网址:
case DwzType.:
{
//for (int i = 0; i < 3; i++)
//{
// var xx = HttpHelper.URLEncode(url);
// var sign = HttpHelper.ToMD5("23658" + url + "pMr7E2oPjvXI5ME1tZ0etTcenA7xgCzh");
// var _url = $"https://url.api.52cmg.cn/generate?url={xx}&sign={sign}&appid=23658";
// html = http.GetHtml(_url).Html;
// if (!string.IsNullOrWhiteSpace(html))
// {
// if (html.Contains("ok"))
// {
// JObject json = JObject.Parse(html);
// if (!(bool)json["ok"]) return url;
// return json["url"].ToString();
// }
// }
// Thread.Sleep(10);
// Console.WriteLine("html = " + html);
// Console.WriteLine("url = " + url);
//}
HttpHelper helper = new HttpHelper();
HttpItem item = new HttpItem();//https://url.api.52cmg.cn/generate?url=http://www.baidu.com&sign=E086A45084D1B490C411DEBD71E9DA4A&appid=23658
//var ccTLD = "https://url.api.52cmg.cn/generate";
//if (!string.IsNullOrWhiteSpace(ccTLD))
// ccTLD = ApiClient.Setting.SystemConfig.URLDwz;
item.URL = "https://url.api.52cmg.cn/generate?url=" + System.Web.HttpUtility.UrlEncode(url) + $"&sign={GetSign(url, "23658")}&appid=23658";
//item.URL = $"{ccTLD}?url={System.Web.HttpUtility.UrlEncode(url)}&sign={GetSign(url, "23658")}&appid=23658";
for (int z = 0; z < 5; z++)
{
html = helper.GetHtml(item).Html;
if (html.Contains("\"ok\":true"))
{
Newtonsoft.Json.Linq.JObject j = Newtonsoft.Json.Linq.JObject.Parse(html);
var result = j["url"].ToString();
if (!string.IsNullOrWhiteSpace(ApiClient.Setting.SystemConfig.URLDwz))
{
var reg = Regex.Match(result, "id=([a-zA-Z0-9]+)");
if (reg.Success)
{
if (ApiClient.Setting.SystemConfig.URLDwz.Contains("[序号]"))
{
result = ApiClient.Setting.SystemConfig.URLDwz.Replace("[序号]", reg.Groups[1].Value);
}
else if (ApiClient.Setting.SystemConfig.URLDwz.EndsWith("/"))
{
result = ApiClient.Setting.SystemConfig.URLDwz + "?id=" + reg.Groups[1].Value;
}
else
{
result = ApiClient.Setting.SystemConfig.URLDwz + "/?id=" + reg.Groups[1].Value;
}
if (!result.StartsWith("http")) result = "http://" + result;
}
}
return result;
}
Thread.Sleep(10);
//Console.WriteLine("html = " + html);
//Console.WriteLine("url = " + url);
//Console.WriteLine("item.URL = " + item.URL);
}
return url;
}
break;
case DwzType.:
//{
// for (int i = 0; i < 3; i++)
// {
// var data = CsharpHttpHelper.HttpHelper.URLEncode(url);
// var date = DateTime.Today.AddMonths(6).ToString("yyyy-MM-dd");
// html = http.GetHtml($"http://suo.im/api.htm?url={data}&key=5dba8ad5b1a9c71e1cd3a570@731360bd06f09592d5843dd6bed51c2f&expireDate={date}").Html;
// if (!string.IsNullOrWhiteSpace(html) && !html.Contains("未能解析此远程名称") && html.ToLower().Contains("suo.im"))
// return html;
// Thread.Sleep(100);
// }
// break;
//}
case DwzType.:
{
if (CacheTool.GetSingleObj().Exist("KZShortUrl"))
{
type = DwzType.;
goto Next;
}
2022-09-20 03:10:29 +00:00
var urlTmp = KuaiZhanShort.GetShort(url);
if (urlTmp == url)
{
type = DwzType.;
goto Next;
}
return urlTmp;
}
break;
case DwzType.:
return url;
}
}
catch (Exception ex)
{
EventClient.OnEvent(null, $"短连接异常html => {html} - { ex.Message} - {ex.Source}");
}
if (num <= 3)
{
if (type == DwzType.) type = DwzType.;
else if (type == DwzType.) type = DwzType.;
//else if (type == DwzType.官方短网址) type = DwzType.官方短网址;
else if (type == DwzType.) type = DwzType.;
else type = DwzType.;
goto Next;
}
return url;
});
}
#region
internal static string GetSign(string url, string appid)
{
var appSecret = "pMr7E2oPjvXI5ME1tZ0etTcenA7xgCzh";
if (!string.IsNullOrEmpty(appSecret))
{
string md5 = MD5Encrypt32(appid + url + appSecret);
return md5;
}
return "";
}
/// <summary>
/// 32位MD5加密
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
private static string MD5Encrypt32(string password)
{
string passwordFormat = FormsAuthPasswordFormat.MD5.ToString();
return FormsAuthentication.HashPasswordForStoringInConfigFile(password, passwordFormat);
}
#endregion
/// <summary>
/// 生成二维码图片
/// </summary>
/// <param name="text">二维码内容</param>
/// <returns></returns>
private static Bitmap Generate3(string text)
{
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, 200, 200);
BarcodeWriter barcodeWriter = new BarcodeWriter();
Bitmap map = barcodeWriter.Write(bm);
int[] rectangle = bm.getEnclosingRectangle();
Bitmap bmpimg = new Bitmap(rectangle[2], rectangle[3], PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.DrawImage(map, 0 - rectangle[0], 0 - rectangle[1]);
}
return bmpimg;
}
/// <summary>
/// 合成海报模板
/// </summary>
public enum QrImageType
{
A = 0,
B = 1,
C = 2,
}
/// <summary>
/// 合成二维码
/// </summary>
/// <param name="title">标题</param>
/// <param name="price">价格</param>
/// <param name="cprice">券价格</param>
/// <param name="nprice">券后价格</param>
/// <param name="image">图片地址</param>
/// <param name="link">生成二维码的链接</param>
/// <param name="type">使用的模板</param>
/// <param name="cps">联盟类型,自动填写内容</param>
/// <param name="content">底栏内容</param>
/// <param name="basePath">保存路径</param>
/// <returns></returns>
public static string GetQRImage(string title, string price, string cprice, string nprice, string image, string link, QrImageType type = QrImageType.B, CpsType cps = CpsType., string content = "", string basePath = "")
{
if (string.IsNullOrWhiteSpace(content))
{
switch (cps)
{
case CpsType.:
{
if (type == QrImageType.A)
content = " 长按识别二维码 > 复制淘口令 > 打开手机淘宝 > 下单购买";
else if (type == QrImageType.B)
content = " 长按识别二维码 >> 复制淘口令 >> 打开手机淘宝 >> 下单购买";
else if (type == QrImageType.C)
content = "";
}
break;
case CpsType.:
{
if (type == QrImageType.A)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.B)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.C)
content = "";
}
break;
case CpsType.:
{
if (type == QrImageType.A)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.B)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.C)
content = "";
}
break;
case CpsType.:
{
if (type == QrImageType.A)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.B)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.C)
content = "";
}
break;
default:
{
if (type == QrImageType.A)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.B)
content = " 长按二维码 >> 识别图中二维码 >> 下单购买";
else if (type == QrImageType.C)
content = "";
}
break;
}
}
int number = 0;
Next:
Bitmap img = null;
Image mainpic = null;
try
{
string imagePath = string.Empty;
try
{
mainpic = null;
imagePath = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", "Cache\\image");
if (!image.StartsWith("http")) image = "http:" + image;
mainpic = FileTools.DownloadImage(image, imagePath);
}
catch (Exception ex)
{
throw new Exception($"读取图片异常:图片路径 = {imagePath} .{ex.Message} - {ex.StackTrace}");
}
if (mainpic == null) throw new Exception($"下载图片失败图片url = {image}");
switch (type)
{
case QrImageType.A:
{
double rate = mainpic.Width / 800.00;
double height = mainpic.Height / rate;
img = new Bitmap(800, int.Parse((height + 424).ToString("0")));
using (Graphics graphics = Graphics.FromImage(img))
{
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.High;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(mainpic, 0, 0, 800, int.Parse((height).ToString("0")));
graphics.DrawImage(Properties.Resources.foot, 0, int.Parse((height).ToString("0")), 800, 424);
graphics.DrawImage(Generate3(link), 510, int.Parse((height + 50).ToString("0")), 225, 220);
var font = new Font("微软雅黑", 20, System.Drawing.FontStyle.Regular);
RectangleF rec = new RectangleF(20, int.Parse((height + 50).ToString("0")), 450, 150);
Brush brush = new SolidBrush(Color.FromArgb(53, 53, 53));
graphics.DrawString(" " + title, font, brush, rec);
graphics.DrawString("¥", new Font("微软雅黑", 20, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(148, 148, 148)), 90, int.Parse((height + 204).ToString("0")));
graphics.DrawString(price, new Font("微软雅黑", 20, System.Drawing.FontStyle.Strikeout), new SolidBrush(Color.FromArgb(148, 148, 148)), 115, int.Parse((height + 204).ToString("0")));
graphics.DrawString(nprice, new Font("微软雅黑", 28, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(243, 119, 7)), 265, int.Parse((height + 247).ToString("0")));
graphics.DrawString(cprice.Split('.')[0] + "元", new Font("微软雅黑", 20, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(243, 119, 7)), 65, int.Parse((height + 255).ToString("0")));
RectangleF rec2 = new RectangleF(10, int.Parse((height + 337).ToString("0")), 780, 70);
Brush brush2 = new SolidBrush(Color.FromArgb(243, 119, 7));
graphics.DrawString(content, font, brush2, rec2);
}
}
break;
case QrImageType.B:
{
var foot = Properties.Resources.B;
var width = (int)foot.Width;
var height = (int)foot.Height;
img = new Bitmap(width, height);
using (Graphics graphics = Graphics.FromImage(img))
{
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.High;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(foot, 0, 0, width, height);
graphics.DrawImage(mainpic, 0, 0, width, (int)(height * 0.56));
graphics.DrawImage(Generate3(link), 296, 1050, 165, 165);
RectangleF rec = new RectangleF(20, 760, 700, 150);
Brush brush = new SolidBrush(Color.FromArgb(53, 53, 53));
graphics.DrawString(" " + title, new Font("微软雅黑", 20, System.Drawing.FontStyle.Regular), brush, rec);
graphics.DrawString(nprice, new Font("微软雅黑", 25, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(178, 34, 34)), 45, 895);
graphics.DrawString(price, new Font("微软雅黑", 25, System.Drawing.FontStyle.Strikeout), new SolidBrush(Color.FromArgb(148, 148, 148)), 335, 895);
graphics.DrawString(cprice, new Font("微软雅黑", 28, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(70, 130, 180)), 595, 892);
RectangleF rec2 = new RectangleF(10, 1298, width - 40, 42);
Brush brush2 = new SolidBrush(Color.FromArgb(250, 250, 210));
graphics.DrawString(content, new Font("微软雅黑", 16, System.Drawing.FontStyle.Bold), brush2, rec2);
}
}
break;
case QrImageType.C:
{
var foot = Properties.Resources.C;
var width = foot.Width;
var height = foot.Height;
img = new Bitmap(width, height);
using (Graphics graphics = Graphics.FromImage(img))
{
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.High;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(foot, 0, 0, width, height);//填充背景图片
//添加标题
RectangleF rec = new RectangleF(40, 17, 728, 110);
Brush brush = new SolidBrush(Color.FromArgb(53, 53, 53));
graphics.DrawString(title, new Font("微软雅黑", 30, System.Drawing.FontStyle.Regular), brush, rec);
graphics.DrawImage(mainpic, 45, 131, 413, 388);//填充商品图片
graphics.DrawImage(Generate3(link), 557, 277, 152, 152);
//graphics.DrawImage(Image.FromFile(@"D:\A.png"), 557, 277, 152, 152);
graphics.DrawString($"券后【{nprice}元】包邮秒杀", new Font("微软雅黑", 40, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(178, 34, 34)), 44, 565);
//graphics.DrawString(price, new Font("微软雅黑", 25, FontStyle.Strikeout), new SolidBrush(Color.FromArgb(148, 148, 148)), 335, 895);
graphics.DrawString($"减{cprice}元", new Font("微软雅黑", 28, System.Drawing.FontStyle.Regular), new SolidBrush(Color.FromArgb(70, 130, 180)), 600, 182);
RectangleF rec2 = new RectangleF(40, 667, 745, 122);
graphics.DrawString(content, new Font("微软雅黑", 18, System.Drawing.FontStyle.Bold), brush, rec2);
}
}
break;
}
string path = string.Empty;
if (img != null)
{
if (!string.IsNullOrEmpty(basePath))
path = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", basePath);
else path = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", "Cache\\image");
img.Save(path, ImageFormat.Jpeg);
}
return path;
}
catch (Exception ex)
{
number++;
if (number <= 3)
{
Thread.Sleep(300);
goto Next;
}
EventClient.OnEvent(null, $"合成二维码图片:{ex.Message} - {ex.StackTrace}");
return string.Empty;
}
finally
{
if (img != null) img.Dispose();
if (mainpic != null) mainpic.Dispose();
}
}
/// <summary>
/// 将方形图片变成雏形
/// </summary>
/// <param name="img">要转变的图片</param>
/// <param name="rec">大小和位置</param>
/// <param name="size">尺寸大小</param>
/// <returns></returns>
private static Image CutEllipse(Image img, Rectangle rec, Size size)
{
Bitmap bitmap = new Bitmap(size.Width, size.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
using (TextureBrush br = new TextureBrush(img, System.Drawing.Drawing2D.WrapMode.Clamp, rec))
{
br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.FillEllipse(br, new Rectangle(Point.Empty, size));
}
}
return bitmap;
}
/// <summary>
/// 合成优惠券图(新版)
/// </summary>
/// <param name="image">优惠券底图</param>
/// <param name="shopname">店铺名称</param>
/// <param name="shopimage">店铺头像</param>
/// <param name="title">宝贝标题</param>
/// <param name="price">宝贝原价</param>
/// <param name="couponprice">优惠券金额</param>
/// <param name="itemimage">宝贝图片</param>
/// <param name="indate">优惠券有效期区间(2018.02.12 - 2018.03.12)</param>
/// <param name="sellcount">月销量</param>
/// <param name="basePath">图片保存路径</param>
/// <returns></returns>
public static string GetCouponImage2(string image, string shopname, Image shopimage, string title, string price, string couponprice, Image itemimage, string indate, string sellcount, string basePath = "")
{
int number = 0;
Image mainpic = null;
Image shoppic = null;
Next:
try
{
HttpHelper http = new HttpHelper();
if (image.StartsWith("http"))
mainpic = http.GetImage(http.GetItem(image));
else
mainpic = ReadImageFile(image);
//店铺头像
shoppic = CutEllipse(shopimage, new Rectangle(0, 0, 150, 150), new Size(150, 150));
var width = (int)mainpic.Width;
var height = (int)mainpic.Height;
string path = string.Empty;
using (Bitmap img = new Bitmap(width, height))
{
using (Graphics graphics = Graphics.FromImage(img))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(mainpic, 0, 0, width, height);//将优惠券底图放置画板中
graphics.DrawImage(shoppic, (width - 135) / 2, 154, 135, 135);//画板中绘画店铺头像
#region
var couponTitleFont = new Font("微软雅黑", 26, System.Drawing.FontStyle.Regular);
var wid = graphics.MeasureString(shopname, couponTitleFont);
RectangleF rec = new RectangleF((width - wid.Width) / 2, 294, wid.Width, wid.Height);//优惠券标题
graphics.DrawString(shopname, couponTitleFont, new SolidBrush(Color.White), rec);
#endregion
#region
var couponFont = new Font("微软雅黑", 70, System.Drawing.FontStyle.Regular);//优惠券金额字体
var couponpriceWid = graphics.MeasureString(couponprice, couponFont);//优惠券金额字体大小
graphics.DrawString(couponprice, couponFont, new SolidBrush(Color.FromArgb(0xCD, 0x00, 0x00)), 210, 346);//画板中绘画优惠券金额
#endregion
#region
var couponIndateFont = new Font("微软雅黑", 19, System.Drawing.FontStyle.Regular);//优惠券有效期字体
graphics.DrawString(indate, couponIndateFont, new SolidBrush(Color.FromArgb(0xc0, 0xc0, 0xc0)), 108, 511);//画板中绘画优惠券有效期
#endregion
#region
//店铺头像
graphics.DrawImage(itemimage, 23, 607, 250, 268);//画板中绘画店铺头像
#endregion
#region
var priceFont = new Font("微软雅黑", 27, System.Drawing.FontStyle.Strikeout);
graphics.DrawString(price, priceFont, new SolidBrush(Color.Black), 385, 740);
#endregion
#region
var finalPriceFont = new Font("微软雅黑", 45, System.Drawing.FontStyle.Regular);
wid = graphics.MeasureString(price, finalPriceFont);
graphics.DrawString((decimal.Parse(price) - decimal.Parse(couponprice)).ToString(), finalPriceFont, new SolidBrush(Color.Red), 438, 774);
#endregion
#region
var titleFont = new Font("微软雅黑", 18, System.Drawing.FontStyle.Regular);
int num = 18;
int rows = (int)Math.Floor(((decimal)title.Length / (decimal)num));
for (int i = 1; i <= rows; i++)
{
var index = (num * i) + ((i - 1) * 2);
title = title.Insert(index, @"
");
}
graphics.DrawString(title, titleFont, new SolidBrush(Color.Black), 298, 595);
#endregion
#region
var sellcountFont = new Font("微软雅黑", 22, System.Drawing.FontStyle.Regular);//优惠券有效期字体
graphics.DrawString(sellcount + "笔成交", sellcountFont, new SolidBrush(Color.FromArgb(0xc0, 0xc0, 0xc0)), 563, 692);//画板中绘画优惠券有效期
#endregion
}
path = !string.IsNullOrEmpty(basePath) ? Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", basePath) : Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", "Cache\\image");
img.Save(path, ImageFormat.Jpeg);
}
return path;
}
catch (Exception ex)
{
number++;
if (number <= 3) goto Next;
throw ex;
}
}
/// <summary>
/// 合成优惠券图
/// </summary>
/// <param name="image">优惠券底图</param>
/// <param name="shopname">店铺名称</param>
/// <param name="shoppic">店铺头像</param>
/// <param name="couponprice">优惠券金额</param>
/// <param name="indate">优惠券有效期区间(2018.02.12 - 2018.03.12)</param>
/// <param name="basePath">图片保存路径</param>
/// <returns></returns>
public static string GetCouponImage(string image, string shopname, string shopimage, string couponprice, string indate, string basePath = "")
{
int number = 0;
Image mainpic = null;
Image shoppic = null;
Next:
try
{
HttpHelper http = new HttpHelper();
if (image.StartsWith("http"))
mainpic = http.GetImage(http.GetItem(image));
else
mainpic = ReadImageFile(image);
shoppic = http.GetImage(http.GetItem(shopimage));
var width = (int)mainpic.Width;
var height = (int)mainpic.Height;
string path = string.Empty;
using (Bitmap img = new Bitmap(width, height))
{
using (Graphics graphics = Graphics.FromImage(img))
{
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.High;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(mainpic, 0, 0, width, height);//将优惠券底图放置画板中
//graphics.DrawImage(Properties.Resources.foot, 0, int.Parse((height).ToString("0")), 800, 424);
//graphics.DrawImage(Generate3(link), 510, int.Parse((height + 50).ToString("0")), 225, 220);
graphics.DrawImage(shoppic, 38, 417, 60, 60);//画板中绘画店铺头像
#region
var _shopname = shopname + "优惠券";
var couponTitleFont = new Font("微软雅黑", 20, System.Drawing.FontStyle.Regular);
var wid = graphics.MeasureString(_shopname, couponTitleFont);
RectangleF rec = new RectangleF((width - wid.Width) / 2, (91 - wid.Height) / 2, wid.Width, wid.Height);//优惠券标题
Brush brush = new SolidBrush(Color.FromArgb(53, 53, 53));
graphics.DrawString(_shopname, couponTitleFont, brush, rec);
#endregion
#region
var couponFont = new Font("微软雅黑", 28, System.Drawing.FontStyle.Bold);//优惠券金额字体
var couponpriceWid = graphics.MeasureString(couponprice, couponFont);//优惠券金额字体大小
graphics.DrawString(couponprice, couponFont, new SolidBrush(Color.FromArgb(255, 99, 71)), (width - couponpriceWid.Width) / 2, 197);//画板中绘画优惠券金额
#endregion
#region
indate = "使用期限 " + indate;
var couponIndateFont = new Font("微软雅黑", 15, System.Drawing.FontStyle.Regular);//优惠券有效期字体
var couponindateWid = graphics.MeasureString(indate, couponIndateFont);//优惠券有效期字体大小
graphics.DrawString(indate, couponIndateFont, new SolidBrush(Color.FromArgb(169, 169, 169)), (width - couponindateWid.Width) / 2, 115);//画板中绘画优惠券有效期
#endregion
#region
var shopNameFont = new Font("微软雅黑", 20, System.Drawing.FontStyle.Regular);
wid = graphics.MeasureString(shopname, shopNameFont);
//RectangleF rec = new RectangleF((width - wid.Width) / 2, 50, 50, wid.Height);//优惠券标题
graphics.DrawString(shopname, shopNameFont, new SolidBrush(Color.Black), 103, 402 + (90 - wid.Height) / 2);
#endregion
}
if (!string.IsNullOrEmpty(basePath))
path = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", basePath);
else path = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", "Cache\\image");
img.Save(path, ImageFormat.Jpeg);
}
return path;
}
catch (Exception ex)
{
number++;
if (number <= 3) goto Next;
throw ex;
}
}
/// <summary>
/// 通过FileStream 来打开文件这样就可以实现不锁定Image文件到时可以让多用户同时访问Image文件
/// </summary>
/// <param name="path">路径</param>
/// <returns></returns>
private static Bitmap ReadImageFile(string path)
{
FileStream fs = File.OpenRead(path); //OpenRead
int filelength = 0;
filelength = (int)fs.Length; //获得文件长度
Byte[] image = new Byte[filelength]; //建立一个字节数组
fs.Read(image, 0, filelength); //按字节流读取
Image result = Image.FromStream(fs);
fs.Close();
Bitmap bit = new Bitmap(result);
return bit;
}
}
}