mh_sms/APT.MicroApi/APT.SC.WebApi/Controllers/Api/AEController/AEAccidentEventReportController.cs
2024-01-22 09:17:01 +08:00

303 lines
13 KiB
C#

using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums.PF;
using APT.BaseData.Domain.IServices;
using APT.BaseData.Domain.IServices.AE;
using APT.BaseData.Domain.IServices.FM;
using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.AE;
using APT.MS.Domain.Entities.TI;
using APT.MS.Domain.Enums;
using APT.Utility;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace APT.SC.WebApi.Controllers.Api.AE
{
[Route("api/AE/AEAccidentEventReport")]
public class AEAccidentEventReportController : AuthorizeApiController<T_AE_ACCIDENT_EVENT_REPORT>
{
IFMFlowPermitService MFlowPermitService { get; set; }
IPFApproveCallBackService ApproveCallBackService { get; set; }
IAEAccidentEventReportService AccidentEventReportService { get; set; }
public AEAccidentEventReportController(IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService, IAEAccidentEventReportService accidentEventReportService)
{
MFlowPermitService = mFlowPermitService;
ApproveCallBackService = approveCallBackService;
AccidentEventReportService = accidentEventReportService;
}
/// <summary>
/// 事故事件上报 修改
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_AE_ACCIDENT_EVENT_REPORT entity)
{
return SafeExecute<bool>(() =>
{
if (entity.STATUS != PFStandardStatus.Draft && entity.STATUS != PFStandardStatus.Approving)
{
throw new Exception("获取操作方式有误!");
}
var loginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (entity.CREATE_TIME.HasValue && entity.CREATE_TIME < DateTime.Now && entity.USER_ID.Value != loginID.Value)
{
throw new Exception("此上报单不是您添加的,操作失败!");
}
var files = entity.Nav_Files;//附件
entity.Nav_Files = null;
var ListAccidentListKind = entity.Nav_ListAccidentListKind;
entity.Nav_ListAccidentListKind = null;
if (ListAccidentListKind != null && ListAccidentListKind.Count > 0)
{
foreach (var item in ListAccidentListKind)
{
item.Nav_AccidentKind = null;
}
}
if (entity.STATUS == PFStandardStatus.Draft)
{
this.UnifiedCommit(() =>
{
if (entity != null)
UpdateEntityNoCommit(entity); //事故事件上报
if (ListAccidentListKind != null && ListAccidentListKind.Any())//事故种类
BantchSaveEntityNoCommit(ListAccidentListKind);
if (files != null && files.Any())//事故现场
BantchSaveEntityNoCommit(files);
});
}
else
{
if (string.IsNullOrEmpty(entity.NAME))
{
throw new Exception("请输入事故名称!");
}
if (entity.TIME == null)
{
throw new Exception("请选择事故时间!");
}
if (string.IsNullOrEmpty(entity.ACCIDENT_PLACE))
{
throw new Exception("请输入事故地点!");
}
if (ListAccidentListKind == null)
{
throw new Exception("请选择事故种类!");
}
if (entity.ACCIDENT_TYPE_ID == null)
{
throw new Exception("请选择事故类型!");
}
if (!entity.ACCIDENT_LEVEL.HasValue)
{
throw new Exception("请选择事故等级!");
}
if (entity.DEPARTMENT_ID == null)
{
throw new Exception("请选择事故部门!");
}
if (entity.USER_ID == null)
{
throw new Exception("请选择发起人!");
}
if (string.IsNullOrEmpty(entity.ACCIDENT_REASON))
{
throw new Exception("请输入事故起因!");
}
if (!entity.ECONOMIC_LOSSES.HasValue)
{
throw new Exception("请输入直接经济损失(元)!");
}
if (string.IsNullOrEmpty(entity.IMPACT_SCOPE))
{
throw new Exception("请输入波及范围!");
}
if (string.IsNullOrEmpty(entity.TAKE_MEASURES))
{
throw new Exception("请输入已采取措施!");
}
//审批
entity.APPROVE_ID = Guid.NewGuid();
string param = AccidentEventReportService.GetApproveParm(entity);
//string.Empty;
//switch (entity.ACCIDENT_LEVEL)
//{
// case AEAccidentLevel.Jumbo:
// case AEAccidentLevel.Major:
// case AEAccidentLevel.Larger:
// case AEAccidentLevel.General:
// case AEAccidentLevel.SeriouslyInjured:
// param = "1_2_3_4_5";
// break;
// case AEAccidentLevel.MinorJuries:
// param = "6";
// break;
// case AEAccidentLevel.Aminor:
// param = "7";
// break;
// case AEAccidentLevel.Risk:
// if (entity.ECONOMIC_LOSSES.HasValue && entity.ECONOMIC_LOSSES.Value >= 5000)
// {
// param = "8>=5000";
// }
// else
// {
// param = "8<5000";
// }
// break;
// default:
// break;
//}
Guid userID = Guid.Empty;
//事故部门 负责人
var dep = GetEntity<T_FM_DEPARTMENT>(entity.DEPARTMENT_ID.Value);
if (dep.USER_ID != null && dep.USER_ID != Guid.Empty)
{
userID = dep.USER_ID.Value;
}
else
{
var user = GetEntity<T_FM_USER>(e => e.DEPARTMENT_ID == entity.DEPARTMENT_ID);
if (user == null)
{
throw new Exception("未找到该事故部门成员!");
}
userID = user.ID;
}
MFlowPermitService.InsertApprove("", "AE006", param, entity.ID, "AE006_SHOWPRINT", entity.TaskID, true, () =>
{
if (entity != null)
UpdateEntityNoCommit(entity); //事故事件上报
if (ListAccidentListKind != null && ListAccidentListKind.Any())//事故种类
BantchSaveEntityNoCommit(ListAccidentListKind);
if (files != null && files.Any())//事故现场
BantchSaveEntityNoCommit(files);
}, entity.APPROVE_ID, userID, null, null, null, null, null);
}
return true;
});
}
/// <summary>
/// 会议通知发布审批回调
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet, Route("EventBack")]
public JsonActionResult<bool> RecordBack(string id)
{
return SafeExecute<bool>(() =>
{
return ApproveCallBackService.CallBack("AE/AEAccidentEventReport/EventBack", id);
});
}
/// <summary>
/// 获得单条实体数据(添加限制结束时间)
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("LibGet")]
public JsonActionResult<LibView> LibGet([FromBody] KeywordFilter filter)
{
return SafeExecute(() =>
{
Guid ID = Guid.Empty;
if (filter.FilterGroup.Rules.Count > 0)
{
foreach (var item in filter.FilterGroup.Rules)
{
if (item.Field == "ID")
{
ID = new Guid(item.Value.ToString());
break;
}
}
}
if (ID == Guid.Empty)
{
return null;
}
//事故事件上报
var Report = GetEntity<T_AE_ACCIDENT_EVENT_REPORT>(e => e.ID == ID, new string[] { "Nav_AccidentType", "Nav_Department", "Nav_User", "Nav_ListAccidentListKind.Nav_AccidentKind" });
//事故事件调查结果
T_AE_ACCIDENT_EVENT_SURVEY_RESULT SurveyResult = GetEntity<T_AE_ACCIDENT_EVENT_SURVEY_RESULT>(e => e.REPORT_ID == ID && e.STATUS == PFStandardStatus.Archived, new string[] { "Nav_ListSurveyDamageObject.Nav_DamageObject", "Nav_FilesSurvey.Nav_ImgFile.Nav_File", "Nav_FilesP.Nav_ImgFile.Nav_File" });
if (SurveyResult != null)
{
//事故事件原因
SurveyResult.Nav_ListReason = GetEntities<T_AE_ACCIDENT_EVENT_SURVEY_REASON>(e => e.RESULT_ID == SurveyResult.ID, null, new string[] { "Nav_ListReasonType.Nav_ReasonType" }).ToList();
//调查取证资料
SurveyResult.Nav_ListForensics = GetEntities<T_AE_ACCIDENT_EVENT_SURVEY_FORENSICS>(e => e.RESULT_ID == SurveyResult.ID, null, new string[] { "Nav_FilesSurvey.Nav_ImgFile.Nav_File" }).ToList();
//人员伤亡信息
SurveyResult.Nav_ListCasualties = GetEntities<T_AE_ACCIDENT_EVENT_SURVEY_CASUALTIES>(e => e.RESULT_ID == SurveyResult.ID, null, new string[] { "Nav_User" }).ToList();
if (SurveyResult.Nav_ListCasualties != null && SurveyResult.Nav_ListCasualties.Any())
{
//工伤理赔信息
var listClaimRecord = GetEntities<T_TI_INSURANCE_CLAIM_RECORD>(e => e.ACCIDENT_ID == ID && e.STATUS == PFStandardStatus.Archived, null, new string[] { "Nav_Files.Nav_ImgFile.Nav_File" });
if (listClaimRecord != null && listClaimRecord.Any())
{
foreach (var item in SurveyResult.Nav_ListCasualties)
{
var claimRecord = listClaimRecord.FirstOrDefault(e => e.USER_ID == item.USER_ID);
if (claimRecord != null)
{
item.Nav_ClaimRecord = claimRecord;
}
}
}
}
//设备设施损失信息
SurveyResult.Nav_ListEquipmentLoss = GetEntities<T_AE_ACCIDENT_EVENT_SURVEY_EQUIPMENT_LOSS>(e => e.RESULT_ID == SurveyResult.ID, null, new string[] { "Nav_Equipment", "Nav_Facilities", "Nav_User" }).ToList();
//事故事件处罚
SurveyResult.Nav_ListAdmPunishment = GetEntities<T_AE_ACCIDENT_EVENT_SURVEY_ADM_PUNISHMENT>(e => e.RESULT_ID == SurveyResult.ID, null, new string[] { "Nav_Department", "Nav_User" }).ToList();
}
LibView result = new LibView();
result.Report = Report;//事故事件上报
result.Result = SurveyResult;//事故事件调查结果
return result;
});
}
}
/// <summary>
/// 事故事件库明细查看
/// </summary>
public class LibView
{
/// <summary>
/// 事故事件上报
/// </summary>
public T_AE_ACCIDENT_EVENT_REPORT Report { get; set; }
/// <summary>
/// 事故事件调查结果
/// </summary>
public T_AE_ACCIDENT_EVENT_SURVEY_RESULT Result { get; set; }
///// <summary>
///// 工伤保险理赔信息记录
///// </summary>
//public ICollection<T_TI_INSURANCE_CLAIM_RECORD> ListClaimRecord { get; set; }
}
}