//public string GenerateIdiom() //{ // Dictionary<string, string> dic = new Dictionary<string, string> // { // { "5beghawgsagsaga7eb855e3e94", "66hhh" }, // { "5bebec2a2hgbhghhhhhhhh855e3e94", "6gggggh" } // }; // Definition def = new Definition { Text = "hahaha", Addition = "666", IsBold = false, Source = "hhh", Links = dic }; // Definition def2 = new Definition { Text = "haa", Addition = "345sgsdgsdgc6", IsBold = false, Source = "hhh", Links = dic }; // List<Definition> defs = new List<Definition> // { // def, // def2 // }; // _idioms.InsertOne(new Idiom { Name = "TEST", Definitions = defs, LastEditor = "fssssss", UpdateTimeUT = 666666, Index = 'C' }); // return "Done!"; //} //public string GenerateLaunchInf() //{ // Dictionary<string, string> i = new Dictionary<string, string> { { "aaaaaaaa", "6ggggh" }, // { "5bshedfhdfh4", "6gadfadah" }}; // _launchInf.InsertOne(new LaunchInf { Text = "23333", DailyIdiom = null, /*DailyIdiomName = "6666",*/ ThemeColor = null, LogoUrl = null, DisableAds = false, /*FloatEasterEggs = i, */DateUT = DateTimeOffset.MinValue.ToUnixTimeSeconds() }); // return "Done!"; //} #endregion //这里生成每日成语。 public void GenLI() { DateTimeOffset dateUT = DateTimeOffset.Now; int hour = dateUT.Hour; int min = dateUT.Minute; int sec = dateUT.Second; long dateL = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds(); //默认的每日成语。 Idiom deftIdiom = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault().DailyIdiom; LaunchInf inf = _launchInf.Find(x => x.DateUT == dateL).FirstOrDefault(); //从数据库里随机抽取一条成语。 Idiom idi = _idioms.Aggregate().AppendStage <Idiom>("{$sample:{size:1}}").FirstOrDefault(); //当idi不为null才运行。 if (idi != null) { if (inf == null) { //这种情况说明当天的inf还没有生成。 if (deftIdiom == null) { //若默认成语为空,则生成每日成语。 LaunchInf ins = new LaunchInf { Version = null, ArgsDic = null, Text = null, ThemeColor = null, LogoUrl = null, DisableAds = false, DailyIdiom = idi, IdiomsCount = 0, DateUT = dateL }; _launchInf.InsertOne(ins); } else { //不为空则将默认成语写入当天的启动信息,方便以后查询记录。 LaunchInf ins = new LaunchInf { Version = null, ArgsDic = null, Text = null, ThemeColor = null, LogoUrl = null, DisableAds = false, DailyIdiom = deftIdiom, IdiomsCount = 0, DateUT = dateL }; _launchInf.InsertOne(ins); } } else { //这种情况说明当天的inf已经提前编辑好了,根据需要补全。 if (inf.DailyIdiom == null) { if (deftIdiom == null) { //若默认成语为空,则生成每日成语。 UpdateDefinition <LaunchInf> upd = Builders <LaunchInf> .Update.Set("DailyIdiom", idi); _launchInf.UpdateOne(x => x.DateUT == dateL, upd); } else { //不为空则将默认成语写入当天的启动信息,方便以后查询记录。 UpdateDefinition <LaunchInf> upd = Builders <LaunchInf> .Update.Set("DailyIdiom", deftIdiom); _launchInf.UpdateOne(x => x.DateUT == dateL, upd); } } } } }
public LaunchInf MergeLI(LaunchInf current, LaunchInf deft, bool proed) { if (current == null) { current = new LaunchInf { Version = null, ArgsDic = null, Text = null, ThemeColor = null, LogoUrl = null, DisableAds = false, DailyIdiom = null, IdiomsCount = 0, DateUT = 0 }; } //将当前启动信息与默认启动信息合并并返回。 current.Version = version.ToString(); current.ArgsDic = deft.ArgsDic; if (current.IdiomsCount == 0 && deft.IdiomsCount == 0) { current.IdiomsCount = _idioms.CountDocuments(new BsonDocument()); } else if (current.IdiomsCount == 0) { current.IdiomsCount = deft.IdiomsCount; } if (current.Text == null) { current.Text = deft.Text; } if (current.ThemeColor == null) { current.ThemeColor = deft.ThemeColor; } if (current.LogoUrl == null) { current.LogoUrl = deft.LogoUrl; } if (current.DisableAds == false) { current.DisableAds = deft.DisableAds; } if (current.DailyIdiom == null) { current.DailyIdiom = deft.DailyIdiom; } if (Config.ProtectionEnabled && proed) { Idiom raw = current.DailyIdiom; List <Definition> defs = raw.Definitions; List <Definition> modified = new List <Definition>(); foreach (Definition def in defs) { def.Source = "网络"; modified.Add(def); } raw.Definitions = modified; current.DailyIdiom = raw; } return(current); }
public LaunchInf GetLaunchInf(long date, string openId) { bool proed = false; LaunchInf deft = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault(); LaunchInf current = _launchInf.Find(x => x.DateUT == date).FirstOrDefault(); if (_editors.Find(x => x.OpenId == openId).FirstOrDefault() == null) { proed = true; } return(MergeLI(current, deft, proed)); }
public string UpdateIdiom(ObjectId id, UpdateData data) { Editor editor = _editors.Find(x => x.OpenId == data.OpenId).FirstOrDefault(); List <DefinitionUpdate> updates = data.Updates; if (editor != null && !editor.IsLimited) { if (data.BsonMode) { try { BsonDocument doc = BsonDocument.Parse(data.BsonStr.Replace("?", "?"));//不应允许有英文问号出现,不然小程序解析Json时会抛异常。 Idiom idi = BsonSerializer.Deserialize <Idiom>(doc); if (Regex.IsMatch(idi.Name, "^[\u4e00-\u9fa5]+(,[\u4e00-\u9fa5]+)?$")) { idi.LastEditor = editor.NickName; idi.UpdateTimeUT = DateTimeOffset.Now.ToUnixTimeSeconds(); if (_idioms.FindOneAndReplace(x => x.Id == id, idi) == null) { return("无法进行更新操作!"); } //更新启动信息中的每日成语。 DateTimeOffset dateUT = DateTimeOffset.Now; int hour = dateUT.Hour; int min = dateUT.Minute; int sec = dateUT.Second; long dateL = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds(); LaunchInf deft = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault(); LaunchInf today = _launchInf.Find(x => x.DateUT == dateL).FirstOrDefault(); if (deft != null && deft.DailyIdiom != null && deft.DailyIdiom.Id == idi.Id) { LaunchInf upd = deft; upd.DailyIdiom = idi; _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd); } if (today != null && today.DailyIdiom != null && today.DailyIdiom.Id == idi.Id) { LaunchInf upd = today; upd.DailyIdiom = idi; _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd); } //更新编辑者编辑次数。 var filter = Builders <Editor> .Filter.Eq("_id", editor.Id); var update = Builders <Editor> .Update.Inc("EditCount", 1); _editors.UpdateOne(filter, update); return("成语已更新!"); } } catch (Exception) { return("无法进行更新操作!"); } } else if (updates != null && updates.Count > 0) { try { List <Definition> defs = _idioms.Find(x => x.Id == id).FirstOrDefault().Definitions; for (int i = 0; i < updates.Count; i++) { if (updates[i].Source != null && updates[i].Text != null && updates[i].Source != "" && updates[i].Text != "" && defs.Count > 0) { if (i < defs.Count) { defs[i].Source = updates[i].Source.Replace("?", "?"); defs[i].Text = updates[i].Text.Replace("?", "?"); } else { defs.Add(new Definition { Source = updates[i].Source, Text = updates[i].Text, Examples = null, Addition = null, IsBold = false, Links = null }); } } else { return("无法进行更新操作!"); } } var filter = Builders <Idiom> .Filter.Eq("_id", id); var update = Builders <Idiom> .Update.Set("Definitions", defs).Set("LastEditor", editor.NickName).Set("UpdateTimeUT", DateTimeOffset.Now.ToUnixTimeSeconds()); _idioms.UpdateOne(filter, update); //更新启动信息中的每日成语。 DateTimeOffset dateUT = DateTimeOffset.Now; int hour = dateUT.Hour; int min = dateUT.Minute; int sec = dateUT.Second; long dateL = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds(); LaunchInf deft = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault(); LaunchInf today = _launchInf.Find(x => x.DateUT == dateL).FirstOrDefault(); Idiom idi = _idioms.Find(x => x.Id == id).FirstOrDefault(); if (deft != null && deft.DailyIdiom != null && deft.DailyIdiom.Id == id) { LaunchInf upd = deft; upd.DailyIdiom = idi; _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd); } if (today != null && today.DailyIdiom != null && today.DailyIdiom.Id == idi.Id) { LaunchInf upd = today; upd.DailyIdiom = idi; _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd); } //更新编辑者编辑次数。 var filter2 = Builders <Editor> .Filter.Eq("_id", editor.Id); var update2 = Builders <Editor> .Update.Inc("EditCount", 1); _editors.UpdateOne(filter2, update2); return("释义已更新!"); } catch (Exception) { return("无法进行更新操作!"); } } } return("无法进行更新操作!"); }