/// <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); }); } }
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)); }
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)); }
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)); }
/// <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 } }
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)); }
/// <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); }