336 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			336 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using APT.BaseData.Domain.Entities;
 | 
						|
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.CM;
 | 
						|
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;
 | 
						|
using System.Linq.Expressions;
 | 
						|
 | 
						|
namespace APT.SC.WebApi.Controllers.Api.CM
 | 
						|
{
 | 
						|
    [Route("api/CM/CMRspEstimate")]
 | 
						|
    public class CMRspEstimateController : AuthorizeApiController<T_CM_RSP_ESTIMATE>
 | 
						|
    {
 | 
						|
        IFMFlowPermitService MFlowPermitService { get; set; }
 | 
						|
        IPFApproveCallBackService ApproveCallBackService { get; set; }
 | 
						|
        IAEAccidentEventReportService AccidentEventReportService { get; set; }
 | 
						|
        IFMNotificationTaskService NotificationTaskService { get; set; }
 | 
						|
        IFMUserService UserService { get; set; }
 | 
						|
        public CMRspEstimateController(IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService, IAEAccidentEventReportService accidentEventReportService, IFMNotificationTaskService notificationTaskService, IFMUserService userService)
 | 
						|
        {
 | 
						|
            MFlowPermitService = mFlowPermitService;
 | 
						|
            ApproveCallBackService = approveCallBackService;
 | 
						|
            AccidentEventReportService = accidentEventReportService;
 | 
						|
            NotificationTaskService = notificationTaskService;
 | 
						|
            UserService = userService;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 应急响应评估表 修改
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="entity"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("FullUpdate")]
 | 
						|
        public JsonActionResult<bool> FullUpdate([FromBody] T_CM_RSP_ESTIMATE entity)
 | 
						|
        {
 | 
						|
            return SafeExecute<bool>(() =>
 | 
						|
            {
 | 
						|
                //评估人员
 | 
						|
                var ListEstimate = entity.Nav_ListEstimate;
 | 
						|
                entity.Nav_ListEstimate = null;
 | 
						|
 | 
						|
                //应急响应情况
 | 
						|
                var ListRspConditions = entity.Nav_ListRspConditions;
 | 
						|
                entity.Nav_ListRspConditions = null;
 | 
						|
 | 
						|
                #region     值判断
 | 
						|
 | 
						|
                if (string.IsNullOrEmpty(entity.EVENT_NAME))
 | 
						|
                    throw new Exception("请填写事故/事件名称!");
 | 
						|
                if (entity.STATUS == PFStandardStatus.Sign)
 | 
						|
                {
 | 
						|
                    //保存并发送
 | 
						|
                    if (!entity.DEPARTMENT_ID_REPORT.HasValue)
 | 
						|
                        throw new Exception("请选择事故/事件单位!");
 | 
						|
                    if (!entity.RSP_LEVEL.HasValue)
 | 
						|
                        throw new Exception("请选择响应级别!");
 | 
						|
                    if (ListEstimate == null || !ListEstimate.Any())
 | 
						|
                        throw new Exception("请选择评估人员!");
 | 
						|
                    if (!entity.RSP_TRAINING_LEVEL.HasValue)
 | 
						|
                        throw new Exception("请选择培训水平!");
 | 
						|
                    if (ListRspConditions != null && ListRspConditions.Any())
 | 
						|
                    {
 | 
						|
                        int rowIndex = 1;
 | 
						|
                        foreach (var item in ListRspConditions)
 | 
						|
                        {
 | 
						|
                            item.Nav_RspEstimateCondition = null;
 | 
						|
                            if (!item.RSP_CONDITION_STATUS.HasValue)
 | 
						|
                            {
 | 
						|
                                throw new Exception("请选择应急响应情况结果,行:" + rowIndex + "!");
 | 
						|
                            }
 | 
						|
                            rowIndex++;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                #endregion
 | 
						|
 | 
						|
                //事故/事件种类
 | 
						|
                var ListEventKind = entity.Nav_ListEventKind;
 | 
						|
                entity.Nav_ListEventKind = null;
 | 
						|
                if (ListEventKind != null && ListEventKind.Any())
 | 
						|
                {
 | 
						|
                    foreach (var item in ListEventKind)
 | 
						|
                    {
 | 
						|
                        item.Nav_RspAccdentKind = null;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                //参与人员
 | 
						|
                var ListJoin = entity.Nav_ListJoin;
 | 
						|
                entity.Nav_ListJoin = null;
 | 
						|
                if (ListJoin != null && ListJoin.Any())
 | 
						|
                {
 | 
						|
                    foreach (var item in ListJoin)
 | 
						|
                    {
 | 
						|
                        item.Nav_User = null;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (ListEstimate != null && ListEstimate.Any())
 | 
						|
                {
 | 
						|
                    foreach (var item in ListEstimate)
 | 
						|
                    {
 | 
						|
                        item.Nav_User = null;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                //发起人填写完成后点击通知,触发待办事项给评估人员签到,所有评估人员签到后触发审批
 | 
						|
                List<T_FM_NOTIFICATION_TASK> listTask = null;
 | 
						|
                if (entity.STATUS == PFStandardStatus.Sign)
 | 
						|
                {
 | 
						|
                    List<Guid> listUserID = ListEstimate.Select(e => e.USER_ID).ToList();
 | 
						|
                    var listUser = GetEntities<T_FM_USER>(e => listUserID.Contains(e.ID), null, null);
 | 
						|
                    List<Guid> UserId = new List<Guid>();
 | 
						|
                    List<string> userName = new List<string>();
 | 
						|
                    foreach (var user in listUser)
 | 
						|
                    {
 | 
						|
                        if (UserId.Contains(user.ID))
 | 
						|
                            continue;
 | 
						|
                        UserId.Add(user.ID);
 | 
						|
                        userName.Add(user.NAME);
 | 
						|
                    }
 | 
						|
                    Guid? LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
 | 
						|
                    listTask = NotificationTaskService.InsertUserNoticeTaskModels("应急响应评估签到", entity.ID, entity.ORG_ID, UserId, userName, DateTime.Now, DateTime.Now.AddDays(1), 0, "CM023_SHOWPRINT", LoginID);
 | 
						|
                    //评估人员签到处理
 | 
						|
                    if (LoginID.HasValue && UserId.Contains(LoginID.Value))
 | 
						|
                    {
 | 
						|
                        foreach (var item in ListEstimate)
 | 
						|
                        {
 | 
						|
                            if (item.USER_ID == LoginID.Value)
 | 
						|
                            {
 | 
						|
                                item.ISSIGN = true;
 | 
						|
                                break;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
 | 
						|
                this.UnifiedCommit(() =>
 | 
						|
                {
 | 
						|
                    if (entity != null)
 | 
						|
                        UpdateEntityNoCommit(entity);
 | 
						|
                    if (ListEstimate != null && ListEstimate.Any()) //评估人员
 | 
						|
                        BantchSaveEntityNoCommit(ListEstimate);
 | 
						|
                    if (ListRspConditions != null && ListRspConditions.Any())//应急响应情况
 | 
						|
                        BantchSaveEntityNoCommit(ListRspConditions);
 | 
						|
                    if (ListEventKind != null && ListEventKind.Any())   //事故/事件种类
 | 
						|
                        BantchSaveEntityNoCommit(ListEventKind);
 | 
						|
                    if (ListJoin != null && ListJoin.Any())  //参与人员
 | 
						|
                        BantchSaveEntityNoCommit(ListJoin);
 | 
						|
                    if (listTask != null && listTask.Any())  //评估人员签到
 | 
						|
                        BantchSaveEntityNoCommit(listTask);
 | 
						|
                });
 | 
						|
                return true;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取事故事件的 事故/事件种类
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("GetEventKinds")]
 | 
						|
        public JsonActionResult<List<T_CM_RSP_ESTIMATE_EVENT_KIND>> GetEventKinds([FromBody] KeywordFilter filter)
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                List<T_CM_RSP_ESTIMATE_EVENT_KIND> listResult = new List<T_CM_RSP_ESTIMATE_EVENT_KIND>();
 | 
						|
                Guid EventID = Guid.NewGuid();
 | 
						|
                Guid ESTIMATE_ID = Guid.NewGuid();
 | 
						|
                if (filter.FilterGroup.Rules != null && filter.FilterGroup.Rules.Any())
 | 
						|
                {
 | 
						|
                    foreach (var item in filter.FilterGroup.Rules)
 | 
						|
                    {
 | 
						|
                        if (item.Field == "EventID" && !string.IsNullOrEmpty(item.Value.ToString()))
 | 
						|
                        {
 | 
						|
                            EventID = new Guid(item.Value.ToString());
 | 
						|
                        }
 | 
						|
                        else if (item.Field == "ID")
 | 
						|
                        {
 | 
						|
                            ESTIMATE_ID = new Guid(item.Value.ToString());
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if (EventID == Guid.Empty || ESTIMATE_ID == Guid.Empty)
 | 
						|
                {
 | 
						|
                    return listResult;
 | 
						|
                }
 | 
						|
 | 
						|
                var Kinds = GetEntities<T_AE_ACCIDENT_EVENT_REPORT_LIST_KIND>(e => e.REPORT_ID == EventID && !e.IS_DELETED, null, "Nav_AccidentKind");
 | 
						|
                if (Kinds != null && Kinds.Any())
 | 
						|
                {
 | 
						|
                    foreach (var item in Kinds)
 | 
						|
                    {
 | 
						|
                        listResult.Add(new T_CM_RSP_ESTIMATE_EVENT_KIND()
 | 
						|
                        {
 | 
						|
                            ID = Guid.NewGuid(),
 | 
						|
                            ESTIMATE_ID = ESTIMATE_ID,
 | 
						|
                            KIND_ID = item.Nav_AccidentKind.ID,
 | 
						|
                            Nav_RspAccdentKind = item.Nav_AccidentKind,
 | 
						|
                            IS_DELETED = false,
 | 
						|
                            ORG_ID = filter.OrgId,
 | 
						|
                            //ENTITY_ORG_TPYE       = ,
 | 
						|
                            //FORM_ID               = ,
 | 
						|
                            //FLOW_STATUS           = ,
 | 
						|
                            //FLOW_SEND_STATUS      = ,
 | 
						|
                            //FLOW_ID               = ,
 | 
						|
                            //CREATE_TIME           = ,
 | 
						|
                            //MODIFY_TIME           = ,
 | 
						|
                            //CREATER_ID            = ,
 | 
						|
                            //MODIFIER_ID           = 
 | 
						|
 | 
						|
                        });
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                return listResult;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 评估人员签到
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("Sign")]
 | 
						|
        public JsonActionResult<bool> Sign([FromBody] KeywordFilter filter)
 | 
						|
        {
 | 
						|
            return SafeExecute<bool>(() =>
 | 
						|
            {
 | 
						|
                //评估人员签到,所有评估人员签到后触发审批
 | 
						|
                Guid ESTIMATE_ID = new Guid(filter.Keyword);
 | 
						|
                var listSign = GetEntities<T_CM_RSP_ESTIMATE_ESTIMATE_USER>(e => e.ESTIMATE_ID == ESTIMATE_ID && !e.ISSIGN, null, null);
 | 
						|
                if (listSign == null || !listSign.Any())
 | 
						|
                {
 | 
						|
                    throw new Exception("获取确认信息失败!");
 | 
						|
                }
 | 
						|
 | 
						|
                Guid taskID = Guid.Empty;
 | 
						|
                if (!string.IsNullOrEmpty(filter.Parameter1))
 | 
						|
                    taskID = new Guid(filter.Parameter1);
 | 
						|
 | 
						|
                var loginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
 | 
						|
                var loginSign = listSign.FirstOrDefault(e => e.USER_ID == loginID);
 | 
						|
                if (loginSign == null)
 | 
						|
                {
 | 
						|
                    throw new Exception("暂未获取到您未确认的信息!");
 | 
						|
                }
 | 
						|
                loginSign.ISSIGN = true;
 | 
						|
                loginSign.MODIFIER_ID = loginID;
 | 
						|
                loginSign.MODIFY_TIME = DateTime.Now;
 | 
						|
                var isLast = false;
 | 
						|
                if (listSign.Count() == 1)
 | 
						|
                {
 | 
						|
                    isLast = true;
 | 
						|
                }
 | 
						|
 | 
						|
                if (isLast)
 | 
						|
                {
 | 
						|
                    //修改状态 结束待办 发起审批流 
 | 
						|
                    var entity = GetEntity<T_CM_RSP_ESTIMATE>(ESTIMATE_ID);
 | 
						|
                    entity.STATUS = PFStandardStatus.Approving;//其实是检查中了
 | 
						|
 | 
						|
                    entity.APPROVE_ID = Guid.NewGuid();
 | 
						|
                    string serialCode = "XYPG" + DateTime.Now.ToString("yyyyMMddHHmmss");
 | 
						|
                    var param = ((int)entity.RSP_LEVEL.Value).ToString();
 | 
						|
 | 
						|
                    MFlowPermitService.InsertApprove(serialCode, "CM023", param, entity.ID, "CM023_SHOWPRINT", taskID, true, () =>
 | 
						|
                   {
 | 
						|
                       if (entity != null)
 | 
						|
                           UpdateEntityNoCommit(entity);
 | 
						|
                       if (loginSign != null)
 | 
						|
                           UpdateEntityNoCommit(loginSign);
 | 
						|
                   }, entity.APPROVE_ID, entity.USER_ID, null, null, null, "CM023_SHOWPRINT");
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    //结束 待办
 | 
						|
                    T_FM_NOTIFICATION_TASK task = NotificationTaskService.GetEntityTask(taskID);
 | 
						|
                    this.UnifiedCommit(() =>
 | 
						|
                    {
 | 
						|
                        if (loginSign != null)
 | 
						|
                            UpdateEntityNoCommit(loginSign);
 | 
						|
                        if (task != null)//代办消息 清除
 | 
						|
                            UpdateEntityNoCommit(task);
 | 
						|
                    });
 | 
						|
                }
 | 
						|
                return true;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 年度应急演练计划表  审批结束
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="id"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpGet, Route("EstimateBack")]
 | 
						|
        public JsonActionResult<bool> EstimateBack(string id)
 | 
						|
        {
 | 
						|
            return SafeExecute<bool>(() =>
 | 
						|
            {
 | 
						|
                return ApproveCallBackService.CallBack("CM/CMRspEstimate/EstimateBack", id);
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获得单条实体数据
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter">过滤实体</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("GetOrder")]
 | 
						|
        public JsonActionResult<T_CM_RSP_ESTIMATE> GetOrder([FromBody] KeywordFilter filter)
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                var model = GetEntity<T_CM_RSP_ESTIMATE>(null, filter, null);
 | 
						|
                if (model.Nav_ListRspConditions != null && model.Nav_ListRspConditions.Any())
 | 
						|
                {
 | 
						|
                    model.Nav_ListRspConditions = model.Nav_ListRspConditions.OrderBy(e => e.ROW_NO).ToList();
 | 
						|
                }
 | 
						|
                return model;
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |