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
{
///
/// 文件发布表
///
[Route("api/HM/HMFilePublish")]
public partial class FilePublishController : AuthorizeApiController
{
IPFCodeRuleService CodeRuleService { get; set; }
IFMNotificationTaskService NotificationTaskService { get; set; }
IFMDepartmentService DepartmentService { get; set; }
///
/// 作业任务分析
///
public FilePublishController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService)
{
CodeRuleService = codeRuleService;
NotificationTaskService = notificationTaskService;
DepartmentService = departmentService;
}
///
/// 获取
///
///
///
[HttpPost, Route("GetEdit")]
public JsonActionResult 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(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();
entity.Nav_Crucial_Details = new List();
entity.Nav_Ordinary_Details = new List();
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;
});
}
///
/// 分析表下拉带出分析明细数据
///
///
///
[HttpPost, Route("GetAnalyzeDetail")]
public JsonActionResult 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 => 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 => 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 => t.CODE == filter.Keyword, false, "Nav_Details", "Nav_Details.Nav_OperationStep", "Nav_Details.Nav_EvaluateRisk");
if (ordinary != null)
main.Nav_OrdinaryTaskAnalysis = ordinary;
}
}
return main;
});
}
///
/// 单条删除
///
///
///
[HttpGet, Route("FullDelete")]
public JsonActionResult FullDelete(string id)
{
return SafeExecute(() =>
{
T_HM_FILE_PUBLISH entity = GetEntity(t => t.ID.ToString() == id, false, "Nav_Area");
List areaIds = new List();
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(areaIds);
if (entity != null)
this.DeleteEntityNoCommit(entity);
});
return true;
});
}
///
/// 新增/编辑
///
///
///
[HttpPost, Route("FullUpdate")]
public JsonActionResult 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 notices = new List();
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();
var user = this.GetEntities(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;
});
}
///
/// 发布给分析人确认
///
///
///
[HttpGet, Route("PublishToIdentify")]
public JsonActionResult PublishToIdentify(Guid id)
{
return SafeExecute(() =>
{
var entity = GetEntity(t => t.ID == id, false, "Nav_Area", "Nav_Area.Nav_Department");
List notices = new List();
entity.IS_PUBLISH = FOPreMeetingStatusEnum.签到中;
//发布给选中部门的所有人
if (entity.Nav_Area != null && entity.Nav_Area.Any())
{
var allUsers = GetDepartmentUsers(entity).Distinct().ToList();
var UserNames = new List();
var user = this.GetEntities(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;
});
}
///
/// 更新状态为已阅
///
///
[HttpPost, Route("ChangeStatus")]
public JsonActionResult ChangeStatus([FromBody] KeywordFilter filter)
{
return SafeExecute(() =>
{
if (!string.IsNullOrEmpty(filter.Keyword))
{
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
//查询消息表更新状态为已阅
var task = this.GetEntity(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(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 => t.ID == taskAnathor.SOURCE_DATA_ID);
entity.IS_PUBLISH = FOPreMeetingStatusEnum.归档;
}
UnifiedCommit(() =>
{
if (task != null)
this.UpdateEntityNoCommit(task);
});
}
return true;
});
}
///
/// 查找部门下的所有人
///
///
[HttpPost, Route("GetDepartmentUsers")]
public List GetDepartmentUsers(T_HM_FILE_PUBLISH entity)
{
var allUsers = new List();
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 => departmentIds.Contains(t.ID), new BaseFilter(entity.ORG_ID));
//先查询选中部门有没有公司级
var departmentInfos = departments.Where(x => x.DEPARTMENT_TYPE == (int)FMDepartmentType.公司).ToList();
//发给所有人
if (departmentInfos != null && departmentInfos.Any())
{
var allUsers1 = GetEntities(i => i.ENABLE_STATUS == 0, new BaseFilter(entity.ORG_ID)).Select(t=>t.ID).Distinct().ToList();
allUsers.AddRange(allUsers1);
}
else
{
List outputDepartmentIds = new List();
GetDepartmentIds(departmentIds, ref outputDepartmentIds);
//选中的部门人员
var allUsers1 = GetEntities(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;
}
///
/// 排序分页查询数据
///
/// 分页过滤实体
///
[HttpPost, Route("FullOrderPaged")]
public PagedActionResult FullOrderPaged([FromBody] KeywordPageFilter pageFilter)
{
var result = new PagedActionResult();
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 => t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "安环部负责人" && t.ENABLE_STATUS == 0)?.DEPARTMENT_ID;
if (loginUserCode == "admin" || loginDepartmentId == manageDepartId)
{
result = this.GetOrderPageEntities(null, pageFilter);
}
else
{
List departmentId = new List() { loginDepartmentId.Value };
List departmentIds = new List() { loginDepartmentId.Value };
DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds);
if (departmentIds != null && departmentIds.Any())
{
result = this.GetOrderPageEntities(t => (t.DEPARTMENT_ID != null && departmentIds.Contains(t.DEPARTMENT_ID.Value)), pageFilter);//|| dataIds.Contains(t.ID)
}
else
result.Data = null;
}
return result;
}
///
/// 返回所有部门节点
///
private void GetDepartmentIds(List departmentIdList, ref List departmentIds)
{
var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
departmentIds.AddRange(departmentIdList);
var departmentTemps = GetEntities(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);
}
}
///
/// 自动生成CODE
///
///
[HttpPost, Route("GetFileCode")]
public JsonActionResult GetFileCode([FromBody] KeywordFilter filter)
{
return SafeExecute(() =>
{
var fileCode = "";
var nextCodeInfo = this.GetEntities(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;
});
}
}
}