You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3522 lines
134 KiB
3522 lines
134 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using Sog;
|
|
using ProtoCSStruct;
|
|
using MySql.Data.MySqlClient;
|
|
using LitJson;
|
|
using SimpleHttpServer;
|
|
using Sog.IO;
|
|
|
|
namespace Operation
|
|
{
|
|
public class MySqlDBOperator : DBOperator
|
|
{
|
|
private MySqlDB db;
|
|
private const int BuffLengthMax = 500 * 1024;
|
|
|
|
public MySqlDBOperator(string dbname, string ip, string user, string password)
|
|
{
|
|
db = new MySqlDB(dbname, ip, user, password);
|
|
}
|
|
|
|
//销毁的时候置空
|
|
public override void Dispose()
|
|
{
|
|
db.Dispose();
|
|
db = null;
|
|
}
|
|
|
|
public override void KeepAlive()
|
|
{
|
|
string strSql = "select Id from mail_box where Id=0";
|
|
|
|
MySqlDataReader reader = db.ExecReader(strSql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.KeepAlive no record in account table, return reader is null!");
|
|
return;
|
|
}
|
|
|
|
//记住一定要Close
|
|
reader.Close();
|
|
|
|
TraceLog.Trace("MySqlDBOperator.KeepAlive exec at {0}", DateTime.Now);
|
|
}
|
|
|
|
public override int SelectAccount(JsonData builder, string account)
|
|
{
|
|
string sql = "";
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
sql = string.Format("select * from account where account='{0}'", account);
|
|
}
|
|
else
|
|
{
|
|
sql = "select * from account";
|
|
}
|
|
|
|
var reader = db.ExecReader(sql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDelAccount 连接数据库异常");
|
|
builder["ret"] = 6;
|
|
builder["msg"] = "error";
|
|
return -1;
|
|
}
|
|
|
|
List<Account> admins = new List<Account>();
|
|
while (reader.Read())
|
|
{
|
|
Account admin = new Account();
|
|
admin.account = reader.GetString("account");
|
|
admin.name = reader.GetString("name");
|
|
admin.valid = reader.GetInt32("valid");
|
|
admin.lastLoginTime = reader.GetString("lastLoginTime");
|
|
admin.cTime = reader.GetString("createTime");
|
|
admins.Add(admin);
|
|
}
|
|
|
|
reader.Close();
|
|
foreach (var admin in admins)
|
|
{
|
|
var roles = AdminSvc.GetRoles(admin.account);
|
|
if (roles != null)
|
|
{
|
|
admin.roles.AddRange(roles);
|
|
}
|
|
}
|
|
|
|
JsonData data = new JsonData();
|
|
foreach (var admin in admins)
|
|
{
|
|
data.Add(admin.ToJson());
|
|
}
|
|
|
|
builder["data"] = data;
|
|
return 0;
|
|
}
|
|
|
|
public override void CreateAccount(JsonData jsondata, string account, string name, string password)
|
|
{
|
|
string sql = string.Format("select * from account where account='{0}'", account);
|
|
MySqlDataReader reader = db.ExecReader(sql);
|
|
if (reader == null)
|
|
{
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "创建账号失败";
|
|
return;
|
|
}
|
|
|
|
if (reader.HasRows)
|
|
{
|
|
reader.Close();
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "账号已存在";
|
|
return;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
DateTime now = DateTime.Now;
|
|
var nowStr = now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
string insert = string.Format(
|
|
"insert into account set account='{0}',password='{1}',name='{2}',createTime='{3}'", account,
|
|
password, name, nowStr);
|
|
reader = db.ExecReader(insert);
|
|
if (reader == null)
|
|
{
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "创建账号失败";
|
|
return;
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
|
|
public override void DBDelAccount(string account, JsonData jsondata)
|
|
{
|
|
string Sqlfoundaccount = string.Format("select account from account");
|
|
MySqlDataReader reader = db.ExecReader(Sqlfoundaccount);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDelAccount 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
jsondata["data"] = new JsonData();
|
|
while (reader.Read())
|
|
{
|
|
JsonData one = new JsonData();
|
|
one.Add(reader.GetString("account"));
|
|
jsondata["data"].Add(one);
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
if (account != null)
|
|
{
|
|
//删除Account
|
|
string deleteSql = string.Format("delete from account where account='{0}'", account);
|
|
reader = db.ExecReader(deleteSql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDelAccount 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
//检查是否删除成功
|
|
string selectSql = string.Format("select * from account where account='{0}'", account);
|
|
reader = db.ExecReader(selectSql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDelAccount 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
if (reader.HasRows == false)
|
|
{
|
|
jsondata["ret"] = 3;
|
|
jsondata["msg"] = "delete success";
|
|
}
|
|
|
|
reader.Close();
|
|
return;
|
|
}
|
|
|
|
jsondata["ret"] = 3;
|
|
jsondata["msg"] = "delete success";
|
|
return;
|
|
}
|
|
|
|
public override void DBLogin(string account, string passwd, JsonData builder)
|
|
{
|
|
string strSql = string.Format("select password, jurisdiction, valid from account where account = \"{0}\"",
|
|
account);
|
|
|
|
MySqlDataReader reader = db.ExecReader(strSql); //运行sql语句得出返回值给reader
|
|
if (reader == null)
|
|
{
|
|
builder["ret"] = 6;
|
|
builder["msg"] = "系统错误";
|
|
return;
|
|
}
|
|
|
|
bool ret = reader.Read();
|
|
if (ret == false)
|
|
{
|
|
builder["ret"] = 3;
|
|
builder["msg"] = "无效的用户名或密码";
|
|
reader.Close();
|
|
return;
|
|
}
|
|
|
|
string dbpasswd = reader.GetString("password");
|
|
int dbvalid = reader.GetInt32("valid");
|
|
string auth = reader.GetString("jurisdiction");
|
|
|
|
reader.Close(); //关掉reader
|
|
|
|
if (dbpasswd != passwd||dbvalid != 1)
|
|
{
|
|
builder["ret"] = 3;
|
|
builder["msg"] = "无效的用户名或密码";
|
|
return;
|
|
}
|
|
|
|
long nowTime = OperationServerUtils.GetTimeSecond(); //获取时间戳
|
|
|
|
string str = nowTime.ToString() + account +
|
|
OperationServerUtils.GetOperationServerData().m_app.Rand.NextDouble().ToString();
|
|
string token = str;
|
|
|
|
if (auth != "")
|
|
{
|
|
builder["auth"] = auth;
|
|
}
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBLogin account {0} token {1}", account, token);
|
|
|
|
builder["ret"] = 0;
|
|
builder["token"] = token;
|
|
builder["account"] = account;
|
|
|
|
var tokenList = OperationServerUtils.GetOperationServerData().m_tokenList;
|
|
var accountList = OperationServerUtils.GetOperationServerData().m_accountList;
|
|
|
|
if (tokenList.ContainsKey(token)) //键值里面如果没key
|
|
{
|
|
tokenList[token] = nowTime;
|
|
accountList[token] = account;
|
|
}
|
|
else
|
|
{
|
|
tokenList.Add(token, nowTime);
|
|
accountList.Add(token, account);
|
|
}
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?account", MySqlDbType.VarChar) { Value = account },
|
|
new MySqlParameter("?lastLoginTime", MySqlDbType.DateTime) { Value = DateTime.Now },
|
|
|
|
}.ToArray();
|
|
|
|
try
|
|
{
|
|
string editSql = $"UPDATE account SET lastLoginTime=?lastLoginTime WHERE account=?account;";
|
|
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBLogin account {0} : 更新写入数据库错误", account);
|
|
}
|
|
|
|
TraceLog.Debug("MySqlDBOperator.DBLogin account {0} success", account);
|
|
|
|
return;
|
|
}
|
|
|
|
public override void DBCheckAuth(string account, JsonData builder)
|
|
{
|
|
string strSql = string.Format("select jurisdiction from account where account = \"{0}\"", account);
|
|
|
|
MySqlDataReader reader = db.ExecReader(strSql); //运行sql语句得出返回值给reader
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckAuth 数据库连接异常");
|
|
builder["ret"] = 6;
|
|
builder["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
if (reader.HasRows == false)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckAuth 无效的用户名或密码");
|
|
builder["ret"] = 3;
|
|
builder["msg"] = "无效的用户名或密码";
|
|
reader.Close(); //关掉reader
|
|
return;
|
|
}
|
|
|
|
string auth = reader.GetString("jurisdiction");
|
|
|
|
reader.Close(); //关掉reader
|
|
|
|
builder["auth"] = auth;
|
|
builder["ret"] = 0;
|
|
|
|
return;
|
|
}
|
|
|
|
public override void DBDeleteNotice(JsonData Jsondata, string id, string noticeId)
|
|
{
|
|
string sqlStr = "SELECT * from notice ";
|
|
bool isNotice = false;
|
|
|
|
if (!String.IsNullOrEmpty(id))
|
|
{
|
|
sqlStr += " WHERE id = " + id;
|
|
}
|
|
|
|
if (!String.IsNullOrEmpty(noticeId))
|
|
{
|
|
sqlStr += " WHERE noticeId = " + noticeId;
|
|
isNotice = true;
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
//通知chat删除
|
|
while (reader.Read())
|
|
{
|
|
var Id = reader.GetInt32("id");
|
|
var popUp = reader.GetInt32("popUp");
|
|
var realmlist = reader.GetString("realmlist");
|
|
SSSysNoticeDel notice = new SSSysNoticeDel();
|
|
notice.Id = Id;
|
|
notice.Noticetype = popUp == 1 ? NoticeType.Popup : NoticeType.Click;
|
|
|
|
// 改为发送到不同 version
|
|
OperationServerUtils.GetPacketSender().Broadcast((int)ServerType.Version,
|
|
(int)SSGameMsgID.ChatDelNotice, ref notice, 0, 0);
|
|
|
|
OperationServerUtils.SendToWorld((int)SSGameMsgID.ChatDelNotice, ref notice, 0, 0, realmlist);
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
if (!isNotice)
|
|
{
|
|
//通知数据库删除
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?id", MySqlDbType.Int32) { Value = id }
|
|
}.ToArray();
|
|
|
|
string editSql = $"DELETE FROM notice WHERE id=?id;";
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
else
|
|
{
|
|
//通知数据库删除
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?noticeId", MySqlDbType.Int32) { Value = noticeId }
|
|
}.ToArray();
|
|
|
|
string editSql = $"DELETE FROM notice WHERE noticeId=?noticeId;";
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "操作成功";
|
|
}
|
|
|
|
public override void DBSendEmailCokie(JsonData Jsondata, HttpResponse rsp, HttpRequest request,
|
|
HttpQueryParams query)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSendEmailCokie url {0} ,param count {1}", request.Url, query.Count);
|
|
|
|
string startDate = query.GetValue("startDate");
|
|
string endDate = (query.GetValue("endDate") + " 23:59:59");
|
|
string sqlStr =
|
|
string.Format("select * from mail_box where(dater >= '{0}' and dater <= '{1}') ORDER BY dater",
|
|
startDate, endDate);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSendEmailCokie start {0} ,end {1}", startDate, endDate);
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSendEmailCokie reader {0}", reader);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
JsonData columnsArray = new JsonData();
|
|
Jsondata["columns"] = columnsArray;
|
|
columnsArray.Add("日期");
|
|
columnsArray.Add("收件人");
|
|
columnsArray.Add("标题");
|
|
columnsArray.Add("内容");
|
|
//columnsArray.Add("金币数量");
|
|
//columnsArray.Add("钻石数量");
|
|
columnsArray.Add("道具");
|
|
columnsArray.Add("货币");
|
|
//columnsArray.Add("道具数量");
|
|
columnsArray.Add("状态");
|
|
|
|
JsonData msgdata = new JsonData();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
while (reader.Read())
|
|
{
|
|
DateTime dateId1 = reader.GetDateTime("dater"); //格式为2017/1/11 19:30:49
|
|
//TraceLog.Trace("dateId1 {0}", dateId1);
|
|
String dateStr = dateId1.ToString("u").Substring(0, 19); //格式为2017-01-11 19:30:49
|
|
//TraceLog.Trace("dater {0}", dateStr);
|
|
string name = reader.GetString("name");
|
|
//TraceLog.Trace("name {0}", name);
|
|
string title = reader.GetString("title");
|
|
string content = reader.GetString("content");
|
|
//int chip = reader.GetInt32("chip");
|
|
//int diamond = reader.GetInt32("diamond");
|
|
string itemstr = reader.GetString("itemstr");
|
|
string curstr = reader.GetString("curstr");
|
|
// int itemCount1 = reader.GetInt32("itemCount1");
|
|
int status = reader.GetInt32("status");
|
|
|
|
JsonData linedata1 = new JsonData();
|
|
linedata1.Add(dateStr);
|
|
linedata1.Add(name);
|
|
linedata1.Add(title);
|
|
linedata1.Add(content);
|
|
//linedata1.Add(chip);
|
|
//linedata1.Add(diamond);
|
|
linedata1.Add(itemstr);
|
|
linedata1.Add(curstr);
|
|
linedata1.Add(status);
|
|
|
|
msgdata.Add(linedata1);
|
|
}
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSendEmailCokie success");
|
|
return;
|
|
}
|
|
|
|
public override void DBChangeAuthority(string account, string jurisdiction, JsonData Jsondata)
|
|
{
|
|
string strSql = string.Format("update account set jurisdiction='{0}' where account='{1}'", jurisdiction,
|
|
account);
|
|
MySqlDataReader reader = db.ExecReader(strSql); //运行sql语句得出返回值给reader
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBChangeAuthority 数据库连接异常");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "errror";
|
|
return;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
string Sql = string.Format("select jurisdiction from account where account = \"{0}\"", account);
|
|
MySqlDataReader readr = db.ExecReader(Sql); //运行sql语句得出返回值给reader
|
|
if (readr == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBChangeAuthority 数据库连接异常");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "errror";
|
|
return;
|
|
}
|
|
|
|
string[] juris = new string[account.Length];
|
|
|
|
while (readr.Read())
|
|
{
|
|
for (var i = 0; i < account.Length; i++)
|
|
{
|
|
juris[i] = readr.GetString("jurisdiction");
|
|
if (jurisdiction == juris[i])
|
|
{
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "权限更改成功!";
|
|
}
|
|
}
|
|
}
|
|
|
|
readr.Close();
|
|
}
|
|
|
|
public override bool DBSelectMailWithRule(int id, bool isDiscard, ref SSGetMailWithRuleRes res)
|
|
{
|
|
//TickMailBoxTemp();
|
|
// 计算日期
|
|
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0);
|
|
int nowTime = Convert.ToInt32(ts.TotalMinutes); //获取当前时间戳
|
|
|
|
//string strSql = $"select * from mail_box where dater >= '{Dt}'";
|
|
string strSql = "";
|
|
if (isDiscard)
|
|
{
|
|
int timebef = nowTime - (15 * 24 * 60); //过去15天之内的
|
|
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0);
|
|
string Dt = startTime.AddMinutes(timebef).ToString("yyyy-MM-dd HH:mm:ss");
|
|
strSql = $"select * from mail_box where dater >='{Dt}' and status=4";
|
|
}
|
|
else
|
|
{
|
|
string nowTimeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
strSql =
|
|
$"select * from mail_box where (datee>='{nowTimeStr}' or timeLimit>0) and dater <='{nowTimeStr}' and Id > '{id}' and status=0"; //邮件再有效期内
|
|
}
|
|
|
|
strSql += " order by Id asc";
|
|
|
|
TraceLog.Debug("MySqlDBOperator.DBSelectMailWithRule sqlStr:{0}", strSql);
|
|
|
|
MySqlDataReader reader = db.ExecReader(strSql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectMailWithRule error: return reader is null!");
|
|
return false;
|
|
}
|
|
|
|
if (!reader.HasRows)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectMailWithRule DB has no record");
|
|
reader.Close();
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (res.RuleMail.Count >= 16)
|
|
{
|
|
TraceLog.Debug("MySqlDBOperator.DBSelectMailWithRule res.RuleMail.Count = {0}",
|
|
res.RuleMail.Count);
|
|
break;
|
|
}
|
|
|
|
var mail = new SSSendMailWithRule();
|
|
MailStatus status = (MailStatus)reader.GetInt32("status");
|
|
mail.Seq = reader.GetInt32("Id");
|
|
|
|
DateTime insertTime = reader.GetDateTime("dater"); //dater是邮件插入mail_box的时间
|
|
DateTime DateStart = new DateTime(1970, 1, 1, 0, 0, 0);
|
|
int lastDateTime = Convert.ToInt32((insertTime - DateStart).TotalMinutes); //获取最后一组数据的时间戳
|
|
int timeInterval = nowTime - lastDateTime;
|
|
|
|
int timeLimit = reader.GetInt32("timeLimit"); //分钟
|
|
if (timeLimit <= 0)
|
|
{
|
|
// 邮件有效期
|
|
DateTime endTime = reader.GetDateTime("datee");
|
|
timeLimit = Convert.ToInt32((endTime - DateTime.Now).TotalMinutes);
|
|
}
|
|
else
|
|
{
|
|
int dayMinute = 24 * 60;
|
|
if (timeLimit < dayMinute) //最小 1 天
|
|
{
|
|
timeLimit = dayMinute;
|
|
}
|
|
|
|
if (timeLimit > 15 * dayMinute) //最长15天
|
|
{
|
|
timeLimit = 15 * dayMinute;
|
|
}
|
|
}
|
|
|
|
|
|
// 拉取还在有效时间内的邮件,要减掉已经过去的时间
|
|
timeInterval = (int)(timeInterval / 60);
|
|
mail.RuleParam1 = timeLimit - timeInterval > 0 ? (timeLimit - timeInterval) : 0;
|
|
if (mail.RuleParam1 == 0)
|
|
{
|
|
TraceLog.Debug(
|
|
"MySqlDBOperator.DBSelectMailWithRule mail.RuleParam1 == 0 continue, mailSeq {0} timeLimit {1} timeInterval {2}",
|
|
mail.Seq, timeLimit, timeInterval);
|
|
continue;
|
|
}
|
|
|
|
// 发送类型
|
|
string strName = reader.GetString("name");
|
|
if (strName == "all")
|
|
{
|
|
mail.RuleType = (int)SendMailRuleType.All;
|
|
}
|
|
else if (strName == "ios")
|
|
{
|
|
mail.RuleType = (int)SendMailRuleType.Ios;
|
|
}
|
|
else if (strName == "android")
|
|
{
|
|
mail.RuleType = (int)SendMailRuleType.Android;
|
|
}
|
|
else
|
|
{
|
|
mail.RuleType = (int)SendMailRuleType.None;
|
|
mail.TargetUid.SetString(strName);
|
|
}
|
|
|
|
mail.Mail.MailType = 0;
|
|
//货币
|
|
string curstr = reader.GetString("curstr");
|
|
if (!string.IsNullOrWhiteSpace(curstr))
|
|
{
|
|
foreach (var lt in curstr.Split('#'))
|
|
{
|
|
var ln = lt.Split('|');
|
|
|
|
var curid = ln[0];
|
|
var curnum = ln[1].Toint32(0);
|
|
if (string.IsNullOrEmpty(curid) || curnum == 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
var currency = new TypeIDValueString
|
|
{
|
|
Type = (int)GoodsType.Items,
|
|
Id = new FixedStructString64(curid),
|
|
Value = curnum
|
|
};
|
|
mail.Mail.AddGoods.Add(ref currency);
|
|
}
|
|
}
|
|
|
|
//道具
|
|
string itemstr = reader.GetString("itemstr");
|
|
if (!string.IsNullOrWhiteSpace(itemstr))
|
|
{
|
|
foreach (var lt in itemstr.Split('#'))
|
|
{
|
|
var ln = lt.Split('|');
|
|
|
|
var itemid = ln[0];
|
|
var itemnum = ln[1].Toint32(0);
|
|
if (string.IsNullOrEmpty(itemid)|| itemnum == 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
var currency = new TypeIDValueString
|
|
{
|
|
Type = (int)GoodsType.Items,
|
|
Id = new FixedStructString64(itemid),
|
|
Value = itemnum
|
|
};
|
|
mail.Mail.AddGoods.Add(ref currency);
|
|
}
|
|
}
|
|
|
|
//武器
|
|
string equipStr = reader.GetString("equipStr");
|
|
if (!string.IsNullOrWhiteSpace(equipStr))
|
|
{
|
|
foreach (var lt in equipStr.Split('#'))
|
|
{
|
|
var ln = lt.Split('|');
|
|
|
|
var equipid = ln[0];
|
|
var equipnum = ln[1].Toint32(0);
|
|
if (string.IsNullOrEmpty(equipid)|| equipnum == 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
var currency = new TypeIDValueString
|
|
{
|
|
Type = (int)GoodsType.Equipment,
|
|
Id = new FixedStructString64(equipid),
|
|
Value = equipnum
|
|
};
|
|
mail.Mail.AddGoods.Add(ref currency);
|
|
}
|
|
}
|
|
|
|
//自定义道具
|
|
string customItemStr = reader.GetString("customItemStr");
|
|
if (!string.IsNullOrWhiteSpace(customItemStr))
|
|
{
|
|
foreach (var custom in customItemStr.Split('#'))
|
|
{
|
|
var customItem = custom.Split('|');
|
|
if (customItem.Length != 3)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectMailWithRule equipItem.Length != 3: continue!");
|
|
continue;
|
|
}
|
|
|
|
var customtype = customItem[0].Toint32(0);
|
|
var customId = customItem[1];
|
|
var customnum = customItem[2].Toint32(0);
|
|
|
|
// todo: 这里其实有问题, 有些东西不支持邮件发
|
|
if (customtype <= (int)GoodsType.None || customtype >= (int)GoodsType.Size)
|
|
{
|
|
TraceLog.Error(
|
|
"MySqlDBOperator.DBSelectMailWithRule customtype:{0},customId:{1},customnum:{2}",
|
|
customtype, customId, customnum);
|
|
break;
|
|
}
|
|
|
|
if (customnum == 0)
|
|
{
|
|
TraceLog.Error(
|
|
"MySqlDBOperator.DBSelectMailWithRule customtype:{0},customId:{1},customnum:{2}",
|
|
customtype, customId, customnum);
|
|
break;
|
|
}
|
|
|
|
var goods = new TypeIDValueString { Type = customtype, Id = new FixedStructString64(customId), Value = customnum };
|
|
mail.Mail.AddGoods.Add(ref goods);
|
|
}
|
|
}
|
|
|
|
string realmlist = reader.GetString("realmlist");
|
|
//服务器列表
|
|
if (realmlist.Contains(','))
|
|
{
|
|
var realms = realmlist.Split(',');
|
|
if (realms.Length > 6)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
foreach (var _RealmID in realms)
|
|
{
|
|
int RealmID = Convert.ToInt32(_RealmID);
|
|
if (RealmID != 0)
|
|
{
|
|
mail.Mail.Realmlist.Add(RealmID);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (realmlist != "" && realmlist != null)
|
|
{
|
|
int RealmID = Convert.ToInt32(realmlist);
|
|
if (RealmID != 0)
|
|
{
|
|
mail.Mail.Realmlist.Add(RealmID);
|
|
}
|
|
}
|
|
}
|
|
|
|
mail.Mail.MailID = reader.GetUInt32("Id");
|
|
mail.Mail.Title.SetString(reader.GetString("title"));
|
|
mail.Mail.Content.SetString(reader.GetString("content"));
|
|
mail.Mail.Language.SetString(reader.GetString("language"));
|
|
mail.Mail.Uuid.SetString(reader.GetString("uuid"));
|
|
mail.Mail.IsSendAllUser = reader.GetInt32("isSendToAll");
|
|
mail.Mail.Status = (uint)reader.GetInt32("status");
|
|
|
|
ExtMail ext = new ExtMail();
|
|
//请封装
|
|
int gameDataIndex = reader.GetOrdinal("data");
|
|
if (!reader.IsDBNull(gameDataIndex))
|
|
{
|
|
byte[] buffer = new byte[50 * 1024];
|
|
long gameDataLength = reader.GetBytes(gameDataIndex, 0, buffer, 0, buffer.Length);
|
|
byte[] gameDataByte = new byte[gameDataLength];
|
|
Buffer.BlockCopy(buffer, 0, gameDataByte, 0, (int)gameDataLength);
|
|
|
|
StructMessageParseUtils.ParseFrom(ref ext, gameDataByte);
|
|
}
|
|
|
|
// 有数据
|
|
if (ext.Havedata)
|
|
{
|
|
for (int i = 0; i < ext.LangContentList.Count; i++)
|
|
{
|
|
mail.LangContent.Add(ext.LangContentList[i]);
|
|
}
|
|
|
|
mail.Mail.ApkVersion.SetString(ext.VersionParam.GetString());
|
|
mail.Mail.PlayerCreateTimeLimit = ext.PlayerCreateTimeLimit;
|
|
mail.RealmStr = ext.RealmStr;
|
|
//timeParamStr = ext.TimeParamStr.GetString();
|
|
}
|
|
|
|
res.RuleMail.Add(ref mail);
|
|
|
|
TraceLog.Trace(
|
|
"MySqlDBOperator.DBSelectMailWithRule mailUuid {0} mailId {1} name {2} title {3} content {4} status {5} expirTime {6} sendTime {7} isSendAllUser {8}" +
|
|
" seg {9} realm {10} Language {11} coin {12} item {13} customItem {14}",
|
|
mail.Mail.Uuid, mail.Mail.MailID, strName, mail.Mail.Title, mail.Mail.Content,
|
|
mail.Mail.Status, mail.Mail.ExpirationTime, mail.Mail.SendTime, mail.Mail.IsSendAllUser,
|
|
mail.Seq, mail.RealmStr, mail.Mail.Language, curstr, itemstr, customItemStr);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (reader != null)
|
|
reader.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.DBSelectMailWithRule error:{0}!", ex.Message);
|
|
}
|
|
|
|
reader.Close();
|
|
return true;
|
|
}
|
|
|
|
public override bool DBUpdateMailStatus(int newStatus, int id, string uuid)
|
|
{
|
|
string sqlStr = $"update mail_box set status={newStatus} where uuid='{uuid}' and Id={id} ";
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Error(
|
|
"MySqlDBOperator.DBUpdateMailStatus record id:{0} in table mail_box , return reader is null!", id);
|
|
return false;
|
|
}
|
|
|
|
reader.Close();
|
|
return true;
|
|
}
|
|
|
|
public override int DBSelectMaxIdPlayerOp()
|
|
{
|
|
int ret = 0;
|
|
string sqlCount = "select id from player_op order by id desc limit 1";
|
|
MySqlDataReader reader = db.ExecReader(sqlCount);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectMaxIdPlayerOp reader == null!");
|
|
return ret;
|
|
}
|
|
|
|
try
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
ret = reader.GetInt32("id");
|
|
break;
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
reader.Close();
|
|
TraceLog.Error("MySqlDBOperator.DBSelectMaxIdPlayerOp reader.Read error {0}!", ex.Message);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
public override List<DBPlayerDataOp> DBSelectPlayOpData(long uid, long currentMaxId)
|
|
{
|
|
List<DBPlayerDataOp> retList = new List<DBPlayerDataOp>();
|
|
string sqlStr = $"select * from player_op where uid={uid} and Id > {currentMaxId} ";
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectPlayOpData reader == null!");
|
|
return retList;
|
|
}
|
|
|
|
try
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
DBPlayerDataOp dBPlayerDataOp = new DBPlayerDataOp();
|
|
dBPlayerDataOp.Id = reader.GetInt32("Id");
|
|
dBPlayerDataOp.Type = (OpPlayDataHandleType)reader.GetInt32("type");
|
|
dBPlayerDataOp.OpType = reader.GetInt32("opType");
|
|
dBPlayerDataOp.OpId = reader.GetInt32("opId");
|
|
dBPlayerDataOp.OpNum = reader.GetInt32("opNum");
|
|
dBPlayerDataOp.UniqueId = (reader.GetString("uniqueId").Tolong());
|
|
|
|
ExtPlayerOp exdata = new ExtPlayerOp();
|
|
int contentIndex = reader.GetOrdinal("exData");
|
|
|
|
byte[] buffer = new byte[BuffLengthMax];
|
|
long contentLength = reader.GetBytes(contentIndex, 0, buffer, 0, buffer.Length);
|
|
byte[] contentByte = new byte[contentLength];
|
|
Buffer.BlockCopy(buffer, 0, contentByte, 0, (int)contentLength);
|
|
StructMessageParseUtils.ParseFrom(ref exdata, contentByte);
|
|
if (exdata.Havedata)
|
|
{
|
|
/// 前端修改处理一下
|
|
|
|
}
|
|
|
|
retList.Add(dBPlayerDataOp);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
reader.Close();
|
|
TraceLog.Error("MySqlDBOperator.DBSelectPlayOpData reader.Read error {0}!", ex.Message);
|
|
}
|
|
|
|
return retList;
|
|
}
|
|
|
|
public override void DBInsertBanUser(ref SSGMSetFreezeTimeRes res)
|
|
{
|
|
long strbantim = res.FreezeTime;
|
|
long struidd = res.Uid;
|
|
int freezeReason = (int)res.FreezeReason;
|
|
string freezeReasonStr = res.FreezeReasonStr.GetString();
|
|
|
|
string strbantime = AppTime.ConvertUnixTimeToDateTime(strbantim * 1000).ToString("u").Substring(0, 19);
|
|
string struid = struidd.ToString();
|
|
|
|
string sql =
|
|
"insert into ban_box set dater=?dater,UID=?UID,banDay=?banDay,type=1,reasonType=?reasonType,otherReason=?otherReason;";
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?dater", MySqlDbType.DateTime) { Value = DateTime.Now },
|
|
new MySqlParameter("?UID", MySqlDbType.VarChar) { Value = struid },
|
|
new MySqlParameter("?banDay", MySqlDbType.VarChar) { Value = strbantime },
|
|
new MySqlParameter("?reasonType", MySqlDbType.Int32) { Value = freezeReason },
|
|
new MySqlParameter("?otherReason", MySqlDbType.VarChar) { Value = freezeReasonStr },
|
|
}.ToArray();
|
|
|
|
try
|
|
{
|
|
MySqlDataReader readr = db.ExecReader(sql, MySqlParameters);
|
|
if (readr != null)
|
|
{
|
|
readr.Close();
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBInsertBanUser sql {0} failed", sql);
|
|
}
|
|
}
|
|
|
|
public override void DBInsertBanChat(ref SSEnableSendMsgRes res)
|
|
{
|
|
long strbantim = res.EnableTime;
|
|
long struidd = res.Uid;
|
|
|
|
string strbantime = AppTime.ConvertUnixTimeToDateTime(strbantim * 1000).ToString("u").Substring(0, 19);
|
|
string struid = struidd.ToString();
|
|
|
|
string sql = "insert into ban_box set dater=?dater,UID=?UID,banDay=?banDay,type=2;";
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?dater", MySqlDbType.DateTime) { Value = DateTime.Now },
|
|
new MySqlParameter("?UID", MySqlDbType.VarChar) { Value = struid },
|
|
new MySqlParameter("?banDay", MySqlDbType.VarChar) { Value = strbantime },
|
|
|
|
}.ToArray();
|
|
|
|
try
|
|
{
|
|
MySqlDataReader readr = db.ExecReader(sql, MySqlParameters);
|
|
if (readr != null)
|
|
{
|
|
readr.Close();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBInsertBanChat sql {0} failed : {1}", sql, ex.Message);
|
|
}
|
|
}
|
|
|
|
public override void DBNoticeBackgrounds(string language, ref SSNoticeBackGroundsRes res)
|
|
{
|
|
TraceLog.Debug("MySqlDBOperator.DBNoticeBackgrounds: Language:{0}", language);
|
|
|
|
string sqlStr = "SELECT * from noticebackgrounds ";
|
|
if (language != "")
|
|
{
|
|
sqlStr += " WHERE language = '" + language + "' and state = 1";
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
try
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
var picObj = new NoticeBackGrounds();
|
|
|
|
picObj.Language.SetString(reader.GetString("language"));
|
|
picObj.Pic.SetString(OperationServerUtils.GetNewPicUrl(reader.GetString("pic")));
|
|
|
|
res.PicList.Add(picObj);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
reader.Close();
|
|
TraceLog.Error("MySqlDBOperator.DBNoticeBackgrounds reader.Read error {0}!", ex.Message);
|
|
}
|
|
}
|
|
|
|
public override void DBDeleteNoticeBackgrounds(int id)
|
|
{
|
|
TraceLog.Debug("MySqlDBOperator.DBDeleteNoticeBackgrounds: id:{0}", id);
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?id", MySqlDbType.Int32) { Value = id }
|
|
|
|
}.ToArray();
|
|
|
|
string editSql = $"DELETE FROM noticebackgrounds WHERE id=?id;";
|
|
|
|
TraceLog.Debug("MySqlDBOperator.DBDeleteNoticeBackgrounds: sql:{0}", editSql);
|
|
|
|
try
|
|
{
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBDeleteNoticeBackgrounds error : {0}", e.Message);
|
|
return;
|
|
}
|
|
}
|
|
|
|
public override void DBSelectNoticeBackGrounds(string language, string id, JsonData Jsondata)
|
|
{
|
|
string sqlStr = "SELECT * from noticebackgrounds ";
|
|
|
|
if (!String.IsNullOrEmpty(language))
|
|
{
|
|
sqlStr += " WHERE language= '" + language + "'";
|
|
}
|
|
|
|
if (!String.IsNullOrEmpty(id))
|
|
{
|
|
sqlStr += " WHERE id = " + id;
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectNoticeBackGrounds : reader is null!");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "数据库连接失败";
|
|
return;
|
|
}
|
|
|
|
JsonData msgdata = new JsonData();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
|
|
try
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
JsonData linedata1 = new JsonData();
|
|
linedata1["id"] = reader.GetInt32("id").ToString();
|
|
linedata1["language"] = reader.GetString("language");
|
|
linedata1["pic"] = reader.GetString("pic");
|
|
linedata1["startTime"] = reader.GetDateTime("startTime").ToString("yyyy-MM-dd HH:mm:ss");
|
|
;
|
|
linedata1["endTime"] = reader.GetDateTime("endTime").ToString("yyyy-MM-dd HH:mm:ss");
|
|
;
|
|
linedata1["state"] = reader.GetInt32("state").ToString();
|
|
linedata1["valid"] =
|
|
ExComm.CheckDateTime(reader.GetDateTime("startTime"), reader.GetDateTime("endTime"));
|
|
|
|
msgdata.Add(linedata1);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
reader.Close();
|
|
TraceLog.Error("MySqlDBOperator.DBSelectNoticeBackGrounds reader.Read error {0}!", ex.Message);
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "数据库数据失败";
|
|
return;
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
}
|
|
|
|
public override void DBUpdateNoticeBackGrounds(string language, string pic, int id, int state, string startTime,
|
|
string endTime, JsonData Jsondata)
|
|
{
|
|
try
|
|
{
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?id", MySqlDbType.Int32) { Value = id },
|
|
new MySqlParameter("?state", MySqlDbType.Int32) { Value = state },
|
|
new MySqlParameter("?language", MySqlDbType.VarChar) { Value = language },
|
|
new MySqlParameter("?pic", MySqlDbType.VarChar) { Value = pic },
|
|
new MySqlParameter("?startTime", MySqlDbType.DateTime) { Value = startTime },
|
|
new MySqlParameter("?endTime", MySqlDbType.DateTime) { Value = endTime },
|
|
};
|
|
|
|
string editSql =
|
|
$"INSERT INTO noticebackgrounds(language,pic,state,startTime,endTime) VALUES(?language,?pic,?state,?startTime,?endTime);";
|
|
|
|
if (id != 0)
|
|
{
|
|
editSql =
|
|
$"UPDATE noticebackgrounds SET language=?language,pic=?pic,state=?state,startTime=?startTime,endTime=?endTime WHERE id=?id ;";
|
|
}
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateNoticeBackGrounds sql {0}", editSql);
|
|
|
|
db.ExecNonQuery(editSql, MySqlParameters.ToArray());
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBUpdateNoticeBackGrounds error : {0}", e.Message);
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "数据库操作错误!";
|
|
return;
|
|
}
|
|
}
|
|
|
|
public override bool DBUpdateNoticeBackGroundsState(int id, int state)
|
|
{
|
|
try
|
|
{
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?id", MySqlDbType.Int32) { Value = id },
|
|
new MySqlParameter("?state", MySqlDbType.Int32) { Value = state },
|
|
|
|
}.ToArray();
|
|
|
|
string editSql = $"UPDATE noticebackgrounds SET state=?state WHERE id=?id ;";
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateNoticeBackGroundsState sql {0}", editSql);
|
|
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBUpdateNoticeBackGroundsState error :", e.Message);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void BanNotice(int noticeId, int state, JsonData Jsondata)
|
|
{
|
|
string sqlStr = $"SELECT * from notice WHERE noticeId={noticeId}";
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
bool isData = false;
|
|
|
|
//通知chat删除 禁用公告
|
|
while (reader.Read())
|
|
{
|
|
var Id = reader.GetInt32("id");
|
|
var popUp = reader.GetInt32("popUp");
|
|
var type = reader.GetInt32("noticeType");
|
|
var realmlist = reader.GetString("realmlist");
|
|
|
|
if (state == 0)
|
|
{
|
|
SSSysNoticeDel notice = new SSSysNoticeDel();
|
|
|
|
notice.Id = Id;
|
|
notice.Noticetype = popUp == 1 ? NoticeType.Popup : NoticeType.Click;
|
|
|
|
//if (type == 1)
|
|
{//删除时通知全部服务器
|
|
OperationServerUtils.GetPacketSender().Broadcast((int)ServerType.Version,
|
|
(int)SSGameMsgID.ChatDelNotice, ref notice, 0, 0);
|
|
}
|
|
//else
|
|
{
|
|
OperationServerUtils.SendToWorld((int)SSGameMsgID.ChatDelNotice, ref notice, 0, 0, realmlist);
|
|
}
|
|
}
|
|
|
|
isData = true;
|
|
}
|
|
|
|
if (reader != null)
|
|
{
|
|
reader.Close();
|
|
}
|
|
|
|
if (isData)
|
|
{
|
|
string sqlStr1 = $"UPDATE notice SET state={state} WHERE noticeId={noticeId}";
|
|
|
|
try
|
|
{
|
|
reader = db.ExecReader(sqlStr1);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (reader != null)
|
|
reader.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.BanNotice db noticeId{0} - error:{1}", noticeId, ex.Message);
|
|
Jsondata["ret"] = 1;
|
|
Jsondata["msg"] = "操作错误,数据库修改失败!";
|
|
}
|
|
|
|
if (reader != null)
|
|
reader.Close();
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "操作成功!";
|
|
}
|
|
|
|
public override void DBSelectBanUser(int type, string startDate, string endDate, JsonData Jsondata)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectBanUser type {0} startDate {1} endDate {2}", type, startDate,
|
|
endDate);
|
|
|
|
string sqlStr =
|
|
string.Format(
|
|
"select * from ban_box where type={2} and (dater >= '{0}' and dater <= '{1}') ORDER BY dater DESC ",
|
|
startDate, endDate, type);
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectBanUser sqlStr {0}", sqlStr);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
|
|
JsonData msgdata = new JsonData();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
|
|
while (reader.Read())
|
|
{
|
|
DateTime dateId1 = reader.GetDateTime("dater"); //格式为2017/1/11 19:30:49
|
|
//TraceLog.Trace("dateId1 {0}", dateId1);
|
|
String dateStr = dateId1.ToString("u").Substring(0, 19); //格式为2017-01-11 19:30:49
|
|
//TraceLog.Trace("dater {0}", dateStr);
|
|
string uid = reader.GetString("UID");
|
|
//TraceLog.Trace("name {0}", name);
|
|
string banDay = reader.GetString("banDay");
|
|
int reason = reader.GetInt32("reasonType");
|
|
string reasonStr = reader.GetString("otherReason");
|
|
JsonData linedata1 = new JsonData();
|
|
linedata1["dateStr"] = dateStr;
|
|
linedata1["uid"] = uid;
|
|
linedata1["banDay"] = banDay;
|
|
linedata1["reasonType"] = reason;
|
|
if (reasonStr.Contains("op:"))
|
|
{
|
|
linedata1["admin"] = reasonStr.Split("op:")[1];
|
|
}
|
|
else
|
|
{
|
|
linedata1["otherStr"] = reasonStr;
|
|
}
|
|
|
|
msgdata.Add(linedata1);
|
|
}
|
|
|
|
reader.Close();
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectBanUser success");
|
|
|
|
return;
|
|
}
|
|
|
|
public override bool DBSelectNotice(int noticeId, JsonData Jsondata)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNotice noticeId {0}", noticeId);
|
|
|
|
string sqlStr = "SELECT * from notice ";
|
|
|
|
if (noticeId > 0)
|
|
{
|
|
sqlStr += " WHERE noticeId = " + noticeId;
|
|
}
|
|
else
|
|
{
|
|
sqlStr += ";";
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
try
|
|
{
|
|
if (reader == null)
|
|
{
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "数据库链接失败";
|
|
return false;
|
|
}
|
|
|
|
if (reader.HasRows)
|
|
{
|
|
Jsondata["ret"] = 8;
|
|
Jsondata["msg"] = "noticeId 已经存在";
|
|
reader.Close();
|
|
return false;
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (reader != null)
|
|
reader.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.DBSelectNotice db noticeId{0} - error:{1}", noticeId, ex.Message);
|
|
Jsondata["ret"] = 1;
|
|
Jsondata["msg"] = "操作错误,数据库查询失败!";
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void DBUpdateNotice(Dictionary<string, string> from, byte[] dataByte, JsonData Jsondata)
|
|
{
|
|
TraceLog.Debug("MySqlDBOperator.DBUpdateNotice: fromCount:{0}", from.Count);
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?id", MySqlDbType.Int32) { Value = from["id"] },
|
|
new MySqlParameter("?state", MySqlDbType.Int32) { Value = from["state"] },
|
|
new MySqlParameter("?startTime", MySqlDbType.DateTime) { Value = from["startTime"] },
|
|
new MySqlParameter("?endTime", MySqlDbType.DateTime) { Value = from["endTime"] },
|
|
new MySqlParameter("?title", MySqlDbType.VarChar) { Value = from["title"] },
|
|
new MySqlParameter("?content", MySqlDbType.VarChar) { Value = from["content"] },
|
|
new MySqlParameter("?icon", MySqlDbType.VarChar) { Value = from["icon"] },
|
|
new MySqlParameter("?pic", MySqlDbType.VarChar) { Value = from["pic"] },
|
|
new MySqlParameter("?language", MySqlDbType.VarChar) { Value = from["language"] },
|
|
new MySqlParameter("?jump", MySqlDbType.Int32) { Value = from["jump"].Toint32(0) },
|
|
new MySqlParameter("?popUp", MySqlDbType.Int32) { Value = from["popUp"] },
|
|
new MySqlParameter("?sort", MySqlDbType.Int32) { Value = from["sort"] },
|
|
new MySqlParameter("?link", MySqlDbType.VarChar) { Value = from["link"] },
|
|
new MySqlParameter("?realmlist", MySqlDbType.VarChar) { Value = from["realmlist"] },
|
|
new MySqlParameter("?triggertype", MySqlDbType.Int32) { Value = from["triggertype"].Toint32(0) },
|
|
new MySqlParameter("?startTimeDay", MySqlDbType.Int32) { Value = from["startTimeDay"].Toint32(0) },
|
|
new MySqlParameter("?startTimefine", MySqlDbType.VarChar) { Value = from["startTimefine"] },
|
|
new MySqlParameter("?endTimeDay", MySqlDbType.Int32) { Value = from["endTimeDay"].Toint32(0) },
|
|
new MySqlParameter("?endTimefine", MySqlDbType.VarChar) { Value = from["endTimefine"] },
|
|
new MySqlParameter("?dungeonid", MySqlDbType.Int32) { Value = from["dungeonid"].Toint32(0) },
|
|
new MySqlParameter("?Intervaldays", MySqlDbType.Int32) { Value = from["Intervaldays"].Toint32(0) },
|
|
new MySqlParameter("?isshowtimetext", MySqlDbType.Int32) { Value = from["isshowtimetext"].Toint32(0) },
|
|
new MySqlParameter("?aotupop", MySqlDbType.Int32) { Value = from["aotupop"] },
|
|
new MySqlParameter("?Giftbagcustoms", MySqlDbType.Int32) { Value = from["Giftbagcustoms"] },
|
|
new MySqlParameter("?data", MySqlDbType.Blob) { Value = dataByte },
|
|
new MySqlParameter("?noticeId", MySqlDbType.Int32) { Value = from["noticeId"] },
|
|
new MySqlParameter("?noticeType", MySqlDbType.Int32) { Value = from["noticeType"] },
|
|
new MySqlParameter("?jumpParam", MySqlDbType.Int32) { Value = from["jumpParam"].Toint32(0) },
|
|
new MySqlParameter("?customRealmStr", MySqlDbType.VarChar) { Value = from["customRealmStr"] },
|
|
new MySqlParameter("?timeParamStr", MySqlDbType.VarChar) { Value = from["timeParamStr"] },
|
|
new MySqlParameter("?areaNameList", MySqlDbType.VarChar) { Value = from["areaNameList"] },
|
|
new MySqlParameter("?pageType", MySqlDbType.Int32) { Value = from["pageType"].Toint32(0) },
|
|
new MySqlParameter("?seq", MySqlDbType.Int32) { Value = from["seq"].Toint32(0) },
|
|
}.ToArray();
|
|
|
|
|
|
if (from["id"].Toint32(0) != 0)
|
|
{
|
|
string editSql =
|
|
$"UPDATE notice SET state=?state,startTime=?startTime,endTime=?endTime,title=?title,content=?content,icon=?icon,pic=?pic,jump=?jump,jumpParam=?jumpParam,popUp=?popUp,sort=?sort,link=?link ,realmlist=?realmlist,triggertype=?triggertype,openserverstartday=?startTimeDay,openserverstarttime=?startTimefine,openserverendday=?endTimeDay,openserverendtime=?endTimefine,dungeonid=?dungeonid,updatetime=NOW(),Intervaldays=?Intervaldays,isshowtimetext=?isshowtimetext,aotupop=?aotupop,giftbagcustoms=?Giftbagcustoms,data=?data,noticeId=?noticeId,customRealmStr=?customRealmStr,timeParamStr=?timeParamStr,areaNameList=?areaNameList,noticeType=?noticeType,pageType=?pageType,seq=?seq WHERE id=?id;";
|
|
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
//新增
|
|
else
|
|
{
|
|
string editSql =
|
|
$"INSERT INTO notice (state,startTime,endTime,title,content,icon,pic,language,jump,popUp,sort,link,realmlist,triggertype,openserverstartday,openserverstarttime,openserverendday,openserverendtime,dungeonid,updatetime,Intervaldays,isshowtimetext,aotupop,giftbagcustoms,data,noticeId,jumpParam,customRealmStr,timeParamStr,areaNameList,noticeType,pageType,seq) VALUES (?state,?startTime,?endTime,?title,?content,?icon,?pic,?language,?jump,?popUp,?sort,?link,?realmlist,?triggertype,?startTimeDay,?startTimefine,?endTimeDay,?endTimefine,?dungeonid,NOW(),?Intervaldays,?isshowtimetext,?aotupop,?Giftbagcustoms,?data,?noticeId,?jumpParam,?customRealmStr,?timeParamStr,?areaNameList,?noticeType,?pageType,?seq);";
|
|
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "操作成功";
|
|
|
|
return;
|
|
}
|
|
|
|
public override void DBSelectUserName(string account, string user, string pageno, JsonData jsonData)
|
|
{
|
|
string Sqlfoundaccount = (user == "")
|
|
? string.Format(
|
|
"select account, jurisdiction, valid, lastLoginTime, createTime from account order by account")
|
|
: string.Format(
|
|
"select account, jurisdiction, valid, lastLoginTime, createTime from account where account = \"{0}\"",
|
|
user);
|
|
|
|
MySqlDataReader reader = db.ExecReader(Sqlfoundaccount);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectUserName 连接数据库异常");
|
|
jsonData["ret"] = 6;
|
|
jsonData["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
JsonData data = new JsonData();
|
|
jsonData["data"] = data;
|
|
data.Add("");
|
|
data.Clear();
|
|
|
|
int pageNo = (pageno == "") ? 0 : int.Parse(pageno);
|
|
int i = 0;
|
|
|
|
while (reader.Read())
|
|
{
|
|
//if (pageNo * 10 <= i && i < (pageNo + 1) * 10)
|
|
{
|
|
JsonData rdata = new JsonData();
|
|
|
|
rdata["account"] = reader.GetString("account");
|
|
rdata["jurisdiction"] = reader.GetString("jurisdiction");
|
|
rdata["valid"] = reader.GetString("valid");
|
|
rdata["lastLoginTime"] = reader.GetString("lastLoginTime");
|
|
rdata["createTime"] = reader.GetString("createTime");
|
|
|
|
data.Add(rdata);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
jsonData["ret"] = 0;
|
|
jsonData["msg"] = "success";
|
|
|
|
return;
|
|
}
|
|
|
|
public override int DBUpdateUserName(string account, string user, string pass, string newPass,
|
|
string jurisdiction, JsonData jsondata)
|
|
{
|
|
string sqlStr = string.Format("select * from account where account='{0}' and password= '{1}'", user, pass);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateUserName sqlStr {0}", sqlStr);
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateUserName 数据库连接失败");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
if (reader.HasRows == false)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateUserName 用户不存在或密码错误");
|
|
jsondata["ret"] = 4;
|
|
jsondata["msg"] = "用户不存在或密码错误";
|
|
reader.Close();
|
|
return 4;
|
|
}
|
|
|
|
if (user == null || user == "" || pass == "")
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateUserName 用户名和密码不能为空");
|
|
jsondata["ret"] = 4;
|
|
jsondata["msg"] = "用户名和密码不能为空!";
|
|
reader.Close();
|
|
return 4;
|
|
}
|
|
|
|
if (newPass == "" || newPass == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBUpdateUserName 用户名和密码不能为空");
|
|
jsondata["ret"] = 4;
|
|
jsondata["msg"] = "用户名和密码不能为空!";
|
|
reader.Close();
|
|
return 4;
|
|
}
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?account", MySqlDbType.VarChar) { Value = user },
|
|
new MySqlParameter("?password", MySqlDbType.VarChar) { Value = newPass },
|
|
new MySqlParameter("?jurisdiction", MySqlDbType.VarChar) { Value = jurisdiction },
|
|
|
|
}.ToArray();
|
|
|
|
try
|
|
{
|
|
string editSql =
|
|
$"UPDATE account SET password=?password, jurisdiction=?jurisdiction WHERE account=?account;";
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBUpdateUsername: 更新写入数据库错误。");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DBDeleteUserName(string account, string user, JsonData jsondata)
|
|
{
|
|
string Sqlfoundaccount = string.Format("select account, jurisdiction from account");
|
|
MySqlDataReader reader = db.ExecReader(Sqlfoundaccount);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDeleteUserName 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
JsonData msgdata = new JsonData();
|
|
jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
|
|
while (reader.Read())
|
|
{
|
|
JsonData one = new JsonData();
|
|
|
|
one.Add(reader.GetString("account"));
|
|
//one.Add(reader.GetString("jurisdiction"));
|
|
msgdata.Add(one);
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
if (user != null)
|
|
{
|
|
string selectSql = string.Format("select * from account where account='{0}'", user);
|
|
reader = db.ExecReader(selectSql);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDeleteUserName 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
if (reader.HasRows == false)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDeleteUserName 账户不存在");
|
|
jsondata["ret"] = 0;
|
|
jsondata["msg"] = "账户不存在";
|
|
reader.Close();
|
|
return 0;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
string deleteSql = string.Format("delete from account where account='{0}'", user);
|
|
reader = db.ExecReader(deleteSql);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDeleteUserName 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
reader = db.ExecReader(selectSql);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBDeleteUserName 连接数据库异常");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
if (reader.HasRows == false)
|
|
{
|
|
jsondata["ret"] = 3;
|
|
jsondata["msg"] = "删除成功";
|
|
}
|
|
|
|
reader.Close();
|
|
return 0;
|
|
}
|
|
|
|
jsondata["ret"] = 3;
|
|
jsondata["msg"] = "删除成功";
|
|
|
|
return 3;
|
|
}
|
|
|
|
public override int DBRecalledEmail(string uuid, string sid, string table, JsonData Jsondata)
|
|
{
|
|
int id = sid == "" ? 0 : int.Parse(sid);
|
|
if (table == "")
|
|
{
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "撤回失败";
|
|
return 6;
|
|
}
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBRecalledEmail uuid:{0} id:{1}", uuid, id);
|
|
|
|
string strSql;
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(uuid))
|
|
{
|
|
strSql = string.Format("update {0} set status={1} where uuid='{2}'", table, (int)MailStatus.ReCall,
|
|
uuid);
|
|
}
|
|
else if (id > 0)
|
|
{
|
|
strSql = string.Format("update {0} set status={1} where Id={2}", table, (int)MailStatus.ReCall, id);
|
|
}
|
|
else
|
|
{
|
|
Jsondata["ret"] = 2;
|
|
Jsondata["msg"] = "uuid/id 参数错误!";
|
|
return 2;
|
|
}
|
|
|
|
//将撤回状态写入数据库
|
|
TraceLog.Trace("MySqlDBOperator.DBRecalledEmail sql is {0}", strSql);
|
|
MySqlDataReader reader = db.ExecReader(strSql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBRecalledEmail no record in account table, return reader is null!");
|
|
Jsondata["ret"] = 4;
|
|
Jsondata["msg"] = "数据库操作失败!";
|
|
return 4;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
// 从op邮件cache中删除邮件, 防止邮件被重复修改错误
|
|
//List<long> removeKeyList = new List<long>();
|
|
//var data = OperationServerUtils.GetMailDBData();
|
|
//foreach (var item in data.mailTable)
|
|
//{
|
|
// if(item.Value.ruleMail.Mail.Uuid.GetString() == uuid)
|
|
// {
|
|
// removeKeyList.Add(item.Key);
|
|
// }
|
|
//}
|
|
//foreach (long key in removeKeyList)
|
|
//{
|
|
// data.mailTable.Remove(key);
|
|
//}
|
|
|
|
// 将撤回邮件信息发送给邮件服务器
|
|
SSDiscardMailWithRuleReq req = new SSDiscardMailWithRuleReq();
|
|
req.Uuid.SetString(uuid);
|
|
req.MailID = id;
|
|
OperationServerUtils.SendToWorld((int)SSGameMsgID.DiscardMailWithRuleReq, ref req, 0, 0, "");
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "操作成功";
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DBAddUserName(string account, string token, string user, string pass, string jurisdiction,
|
|
JsonData jsondata)
|
|
{
|
|
string strSql = string.Format("select * from account where account='{0}'", user);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName sql is {0}", strSql);
|
|
|
|
MySqlDataReader reader = db.ExecReader(strSql);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName 数据库连接失败");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
if (reader.HasRows == true)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName 用户已存在,请重新创建");
|
|
jsondata["ret"] = 4;
|
|
jsondata["msg"] = "用户已存在,请重新创建!";
|
|
reader.Close();
|
|
return 4;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
MySqlParameter createTime = new MySqlParameter("?createTime", MySqlDbType.DateTime)
|
|
{ Value = DateTime.Now };
|
|
string sqlInsert =
|
|
string.Format(
|
|
"insert into account set account= '{0}', name='{1}', password='{2}', jurisdiction='{3}', createTime=?createTime",
|
|
user, user, pass, jurisdiction);
|
|
MySqlDataReader readerInsert = db.ExecReader(sqlInsert, createTime);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName sqlInsert is {0}", sqlInsert);
|
|
|
|
if (readerInsert == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName 数据库连接失败");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
jsondata["ret"] = 3;
|
|
jsondata["msg"] = "创建成功!";
|
|
|
|
readerInsert.Close();
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName Success");
|
|
return 0;
|
|
}
|
|
|
|
public override void DBSelectPlayerOp(int pageSize, int pageIndex, int type, string opUser, JsonData jsonData)
|
|
{
|
|
int count = 0;
|
|
|
|
jsonData["pageSize"] = pageSize;
|
|
jsonData["pageIndex"] = pageIndex;
|
|
jsonData["ret"] = 0;
|
|
|
|
string sqlCount = "select count(id) as sum from player_op";
|
|
MySqlDataReader readerCount = db.ExecReader(sqlCount);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBAddUserName sql is {0}", sqlCount);
|
|
|
|
if (readerCount == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectPlayerOp 数据库连接失败");
|
|
jsonData["ret"] = 6;
|
|
jsonData["msg"] = "数据库连接失败";
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
while (readerCount.Read())
|
|
{
|
|
count = readerCount.GetInt32("sum");
|
|
break;
|
|
}
|
|
|
|
readerCount.Close();
|
|
}
|
|
|
|
jsonData["count"] = count;
|
|
|
|
string sql = $"select * from player_op where 1=1";
|
|
if (type != 0)
|
|
{
|
|
sql = sql + $" and type={type}";
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(opUser))
|
|
{
|
|
sql = sql + $" and opUser='{opUser}'";
|
|
}
|
|
|
|
sql = sql + $" limit {(pageIndex - 1) * pageSize}, {pageSize}";
|
|
MySqlDataReader reader = db.ExecReader(sql);
|
|
|
|
JsonData msgdata = new();
|
|
jsonData["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBSelectPlayerOp 数据库连接失败");
|
|
jsonData["ret"] = 6;
|
|
jsonData["msg"] = "数据库连接失败";
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
var tempData = new JsonData();
|
|
tempData["id"] = reader.GetUInt32("id");
|
|
tempData["uid"] = reader.GetInt32("uid");
|
|
tempData["uidList"] = reader.GetString("uidList");
|
|
tempData["type"] = reader.GetInt32("type");
|
|
tempData["uniqueId"] = reader.GetString("uniqueId");
|
|
tempData["opUser"] = reader.GetString("opUser");
|
|
tempData["opId"] = reader.GetInt32("opId");
|
|
tempData["opType"] = reader.GetInt32("opType");
|
|
tempData["opNum"] = reader.GetInt32("opNum");
|
|
tempData["createTime"] = reader.GetDateTime("createtime").ToString();
|
|
|
|
ExtPlayerOp ext = new ExtPlayerOp();
|
|
try
|
|
{
|
|
//请封装
|
|
int gameDataIndex = reader.GetOrdinal("exData");
|
|
if (!reader.IsDBNull(gameDataIndex))
|
|
{
|
|
//这个需要大一点
|
|
byte[] buffer = new byte[64 * 1024];
|
|
long gameDataLength = reader.GetBytes(gameDataIndex, 0, buffer, 0, buffer.Length);
|
|
byte[] gameDataByte = new byte[gameDataLength];
|
|
Buffer.BlockCopy(buffer, 0, gameDataByte, 0, (int)gameDataLength);
|
|
|
|
StructMessageParseUtils.ParseFrom(ref ext, gameDataByte);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (reader != null)
|
|
reader.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.DBSelectPlayerOp parse ExtPlayerOp error! error:{0}",
|
|
ex.Message);
|
|
jsonData["ret"] = 2;
|
|
jsonData["msg"] = "数据解析失败";
|
|
break;
|
|
}
|
|
|
|
if (ext.Havedata)
|
|
{
|
|
//tempData["paramInt"] = ext.ParamInt;
|
|
tempData["paramStr"] = ext.ParamStr.GetString();
|
|
}
|
|
|
|
msgdata.Add(tempData);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
}
|
|
|
|
public override int DBSelectNotice(int page, int pageCount, int popUp, string noticeId, JsonData Jsondata)
|
|
{
|
|
JsonData sysdata = new JsonData();
|
|
|
|
// 表格中的公告
|
|
Jsondata["sysdata"] = sysdata;
|
|
sysdata.Add("");
|
|
sysdata.Clear();
|
|
//SortedList<uint, SysNoticeDesc> descList = SysNoticeDescMgr.Instance.ItemTable;
|
|
//if (popUp == 0)
|
|
//{
|
|
// foreach (var item in descList)
|
|
// {
|
|
// JsonData linedataSys = new JsonData();
|
|
|
|
// linedataSys["noticeId"] = item.Key;
|
|
// linedataSys["state"] = item.Value.state;
|
|
// linedataSys["startTime"] = item.Value.startTime;
|
|
// linedataSys["endTime"] = item.Value.endTime;
|
|
// linedataSys["title"] = item.Value.title;
|
|
// linedataSys["content"] = item.Value.content;
|
|
// linedataSys["icon"] = item.Value.icon;
|
|
// linedataSys["pic"] = item.Value.pic;
|
|
// linedataSys["jump"] = item.Value.jump;
|
|
// linedataSys["popUp"] = item.Value.popUp;
|
|
// linedataSys["link"] = item.Value.link;
|
|
// linedataSys["language"] = item.Value.language;
|
|
// linedataSys["triggertype"] = item.Value.triggertype;
|
|
// linedataSys["jumpParam"] = item.Value.jumpParam;
|
|
// linedataSys["pageType"] = item.Value.pageType;
|
|
|
|
// if (item.Value.realmlists.Contains(0))
|
|
// {
|
|
// linedataSys["realmlist"] = "0";
|
|
// }
|
|
// else
|
|
// {
|
|
// linedataSys["realmlist"] = string.Join(',', item.Value.realmlists);
|
|
// }
|
|
|
|
// linedataSys["openserverstartday"] = item.Value.openserverstartday;
|
|
// linedataSys["openserverstarttime"] = item.Value.openserverstarttime;
|
|
// linedataSys["openserverendday"] = item.Value.openserverendday;
|
|
// linedataSys["openserverendtime"] = item.Value.openserverendtime;
|
|
// linedataSys["valid"] = OperationServerUtils.CheckTime(DateTime.Parse(item.Value.startTime),
|
|
// DateTime.Parse(item.Value.endTime));
|
|
// sysdata.Add(linedataSys);
|
|
// }
|
|
|
|
// pageCount = pageCount - descList.Count;
|
|
//}
|
|
|
|
//if (page > 0)
|
|
//{
|
|
// page = page - 1;
|
|
//}
|
|
|
|
// 查询总数
|
|
string countSqlStr = $"SELECT count(distinct noticeId) as num from notice where popUp={popUp}";
|
|
MySqlDataReader countReader = db.ExecReader(countSqlStr);
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNotice sql is {0}", countSqlStr);
|
|
|
|
if (countReader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNotice 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
int count = 0;
|
|
while (countReader.Read())
|
|
{
|
|
count = countReader.GetInt32("num");
|
|
break;
|
|
}
|
|
|
|
//if (popUp == 0)
|
|
//{
|
|
// count += descList.Count;
|
|
//}
|
|
|
|
Jsondata["count"] = count;
|
|
countReader.Close();
|
|
|
|
int skip = (page -1) * pageCount;
|
|
string sqlStr = "SELECT * from notice ";
|
|
|
|
if (!string.IsNullOrEmpty(noticeId))
|
|
{
|
|
sqlStr += " WHERE noticeId = " + noticeId + ";";
|
|
}
|
|
else
|
|
{
|
|
sqlStr += $"WHERE popUp = {popUp} ORDER BY noticeId DESC limit {skip},{pageCount};";
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNotice sqlStr {0}", sqlStr);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNotice 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
JsonData msgdata = new JsonData();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
|
|
JsonData contentList = null;
|
|
int noId = 0;
|
|
|
|
while (reader.Read())
|
|
{
|
|
JsonData textParamList = new JsonData();
|
|
textParamList.Add("");
|
|
textParamList.Clear();
|
|
JsonData areaNameList = new JsonData();
|
|
areaNameList.Add("");
|
|
areaNameList.Clear();
|
|
|
|
if (noId != reader.GetInt32("noticeId") || noId == 0)
|
|
{
|
|
noId = reader.GetInt32("noticeId");
|
|
JsonData linedata1 = new JsonData();
|
|
|
|
contentList = new JsonData();
|
|
contentList.Add("");
|
|
contentList.Clear();
|
|
linedata1["contentList"] = contentList;
|
|
linedata1["state"] = reader.GetInt32("state");
|
|
linedata1["startTime"] = reader.GetDateTime("startTime").ToString("yyyy-MM-dd HH:mm:ss");
|
|
linedata1["endTime"] = reader.GetDateTime("endTime").ToString("yyyy-MM-dd HH:mm:ss");
|
|
linedata1["link"] = reader.GetString("link");
|
|
linedata1["jump"] = reader.GetInt32("jump");
|
|
linedata1["sort"] = reader.GetInt32("sort");
|
|
linedata1["popUp"] = reader.GetInt32("popUp");
|
|
linedata1["triggertype"] = reader.GetInt32("triggertype");
|
|
linedata1["noticeId"] = reader.GetInt32("noticeId");
|
|
linedata1["realmlist"] = reader.GetString("realmlist");
|
|
linedata1["openserverstartday"] = reader.GetInt32("openserverstartday");
|
|
linedata1["openserverstarttime"] = reader.GetString("openserverstarttime");
|
|
linedata1["openserverendday"] = reader.GetInt32("openserverendday");
|
|
linedata1["openserverendtime"] = reader.GetString("openserverendtime");
|
|
linedata1["intervaldays"] = reader.GetString("Intervaldays");
|
|
linedata1["timetext"] = reader.GetInt32("isshowtimetext");
|
|
linedata1["dungeonid"] = reader.GetInt32("dungeonid");
|
|
linedata1["aotupop"] = reader.GetInt32("aotupop");
|
|
linedata1["giftbagcustoms"] = reader.GetInt32("giftbagcustoms");
|
|
linedata1["jumpParam"] = reader.GetInt32("jumpParam");
|
|
linedata1["type"] = reader.GetInt32("noticeType");
|
|
linedata1["valid"] = OperationServerUtils.CheckTime(reader.GetDateTime("startTime"),
|
|
reader.GetDateTime("endTime"));
|
|
linedata1["customRealmStr"] = reader.GetString("customRealmStr");
|
|
linedata1["timeParamStr"] = reader.GetString("timeParamStr");
|
|
linedata1["pageType"] = reader.GetInt32("pageType");
|
|
|
|
linedata1["areaNameList"] = areaNameList;
|
|
string areaNameListStr = reader.GetString("areaNameList");
|
|
if (areaNameListStr.Contains("|"))
|
|
{
|
|
foreach (var item in areaNameListStr.Split("|"))
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(item))
|
|
areaNameList.Add(item);
|
|
}
|
|
}
|
|
|
|
ExtNotice ext = new ExtNotice();
|
|
//请封装
|
|
int gameDataIndex = reader.GetOrdinal("data");
|
|
if (!reader.IsDBNull(gameDataIndex))
|
|
{
|
|
byte[] buffer = new byte[2 * 1024];
|
|
long gameDataLength = reader.GetBytes(gameDataIndex, 0, buffer, 0, buffer.Length);
|
|
byte[] gameDataByte = new byte[gameDataLength];
|
|
Buffer.BlockCopy(buffer, 0, gameDataByte, 0, (int)gameDataLength);
|
|
|
|
StructMessageParseUtils.ParseFrom(ref ext, gameDataByte);
|
|
}
|
|
|
|
linedata1["popType"] = ext.Type;
|
|
linedata1["textParamList"] = textParamList;
|
|
|
|
for (int i = 0; i < ext.TextParams.Count; i++)
|
|
{
|
|
string str = ext.TextParams[i].GetString();
|
|
textParamList.Add(str);
|
|
}
|
|
|
|
msgdata.Add(linedata1);
|
|
}
|
|
|
|
// 多语言部分contentList
|
|
JsonData Listdata = new JsonData();
|
|
Listdata["id"] = reader.GetInt32("id");
|
|
Listdata["title"] = reader.GetString("title");
|
|
Listdata["content"] = reader.GetString("content");
|
|
Listdata["icon"] = reader.GetString("icon");
|
|
Listdata["pic"] = reader.GetString("pic");
|
|
Listdata["language"] = reader.GetString("language");
|
|
|
|
if (contentList != null)
|
|
{
|
|
contentList.Add(Listdata);
|
|
}
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
Jsondata["ret"] = 0;
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNotice success");
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DBShowNoticeDayNotice(string noticeId, JsonData Jsondata)
|
|
{
|
|
string sqlStr = "SELECT * from notice ";
|
|
if (!String.IsNullOrEmpty(noticeId))
|
|
{
|
|
sqlStr += " WHERE noticeId = " + noticeId;
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
TraceLog.Trace("MySqlDBOperator.DBShowNoticeDayNotice sqlStr {0}", sqlStr);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBShowNoticeDayNotice 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
JsonData month = new JsonData();
|
|
Jsondata["month"] = month;
|
|
month.Add("");
|
|
month.Clear();
|
|
month.Add(DateTime.Now.ToString("yyyy-MM-dd"));
|
|
month.Add(DateTime.Now.AddMonths(1).ToString("yyyy-MM-dd"));
|
|
|
|
JsonData msgdata = new JsonData();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
|
|
JsonData realmjosn = new JsonData();
|
|
Jsondata["realm"] = realmjosn;
|
|
realmjosn.Add("");
|
|
realmjosn.Clear();
|
|
|
|
while (reader.Read())
|
|
{
|
|
var openserverstartday = reader.GetInt32("openserverstartday");
|
|
var openserverstarttime = reader.GetString("openserverstarttime");
|
|
var openserverendday = reader.GetInt32("openserverendday");
|
|
var openserverendtime = reader.GetString("openserverendtime");
|
|
var Intervaldays = reader.GetInt32("Intervaldays");
|
|
var _realmlist = reader.GetString("realmlist");
|
|
var Realm = OperationServerUtils.GetOperationServerData().m_allRealm.Values.ToList();
|
|
|
|
//不是全服
|
|
if (!(_realmlist == "0" || _realmlist == ""))
|
|
{
|
|
var realmlist = _realmlist.Split(',').Select(s => int.Parse(s)).ToList();
|
|
Realm = Realm.FindAll(f => realmlist.Exists(e => e == f.realmId));
|
|
}
|
|
|
|
// openTime staTime 两个时间轮着走
|
|
foreach (var r in Realm)
|
|
{
|
|
var openTime = OperationServerUtils.StampToDateTime(r.openTime);
|
|
var openTimestr = openTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
if (openTime.Hour < 5)
|
|
{
|
|
openTime = openTime.AddDays(-1);
|
|
}
|
|
|
|
openTime = new DateTime(openTime.Year, openTime.Month, openTime.Day, 5, 0, 0);
|
|
|
|
//开服推迟显示时间
|
|
OperationServerUtils.AddTimes(ref openTime, openserverstartday, openserverstarttime);
|
|
|
|
realmjosn.Add(
|
|
$"{r.realmName} 开服时间: {openTimestr} <br/> 持续时间{openserverendday}:{openserverendtime} 间隔天数{Intervaldays}");
|
|
JsonData realm = new JsonData();
|
|
|
|
var thisTime = DateTime.Now;
|
|
|
|
for (int i = 0; i < 30; i++)
|
|
{
|
|
var strsta = openTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
//持续天数
|
|
OperationServerUtils.AddTimes(ref openTime, openserverendday, openserverendtime);
|
|
|
|
var strend = openTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
var timesta = "";
|
|
|
|
//未开始
|
|
if (thisTime < DateTime.Parse(strsta))
|
|
{
|
|
timesta = "#";
|
|
}
|
|
//已结束
|
|
else if (thisTime > DateTime.Parse(strend))
|
|
{
|
|
timesta = "##";
|
|
}
|
|
//正在进行中
|
|
else
|
|
{
|
|
timesta = "###";
|
|
}
|
|
|
|
realm.Add($" {strsta} -> {strend} {timesta}");
|
|
|
|
if (Intervaldays == 0 && i == 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
//间隔天数
|
|
openTime = openTime.AddDays(Intervaldays);
|
|
}
|
|
|
|
msgdata.Add(realm);
|
|
}
|
|
|
|
reader.Close();
|
|
TraceLog.Trace("MySqlDBOperator.DBShowNoticeDayNotice success");
|
|
|
|
return 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DBSelectNoticeLamp(string id, JsonData Jsondata)
|
|
{
|
|
string sqlStr = "SELECT * from noticelamp ";
|
|
|
|
if (!String.IsNullOrEmpty(id))
|
|
{
|
|
sqlStr += " WHERE id = " + id;
|
|
}
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNoticeLamp sqlStr {0}", sqlStr);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNoticeLamp 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return 6;
|
|
}
|
|
|
|
JsonData msgdata = new JsonData();
|
|
Jsondata["code"] = 0;
|
|
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
int count = 0;
|
|
while (reader.Read())
|
|
{
|
|
//id content cycleTimeType triggerTime showInterval showCount realms
|
|
JsonData linedata1 = new JsonData();
|
|
linedata1["id"] = reader.GetString("id");
|
|
linedata1["content"] = reader.GetString("content");
|
|
linedata1["cycleTimeType"] = reader.GetString("cycleTimeType");
|
|
linedata1["triggerTime"] = reader.GetString("triggerTime");
|
|
linedata1["showInterval"] = reader.GetString("showInterval");
|
|
linedata1["showCount"] = reader.GetString("showCount");
|
|
linedata1["realms"] = reader.GetString("realms");
|
|
msgdata.Add(linedata1);
|
|
count++;
|
|
}
|
|
|
|
Jsondata["count"] = count;
|
|
|
|
reader.Close();
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectNoticeLamp success");
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DBSendNoticeLamp(string strTriggerTime, string content, int showCount, int cycleTimeType,
|
|
int showInterval, string Realmliststr, JsonData Jsondata)
|
|
{
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?TriggerTime", MySqlDbType.VarChar) { Value = strTriggerTime },
|
|
new MySqlParameter("?showCount", MySqlDbType.Int32) { Value = showCount },
|
|
new MySqlParameter("?cycleTimeType", MySqlDbType.Int32) { Value = cycleTimeType },
|
|
new MySqlParameter("?showInterval", MySqlDbType.Int32) { Value = showInterval },
|
|
new MySqlParameter("?content", MySqlDbType.VarChar) { Value = content },
|
|
new MySqlParameter("?realms", MySqlDbType.VarChar) { Value = Realmliststr }
|
|
}.ToArray();
|
|
|
|
string editSql =
|
|
$"INSERT INTO noticelamp(content,cycleTimeType,triggerTime,showInterval,showCount,realms) VALUES(?content,?cycleTimeType,?TriggerTime,?showInterval,?showCount,?realms);";
|
|
|
|
db.ExecNonQuery(editSql, MySqlParameters);
|
|
|
|
Jsondata["ret"] = 0;
|
|
Jsondata["msg"] = "succ";
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override string DBCheckJurisdiction(string account, JsonData Jsondata)
|
|
{
|
|
string sql = string.Format("select jurisdiction from account where valid = \'1\' and account=?account");
|
|
|
|
MySqlParameter p_account = new MySqlParameter("?account", MySqlDbType.VarChar, 200) { Value = account };
|
|
MySqlDataReader reader = db.ExecReader(sql, p_account);
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckJurisdiction sql {0}", sql);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckJurisdiction 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "数据库操作失败";
|
|
return "";
|
|
}
|
|
|
|
if (reader.HasRows == false)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckJurisdiction 账号不存在");
|
|
Jsondata["ret"] = 3;
|
|
Jsondata["msg"] = "无效的用户名或密码";
|
|
reader.Close();
|
|
return "";
|
|
}
|
|
|
|
bool ret = reader.Read();
|
|
|
|
string jurisdiction = reader.GetString("jurisdiction");
|
|
|
|
reader.Close();
|
|
|
|
if (jurisdiction == "")
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckJurisdiction 当前用户没有权限");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "当前用户没有权限";
|
|
}
|
|
|
|
return jurisdiction;
|
|
}
|
|
|
|
public override bool DBCheckEmailExist(JsonData Jsondata, MailJsonObj mailContent)
|
|
{
|
|
string sql = string.Format("select * from mail_box order by Id desc limit 0,1");
|
|
MySqlDataReader last = db.ExecReader(sql);
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckEmailExist sql {0}", sql);
|
|
|
|
if (last == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckEmailExist:数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "数据库操作失败";
|
|
return false;
|
|
}
|
|
|
|
string lastUuid = "";
|
|
bool reter = last.Read();
|
|
if (reter)
|
|
{
|
|
lastUuid = last.GetString("uuid");
|
|
}
|
|
|
|
last.Close();
|
|
|
|
if (lastUuid == mailContent.uuid)
|
|
{
|
|
Jsondata["ret"] = 4;
|
|
Jsondata["msg"] = "发送重复";
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
public override bool DBCheckEmailTempExist(JsonData Jsondata, MailJsonObj mailContent)
|
|
{
|
|
string sql = string.Format("select * from mail_box_temp order by Id desc limit 0,1");
|
|
MySqlDataReader last = db.ExecReader(sql);
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckEmailExist sql {0}", sql);
|
|
|
|
if (last == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBCheckEmailExist:数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "数据库操作失败";
|
|
return false;
|
|
}
|
|
|
|
string lastUuid = "";
|
|
bool reter = last.Read();
|
|
if (reter)
|
|
{
|
|
lastUuid = last.GetString("uuid");
|
|
}
|
|
|
|
last.Close();
|
|
|
|
if (lastUuid == mailContent.uuid)
|
|
{
|
|
Jsondata["ret"] = 4;
|
|
Jsondata["msg"] = "发送重复";
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
public override int DBInsertIntoMailBoxTemp(string _name, string title11, string content11, string realmlist11,
|
|
string herolist11, string language, string uuid, string curstr11, string itemstr11,
|
|
string timeLimit11, int isSendToAll, string equipStr, byte[] dataByte, string customItemStr)
|
|
{
|
|
return InsertMailBoxTemp(_name, title11, content11, realmlist11,
|
|
herolist11, language, uuid, curstr11, itemstr11,
|
|
timeLimit11, isSendToAll, equipStr, dataByte, customItemStr, 0);
|
|
}
|
|
|
|
public override int DBInsertIntoMailBoxTempReview(string _name, string title11, string content11,
|
|
string realmlist11,
|
|
string herolist11, string language, string uuid, string curstr11, string itemstr11,
|
|
string timeLimit11, int isSendToAll, string equipStr, byte[] dataByte, string customItemStr)
|
|
{
|
|
return InsertMailBoxTemp(_name, title11, content11, realmlist11,
|
|
herolist11, language, uuid, curstr11, itemstr11,
|
|
timeLimit11, isSendToAll, equipStr, dataByte, customItemStr, -1);
|
|
}
|
|
|
|
private int InsertMailBoxTemp(string _name, string title11, string content11, string realmlist11,
|
|
string herolist11, string language, string uuid, string curstr11, string itemstr11,
|
|
string timeLimit11, int isSendToAll, string equipStr, byte[] dataByte, string customItemStr, int status)
|
|
{
|
|
string[] startEndTime = timeLimit11.Split("#");
|
|
string startTime = startEndTime[0]; //开始时间
|
|
string endTime = startEndTime[1]; //结束时间
|
|
|
|
string sql =
|
|
$"insert into mail_box_temp set dater=?dater,datee=?datee,name=?name,title=?title,content=?content,realmlist=?realmlist,herolist=?herolist,data=?data,equipStr='{equipStr}',language='{language}',uuid='{uuid}',curstr='{curstr11}',itemstr='{itemstr11}',timeLimit=0,status='{status}', isSendToAll={isSendToAll},customItemStr='{customItemStr}'";
|
|
|
|
MySqlParameter p_dater = new MySqlParameter("?dater", MySqlDbType.DateTime)
|
|
{ Value = DateTime.Parse(startTime) }; //开始时间
|
|
MySqlParameter p_datee = new MySqlParameter("?datee", MySqlDbType.DateTime)
|
|
{ Value = DateTime.Parse(endTime) }; //结束时间
|
|
|
|
MySqlParameter p_name = new MySqlParameter("?name", MySqlDbType.VarChar, 100) { Value = _name };
|
|
MySqlParameter p_title = new MySqlParameter("?title", MySqlDbType.VarChar, 100) { Value = title11 };
|
|
MySqlParameter p_content = new MySqlParameter("?content", MySqlDbType.VarChar, 1000) { Value = content11 };
|
|
MySqlParameter p_realmlist = new MySqlParameter("?realmlist", MySqlDbType.VarChar, 1000) { Value = "" };
|
|
MySqlParameter p_herolist = new MySqlParameter("?herolist", MySqlDbType.VarChar, 1000)
|
|
{ Value = herolist11 };
|
|
MySqlParameter p_data = new MySqlParameter("?data", MySqlDbType.Blob) { Value = dataByte };
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBInsertIntoMailBoxTemp insert sql {0}", sql);
|
|
|
|
MySqlDataReader readr = db.ExecReader(sql, p_dater, p_datee, p_name, p_title, p_content, p_realmlist,
|
|
p_herolist, p_data);
|
|
|
|
if (readr == null)
|
|
return 6;
|
|
|
|
readr.Close();
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBInsertIntoMailBox success");
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override int DBInsertIntoMailBox(string _name, string title11, string content11, string realmlist11,
|
|
string herolist11, string language, string uuid, string curstr11, string itemstr11,
|
|
string timeLimit11, int isSendToAll, string equipStr, byte[] dataByte, string customItemStr)
|
|
{
|
|
return MailDBUtils.DBInsertIntoMailBox(db, _name, title11, content11, realmlist11,
|
|
herolist11, language, uuid, curstr11, itemstr11,
|
|
timeLimit11, isSendToAll, equipStr, dataByte, customItemStr);
|
|
}
|
|
|
|
public override void DBSelectEmail(string startDate, string endDate, int page, int pageCount, JsonData Jsondata)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail startDate {0} ,endDate {1}, page {2}, pageCount {3}",
|
|
startDate, endDate, page, pageCount);
|
|
|
|
string countSqlStr =
|
|
string.Format("select count(Id) as num from mail_box where(dater >= '{0}' and dater <= '{1}') ",
|
|
startDate, endDate);
|
|
MySqlDataReader countReader = db.ExecReader(countSqlStr);
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail sql {0}", countSqlStr);
|
|
|
|
if (countReader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
int count = 0;
|
|
while (countReader.Read())
|
|
{
|
|
count = countReader.GetInt32("num");
|
|
break;
|
|
}
|
|
|
|
countReader.Close();
|
|
|
|
string countTempSqlStr =
|
|
string.Format(
|
|
"select count(Id) as num from mail_box_temp where(dater >= '{0}' and status=0 and dater <= '{1}') ",
|
|
startDate, endDate);
|
|
MySqlDataReader countTempReader = db.ExecReader(countTempSqlStr);
|
|
if (countTempReader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
while (countTempReader.Read())
|
|
{
|
|
count += countTempReader.GetInt32("num");
|
|
break;
|
|
}
|
|
|
|
countTempReader.Close();
|
|
|
|
Jsondata["count"] = count;
|
|
|
|
|
|
if (page > 0)
|
|
{
|
|
page = page - 1;
|
|
}
|
|
|
|
int skip = page * pageCount;
|
|
string sqlStr =
|
|
string.Format(
|
|
"select * from mail_box where(dater >= '{0}' and dater <= '{1}') ORDER BY dater DESC limit {2}, {3} ",
|
|
startDate, endDate, skip, pageCount);
|
|
string sqlTempStr =
|
|
string.Format(
|
|
"select * from mail_box_temp where(dater >= '{0}' and dater <= '{1}' and status=0) ORDER BY dater DESC limit {2}, {3} ",
|
|
startDate, endDate, skip, pageCount);
|
|
|
|
MySqlDataReader reader = db.ExecReader(sqlStr);
|
|
|
|
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail sqlStr {0}", sqlStr);
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail sqlStrTemp {0}", sqlTempStr);
|
|
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
Jsondata["ret"] = 0;
|
|
JsonData msgdata = new();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
try
|
|
{
|
|
if (reader.HasRows)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
var _data = formatMail(reader);
|
|
_data["is_sync"] = 1;
|
|
msgdata.Add(_data);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (reader != null)
|
|
reader.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.DBSelectEmail parse ExtMail error {0} ", ex.Message);
|
|
TraceLog.Exception(ex);
|
|
return;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
MySqlDataReader readerTemp = db.ExecReader(sqlTempStr);
|
|
|
|
if (readerTemp == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
if (readerTemp.HasRows)
|
|
{
|
|
while (readerTemp.Read())
|
|
{
|
|
var _data = formatMail(readerTemp);
|
|
_data["is_sync"] = 0;
|
|
msgdata.Add(_data);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (readerTemp != null)
|
|
readerTemp.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.DBSelectEmail template parse ExtMail error {0} ", ex.Message);
|
|
TraceLog.Exception(ex);
|
|
return;
|
|
}
|
|
|
|
readerTemp.Close();
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail template success");
|
|
|
|
return;
|
|
}
|
|
|
|
public override int DBReviewEmail(string uuid, string id, int status, JsonData payload)
|
|
{
|
|
string sql = " update mail_box_temp set status=?status where uuid=?uuid and Id=?id";
|
|
var ages = new List<MySqlParameter>
|
|
{
|
|
new MySqlParameter("?status", MySqlDbType.Int32) { Value = status },
|
|
new MySqlParameter("?id", MySqlDbType.Int32) { Value = id },
|
|
new MySqlParameter("?uuid", MySqlDbType.String) { Value = uuid },
|
|
}.ToArray();
|
|
var reader = db.ExecReader(sql, ages);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
payload["ret"] = 6;
|
|
payload["msg"] = "error";
|
|
return -1;
|
|
}
|
|
|
|
payload["ret"] = 0;
|
|
payload["msg"] = "successful";
|
|
reader.Close();
|
|
return 0;
|
|
}
|
|
|
|
public override int DBDeleteRefuseMail(string uuid, string id, JsonData payload)
|
|
{
|
|
|
|
string sql = "delete from mail_box_temp where uuid=?uuid and Id=?Id";
|
|
var args = new List<MySqlParameter>
|
|
{
|
|
new MySqlParameter("?Id", MySqlDbType.Int32) { Value = int.Parse(id) },
|
|
new MySqlParameter("?uuid", MySqlDbType.String) { Value = uuid },
|
|
}.ToArray();
|
|
var reader = db.ExecReader(sql, args);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
payload["ret"] = 6;
|
|
payload["msg"] = "error";
|
|
return -1;
|
|
}
|
|
|
|
payload["ret"] = 0;
|
|
payload["msg"] = "successful";
|
|
reader.Close();
|
|
return 0;
|
|
}
|
|
|
|
public override void DBSelectReviewEmail(string startDate, string endDate, int page, int pageCount,
|
|
JsonData Jsondata)
|
|
{
|
|
|
|
Jsondata["ret"] = 0;
|
|
JsonData msgdata = new();
|
|
Jsondata["data"] = msgdata;
|
|
msgdata.Add("");
|
|
msgdata.Clear();
|
|
string countTempSqlStr =
|
|
string.Format(
|
|
"select count(Id) as num from mail_box_temp where (status =-1 or status =-2) and (dater >= '{0}' and dater <= '{1}') ",
|
|
startDate, endDate);
|
|
MySqlDataReader countTempReader = db.ExecReader(countTempSqlStr);
|
|
if (countTempReader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
var count = 0;
|
|
while (countTempReader.Read())
|
|
{
|
|
count = countTempReader.GetInt32("num");
|
|
break;
|
|
}
|
|
|
|
countTempReader.Close();
|
|
Jsondata["count"] = count;
|
|
if (page > 0)
|
|
{
|
|
page = page - 1;
|
|
}
|
|
|
|
int skip = page * pageCount;
|
|
string sql =
|
|
string.Format(
|
|
"select * from mail_box_temp where (status =-1 or status =-2) and (dater >= '{0}' and dater <= '{1}') ORDER BY dater DESC limit {2}, {3} ",
|
|
startDate, endDate, skip, pageCount);
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail sqlStrTemp {0}", sql);
|
|
|
|
MySqlDataReader readerTemp = db.ExecReader(sql);
|
|
if (readerTemp == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
Jsondata["ret"] = 6;
|
|
Jsondata["msg"] = "error";
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
if (readerTemp.HasRows)
|
|
{
|
|
while (readerTemp.Read())
|
|
{
|
|
var _data = formatMail(readerTemp);
|
|
msgdata.Add(_data);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (readerTemp != null)
|
|
readerTemp.Close();
|
|
|
|
TraceLog.Error("MySqlDBOperator.DBSelectEmail template parse ExtMail error {0} ", ex.Message);
|
|
TraceLog.Exception(ex);
|
|
return;
|
|
}
|
|
|
|
readerTemp.Close();
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
private JsonData formatMail(MySqlDataReader reader)
|
|
{
|
|
var _data = new JsonData();
|
|
var dater = reader.GetDateTime("dater");
|
|
_data["dateStr"] = dater.ToString("yyyy-MM-dd HH:mm:ss");
|
|
int datee = reader.GetOrdinal("datee");
|
|
_data["timeLimit"] = reader.GetInt32("timeLimit");
|
|
if (!reader.IsDBNull(datee))
|
|
{
|
|
_data["endTimeStr"] = reader.GetString("datee");
|
|
}
|
|
else
|
|
{
|
|
string Dt = dater.AddMinutes((int)_data["timeLimit"]).ToString("yyyy-MM-dd HH:mm:ss");
|
|
_data["endTimeStr"] = Dt;
|
|
}
|
|
|
|
_data["name"] = reader.GetString("name");
|
|
_data["title"] = reader.GetString("title");
|
|
_data["content"] = reader.GetString("content");
|
|
_data["itemstr"] = reader.GetString("itemstr");
|
|
_data["curstr"] = reader.GetString("curstr");
|
|
_data["equipStr"] = reader.GetString("equipStr");
|
|
_data["herolist"] = reader.GetString("herolist");
|
|
_data["customItemStr"] = reader.GetString("customItemStr");
|
|
_data["status"] = reader.GetInt32("status");
|
|
_data["language"] = reader.GetString("language");
|
|
_data["uuid"] = reader.GetString("uuid");
|
|
_data["id"] = reader.GetInt32("Id");
|
|
|
|
|
|
ExtMail ext = new ExtMail();
|
|
|
|
//请封装
|
|
int gameDataIndex = reader.GetOrdinal("data");
|
|
if (!reader.IsDBNull(gameDataIndex))
|
|
{
|
|
//这个需要大一点
|
|
byte[] buffer = new byte[64 * 1024];
|
|
long gameDataLength = reader.GetBytes(gameDataIndex, 0, buffer, 0, buffer.Length);
|
|
byte[] gameDataByte = new byte[gameDataLength];
|
|
Buffer.BlockCopy(buffer, 0, gameDataByte, 0, (int)gameDataLength);
|
|
|
|
StructMessageParseUtils.ParseFrom(ref ext, gameDataByte);
|
|
}
|
|
|
|
JsonData langContentList = new JsonData();
|
|
langContentList.Add("");
|
|
langContentList.Clear();
|
|
_data["contentList"] = langContentList;
|
|
|
|
if (ext.Havedata)
|
|
{
|
|
for (int i = 0; i < ext.LangContentList.Count; i++)
|
|
{
|
|
var lang = new JsonData();
|
|
lang["title"] = ext.LangContentList[i].Title.GetString();
|
|
lang["content"] = ext.LangContentList[i].Content.GetString();
|
|
lang["language"] = ext.LangContentList[i].Language.GetString();
|
|
lang["senderName"] = ext.LangContentList[i].SenderName.GetString();
|
|
langContentList.Add(lang);
|
|
|
|
if (ext.LangContentList[i].Language.GetString() == "jp" &&
|
|
string.IsNullOrEmpty(_data["title"].ToString()))
|
|
{
|
|
_data["title"] = ext.LangContentList[i].Title.GetString();
|
|
_data["content"] = ext.LangContentList[i].Content.GetString();
|
|
}
|
|
}
|
|
|
|
_data["versionParam"] = ext.VersionParam.GetString();
|
|
_data["playerCreateTime"] = ext.PlayerCreateTimeLimit;
|
|
_data["realmlist"] = ext.RealmStr.GetString();
|
|
_data["timeParamStr"] = ext.TimeParamStr.GetString();
|
|
}
|
|
|
|
return _data;
|
|
|
|
}
|
|
|
|
public override bool DBInsertPlayerOp(long uid, int type, string opUser, int opId, int opType, int opNum,
|
|
string uniqueId, int paramInt, string paramStr, JsonData jsonData)
|
|
{
|
|
MySqlDataReader readerinsert = null;
|
|
|
|
try
|
|
{
|
|
ExtPlayerOp extData = new ExtPlayerOp();
|
|
extData.Havedata = false;
|
|
|
|
if (paramInt != 0 || !string.IsNullOrEmpty(paramStr))
|
|
{
|
|
extData.Havedata = true;
|
|
extData.ParamStr.SetString(paramStr);
|
|
//extData.ParamInt = paramInt;
|
|
}
|
|
|
|
byte[] dataByte = StructMessageParseUtils.ToByteArray(ref extData);
|
|
|
|
MySqlParameter p_data = new MySqlParameter("?extData", MySqlDbType.Blob) { Value = dataByte };
|
|
MySqlParameter p_datetime = new MySqlParameter("?createtime", MySqlDbType.DateTime)
|
|
{ Value = DateTime.Now };
|
|
|
|
string sql = string.Format(
|
|
"insert into player_op set uid= {0}, uidList='{1}', type={2}, opUser='{3}',opId={4},opType={5},opNum={6},uniqueId='{7}',createtime=?createtime, exData=?extData",
|
|
uid, "", type, opUser, opId, opType, opNum, uniqueId);
|
|
|
|
readerinsert = db.ExecReader(sql, p_datetime, p_data);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBInsertPlayerOp error:{0}", ex.Message);
|
|
|
|
if (readerinsert != null)
|
|
readerinsert.Close();
|
|
|
|
return false;
|
|
}
|
|
|
|
if (readerinsert == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBInsertPlayerOp 数据库插入失败");
|
|
jsonData["ret"] = 6;
|
|
jsonData["msg"] = "数据库插入失败";
|
|
return false;
|
|
}
|
|
|
|
readerinsert.Close();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
public override int DbInsertItemCost(JsonData jsonData, int itemId, float cn, float kr, float jp, float en)
|
|
{
|
|
string selectSql = "select * from item_cost where itemId=" + itemId;
|
|
MySqlDataReader readr = db.ExecReader(selectSql);
|
|
if (readr == null)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DBInsertPlayerOp 数据库插入失败");
|
|
jsonData["ret"] = 6;
|
|
jsonData["msg"] = "数据库插入失败";
|
|
return -1;
|
|
}
|
|
|
|
bool exist = readr.HasRows;
|
|
|
|
readr.Close();
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?itemId", MySqlDbType.Int32) { Value = itemId },
|
|
new MySqlParameter("?cn", MySqlDbType.Float) { Value = cn },
|
|
new MySqlParameter("?kr", MySqlDbType.Float) { Value = kr },
|
|
new MySqlParameter("?jp", MySqlDbType.Float) { Value = jp },
|
|
new MySqlParameter("?en", MySqlDbType.Float) { Value = jp },
|
|
}.ToArray();
|
|
if (exist)
|
|
{
|
|
string updateSql = "update item_cost set cn=?cn,kr=?kr,jp=?jp,en=?en where itemId=?itemId;";
|
|
try
|
|
{
|
|
MySqlDataReader upReadr = db.ExecReader(updateSql, MySqlParameters);
|
|
if (upReadr != null)
|
|
{
|
|
upReadr.Close();
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DbInsertItemCost sql {0} failed", updateSql);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
string sql = "insert into item_cost set itemId=?itemId,cn=?cn,kr=?kr,jp=?jp,en=?en;";
|
|
try
|
|
{
|
|
MySqlDataReader InsetrReadr = db.ExecReader(sql, MySqlParameters);
|
|
if (InsetrReadr != null)
|
|
{
|
|
InsetrReadr.Close();
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DbInsertItemCost sql {0} failed", sql);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DbSelectItemCostAll(JsonData jsondata)
|
|
{
|
|
|
|
string sql = $"select * from item_cost";
|
|
MySqlDataReader reader = db.ExecReader(sql);
|
|
TraceLog.Trace("MySqlDBOperator.DbSelectItemCost sql {0}", sql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return -1;
|
|
}
|
|
|
|
JsonData datas = new JsonData();
|
|
while ((reader.Read()))
|
|
{
|
|
JsonData data = new JsonData();
|
|
data["kr"] = reader.GetDouble("kr");
|
|
data["cn"] = reader.GetDouble("cn");
|
|
data["jp"] = reader.GetDouble("jp");
|
|
data["en"] = reader.GetDouble("en");
|
|
data["itemId"] = reader.GetInt32("itemId");
|
|
string nameKey = string.Format("item{0}", reader.GetInt32("itemId"));
|
|
var lang = LanguageDescMgr.Instance.GetConfig(nameKey);
|
|
if (lang != null)
|
|
{
|
|
string name = lang.ZH;
|
|
data["name"] = name;
|
|
}
|
|
else
|
|
{
|
|
data["name"] = nameKey;
|
|
}
|
|
|
|
datas.Add(data);
|
|
}
|
|
|
|
jsondata["data"] = datas;
|
|
reader.Close();
|
|
return 0;
|
|
}
|
|
|
|
public override int DbDeleteItemCost(JsonData jsondata, int itemId)
|
|
{
|
|
string sql = $"delete from item_cost where itemId='{itemId}'";
|
|
|
|
MySqlDataReader reader = db.ExecReader(sql);
|
|
TraceLog.Trace("MySqlDBOperator.DbDeleteItemCost sql {0}", sql);
|
|
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return -1;
|
|
}
|
|
|
|
reader.Close();
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
public override int DbInsertPayment(JsonData builder, string admin, string owner, string realm, string dep,
|
|
int uid, string itemId, int num)
|
|
{
|
|
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?itemId", MySqlDbType.String) { Value = itemId },
|
|
new MySqlParameter("?uid", MySqlDbType.Int64) { Value = uid },
|
|
new MySqlParameter("?num", MySqlDbType.Int32) { Value = num },
|
|
new MySqlParameter("?owner", MySqlDbType.String) { Value = owner },
|
|
new MySqlParameter("?admin", MySqlDbType.String) { Value = admin },
|
|
new MySqlParameter("?realm", MySqlDbType.String) { Value = realm },
|
|
new MySqlParameter("?dep", MySqlDbType.String) { Value = dep },
|
|
}.ToArray();
|
|
string sql =
|
|
"insert into welfare_payment set itemId=?itemId,uid=?uid,num=?num,admin=?admin,dep=?dep,realm=?realm,owner=?owner;";
|
|
try
|
|
{
|
|
MySqlDataReader InsetrReadr = db.ExecReader(sql, MySqlParameters);
|
|
if (InsetrReadr != null)
|
|
{
|
|
InsetrReadr.Close();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.DbInsertPayment sql {0} failed,e={1}", sql, e.Message);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int DbSelectPaymentAll(JsonData jsondata, RepeatedFixedStructString128_10 param)
|
|
{
|
|
string sql = "select * from welfare_payment ";
|
|
string where = "";
|
|
var u = param.Get(0).ToString();
|
|
|
|
String or = "";
|
|
string w = "";
|
|
if (!String.IsNullOrEmpty(u))
|
|
{
|
|
where = " uid=" + int.Parse(u);
|
|
or = " or ";
|
|
w = " where ";
|
|
}
|
|
|
|
var name = param.Get(1).ToString();
|
|
|
|
if (!String.IsNullOrEmpty(name))
|
|
{
|
|
where += or + "owner='" + name + "'";
|
|
or = " or ";
|
|
w = " where ";
|
|
}
|
|
|
|
sql += w + where;
|
|
MySqlDataReader reader = db.ExecReader(sql);
|
|
TraceLog.Trace("MySqlDBOperator.DbSelectItemCost sql {0}", sql);
|
|
if (reader == null)
|
|
{
|
|
TraceLog.Trace("MySqlDBOperator.DBSelectEmail 数据库连接失败");
|
|
jsondata["ret"] = 6;
|
|
jsondata["msg"] = "error";
|
|
return -1;
|
|
}
|
|
|
|
JsonData datas = new JsonData();
|
|
while ((reader.Read()))
|
|
{
|
|
JsonData data = new JsonData();
|
|
data["admin"] = reader.GetString("admin");
|
|
data["num"] = reader.GetInt32("num");
|
|
data["uid"] = reader.GetInt64("uid");
|
|
string itemIds = reader.GetString("itemId");
|
|
data["owner"] = reader.GetString("owner");
|
|
data["dep"] = reader.GetString("dep");
|
|
data["realm"] = reader.GetString("realm");
|
|
data["itemId"] = itemIds;
|
|
string[] ids = itemIds.Split(",");
|
|
string names = "";
|
|
foreach (string id in ids)
|
|
{
|
|
var desc = PayDiamondDescMgr.Instance.GetConfig(int.Parse(id));
|
|
string nameKey = desc?.itemName ?? "";
|
|
var lang = LanguageDescMgr.Instance.GetConfig(nameKey);
|
|
if (lang != null)
|
|
{
|
|
names = names + "\r\r" + lang.ZH;
|
|
}
|
|
else
|
|
{
|
|
names = names + "\r\r" + nameKey;
|
|
}
|
|
}
|
|
|
|
data["name"] = names;
|
|
datas.Add(data);
|
|
}
|
|
|
|
jsondata["data"] = datas;
|
|
reader.Close();
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
public override int InsertOperationLog(string account, string method, string url, byte[] data)
|
|
{
|
|
|
|
var MySqlParameters = new List<MySqlParameter>()
|
|
{
|
|
new MySqlParameter("?account", MySqlDbType.String) { Value = account },
|
|
new MySqlParameter("?method", MySqlDbType.String) { Value = method },
|
|
new MySqlParameter("?url", MySqlDbType.String) { Value = url },
|
|
new MySqlParameter("?data", MySqlDbType.MediumBlob) { Value = data },
|
|
new MySqlParameter("?ctime", MySqlDbType.DateTime) { Value = DateTime.Now },
|
|
}.ToArray();
|
|
string sql =
|
|
"insert into operation_log set account=?account,method=?method,url=?url,data=?data,ctime=?ctime;";
|
|
try
|
|
{
|
|
MySqlDataReader InsetrReadr = db.ExecReader(sql, MySqlParameters);
|
|
if (InsetrReadr != null)
|
|
{
|
|
InsetrReadr.Close();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.InsertOperationLog sql {0} failed,e={1}", sql, e.Message);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override int SelectOperationLog(JsonData payload, int pageIndex, int pageSize, string account,
|
|
string method, string url, string startStr, string endStr)
|
|
{
|
|
string sql = "select * from operation_log ";
|
|
string argsSql = "";
|
|
string and = "";
|
|
payload["count"] = 0;
|
|
|
|
var MySqlParameters = new List<MySqlParameter>();
|
|
if (account != "")
|
|
{
|
|
argsSql = " account=?account ";
|
|
and = "and";
|
|
MySqlParameters.Add(new MySqlParameter("?account", MySqlDbType.String) { Value = account });
|
|
}
|
|
|
|
if (method != "")
|
|
{
|
|
argsSql += and + " method=?method ";
|
|
and = "and";
|
|
MySqlParameters.Add(new MySqlParameter("?method", MySqlDbType.String) { Value = method });
|
|
}
|
|
|
|
if (url != "")
|
|
{
|
|
argsSql += and + " url=?url ";
|
|
and = "and";
|
|
MySqlParameters.Add(new MySqlParameter("?url", MySqlDbType.String) { Value = url });
|
|
}
|
|
|
|
DateTime start = default;
|
|
DateTime end = default;
|
|
if (startStr != "" && endStr != "")
|
|
{
|
|
start = DateTime.ParseExact(startStr, "yyyy-MM-dd HH:mm:ss",
|
|
CultureInfo.InvariantCulture);
|
|
end = DateTime.ParseExact(endStr, "yyyy-MM-dd HH:mm:ss",
|
|
CultureInfo.InvariantCulture);
|
|
argsSql += and +
|
|
$" ctime between '{start.ToString("yyyy-MM-dd HH:mm:ss")}' and '{end.ToString("yyyy-MM-dd HH:mm:ss")}'";
|
|
}
|
|
|
|
string countSql = "select count(id) as num from operation_log";
|
|
if (!string.IsNullOrEmpty(argsSql))
|
|
{
|
|
countSql += " where " + argsSql;
|
|
}
|
|
var reader = db.ExecReader(countSql, MySqlParameters.ToArray());
|
|
var count = 0;
|
|
while (reader.Read())
|
|
{
|
|
count = reader.GetInt32("num");
|
|
payload["count"] = count;
|
|
break;
|
|
}
|
|
|
|
reader.Close();
|
|
if (!string.IsNullOrEmpty(argsSql))
|
|
{
|
|
sql +="where "+argsSql;
|
|
}
|
|
|
|
if (count < pageSize || count < (pageIndex * pageSize))
|
|
{
|
|
pageIndex = 1;
|
|
}
|
|
|
|
sql += $" order by ctime desc limit {(pageIndex - 1) * pageSize}, {pageSize}";
|
|
JsonData list = new JsonData();
|
|
try
|
|
{
|
|
reader = db.ExecReader(sql, MySqlParameters.ToArray());
|
|
int BuffLengthMax = 500 * 1024;
|
|
|
|
if (reader.HasRows)
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
int id = reader.GetInt32("id");
|
|
string _account = reader.GetString("account");
|
|
string _method = reader.GetString("method");
|
|
string _url = reader.GetString("url");
|
|
int dataIndex = reader.GetOrdinal("data");
|
|
var ctime = reader.GetDateTime("ctime");
|
|
SSHttpApiDbReq record = new SSHttpApiDbReq();
|
|
byte[] buffer = new byte[BuffLengthMax];
|
|
long dataLen = reader.GetBytes(dataIndex, 0, buffer, 0, buffer.Length);
|
|
byte[] data = new byte[dataLen];
|
|
Buffer.BlockCopy(buffer, 0, data, 0, (int)dataLen);
|
|
data = ZipUtils.DecompressBytes(data);
|
|
StructMessageParseUtils.ParseFrom(ref record, data);
|
|
string dataStr = record.Data.ToString();
|
|
JsonData json = new JsonData();
|
|
var name = Resolver.GetUrlName(_url);
|
|
|
|
json["url"] = _url;
|
|
json["name"] = name;
|
|
json["account"] = _account;
|
|
json["method"] = _method;
|
|
json["id"] = id;
|
|
json["ctime"] = ctime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
json["data"] = dataStr;
|
|
list.Add(json);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
if (reader != null)
|
|
{
|
|
reader.Close();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
payload["data"] = list;
|
|
payload["ret"] = 0;
|
|
payload["pageSize"] = pageSize;
|
|
payload["pageIndex"] = pageIndex;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
public override int InsertPreset(int id, string account, string realms, string items, string start, string end)
|
|
{
|
|
|
|
bool exist = false;
|
|
if (id > 0)
|
|
{
|
|
string selectSql = "select * from player_preset where id=" + id;
|
|
MySqlDataReader selectReader = null;
|
|
try
|
|
{
|
|
selectReader = db.ExecReader(selectSql);
|
|
if (selectReader == null)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
exist = selectReader.HasRows;
|
|
selectReader.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("dbOperator.InsertPreset error sql={0},info={1}", selectSql, e.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (selectReader != null)
|
|
{
|
|
selectReader.Close();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (exist)
|
|
{
|
|
var updateParams = new List<MySqlParameter>()
|
|
{
|
|
new("?account", MySqlDbType.String) { Value = account },
|
|
new("?realms", MySqlDbType.String) { Value = realms },
|
|
new("?items", MySqlDbType.String) { Value = items },
|
|
new("?start_time", MySqlDbType.String) { Value = start },
|
|
new("?end_time", MySqlDbType.String) { Value = end },
|
|
}.ToArray();
|
|
var updateSql = "update player_preset set account=?account,realms=?realms,items=?items,start_time=?start_time,end_time=?end_time WHERE id=" + id;
|
|
try
|
|
{
|
|
MySqlDataReader updateReadr = db.ExecReader(updateSql, updateParams);
|
|
if (updateReadr != null)
|
|
{
|
|
updateReadr.Close();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.InsertOperationLog sql {0} failed,e={1}", updateSql, e.Message);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
var insertParams = new List<MySqlParameter>()
|
|
{
|
|
new("?account", MySqlDbType.String) { Value = account },
|
|
new("?realms", MySqlDbType.String) { Value = realms },
|
|
new("?items", MySqlDbType.String) { Value = items },
|
|
new("?start_time", MySqlDbType.String) { Value = start },
|
|
new("?end_time", MySqlDbType.String) { Value = end },
|
|
}.ToArray();
|
|
string sql =
|
|
"insert into player_preset set account=?account,realms=?realms,items=?items,start_time=?start_time,end_time=?end_time;";
|
|
MySqlDataReader insetrReadr = null;
|
|
try
|
|
{
|
|
insetrReadr = db.ExecReader(sql, insertParams);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.InsertOperationLog sql {0} failed,e={1}", sql, e.Message);
|
|
}
|
|
finally
|
|
{
|
|
insetrReadr?.Close();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override JsonData FindAllPreset(long Id)
|
|
{
|
|
|
|
string sql = "select * from player_preset";
|
|
if (Id > 0)
|
|
{
|
|
sql += " where id=" + Id;
|
|
}
|
|
MySqlDataReader reader = null;
|
|
JsonData data = new JsonData();
|
|
try
|
|
{
|
|
reader = db.ExecReader(sql);
|
|
if (reader == null)
|
|
{
|
|
return data;
|
|
}
|
|
long now = OperationServerUtils.GetApp().GetTimeSecond();
|
|
DateTime currentDate = DateTimeOffset.FromUnixTimeSeconds(now).LocalDateTime;
|
|
while (reader.Read())
|
|
{
|
|
long id = reader.GetInt64("id");
|
|
string account = reader.GetString("account");
|
|
string realms = reader.GetString("realms");
|
|
string items = reader.GetString("items");
|
|
string startTime = reader.GetString("start_time");
|
|
string endTime = reader.GetString("end_time");
|
|
string status = "生效中";
|
|
DateTime dateTimeEnd =
|
|
DateTime.ParseExact(endTime, AppTime.TIME_FORMAT_STYLE, CultureInfo.InvariantCulture);
|
|
DateTime dateTimeStart = DateTime.ParseExact(startTime, AppTime.TIME_FORMAT_STYLE,
|
|
CultureInfo.InvariantCulture);
|
|
if (AppTime.GetTimeSecond(currentDate) < AppTime.GetTimeSecond(dateTimeStart))
|
|
{
|
|
status = "等待中";
|
|
}
|
|
if (AppTime.GetTimeSecond(currentDate) > AppTime.GetTimeSecond(dateTimeEnd))
|
|
{
|
|
status = "已过期";
|
|
}
|
|
JsonData item = new JsonData();
|
|
item["id"] = id+"";
|
|
item["account"] = account;
|
|
item["realms"] = realms;
|
|
item["items"] = items;
|
|
item["start_time"] = startTime;
|
|
item["end_time"] = endTime;
|
|
item["status"] = status;
|
|
data.Add(item);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.SelectPreSet sql {0} failed,e={1}", sql, e.Message);
|
|
}
|
|
finally
|
|
{
|
|
reader?.Close();
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
|
|
public override PresetData OnGetPresetWithRule(int reqVersion)
|
|
{
|
|
long now = OperationServerUtils.GetApp().GetTimeSecond();
|
|
DateTime currentDate = DateTimeOffset.FromUnixTimeSeconds(now).LocalDateTime;
|
|
var currentVersion = PlayerPresetOp.Version;
|
|
PresetData presetData = new PresetData();
|
|
presetData.Req = currentVersion;
|
|
string sql = "select * from player_preset";
|
|
MySqlDataReader reader = null;
|
|
try
|
|
{
|
|
reader = db.ExecReader(sql);
|
|
if (reader == null)
|
|
{
|
|
return presetData;
|
|
}
|
|
|
|
while (reader.Read())
|
|
{
|
|
long id = reader.GetInt64("id");
|
|
string account = reader.GetString("account");
|
|
string realms = reader.GetString("realms");
|
|
string items = reader.GetString("items");
|
|
var itemsList = items.Split("#");
|
|
string startTime = reader.GetString("start_time");
|
|
//
|
|
string endTime = reader.GetString("end_time");
|
|
DateTime dateTimeEnd =
|
|
DateTime.ParseExact(endTime, AppTime.TIME_FORMAT_STYLE, CultureInfo.InvariantCulture);
|
|
DateTime dateTimeStart = DateTime.ParseExact(startTime, AppTime.TIME_FORMAT_STYLE,
|
|
CultureInfo.InvariantCulture);
|
|
if (AppTime.GetTimeSecond(dateTimeEnd) < AppTime.GetTimeSecond(currentDate))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var preset = new PresetDataOne();
|
|
foreach (var item in itemsList)
|
|
{
|
|
var temp = item.Split("|");
|
|
TypeIDValue32 tpv = new()
|
|
{
|
|
Type = int.Parse(temp[0]),
|
|
Id = int.Parse(temp[1]),
|
|
Value = int.Parse(temp[2])
|
|
};
|
|
preset.Items.Add(tpv);
|
|
}
|
|
|
|
var realmList = realms.Split(",");
|
|
foreach (var ls in realmList)
|
|
{
|
|
if (!string.IsNullOrEmpty(ls))
|
|
{
|
|
preset.ReamIds.Add(long.Parse(ls));
|
|
}
|
|
}
|
|
|
|
preset.Id = id;
|
|
preset.Start_time = AppTime.GetTimeSecond(dateTimeStart);
|
|
preset.End_time = AppTime.GetTimeSecond(dateTimeEnd);
|
|
presetData.Data.Add(preset);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
TraceLog.Error("MySqlDBOperator.SelectPreSet sql {0} failed,e={1}", sql, e.Message);
|
|
}
|
|
finally
|
|
{
|
|
reader?.Close();
|
|
}
|
|
|
|
return presetData;
|
|
}
|
|
|
|
public override int DeletePreSet(long id)
|
|
{
|
|
string sql = "delete from player_preset where id =" + id;
|
|
MySqlDataReader reader = null;
|
|
try
|
|
{
|
|
reader = db.ExecReader(sql);
|
|
if (reader == null)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{ TraceLog.Error("MySqlDBOperator.DeletePreSet sql {0} failed,e={1}", sql, e.Message);
|
|
}
|
|
finally
|
|
{
|
|
reader?.Close();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|