Esempio n. 1
0
        /// <summary>
        /// 在删除文件或者关键字的同时将其对应的搜索结果删除
        /// </summary>
        /// <param name="targetType">
        ///     当此参数为1时,则第二个参数表示TraficFilesId
        ///     当此参数为2时,则第二个参数表示KeywordsId
        /// </param>
        /// <param name="targetId">文件Id或者关键字Id</param>
        private void DeleteSearchResult(int targetType, int targetId)
        {
            string condition;

            switch (targetType)
            {
            case 1:
                condition = $"TraficFileId={targetId}";
                break;

            case 2:
                condition = $"KeywordsId={targetId}";
                break;

            default:
                return;
            }

            var resultBll = new TraficSearchResultBll();
            var list      = resultBll.QueryList(condition, new[] { "Id" }).ToList();

            if (list.Any())
            {
                var idList    = list.Select(item => item.Id);
                var tableName = typeof(TraficSearchResult).Name;

                resultBll.ExecuteTransation(
                    () => resultBll.Delete(condition),
                    () =>
                {
                    DataUpdateLog.BulkUpdate(tableName, idList);
                    return(true);
                });
            }
        }
Esempio n. 2
0
        public JsonResult StationEdit()
        {
            var stationJson = Request["station"];
            var station     = JsonHelper.Deserialize <BaseStation>(stationJson);

            var updateType = station.Id > 0 ? DataUpdateType.Update : DataUpdateType.Insert;

            // 更新车站
            var stationUpdateRes = false;
            var stationBll       = new BaseStationBll();

            if (station.Id > 0)
            {
                stationUpdateRes = stationBll.Update(station);
            }
            else
            {
                var condition = string.Format("StationName='{0}' AND IsDelete=0", station.StationName);
                if (stationBll.Exists(condition))
                {
                    return(Json(ErrorModel.ExistSameItem));
                }

                var insertedStation = stationBll.Insert(station);
                stationUpdateRes = insertedStation.Id > 0;
            }

            // 更新文件
            if (stationUpdateRes)
            {
                // 写入更新记录
                DataUpdateLog.SingleUpdate(typeof(BaseStation).Name, station.Id, updateType);

                var filesJson = Request["files"];
                var files     = JsonHelper.Deserialize <StationFiles[]>(filesJson);
                if (!files.Any())
                {
                    return(Json(ErrorModel.OperateSuccess));
                }

                files.ForEach(f => { f.StationId = station.Id; });

                var filesToInsert = files.Where(f => f.Id == 0);
                var filesBll      = new StationFilesBll();

                var maxId = (int)filesBll.GetMaxId();

                filesBll.BulkInsert(filesToInsert);

                // 写入更新记录
                DataUpdateLog.BulkUpdate(typeof(StationFiles).Name, maxId);

                return(Json(ErrorModel.OperateSuccess));
            }

            return(Json(ErrorModel.OperateFailed));
        }
Esempio n. 3
0
        public JsonResult LineEdit()
        {
            var lineJson = Request["line"];
            var line     = JsonHelper.Deserialize <BaseLine>(lineJson);

            var updateType = line.Id > 0 ? DataUpdateType.Update : DataUpdateType.Insert;

            // 更新线路
            var lineUpdateRes = false;
            var lineBll       = new BaseLineBll();

            if (line.Id > 0)
            {
                lineUpdateRes = lineBll.Update(line);
            }
            else
            {
                var condition = string.Format("LineName='{0}' AND IsDelete=0", line.LineName);
                if (lineBll.Exists(condition))
                {
                    return(Json(ErrorModel.ExistSameItem));
                }

                var insertedLine = lineBll.Insert(line);
                lineUpdateRes = insertedLine.Id > 0;
            }

            // 更新车站
            if (lineUpdateRes)
            {
                // 写入更新记录
                DataUpdateLog.SingleUpdate(typeof(BaseLine).Name, line.Id, updateType);

                var stationsJson = Request["stations"];
                var stations     = JsonHelper.Deserialize <LineStations[]>(stationsJson);
                if (!stations.Any())
                {
                    return(Json(ErrorModel.OperateSuccess));
                }

                stations.ForEach(f => { f.LineId = line.Id; });

                var stationsToInsert = stations.Where(f => f.Id == 0);
                var lineStationsBll  = new LineStationsBll();

                var maxId = (int)lineStationsBll.GetMaxId();

                lineStationsBll.BulkInsert(stationsToInsert);

                // 写入更新记录
                DataUpdateLog.BulkUpdate(typeof(LineStations).Name, maxId);

                return(Json(ErrorModel.OperateSuccess));
            }

            return(Json(ErrorModel.OperateFailed));
        }
Esempio n. 4
0
        public JsonResult Save(string json)
        {
            var list = JsonHelper.Deserialize <List <TrainMoment> >(json);

            if (list == null || !list.Any())
            {
                return(Json(ErrorModel.OperateSuccess));
            }

            // 对列车时刻的更新只存在两种情况
            //  1 某车次的列车时刻第一次添加,此时将所有车站的列车时刻表插入数据库
            //  2 对某车次的某些车站的列车时刻进行更新

            var trainMomentBll = new TrainMomentBll();
            var tableName      = typeof(TrainMoment).Name;

            var isInsert = list[0].Id == 0;

            if (isInsert)
            {
                var maxId = trainMomentBll.GetMaxId();
                trainMomentBll.BulkInsert(list);

                DataUpdateLog.BulkUpdate(tableName, (int)maxId);

                return(Json(ErrorModel.OperateSuccess));
            }

            var success = trainMomentBll.ExecuteTransation(() => {
                foreach (var item in list)
                {
                    if (!trainMomentBll.Update(item))
                    {
                        return(false);
                    }

                    DataUpdateLog.SingleUpdate(tableName, item.Id, DataUpdateType.Update);
                }

                return(true);
            });

            if (success)
            {
                return(Json(ErrorModel.OperateSuccess));
            }

            return(Json(ErrorModel.OperateFailed));
        }
Esempio n. 5
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
            }
        }
Esempio n. 6
0
        public JsonResult SaveTrainNo()
        {
            var trainNoJson = Request["trainNo"];
            var trainNo     = JsonHelper.Deserialize <TrainNo>(trainNoJson);

            if (trainNo == null)
            {
                return(Json(ErrorModel.InputError));
            }

            var updateType = trainNo.Id > 0 ? DataUpdateType.Update : DataUpdateType.Insert;

            var trainNoBll    = new TrainNoBll();
            var updateSuccess = false;

            if (trainNo.Id > 0)
            {
                updateSuccess = trainNoBll.Update(trainNo);
            }
            else
            {
                // 验证是否存在相同的车次
                var condition = string.Format("FullName='{0}' AND IsDelete=0", trainNo.FullName);
                if (trainNoBll.Exists(condition))
                {
                    return(Json(ErrorModel.ExistSameItem));
                }

                var insertedTrainNo = trainNoBll.Insert(trainNo);
                updateSuccess = insertedTrainNo.Id > 0;
            }

            if (!updateSuccess)
            {
                return(Json(ErrorModel.OperateFailed));
            }

            DataUpdateLog.SingleUpdate(typeof(TrainNo).Name, trainNo.Id, updateType);

            var linesJson = Request["lines"];
            var lines     = JsonHelper.Deserialize <TrainNoLine[]>(linesJson);

            if (lines == null || !lines.Any())
            {
                return(Json(ErrorModel.InputError));
            }

            var linesToInsert = lines.Where(line => line.Id == 0).ToArray();

            if (linesToInsert.Any())
            {
                linesToInsert.ForEach(line => { line.TrainNoId = trainNo.Id; });

                var trainNoLineBll = new TrainNoLineBll();
                var maxId          = (int)trainNoLineBll.GetMaxId();

                trainNoLineBll.BulkInsert(linesToInsert);

                DataUpdateLog.BulkUpdate(typeof(TrainNoLine).Name, maxId);
            }

            return(Json(ErrorModel.OperateSuccess));
        }
Esempio n. 7
0
        /// <summary>
        /// 删除目录,将在事务环境中执行以下操作
        ///  1. 删除此目录及所有子目录
        ///  2. 删除此目录及所有子目录下的文件
        ///  3. 删除此与此目录下所有文件关联的关键字搜索结果数据
        ///  4. 将操作同步到DbUpdateLog表中
        ///  5. 将操作日志记录到OperateLog表中
        /// </summary>
        /// <param name="id">待删除的目录Id</param>
        /// <returns></returns>
        private bool DeleteDirectoryAndChildren(int id)
        {
            var dirBll    = new TraficFileTypeBll();
            var dirList   = dirBll.QueryList("IsDelete=0", new[] { nameof(TraficFileType.Id), nameof(TraficFileType.ParentId), nameof(TraficFileType.TypeName) }).ToList();
            var deleteDir = dirList.Find(dir => dir.Id == id);

            if (deleteDir == null)
            {
                return(false);
            }

            var fileBll  = new TraficFilesBll();
            var fileList = fileBll.QueryList("IsDelete=0", new[] { nameof(TraficFiles.Id), nameof(TraficFiles.TypeId) }).ToList();

            // 所有待删除的目录Id
            var dirDeleteIdList = new List <int> {
                id
            };

            FindChildDirIds(dirList, id, dirDeleteIdList);

            // 所有待删除的文件Id
            var fileDeleteIdList = fileList.Where(file => dirDeleteIdList.Contains(file.TypeId)).Select(file => file.Id).ToList();

            // 所有待删除的搜索结果Id
            var searchBll    = new TraficSearchResultBll();
            var searchSql    = $"TraficFileId IN({string.Join(",", fileDeleteIdList.Count == 0 ? new List<int> { 0 } : fileDeleteIdList)})"; // 不能让sql语句中IN()中的字符串为空
            var searchIdList = searchBll.QueryList(searchSql, new[] { nameof(TraficSearchResult.Id) })
                               .Select(item => item.Id).ToList();

            // 操作日志
            var log = $"删除了目录[{deleteDir.TypeName}]及其所有的子目录和子文件";

            // 准备sql语句
            var dirDeleteSql    = $"UPDATE TraficFileType SET IsDelete=1 WHERE Id IN({string.Join(",", dirDeleteIdList)})";
            var fileDeleteSql   = $"UPDATE TraficFiles SET IsDelete=1 WHERE Id IN({string.Join(",", fileDeleteIdList)})";
            var searchDeleteSql = $"DELETE FROM TraficSearchResult WHERE TraficFileId IN({string.Join(",", fileDeleteIdList)})";

            // 准备执行委托
            var         logBll                = new OperateLogBll();
            var         loginUser             = LoginStatus.GetLoginId();
            Func <bool> deleteDirs            = () => dirBll.ExecuteSql(dirDeleteSql) == dirDeleteIdList.Count;
            Func <bool> deleteFiles           = () => fileDeleteIdList.Count == 0 ? true : fileBll.ExecuteSql(fileDeleteSql) == fileDeleteIdList.Count;
            Func <bool> deleleSearch          = () => searchIdList.Count == 0 ? true : searchBll.ExecuteSql(searchDeleteSql) == searchIdList.Count;
            Func <bool> insertDirUpdateLog    = () => { DataUpdateLog.BulkUpdate(nameof(TraficFileType), dirDeleteIdList, DataUpdateType.Delete); return(true); };
            Func <bool> insertFileUpdateLog   = () => { DataUpdateLog.BulkUpdate(nameof(TraficFiles), fileDeleteIdList, DataUpdateType.Delete); return(true); };
            Func <bool> insertSearchUpdateLog = () => { DataUpdateLog.BulkUpdate(nameof(TraficSearchResult), searchIdList, DataUpdateType.Delete); return(true); };
            Func <bool> insertOperateLog      = () => logBll.Add(nameof(TraficFileType), id, DataUpdateType.Delete, loginUser, log);

            // 执行事务
            var success = dirBll.ExecuteTransation(
                deleteDirs,
                deleteFiles,
                deleleSearch,
                insertDirUpdateLog,
                insertFileUpdateLog,
                insertSearchUpdateLog,
                insertOperateLog
                );

            return(success);
        }