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 admins = new List(); 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() { 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() { 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() { 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 DBSelectPlayOpData(long uid, long currentMaxId) { List retList = new List(); 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() { 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() { 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() { 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() { 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() { 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 from, byte[] dataByte, JsonData Jsondata) { TraceLog.Debug("MySqlDBOperator.DBUpdateNotice: fromCount:{0}", from.Count); var MySqlParameters = new List() { 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() { 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 removeKeyList = new List(); //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 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}
持续时间{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() { 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 { 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 { 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() { 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() { 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() { 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(); 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() { 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() { 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; } } }