/// <summary> /// 查询按钮 /// </summary> /// <param name="predicate"></param> /// <param name="cache"></param> /// <returns></returns> public static List <SysButton> QuerySysButtonList(Func <SysButton, bool> predicate, bool cache = true) { if (!cache || CacheTo.Get(GlobalCacheKey.SysButton) is not List <SysButton> list) { using var db = ContextBaseFactory.CreateDbContext(); list = db.SysButton.OrderBy(x => x.SbBtnOrder).ToList(); CacheTo.Set(GlobalCacheKey.SysButton, list, 300, false); } list = list.Where(predicate).ToList(); return(list); }
/// <summary> /// 查询菜单 /// </summary> /// <param name="predicate"></param> /// <param name="cache"></param> /// <returns></returns> public static List <SysMenu> QuerySysMenuList(Func <SysMenu, bool> predicate, bool cache = true) { if (!cache || !(Core.CacheTo.Get(GlobalCacheKey.SysMenu) is List <SysMenu> list)) { using var db = ContextBaseFactory.CreateDbContext(); list = db.SysMenu.OrderBy(x => x.SmOrder).ToList(); Core.CacheTo.Set(GlobalCacheKey.SysMenu, list, 300, false); } list = list.Where(predicate).ToList(); return(list); }
/// <summary> /// 查询角色信息 /// </summary> /// <param name="predicate"></param> /// <param name="cache"></param> /// <returns></returns> public static SysRole QuerySysRoleEntity(Func <SysRole, bool> predicate, bool cache = true) { if (!cache || CacheTo.Get(GlobalCacheKey.SysRole) is not List <SysRole> list) { using var db = ContextBaseFactory.CreateDbContext(); list = db.SysRole.ToList(); CacheTo.Set(GlobalCacheKey.SysRole, list, 300, false); } var mo = list.FirstOrDefault(predicate); return(mo); }
public DataMirrorService() { using var db = ContextBaseFactory.CreateDbContext(); Tsb = db.SysButton; Tsd = db.SysDictionary; Tsm = db.SysMenu; Tsr = db.SysRole; Tstc = db.SysTableConfig; Tsu = db.SysUser; Tte = db.TempExample; Ttid = db.TempInvoiceDetail; Ttim = db.TempInvoiceMain; }
/// <summary> /// 有新消息数量查询 /// </summary> /// <param name="UserId">用户ID</param> /// <returns></returns> public static int NewMessageQuery(int UserId) { if (SharedFast.GlobalTo.GetValue <bool>("ReadOnly")) { return(0); } var ck = $"mq_{UserId}"; var num = CacheTo.Get(ck) as int?; if (num == null) { using var db = ContextBaseFactory.CreateDbContext(); num = db.UserMessage.Where(x => x.Uid == UserId && x.UmStatus == 1).Count(); CacheTo.Set(ck, num, 10, false); } return(num.Value); }
public SharedResultVM HandleOperationRecord() { var vm = new SharedResultVM(); try { using var db = ContextBaseFactory.CreateDbContext(); //处理Guff查询记录数 var ctype = EnumService.ConnectionType.GuffRecord.ToString(); var listOr = db.OperationRecord.Where(x => x.OrType == ctype && x.OrMark == "default").ToList(); if (listOr.Count > 0) { var listAllId = string.Join(",", listOr.Select(x => x.OrSource).ToList()).Split(',').ToList(); var listid = listAllId.Distinct(); var listmo = db.GuffRecord.Where(x => listid.Contains(x.GrId)).ToList(); foreach (var item in listmo) { item.GrReadNum += listAllId.GroupBy(x => x).FirstOrDefault(x => x.Key == item.GrId).Count(); } db.GuffRecord.UpdateRange(listmo); db.OperationRecord.RemoveRange(listOr); int num = db.SaveChanges(); vm.Set(num > 0); vm.Data = "处理操作记录,受影响行数:" + num; } else { vm.Set(SharedEnum.RTag.lack); } } catch (Exception ex) { vm.Set(ex); } return(vm); }
/// <summary> /// 获取最新登录标记,用于对比本地,踢出下线 /// </summary> /// <param name="UserId">登录的UserId</param> /// <param name="Cache">优先取缓存</param> /// <returns></returns> public static string GetLogonSign(int UserId, bool Cache = true) { string result = string.Empty; var usk = "UserSign_" + UserId; var us = Core.CacheTo.Get(usk) as string; if (Cache && !string.IsNullOrEmpty(us)) { result = us; } else { using var db = ContextBaseFactory.CreateDbContext(); var uiMo = db.UserInfo.Find(UserId); if (uiMo != null) { result = uiMo.UserSign; Core.CacheTo.Set(usk, result, 5 * 60, false); } } return(result); }
/// <summary> /// 键值对 /// </summary> /// <param name="ListKeyName"></param> /// <returns></returns> public static List <KeyValues> KeyValuesQuery(List <string> ListKeyName) { using var db = ContextBaseFactory.CreateDbContext(); var listKv = db.KeyValues.Where(x => ListKeyName.Contains(x.KeyName)).ToList(); if (listKv.Count != ListKeyName.Count) { var hasK = listKv.Select(x => x.KeyName).ToList(); var noK = new List <string>(); foreach (var item in ListKeyName) { if (!hasK.Contains(item)) { noK.Add(item); } } if (noK.Count > 0) { var listKvs = db.KeyValueSynonym.Where(x => noK.Contains(x.KsName)).ToList(); if (listKvs.Count > 0) { var appendKey = listKvs.Select(x => x.KeyName).ToList(); var appendKv = db.KeyValues.Where(x => appendKey.Contains(x.KeyName)).ToList(); foreach (var item in appendKv) { var mc = listKvs.Where(x => x.KeyName == item.KeyName).FirstOrDefault(); if (mc != null) { item.KeyName = mc.KsName; } } listKv.AddRange(appendKv); } } } return(listKv); }
public void OnActionExecuting(ActionExecutingContext context) { bool isv = GlobalTo.GetValue <bool>("Common:MailValid"); if (!isv && context.HttpContext.User.Identity.IsAuthenticated) { var uinfo = new Application.UserAuthService(context.HttpContext).Get(); //已验证邮箱 using var db = ContextBaseFactory.CreateDbContext(); uinfo = db.UserInfo.Find(uinfo.UserId); if (uinfo.UserId == 1 || uinfo.UserMailValid == 1) { isv = true; } } if (!isv) { var url = "/home/valid"; context.Result = new RedirectResult(url); } }
/// <summary> /// 获取文章列表 /// </summary> /// <param name="KeyWords"></param> /// <param name="page"></param> /// <param name="TagName"></param> /// <returns></returns> public static SharedPageVM UserWritingQuery(string KeyWords, int page, string TagName = "") { var vm = new SharedPageVM(); KeyWords ??= ""; var pag = new SharedPaginationVM { PageNumber = Math.Max(page, 1), PageSize = 12 }; var dicQs = new Dictionary <string, string> { { "k", KeyWords } }; IQueryable <UserWriting> query; using var db = ContextBaseFactory.CreateDbContext(); if (!string.IsNullOrWhiteSpace(TagName)) { query = from a in db.UserWritingTags.Where(x => x.TagName == TagName) join b in db.UserWriting on a.UwId equals b.UwId select b; query = query.Distinct(); } else { query = from a in db.UserWriting select a; } query = query.Where(x => x.UwOpen == 1 && x.UwStatus == 1); if (!string.IsNullOrWhiteSpace(KeyWords)) { var kws = new JiebaSegmenter().Cut(KeyWords).ToList(); kws.Add(KeyWords); kws = kws.Distinct().ToList(); var inner = PredicateBuilder.New <UserWriting>(); switch (GlobalTo.TDB) { case SharedEnum.TypeDB.SQLite: kws.ForEach(k => inner.Or(x => EF.Functions.Like(x.UwTitle, $"%{k}%"))); break; case SharedEnum.TypeDB.PostgreSQL: kws.ForEach(k => inner.Or(x => EF.Functions.ILike(x.UwTitle, $"%{k}%"))); break; default: kws.ForEach(k => inner.Or(x => x.UwTitle.Contains(k))); break; } query = query.Where(inner); } pag.Total = query.Count(); query = query.OrderByDescending(x => x.UwId).Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize); var list = query.ToList(); //文章ID var listUwId = list.Select(x => x.UwId).ToList(); //文章的所有的标签 var queryTags = from a in db.UserWritingTags join b in db.Tags on a.TagName equals b.TagName where listUwId.Contains(a.UwId) || b.TagName == TagName orderby a.UwtId ascending select new { a.UwId, a.TagName, b.TagIcon }; var listUwTags = queryTags.ToList(); //文章人员ID var listUwUid = list.Select(x => x.UwLastUid).Concat(list.Select(x => x.Uid)).Distinct(); //文章人员ID对应的信息 var listUwUserInfo = db.UserInfo.Where(x => listUwUid.Contains(x.UserId)).Select(x => new { x.UserId, x.Nickname }).ToList(); //把信息赋值到文章表的备用字段上 foreach (var item in list) { //标签 item.Spare1 = listUwTags.Where(x => x.UwId == item.UwId).Select(x => new { x.TagName, x.TagIcon }).ToJson(); //写主昵称 item.Spare3 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.Uid)?.Nickname; //有回复 if (item.UwLastUid > 0) { //回复用户昵称 item.Spare2 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.UwLastUid)?.Nickname; } } vm.Rows = list; vm.Pag = pag; vm.QueryString = dicQs; if (!string.IsNullOrWhiteSpace(TagName)) { try { var jt = KeyValuesQuery(new List <string> { TagName }).FirstOrDefault()?.KeyValue.ToJObject(); if (jt != null) { var tags = new List <object> { new { TagName, listUwTags.FirstOrDefault(x => x.TagName == TagName)?.TagIcon } }; vm.Temp = new { abs = new List <string> { jt["abstract"].ToString(), jt["url"].ToString() }, tags }.ToJson(); } } catch (Exception ex) { Console.WriteLine(ex); } } return(vm); }
public SharedResultVM GistSync() { var vm = new SharedResultVM(); try { using var db = ContextBaseFactory.CreateDbContext(); //同步用户ID int UserId = GlobalTo.GetValue <int>("Work:GistSync:UserId"); //日志 var listLog = new List <object>() { "Gist代码片段同步" }; var listGist = db.Gist.Where(x => x.Uid == UserId).OrderBy(x => x.GistCreateTime).ToList(); var codes = listGist.Select(x => x.GistCode).ToList(); var listGs = db.GistSync.Where(x => x.Uid == UserId).ToList(); //执行命令记录 var dicSync = new Dictionary <string, string>(); foreach (var gist in listGist) { var gs = listGs.FirstOrDefault(x => x.GistCode == gist.GistCode); //新增 if (gs == null) { dicSync.Add(gist.GistCode, "add"); } else if (gs?.GsGitHubTime != gist.GistUpdateTime || gs?.GsGiteeTime != gist.GistUpdateTime) { dicSync.Add(gist.GistCode, "update"); } } //删除 var delCode = listGs.Select(x => x.GistCode).Except(listGist.Select(x => x.GistCode)).ToList(); var token_gh = GlobalTo.GetValue("ApiKey:GitHub:GistToken"); var token_ge = GlobalTo.GetValue("ApiKey:Gitee:GistToken"); listLog.Add("同步新增、修改:" + dicSync.Count + " 条"); listLog.Add(dicSync); //同步新增、修改 if (dicSync.Count > 0) { foreach (var key in dicSync.Keys) { var st = dicSync[key]; var gist = listGist.FirstOrDefault(x => x.GistCode == key); var gs = listGs.FirstOrDefault(x => x.GistCode == key); #region 发送主体 var jo = new JObject { ["access_token"] = token_ge,//only gitee ["description"] = gist.GistRemark, ["public"] = gist.GistOpen == 1 }; var jc = new JObject { ["content"] = gist.GistContent }; var jf = new JObject { [gist.GistFilename] = jc }; jo["files"] = jf; byte[] sendData = Encoding.UTF8.GetBytes(jo.ToJson()); #endregion switch (st) { case "add": { var gsmo = new Domain.GistSync() { GistCode = key, Uid = UserId, GistFilename = gist.GistFilename }; //GitHub { var hwr = HttpTo.HWRequest("https://api.github.com/gists", "POST", sendData); hwr.Headers.Add(HttpRequestHeader.Authorization, "token " + token_gh); hwr.ContentType = "application/json"; hwr.UserAgent = "Netnr Agent"; var rt = HttpTo.Url(hwr); gsmo.GsGitHubId = rt.ToJObject()["id"].ToString(); gsmo.GsGitHubTime = gist.GistUpdateTime; } //Gitee { var hwr = HttpTo.HWRequest("https://gitee.com/api/v5/gists", "POST", sendData); hwr.ContentType = "application/json"; var rt = HttpTo.Url(hwr); gsmo.GsGiteeId = rt.ToJObject()["id"].ToString(); gsmo.GsGiteeTime = gist.GistUpdateTime; } _ = db.GistSync.Add(gsmo); _ = db.SaveChanges(); listLog.Add("新增一条成功"); listLog.Add(gsmo); } break; case "update": { if (gs.GistFilename != gist.GistFilename) { jo["files"][gs.GistFilename] = null; gs.GistFilename = gist.GistFilename; } //GitHub { var hwr = HttpTo.HWRequest("https://api.github.com/gists/" + gs.GsGitHubId, "PATCH", sendData); hwr.Headers.Add(HttpRequestHeader.Authorization, "token " + token_gh); hwr.ContentType = "application/json"; hwr.UserAgent = "Netnr Agent"; _ = HttpTo.Url(hwr); gs.GsGitHubTime = gist.GistUpdateTime; } //Gitee { var hwr = HttpTo.HWRequest("https://gitee.com/api/v5/gists/" + gs.GsGiteeId, "PATCH", sendData); hwr.ContentType = "application/json"; _ = HttpTo.Url(hwr); gs.GsGiteeTime = gist.GistUpdateTime; } _ = db.GistSync.Update(gs); _ = db.SaveChanges(); listLog.Add("更新一条成功"); listLog.Add(gs); } break; } Thread.Sleep(1000 * 2); } } listLog.Add("同步删除:" + delCode.Count + " 条"); listLog.Add(delCode); //同步删除 if (delCode.Count > 0) { foreach (var code in delCode) { var gs = listGs.FirstOrDefault(x => x.GistCode == code); var dc = "00".ToCharArray(); #region GitHub var hwr_gh = HttpTo.HWRequest("https://api.github.com/gists/" + gs.GsGitHubId, "DELETE"); hwr_gh.Headers.Add(HttpRequestHeader.Authorization, "token " + token_gh); hwr_gh.UserAgent = "Netnr Agent"; var resp_gh = (HttpWebResponse)hwr_gh.GetResponse(); if (resp_gh.StatusCode == HttpStatusCode.NoContent) { dc[0] = '1'; } #endregion #region Gitee var hwr_ge = HttpTo.HWRequest("https://gitee.com/api/v5/gists/" + gs.GsGiteeId + "?access_token=" + token_ge, "DELETE"); var resp_ge = (HttpWebResponse)hwr_ge.GetResponse(); if (resp_ge.StatusCode == HttpStatusCode.NoContent) { dc[1] = '1'; } #endregion if (string.Join("", dc) == "11") { _ = db.GistSync.Remove(gs); _ = db.SaveChanges(); listLog.Add("删除一条成功"); listLog.Add(gs); } else { listLog.Add("删除一条异常"); listLog.Add(dc); } Thread.Sleep(1000 * 2); } } listLog.Add("完成同步"); vm.Set(SharedEnum.RTag.success); vm.Data = listLog; } catch (Exception ex) { vm.Set(ex); ConsoleTo.Log(ex); } return(vm); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <CookiePolicyOptions>(options => { //cookie存储需用户同意,欧盟新标准,暂且关闭,否则用户没同意无法写入 options.CheckConsentNeeded = context => false; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddControllersWithViews(options => { //注册全局错误过滤器 options.Filters.Add(new Apps.FilterConfigs.ErrorActionFilter()); //注册全局过滤器 options.Filters.Add(new Apps.FilterConfigs.GlobalActionAttribute()); }); services.AddControllers().AddNewtonsoftJson(options => { //Action原样输出JSON options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); //日期格式化 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss.fff"; //swagger枚举显示名称 options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); //配置swagger services.AddSwaggerGen(c => { c.SwaggerDoc(ver, new Microsoft.OpenApi.Models.OpenApiInfo { Title = GlobalTo.HostEnvironment.ApplicationName, Description = string.Join(" ", new string[] { "<b>GitHub</b>:<a target='_blank' href='https://github.com/netnr'>https://github.com/netnr</a>", "<b>Blog</b>:<a target='_blank' href='https://www.netnr.com'>https://www.netnr.com</a>" }) }); //注释 c.IncludeXmlComments(AppContext.BaseDirectory + GetType().Namespace + ".xml", true); }); //swagger枚举显示名称 services.AddSwaggerGenNewtonsoftSupport(); //授权访问信息 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => { options.Cookie.Name = "netnrf_auth"; options.LoginPath = "/account/login"; }); //session services.AddSession(); //数据库连接池 services.AddDbContextPool <ContextBase>(options => { ContextBaseFactory.CreateDbContextOptionsBuilder(options); }, 10); //定时任务 FluentScheduler.JobManager.Initialize(new Apps.TaskService.Reg()); //配置上传文件大小限制(详细信息:FormOptions) services.Configure <FormOptions>(options => { options.MultipartBodyLengthLimit = GlobalTo.GetValue <int>("StaticResource:MaxSize") * 1024 * 1024; }); }
/// <summary> /// Guff查询 /// </summary> /// <param name="category">类别,可选,支持 text、image、audio、video、me(我的)、melaud(我点赞的)、mereply(我回复的)</param> /// <param name="q">搜索</param> /// <param name="nv">分类名/分类值</param> /// <param name="tag">标签</param> /// <param name="obj">对象</param> /// <param name="OwnerId">所属用户</param> /// <param name="UserId">登录用户</param> /// <param name="page">页码</param> /// <returns></returns> public static SharedPageVM GuffQuery(string category, string q, string nv, string tag, string obj, int OwnerId, int UserId, int page = 1) { var ctype = EnumService.ConnectionType.GuffRecord.ToString(); using var db = ContextBaseFactory.CreateDbContext(); IQueryable <GuffRecord> query = null; switch (category?.ToLower()) { case "melaud": { query = from c in db.UserConnection join a in db.GuffRecord on c.UconnTargetId equals a.GrId join b in db.UserInfo on a.Uid equals b.UserId where c.Uid == UserId && c.UconnTargetType == ctype && c.UconnAction == 1 && a.GrStatus == 1 orderby c.UconnCreateTime descending select new GuffRecord { GrId = a.GrId, GrTypeName = a.GrTypeName, GrTypeValue = a.GrTypeValue, GrObject = a.GrObject, GrContent = a.GrContent, GrContentMd = a.GrContentMd, GrImage = a.GrImage, GrAudio = a.GrAudio, GrVideo = a.GrVideo, GrFile = a.GrFile, GrRemark = a.GrRemark, GrTag = a.GrTag, GrCreateTime = a.GrCreateTime, GrUpdateTime = a.GrUpdateTime, GrOpen = a.GrOpen, GrReadNum = a.GrReadNum, GrReplyNum = a.GrReplyNum, GrLaud = a.GrLaud, GrMark = a.GrMark, Uid = a.Uid, //已点赞 Spare1 = "laud", //是我的 Spare2 = a.Uid == UserId ? "owner" : "", //昵称 Spare3 = b.Nickname }; } break; case "mereply": { query = from c in db.UserReply join a in db.GuffRecord on c.UrTargetId equals a.GrId join b in db.UserInfo on a.Uid equals b.UserId where c.Uid == UserId && c.UrTargetType == ctype && a.GrStatus == 1 orderby c.UrCreateTime descending select new GuffRecord { GrId = a.GrId, GrTypeName = a.GrTypeName, GrTypeValue = a.GrTypeValue, GrObject = a.GrObject, GrContent = a.GrContent, GrContentMd = a.GrContentMd, GrImage = a.GrImage, GrAudio = a.GrAudio, GrVideo = a.GrVideo, GrFile = a.GrFile, GrRemark = a.GrRemark, GrTag = a.GrTag, GrCreateTime = a.GrCreateTime, GrUpdateTime = a.GrUpdateTime, GrOpen = a.GrOpen, GrReadNum = a.GrReadNum, GrReplyNum = a.GrReplyNum, GrLaud = a.GrLaud, GrMark = a.GrMark, Uid = a.Uid, Spare2 = a.Uid == UserId ? "owner" : "", Spare3 = b.Nickname }; } break; case "me": case "top": case "text": case "image": case "audio": case "video": default: { query = from a in db.GuffRecord join b in db.UserInfo on a.Uid equals b.UserId where a.GrStatus == 1 select new GuffRecord { GrId = a.GrId, GrTypeName = a.GrTypeName, GrTypeValue = a.GrTypeValue, GrObject = a.GrObject, GrContent = a.GrContent, GrContentMd = a.GrContentMd, GrImage = a.GrImage, GrAudio = a.GrAudio, GrVideo = a.GrVideo, GrFile = a.GrFile, GrRemark = a.GrRemark, GrTag = a.GrTag, GrCreateTime = a.GrCreateTime, GrUpdateTime = a.GrUpdateTime, GrOpen = a.GrOpen, GrReadNum = a.GrReadNum, GrReplyNum = a.GrReplyNum, GrLaud = a.GrLaud, GrMark = a.GrMark, Uid = a.Uid, Spare2 = a.Uid == UserId ? "owner" : "", Spare3 = b.Nickname }; } break; } query = (category?.ToLower()) switch { "top" => query.OrderByDescending(x => x.GrLaud), "text" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrContent) && string.IsNullOrEmpty(x.GrImage) && string.IsNullOrEmpty(x.GrAudio) && string.IsNullOrEmpty(x.GrVideo)), "image" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrImage)), "audio" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrAudio)), "video" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrVideo)), _ => query.OrderByDescending(x => x.GrCreateTime), }; //所属用户 if (OwnerId != 0) { query = query.Where(x => x.Uid == OwnerId); } //未登录 if (UserId == 0) { query = query.Where(x => x.GrOpen == 1); } else { //已登录:公开&登录用户的所有 query = query.Where(x => x.GrOpen == 1 || x.Uid == UserId); } //分类名/分类值 if (!string.IsNullOrWhiteSpace(nv)) { if (!nv.Contains('/')) { nv += "/"; } var nvs = nv.Split('/').ToList(); var n = nvs.FirstOrDefault(); var v = nvs.LastOrDefault(); //分类名 if (!string.IsNullOrWhiteSpace(n)) { query = query.Where(x => x.GrTypeName == n); } //分类值 if (!string.IsNullOrWhiteSpace(v)) { query = query.Where(x => x.GrTypeValue == v); } } //标签 if (!string.IsNullOrWhiteSpace(tag)) { query = query.Where(x => x.GrTag.Contains(tag)); } //标签 if (!string.IsNullOrWhiteSpace(tag)) { query = query.Where(x => x.GrTag.Contains(tag)); } //对象 if (!string.IsNullOrWhiteSpace(obj)) { query = query.Where(x => x.GrObject.Contains(obj)); } if (!string.IsNullOrWhiteSpace(q)) { query = GlobalTo.TDB switch { SharedEnum.TypeDB.SQLite => query.Where(x => EF.Functions.Like(x.GrContent, $"%{q}%") || EF.Functions.Like(x.GrTag, $"%{q}%")), SharedEnum.TypeDB.PostgreSQL => query.Where(x => EF.Functions.ILike(x.GrContent, $"%{q}%") || EF.Functions.ILike(x.GrTag, $"%{q}%")), _ => query.Where(x => x.GrContent.Contains(q) || x.GrTag.Contains(q)), }; } var pag = new SharedPaginationVM { PageNumber = Math.Max(page, 1), PageSize = 18 }; var dicQs = new Dictionary <string, string> { { "q", q } }; pag.Total = query.Count(); var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList(); var listid = list.Select(x => x.GrId).ToList(); //点赞查询 if (category != "melaud") { var listtid = db.UserConnection.Where(x => listid.Contains(x.UconnTargetId) && x.Uid == UserId && x.UconnTargetType == ctype && x.UconnAction == 1).Select(x => x.UconnTargetId).ToList(); foreach (var item in list) { if (listtid.Contains(item.GrId)) { item.Spare1 = "laud"; } } } //查询记录 var ormo = new OperationRecord() { OrId = UniqueTo.LongId().ToString(), OrType = ctype, OrAction = "query", OrSource = string.Join(",", listid), OrCreateTime = DateTime.Now, OrMark = "default" }; db.OperationRecord.Add(ormo); db.SaveChanges(); SharedPageVM pageSet = new() { Rows = list, Pag = pag, QueryString = dicQs }; return(pageSet); } }
/// <summary> /// Draw查询 /// </summary> /// <param name="q">搜索</param> /// <param name="OwnerId">所属用户</param> /// <param name="UserId">登录用户</param> /// <param name="page">页码</param> /// <returns></returns> public static SharedPageVM DrawQuery(string q, int OwnerId = 0, int UserId = 0, int page = 1) { using var db = ContextBaseFactory.CreateDbContext(); var query = from a in db.Draw join b in db.UserInfo on a.Uid equals b.UserId where a.DrStatus == 1 orderby a.DrCreateTime descending select new Draw { DrId = a.DrId, Uid = a.Uid, DrType = a.DrType, DrName = a.DrName, DrRemark = a.DrRemark, DrCategory = a.DrCategory, DrOrder = a.DrOrder, DrCreateTime = a.DrCreateTime, DrStatus = a.DrStatus, DrOpen = a.DrOpen, Spare1 = a.Spare1, Spare3 = b.Nickname }; //所属用户 if (OwnerId != 0) { query = query.Where(x => x.Uid == OwnerId); } //未登录 if (UserId == 0) { query = query.Where(x => x.DrOpen == 1); } else { //已登录:公开&登录用户的所有 query = query.Where(x => x.DrOpen == 1 || x.Uid == UserId); } if (!string.IsNullOrWhiteSpace(q)) { query = GlobalTo.TDB switch { SharedEnum.TypeDB.SQLite => query.Where(x => EF.Functions.Like(x.DrName, $"%{q}%") || EF.Functions.Like(x.DrRemark, $"%{q}%")), SharedEnum.TypeDB.PostgreSQL => query.Where(x => EF.Functions.ILike(x.DrName, $"%{q}%") || EF.Functions.ILike(x.DrRemark, $"%{q}%")), _ => query.Where(x => x.DrName.Contains(q) || x.DrRemark.Contains(q)), }; } var pag = new SharedPaginationVM { PageNumber = Math.Max(page, 1), PageSize = 20 }; var dicQs = new Dictionary <string, string> { { "q", q } }; pag.Total = query.Count(); var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList(); SharedPageVM pageSet = new() { Rows = list, Pag = pag, QueryString = dicQs }; return(pageSet); }
/// <summary> /// Gist查询,按列权重排序 /// </summary> /// <param name="q">搜索</param> /// <param name="lang">语言</param> /// <param name="OwnerId">所属用户</param> /// <param name="UserId">登录用户</param> /// <param name="page">页码</param> /// <returns></returns> public static SharedPageVM GistQuery(string q, string lang, int OwnerId = 0, int UserId = 0, int page = 1) { using var db = ContextBaseFactory.CreateDbContext(); var query1 = from a in db.Gist join b in db.UserInfo on a.Uid equals b.UserId where a.GistStatus == 1 orderby a.GistCreateTime descending select new { a, b.Nickname }; if (!string.IsNullOrWhiteSpace(lang)) { query1 = query1.Where(x => x.a.GistLanguage == lang); } if (!string.IsNullOrWhiteSpace(q)) { query1 = GlobalTo.TDB switch { SharedEnum.TypeDB.SQLite => query1.Where(x => EF.Functions.Like(x.a.GistFilename, $"%{q}%") || EF.Functions.Like(x.a.GistRemark, $"%{q}%") || EF.Functions.Like(x.a.GistContent, $"%{q}%")), SharedEnum.TypeDB.PostgreSQL => query1.Where(x => EF.Functions.ILike(x.a.GistFilename, $"%{q}%") || EF.Functions.ILike(x.a.GistRemark, $"%{q}%") || EF.Functions.ILike(x.a.GistContent, $"%{q}%")), _ => query1.Where(x => x.a.GistFilename.Contains(q) || x.a.GistRemark.Contains(q) || x.a.GistContent.Contains(q)), }; } //所属用户 if (OwnerId != 0) { query1 = query1.Where(x => x.a.Uid == OwnerId); } //未登录 if (UserId == 0) { query1 = query1.Where(x => x.a.GistOpen == 1); } else { //已登录:公开&登录用户的所有 query1 = query1.Where(x => x.a.GistOpen == 1 || x.a.Uid == UserId); } IQueryable <Gist> query = null; //搜索 if (!string.IsNullOrWhiteSpace(q)) { var query2 = query1.Select(x => new { SearchOrder = (x.a.GistFilename.Contains(q) ? 4 : 0) + (x.a.GistRemark.Contains(q) ? 2 : 0) + (x.a.GistContent.Contains(q) ? 1 : 0), x.Nickname, x.a }).OrderByDescending(x => x.SearchOrder); switch (GlobalTo.TDB) { case SharedEnum.TypeDB.SQLite: query2 = query1.Select(x => new { SearchOrder = (EF.Functions.Like(x.a.GistFilename, $"%{q}%") ? 4 : 0) + (EF.Functions.Like(x.a.GistRemark, $"%{q}%") ? 2 : 0) + (EF.Functions.Like(x.a.GistContent, $"%{q}%") ? 1 : 0), x.Nickname, x.a }).OrderByDescending(x => x.SearchOrder); break; case SharedEnum.TypeDB.PostgreSQL: query2 = query1.Select(x => new { SearchOrder = (EF.Functions.Like(x.a.GistFilename, $"%{q}%") ? 4 : 0) + (EF.Functions.Like(x.a.GistRemark, $"%{q}%") ? 2 : 0) + (EF.Functions.Like(x.a.GistContent, $"%{q}%") ? 1 : 0), x.Nickname, x.a }).OrderByDescending(x => x.SearchOrder); break; } query = query2.Select(x => new Gist { GistCode = x.a.GistCode, GistContentPreview = x.a.GistContentPreview, GistCreateTime = x.a.GistCreateTime, GistFilename = x.a.GistFilename, GistId = x.a.GistId, GistLanguage = x.a.GistLanguage, GistRemark = x.a.GistRemark, GistRow = x.a.GistRow, GistTags = x.a.GistTags, GistTheme = x.a.GistTheme, Uid = x.a.Uid, Spare3 = x.Nickname }); } else { query = query1.Select(x => new Gist { GistCode = x.a.GistCode, GistContentPreview = x.a.GistContentPreview, GistCreateTime = x.a.GistCreateTime, GistFilename = x.a.GistFilename, GistId = x.a.GistId, GistLanguage = x.a.GistLanguage, GistRemark = x.a.GistRemark, GistRow = x.a.GistRow, GistTags = x.a.GistTags, GistTheme = x.a.GistTheme, Uid = x.a.Uid, Spare3 = x.Nickname }); } var pag = new SharedPaginationVM { PageNumber = Math.Max(page, 1), PageSize = 10 }; var dicQs = new Dictionary <string, string> { { "q", q } }; pag.Total = query.Count(); var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList(); SharedPageVM pageSet = new() { Rows = list, Pag = pag, QueryString = dicQs }; return(pageSet); }
/// <summary> /// 根据JSON写入数据 /// </summary> /// <param name="isClear">是否清理表,默认清理</param> /// <returns></returns> public ActionResultVM AddForJson(bool isClear = true) { var vm = new ActionResultVM(); try { var json = Core.FileTo.ReadText(fullJsonData); var objs = json.ToJObject()["data"]; var jsb = objs["SysButton"].ToString().ToEntitys <SysButton>(); var jsd = objs["SysDictionary"].ToString().ToEntitys <SysDictionary>(); var jsm = objs["SysMenu"].ToString().ToEntitys <SysMenu>(); var jsr = objs["SysRole"].ToString().ToEntitys <SysRole>(); var jstc = objs["SysTableConfig"].ToString().ToEntitys <SysTableConfig>(); var jsu = objs["SysUser"].ToString().ToEntitys <SysUser>(); var jte = objs["TempExample"].ToString().ToEntitys <TempExample>(); var jtid = objs["TempInvoiceDetail"].ToString().ToEntitys <TempInvoiceDetail>(); var jtim = objs["TempInvoiceMain"].ToString().ToEntitys <TempInvoiceMain>(); using var db = ContextBaseFactory.CreateDbContext(); Tsb = db.SysButton; Tsd = db.SysDictionary; Tsm = db.SysMenu; Tsr = db.SysRole; Tstc = db.SysTableConfig; Tsu = db.SysUser; Tte = db.TempExample; Ttid = db.TempInvoiceDetail; Ttim = db.TempInvoiceMain; var num = 0; if (isClear) { Tsb.RemoveRange(Tsb.ToList()); Tsd.RemoveRange(Tsd.ToList()); Tsm.RemoveRange(Tsm.ToList()); Tsr.RemoveRange(Tsr.ToList()); Tstc.RemoveRange(Tstc.ToList()); Tsu.RemoveRange(Tsu.ToList()); Tte.RemoveRange(Tte.ToList()); Ttid.RemoveRange(Ttid.ToList()); Ttim.RemoveRange(Ttim.ToList()); num = db.SaveChanges(); } Tsb.AddRange(jsb); Tsd.AddRange(jsd); Tsm.AddRange(jsm); Tsr.AddRange(jsr); Tstc.AddRange(jstc); Tsu.AddRange(jsu); Tte.AddRange(jte); Ttid.AddRange(jtid); Ttim.AddRange(jtim); db.AddRange(jsb); num += db.SaveChanges(); vm.Set(num > 0); } catch (Exception ex) { vm.Set(ex); } return(vm); }
public SharedResultVM DatabaseExportDemo() { var vm = new SharedResultVM(); try { var export_before = "db/backup_demo_before.zip"; var export_demo = "db/backup_demo.zip"; //备份 if (DatabaseExport(export_before).Code == 200) { //清理仅保留示例数据 using var db = ContextBaseFactory.CreateDbContext(); db.UserInfo.RemoveRange(db.UserInfo.ToList()); db.UserInfo.Add(new Domain.UserInfo() { UserId = 1, UserName = "******", UserPwd = "e10adc3949ba59abbe56e057f20f883e",//123456 UserCreateTime = DateTime.Now }); db.UserConnection.RemoveRange(db.UserConnection.ToList()); db.UserMessage.RemoveRange(db.UserMessage.ToList()); db.UserReply.RemoveRange(db.UserReply.Where(x => x.UrTargetId != "117").ToList()); db.UserWriting.RemoveRange(db.UserWriting.Where(x => x.UwId != 117).ToList()); db.UserWritingTags.RemoveRange(db.UserWritingTags.Where(x => x.UwId != 117).ToList()); db.Tags.RemoveRange(db.Tags.Where(x => x.TagId != 58 && x.TagId != 96).ToList()); db.Run.RemoveRange(db.Run.OrderBy(x => x.RunCreateTime).Skip(1).ToList()); db.OperationRecord.RemoveRange(db.OperationRecord.ToList()); db.Notepad.RemoveRange(db.Notepad.ToList()); db.KeyValues.RemoveRange(db.KeyValues.Where(x => x.KeyName != "https" && x.KeyName != "browser").ToList()); db.KeyValueSynonym.RemoveRange(db.KeyValueSynonym.ToList()); db.GuffRecord.RemoveRange(db.GuffRecord.ToList()); db.Gist.RemoveRange(db.Gist.Where(x => x.GistCode != "5373307231488995367").ToList()); db.GistSync.RemoveRange(db.GistSync.Where(x => x.GistCode != "5373307231488995367").ToList()); db.GiftRecord.RemoveRange(db.GiftRecord.ToList()); db.GiftRecordDetail.RemoveRange(db.GiftRecordDetail.ToList()); db.Draw.RemoveRange(db.Draw.Where(x => x.DrId != "d4969500168496794720" && x.DrId != "m4976065893797151245").ToList()); db.DocSet.RemoveRange(db.DocSet.Where(x => x.DsCode != "4840050256984581805" && x.DsCode != "5036967707833574483").ToList()); db.DocSetDetail.RemoveRange(db.DocSetDetail.Where(x => x.DsCode != "4840050256984581805" && x.DsCode != "5036967707833574483").ToList()); var num = db.SaveChanges(); //导出示例数据 vm = DatabaseExport(export_demo); //导入恢复 if (DatabaseImport(export_before, true).Code == 200) { var fullPath = PathTo.Combine(GlobalTo.ContentRootPath, "db", export_before); System.IO.File.Delete(fullPath); } } } catch (Exception ex) { vm.Set(ex); } return(vm); }
/// <summary> /// Run查询 /// </summary> /// <param name="q">搜索</param> /// <param name="OwnerId">所属用户</param> /// <param name="UserId">登录用户</param> /// <param name="page">页码</param> /// <returns></returns> public static PageVM RunQuery(string q, int OwnerId = 0, int UserId = 0, int page = 1) { using var db = ContextBaseFactory.CreateDbContext(); var query = from a in db.Run join b in db.UserInfo on a.Uid equals b.UserId where a.RunStatus == 1 orderby a.RunCreateTime descending select new Run { RunCode = a.RunCode, RunCreateTime = a.RunCreateTime, RunId = a.RunId, RunRemark = a.RunRemark, RunTags = a.RunTags, RunTheme = a.RunTheme, Uid = a.Uid, RunOpen = a.RunOpen, Spare3 = b.Nickname, }; //所属用户 if (OwnerId != 0) { query = query.Where(x => x.Uid == OwnerId); } //未登录 if (UserId == 0) { query = query.Where(x => x.RunOpen == 1); } else { //已登录:公开&登录用户的所有 query = query.Where(x => x.RunOpen == 1 || x.Uid == UserId); } if (!string.IsNullOrWhiteSpace(q)) { query = query.Where(x => x.RunTheme.Contains(q) || x.RunRemark.Contains(q)); } var pag = new PaginationVM { PageNumber = Math.Max(page, 1), PageSize = 4 }; var dicQs = new Dictionary <string, string> { { "q", q } }; pag.Total = query.Count(); var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList(); PageVM pageSet = new PageVM() { Rows = list, Pag = pag, QueryString = dicQs }; return(pageSet); }
/// <summary> /// 获取文章列表 /// </summary> /// <param name="KeyWords"></param> /// <param name="page"></param> /// <param name="TagName"></param> /// <returns></returns> public static PageVM UserWritingQuery(string KeyWords, int page, string TagName = "") { KeyWords ??= ""; var pag = new PaginationVM { PageNumber = Math.Max(page, 1), PageSize = 20 }; var dicQs = new Dictionary <string, string> { { "k", KeyWords } }; IQueryable <UserWriting> query; using var db = ContextBaseFactory.CreateDbContext(); if (!string.IsNullOrWhiteSpace(TagName)) { query = from a in db.UserWritingTags.Where(x => x.TagName == TagName) join b in db.UserWriting on a.UwId equals b.UwId select b; query = query.Distinct(); } else { query = from a in db.UserWriting select a; } query = query.Where(x => x.UwOpen == 1 && x.UwStatus == 1); if (!string.IsNullOrWhiteSpace(KeyWords)) { //按空格分割后搜索 KeyWords.Split(' ').ToList().ForEach(k => { query = query.Where(x => x.UwTitle.Contains(k)); }); } pag.Total = query.Count(); query = query.OrderByDescending(x => x.UwId).Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize); var list = query.ToList(); //文章ID var listUwId = list.Select(x => x.UwId).ToList(); //文章的所有的标签 var listUwTags = (from a in db.Tags join b in db.UserWritingTags on a.TagName equals b.TagName into bg from b in bg.DefaultIfEmpty() where listUwId.Contains(b.UwId) || a.TagName == TagName orderby b.UwtId ascending select new { UwId = b == null ? 0 : b.UwId, TagName = b == null ? TagName : b.TagName, a.TagIcon }).ToList(); //文章人员ID var listUwUid = list.Select(x => x.UwLastUid).Concat(list.Select(x => x.Uid)).Distinct(); //文章人员ID对应的信息 var listUwUserInfo = db.UserInfo.Where(x => listUwUid.Contains(x.UserId)).Select(x => new { x.UserId, x.Nickname }).ToList(); //把信息赋值到文章表的备用字段上 foreach (var item in list) { //标签 item.Spare1 = listUwTags.Where(x => x.UwId == item.UwId).Select(x => new { x.TagName, x.TagIcon }).ToJson(); //写主昵称 item.Spare3 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.Uid)?.Nickname; //有回复 if (item.UwLastUid > 0) { //回复用户昵称 item.Spare2 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.UwLastUid)?.Nickname; } } var vm = new PageVM() { Rows = list, Pag = pag, QueryString = dicQs }; if (!string.IsNullOrWhiteSpace(TagName)) { try { var jt = KeyValuesQuery(new List <string> { TagName }).FirstOrDefault()?.KeyValue.ToJObject(); if (jt != null) { var tags = new List <object> { new { TagName, listUwTags.FirstOrDefault(x => x.TagName == TagName)?.TagIcon } }; vm.Temp = new { abs = new List <string> { jt["abstract"].ToString(), jt["url"].ToString() }, tags }.ToJson(); } } catch (Exception) { } } return(vm); }
/// <summary> /// 获取关联的文章列表 /// </summary> /// <param name="OwnerId">所属用户关联</param> /// <param name="connectionType">关联分类</param> /// <param name="action">动作</param> /// <param name="page"></param> /// <returns></returns> public static SharedPageVM UserConnWritingQuery(int OwnerId, EnumService.ConnectionType connectionType, int action, int page) { var pag = new SharedPaginationVM { PageNumber = Math.Max(page, 1), PageSize = 20 }; using var db = ContextBaseFactory.CreateDbContext(); IQueryable <UserWriting> query = null; switch (connectionType) { case EnumService.ConnectionType.UserWriting: { query = from a in db.UserConnection join b in db.UserWriting on a.UconnTargetId equals b.UwId.ToString() where a.Uid == OwnerId && a.UconnTargetType == connectionType.ToString() && a.UconnAction == action orderby a.UconnCreateTime descending select b; } break; } if (query == null) { return(null); } pag.Total = query.Count(); query = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize); var list = query.ToList(); //文章ID var listUwId = list.Select(x => x.UwId).ToList(); //文章的所有的标签 var listUwTags = (from a in db.Tags join b in db.UserWritingTags on a.TagName equals b.TagName where listUwId.Contains(b.UwId) select new { b.UwId, b.TagName, a.TagIcon }).ToList(); //文章人员ID var listUwUid = list.Select(x => x.UwLastUid).Concat(list.Select(x => x.Uid)).Distinct(); //文章人员ID对应的信息 var listUwUserInfo = db.UserInfo.Where(x => listUwUid.Contains(x.UserId)).Select(x => new { x.UserId, x.Nickname }).ToList(); //把信息赋值到文章表的备用字段上 foreach (var item in list) { //标签 item.Spare1 = listUwTags.Where(x => x.UwId == item.UwId).Select(x => new { x.TagName, x.TagIcon }).ToJson(); //写主昵称 item.Spare3 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.Uid)?.Nickname; //有回复 if (item.UwLastUid > 0) { //回复用户昵称 item.Spare2 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.UwLastUid)?.Nickname; } } var vm = new SharedPageVM() { Rows = list, Pag = pag }; return(vm); }
public SharedResultVM DatabaseBackupToGit() { return(SharedResultVM.Try(vm => { if (GlobalTo.GetValue <bool>("ReadOnly")) { vm.Set(SharedEnum.RTag.refuse); return vm; } var now = $"{DateTime.Now:yyyyMMdd_HHmmss}"; var db = ContextBaseFactory.CreateDbContext(); var database = db.Database.GetDbConnection().Database; var createScript = db.Database.GenerateCreateScript(); //备份创建脚本 try { var b1 = Convert.ToBase64String(Encoding.UTF8.GetBytes(createScript)); var p1 = $"{database}/backup_{now}.sql"; vm.Log.Add(PutGitee(b1, p1, now)); vm.Log.Add(PutGitHub(b1, p1, now)); } catch (Exception ex) { Console.WriteLine(ex); vm.Log.Add(ex.Message); } Thread.Sleep(1000 * 1); //备份数据 var zipPath = $"db/backup_{now}.zip"; if (DatabaseExport(zipPath).Code == 200) { var ppath = PathTo.Combine(GlobalTo.ContentRootPath, zipPath); try { var b2 = Convert.ToBase64String(System.IO.File.ReadAllBytes(ppath)); var p2 = $"{database}/backup_{now}.zip"; vm.Log.Add(PutGitee(b2, p2, now)); vm.Log.Add(PutGitHub(b2, p2, now)); } catch (Exception ex) { Console.WriteLine(ex); vm.Log.Add(ex.Message); System.IO.File.Delete(ppath); } finally { System.IO.File.Delete(ppath); } } return vm; })); }