コード例 #1
0
 /// <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);
 }
コード例 #2
0
ファイル: CommonService.cs プロジェクト: wwwK/aceadmin
 /// <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);
 }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
ファイル: DataMirrorService.cs プロジェクト: wwwK/aceadmin
        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;
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
ファイル: ServicesController.cs プロジェクト: netnr/blog
        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);
        }
コード例 #7
0
ファイル: FilterConfigs.cs プロジェクト: wwwK/aceadmin
            /// <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);
            }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
ファイル: FilterConfigs.cs プロジェクト: wwwK/aceadmin
            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);
                }
            }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
ファイル: ServicesController.cs プロジェクト: netnr/blog
        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);
        }
コード例 #12
0
ファイル: Startup.cs プロジェクト: netnr/netnrf
        // 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(" &nbsp; ", 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;
            });
        }
コード例 #13
0
        /// <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);
        }
    }
コード例 #14
0
        /// <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);
        }
コード例 #15
0
        /// <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);
        }
コード例 #16
0
ファイル: DataMirrorService.cs プロジェクト: wwwK/aceadmin
        /// <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);
        }
コード例 #17
0
ファイル: ServicesController.cs プロジェクト: netnr/blog
        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);
        }
コード例 #18
0
ファイル: CommonService.cs プロジェクト: wwwK/aceadmin
        /// <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);
        }
コード例 #19
0
ファイル: CommonService.cs プロジェクト: wwwK/aceadmin
        /// <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);
        }
コード例 #20
0
        /// <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);
        }
コード例 #21
0
ファイル: ServicesController.cs プロジェクト: netnr/blog
        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;
            }));
        }