From b80a3aa37ac5bed12dd6c49e9e731d5f375f80d9 Mon Sep 17 00:00:00 2001 From: 移动系统liao <liaoxujun@qq.com> Date: 星期四, 26 十二月 2024 09:55:01 +0800 Subject: [PATCH] 增加sw文档关闭配置 --- DocumentServiceAPI.Application/DocManage/DocumentManageAppService.cs | 630 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 550 insertions(+), 80 deletions(-) diff --git a/DocumentServiceAPI.Application/DocManage/DocumentManageAppService.cs b/DocumentServiceAPI.Application/DocManage/DocumentManageAppService.cs index fd87b88..d1486e9 100644 --- a/DocumentServiceAPI.Application/DocManage/DocumentManageAppService.cs +++ b/DocumentServiceAPI.Application/DocManage/DocumentManageAppService.cs @@ -1,8 +1,12 @@ 锘縰sing DocumentServiceAPI.Application.DocManage.Dtos; using DocumentServiceAPI.Application.DocManage.Services; +using DocumentServiceAPI.Application.ProjectInfo.Services; using DocumentServiceAPI.Application.System.Services; using DocumentServiceAPI.Model.cyDocumentModel; +using DocumentServiceAPI.Services.IService; using DocumentServiceAPI.Utility; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Caching.Memory; using System.Linq.Expressions; namespace DocumentServiceAPI.Application.DocManage @@ -16,15 +20,103 @@ private readonly DocumentManageService _docManageService; private readonly OrganizationService _organizationService; private readonly FileManageService _fileManageService; + private readonly ProjectManageService _projectService; + private readonly DocAchievementService _achievementService; + private readonly IRedisCacheService _redisCache; - - - public DocumentManageAppService(DocClassificationService classService, DocumentManageService docService, OrganizationService orgService,FileManageService fileManageService) + public DocumentManageAppService(DocClassificationService classService, DocumentManageService docService, OrganizationService orgService, + FileManageService fileManageService, ProjectManageService projectService, DocAchievementService achievementService, IRedisCacheService redisCase) { _classificationService = classService; _docManageService = docService; _organizationService = orgService; _fileManageService = fileManageService; + _projectService = projectService; + _achievementService = achievementService; + + _redisCache = redisCase; + } + + /// <summary> + /// 缂栬緫鏂囨。鏃惰缃枃妗i攣瀹氱姸鎬� + /// </summary> + /// <param name="model"></param> + /// <returns> + /// true:璁剧疆閿佸畾鎴愬姛 + /// false:閿佸畾澶辫触锛屾枃妗e凡琚攣瀹� + /// </returns> + public bool SetDocLockStatus(DocLock_Submit_Dto model) + { + bool msg = true; + string key = model.tenant_id.ToString().PadLeft(4,'0') + "_" + model.id.ToString().PadLeft(8,'0'); + if (_redisCache.Get<Document_Lock_Dto>(key) != null) + { + msg = false; + } + else + { + Document_Lock_Dto lk = new Document_Lock_Dto(); + lk.doc_id = model.id; + lk.lock_time = DateTime.Now; + lk.lock_user = model.username; + lk.lock_user_id = model.userid; + lk.status = 0; + lk.tenant_id = model.tenant_id; + + var db= _redisCache.Add<Document_Lock_Dto>(key,lk ,-1); + } + return msg; + } + + /// <summary> + /// 鏌ヨ椤圭洰淇℃伅 + /// </summary> + /// <param name="search"></param> + /// <returns></returns> + public async Task<IActionResult> PostProjectItemList(ProjectItemSearch search) + { + var data = await _projectService.GetListAsync();//.GetListAsync(c => c.TenantID == search.tenant_id); + if (data != null) + { + var list = data.Select(c => new ProjectItem_List_Dto() + { + pro_id=c.ProjectId, + pro_name=c.ProjectName + }).OrderBy(c => c.pro_name).ToList(); + return new JsonResult(list); + } + + return null; + } + + /// <summary> + /// 鏍规嵁鏂囨。绫诲瀷鏌ヨ鏂囨。鍒楄〃 + /// </summary> + /// <param name="search"></param> + /// <returns></returns> + public async Task<IActionResult> PostDocumentItemList(DocumentSearch search) + { + if(search.Code == "002") + { + var data = await _achievementService.GetListAsync(c => c.status == 1 && c.tenant_code == search.TenantID); + if (search.class_id > 0) + { + data = data.Where(c => c.classification_id == search.class_id).ToList(); + } + + return new JsonResult(data.OrderBy(x => x.sort).Select(c => new { name = c.achievement_name, idcode = c.id+ "/002" }).ToList()); + } + else + { + var data = await _docManageService.GetListAsync(c => c.status == 1 && c.is_del == false && c.doc_code == search.Code && c.org_id == search.TenantID); + if (search.class_id > 0) + { + data = data.Where(c => c.classification_id == search.class_id).ToList(); + } + + return new JsonResult(data.OrderBy(x => x.sort).Select(c => new { name = c.doc_name , idcode = c.id + "/" + c.doc_code }).ToList()); + } + } /// <summary> @@ -35,7 +127,22 @@ public async Task<bool> CheckNameDuplicate(Document_Submit_Dto model) { var msg = false; - var ck =await _docManageService.GetFirstAsync(c=>c.doc_name==model.name && c.doc_code==model.code && c.classification_id==model.class_id && c.id!=model.id); + Expression<Func<Doc_Info, bool>> expression = t => true; + expression = expression.And(c => c.tenant_code == model.tenant_id && c.doc_name == model.name && c.doc_code == model.code && c.is_del == false ); + if (model.class_id.HasValue && model.class_id!=0) + { + expression = expression.And(t => t.classification_id == model.class_id); + } + if (model.project_id.HasValue && model.project_id != 0) + { + expression = expression.And(t => t.project_id == model.project_id); + } + + if (model.id > 0) + { + expression = expression.And(t => t.id != model.id); + } + var ck =await _docManageService.GetFirstAsync(expression); if (ck != null) { msg = true; @@ -56,7 +163,7 @@ { Expression<Func<Doc_Info, bool>> expression = t => true; - expression = expression.And(t => t.doc_code == page.Code && t.is_del==false); + expression = expression.And(t =>t.tenant_code==page.TenantID && t.doc_code == page.Code && t.is_del==false); if (page.ClassCode.HasValue) { expression = expression.And(t => t.classification_id == page.ClassCode); @@ -77,7 +184,9 @@ var data = await _docManageService.Context.Queryable<Doc_Info>() .Includes(c => c.DocClassification) .Includes(c=>c.DocOrganization) + .Includes(c=>c.DocProject) .Where(expression) + .OrderBy(c=>c.sort) .ToPageListAsync(page.PageIndex, page.PageSize, total); if (data != null && total > 0) @@ -90,10 +199,11 @@ doc_name = c.doc_name, id = c.id, org_id = c.org_id, - org_name = c.DocOrganization.UnitName, + org_name = c.DocOrganization?.UnitName, project_id = c.project_id, - project_name = "", - status = c.status + project_name = c.DocProject?.ProjectName, + status = c.status, + sort = c.sort, }).ToList(); } @@ -107,6 +217,24 @@ } return new JsonResult(result); + } + + /// <summary> + /// 鏍规嵁鏂囨。鍙锋煡璇� + /// </summary> + /// <param name="search"></param> + /// <returns></returns> + public async Task<IActionResult> PostDocumentInfo(DocumentSearch search) + { + var data = await _docManageService.GetFirstAsync(c => c.is_del == false && c.id == search.ID && c.tenant_code==search.TenantID); + if (data != null) + { + var list = await _fileManageService.GetListAsync(c =>c.status==1 && c.doc_id == search.ID); + Document_Info_Dto info = new Document_Info_Dto(data, list.Select(c => new FileInfo_List_Dto(c)).OrderBy(c => c.sort).ToList()); + return new JsonResult(info); + } + + return null; } /// <summary> @@ -127,13 +255,14 @@ doc.org_id = info.org_id; doc.status = info.status; doc.tenant_code = info.tenant_id; - + doc.sort = info.sort; + var id =await _docManageService.InsertReturnIdentityAsync(doc); if (id > 0) { - if(info.files!=null&& info.files.Count > 0) + if(info.newfiles!=null&& info.newfiles.Count > 0) { - foreach (var item in info.files) + foreach (var item in info.newfiles) { File_Info file = new File_Info(); file.doc_id = id; @@ -148,6 +277,7 @@ file.uptime = DateTime.Now; file.up_userid = item.up_userid; file.up_username = item.up_username; + file.sort = item.sort; await _fileManageService.InsertAsync(file); } } @@ -156,45 +286,90 @@ return msg; } - - - - - /// <summary> - /// 鏍规嵁绫诲瀷鏌ヨ鏁版嵁 - /// </summary> - /// <param name="page"></param> - /// <returns></returns> - public async Task<IActionResult> PostItemList(DocClassificationSearch page) - { - var data = await _classificationService.GetListAsync(c => c.status == 1 && c.parent_code == page.Code); - return new JsonResult(data); - } - - /// <summary> /// 淇敼鏁版嵁 /// </summary> /// <param name="info"></param> /// <returns></returns> - public async Task<IActionResult> PostEdtInfo(Classification_Submit_Dto info) + public async Task<bool> PostEdtDocumentInfo(Document_Submit_Dto info) { - var msg = false; - var model = await _classificationService.GetByIdAsync(info.id); - if (model != null) - { - model.add_time = DateTime.Now; - model.doc_classification = info.name; - model.status = info.status; + bool msg = false; - msg = await _classificationService.UpdateAsync(model); + var doc= _docManageService.GetById(info.id); + if (info.tenant_id == doc.tenant_code && doc.is_del==false) + { + doc.add_time = DateTime.Now; + doc.classification_id = info.class_id; + doc.doc_name = info.name; + doc.org_id = info.org_id; + doc.status = info.status; + doc.sort = info.sort; + if (await _docManageService.UpdateAsync(doc)) + { + //鏂版彁浜ょ殑鏂囦欢 + if (info.newfiles != null && info.newfiles.Count > 0) + { + foreach (var item in info.newfiles) + { + File_Info file = new File_Info(); + file.doc_id = doc.id; + file.filenewname = item.filenewname.Length > 40 ? item.filenewname.Substring(item.filenewname.Length - 40) : item.filenewname; + file.fileoldname = item.fileoldname.Length > 40 ? item.fileoldname.Substring(item.fileoldname.Length - 40) : item.fileoldname; + file.filepath = item.filepath; + file.fileservername = item.fileservername; + file.filesize = item.filesize; + file.filetype = item.filetype; + file.status = 1; + file.suffix = item.suffix; + file.uptime = DateTime.Now; + file.up_userid = item.up_userid; + file.up_username = item.up_username; + file.sort = item.sort; + await _fileManageService.InsertAsync(file); + } + } + + //淇敼璧勬簮鍚嶇О鐨勬枃浠� + if (info.editfiles != null && info.editfiles.Count > 0) + { + foreach (var item in info.editfiles) + { + var file= _fileManageService.GetById(item.id); + if (file != null && file.doc_id==doc.id) + { + file.fileoldname = file.filenewname; + file.filenewname = item.filenewname.Length > 40 ? item.filenewname.Substring(item.filenewname.Length - 40) : item.filenewname; + file.uptime = DateTime.Now; + file.sort = item.sort; + await _fileManageService.UpdateAsync(file); + } + } + } + + //鍒犻櫎璧勬簮 + if (info.delfiles != null && info.delfiles.Count > 0) + { + foreach (var item in info.delfiles) + { + var file = _fileManageService.GetById(item); + if (file != null && file.doc_id == doc.id) + { + file.status = 0; + file.uptime = DateTime.Now; + await _fileManageService.UpdateAsync(file); + } + } + } + + msg = true; + } } - return new JsonResult(msg); + return msg; } /// <summary> - /// 鍒犻櫎鏁版嵁 + /// 鍒犻櫎鏂囨。鏁版嵁 /// </summary> /// <param name="doc"></param> /// <returns></returns> @@ -214,69 +389,364 @@ return new JsonResult(msg); } + #region 鏂囨。鐨勬枃浠� + /// <summary> + /// 鏍规嵁鏂囨。鍙锋煡璇㈡枃浠舵暟鎹� + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + public async Task<IActionResult> GetDocumentFilesList(int id,string code) + { + if (code == "002") + { + var data = await _achievementService.GetByIdAsync(id); + List<FileInfo_List_Dto> list_Dtos = new List<FileInfo_List_Dto> (); + if (data != null) + { + if (!string.IsNullOrEmpty(data.zbtzs_url)) + { + FileInfo_List_Dto fileInfo_List_Dto = new FileInfo_List_Dto(); + fileInfo_List_Dto.filePath = data.zbtzs_url; + fileInfo_List_Dto.fileNewName = "涓爣閫氱煡涔�"; + fileInfo_List_Dto.suffix = Path.GetExtension(data.zbtzs_url); + list_Dtos.Add(fileInfo_List_Dto); + } + + if (!string.IsNullOrEmpty(data.ht_url)) + { + FileInfo_List_Dto fileInfo_List_Dto = new FileInfo_List_Dto(); + fileInfo_List_Dto.filePath = data.ht_url; + fileInfo_List_Dto.fileNewName = "鍚堝悓"; + fileInfo_List_Dto.suffix = Path.GetExtension(data.ht_url); + list_Dtos.Add(fileInfo_List_Dto); + } + + if (!string.IsNullOrEmpty(data.ysbg_url)) + { + FileInfo_List_Dto fileInfo_List_Dto = new FileInfo_List_Dto(); + fileInfo_List_Dto.filePath = data.ysbg_url; + fileInfo_List_Dto.fileNewName = "楠屾敹鎶ュ憡"; + fileInfo_List_Dto.suffix = Path.GetExtension(data.ysbg_url); + list_Dtos.Add(fileInfo_List_Dto); + } + + if (!string.IsNullOrEmpty(data.fkpz_url)) + { + FileInfo_List_Dto fileInfo_List_Dto = new FileInfo_List_Dto(); + fileInfo_List_Dto.filePath = data.fkpz_url; + fileInfo_List_Dto.fileNewName = "浠樻鍑瘉"; + fileInfo_List_Dto.suffix = Path.GetExtension(data.fkpz_url); + list_Dtos.Add(fileInfo_List_Dto); + } + + if (!string.IsNullOrEmpty(data.yhpj_url)) + { + FileInfo_List_Dto fileInfo_List_Dto = new FileInfo_List_Dto(); + fileInfo_List_Dto.filePath = data.yhpj_url; + fileInfo_List_Dto.fileNewName = "鐢ㄦ埛璇勪环"; + fileInfo_List_Dto.suffix = Path.GetExtension(data.yhpj_url); + list_Dtos.Add(fileInfo_List_Dto); + } + + if (!string.IsNullOrEmpty(data.hjzs_url)) + { + FileInfo_List_Dto fileInfo_List_Dto = new FileInfo_List_Dto(); + fileInfo_List_Dto.filePath = data.hjzs_url; + fileInfo_List_Dto.fileNewName = "鑾峰璇佷功"; + fileInfo_List_Dto.suffix = Path.GetExtension(data.hjzs_url); + list_Dtos.Add(fileInfo_List_Dto); + } + + } + + + + return new JsonResult(list_Dtos); + } + else + { + var data = await _fileManageService.GetListAsync(c => c.status == 1 && c.doc_id == id); + + var list = data.Select(c => new FileInfo_List_Dto(c)).OrderBy(c => c.sort).ToList(); + + return new JsonResult(list); + } + + + } + + #endregion + + #region 涓氱哗绠$悊 + + /// <summary> + /// 鏍规嵁鍒嗛〉鏉′欢鏌ヨ鍒嗛〉鏁版嵁 + /// </summary> + /// <param name="page"></param> + /// <returns></returns> + public async Task<IActionResult> PostAchievementListPage(DocumentPageSearch page) + { + PageResult<Achievement_List_Dto> result = new PageResult<Achievement_List_Dto>(); + + try + { + Expression<Func<Doc_Achievement, bool>> expression = t => true; + + expression = expression.And(t => t.tenant_code == page.TenantID && t.status == 1); + if (page.ClassCode.HasValue) + { + expression = expression.And(t => t.classification_id == page.ClassCode); + } + if (!string.IsNullOrEmpty(page.Name)) + { + expression = expression.And(t => t.achievement_name.Contains(page.Name)); + } + if (page.zbtzs.HasValue) + { + if (page.zbtzs == 1) + { + expression = expression.And(t => t.zbtzs_url != null); + } + else + { + expression = expression.And(t => t.zbtzs_url == null); + } + + } + if (page.ht.HasValue) + { + if (page.ht == 1) + { + expression = expression.And(t => t.ht_url != null); + } + else + { + expression = expression.And(t => t.ht_url == null); + } + + } + + if (page.ysbg.HasValue) + { + if (page.ysbg == 1) + { + expression = expression.And(t => t.ysbg_url != null); + } + else + { + expression = expression.And(t => t.ysbg_url == null); + } + + } + + if (page.fkpz.HasValue) + { + if (page.fkpz == 1) + { + expression = expression.And(t => t.fkpz_url != null); + } + else + { + expression = expression.And(t => t.fkpz_url == null); + } + + } + + if (page.yhpj.HasValue) + { + if (page.yhpj == 1) + { + expression = expression.And(t => t.yhpj_url != null); + } + else + { + expression = expression.And(t => t.yhpj_url == null); + } + + } + + if (page.hjzs.HasValue) + { + if (page.hjzs == 1) + { + expression = expression.And(t => t.hjzs_url != null); + } + else + { + expression = expression.And(t => t.hjzs_url == null); + } + + } + + RefAsync<int> total = 0; + var data = await _achievementService.Context.Queryable<Doc_Achievement>() + .Includes(c => c.DocClassification) + .Includes(c => c.DocProject) + .Where(expression) + .OrderBy(c => c.sort) + .ToPageListAsync(page.PageIndex, page.PageSize, total); + + if (data != null && total > 0) + { + result.Items = data.Select(c => new Achievement_List_Dto() + { + add_time = c.add_time, + class_id=c.classification_id, + class_name = c.DocClassification?.doc_classification, + id = c.id, + project_id = c.project_id, + project_name = c.achievement_name,//c.DocProject?.ProjectName, + fkpz=c.fkpz_url, + hjzs=c.hjzs_url, + ht=c.ht_url, + yhpj=c.yhpj_url, + ysbg=c.ysbg_url, + zbtzs=c.zbtzs_url, + status = c.status, + sort = c.sort, + }).ToList(); + + } + result.PageIndex = page.PageIndex; + result.PageSize = page.PageSize; + result.TotalCount = total; + } + catch (Exception er) + { + Log.Error(er.Message, er); + } + + return new JsonResult(result); + } + + /// <summary> + /// 妫�鏌ラ噸澶� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public async Task<bool> CheckDocAchievementDuplicate(Document_Submit_Dto model) + { + var msg = false; + var ck = await _achievementService.GetFirstAsync(c=>c.status==1 && c.tenant_code==model.tenant_id + && c.achievement_name==model.name && c.classification_id==c.classification_id); + if (ck != null) + { + if(model.id>0 && model.id != ck.id) + { + msg = true; + } + else + { + msg = false; + } + + } + return msg; + } /// <summary> /// 娣诲姞鏁版嵁 /// </summary> /// <param name="info"></param> /// <returns></returns> - public async Task<IActionResult> PostAddFilesInfo(Classification_Submit_Dto info) + public async Task<bool> PostAddDocAchievement(Achievement_Submit_Dto info) { - Doc_Classification doc = new Doc_Classification(); - doc.add_time = DateTime.Now; - doc.doc_classification = info.name; - doc.doc_classification_code = ""; - doc.is_system = false; - doc.parent_code = info.code; - doc.sort_id = 99; - doc.status = info.status; - doc.tenant_code = info.tenant_id; - - var msg = await _classificationService.InsertAsync(doc); - return new JsonResult(msg); - } - - /// <summary> - /// 淇敼鏁版嵁 - /// </summary> - /// <param name="info"></param> - /// <returns></returns> - public async Task<IActionResult> PostEdtFileInfo(Classification_Submit_Dto info) - { - var msg = false; - var model = await _classificationService.GetByIdAsync(info.id); - if (model != null) + if (info.id > 0) { - model.add_time = DateTime.Now; - model.doc_classification = info.name; - model.status = info.status; + Doc_Achievement doc = new Doc_Achievement(); + doc.id = info.id; + doc.add_time = DateTime.Now; + doc.classification_id = info.class_id; + doc.project_id = info.project_id; + doc.achievement_name = info.name; - msg = await _classificationService.UpdateAsync(model); + doc.fkpz_url = info.fkpz; + doc.hjzs_url = info.hjzs; + doc.ht_url = info.ht; + doc.yhpj_url = info.yhpj; + doc.ysbg_url = info.ysbg; + doc.zbtzs_url = info.zbtzs; + + doc.status = 1; + doc.tenant_code = info.tenant_id; + doc.sort = info.sort; + return await _achievementService.UpdateAsync(doc); } + else + { + Doc_Achievement doc = new Doc_Achievement(); + doc.add_time = DateTime.Now; + doc.classification_id = info.class_id; + doc.project_id = info.project_id; + doc.achievement_name = info.name; - return new JsonResult(msg); + doc.fkpz_url = info.fkpz; + doc.hjzs_url = info.hjzs; + doc.ht_url = info.ht; + doc.yhpj_url = info.yhpj; + doc.ysbg_url = info.ysbg; + doc.zbtzs_url = info.zbtzs; + + doc.status = 1; + doc.tenant_code = info.tenant_id; + doc.sort = info.sort; + + return await _achievementService.InsertAsync(doc); + } + } + + /// <summary> - /// 鍒犻櫎鏁版嵁 + /// 鍒犻櫎鏂囨。鏁版嵁 /// </summary> /// <param name="doc"></param> /// <returns></returns> - public async Task<IActionResult> PostDelFileInfo(Document_Submit_Dto doc) + public async Task<IActionResult> PostDelAchievement(Achievement_Submit_Dto doc) { bool msg = false; - //鍋囧垹闄� - var model = await _docManageService.GetByIdAsync(doc.id); - if (model != null) - { - if (model.tenant_code == doc.tenant_id && !model.is_del) - { - model.is_del = true; - msg = await _docManageService.UpdateAsync(model); - } - } + var sss = new Doc_Achievement(); + sss.id = doc.id; + + msg = await _achievementService.DeleteAsync(sss); return new JsonResult(msg); } + + + /// <summary> + /// 鏍规嵁鏂囨。鍙锋煡璇� + /// </summary> + /// <param name="search"></param> + /// <returns></returns> + public async Task<IActionResult> PostAchievementInfo(DocumentSearch search) + { + var data = await _achievementService.GetFirstAsync(c => c.id == search.ID && c.tenant_code == search.TenantID); + if (data != null) + { + Achievement_Submit_Dto achievement_Submit_Dto = new Achievement_Submit_Dto(); + achievement_Submit_Dto.id = data.id; + achievement_Submit_Dto.class_id = data.classification_id.Value; + //achievement_Submit_Dto.project_id = data.project_id.Value; + achievement_Submit_Dto.name = data.achievement_name; + achievement_Submit_Dto.zbtzs = data.zbtzs_url; + achievement_Submit_Dto.ht = data.ht_url; + achievement_Submit_Dto.ysbg = data.ysbg_url; + achievement_Submit_Dto.fkpz = data.fkpz_url; + achievement_Submit_Dto.yhpj = data.yhpj_url; + achievement_Submit_Dto.hjzs = data.hjzs_url; + achievement_Submit_Dto.tenant_id = data.tenant_code; + achievement_Submit_Dto.status = data.status; + achievement_Submit_Dto.sort = data.sort; + + + return new JsonResult(achievement_Submit_Dto); + } + + return null; + } + + #endregion } } -- Gitblit v1.9.1