Example #1
0
        /// <summary>
        /// 对数据的批量更新
        /// </summary>
        /// <param name="tableName">目标表格名称</param>
        /// <param name="startId">当前更新记录开始位置(不包括所传入的id)</param>
        /// <param name="updateType">更新类型枚举</param>
        public static void BulkUpdate(string tableName, int startId, DataUpdateType updateType = DataUpdateType.Insert)
        {
            var bllEntity = BllFactory.GetBllInstance(tableName);
            var bllType   = bllEntity.GetType();

            try
            {
                var whereStr = "Id>" + startId;
                var idList   = (IEnumerable <object>)bllType.InvokeMember("QuerySingleColumn", BindingFlags.InvokeMethod, null, bllEntity, new object[] { whereStr, "Id" });

                var updateModelList = idList.Select(id => new DbUpdateLog
                {
                    TableName  = tableName,
                    TargetId   = (int)id,
                    UpdateType = (int)updateType,
                    UpdateTime = DateTime.Now
                });

                UpdateBll.BulkInsert(updateModelList);
            }
            catch (Exception ex)
            {
                ExceptionLogBll.ExceptionPersistence("DataUpdateLog.cs", "DataUpdateLog", ex);
            }
        }
Example #2
0
        /// <summary>
        /// APP通用数据访问接口(CRUD)
        /// </summary>
        /// <param name="parameters">请求接口所带的参数模型对象</param>
        /// <returns>请求结果</returns>
        public JsonResult Index(CommonApiModel parameters)
        {
            var bllEntity = BllFactory.GetBllInstance(parameters.TableName);
            var entityType = bllEntity.GetType();
            var methodName = parameters.Operate.ToString();

            var invokeParameters = PrepareInvokeParameters(parameters);
            try
            {
                if (parameters.Operate == DbOperateType.BulkInsert)
                {
                    entityType.InvokeMember(methodName, BindingFlags.InvokeMethod, null, bllEntity, invokeParameters);

                    return Json(ErrorModel.BulkInsertSuccess);
                }

                var result = entityType.InvokeMember(methodName, BindingFlags.InvokeMethod, null, bllEntity, invokeParameters);
                var jsonObj = ErrorModel.GetDataSuccess(result, parameters.TableName);

                return new CustomJsonResult {
                    Data = jsonObj,
                    MaxJsonLength = int.MaxValue,
                    FormateStr = "yyyy-MM-dd HH:mm:ss"
                };
            }
            catch (Exception ex)
            {
                ExceptionLogBll.ExceptionPersistence("AppController.cs", "AppController", ex);

                return Json(ErrorModel.InputError, JsonRequestBehavior.AllowGet);
            }
        }
Example #3
0
        /// <summary>
        /// 对上传的试题题库进行分析
        /// </summary>
        /// <param name="examFiles"></param>
        /// <returns></returns>
        public static object AnalysisExamQuestion(ExamFiles examFiles)
        {
            //var absolutePath = HttpContext.Current.Server.MapPath(examFiles.FilePath);
            // @FrancisTan 20170208
            var absolutePath = PathExtension.MapPath(examFiles.FilePath);

            try
            {
                using (var fileStream = new FileStream(absolutePath, FileMode.Open, FileAccess.Read))
                {
                    var workBook = new HSSFWorkbook(fileStream);
                    var qaList   = AnalysisQuestions(workBook);

                    if (qaList.Count == 0)
                    {
                        return(ErrorModel.OperateFailed);
                    }

                    return(InsertQuestionsToDb(examFiles, qaList));
                }
            }
            catch (Exception ex)
            {
                ExceptionLogBll.ExceptionPersistence("ExamController.cs", "ExamController", ex);

                return(ErrorModel.OperateFailed);
            }
        }
        /// <summary>
        /// 获取数据列表的公共方法(通过表名反映获取)
        /// </summary>
        /// <returns></returns>
        public JsonResult GetList()
        {
            var instructorId = Request["instructorId"].ToInt32();
            var month        = Request["month"].ToDateTime();
            var tableName    = Request["target"];

            if (string.IsNullOrEmpty(tableName))
            {
                return(Json(ErrorModel.InputError));
            }

            var json = JqueryDataTableAjaxHelper.GetPageListJson(
                Request,
                (pageIndex, pageSize) =>
            {
                var bllInstance = BllFactory.GetBllInstance(tableName);
                if (bllInstance != null)
                {
                    var type = bllInstance.GetType();

                    try
                    {
                        // build condition
                        var conditionList = new List <string>();
                        if (instructorId > 0)
                        {
                            conditionList.Add("InstructorId=" + instructorId);
                        }

                        if (month != default(DateTime))
                        {
                            var start = month.AddDays(-1);
                            var end   = month.AddMonths(1);
                            conditionList.Add($"UploadTime>'{start}' AND UploadTime<'{end}'");
                        }

                        var condition  = string.Join(" AND ", conditionList);
                        var orderField = Request["order"] ?? "UploadTime";
                        var arguments  = new object[] { pageIndex, pageSize, condition, orderField, true, 0 };
                        var list       = type.InvokeMember("QueryPageList", BindingFlags.InvokeMethod, null, bllInstance,
                                                           arguments);

                        return(new KeyValuePair <int, object>((int)arguments[5], list));
                    }
                    catch (Exception ex)
                    {
                        ExceptionLogBll.ExceptionPersistence("InstructorController.cs", "InstructorController", ex);

                        return(new KeyValuePair <int, object>());
                    }
                }

                return(new KeyValuePair <int, object>());
            });

            return(Json(json));
        }
Example #5
0
        /// <summary>
        /// 将上传的文件进行格式转换处理,若文件格式符合处理条件,则在文件处理完成之后会将处理后得到的新文件地址赋值给 fileModel 的 FilePath 字段并返回
        /// </summary>
        /// <param name="fileModel"><see cref="TraficFiles"/>类的实体对象</param>
        public static TraficFiles Format(TraficFiles fileModel)
        {
            try
            {
                var fileName      = PathExtension.MapPath(fileModel.FilePath);
                var path          = Path.GetDirectoryName(fileName);
                var htmlFilesPath = Path.Combine(path, Guid.NewGuid().ToString());

                var ext = Path.GetExtension(fileName).ToLower();
                switch (ext)
                {
                case ".doc":
                case ".docx":
                    FileHelper.Word2Html(fileName, htmlFilesPath);
                    break;

                //case ".pdf":
                //    FileHelper.Pdf2Html(fileName, htmlFilesPath);
                //    break;

                default:
                    //throw new NotImplementedException();
                    return(fileModel);
                }

                // 将 __html 中的文件打包压缩成 zip 格式的文件
                var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
                var zipFileName = Path.Combine(path, fileNameWithoutExtension + ".zip");
                FileHelper.Zip(zipFileName, htmlFilesPath);

                // 删除 __html 目录
                Directory.Delete(htmlFilesPath, true);

                // 将 zip 文件路径处理成相对路径
                fileName = fileName.Replace("\\", "/");
                var webDir = fileName.Replace(fileModel.FilePath, "");
                fileModel.FilePath = zipFileName.Replace("\\", "/").Replace(webDir, "");
                fileModel.FilePath = fileModel.FilePath.StartsWith("/") ? fileModel.FilePath : $"/{fileModel.FilePath}";

                var n = fileModel.FileName;
                fileModel.FileExtension = ".zip";
                fileModel.FileName      = Path.GetFileNameWithoutExtension(n) + fileModel.FileExtension;
                return(fileModel);
            }
            catch (Exception ex)
            {
                ExceptionLogBll.ExceptionPersistence(nameof(FileProcesser), nameof(FileProcesser), ex);
                return(fileModel);
            }
        }
Example #6
0
        /// <summary>
        /// 针对新增文件搜索所有关键字
        /// </summary>
        /// <param name="fileId"></param>
        private static void SearchForNewFile(int fileId)
        {
            var fileBll = new TraficFilesBll();
            var file    = fileBll.QuerySingle(fileId);

            if (file != null && file.FileExtension.ToLower() == ".zip")
            {
                var keywordsBll  = new TraficKeywordsBll();
                var keywordsList = keywordsBll.QueryAll();
                var zipFileName  = PathExtension.MapPath(file.FilePath);

                var zipTempFileName = Path.Combine(ZipTempPath, Path.GetFileName(file.FilePath));
                if (!Directory.Exists(ZipTempPath))
                {
                    Directory.CreateDirectory(ZipTempPath);
                }

                if (File.Exists(zipFileName))
                {
                    FileHelper.ExtractZip(zipFileName, ExtractPath);
                    var html = GetHtmlStr(ExtractPath, out string htmlFileName, out Encoding encoding);
                    html = AddIdForHtmlDom(html);
                    var tasks = new List <Task>();
                    foreach (var keywords in keywordsList)
                    {
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            try
                            {
                                var searchResult = SearchFromHtml(keywords.Keywords, html);

                                SearchResultEnqueue(searchResult, fileId, keywords.Id);
                            }
                            catch (Exception ex)
                            {
                                ExceptionLogBll.ExceptionPersistence(nameof(SearchHelper), nameof(SearchHelper), ex);
                            }
                        }));
                    }

                    Task.WaitAll(tasks.ToArray());
                    ClearSearchResultQueue();
                    FileHelper.Write(htmlFileName, html, encoding);
                    SearchCompleted(zipTempFileName, zipFileName, ExtractPath);
                    tasks = null;
                    GC.Collect();
                }
            }
        }
Example #7
0
        /// <summary>
        /// 添加搜索关键字,此任务仅在数据库中关键字条目数少于100个时才会执行
        /// </summary>
        public static void AddSearchKeywords()
        {
            // 判断数据库中关键字个数
            var keywordsBll = new TraficKeywordsBll();
            var totalCount  = keywordsBll.GetTotalCount();

            if (totalCount < 100)
            {
                // 读取文件中的关键字列表
                var filePath = PathExtension.MapPath(AppSettings.KeywordsFilePath);
                try
                {
                    using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    {
                        using (var streamReader = new StreamReader(fileStream))
                        {
                            var text     = streamReader.ReadToEnd();
                            var keywords = text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

                            // @FrancisTan 2017-10-27
                            // 批量插入关键字
                            var modelList = keywords.Select(k => new TraficKeywords {
                                Keywords = k, AddTime = DateTime.Now
                            });
                            keywordsBll.BulkInsert(modelList);
                            DataUpdateLog.BulkUpdate(nameof(TraficKeywords), 0);

                            // 依次对单个文件执行关键字搜索
                            var fileBll = new TraficFilesBll();
                            var idList  = fileBll.QueryList("IsDelete=0", new string[] { "Id" }).Select(t => t.Id).ToList();
                            idList.ForEach(id =>
                            {
                                SearchHelper.AddSearchTask(1, id);
                            });
                        } // end streamreader
                    }     // end filestream
                }
                catch (Exception ex)
                {
                    ExceptionLogBll.ExceptionPersistence(nameof(TempTask), nameof(TempTask), ex);
                }
            }
            else
            {
                // Ignore
            }
        }
Example #8
0
        public JsonResult GetList(GetListParams parameters)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var bllInstance = BllFactory.GetBllInstance(parameters.TableName);
                    if (bllInstance == null)
                    {
                        return(Json(ErrorModel.InputError));
                    }

                    var condition = string.IsNullOrEmpty(parameters.Conditions)
                        ? string.Empty
                        : parameters.Conditions.Replace("###", " AND ");

                    var fields = string.IsNullOrEmpty(parameters.Fields)
                        ? null
                        : parameters.Fields.Split(new[] { "###" }, StringSplitOptions.RemoveEmptyEntries);

                    object data;
                    var    type = bllInstance.GetType();
                    if (parameters.PageIndex <= 0 || parameters.PageSize <= 0)
                    {
                        data = type.InvokeMember("QueryList", BindingFlags.InvokeMethod, null, bllInstance,
                                                 new object[] { condition, fields, null, parameters.OrderField, parameters.Desending });
                    }
                    else
                    {
                        data = type.InvokeMember("QueryPageList", BindingFlags.InvokeMethod, null, bllInstance,
                                                 new object[] { parameters.PageIndex, parameters.PageSize, condition, fields, null, parameters.OrderField, parameters.Desending });
                    }

                    return(Json(ErrorModel.GetDataSuccess(data)));
                }
                catch (Exception ex)
                {
                    ExceptionLogBll.ExceptionPersistence(nameof(CommonController), nameof(CommonController), ex);

                    return(Json(ErrorModel.InputError));
                }
            }

            return(Json(ErrorModel.InputError));
        }
Example #9
0
        /// <summary>
        /// 将未经处理的异常信息持久化
        /// </summary>
        /// <param name="filterContext">上下文对象</param>
        public override void OnException(ExceptionContext filterContext)
        {
            var exception = filterContext.Exception;

            ExceptionLogBll.ExceptionPersistence("", "", exception);

            base.OnException(filterContext);

            if (RequestHelper.IsAsyncRequest())
            {
                HttpContext.Current.Response.Write(JsonHelper.Serialize(ErrorModel.InputError));
                HttpContext.Current.Response.End();
            }
            else
            {
                HttpContext.Current.Response.Redirect("/Home/Index");
            }
        }
Example #10
0
 /// <summary>
 /// 开启搜索任务
 /// </summary>
 private static void StartTask()
 {
     Task.Factory.StartNew(() =>
     {
         while (true)
         {
             if (SearchQueue.Count > 0)
             {
                 try
                 {
                     var keyPair  = SearchQueue.Dequeue();
                     var type     = keyPair.Key;
                     var targetId = keyPair.Value;
                     if (type == 1)
                     {
                         SearchForNewFile(targetId);
                     }
                     else
                     {
                         SearchForNewKeywords(targetId);
                     }
                 }
                 catch (Exception ex)
                 {
                     ExceptionLogBll.ExceptionPersistence("SearchHelper.cs", "SearchHelper", ex);
                 }
             }
             else
             {
                 _isTaskRunning = false;
                 using (var fs = new FileStream("D:\\finish.txt", FileMode.OpenOrCreate, FileAccess.Write))
                 {
                     using (var writer = new StreamWriter(fs))
                     {
                         writer.Write("finished");
                     }
                 }
                 break;
             }
         }
     });
 }
Example #11
0
        public JsonResult Upgrade(string version)
        {
            var latest = new AppUpdateBll().QueryAll().LastOrDefault();

            if (latest == null)
            {
                return(Json(ErrorModel.AppNotUpgraded));
            }

            if (string.IsNullOrEmpty(version))
            {
                // 版本号为空且数据库不为空,则返回最新版本信息
                return(Json(ErrorModel.AppUpgraded(latest)));
            }

            // 验证版本号格式
            if (!Regex.IsMatch(version, @"^\d+\.\d+\.\d+\.\d+$"))
            {
                return(Json(ErrorModel.InputError));
            }

            try
            {
                if (version != latest.Version)
                {
                    // 版本号与最新发布的版本号不一致
                    // 说明发布了最新版本
                    return(Json(ErrorModel.AppUpgraded(latest)));
                }

                return(Json(ErrorModel.AppNotUpgraded));
            }
            catch (Exception ex)
            {
                ExceptionLogBll.ExceptionPersistence(nameof(AppController), nameof(AppController), ex);
                return(Json(ErrorModel.InputError));
            }
        }
Example #12
0
        /// <summary>
        /// 处理文件上传
        /// </summary>
        /// <returns>上传成功则返回文件在服务器上的存储信息,否则返回上传失败的提示信息</returns>
        public static object FileUpload()
        {
            var request = HttpContext.Current.Request;

            try
            {
                if (request.Files.Count > 0)
                {
                    var receptFile = request.Files[0];
                    var fileName   = receptFile.FileName;
                    var fileSize   = receptFile.ContentLength / 1024;

                    var fileType = request["fileType"].ToInt32();
                    var savePath = AppSettings.GetFileSavePath(fileType);
                    if (string.IsNullOrEmpty(savePath))
                    {
                        return(ErrorModel.UnknownUploadFileType);
                    }

                    var filePathInfo = new FilePathInfo(fileName, fileSize, savePath);

                    filePathInfo.CreateDirectory();
                    receptFile.SaveAs(filePathInfo.FileAbsolutePath);

                    return(filePathInfo);
                }

                return(ErrorModel.FileUploadFailed);
            }
            catch (Exception ex)
            {
                ExceptionLogBll.ExceptionPersistence("UploadHelper.cs", "UploadHelper", ex);

                return(ErrorModel.FileUploadFailed);
            }
        }