mh_jy_safe/APT.MicroApi/APT.SK.WebApi/Controllers/Api/RiskEvaluationController.cs
2026-09-10 10:12:51 +08:00

615 lines
40 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.Infrastructure.Core;
using APT.MS.Domain.Entities.SK;
using APT.MS.Domain.Enums;
using APT.MS.Domain.Enums.SK;
using APT.Utility;
using Microsoft.AspNetCore.Mvc;
using Microsoft.VisualStudio.Web.CodeGeneration.Utils;
using MySqlX.XDevAPI.Common;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
namespace APT.SK.WebApi.Controllers.Api
{
/// <summary>
/// 安全风险评估表
/// </summary>
[Route("api/SK/SKRiskEvaluation")]
public partial class RiskEvaluationController : AuthorizeApiController<T_SK_RISK_EVALUATION>
{
IPFApproveCallBackService ApproveCallBackService { get; set; }
IFMNotificationTaskService NotificationTaskService { get; set; }
IPFCodeRuleService CodeRuleService { get; set; }
IFMFlowPermitService MFlowPermitService { get; set; }
public RiskEvaluationController(IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFCodeRuleService codeRuleService, IPFApproveCallBackService approveCallBackService)
{
NotificationTaskService = notificationTaskService;
MFlowPermitService = mFlowPermitService;
CodeRuleService = codeRuleService;
ApproveCallBackService = approveCallBackService;
}
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_SK_RISK_EVALUATION entity)
{
return SafeExecute<bool>(() =>
{
var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
var departId = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID;
if (entity.APPLY_USER_ID == null)
entity.APPLY_USER_ID = userId;
if (entity.APPLY_DEPARTMENT_ID == null)
entity.APPLY_DEPARTMENT_ID = departId;
if (entity.IDENTIFY_EVALUATION_PLAN_ID == null)
entity.IDENTIFY_EVALUATION_PLAN_ID = this.GetEntity<T_SK_IDENTIFY_EVALUATION_PLAN>(t => t.START_DATE.Value.Date == entity.START_DATE.Value.Date && t.STATUS == PFStandardStatus.Archived && t.ISSEND == true)?.ID;
var details = entity.Nav_Details;
entity.Nav_Details = null;
var requires = entity.Nav_Requires;
entity.Nav_Requires = null;
var files = entity.Nav_Files;
entity.Nav_Files = null;
entity.ApplyDepartmentName = this.GetEntity<T_FM_DEPARTMENT>(t => t.ID == departId).NAME;
entity.ApplyPostName = this.GetEntity<T_FM_USER>(t => t.ID == userId, "Nav_Person.Nav_Post")?.Nav_Person?.Nav_Post?.NAME;
List<Guid> deleteMeasureIds = new List<Guid>();
List<Guid> deleteDepartIds = new List<Guid>();
List<Guid> deletePostIds = new List<Guid>();
List<Guid> deletePostDetIds = new List<Guid>();
List<Guid> deleteDetailIds = new List<Guid>();
List<T_SK_RISK_EVALUATION_DETAIL> detailList = new List<T_SK_RISK_EVALUATION_DETAIL>();
List<T_SK_RISK_EVALUATION_DETAIL_MEASURE> measureList = new List<T_SK_RISK_EVALUATION_DETAIL_MEASURE>();
List<T_SK_RISK_EVALUATION_DETAIL_DEPART> departList = new List<T_SK_RISK_EVALUATION_DETAIL_DEPART>();
List<T_SK_RISK_EVALUATION_DETAIL_POST> postList = new List<T_SK_RISK_EVALUATION_DETAIL_POST>();
List<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL> postDetList = new List<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL>();
//更新标识字段
var record = this.GetEntity<T_SK_RISK_EVALUATION>(t => t.ID == entity.ID, "Nav_Details");
if (record != null && record.Nav_Details != null && record.Nav_Details.Any() && details != null && details.Any())
{
deleteDetailIds = record.Nav_Details.Select(t => t.ID).ToList();
var detailMes = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_MEASURE>(t => deleteDetailIds.Contains(t.RISK_EVALUATION_DETAIL_ID), new BaseFilter(entity.ORG_ID)).ToList();
deleteMeasureIds = detailMes.Select(t => t.ID).ToList();
deleteDepartIds = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_DEPART>(t => deleteDetailIds.Contains(t.RISK_EVALUATION_DETAIL_ID), new BaseFilter(entity.ORG_ID)).Select(t => t.ID).ToList();
deletePostIds = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_POST>(t => deleteDetailIds.Contains(t.RISK_EVALUATION_DETAIL_ID), new BaseFilter(entity.ORG_ID)).Select(t => t.ID).ToList();
deletePostDetIds = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL>(t => deletePostIds.Contains(t.RISK_EVALUATION_DETAIL_POST_ID), new BaseFilter(entity.ORG_ID)).Select(t => t.ID).ToList();
foreach (var item in details)
{
if (item.MARK == SKMarkEnum.Auto)
{
//&& t.RISK_DESCRIPTION == item.RISK_DESCRIPTION && t.EMERGENCY == item.EMERGENCY && t.ENABLE_STATUS == item.ENABLE_STATUS
var temp = record.Nav_Details.FirstOrDefault(t => t.PRODUCTION_UNIT_ID == item.PRODUCTION_UNIT_ID && t.AREA_ID == item.AREA_ID && t.TYPE_ID == item.TYPE_ID && t.RISK_NAME == item.RISK_NAME && t.SCOREC_ID==item.SCOREC_ID && t.SCOREE_ID == item.SCOREE_ID && t.SCOREL_ID == item.SCOREL_ID);
if (temp == null)
{
item.MARK = SKMarkEnum.Update;
}
}
//var temp = record.Nav_Details.FirstOrDefault(t => t.PRODUCTION_UNIT_ID == item.PRODUCTION_UNIT_ID && t.AREA_ID == item.AREA_ID && t.TYPE_ID == item.TYPE_ID && t.RISK_NAME == item.RISK_NAME && t.RISK_DESCRIPTION == item.RISK_DESCRIPTION
// && t.EMERGENCY == item.EMERGENCY && t.ENABLE_STATUS == item.ENABLE_STATUS);
//if (temp == null && item.MARK != SKMarkEnum.Add)
//{
// item.MARK = SKMarkEnum.Update;
//}
if (item.Nav_DetailMeasures != null && item.Nav_DetailMeasures.Any())
{
foreach (var mes in item.Nav_DetailMeasures)
{
var newMes = detailMes.FirstOrDefault(t => t.MEASURES_NAME == mes.MEASURES_NAME && t.RISK_EVALUATION_DETAIL_ID == item.ID);
if (newMes == null && item.MARK != SKMarkEnum.Add)
{
item.MARK = SKMarkEnum.Update;
}
}
}
}
//record.Nav_Details.ForEach(t =>
//{
// if (t.Nav_DetailMeasures != null && t.Nav_DetailMeasures.Any())
// {
// var tempIds = t.Nav_DetailMeasures.Select(m => m.ID).ToList();
// deleteMeasureIds.AddRange(tempIds);
// }
// if (t.Nav_DetailDeparts != null && t.Nav_DetailDeparts.Any())
// {
// var tempIds = t.Nav_DetailDeparts.Select(m => m.ID).ToList();
// deleteDepartIds.AddRange(tempIds);
// }
// if (t.Nav_DetailPosts != null && t.Nav_DetailPosts.Any())
// {
// var tempIds = t.Nav_DetailPosts.Select(m => m.ID).ToList();
// deletePostIds.AddRange(tempIds);
// }
// deleteDetailIds.Add(t.ID);
//});
}
//预加载部门、用户、岗位名称字典,用于汇总计算管控层级/部门/责任人/岗位
var allDepartIds = new List<Guid>();
var allPostIds = new List<Guid>();
var allDirectUserIds = new List<Guid>();
if (details != null)
{
foreach (var d in details.Where(t => !t.IS_DELETED))
{
if (d.Nav_DetailDeparts != null)
{
foreach (var dp in d.Nav_DetailDeparts.Where(t => !t.IS_DELETED))
{
if (dp.DEPARTMENT_ID != null) allDepartIds.Add(dp.DEPARTMENT_ID.Value);
if (dp.USER_ID != null) allDirectUserIds.Add(dp.USER_ID.Value);
}
}
if (d.Nav_DetailPosts != null)
{
foreach (var pp in d.Nav_DetailPosts.Where(t => !t.IS_DELETED))
{
if (pp.DEPARTMENT_ID != null) allDepartIds.Add(pp.DEPARTMENT_ID.Value);
if (pp.Nav_PostDetails != null)
allPostIds.AddRange(pp.Nav_PostDetails.Where(t => !t.IS_DELETED && t.POST_ID != null).Select(t => t.POST_ID.Value));
}
}
}
}
allDepartIds = allDepartIds.Distinct().ToList();
allPostIds = allPostIds.Distinct().ToList();
//加载部门NAME 和 USER_ID负责人ID
Dictionary<Guid, string> departNameDict = new Dictionary<Guid, string>();
Dictionary<Guid, Guid?> departUserIdDict = new Dictionary<Guid, Guid?>();
if (allDepartIds.Any())
{
var departs = this.GetEntities<T_FM_DEPARTMENT>(t => allDepartIds.Contains(t.ID), new BaseFilter(entity.ORG_ID)).ToList();
departNameDict = departs.ToDictionary(t => t.ID, t => t.NAME);
departUserIdDict = departs.ToDictionary(t => t.ID, t => t.USER_ID);
}
//加载用户(部门负责人)姓名
allDirectUserIds = allDirectUserIds.Distinct().ToList();
var deptUserIds = departUserIdDict.Values.Where(v => v != null).Select(v => v.Value).Distinct().ToList();
var allUserIds = allDirectUserIds.Union(deptUserIds).Distinct().ToList();
Dictionary<Guid, string> userNameDict = new Dictionary<Guid, string>();
if (allUserIds.Any())
userNameDict = this.GetEntities<T_FM_USER>(t => allUserIds.Contains(t.ID)&& t.ENABLE_STATUS == 0, new BaseFilter(entity.ORG_ID)).ToDictionary(t => t.ID, t => t.NAME);
//加载岗位名称
Dictionary<Guid, string> postNameDict = new Dictionary<Guid, string>();
if (allPostIds.Any())
postNameDict = this.GetEntities<T_FM_USER_POST>(t => allPostIds.Contains(t.ID), new BaseFilter(entity.ORG_ID)).ToDictionary(t => t.ID, t => t.NAME);
if (details != null && details.Any())
{
foreach (var item in details.Where(t => !t.IS_DELETED))
{
T_SK_RISK_EVALUATION_DETAIL de = new T_SK_RISK_EVALUATION_DETAIL();
de.ID = item.ID == Guid.Empty ? Guid.NewGuid() : item.ID;
de.ORG_ID = entity.ORG_ID;
de.RISK_EVALUATION_ID = entity.ID;
de.PRODUCTION_UNIT_ID = item.PRODUCTION_UNIT_ID;
de.AREA_ID = item.AREA_ID;
de.RISK_NAME = item.RISK_NAME;
de.RISK_DESCRIPTION = item.RISK_DESCRIPTION;
de.TYPE_ID = item.TYPE_ID;
de.ENABLE_STATUS = item.ENABLE_STATUS;
de.MARK = item.MARK;
de.EMERGENCY = item.EMERGENCY;
de.ENTERPRISE_LIBRARY_ID = item.ENTERPRISE_LIBRARY_ID;
de.SCOREL_ID = item.SCOREL_ID;
de.SCOREE_ID = item.SCOREE_ID;
de.SCOREC_ID = item.SCOREC_ID;
de.EVALUATE_SCORE = item.EVALUATE_SCORE;
de.EVALUATE_LEVEL = item.EVALUATE_LEVEL;
if ((item.SCOREL_ID == null || item.SCOREE_ID == null || item.SCOREC_ID == null) && item.ENABLE_STATUS == SKEnableStatusEnum.Yes)
{
throw new Exception("第" + item.NUM + "行LEC都不能为空");
}
//管控措施保存子表记录MEASURE 在子表全部保存后去重汇总
if (item.Nav_DetailMeasures != null && item.Nav_DetailMeasures.Any())
{
foreach (var mm in item.Nav_DetailMeasures.Where(t => !t.IS_DELETED))
{
T_SK_RISK_EVALUATION_DETAIL_MEASURE item2 = new T_SK_RISK_EVALUATION_DETAIL_MEASURE();
item2.ID = mm.ID == Guid.Empty ? Guid.NewGuid() : mm.ID;
item2.ORG_ID = entity.ORG_ID;
item2.RISK_EVALUATION_DETAIL_ID = de.ID;
item2.NUM = mm.NUM;
item2.MEASURES_NAME = mm.MEASURES_NAME;
measureList.Add(item2);
}
var distinctMes = item.Nav_DetailMeasures.Where(t => !t.IS_DELETED)
.Select(m => m.MEASURES_NAME ?? "")
.Where(m => !string.IsNullOrEmpty(m))
.Distinct()
.ToList();
var mi = 1;
foreach (var mes in distinctMes)
{
de.MEASURE = de.MEASURE + mi + "、" + mes + "";
mi++;
}
}
//管控部门层级子表
if (item.Nav_DetailDeparts != null && item.Nav_DetailDeparts.Any())
{
foreach (var mm in item.Nav_DetailDeparts.Where(t => !t.IS_DELETED))
{
T_SK_RISK_EVALUATION_DETAIL_DEPART item2 = new T_SK_RISK_EVALUATION_DETAIL_DEPART();
item2.ID = mm.ID == Guid.Empty ? Guid.NewGuid() : mm.ID;
item2.ORG_ID = entity.ORG_ID;
item2.RISK_EVALUATION_DETAIL_ID = de.ID;
item2.DEPARTMENT_TYPE = mm.DEPARTMENT_TYPE;
item2.DEPARTMENT_ID = mm.DEPARTMENT_ID;
item2.USER_ID = mm.USER_ID;
departList.Add(item2);
}
}
//辨识岗位子表
if (item.Nav_DetailPosts != null && item.Nav_DetailPosts.Any())
{
foreach (var mm in item.Nav_DetailPosts.Where(t => !t.IS_DELETED))
{
T_SK_RISK_EVALUATION_DETAIL_POST item2 = new T_SK_RISK_EVALUATION_DETAIL_POST();
item2.ID = mm.ID == Guid.Empty ? Guid.NewGuid() : mm.ID;
item2.ORG_ID = entity.ORG_ID;
item2.RISK_EVALUATION_DETAIL_ID = de.ID;
item2.DEPARTMENT_ID = mm.DEPARTMENT_ID;
postList.Add(item2);
if (mm.Nav_PostDetails != null && mm.Nav_PostDetails.Any())
{
foreach (var nn in mm.Nav_PostDetails.Where(t => !t.IS_DELETED).DistinctBy(t => t.POST_ID))
{
T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL item3 = new T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL();
item3.ID = nn.ID == Guid.Empty ? Guid.NewGuid() : nn.ID;
item3.ORG_ID = entity.ORG_ID;
item3.RISK_EVALUATION_DETAIL_POST_ID = item2.ID;
item3.POST_ID = nn.POST_ID;
postDetList.Add(item3);
}
}
}
}
//汇总计算管控层级/部门/责任人/辨识岗位(按 DEPARTMENT_TYPE 分组)
de.DEPARTMENT_TYPE = null;
de.IDENTIFY_DEPARTMENT = null;
de.IDENTIFY_USER = null;
de.IDENTIFY_POST = null;
if (item.Nav_DetailDeparts != null && item.Nav_DetailDeparts.Any())
{
var departTypes = item.Nav_DetailDeparts.Where(t => !t.IS_DELETED)
.OrderBy(m => m.DEPARTMENT_TYPE)
.Select(t => t.DEPARTMENT_TYPE)
.Distinct()
.ToList();
var j = 1;
foreach (var dt in departTypes)
{
var desc = dt.GetDescription();
if (!string.IsNullOrEmpty(desc))
{
de.DEPARTMENT_TYPE = de.DEPARTMENT_TYPE + j + "、" + desc + "";
//该层级下的管控部门名称(去重)
var deptNames = item.Nav_DetailDeparts.Where(t => !t.IS_DELETED && t.DEPARTMENT_TYPE == dt && t.DEPARTMENT_ID != null)
.Select(t => departNameDict.ContainsKey(t.DEPARTMENT_ID.Value) ? departNameDict[t.DEPARTMENT_ID.Value] : null)
.Where(n => !string.IsNullOrEmpty(n))
.Distinct()
.ToList();
foreach (var dn in deptNames)
de.IDENTIFY_DEPARTMENT = de.IDENTIFY_DEPARTMENT + j + "、" + dn + "";
//该层级下的管控责任人:取部门表的负责人 USER_ID
var userNamesForType = item.Nav_DetailDeparts.Where(t => !t.IS_DELETED && t.DEPARTMENT_TYPE == dt && t.DEPARTMENT_ID != null)
.Select(t => departUserIdDict.ContainsKey(t.DEPARTMENT_ID.Value) ? departUserIdDict[t.DEPARTMENT_ID.Value] : null)
.Where(uid => uid != null && userNameDict.ContainsKey(uid.Value))
.Select(uid => userNameDict[uid.Value])
.Where(n => !string.IsNullOrEmpty(n))
.Distinct()
.ToList();
foreach (var un in userNamesForType)
de.IDENTIFY_USER = de.IDENTIFY_USER + j + "、" + un + "";
//该层级下的辨识岗位:匹配 Nav_DetailPosts 中属于该层级管控部门的岗位(去重)
var typeDeptIds = item.Nav_DetailDeparts.Where(t => !t.IS_DELETED && t.DEPARTMENT_TYPE == dt && t.DEPARTMENT_ID != null)
.Select(t => t.DEPARTMENT_ID.Value)
.Distinct()
.ToList();
if (item.Nav_DetailPosts != null && typeDeptIds.Any())
{
var postNames = item.Nav_DetailPosts.Where(p => !p.IS_DELETED && p.DEPARTMENT_ID != null && typeDeptIds.Contains(p.DEPARTMENT_ID.Value))
.SelectMany(p => p.Nav_PostDetails ?? new List<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL>())
.Where(x => !x.IS_DELETED && x.POST_ID != null)
.Select(x => postNameDict.ContainsKey(x.POST_ID.Value) ? postNameDict[x.POST_ID.Value] : null)
.Where(n => !string.IsNullOrEmpty(n))
.Distinct()
.ToList();
//foreach (var pn in postNames)
de.IDENTIFY_POST = de.IDENTIFY_POST + j + "、" + string.Join(",", postNames) + "";
}
j++;
}
}
}
item.Nav_DetailMeasures = null;
item.Nav_DetailDeparts = null;
item.Nav_DetailPosts = null;
detailList.Add(de);
if (item.EVALUATE_LEVEL == SKEvaluateLevelEnum.)
{
if (!string.IsNullOrEmpty(item.DEPARTMENT_TYPE) && !item.DEPARTMENT_TYPE.Contains("公司级"))
{
//throw new Exception("第" + item.NUM + "行,重大风险管控层级必须包含公司级");
}
}
if (item.EVALUATE_LEVEL == SKEvaluateLevelEnum.)
{
if (!string.IsNullOrEmpty(item.DEPARTMENT_TYPE) && !item.DEPARTMENT_TYPE.Contains("部门级") && !item.DEPARTMENT_TYPE.Contains("公司级"))
{
//throw new Exception("第" + item.NUM + "行,较大风险管控层级必须大于部门级");
}
}
if (item.EVALUATE_LEVEL == SKEvaluateLevelEnum.)
{
if (!string.IsNullOrEmpty(item.DEPARTMENT_TYPE) && !item.DEPARTMENT_TYPE.Contains("部门级") && !item.DEPARTMENT_TYPE.Contains("公司级") && !item.DEPARTMENT_TYPE.Contains("车间级"))
{
//throw new Exception("第" + item.NUM + "行,一般风险管控层级必须大于车间级");
}
}
if (item.EVALUATE_LEVEL == SKEvaluateLevelEnum.)
{
if (!string.IsNullOrEmpty(item.DEPARTMENT_TYPE) && !item.DEPARTMENT_TYPE.Contains("部门级") && !item.DEPARTMENT_TYPE.Contains("公司级") && !item.DEPARTMENT_TYPE.Contains("车间级") && !item.DEPARTMENT_TYPE.Contains("班组级"))
{
//throw new Exception("第" + item.NUM + "行,低风险管控层级必须大于班组级");
}
}
}
}
if (files != null && files.Any())
{
foreach (var item in files.Where(t => !t.IS_DELETED))
{
item.ORG_ID = entity.ORG_ID;
item.RISK_EVALUATION_ID = entity.ID;
item.Nav_ImgFile = null;
}
}
if (requires != null && requires.Any())
{
foreach (var item in requires.Where(t => !t.IS_DELETED))
{
item.ORG_ID = entity.ORG_ID;
item.RISK_EVALUATION_ID = entity.ID;
item.Nav_Require = null;
}
}
List<T_FM_NOTIFICATION_TASK> notices = new List<T_FM_NOTIFICATION_TASK>();
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
{
//if (departList.Where(t => t.IS_DELETED == false).Count() == 0)
//{
// throw new Exception("管控层级不能为空");
//}
var department = this.GetEntity<T_FM_DEPARTMENT>(t => t.ID == entity.APPLY_DEPARTMENT_ID && t.ENABLE_STATUS == 0);
var param = Enum.GetName(typeof(SKDepartmentTypeEnum), department.DEPARTMENT_TYPE);
if (department.DEPARTMENT_STATUS == 2)
{
param = "公司级";
}
entity.STATUS = PFStandardStatus.Approving;
//取审批流水码
var sysFilter = new SystemCodeFilter();
sysFilter.CodeType = (int)PFCodeRuleType.;
sysFilter.Count = 1;
sysFilter.OrgId = entity.ORG_ID;
var codes = CodeRuleService.NewGenSerial(sysFilter);
var serialCode = codes.Split(new char[] { ',' });
MFlowPermitService.InsertApprove(serialCode[0], "SK039", param, entity.ID, "SK039_SHOWPRINT", entity.TaskID, true, () =>
{
if (deleteMeasureIds != null && deleteMeasureIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_MEASURE>(deleteMeasureIds);
if (deleteDepartIds != null && deleteDepartIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_DEPART>(deleteDepartIds);
if (deletePostDetIds != null && deletePostDetIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL>(deletePostDetIds);
if (deletePostIds != null && deletePostIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_POST>(deletePostIds);
if (deleteDetailIds != null && deleteDetailIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL>(deleteDetailIds);
if (entity != null)
UpdateEntityNoCommit(entity);
if (detailList != null && detailList.Any())
BantchSaveEntityNoCommit(detailList);
if (files != null && files.Any())
BantchSaveEntityNoCommit(files);
if (requires != null && requires.Any())
BantchSaveEntityNoCommit(requires);
if (measureList != null && measureList.Any())
BantchSaveEntityNoCommit(measureList);
if (departList != null && departList.Any())
BantchSaveEntityNoCommit(departList);
if (postList != null && postList.Any())
BantchSaveEntityNoCommit(postList);
if (postDetList != null && postDetList.Any())
BantchSaveEntityNoCommit(postDetList.GroupBy(p => new { p.RISK_EVALUATION_DETAIL_POST_ID, p.POST_ID }).Select(g => g.First()).ToList());
}, null, null, null, null, null, "SK039_SHOWPRINT", null, "安全风险评估表审批");
return true;
}
this.UnifiedCommit(() =>
{
if (deleteMeasureIds != null && deleteMeasureIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_MEASURE>(deleteMeasureIds);
if (deleteDepartIds != null && deleteDepartIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_DEPART>(deleteDepartIds);
if (deletePostDetIds != null && deletePostDetIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL>(deletePostDetIds);
if (deletePostIds != null && deletePostIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL_POST>(deletePostIds);
if (deleteDetailIds != null && deleteDetailIds.Any())
this.BantchDeleteEntityNoCommit<T_SK_RISK_EVALUATION_DETAIL>(deleteDetailIds);
if (entity != null)
UpdateEntityNoCommit(entity);
if (detailList != null && detailList.Any())
BantchSaveEntityNoCommit(detailList);
if (files != null && files.Any())
BantchSaveEntityNoCommit(files);
if (requires != null && requires.Any())
BantchSaveEntityNoCommit(requires);
if (measureList != null && measureList.Any())
BantchSaveEntityNoCommit(measureList);
if (departList != null && departList.Any())
BantchSaveEntityNoCommit(departList);
if (postList != null && postList.Any())
BantchSaveEntityNoCommit(postList);
if (postDetList != null && postDetList.Any())
BantchSaveEntityNoCommit(postDetList.GroupBy(p => new { p.RISK_EVALUATION_DETAIL_POST_ID, p.POST_ID }).Select(g => g.First()).ToList());
});
return true;
});
}
/// <summary>
/// 获得单条实体数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("SKGet")]
public JsonActionResult<T_SK_RISK_EVALUATION> SKGet([FromBody] KeywordFilter filter)
{
return SafeExecute(() =>
{
var id = filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID").Value.ToString();
if (string.IsNullOrEmpty(id))
this.ThrowError("060010");
filter.IgnoreDataRule = true;
var result = this.GetEntity<T_SK_RISK_EVALUATION>(id, new string[] { "Nav_ApplyUser", "Nav_ApplyDepartment","Nav_Require",
"Nav_Files.Nav_ImgFile","Nav_Requires.Nav_Require"});
if (result != null)
{
var details = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL>(t => t.RISK_EVALUATION_ID == result.ID, new BaseFilter(filter.OrgId), "Nav_Area", "Nav_Type", "Nav_RiskName", "Nav_SCOREL", "Nav_SCOREE", "Nav_SCOREC", "Nav_ProductionUnit");
if (details.Any())
{
var detailIds = details.Select(t => t.ID).ToList();
var measures = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_MEASURE>(t => detailIds.Contains(t.RISK_EVALUATION_DETAIL_ID), new BaseFilter(filter.OrgId));
var departs = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_DEPART>(t => detailIds.Contains(t.RISK_EVALUATION_DETAIL_ID), new BaseFilter(filter.OrgId), "Nav_Department.Nav_User");
var posts = this.GetEntities<T_SK_RISK_EVALUATION_DETAIL_POST>(t => detailIds.Contains(t.RISK_EVALUATION_DETAIL_ID), new BaseFilter(filter.OrgId), "Nav_Department", "Nav_PostDetails.Nav_Post");
foreach (var detail in details)
{
var measureTemps = measures.Where(t => t.RISK_EVALUATION_DETAIL_ID == detail.ID).ToList();
detail.Nav_DetailMeasures = measureTemps.OrderBy(t => t.NUM).ToList();
var departTemps = departs.Where(t => t.RISK_EVALUATION_DETAIL_ID == detail.ID).ToList();
detail.Nav_DetailDeparts = departTemps.OrderBy(t => t.DEPARTMENT_TYPE).ThenBy(m => m.Nav_Department.NUM).ToList();
var postTemps = posts.Where(t => t.RISK_EVALUATION_DETAIL_ID == detail.ID).ToList();
detail.Nav_DetailPosts = postTemps.OrderBy(t => t.DEPARTMENT_ID).ToList();
//先清空汇总字段,避免叠加 FullUpdate 已持久化的值导致重复
detail.DEPARTMENT_TYPE = null;
detail.IDENTIFY_DEPARTMENT = null;
detail.IDENTIFY_USER = null;
detail.IDENTIFY_POST = null;
if (detail.Nav_DetailDeparts != null && detail.Nav_DetailDeparts.Any())
{
var departTypes = detail.Nav_DetailDeparts.OrderBy(m => m.DEPARTMENT_TYPE).Select(t => t.DEPARTMENT_TYPE).Distinct().ToList();
var j = 1;
foreach (var p in departTypes)
{
if (!string.IsNullOrEmpty(p.GetDescription()))
{
detail.DEPARTMENT_TYPE = detail.DEPARTMENT_TYPE + j + "、" + p.GetDescription() + "";
//管控部门(去重,逐个展示)
var dds = detail.Nav_DetailDeparts.Where(x => x.DEPARTMENT_TYPE == p).Select(t => t.Nav_Department?.NAME).Where(n => !string.IsNullOrEmpty(n)).Distinct().ToList();
foreach (var dn in dds)
detail.IDENTIFY_DEPARTMENT = detail.IDENTIFY_DEPARTMENT + j + "、" + dn + "";
//管控责任人:取管控部门负责人(去重,逐个展示)
var uus = detail.Nav_DetailDeparts.Where(x => x.DEPARTMENT_TYPE == p && x.Nav_Department!=null && x.Nav_Department.Nav_User!=null && x.Nav_Department.Nav_User.ENABLE_STATUS == 0).Select(t => t.Nav_Department.Nav_User.NAME).Where(n => !string.IsNullOrEmpty(n)).Distinct().ToList();
foreach (var un in uus)
detail.IDENTIFY_USER = detail.IDENTIFY_USER + j + "、" + un + "";
//辨识岗位:取该层级管控部门对应的岗位(两表部门相同),去重逐个展示
var ddIds = detail.Nav_DetailDeparts.Where(x => x.DEPARTMENT_TYPE == p && x.DEPARTMENT_ID != null).Select(t => t.DEPARTMENT_ID).Distinct().ToList();
var pps = detail.Nav_DetailPosts.Where(x => !x.IS_DELETED && x.DEPARTMENT_ID != null && ddIds.Contains(x.DEPARTMENT_ID))
.SelectMany(x => x.Nav_PostDetails ?? new List<T_SK_RISK_EVALUATION_DETAIL_POST_DETAIL>())
.Where(x => !x.IS_DELETED)
.Select(t => t.Nav_Post?.NAME)
.Where(n => !string.IsNullOrEmpty(n))
.Distinct()
.ToList();
detail.IDENTIFY_POST = detail.IDENTIFY_POST + j + "、" + string.Join(",", pps) + "";
//foreach (var pn in pps)
// detail.IDENTIFY_POST = detail.IDENTIFY_POST + j + "、" + pn + "";
j++;
}
}
}
}
}
result.Nav_Details = details.OrderBy(m => m.MineType).ThenBy(m => m.AREA_ID).ThenBy(n => n.TYPE_ID).ToList();
if (result.STATUS == PFStandardStatus.Rejected)
{
result.CONTEXT = ApproveCallBackService.RejectContent(result.ID);
}
}
return result;
});
//var result = WitEntity(null, filter);
//if (result != null && result.Data != null && result.Data.STATUS == PFStandardStatus.Rejected)
//{
// result.Data.CONTEXT = ApproveCallBackService.RejectContent(result.Data.ID);
//}
//return result;
}
/// <summary>
/// 回调函数
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost, Route("BackUpdateNew")]
public JsonActionResult<bool> BackUpdateNew([FromBody] T_PF_APPROVE entity)
{
return SafeExecute(() =>
{
return ApproveCallBackService.CallBackNew("SK/SKRiskEvaluation/BackUpdateNew", entity);
});
}
/// <summary>
/// 驳回
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost, Route("RejectUpdate")]
public JsonActionResult<bool> RejectUpdate([FromBody] T_PF_APPROVE model)
{
return SafeExecute(() =>
{
//公共 获取审批流信息
T_PF_APPROVE modelApp = null;
List<T_PF_APPROVE_DETAIL> listAppDetail = null;
T_FM_NOTIFICATION_TASK taskFinish = null;
string Msg = string.Empty;
bool ResultGetInfo = ApproveCallBackService.GetApproject(model, ref modelApp, ref listAppDetail, ref taskFinish, ref Msg);
if (!ResultGetInfo)
throw new Exception("驳回失败!");
if (modelApp == null || listAppDetail == null)
throw new Exception("获取驳回信息失败!");
var entity = this.GetEntity<T_SK_RISK_EVALUATION>(model.DATA_ID, new string[] { "Nav_ApplyUser" });
entity.STATUS = PFStandardStatus.Rejected;
T_FM_NOTIFICATION_TASK notice = new T_FM_NOTIFICATION_TASK();
if (entity.APPLY_USER_ID != null)
{
//发消息
notice = NotificationTaskService.InsertUserNoticeTaskModel("安全风险评估表被驳回", entity.ID, entity.ORG_ID, (Guid)entity.APPLY_USER_ID, entity.Nav_ApplyUser?.NAME, DateTime.Now,
DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum., "SK039");
}
UnifiedCommit(() =>
{
if (entity != null)
this.UpdateEntityNoCommit(entity);
if (notice != null)
this.UpdateEntityNoCommit(notice);
if (modelApp != null)
UpdateEntityNoCommit(modelApp);
if (listAppDetail != null && listAppDetail.Count > 0)
BantchUpdateEntityNoCommit(listAppDetail);
if (taskFinish != null)
UpdateEntityNoCommit(taskFinish);
});
return true;
//return ApproveCallBackService.CallReject("HM/HMLicenseAnalysis/RejectUpdate", id);
});
}
}
}