using 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 { /// /// 资料管理 /// public class DocumentManageAppService : IDynamicApiController { private readonly DocClassificationService _classificationService; private readonly DocumentManageService _docManageService; private readonly OrganizationService _organizationService; private readonly FileManageService _fileManageService; private readonly ProjectManageService _projectService; private readonly IRedisCacheService _redisCache; public DocumentManageAppService(DocClassificationService classService, DocumentManageService docService, OrganizationService orgService, FileManageService fileManageService, ProjectManageService projectService, IRedisCacheService redisCase) { _classificationService = classService; _docManageService = docService; _organizationService = orgService; _fileManageService = fileManageService; _projectService = projectService; _redisCache = redisCase; } /// /// 编辑文档时设置文档锁定状态 /// /// /// /// true:设置锁定成功 /// false:锁定失败,文档已被锁定 /// 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(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(key,lk ,-1); } return msg; } /// /// 查询项目信息 /// /// /// public async Task 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; } /// /// 检查名称重复 /// /// /// public async Task CheckNameDuplicate(Document_Submit_Dto model) { var msg = false; Expression> expression = t => true; expression = expression.And(c => c.tenant_code == model.tenant_id && c.doc_name == model.name && c.doc_code == model.code ); 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; } return msg; } /// /// 根据分页条件查询分页数据 /// /// /// public async Task PostListPage(DocumentPageSearch page) { PageResult result = new PageResult(); try { Expression> expression = t => true; 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); } if (!string.IsNullOrEmpty(page.Name)) { expression = expression.And(t => t.doc_name.Contains(page.Name)); } if (page.Status.HasValue) { expression = expression.And(t => t.status == page.Status); } if (page.OrganizationCode.HasValue) { expression = expression.And(t => t.org_id == page.OrganizationCode); } RefAsync total = 0; var data = await _docManageService.Context.Queryable() .Includes(c => c.DocClassification) .Includes(c=>c.DocOrganization) .Includes(c=>c.DocProject) .Where(expression) .OrderByDescending(c=>c.id) .ToPageListAsync(page.PageIndex, page.PageSize, total); if (data != null && total > 0) { result.Items = data.Select(c => new Document_List_Dto() { add_time = c.add_time, class_id = c.classification_id, class_name = c.DocClassification?.doc_classification, doc_name = c.doc_name, id = c.id, org_id = c.org_id, org_name = c.DocOrganization?.UnitName, project_id = c.project_id, project_name = c.DocProject?.ProjectName, status = c.status }).ToList(); } result.PageIndex = page.PageIndex; result.PageSize = page.PageSize; result.TotalCount = total; } catch (Exception er) { Log.Error(er.Message, er); } return new JsonResult(result); } /// /// 根据文档号查询 /// /// /// public async Task 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; } /// /// 添加数据 /// /// /// public async Task PostAddDocumentInfo(Document_Submit_Dto info) { bool msg = false; Doc_Info doc = new Doc_Info(); doc.add_time = DateTime.Now; doc.classification_id = info.class_id; doc.doc_code = info.code; doc.doc_name = info.name; doc.is_del = false; doc.org_id = info.org_id; doc.status = info.status; doc.tenant_code = info.tenant_id; var id =await _docManageService.InsertReturnIdentityAsync(doc); if (id > 0) { if(info.newfiles!=null&& info.newfiles.Count > 0) { foreach (var item in info.newfiles) { File_Info file = new File_Info(); file.doc_id = 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); } } msg = true; } return msg; } /// /// 修改数据 /// /// /// public async Task PostEdtDocumentInfo(Document_Submit_Dto info) { bool msg = false; 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; 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 msg; } /// /// 删除文档数据 /// /// /// public async Task PostDelInfo(Document_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); } } return new JsonResult(msg); } #region 文档的文件 /// /// 根据文档号查询文件数据 /// /// /// public async Task GetDocumentFilesList(int id) { 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 } }