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
}
}