增加隐患整改记录

This commit is contained in:
何美荣 2025-11-19 12:59:27 +08:00
parent bc8ed95284
commit 6144d0a50f

View File

@ -1653,6 +1653,7 @@ namespace APT.SK.WebApi.Controllers.Api
{ {
return SafeExecute<List<OperateLog>>(() => return SafeExecute<List<OperateLog>>(() =>
{ {
filter.IgnoreDataRule = true;
var result = new List<OperateLog>(); var result = new List<OperateLog>();
if (string.IsNullOrEmpty(filter.Keyword)) if (string.IsNullOrEmpty(filter.Keyword))
{ {
@ -1665,6 +1666,7 @@ namespace APT.SK.WebApi.Controllers.Api
Guid? safeRecordSumId = null; Guid? safeRecordSumId = null;
Guid? dangerReportId = null; Guid? dangerReportId = null;
Guid? rectifyNoticeId = null; Guid? rectifyNoticeId = null;
List<Guid> rectifyRecordIds = new List<Guid>();
List<Guid> hidRectifyRecordIds = new List<Guid>(); List<Guid> hidRectifyRecordIds = new List<Guid>();
Guid Keyword = new Guid(filter.Keyword); Guid Keyword = new Guid(filter.Keyword);
var check = GetEntity<T_SK_SECURITY_INSPECTION_NOTICE>(Keyword); var check = GetEntity<T_SK_SECURITY_INSPECTION_NOTICE>(Keyword);
@ -1678,10 +1680,10 @@ namespace APT.SK.WebApi.Controllers.Api
var sourceIds = new List<Guid>(); var sourceIds = new List<Guid>();
safeNoticeId = check.ID; safeNoticeId = check.ID;
sourceIds.Add(check.ID); sourceIds.Add(check.ID);
T_SK_HIDDEN_DANGER_REPORT dangerReport = null; T_SK_HIDDEN_DANGER_REPORT dangerReport = null;
var recordIds = GetEntities<T_SK_SECURITY_INSPECTION_RECORD>(e => e.SECURITY_INSPECTION_NOTICE_ID != null && e.SECURITY_INSPECTION_NOTICE_ID == check.ID,new BaseFilter(check.ORG_ID)).Select(m=>m.ID).ToList(); List<T_SK_HIDDEN_DANGER_RECTIFY_RECORD> rectifyRecords = new List<T_SK_HIDDEN_DANGER_RECTIFY_RECORD>(); ;
sourceIds.AddRange(recordIds); safeRecordIds = GetEntities<T_SK_SECURITY_INSPECTION_RECORD>(e => e.SECURITY_INSPECTION_NOTICE_ID != null && e.SECURITY_INSPECTION_NOTICE_ID == check.ID, filter).Select(m=>m.ID).ToList();
safeRecordIds.AddRange(recordIds); sourceIds.AddRange(safeRecordIds);
var recordSum= GetEntity<T_SK_SECURITY_INSPECTION_RECORD_SUMMARY>(e => e.SECURITY_INSPECTION_NOTICE_ID != null && e.SECURITY_INSPECTION_NOTICE_ID == check.ID); var recordSum= GetEntity<T_SK_SECURITY_INSPECTION_RECORD_SUMMARY>(e => e.SECURITY_INSPECTION_NOTICE_ID != null && e.SECURITY_INSPECTION_NOTICE_ID == check.ID);
if (recordSum != null) if (recordSum != null)
{ {
@ -1697,15 +1699,15 @@ namespace APT.SK.WebApi.Controllers.Api
{ {
rectifyNoticeId = rectifyNotice.ID; rectifyNoticeId = rectifyNotice.ID;
sourceIds.Add(rectifyNotice.ID); sourceIds.Add(rectifyNotice.ID);
var rectifyRecordIds = GetEntities<T_SK_HIDDEN_DANGER_RECTIFY_RECORD>(e => e.HIDDEN_DANGER_RECTIFY_NOTICE_ID != null && e.HIDDEN_DANGER_RECTIFY_NOTICE_ID == rectifyNotice.ID,new BaseFilter(dangerReport.ORG_ID)).Select(m => m.ID).ToList(); rectifyRecords = GetEntities<T_SK_HIDDEN_DANGER_RECTIFY_RECORD>(e => e.HIDDEN_DANGER_RECTIFY_NOTICE_ID != null && e.HIDDEN_DANGER_RECTIFY_NOTICE_ID == rectifyNotice.ID, filter).ToList();
rectifyRecordIds.AddRange(rectifyRecordIds); rectifyRecordIds = rectifyRecords.Select(m => m.ID).ToList();
sourceIds.AddRange(rectifyRecordIds); sourceIds.AddRange(rectifyRecordIds);
} }
else else
{ {
var rectifyRecordIds = GetEntities<T_SK_HIDDEN_DANGER_RECTIFY_RECORD>(e => e.HIDDEN_DANGER_REPORT_ID != null && e.HIDDEN_DANGER_REPORT_ID == dangerReport.ID,new BaseFilter(dangerReport.ORG_ID)).Select(m=>m.ID).ToList(); rectifyRecords = GetEntities<T_SK_HIDDEN_DANGER_RECTIFY_RECORD>(e => e.HIDDEN_DANGER_REPORT_ID != null && e.HIDDEN_DANGER_REPORT_ID == dangerReport.ID, filter).ToList();
rectifyRecordIds = rectifyRecords.Select(m => m.ID).ToList();
sourceIds.AddRange(rectifyRecordIds); sourceIds.AddRange(rectifyRecordIds);
rectifyRecordIds.AddRange(rectifyRecordIds);
} }
} }
} }
@ -1725,7 +1727,7 @@ namespace APT.SK.WebApi.Controllers.Api
var users = GetEntities<T_FM_USER>(e => e.ENABLE_STATUS == 0, new BaseFilter(check.ORG_ID), null).ToList(); var users = GetEntities<T_FM_USER>(e => e.ENABLE_STATUS == 0, new BaseFilter(check.ORG_ID), null).ToList();
var checkUser = users.FirstOrDefault(t => t.ID == check.APPLY_USER_ID); var checkUser = users.FirstOrDefault(t => t.ID == check.APPLY_USER_ID);
var departs = GetEntities<T_FM_DEPARTMENT>(e => e.ENABLE_STATUS == 0, new BaseFilter(check.ORG_ID), null).ToList(); var departs = GetEntities<T_FM_DEPARTMENT>(e => e.ENABLE_STATUS == 0, new BaseFilter(check.ORG_ID), null).ToList();
List<string>formCodes=new List<string> { "SK006","SK014","SK018","SK022"}; List<string>formCodes=new List<string> { "SK006","SK014","SK022"};
var approveTemps = GetEntities<T_PF_APPROVE_TEMP>(e => formCodes.Contains(e.FORM_CODE), new BaseFilter(check.ORG_ID), "Nav_ApproveTempDetails.Nav_ApproveRole").ToList(); var approveTemps = GetEntities<T_PF_APPROVE_TEMP>(e => formCodes.Contains(e.FORM_CODE), new BaseFilter(check.ORG_ID), "Nav_ApproveTempDetails.Nav_ApproveRole").ToList();
#region #region
OperateLog noticeLog = new OperateLog(); OperateLog noticeLog = new OperateLog();
@ -1747,16 +1749,17 @@ namespace APT.SK.WebApi.Controllers.Api
} }
else else
{ {
//手动发起的检查通知
OperateLogList start = new OperateLogList(); OperateLogList start = new OperateLogList();
start.USER_NAME = checkUser.NAME; start.USER_NAME = checkUser.NAME;
start.NAME = "安全检查通知"; start.NAME = "安全检查通知";
start.DEAL_DATE = check.MODIFY_TIME; start.DEAL_DATE = check.STATUS == PFStandardStatus.Draft ? null:check.MODIFY_TIME;
start.CREATE_TIME = check.CREATE_TIME; start.CREATE_TIME = check.CREATE_TIME;
start.STATUS = 10; start.STATUS = check.STATUS == PFStandardStatus.Draft? 0 : 10;
noticeLog.logList.Add(start); noticeLog.logList.Add(start);
} }
//审批 //审批
var approveTemp = approves.FirstOrDefault(t => t.DATA_ID == safeNoticeId); var approveTemp = approves.FirstOrDefault(t => t.DATA_ID == safeNoticeId);
if (approveTemp == null) if (approveTemp == null)
{ {
//判断发起人层级,取审批模板 //判断发起人层级,取审批模板
@ -1793,14 +1796,14 @@ namespace APT.SK.WebApi.Controllers.Api
} }
else else
{ {
var tempApprove = tasks.Where(t => t.SOURCE_DATA_ID == approveTemp?.ID).OrderBy(t => t.CREATE_TIME).ThenBy(m=>m.MODIFY_TIME).ToList(); var tempApprove = tasks.Where(t => t.SOURCE_DATA_ID == approveTemp.ID).OrderBy(t => t.CREATE_TIME).ThenBy(m=>m.MODIFY_TIME).ToList();
if (tempApprove != null && tempApprove.Any()) if (tempApprove != null && tempApprove.Any())
{ {
foreach (var item in tempApprove) foreach (var item in tempApprove)
{ {
OperateLogList start1 = new OperateLogList(); OperateLogList start1 = new OperateLogList();
start1.USER_NAME = item.USER_NAME; start1.USER_NAME = item.USER_NAME;
start1.NAME = item.NOTICE_TITLE.Contains("驳回") ? "安全检查通知已被驳回" : item.SOURCE_FORMCODE == "PF119" ? "安全检查通知审批" : item.NOTICE_TITLE.Contains("确认") ? "安全检查通知确认" : "安全检查通知"; start1.NAME = item.NOTICE_TITLE.Contains("驳回") ? "安全检查通知已被驳回" : "安全检查通知审批";
start1.DEAL_DATE = item.TASK_DT; start1.DEAL_DATE = item.TASK_DT;
start1.CREATE_TIME = item.CREATE_TIME; start1.CREATE_TIME = item.CREATE_TIME;
start1.STATUS = item.NOTICE_STATUS == 1 ? 5 : item.NOTICE_STATUS == 2 ? 10 : item.NOTICE_STATUS == 4 ? 15 : 0; start1.STATUS = item.NOTICE_STATUS == 1 ? 5 : item.NOTICE_STATUS == 2 ? 10 : item.NOTICE_STATUS == 4 ? 15 : 0;
@ -1960,13 +1963,12 @@ namespace APT.SK.WebApi.Controllers.Api
} }
else else
{ {
var reportUser = users.FirstOrDefault(t => t.ID == dangerReport.APPLY_USER_ID);
OperateLogList start = new OperateLogList(); OperateLogList start = new OperateLogList();
start.USER_NAME = reportUser.NAME; start.USER_NAME = "上报人";
start.NAME = "隐患上报"; start.NAME = "隐患上报";
start.DEAL_DATE = dangerReport.MODIFY_TIME; start.DEAL_DATE = null;
start.CREATE_TIME = dangerReport.CREATE_TIME; start.CREATE_TIME = null;
start.STATUS = 10; start.STATUS = 0;
hiddenReportLog.logList.Add(start); hiddenReportLog.logList.Add(start);
} }
//审批 //审批
@ -2007,14 +2009,14 @@ namespace APT.SK.WebApi.Controllers.Api
} }
else else
{ {
var tempApprove = tasks.Where(t => t.SOURCE_DATA_ID == approveTemp?.ID).OrderBy(t => t.CREATE_TIME).ThenBy(m => m.MODIFY_TIME).ToList(); var tempApprove = tasks.Where(t => t.SOURCE_DATA_ID == approveTemp.ID).OrderBy(t => t.CREATE_TIME).ThenBy(m => m.MODIFY_TIME).ToList();
if (tempApprove != null && tempApprove.Any()) if (tempApprove != null && tempApprove.Any())
{ {
foreach (var item in tempApprove) foreach (var item in tempApprove)
{ {
OperateLogList start1 = new OperateLogList(); OperateLogList start1 = new OperateLogList();
start1.USER_NAME = item.USER_NAME; start1.USER_NAME = item.USER_NAME;
start1.NAME = item.NOTICE_TITLE.Contains("驳回") ? "隐患上报已被驳回" : item.SOURCE_FORMCODE == "PF119" ? "隐患上报审批" : item.NOTICE_TITLE.Contains("确认") ? "隐患上报确认" : "隐患上报"; start1.NAME = item.NOTICE_TITLE.Contains("驳回") ? "隐患上报已被驳回" : "隐患上报审批";
start1.DEAL_DATE = item.TASK_DT; start1.DEAL_DATE = item.TASK_DT;
start1.CREATE_TIME = item.CREATE_TIME; start1.CREATE_TIME = item.CREATE_TIME;
start1.STATUS = item.NOTICE_STATUS == 1 ? 5 : item.NOTICE_STATUS == 2 ? 10 : item.NOTICE_STATUS == 4 ? 15 : 0; start1.STATUS = item.NOTICE_STATUS == 1 ? 5 : item.NOTICE_STATUS == 2 ? 10 : item.NOTICE_STATUS == 4 ? 15 : 0;
@ -2022,7 +2024,7 @@ namespace APT.SK.WebApi.Controllers.Api
} }
} }
} }
var temp2 = tasks.Where(t => t.SOURCE_DATA_ID == dangerReportId && t.NOTICE_TITLE.Contains("确认")); var temp2 = tasks.Where(t => t.SOURCE_DATA_ID == dangerReportId && t.NOTICE_TITLE.Contains("确认")).OrderBy(m=>m.CREATE_TIME).ThenBy(n=>n.MODIFY_TIME).ToList();
if (temp2 != null && temp2.Any()) if (temp2 != null && temp2.Any())
{ {
noticeLog.logList = new List<OperateLogList>(); noticeLog.logList = new List<OperateLogList>();
@ -2051,43 +2053,19 @@ namespace APT.SK.WebApi.Controllers.Api
else else
{ {
OperateLogList start = new OperateLogList(); OperateLogList start = new OperateLogList();
start.USER_NAME = checkUser != null ? checkUser.NAME : "上报人"; start.USER_NAME = "上报人";
start.NAME = "隐患上报"; start.NAME = "隐患上报";
start.DEAL_DATE = null; start.DEAL_DATE = null;
start.CREATE_TIME = null; start.CREATE_TIME = null;
start.STATUS = 0; start.STATUS = 0;
hiddenReportLog.logList.Add(start); hiddenReportLog.logList.Add(start);
//判断发起人层级,取审批模板 OperateLogList start2 = new OperateLogList();
var departFirst = departs.FirstOrDefault(t => t.ID == check.APPLY_DEPARTMENT_ID); start2.USER_NAME = "审批人";
var param = Enum.GetName(typeof(SKDepartmentTypeEnum), departFirst.DEPARTMENT_TYPE); start2.NAME = "隐患上报审批";
if (departFirst.DEPARTMENT_STATUS != 1) start2.DEAL_DATE = null;
{ start2.CREATE_TIME = null;
param = "公司级"; start2.STATUS = 0;
} hiddenReportLog.logList.Add(start2);
var approveTempFirst = approveTemps.FirstOrDefault(t => t.PARAM == param && t.FORM_CODE == "SK014");
if (approveTempFirst != null && approveTempFirst.Nav_ApproveTempDetails != null && approveTempFirst.Nav_ApproveTempDetails.Any())
{
foreach (var item in approveTempFirst.Nav_ApproveTempDetails.OrderBy(t => t.NUM))
{
OperateLogList start2 = new OperateLogList();
start2.USER_NAME = item.Nav_ApproveRole.NAME;
start2.NAME = "隐患上报审批";
start2.DEAL_DATE = null;
start2.CREATE_TIME = null;
start2.STATUS = 0;
hiddenReportLog.logList.Add(start2);
}
}
else
{
OperateLogList start2 = new OperateLogList();
start2.USER_NAME = "审批人";
start2.NAME = "隐患上报审批";
start2.DEAL_DATE = null;
start2.CREATE_TIME = null;
start2.STATUS = 0;
hiddenReportLog.logList.Add(start2);
}
OperateLogList start1 = new OperateLogList(); OperateLogList start1 = new OperateLogList();
start1.USER_NAME = "整改责任人"; start1.USER_NAME = "整改责任人";
start1.NAME = "隐患上报确认"; start1.NAME = "隐患上报确认";
@ -2114,9 +2092,10 @@ namespace APT.SK.WebApi.Controllers.Api
start.CREATE_TIME = temp1.CREATE_TIME; start.CREATE_TIME = temp1.CREATE_TIME;
start.STATUS = temp1.NOTICE_STATUS == 1 ? 5 : temp1.NOTICE_STATUS == 2 ? 10 : temp1.NOTICE_STATUS == 4 ? 15 : 0; start.STATUS = temp1.NOTICE_STATUS == 1 ? 5 : temp1.NOTICE_STATUS == 2 ? 10 : temp1.NOTICE_STATUS == 4 ? 15 : 0;
rectifyNoticeLog.logList.Add(start); rectifyNoticeLog.logList.Add(start);
var temp2 = tasks.Where(t => t.SOURCE_DATA_ID == rectifyNoticeId && t.NOTICE_TITLE.Contains("确认")); var temp2 = tasks.Where(t => t.SOURCE_DATA_ID == rectifyNoticeId && t.NOTICE_TITLE.Contains("确认")).OrderBy(m => m.CREATE_TIME).ThenBy(n => n.MODIFY_TIME).ToList();
if (temp2 != null && temp2.Any()) if (temp2 != null && temp2.Any())
{ {
noticeLog.logList = new List<OperateLogList>();
foreach (var item in temp2) foreach (var item in temp2)
{ {
OperateLogList start1 = new OperateLogList(); OperateLogList start1 = new OperateLogList();
@ -2141,7 +2120,7 @@ namespace APT.SK.WebApi.Controllers.Api
} }
else { else {
OperateLogList start = new OperateLogList(); OperateLogList start = new OperateLogList();
start.USER_NAME = "安全员"; start.USER_NAME = "安全员/上报人";
start.NAME = "隐患整改通知"; start.NAME = "隐患整改通知";
start.DEAL_DATE = null; start.DEAL_DATE = null;
start.CREATE_TIME = null; start.CREATE_TIME = null;
@ -2157,7 +2136,158 @@ namespace APT.SK.WebApi.Controllers.Api
} }
result.Add(rectifyNoticeLog); result.Add(rectifyNoticeLog);
#endregion #endregion
#region
if (rectifyRecordIds != null && rectifyRecordIds.Any())
{
//发起
var items = tasks.Where(t =>t.SOURCE_DATA_ID!=null && rectifyRecordIds.Contains((Guid)t.SOURCE_DATA_ID) && !t.NOTICE_TITLE.Contains("确认") && !t.NOTICE_TITLE.Contains("验收")).OrderBy(m=>m.CREATE_TIME).ThenBy(n=>n.MODIFY_TIME).ToList();
if (items != null && items.Any())
{
foreach (var temp1 in items)
{
OperateLog refRecordLog = new OperateLog();
refRecordLog.FORM_NAME = "隐患整改记录";
refRecordLog.logList = new List<OperateLogList>();
OperateLogList start = new OperateLogList();
start.USER_NAME = temp1.USER_NAME;
start.NAME = "隐患整改记录";
start.DEAL_DATE = temp1.TASK_DT;
start.CREATE_TIME = temp1.CREATE_TIME;
start.STATUS = temp1.NOTICE_STATUS == 1 ? 5 : temp1.NOTICE_STATUS == 2 ? 10 : temp1.NOTICE_STATUS == 4 ? 15 : 0;
refRecordLog.logList.Add(start);
//验收
var temp2 = tasks.FirstOrDefault(t => t.SOURCE_DATA_ID!=null && t.SOURCE_DATA_ID == temp1.SOURCE_DATA_ID && t.NOTICE_TITLE.Contains("验收"));
if (temp2 != null)
{
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = temp2.USER_NAME;
start1.NAME = "隐患整改记录验收";
start1.DEAL_DATE = temp2.TASK_DT;
start1.CREATE_TIME = temp2.CREATE_TIME;
start1.STATUS = temp2.NOTICE_STATUS == 1 ? 5 : temp2.NOTICE_STATUS == 2 ? 10 : temp2.NOTICE_STATUS == 4 ? 15 : 0;
refRecordLog.logList.Add(start1);
}
else
{
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = "验收人";
start1.NAME = "隐患整改记录验收";
start1.DEAL_DATE = null;
start1.CREATE_TIME = null;
start1.STATUS = 0;
refRecordLog.logList.Add(start1);
}
//审批
var approveTemp = approves.FirstOrDefault(t => t.DATA_ID == temp1.SOURCE_DATA_ID);
if (approveTemp == null)
{
//判断重大还是一般,取审批模板
var recordFirst = rectifyRecords.FirstOrDefault(t => t.ID == temp1.SOURCE_DATA_ID);
var param = recordFirst.HIDDEN_LEVEL.GetDescription();
var approveTempFirst = approveTemps.FirstOrDefault(t => t.PARAM == param && t.FORM_CODE == "SK022");
if (approveTempFirst != null && approveTempFirst.Nav_ApproveTempDetails != null && approveTempFirst.Nav_ApproveTempDetails.Any())
{
foreach (var item in approveTempFirst.Nav_ApproveTempDetails.OrderBy(t => t.NUM))
{
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = item.Nav_ApproveRole.NAME;
start1.NAME = "隐患整改记录审批";
start1.DEAL_DATE = null;
start1.CREATE_TIME = null;
start1.STATUS = 0;
refRecordLog.logList.Add(start1);
}
}
else
{
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = "审批人";
start1.NAME = "隐患整改记录审批";
start1.DEAL_DATE = null;
start1.CREATE_TIME = null;
start1.STATUS = 0;
refRecordLog.logList.Add(start1);
}
}
else
{
var tempApprove = tasks.Where(t => t.SOURCE_DATA_ID == approveTemp.ID).OrderBy(t => t.CREATE_TIME).ThenBy(m => m.MODIFY_TIME).ToList();
if (tempApprove != null && tempApprove.Any())
{
foreach (var item in tempApprove)
{
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = item.USER_NAME;
start1.NAME = item.NOTICE_TITLE.Contains("驳回") ? "隐患整改记录已被驳回" : "隐患整改记录审批";
start1.DEAL_DATE = item.TASK_DT;
start1.CREATE_TIME = item.CREATE_TIME;
start1.STATUS = item.NOTICE_STATUS == 1 ? 5 : item.NOTICE_STATUS == 2 ? 10 : item.NOTICE_STATUS == 4 ? 15 : 0;
refRecordLog.logList.Add(start1);
}
}
}
result.Add(refRecordLog);
}
}
else
{
OperateLog refRecordLog = new OperateLog();
refRecordLog.FORM_NAME = "隐患整改记录";
refRecordLog.logList = new List<OperateLogList>();
OperateLogList start = new OperateLogList();
start.USER_NAME = "整改落实人";
start.NAME = "隐患整改记录";
start.DEAL_DATE = null;
start.CREATE_TIME = null;
start.STATUS = 0;
refRecordLog.logList.Add(start);
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = "验收人";
start1.NAME = "隐患整改记录验收";
start1.DEAL_DATE = null;
start1.CREATE_TIME = null;
start1.STATUS = 0;
refRecordLog.logList.Add(start1);
OperateLogList start2 = new OperateLogList();
start2.USER_NAME = "审批人";
start2.NAME = "隐患整改记录审批";
start2.DEAL_DATE = null;
start2.CREATE_TIME = null;
start2.STATUS = 0;
refRecordLog.logList.Add(start2);
result.Add(refRecordLog);
}
}
else
{
OperateLog refRecordLog = new OperateLog();
refRecordLog.FORM_NAME = "隐患整改记录";
refRecordLog.logList = new List<OperateLogList>();
OperateLogList start = new OperateLogList();
start.USER_NAME = "整改落实人";
start.NAME = "隐患整改记录";
start.DEAL_DATE = null;
start.CREATE_TIME = null;
start.STATUS = 0;
refRecordLog.logList.Add(start);
OperateLogList start1 = new OperateLogList();
start1.USER_NAME = "验收人";
start1.NAME = "隐患整改记录验收";
start1.DEAL_DATE = null;
start1.CREATE_TIME = null;
start1.STATUS = 0;
refRecordLog.logList.Add(start1);
OperateLogList start2 = new OperateLogList();
start2.USER_NAME = "审批人";
start2.NAME = "隐患整改记录审批";
start2.DEAL_DATE = null;
start2.CREATE_TIME = null;
start2.STATUS = 0;
refRecordLog.logList.Add(start2);
result.Add(refRecordLog);
}
#endregion
} }
return result; return result;
} }