username@email.com
2023-10-17 3f4013e9283d1fe29ef40cc8b4d7ee7a590a1590
DocumentServiceAPI.Application/DocManage/DocumentManageAppService.cs
@@ -1,9 +1,12 @@
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
@@ -17,13 +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>
        /// 编辑文档时设置文档锁定状态
        /// </summary>
        /// <param name="model"></param>
        /// <returns>
        ///  true:设置锁定成功
        ///  false:锁定失败,文档已被锁定
        /// </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,11 +128,16 @@
        {
            var msg = false;
            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 );
            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);
@@ -86,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)
@@ -101,8 +201,9 @@
                        org_id = c.org_id,
                        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();
                }
@@ -154,7 +255,8 @@
            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)
            {
@@ -201,7 +303,7 @@
                doc.doc_name = info.name;
                doc.org_id = info.org_id;
                doc.status = info.status;
                doc.sort = info.sort;
                if (await _docManageService.UpdateAsync(doc))
                {
                    //新提交的文件
@@ -294,12 +396,355 @@
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<IActionResult> GetDocumentFilesList(int id)
        public async Task<IActionResult> GetDocumentFilesList(int id,string code)
        {
            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();
            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);
                    }
            return new JsonResult(list);
                    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<bool> PostAddDocAchievement(Achievement_Submit_Dto info)
        {
            if (info.id > 0)
            {
                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;
                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;
                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> PostDelAchievement(Achievement_Submit_Dto doc)
        {
            bool msg = false;
           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