410 lines
21 KiB
C#
410 lines
21 KiB
C#
using APT.BaseData.Domain.Entities;
|
||
using APT.BaseData.Domain.Entities.FM;
|
||
using APT.BaseData.Domain.Enums;
|
||
using APT.BaseData.Domain.Enums.PF;
|
||
using APT.BaseData.Domain.IServices;
|
||
using APT.BaseData.Domain.IServices.FM;
|
||
using APT.BaseData.Services.Services.FM;
|
||
using APT.Infrastructure.Core;
|
||
using APT.MS.Domain.Entities.FO;
|
||
using APT.MS.Domain.Entities.HM;
|
||
using APT.MS.Domain.Enums;
|
||
using APT.Utility;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
|
||
namespace APT.HM.WebApi.Controllers.Api
|
||
{
|
||
/// <summary>
|
||
/// 文件发布表
|
||
/// </summary>
|
||
[Route("api/HM/HMFilePublish")]
|
||
public partial class FilePublishController : AuthorizeApiController<T_HM_FILE_PUBLISH>
|
||
{
|
||
IPFCodeRuleService CodeRuleService { get; set; }
|
||
IFMNotificationTaskService NotificationTaskService { get; set; }
|
||
IFMDepartmentService DepartmentService { get; set; }
|
||
/// <summary>
|
||
/// 作业任务分析
|
||
/// </summary>
|
||
public FilePublishController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService)
|
||
{
|
||
CodeRuleService = codeRuleService;
|
||
NotificationTaskService = notificationTaskService;
|
||
DepartmentService = departmentService;
|
||
}
|
||
/// <summary>
|
||
/// 获取
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("GetEdit")]
|
||
public JsonActionResult<T_HM_FILE_PUBLISH> GetEdit([FromBody] KeywordFilter filter)
|
||
{
|
||
return SafeExecute(() => {
|
||
T_HM_FILE_PUBLISH main = new T_HM_FILE_PUBLISH();
|
||
var id = filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID").Value.ToString();
|
||
if (!string.IsNullOrEmpty(id))
|
||
{
|
||
var entity = this.GetEntity<T_HM_FILE_PUBLISH>(id,new string[] { "Nav_User", "Nav_User.Nav_Department", "Nav_Area", "Nav_Area.Nav_Department", "Nav_LicenseAnalysis", "Nav_LicenseAnalysis.Nav_Details", "Nav_LicenseAnalysis.Nav_Details.Nav_Area", "Nav_LicenseAnalysis.Nav_Details.Nav_OperationStep", "Nav_LicenseAnalysis.Nav_Details.Nav_DetailRisk",
|
||
"Nav_LicenseAnalysis.Nav_Details.Nav_WorkPermitType", "Nav_LicenseAnalysis.Nav_Details.Nav_DetailRisk.Nav_EvaluateRisk",
|
||
"Nav_LicenseAnalysis.Nav_Details.Nav_Files","Nav_LicenseAnalysis.Nav_Details.Nav_Files.Nav_ImgFile", "Nav_LicenseAnalysis.Nav_Details.Nav_Files.Nav_ImgFile",
|
||
"Nav_CrucialTaskAnalysis", "Nav_CrucialTaskAnalysis.Nav_Details", "Nav_CrucialTaskAnalysis.Nav_Details.Nav_Area", "Nav_CrucialTaskAnalysis.Nav_Details.Nav_OperationStep", "Nav_CrucialTaskAnalysis.Nav_Details.Nav_DetailRisk",
|
||
"Nav_CrucialTaskAnalysis.Nav_Details.Nav_DetailRisk.Nav_EvaluateRisk",
|
||
"Nav_CrucialTaskAnalysis.Nav_Details.Nav_Files","Nav_CrucialTaskAnalysis.Nav_Details.Nav_Files.Nav_ImgFile","Nav_CrucialTaskAnalysis.Nav_Details.Nav_Files.Nav_ImgFile",
|
||
"Nav_OrdinaryTaskAnalysis", "Nav_OrdinaryTaskAnalysis.Nav_Details", "Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_Area", "Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_OperationStep", "Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_DetailRisk",
|
||
"Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_DetailRisk.Nav_EvaluateRisk",
|
||
"Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_Files","Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_Files.Nav_ImgFile", "Nav_OrdinaryTaskAnalysis.Nav_Details.Nav_Files.Nav_ImgFile"
|
||
});
|
||
if (entity != null)
|
||
{
|
||
main = entity;
|
||
entity.Nav_License_Details = new List<T_HM_LICENSE_ANALYSIS_DETAIL>();
|
||
entity.Nav_Crucial_Details = new List<T_HM_CRUCIAL_TASK_DETAIL>();
|
||
entity.Nav_Ordinary_Details = new List<T_HM_ORDINARY_TASK_DETAIL>();
|
||
if (entity.Nav_LicenseAnalysis != null && entity.Nav_LicenseAnalysis.Nav_Details.Any())
|
||
main.Nav_License_Details = entity.Nav_LicenseAnalysis.Nav_Details.ToList();
|
||
if (entity.Nav_CrucialTaskAnalysis != null && entity.Nav_CrucialTaskAnalysis.Nav_Details.Any())
|
||
main.Nav_Crucial_Details = entity.Nav_CrucialTaskAnalysis.Nav_Details.ToList();
|
||
if (entity.Nav_OrdinaryTaskAnalysis != null && entity.Nav_OrdinaryTaskAnalysis.Nav_Details.Any())
|
||
main.Nav_Ordinary_Details = entity.Nav_OrdinaryTaskAnalysis.Nav_Details.ToList();
|
||
}
|
||
}
|
||
return main;
|
||
});
|
||
}
|
||
/// <summary>
|
||
/// 分析表下拉带出分析明细数据
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("GetAnalyzeDetail")]
|
||
public JsonActionResult<T_HM_FILE_PUBLISH> GetAnalyzeDetail([FromBody] KeywordFilter filter)
|
||
{
|
||
return SafeExecute(() =>
|
||
{
|
||
T_HM_FILE_PUBLISH main = new T_HM_FILE_PUBLISH();
|
||
//传入CODE不为空
|
||
if (!string.IsNullOrEmpty(filter.Keyword))
|
||
{
|
||
if (!string.IsNullOrEmpty(filter.Parameter1) && filter.Parameter1 == "1")
|
||
{
|
||
//许可作业明细
|
||
var license = GetEntity<T_HM_LICENSE_ANALYSIS>(t => t.CODE == filter.Keyword, false, "Nav_Details", "Nav_Details.Nav_OperationStep", "Nav_Details.Nav_EvaluateRisk");
|
||
if (license != null)
|
||
main.Nav_LicenseAnalysis = license;
|
||
}
|
||
if (!string.IsNullOrEmpty(filter.Parameter1) && filter.Parameter1 == "2")
|
||
{
|
||
//许可作业明细
|
||
var crucial = GetEntity<T_HM_CRUCIAL_TASK_ANALYSIS>(t => t.CODE == filter.Keyword, false, "Nav_Details", "Nav_Details.Nav_OperationStep", "Nav_Details.Nav_EvaluateRisk");
|
||
if (crucial != null)
|
||
main.Nav_CrucialTaskAnalysis = crucial;
|
||
}
|
||
if (!string.IsNullOrEmpty(filter.Parameter1) && filter.Parameter1 == "3")
|
||
{
|
||
//许可作业明细
|
||
var ordinary = GetEntity<T_HM_ORDINARY_TASK_ANALYSIS>(t => t.CODE == filter.Keyword, false, "Nav_Details", "Nav_Details.Nav_OperationStep", "Nav_Details.Nav_EvaluateRisk");
|
||
if (ordinary != null)
|
||
main.Nav_OrdinaryTaskAnalysis = ordinary;
|
||
}
|
||
}
|
||
return main;
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 单条删除
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
[HttpGet, Route("FullDelete")]
|
||
public JsonActionResult<bool> FullDelete(string id)
|
||
{
|
||
return SafeExecute<bool>(() =>
|
||
{
|
||
T_HM_FILE_PUBLISH entity = GetEntity<T_HM_FILE_PUBLISH>(t => t.ID.ToString() == id, false, "Nav_Area");
|
||
List<Guid> areaIds = new List<Guid>();
|
||
if (entity.Nav_Area != null && entity.Nav_Area.Any())
|
||
{
|
||
var areaIdList = entity.Nav_Area.Select(t => t.ID).ToList();
|
||
areaIds.AddRange(areaIdList);
|
||
}
|
||
UnifiedCommit(() =>
|
||
{
|
||
if (areaIds.Any())
|
||
this.BantchDeleteEntityNoCommit<T_HM_FILE_PUBLISH_AREA>(areaIds);
|
||
if (entity != null)
|
||
this.DeleteEntityNoCommit(entity);
|
||
});
|
||
return true;
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 新增/编辑
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("FullUpdate")]
|
||
public JsonActionResult<bool> FullUpdate([FromBody] T_HM_FILE_PUBLISH entity)
|
||
{
|
||
return SafeExecute(() =>
|
||
{
|
||
var areas = entity.Nav_Area.Where(t=>!t.IS_DELETED).ToList();
|
||
if (areas == null || !areas.Any())
|
||
this.ThrowError("030015");
|
||
entity.PUBLISH_DATE = DateTime.Now;
|
||
entity.IS_PUBLISH = 0;
|
||
if (entity.Nav_CreateUser != null && entity.Nav_CreateUser.Nav_Department != null)
|
||
entity.DEPARTMENT_ID = entity.Nav_CreateUser.Nav_Department.ID;
|
||
else
|
||
entity.DEPARTMENT_ID = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID.Value;
|
||
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
|
||
List<T_FM_NOTIFICATION_TASK> notices = new List<T_FM_NOTIFICATION_TASK>();
|
||
T_FM_NOTIFICATION_TASK task = null;
|
||
if (areas != null && areas.Any())
|
||
{
|
||
areas.ForEach(t =>
|
||
{
|
||
t.ORG_ID = entity.ORG_ID;
|
||
t.FILE_PUBLISH_ID = entity.ID;
|
||
t.Nav_Department = null;
|
||
});
|
||
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
|
||
{
|
||
entity.IS_PUBLISH = FOPreMeetingStatusEnum.签到中;
|
||
//获取选中部门的所有人
|
||
var allUsers = GetDepartmentUsers(entity);
|
||
var UserNames = new List<string>();
|
||
var user = this.GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && allUsers.Contains(t.ID), new BaseFilter(entity.ORG_ID));
|
||
foreach (var u in allUsers)
|
||
{
|
||
var current = user.FirstOrDefault(t => t.ID == u);
|
||
UserNames.Add(current?.NAME);
|
||
}
|
||
//发消息
|
||
DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.Default, entity.ORG_ID.Value, DateTime.Now, null, null);
|
||
notices = NotificationTaskService.InsertUserNoticeTaskModels("作业任务分析文件发布", entity.ID, entity.ORG_ID, allUsers, UserNames,DateTime.Now,
|
||
dtEnd, (int)FMNoticeTypeEnum.消息, "HM123_SHOWPRINT");
|
||
//查询消息表
|
||
if (entity.TaskID != Guid.Empty)
|
||
{
|
||
task = NotificationTaskService.GetTaskFinishModel(entity.TaskID);
|
||
task.SOURCE_FORMCODE = "HM123_SHOWPRINT";
|
||
}
|
||
}
|
||
}
|
||
|
||
entity.Nav_Area = null;
|
||
entity.Nav_License_Details = null;
|
||
entity.Nav_Ordinary_Details = null;
|
||
entity.Nav_Crucial_Details = null;
|
||
UnifiedCommit(() =>
|
||
{
|
||
if (entity != null)
|
||
this.UpdateEntityNoCommit(entity);
|
||
if (areas != null && areas.Any())
|
||
this.BantchSaveEntityNoCommit(areas);
|
||
if (notices != null && notices.Any())
|
||
this.BantchSaveEntityNoCommit(notices);
|
||
if (task != null)
|
||
this.UpdateEntityNoCommit(task);
|
||
});
|
||
return true;
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 发布给分析人确认
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
[HttpGet, Route("PublishToIdentify")]
|
||
public JsonActionResult<bool> PublishToIdentify(Guid id)
|
||
{
|
||
return SafeExecute<bool>(() =>
|
||
{
|
||
var entity = GetEntity<T_HM_FILE_PUBLISH>(t => t.ID == id, false, "Nav_Area", "Nav_Area.Nav_Department");
|
||
List<T_FM_NOTIFICATION_TASK> notices = new List<T_FM_NOTIFICATION_TASK>();
|
||
entity.IS_PUBLISH = FOPreMeetingStatusEnum.签到中;
|
||
//发布给选中部门的所有人
|
||
if (entity.Nav_Area != null && entity.Nav_Area.Any())
|
||
{
|
||
var allUsers = GetDepartmentUsers(entity).Distinct().ToList();
|
||
var UserNames = new List<string>();
|
||
var user = this.GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && allUsers.Contains(t.ID), new BaseFilter(entity.ORG_ID));
|
||
foreach (var u in allUsers)
|
||
{
|
||
var current = user.FirstOrDefault(t => t.ID == u);
|
||
UserNames.Add(current?.NAME);
|
||
}
|
||
//发消息
|
||
notices = NotificationTaskService.InsertUserNoticeTaskModels("作业任务分析文件发布", entity.ID, entity.ORG_ID, allUsers, UserNames, DateTime.Now,
|
||
DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "HM123_SHOWPRINT");
|
||
}
|
||
UnifiedCommit(() =>
|
||
{
|
||
if (entity != null)
|
||
this.UpdateEntityNoCommit(entity);
|
||
if (notices.Any())
|
||
this.BantchAddEntityNoCommit(notices);
|
||
});
|
||
return true;
|
||
});
|
||
}
|
||
/// <summary>
|
||
/// 更新状态为已阅
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
[HttpPost, Route("ChangeStatus")]
|
||
public JsonActionResult<bool> ChangeStatus([FromBody] KeywordFilter filter)
|
||
{
|
||
return SafeExecute<bool>(() =>
|
||
{
|
||
if (!string.IsNullOrEmpty(filter.Keyword))
|
||
{
|
||
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
|
||
//查询消息表更新状态为已阅
|
||
var task = this.GetEntity<T_FM_NOTIFICATION_TASK>(i => i.SOURCE_DATA_ID.ToString() == filter.Keyword && i.USER_ID == loginUserId
|
||
&& i.NOTICE_STATUS == FMNoticeStatusEnum.未处理.GetInt(), false);
|
||
if (task != null)
|
||
{
|
||
task.SOURCE_FORMCODE = "HM123_SHOWPRINT";
|
||
if (DateTime.Now > task.TASK_ENDDT)
|
||
task.NOTICE_STATUS = (int)FMNoticeStatusEnum.超期办理;
|
||
else
|
||
task.NOTICE_STATUS = (int)FMNoticeStatusEnum.正常已办;
|
||
//task.NOTICE_STATUS = FMNoticeStatusEnum.已阅.GetInt();
|
||
task.TASK_DT = DateTime.Now;
|
||
}
|
||
//是否有其他人未阅读
|
||
var taskAnathor = this.GetEntity<T_FM_NOTIFICATION_TASK>(i => i.SOURCE_DATA_ID.ToString() == filter.Keyword && i.USER_ID != loginUserId
|
||
&& i.NOTICE_STATUS == FMNoticeStatusEnum.未处理.GetInt(), false);
|
||
//只要不存在,就更新
|
||
if (taskAnathor == null)
|
||
{
|
||
var entity = this.GetEntity<T_HM_FILE_PUBLISH>(t => t.ID == taskAnathor.SOURCE_DATA_ID);
|
||
entity.IS_PUBLISH = FOPreMeetingStatusEnum.归档;
|
||
}
|
||
UnifiedCommit(() =>
|
||
{
|
||
if (task != null)
|
||
this.UpdateEntityNoCommit(task);
|
||
});
|
||
}
|
||
return true;
|
||
});
|
||
}
|
||
/// <summary>
|
||
/// 查找部门下的所有人
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
[HttpPost, Route("GetDepartmentUsers")]
|
||
public List<Guid> GetDepartmentUsers(T_HM_FILE_PUBLISH entity)
|
||
{
|
||
var allUsers = new List<Guid>();
|
||
if (entity != null && entity.Nav_Area != null && entity.Nav_Area.Any())
|
||
{
|
||
var departmentIds = entity.Nav_Area.Where(t=>t.DEPARTMENT_ID!=null).Select(x => (Guid)x.DEPARTMENT_ID).Distinct().ToList();
|
||
var departments = this.GetEntities<T_FM_DEPARTMENT>(t => departmentIds.Contains(t.ID), new BaseFilter(entity.ORG_ID));
|
||
//先查询选中部门有没有公司级
|
||
var departmentInfos = departments.Where(x => x.DEPARTMENT_TYPE == (int)FMDepartmentType.Company).ToList();
|
||
//发给所有人
|
||
if (departmentInfos != null && departmentInfos.Any())
|
||
{
|
||
var allUsers1 = GetEntities<T_FM_USER>(i => i.ENABLE_STATUS == 0, new BaseFilter(entity.ORG_ID)).Select(t=>t.ID).Distinct().ToList();
|
||
allUsers.AddRange(allUsers1);
|
||
}
|
||
else
|
||
{
|
||
List<Guid> outputDepartmentIds = new List<Guid>();
|
||
GetDepartmentIds(departmentIds, ref outputDepartmentIds);
|
||
//选中的部门人员
|
||
var allUsers1 = GetEntities<T_FM_USER>(i => i.ENABLE_STATUS == 0 && i.DEPARTMENT_ID!=null && outputDepartmentIds.Contains((Guid)i.DEPARTMENT_ID), new BaseFilter(entity.ORG_ID)).Select(t => t.ID).Distinct().ToList();
|
||
allUsers.AddRange(allUsers1);
|
||
}
|
||
}
|
||
return allUsers;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 排序分页查询数据
|
||
/// </summary>
|
||
/// <param name="pageFilter">分页过滤实体</param>
|
||
/// <returns></returns>
|
||
[HttpPost, Route("FullOrderPaged")]
|
||
public PagedActionResult<T_HM_FILE_PUBLISH> FullOrderPaged([FromBody] KeywordPageFilter pageFilter)
|
||
{
|
||
var result = new PagedActionResult<T_HM_FILE_PUBLISH>();
|
||
var loginDepartmentId = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID;
|
||
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
|
||
var loginUserCode = APT.Infrastructure.Api.AppContext.CurrentSession.UserCode;
|
||
//安环部负责人departmentID
|
||
var manageDepartId = this.GetEntity<T_FM_USER>(t => t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "安环部负责人" && t.ENABLE_STATUS == 0)?.DEPARTMENT_ID;
|
||
if (loginUserCode == "admin" || loginDepartmentId == manageDepartId)
|
||
{
|
||
result = this.GetOrderPageEntities<T_HM_FILE_PUBLISH>(null, pageFilter);
|
||
}
|
||
else
|
||
{
|
||
List<Guid> departmentId = new List<Guid>() { loginDepartmentId.Value };
|
||
List<Guid> departmentIds = new List<Guid>() { loginDepartmentId.Value };
|
||
DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds);
|
||
if (departmentIds != null && departmentIds.Any())
|
||
{
|
||
result = this.GetOrderPageEntities<T_HM_FILE_PUBLISH>(t => (t.DEPARTMENT_ID != null && departmentIds.Contains(t.DEPARTMENT_ID.Value)), pageFilter);//|| dataIds.Contains(t.ID)
|
||
}
|
||
else
|
||
result.Data = null;
|
||
}
|
||
return result;
|
||
}
|
||
/// <summary>
|
||
/// 返回所有部门节点
|
||
/// <returns></returns>
|
||
private void GetDepartmentIds(List<Guid> departmentIdList, ref List<Guid> departmentIds)
|
||
{
|
||
var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
|
||
departmentIds.AddRange(departmentIdList);
|
||
var departmentTemps = GetEntities<T_FM_DEPARTMENT>(t => t.PARENT_ID!= null && departmentIdList.Contains((Guid)t.PARENT_ID),new BaseFilter(orgId));
|
||
if (departmentTemps != null && departmentTemps.Any())
|
||
{
|
||
var temp = departmentTemps.Select(t => t.ID).Distinct().ToList();
|
||
GetDepartmentIds(temp, ref departmentIds);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 自动生成CODE
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
[HttpPost, Route("GetFileCode")]
|
||
public JsonActionResult<string> GetFileCode([FromBody] KeywordFilter filter)
|
||
{
|
||
return SafeExecute<string>(() =>
|
||
{
|
||
var fileCode = "";
|
||
var nextCodeInfo = this.GetEntities<T_HM_FILE_PUBLISH>(t => !t.IS_DELETED && t.CREATE_TIME >= DateTime.Now, new BaseFilter(filter.OrgId)).OrderByDescending(t => t.CREATE_TIME).FirstOrDefault();
|
||
var year = DateTime.Now.Year;
|
||
var month = DateTime.Now.Month.PadLeft(2, '0');
|
||
var day = DateTime.Now.Day.PadLeft(2, '0');
|
||
if (nextCodeInfo == null)
|
||
{
|
||
fileCode = "RWFX" + year + month + day + "00001";
|
||
}
|
||
else
|
||
{
|
||
//取最后五位序列号
|
||
var serial = nextCodeInfo.CODE.Substring(nextCodeInfo.CODE.Length - 5);
|
||
//序列号+1,不足五位补0
|
||
var num = (int.Parse(serial) + 1).ToString().PadLeft(5, '0');
|
||
fileCode = "RWFX" + year+ month + day + num;
|
||
}
|
||
return fileCode;
|
||
});
|
||
}
|
||
}
|
||
}
|