Example #1
0
        /// <summary>
        /// 根据选中的栏目id生成栏目首页
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task ColumnIndexGenerate(List <int> ids)
        {
            if (ids.Count <= 0)
            {
                throw new UserFriendlyException("请选择要生成的栏目或者点击全部生成");
            }
            //拿到待生成的栏目集合
            var list = await _columnAppService.GetGenerateColumnByIds <GenerateColumnIndexOutput>(ids);

            var taskArray = new Task[list.Count];
            //拿到网站配置
            var siteOption =
                await _cacheManager.GetCache <string, SiteOptionDto>(EasyFastConsts.TemplateCacheKey)
                .GetAsync("siteOptionCache", () => _siteConfigAppService.GetSiteOption());

            for (int i = 0; i < list.Count; i++)
            {
                string fileName = list[i].IndexTemplate.Substring(list[i].IndexTemplate.LastIndexOf("\\", StringComparison.Ordinal) + 1);
                if (!File.Exists(list[i].IndexTemplate))
                {
                    throw new UserFriendlyException($"请在{siteOption.TemplateDir}目录下查看是否存在{fileName}模板文件");
                }
                var i1 = i;
                //拿到栏目的模板文件 以文件的最后修改时间做缓存
                var template = _cacheManager.GetCache <string, string>(EasyFastConsts.TemplateCacheKey).Get($"{fileName}{File.GetLastWriteTime(list[i].IndexTemplate)}",
                                                                                                            () => File.ReadAllText(list[i1].IndexTemplate, Encoding.UTF8));

                //生成规则 暂时仅支持{Id} {Name} {Year} {Month} {Day} [Title]
                var rulePath = RuleParseHelper.Parse(new StringBuilder(list[i1].IndexHtmlRule), list[i1].Id.ToString(), list[i1].Name);
                //地址 CurrentPath +  HtmlDir + Column Dir + rulePath  例 MapPath(~)\Column\Index_1.html
                taskArray[i] = _htmlGenerateManager.GenerateHtml(template, EasyFastConsts.BaseDirectory + siteOption.HTMLDir + list[i1].Dir + rulePath);
            }
            //等待所有的task执行完成
            await Task.WhenAll(taskArray);
        }
Example #2
0
        public async Task GenerateContent(List <int> ids)
        {
            if (ids.Count <= 0)
            {
                throw new UserFriendlyException("请选择要生成内容页的栏目");
            }
            var contents = await _contentAppService.GetGenerateContentsByCIds(ids);

            if (contents.Count <= 0)
            {
                throw new UserFriendlyException("您选择的栏目下暂时没有要生成的内容页");
            }

            //拿到网站配置
            var siteOption =
                await _cacheManager.GetCache <string, SiteOptionDto>(EasyFastConsts.TemplateCacheKey)
                .GetAsync("siteOptionCache", () => _siteConfigAppService.GetSiteOption());

            for (var i = 0; i < contents.Count; i++)
            {
                var fileName = contents[i].ColumnContentTemplate.Substring(contents[i].ColumnContentTemplate.LastIndexOf("\\", StringComparison.Ordinal) + 1);

                var fullPath = $"{EasyFastConsts.BaseDirectory}{siteOption.TemplateDir}{contents[i].ColumnContentTemplate}";

                if (!File.Exists(fullPath))
                {
                    throw new UserFriendlyException($"请在{siteOption.TemplateDir}目录下查看是否存在{fileName}模板文件");
                }

                var i1 = i;

                //拿到栏目的模板文件 以文件的最后修改时间做缓存
                var template = _cacheManager.GetCache <string, string>(EasyFastConsts.TemplateCacheKey).Get($"{fullPath}{File.GetLastWriteTime(fullPath)}",
                                                                                                            () => File.ReadAllText(fullPath, Encoding.UTF8));

                //生成规则 暂时仅支持{Id} {Name} {Year} {Month} {Day} [Title]
                var rulePath = RuleParseHelper.Parse(new StringBuilder(contents[i1].ColumnContentHtmlRule), contents[i1].Id.ToString(), contents[i1].Title, contents[i1].LastModificationTime);

                //地址 CurrentPath +  HtmlDir + Column Dir + rulePath  例 MapPath(~)\Column\Index_1.html
                var dict = new Dictionary <string, string> {
                    { "id", $"and tleft.id = '{contents[i1].Id}'" }
                };

                _htmlGenerateManager.GenerateHtml(template, EasyFastConsts.BaseDirectory + rulePath.Trim(), dict);
            }
        }
Example #3
0
        /// <summary>
        /// 根据选中的栏目id生成栏目首页
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="isAll">生成选项</param>
        /// <returns></returns>
        public async Task GenerateColumnIndex(List <int> ids, bool isAll)
        {
            if (!isAll)
            {
                if (ids.Count <= 0)
                {
                    throw new UserFriendlyException("请选择要生成的栏目或者点击全部生成");
                }
            }
            //拿到待生成的栏目集合
            var list = await _columnAppService.GetGenerateColumn <GenerateColumnIndexOutput>(new GenerateIndexSpecification(isAll, ids));

            var taskArray = new Task[list.Count];
            //拿到网站配置
            var siteOption =
                await _cacheManager.GetCache <string, SiteOptionDto>(EasyFastConsts.TemplateCacheKey)
                .GetAsync("siteOptionCache", () => _siteConfigAppService.GetSiteOption());

            for (var i = 0; i < list.Count; i++)
            {
                var fileName = list[i].IndexTemplate.Substring(list[i].IndexTemplate.LastIndexOf("\\", StringComparison.Ordinal) + 1);
                var fullPath = $"{EasyFastConsts.BaseDirectory}{siteOption.TemplateDir}{list[i].IndexTemplate}";
                if (!File.Exists(fullPath))
                {
                    throw new UserFriendlyException($"请在{siteOption.TemplateDir}目录下查看是否存在{fileName}模板文件");
                }
                var i1 = i;
                //拿到栏目的模板文件 以文件的最后修改时间做缓存
                var template = _cacheManager.GetCache <string, string>(EasyFastConsts.TemplateCacheKey).Get($"{fullPath}{File.GetLastWriteTime(fullPath)}",
                                                                                                            () => File.ReadAllText(fullPath, Encoding.UTF8));

                //生成规则 暂时仅支持{Id} {Name} {Year} {Month} {Day} [Title]
                var rulePath = RuleParseHelper.Parse(new StringBuilder(list[i1].IndexHtmlRule), list[i1].Id.ToString(), list[i1].Name, null);
                //地址 CurrentPath +  HtmlDir + Column Dir + rulePath  例 MapPath(~)\Index_1.html
                taskArray[i] = Task.Factory.StartNew(() => _htmlGenerateManager.GenerateHtml(template, EasyFastConsts.BaseDirectory + rulePath.Trim(), null));
            }
            //等待所有的task执行完成
            await Task.WhenAll(taskArray);

            Debug.WriteLine("执行成功!");
        }
Example #4
0
        /// <summary>
        /// 生成栏目列表页
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="isAll"></param>
        /// <returns></returns>
        public async Task GenerateColumnList(List <int> ids, bool isAll = false)
        {
            if (!isAll)
            {
                if (ids.Count <= 0)
                {
                    throw new UserFriendlyException("请选择要生成的栏目或者点击全部生成");
                }
            }
            var columns = await _columnAppService.GetGenerateColumn <GenerateColumnListOutput>(new GenerateListSpecification(isAll, ids));

            if (columns.Count <= 0)
            {
                throw new UserFriendlyException("暂时没有需要生成的栏目");
            }
            var siteOption = await _cacheManager.GetCache <string, SiteOptionDto>(EasyFastConsts.TemplateCacheKey)
                             .GetAsync("siteOptionCache", () => _siteConfigAppService.GetSiteOption());

            var taskArray = new Task[columns.Count];

            for (var i = 0; i < columns.Count; i++)
            {
                var    i1       = i;
                string fileName = columns[i].ListTemplate.Substring(columns[i1].ListTemplate.LastIndexOf("\\", StringComparison.Ordinal) + 1);
                var    fullPath = $"{EasyFastConsts.BaseDirectory}{siteOption.TemplateDir}{columns[i].ListTemplate}";
                if (!File.Exists(fullPath))
                {
                    throw new UserFriendlyException($"请在{siteOption.TemplateDir}目录下查看是否存在{fileName}模板文件");
                }

                //拿到栏目的模板文件 以文件的最后修改时间做缓存
                var template = _cacheManager.GetCache <string, string>(EasyFastConsts.TemplateCacheKey).Get($"{fullPath}{File.GetLastWriteTime(fullPath)}",
                                                                                                            () => File.ReadAllText(fullPath, Encoding.UTF8));
                var rulePath = RuleParseHelper.Parse(new StringBuilder(columns[i1].ListHtmlRule), columns[i1].Id.ToString(), columns[i1].Name, null);

                taskArray[i] = Task.Factory.StartNew(() => _htmlGenerateManager.GenerateHtml(template, EasyFastConsts.BaseDirectory + rulePath.Trim(), null));
            }
            await Task.WhenAll(taskArray);
        }
Example #5
0
        /// <summary>
        /// 清理内容文件
        /// </summary>
        /// <param name="contentPathRule"></param>
        /// <param name="columnId"></param>
        private void CleanContentFile(string contentPathRule, int columnId)
        {
            try
            {
                var dirPath = Path.GetDirectoryName(contentPathRule.Replace("{Year}", "").Replace("{Month}", "").Replace("{Day}", "").TrimEnd('\\'));
                if ((dirPath + "\\").Equals(EasyFastConsts.BaseDirectory))
                {
                    return;
                }

                var conentList = _sqlExecuter.SqlQuery <CleanContentFileOutput>
                                     ($"select title,id,LastModificationTime from Common_Model where ColumnId={columnId} and IsDeleted=0");

                var files = new List <string>();
                foreach (var content in conentList)
                {
                    files.Add(RuleParseHelper.Parse(new StringBuilder(contentPathRule), content.Id.ToString(), content.Title, content.LastModificationTime));
                }


                //目录及子目录下所有文件

                var allfile = Directory.EnumerateFiles(dirPath, "*", SearchOption.AllDirectories);

                foreach (var file in allfile)
                {
                    if (!files.Contains(file))
                    {
                        File.Delete(file);
                    }
                }

                var allDir = Directory.EnumerateDirectories(dirPath, "*", SearchOption.AllDirectories).OrderByDescending(d => d);
                //删除空目录
                foreach (var dir in allDir)
                {
                    try
                    {
                        //尝试删除
                        Directory.Delete(dir);
                    }
                    catch (Exception e)
                    {
                        //不为空跳出本次循环
                    }
                }
            }
            catch (Exception e)
            {
                if (e is DirectoryNotFoundException)
                {
                    //一般都是文件不存在的错误,不影响
                    Logger.Warn(e.Message);
                }

                else
                {
                    Logger.Error(e.Message);
                }
            }
        }