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.FO;
using APT.MS.Domain.Entities.SC;
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.SC
{
    /// <summary>
    /// 
    /// </summary>
    [Route("api/SC/SCMtMeetingMinutes")]
    public class SCMtMeetingMinutesController : AuthorizeApiController<T_SC_MT_MEETING_MINUTES>
    {
        IFMFlowPermitService MFlowPermitService { get; set; }
        IFMUserService FMUserService { get; set; }
        IPFApproveCallBackService ApproveCallBackService { get; set; }
        IFMNotificationTaskService FMNotificActionTaskService { get; set; }
        IFMNotificationTaskService NotificationTaskService { get; set; }
        IPFCodeRuleService CodeRuleService { get; set; }
        public SCMtMeetingMinutesController(IFMUserService fMUserService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService, IPFCodeRuleService codeRuleService, IFMNotificationTaskService fMNotificActionTaskService, IFMNotificationTaskService notificationTaskService)
        {
            FMUserService = fMUserService;
            MFlowPermitService = mFlowPermitService;
            ApproveCallBackService = approveCallBackService;
            FMNotificActionTaskService = fMNotificActionTaskService;
            NotificationTaskService = notificationTaskService;
            CodeRuleService = codeRuleService;
        }

        /// <summary>
        /// 编辑页面过滤 评审人
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        [HttpPost, Route("Get")]
        public JsonActionResult<T_SC_MT_MEETING_MINUTES> Get([FromBody] KeywordFilter filter)
        {
            return SafeExecute<T_SC_MT_MEETING_MINUTES>(() =>
            {
                Guid ID = Guid.Empty;
                if (filter.FilterGroup.Rules != null && filter.FilterGroup.Rules.Any())
                {
                    foreach (var item in filter.FilterGroup.Rules)
                    {
                        if (item.Field == "ID")
                        {
                            ID = new Guid(item.Value.ToString());
                            filter.FilterGroup.Rules.Remove(item);
                            break;
                        }
                    }
                }
                T_SC_MT_MEETING_MINUTES result = null;
                if (ID == Guid.Empty)
                {
                    result = GetEntity<T_SC_MT_MEETING_MINUTES>(null, filter);
                }
                else
                {
                    ICollection<string> IncludeMinutes = new List<string>();
                    //ICollection<string> IncludeMinutesUserExt = new List<string>();
                    bool isUserExt = false;
                    List<string> IncludeMinutesContent = new List<string>();
                    ICollection<string> IncludeMeeting = new List<string>();
                    ICollection<string> IncludeMinutesUserSign = new List<string>();//需要签名的
                    foreach (var item in filter.Include)
                    {
                        //if (item == "Nav_ListContent.Nav_ListContentDeal" || item == "Nav_ListContent.Nav_Content.Nav_ListContentDeal" || item == "Nav_ListMeetingContent.Nav_ContentName" || item == "Nav_ListMeetingContent")
                        //{
                        //    //会议纪要 拉出了 会议的会议内容
                        //    IncludeMeeting.Add(item);
                        //}
                        //else 

                        if (item.Contains("Nav_Meeting"))
                        {
                            if (item != "Nav_Meeting" && item != "Nav_Meeting.Nav_UserHost" && item != "Nav_Meeting.Nav_UserRecorder")
                            {
                                IncludeMeeting.Add(item.Substring(12));
                            }
                        }
                        else if (item.Contains("Nav_ListContent"))
                        {
                            if (item != "Nav_ListContent")
                                IncludeMinutesContent.Add(item.Substring(16));
                        }
                        else if (item.Contains("Nav_User") && item.StartsWith("Nav_ListP"))
                        {
                            if (item.Contains("Nav_UserSignFiles"))
                            {
                                IncludeMinutesUserSign.Add(item);
                            }


                            IncludeMinutes.Add(item.Split(".Nav_User")[0]);//人员拆分搜索
                            if (!isUserExt && item.Contains(".Nav_User."))
                            {
                                isUserExt = true;
                            }
                            //if (item.Contains(".Nav_User."))
                            //{
                            //    IncludeMinutesUserExt.Add(item.Split(".Nav_User.")[1]);
                            //}
                        }
                        else
                        {
                            IncludeMinutes.Add(item);
                        }
                    }
                    //if (IncludeMinutesUserExt.Count > 0)
                    //{
                    //    IncludeMinutesUserExt = IncludeMinutesUserExt.Distinct().ToList();
                    //}

                    filter.Include = IncludeMinutes;

                    result = GetEntity<T_SC_MT_MEETING_MINUTES>(e => e.ID == ID, IncludeMinutes.ToArray());
                    var meeting = GetEntity<T_SC_MT_MEETING>(e => e.ID == result.MEETING_ID, IncludeMeeting.ToArray());

                    if (IncludeMinutesContent != null && IncludeMinutesContent.Count > 0)
                    {
                        if (IncludeMinutesContent.Contains("Nav_ListContentDeal") && !IncludeMinutesContent.Contains("Nav_ListContentDeal.Nav_ContentDeal"))
                        {
                            IncludeMinutesContent.Add("Nav_ListContentDeal.Nav_ContentDeal");
                        }
                        var contents = GetEntities<T_SC_MT_MEETING_MINUTES_CONTENT>(e => e.MEETING_MINUTES_ID == ID, null, IncludeMinutesContent.ToArray());
                        if (contents != null && contents.Any())
                        {
                            result.Nav_ListContent = contents.ToList();
                        }
                        else
                        {
                            result.Nav_ListContent = new List<T_SC_MT_MEETING_MINUTES_CONTENT>();
                        }
                    }
                    //1   "Nav_ListPReview.Nav_User"
                    //10  "Nav_ListPAskForLeave.Nav_User"
                    //11  "Nav_ListPAbsence.Nav_User"
                    //13  "Nav_ListPJoin.Nav_User.Nav_UserSignFiles.Nav_ImgFile.Nav_File"

                    List<Guid> listUserID = new List<Guid>();
                    List<Guid> listUserIDSign = new List<Guid>();
                    if (meeting.USER_ID_HOST.HasValue)
                    {
                        listUserID.Add(meeting.USER_ID_HOST.Value);//主持人
                    }
                    if (meeting.USER_ID_RECORDER.HasValue)
                    {
                        listUserID.Add(meeting.USER_ID_RECORDER.Value);//记录人
                    }

                    if (result.Nav_ListPReview != null && result.Nav_ListPReview.Any())
                    {
                        listUserID.AddRange(result.Nav_ListPReview.Select(e => e.USER_ID));
                    }
                    if (result.Nav_ListPAskForLeave != null && result.Nav_ListPAskForLeave.Any())
                    {
                        listUserID.AddRange(result.Nav_ListPAskForLeave.Select(e => e.USER_ID));
                    }
                    if (result.Nav_ListPAbsence != null && result.Nav_ListPAbsence.Any())
                    {
                        listUserID.AddRange(result.Nav_ListPAbsence.Select(e => e.USER_ID));
                    }
                    if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                    {
                        listUserID.AddRange(result.Nav_ListPJoin.Select(e => e.USER_ID));
                        listUserIDSign.AddRange(result.Nav_ListPJoin.Select(e => e.USER_ID));
                    }

                    if (listUserID.Count > 0)
                    {
                        listUserID = listUserID.Distinct().ToList();
                        var listUserAll = GetEntities<T_FM_USER>(e => listUserID.Contains(e.ID), null, null);
                        if (listUserAll != null && listUserAll.Any() && listUserIDSign.Count > 0)
                        {
                            var listUserSign = GetEntities<T_FM_USER_SIGN_FILE>(e => listUserIDSign.Contains(e.USER_ID), null, "Nav_ImgFile.Nav_File");
                            foreach (var item in listUserAll)
                            {
                                if (listUserIDSign.Contains(item.ID))
                                {
                                    item.Nav_UserSignFiles = listUserSign.Where(e => e.USER_ID == item.ID).ToList();
                                }
                            }
                        }

                        if (result.Nav_ListPReview != null && result.Nav_ListPReview.Any())
                        {
                            foreach (var item in result.Nav_ListPReview)
                            {
                                item.Nav_User = listUserAll.FirstOrDefault(e => e.ID == item.USER_ID);
                            }
                        }
                        if (result.Nav_ListPAskForLeave != null && result.Nav_ListPAskForLeave.Any())
                        {
                            foreach (var item in result.Nav_ListPAskForLeave)
                            {
                                item.Nav_User = listUserAll.FirstOrDefault(e => e.ID == item.USER_ID);
                            }
                        }
                        if (result.Nav_ListPAbsence != null && result.Nav_ListPAbsence.Any())
                        {
                            foreach (var item in result.Nav_ListPAbsence)
                            {
                                item.Nav_User = listUserAll.FirstOrDefault(e => e.ID == item.USER_ID);
                            }
                        }
                        if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                        {
                            foreach (var item in result.Nav_ListPJoin)
                            {
                                item.Nav_User = listUserAll.FirstOrDefault(e => e.ID == item.USER_ID);
                            }
                        }


                        if (meeting.USER_ID_HOST.HasValue)
                        {
                            meeting.Nav_UserHost = listUserAll.FirstOrDefault(e => e.ID == meeting.USER_ID_HOST.Value);//主持人
                        }
                        if (meeting.USER_ID_RECORDER.HasValue)
                        {
                            meeting.Nav_UserRecorder = listUserAll.FirstOrDefault(e => e.ID == meeting.USER_ID_RECORDER.Value);//记录人
                        }

                        if (isUserExt)
                        {
                            //评审人员 和 参加人 额外显示部门职位信息
                            List<Guid> listDepID = new List<Guid>();
                            List<Guid> listPersonID = new List<Guid>();
                            listDepID.AddRange(result.Nav_ListPJoin.Where(e => e.Nav_User.DEPARTMENT_ID.HasValue).Select(e => e.Nav_User.DEPARTMENT_ID.Value).ToList());
                            listDepID.AddRange(result.Nav_ListPReview.Where(e => e.Nav_User.DEPARTMENT_ID.HasValue).Select(e => e.Nav_User.DEPARTMENT_ID.Value).ToList());

                            listPersonID.AddRange(result.Nav_ListPJoin.Where(e => e.Nav_User.PERSON_ID.HasValue).Select(e => e.Nav_User.PERSON_ID.Value).ToList());
                            listPersonID.AddRange(result.Nav_ListPReview.Where(e => e.Nav_User.PERSON_ID.HasValue).Select(e => e.Nav_User.PERSON_ID.Value).ToList());

                            listDepID = listDepID.Distinct().ToList();
                            listPersonID = listPersonID.Distinct().ToList();
                            if (listDepID != null)
                            {
                                var listDep = GetEntities<T_FM_DEPARTMENT>(e => listDepID.Contains(e.ID), null, null);
                                foreach (var item in result.Nav_ListPJoin)
                                {
                                    if (item.Nav_User.DEPARTMENT_ID.HasValue)
                                        item.Nav_User.Nav_Department = listDep.FirstOrDefault(e => item.Nav_User.DEPARTMENT_ID == e.ID);
                                }
                                foreach (var item in result.Nav_ListPReview)
                                {
                                    if (item.Nav_User.DEPARTMENT_ID.HasValue)
                                        item.Nav_User.Nav_Department = listDep.FirstOrDefault(e => item.Nav_User.DEPARTMENT_ID == e.ID);
                                }
                            }
                            if (listPersonID != null && listPersonID.Any())
                            {
                                var listPersons = GetEntities<T_FM_PERSON>(e => listPersonID.Contains(e.ID), null, "Nav_Post");
                                foreach (var item in result.Nav_ListPJoin)
                                {
                                    if (item.Nav_User.PERSON_ID.HasValue)
                                        item.Nav_User.Nav_Person = listPersons.FirstOrDefault(e => item.Nav_User.PERSON_ID == e.ID);
                                }
                                foreach (var item in result.Nav_ListPReview)
                                {
                                    if (item.Nav_User.PERSON_ID.HasValue)
                                        item.Nav_User.Nav_Person = listPersons.FirstOrDefault(e => item.Nav_User.PERSON_ID == e.ID);
                                }
                            }
                        }
                    }
                    result.Nav_Meeting = meeting;
                }


                if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                {
                    result.Nav_ListPJoin = result.Nav_ListPJoin.Where(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.JOIN).OrderBy(e => e.ISRECORDRED).ThenBy(e => e.MODIFY_TIME).ToList();
                }

                //检查内容排序
                if (result.Nav_ListContent != null && result.Nav_ListContent.Any())
                {
                    var ListContent = result.Nav_ListContent.OrderBy(e => e.Nav_Content.CONTENT_NO).ThenBy(e => e.Nav_Content.CONTENTNAME_ID).ToList();

                    foreach (var item in ListContent)
                    {
                        if (item.Nav_ListContentDeal != null && item.Nav_ListContentDeal.Any())
                            item.Nav_ListContentDeal = item.Nav_ListContentDeal.OrderBy(e => e.Nav_ContentDeal.CONTENT_DEAL_NO).ToList();

                        if (item.Nav_Content.Nav_ListContentDeal != null && item.Nav_Content.Nav_ListContentDeal.Any())
                            item.Nav_Content.Nav_ListContentDeal = item.Nav_Content.Nav_ListContentDeal.OrderBy(e => e.CONTENT_DEAL_NO).ToList();
                    }
                    result.Nav_ListContent = ListContent;
                }

                if (DataHelper.GetRequestType(Request.Headers) == 2 && result.Nav_ListMinutesDetail != null && result.Nav_ListMinutesDetail.Any())
                {
                    foreach (var item in result.Nav_ListMinutesDetail)
                    {
                        if (item.DEALEFFECT.HasValue)
                        {
                            item.DEALEFFECTSHOW = item.DEALEFFECT.Value.GetDescription();
                        }
                    }
                }

                return result;
            });
        }

        /// <summary>
        /// 编辑页面过滤 评审人  Get的改进版(移动端)
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        [HttpPost, Route("GetDevelop")]
        public JsonActionResult<T_SC_MT_MEETING_MINUTES> GetDevelop([FromBody] KeywordFilter filter)
        {
            return SafeExecute<T_SC_MT_MEETING_MINUTES>(() =>
            {
                Guid ID = Guid.Empty;
                if (filter.FilterGroup.Rules != null && filter.FilterGroup.Rules.Any())
                {
                    foreach (var item in filter.FilterGroup.Rules)
                    {
                        if (item.Field == "ID")
                        {
                            ID = new Guid(item.Value.ToString());
                            filter.FilterGroup.Rules.Remove(item);
                            break;
                        }
                    }
                }
                T_SC_MT_MEETING_MINUTES result = null;
                if (ID == Guid.Empty)
                {
                    result = GetEntity<T_SC_MT_MEETING_MINUTES>(null, filter);
                }
                else
                {
                    ICollection<string> IncludeMinutes = new List<string>();
                    ICollection<string> IncludeMeeting = new List<string>();
                    ICollection<string> IncludeMinutesContent = new List<string>();
                    foreach (var item in filter.Include)
                    {
                        //if (item == "Nav_ListContent.Nav_ListContentDeal" || item == "Nav_ListContent.Nav_Content.Nav_ListContentDeal" || item == "Nav_ListMeetingContent.Nav_ContentName" || item == "Nav_ListMeetingContent")
                        //{
                        //    //会议纪要 拉出了 会议的会议内容
                        //    IncludeMeeting.Add(item);
                        //}
                        //else 
                        if (item.Contains("Nav_Meeting"))
                        {
                            if (item != "Nav_Meeting" && item != "Nav_Meeting.Nav_UserHost" && item != "Nav_Meeting.Nav_UserRecorder")
                                IncludeMeeting.Add(item.Substring(12));
                        }
                        else if (item.Contains("Nav_ListContent"))
                        {
                            if (item != "Nav_ListContent")
                                IncludeMinutesContent.Add(item.Substring(16));
                        }
                        else
                        {
                            IncludeMinutes.Add(item);
                        }
                    }
                    filter.Include = IncludeMinutes;
                    result = GetEntity<T_SC_MT_MEETING_MINUTES>(e => e.ID == ID, IncludeMinutes.ToArray());

                    var meeting = GetEntity<T_SC_MT_MEETING>(e => e.ID == result.MEETING_ID, IncludeMeeting.ToArray());

                    #region    人员加载

                    result.Nav_ListPReview = GetEntities<T_SC_MT_MINUTES_PREVIEW>(e => e.MEETING_MINUTES_ID == result.ID, null, null).ToList();
                    result.Nav_ListPAskForLeave = GetEntities<T_SC_MT_MEETING_PASKFORLEAVE>(e => e.MEETING_MINUTES_ID == result.ID, null, null).ToList();
                    result.Nav_ListPAbsence = GetEntities<T_SC_MT_MEETING_PABSENCE>(e => e.MEETING_MINUTES_ID == result.ID, null, null).ToList();
                    result.Nav_ListPJoin = GetEntities<T_SC_MT_MEETING_PJOIN>(e => e.MEETING_MINUTES_ID == result.ID, null, null).ToList();

                    List<Guid> listUserID = new List<Guid>();
                    if (meeting.USER_ID_HOST.HasValue)
                    {
                        listUserID.Add(meeting.USER_ID_HOST.Value);
                    }
                    if (meeting.USER_ID_RECORDER.HasValue)
                    {
                        listUserID.Add(meeting.USER_ID_RECORDER.Value);
                    }

                    if (result.Nav_ListPReview != null && result.Nav_ListPReview.Any())
                    {
                        var listUserIDPR = result.Nav_ListPReview.Select(e => e.USER_ID);
                        if (listUserIDPR.Any())
                        {
                            listUserID.AddRange(listUserIDPR);
                        }
                    }

                    if (result.Nav_ListPAskForLeave != null && result.Nav_ListPAskForLeave.Any())
                    {
                        var listUserIDPR = result.Nav_ListPAskForLeave.Select(e => e.USER_ID);
                        if (listUserIDPR.Any())
                        {
                            listUserID.AddRange(listUserIDPR);
                        }
                    }
                    if (result.Nav_ListPAbsence != null && result.Nav_ListPAbsence.Any())
                    {
                        var listUserIDPR = result.Nav_ListPAbsence.Select(e => e.USER_ID);
                        if (listUserIDPR.Any())
                        {
                            listUserID.AddRange(listUserIDPR);
                        }
                    }
                    if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                    {
                        var listUserIDPR = result.Nav_ListPJoin.Select(e => e.USER_ID);
                        if (listUserIDPR.Any())
                        {
                            listUserID.AddRange(listUserIDPR);
                        }
                    }
                    if (listUserID != null && listUserID.Any())
                    {
                        listUserID = listUserID.Distinct().ToList();
                        var listUserS = GetEntities<T_FM_USER>(e => listUserID.Contains(e.ID), null, null);

                        if (result.Nav_ListPReview != null && result.Nav_ListPReview.Any())
                        {
                            result.Nav_ListPReview.ForEach(e =>
                            {
                                e.Nav_User = listUserS.FirstOrDefault(eu => eu.ID == e.USER_ID);
                            });
                        }

                        if (result.Nav_ListPAskForLeave != null && result.Nav_ListPAskForLeave.Any())
                        {
                            result.Nav_ListPAskForLeave.ForEach(e =>
                            {
                                e.Nav_User = listUserS.FirstOrDefault(eu => eu.ID == e.USER_ID);
                            });
                        }
                        if (result.Nav_ListPAbsence != null && result.Nav_ListPAbsence.Any())
                        {
                            result.Nav_ListPAbsence.ForEach(e =>
                            {
                                e.Nav_User = listUserS.FirstOrDefault(eu => eu.ID == e.USER_ID);
                            });
                        }
                        if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                        {
                            result.Nav_ListPJoin.ForEach(e =>
                            {
                                e.Nav_User = listUserS.FirstOrDefault(eu => eu.ID == e.USER_ID);
                            });
                        }

                        if (meeting.USER_ID_HOST.HasValue)
                        {
                            meeting.Nav_UserHost = listUserS.FirstOrDefault(e => e.ID == meeting.USER_ID_HOST.Value);
                        }
                        if (meeting.USER_ID_RECORDER.HasValue)
                        {
                            meeting.Nav_UserRecorder = listUserS.FirstOrDefault(e => e.ID == meeting.USER_ID_RECORDER.Value);
                        }
                    }

                    #endregion

                    //#region     Nav_ListContent
                    //var Nav_ListContent = GetEntities<T_SC_MT_MEETING_MINUTES_CONTENT>(e => e.MEETING_MINUTES_ID == result.ID, null, IncludeMinutesNav_ListContent.ToArray());
                    //result.Nav_ListContent = Nav_ListContent.ToList();
                    //#endregion

                    result.Nav_Meeting = meeting;

                    if (IncludeMinutesContent != null && IncludeMinutesContent.Count > 0)
                    {
                        if (IncludeMinutesContent.Contains("Nav_ListContentDeal") && !IncludeMinutesContent.Contains("Nav_ListContentDeal.Nav_ContentDeal"))
                        {
                            IncludeMinutesContent.Add("Nav_ListContentDeal.Nav_ContentDeal");
                        }
                        var contents = GetEntities<T_SC_MT_MEETING_MINUTES_CONTENT>(e => e.MEETING_MINUTES_ID == ID, null, IncludeMinutesContent.ToArray());
                        if (contents != null && contents.Any())
                        {
                            result.Nav_ListContent = contents.ToList();
                        }
                        else
                        {
                            result.Nav_ListContent = new List<T_SC_MT_MEETING_MINUTES_CONTENT>();
                        }
                    }
                }

                if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                {
                    result.Nav_ListPJoin = result.Nav_ListPJoin.Where(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.JOIN).OrderBy(e => e.ISRECORDRED).ThenBy(e => e.MODIFY_TIME).ToList();
                }

                //检查内容排序
                if (result.Nav_ListContent != null && result.Nav_ListContent.Any())
                {
                    var ListContent = result.Nav_ListContent.OrderBy(e => e.Nav_Content.CONTENT_NO).ThenBy(e => e.Nav_Content.CONTENTNAME_ID).ToList();

                    foreach (var item in ListContent)
                    {
                        if (item.Nav_ListContentDeal != null && item.Nav_ListContentDeal.Any())
                            item.Nav_ListContentDeal = item.Nav_ListContentDeal.OrderBy(e => e.Nav_ContentDeal.CONTENT_DEAL_NO).ToList();

                        if (item.Nav_Content.Nav_ListContentDeal != null && item.Nav_Content.Nav_ListContentDeal.Any())
                            item.Nav_Content.Nav_ListContentDeal = item.Nav_Content.Nav_ListContentDeal.OrderBy(e => e.CONTENT_DEAL_NO).ToList();
                    }
                    result.Nav_ListContent = ListContent;
                }

                if (DataHelper.GetRequestType(Request.Headers) == 2 && result.Nav_ListMinutesDetail != null && result.Nav_ListMinutesDetail.Any())
                {
                    foreach (var item in result.Nav_ListMinutesDetail)
                    {
                        if (item.DEALEFFECT.HasValue)
                        {
                            item.DEALEFFECTSHOW = item.DEALEFFECT.Value.GetDescription();
                        }
                    }
                }

                return result;
            });
        }

        ///// <summary>
        ///// 编辑页面过滤 评审人
        ///// </summary>
        ///// <param name="filter"></param>
        ///// <returns></returns>
        //[HttpPost, Route("Get")]
        //public JsonActionResult<T_SC_MT_MEETING_MINUTES> GetPAll([FromBody] KeywordFilter filter)
        //{
        //    return SafeExecute<T_SC_MT_MEETING_MINUTES>(() =>
        //    {
        //        T_SC_MT_MEETING_MINUTES result = GetEntity<T_SC_MT_MEETING_MINUTES>(null, filter);
        //        if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
        //        {
        //            result.Nav_ListPJoin = result.Nav_ListPJoin.Where(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.JOIN).OrderBy(e => e.ISRECORDRED).ThenBy(e => e.MODIFY_TIME).ToList();
        //            //var listPJoin = result.Nav_ListPJoin.Where(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.REVIEW);
        //            //if (listPJoin != null && listPJoin.Any())
        //            //{
        //            //    //result.Nav_ListPReView = listPJoin.ToList();
        //            //}
        //        }

        //        //检查内容排序
        //        if (result.Nav_ListContent != null && result.Nav_ListContent.Any())
        //        {
        //            var ListContent = result.Nav_ListContent.OrderBy(e => e.CONTENT_ID).ToList();

        //            foreach (var item in ListContent)
        //            {
        //                if (item.Nav_ListContentDeal != null && item.Nav_ListContentDeal.Any())
        //                {
        //                    item.Nav_ListContentDeal = item.Nav_ListContentDeal.OrderBy(e => e.Nav_ContentDeal.CONTENT_DEAL_NO).ToList();
        //                }
        //            }
        //            result.Nav_ListContent = ListContent;
        //            //foreach (var item in ListContent)
        //            //{
        //            //    if (item.Nav_ListContentDeal!=null&& item.Nav_ListContentDeal.Count>0)
        //            //    {
        //            //        foreach (var itemD in item.Nav_ListContentDeal)
        //            //        {
        //            //            itemD.Nav_ContentDeal = itemD.Nav_ContentDeal.Nav_Content.Nav_ListContentDeal.OrderBy(e=>e.CONTENT_DEAL_NO).ToList();
        //            //        }
        //            //    }
        //            //}
        //        }

        //        return result;
        //    });
        //}


        /// <summary>
        /// 纪要
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost, Route("FullUpdate")]
        public JsonActionResult<bool> FullUpdate([FromBody] T_SC_MT_MEETING_MINUTES entity)
        {
            return SafeExecute<bool>(() =>
            {
                Guid LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value;
                var meeting = GetEntity<T_SC_MT_MEETING>(entity.MEETING_ID, new string[] { "Nav_UserRecorder", "Nav_ListPAll.Nav_User", "Nav_ListPReView" });
                if (meeting.USER_ID_RECORDER != LoginID)
                {
                    throw new Exception("您不是" + meeting.Nav_UserRecorder.NAME + "不能操作此会议纪要！");
                }
                if (entity.STATUS != PFStandardStatus.Draft && entity.STATUS != PFStandardStatus.Sign)
                {
                    //会议纪要不是草稿或者 保存并发送
                    throw new Exception("纪要状态【" + entity.STATUS.GetDescription() + "】，操作失败！");
                }

                //如果有会议意见
                //如果是单选 同一组 取最后为true的 别的false
                var listContent = entity.Nav_ListContent;
                entity.Nav_ListContent = null;
                List<T_SC_MT_MEETING_MINUTES_CONTENT_DEAL> listContentDetail = new List<T_SC_MT_MEETING_MINUTES_CONTENT_DEAL>();
                if (listContent != null && listContent.Any())
                {
                    int index = 0;
                    string Msg = string.Empty;
                    foreach (var item in listContent)
                    {
                        index++;
                        if (item.CONTENT_ID == Guid.Empty)
                            continue;
                        if (item.Nav_ListContentDeal == null || !item.Nav_ListContentDeal.Any())
                            continue;


                        T_SC_MT_CONTENT content = GetEntity<T_SC_MT_CONTENT>(item.CONTENT_ID);
                        if (content.CHECKTYPE != CHECKTYPE.TheRadio)
                        {
                            //多选 都不选 暂时也OK
                            listContentDetail.AddRange(item.Nav_ListContentDeal); //不需要数据处理
                            continue;
                        }

                        var listRadioCheck = item.Nav_ListContentDeal.Where(e => e.ISCHECK);
                        if (listRadioCheck == null || listRadioCheck.Count() < 1)
                        {
                            Msg += ((string.IsNullOrEmpty(Msg) ? "" : "，") + index.ToString());
                            continue;
                        }
                        if (string.IsNullOrEmpty(Msg))
                        {
                            listContentDetail.AddRange(item.Nav_ListContentDeal);
                            var listRadioCheckOrder = listRadioCheck.OrderByDescending(e => e.MODIFY_TIME).ToList();//时间倒序 第二个之后的都是false
                            for (int i = 1; i < listRadioCheckOrder.Count; i++)
                            {
                                listRadioCheckOrder[i].ISCHECK = false;
                            }
                        }
                    }

                    if (!string.IsNullOrEmpty(Msg))
                    {
                        throw new Exception("请选择【" + Msg + "】项会议意见的结果！");
                    }
                }

                //所有的人员信息 必须有在 参加 缺勤 请假 中
                var Join = entity.Nav_ListPJoin;
                if (Join == null || !Join.Any())
                {
                    throw new Exception("参会人不能为空！");
                }
                var listJoins = Join.ToList();
                foreach (var item in listJoins)
                {
                    item.Nav_User.ID = item.USER_ID;
                }

                var AskForLeave = entity.Nav_ListPAskForLeave;
                var Absence = entity.Nav_ListPAbsence;
                var Review = entity.Nav_ListPReview;

                //entity.Nav_ListPJoin = null;
                //entity.Nav_ListPAskForLeave = null;
                //entity.Nav_ListPAbsence = null;
                //bool isThisInt = false;
                //bool isThisRepeat = false;
                List<T_FM_USER> listUserJoin = listJoins.Where(e => !e.IS_DELETED).Select(e => e.Nav_User).ToList();


                List<T_FM_USER> listUserLevel = null;
                List<T_FM_USER> listUserAbsence = null;
                List<T_FM_USER> listUserReview = null;

                List<T_FM_USER> listUserLack = new List<T_FM_USER>();//少选人员
                List<T_FM_USER> listUserRepeat = new List<T_FM_USER>();//重复人员

                if (AskForLeave != null && AskForLeave.Any())
                {
                    foreach (var item in AskForLeave)
                        item.Nav_User.ID = item.USER_ID;//前端配置有问题

                    listUserLevel = AskForLeave.Where(e => !e.IS_DELETED).Select(e => e.Nav_User).ToList();
                }
                if (Absence != null && Absence.Any())
                {
                    foreach (var item in Absence)
                        item.Nav_User.ID = item.USER_ID;//前端配置有问题

                    listUserAbsence = Absence.Where(e => !e.IS_DELETED).Select(e => e.Nav_User).ToList();
                }
                if (Review != null && Review.Any())
                {
                    listUserReview = Review.Where(e => !e.IS_DELETED).Select(e => e.Nav_User).ToList();
                }
                var ListMinutesDetail = entity.Nav_ListMinutesDetail;
                //entity.Nav_ListMinutesDetail = null;
                var files = entity.Nav_Files;
                //entity.Nav_Files = null;
                if (entity.STATUS == PFStandardStatus.Sign)
                {
                    if (string.IsNullOrEmpty(entity.MEETINGRECORD))
                    {
                        throw new Exception("会议记录不能为空！");
                    }

                    if ((entity.MEETINGTYPE == SCMEETINGTYPE.BasicSecurity || entity.MEETINGTYPE == SCMEETINGTYPE.SafetyBoard) && (entity.Nav_ListMinutesDetail == null || !entity.Nav_ListMinutesDetail.Any()))
                    {
                        throw new Exception("请填写" + entity.MEETINGTYPE.GetDescription() + "的会议决议！");
                    }

                    //保存并发送
                    var PAllUser = meeting.Nav_ListPAll.Where(e => !e.IS_DELETED && e.PERSONTYPE != SCMEETINGPERSONTYPE.REVIEW && e.PERSONNATURE == PersonNature.JOIN).Select(e => e.Nav_User).ToList();//所有人员

                    List<T_FM_USER> listJoin = null;
                    List<T_FM_USER> listLevel = null;
                    List<T_FM_USER> listRepeat = null;

                    List<T_FM_USER> listReview = null;

                    int thisCount = 0;
                    foreach (var item in PAllUser)
                    {
                        listJoin = listUserJoin.FindAll(e => e.ID == item.ID);
                        if (listJoin.Count > 1)
                        {
                            throw new Exception("参会人员重复：" + item.NAME + "！");
                        }

                        if (listUserLevel != null)
                        {
                            listLevel = listUserLevel.FindAll(e => e.ID == item.ID);
                            if (listLevel.Count > 1)
                            {
                                throw new Exception("请假人员重复：" + item.NAME + "！");
                            }
                        }
                        if (listUserAbsence != null)
                        {
                            listRepeat = listUserAbsence.FindAll(e => e.ID == item.ID);
                            if (listRepeat.Count > 1)
                            {
                                throw new Exception("缺勤人员重复：" + item.NAME + "！");
                            }
                        }

                        if (listUserReview != null)
                        {
                            listReview = listUserReview.FindAll(e => e.ID == item.ID);
                            if (listReview.Count > 1)
                            {
                                throw new Exception("评审人员重复：" + item.NAME + "！");
                            }
                        }

                        thisCount = (listJoin == null ? 0 : listJoin.Count) + (listLevel == null ? 0 : listLevel.Count) + (listRepeat == null ? 0 : listRepeat.Count) + (listReview == null ? 0 : listReview.Count);

                        if (thisCount == 0)
                        {
                            //没找到对应人员
                            listUserLack.Add(item);
                        }
                        else if (thisCount > 1)
                        {
                            //重复
                            listUserRepeat.Add(item);
                        }
                    }
                    string Msg = string.Empty;
                    if (listUserLack != null && listUserLack.Count > 0)
                    {
                        Msg = "以下人员参会情况丢失：" + String.Join(",", listUserLack.Select(e => e.NAME).ToList());
                    }
                    if (listUserRepeat != null && listUserRepeat.Count > 0)
                    {
                        Msg += (string.IsNullOrEmpty(Msg) ? "" : "；") + "以下人员重复：" + String.Join(",", listUserRepeat.Select(e => e.NAME).ToList()) + "！";
                    }
                    if (!string.IsNullOrEmpty(Msg))
                    {
                        throw new Exception(Msg);
                    }

                    if (ListMinutesDetail != null && ListMinutesDetail.Count > 0)
                    {
                        int i = 0;
                        foreach (var item in ListMinutesDetail)
                        {
                            i++;
                            if (string.IsNullOrEmpty(item.RESOLUTION))
                            {
                                throw new Exception("第【" + i + "】行，会议决议不能为空！");
                            }
                            if (item.ISNEEDDEAL)
                            {
                                if (item.DEAL_DEPARTMENT_ID == null)
                                {
                                    throw new Exception("第【" + i + "】行，落实部门不能为空！");
                                }
                                if (item.DEAL_USER_ID == null)
                                {
                                    throw new Exception("第【" + i + "】行，落实责任不能为空！");
                                }
                                if (item.LIMITDATETIME == null)
                                {
                                    throw new Exception("第【" + i + "】行，落实期限不能为空！");
                                }
                                else if (item.LIMITDATETIME.Value.Date <= DateTime.Now.Date)
                                {
                                    throw new Exception("第【" + i + "】行，落实期限不能小于当前时间！");
                                }
                                else
                                {
                                    item.LIMITDATETIME = item.LIMITDATETIME.Value.Date.AddDays(1).AddSeconds(-1);
                                }
                            }
                            else
                            {
                                if (item.DEAL_DEPARTMENT_ID != null && item.DEAL_DEPARTMENT_ID != Guid.Empty)
                                {
                                    throw new Exception("第【" + i + "】行，无需填写落实部门！");
                                }
                                if (item.DEAL_USER_ID != null && item.DEAL_USER_ID != Guid.Empty)
                                {
                                    throw new Exception("第【" + i + "】行，无需填写落实责任人！");
                                }
                            }
                        }
                    }
                }

                if (Join != null && Join.Any())
                {
                    foreach (var item in Join)
                    {
                        item.Nav_User = null;
                    }
                }
                if (AskForLeave != null && AskForLeave.Any())
                {
                    foreach (var item in AskForLeave)
                    {
                        item.Nav_User = null;
                    }
                }
                if (Absence != null && Absence.Any())
                {
                    foreach (var item in Absence)
                    {
                        item.Nav_User = null;
                    }
                }
                if (Review != null && Review.Any())
                {
                    foreach (var item in Review)
                    {
                        item.Nav_User = null;
                    }
                }

                #region     参加人 删除 到缺席人     请假人、缺席人 删除 到参加人 没有传入的参加人、请假人、缺席人 删除

                List<Guid> listIDs = new List<Guid>();
                if (Join != null && Join.Count > 0)
                {
                    listIDs = Join.Select(e => e.ID).ToList();
                }
                var listPJDel = GetEntities<T_SC_MT_MEETING_PJOIN>(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.JOIN && e.MEETING_MINUTES_ID == entity.ID && !listIDs.Contains(e.ID), null, null);

                ////评审人
                //listIDs = new List<Guid>();
                //var listPVDel = GetEntities<T_SC_MT_MINUTES_PREVIEW>(e => e.MEETING_MINUTES_ID == entity.ID, null, null);

                //请假人
                listIDs = new List<Guid>();
                if (AskForLeave != null && AskForLeave.Any())
                {
                    listIDs = AskForLeave.Select(e => e.ID).ToList();
                }
                var listPAskLDel = GetEntities<T_SC_MT_MEETING_PASKFORLEAVE>(e => e.MEETING_MINUTES_ID == entity.ID && !listIDs.Contains(e.ID), null, null);

                //缺席人
                listIDs = new List<Guid>();
                if (Absence != null && Absence.Any())
                {
                    listIDs = Absence.Select(e => e.ID).ToList();
                }
                var listPAbsDel = GetEntities<T_SC_MT_MEETING_PABSENCE>(e => e.MEETING_MINUTES_ID == entity.ID && !listIDs.Contains(e.ID), null, null);


                #endregion

                if (entity.STATUS == PFStandardStatus.Draft)
                {
                    this.UnifiedCommit(() =>
                    {
                        if (entity != null)
                            UpdateEntityNoCommit(entity);   //保存主表 NoCommit
                        if (listContentDetail != null && listContentDetail.Any())//纪要意见
                            BantchUpdateEntityNoCommit(listContentDetail);
                        if (Join != null && Join.Any())//参会人员
                            BantchSaveEntityNoCommit(Join);
                        if (AskForLeave != null && AskForLeave.Any())//请假人员
                            BantchSaveEntityNoCommit(AskForLeave);
                        if (Absence != null && Absence.Any())//缺席人员
                            BantchSaveEntityNoCommit(Absence);
                        if (ListMinutesDetail != null && ListMinutesDetail.Any())//纪要评估 反馈
                            BantchSaveEntityNoCommit(ListMinutesDetail);
                        if (files != null && files.Any())//附件
                            BantchSaveEntityNoCommit(files);
                        if (listPJDel != null && listPJDel.Count() > 0) //参加人
                            BantchDeleteEntityNoCommit<T_SC_MT_MEETING_PJOIN>(listPJDel.Select(e => e.ID).ToList());
                        if (listPAskLDel != null && listPAskLDel.Count() > 0) //请假人
                            BantchDeleteEntityNoCommit<T_SC_MT_MEETING_PASKFORLEAVE>(listPAskLDel.Select(e => e.ID).ToList());
                        if (listPAbsDel != null && listPAbsDel.Count() > 0) //缺席人
                            BantchDeleteEntityNoCommit<T_SC_MT_MEETING_PABSENCE>(listPAbsDel.Select(e => e.ID).ToList());
                    });
                }
                else if (entity.STATUS == PFStandardStatus.Sign)
                {
                    //获取待办信息
                    var task = FMNotificActionTaskService.GetEntityTask(entity.TaskID, "SC030_SHOWPRINT");

                    //保存并发送 
                    //没有需要落实整改的信息
                    List<Guid> ListNoticeAll = new List<Guid>();
                    List<string> ListNoticeAllNAME = new List<string>();
                    foreach (var item in listUserJoin)
                    {
                        ListNoticeAll.Add(item.ID);
                        ListNoticeAllNAME.Add(item.NAME);
                    }
                    if (listUserReview != null && listUserReview.Count > 0)
                    {
                        foreach (var item in listUserReview)
                        {
                            ListNoticeAll.Add(item.ID);
                            ListNoticeAllNAME.Add(item.NAME);
                        }
                    }
                    List<T_FM_NOTIFICATION_TASK> listTaskRread = NotificationTaskService.InsertUserNoticeTaskModels("会议纪要签到", entity.ID, entity.ORG_ID, ListNoticeAll, ListNoticeAllNAME, DateTime.Now, (int)FMNoticeTypeEnum.消息, "SC030_SHOWPRINT", FMTASKTYPE.MT_MINUTES_Sign);

                    var listModelJoin = Join.Where(e => e.USER_ID == LoginID);
                    foreach (var item in Join)
                    {
                        if (item.USER_ID == LoginID)
                        {
                            item.ISRECORDRED = true;
                        }
                    }
                    List<T_SC_MT_MINUTES_PREVIEW> listPReview = null;
                    if (Review != null && Review.Any())
                    {
                        foreach (var item in Review)
                        {
                            if (item.USER_ID == LoginID)
                            {
                                if (listPReview == null)
                                {
                                    listPReview = new List<T_SC_MT_MINUTES_PREVIEW>();
                                }
                                item.ISRECORDRED = true;
                                listPReview.Add(item);
                            }
                        }
                    }

                    //当前人 默认 知晓
                    foreach (var item in listTaskRread)
                    {
                        if (item.USER_ID == LoginID)
                        {
                            item.TASK_DT = DateTime.Now;
                            item.NOTICE_STATUS = 1;
                            break;
                        }
                    }

                    if (listContentDetail != null && listContentDetail.Any() && DataHelper.GetRequestType(Request.Headers) == 2)
                    {
                        foreach (var item in listContentDetail)
                        {
                            item.Nav_ContentDeal = null;
                        }
                    }

                    this.UnifiedCommit(() =>
                    {
                        if (entity != null)
                            UpdateEntityNoCommit(entity);   //保存主表 NoCommit
                        if (listContentDetail != null && listContentDetail.Any())//纪要意见
                            BantchUpdateEntityNoCommit(listContentDetail);
                        if (Join != null && Join.Any())//参会人员
                            BantchSaveEntityNoCommit(Join);
                        if (listPReview != null && listPReview.Any())//登陆者如果是评审人 默认阅读
                            BantchSaveEntityNoCommit(listPReview);
                        if (AskForLeave != null && AskForLeave.Any())//请假人员
                            BantchSaveEntityNoCommit(AskForLeave);
                        if (Absence != null && Absence.Any())//缺席人员
                            BantchSaveEntityNoCommit(Absence);
                        if (ListMinutesDetail != null && ListMinutesDetail.Any())//纪要评估 反馈
                            BantchSaveEntityNoCommit(ListMinutesDetail);
                        if (files != null && files.Any())//附件
                            BantchSaveEntityNoCommit(files);
                        if (listTaskRread != null && listTaskRread.Any())//参与人 阅
                            BantchSaveEntityNoCommit(listTaskRread);
                        if (task != null)//待办
                            UpdateEntity(task);
                        if (listPJDel != null && listPJDel.Count() > 0) //参加人
                            BantchDeleteEntityNoCommit<T_SC_MT_MEETING_PJOIN>(listPJDel.Select(e => e.ID).ToList());
                        if (listPAskLDel != null && listPAskLDel.Count() > 0) //请假人
                            BantchDeleteEntityNoCommit<T_SC_MT_MEETING_PASKFORLEAVE>(listPAskLDel.Select(e => e.ID).ToList());
                        if (listPAbsDel != null && listPAbsDel.Count() > 0) //缺席人
                            BantchDeleteEntityNoCommit<T_SC_MT_MEETING_PABSENCE>(listPAbsDel.Select(e => e.ID).ToList());
                    });

                    ////如果通知人 包含 登陆者
                    //if (ListNoticeAll.Contains(LoginID))
                    //{
                    //    KeywordFilter filterSign = new KeywordFilter();
                    //    filterSign.Parameter1 = listTaskRread.Find(e => e.USER_ID == LoginID).ID.ToString();
                    //    filterSign.Keyword = entity.ID.ToString();
                    //    MeetingMinutesSign(filterSign);
                    //}
                }
                return true;
            });
        }


        /// <summary>
        /// 整改责任人 纪要落实
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost, Route("UpdateDeal")]
        public JsonActionResult<bool> UpdateDeal([FromBody] T_SC_MT_MEETING_MINUTES entity)
        {
            return SafeExecute<bool>(() =>
            {
                Guid LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value;
                //责任人意见 落实情况反馈
                if (entity.Nav_ListMinutesDetail == null || !entity.Nav_ListMinutesDetail.Any())
                    throw new Exception("未获取到纪要落实信息，操作失败！");

                var ListMinutesDetail = entity.Nav_ListMinutesDetail.ToList();
                MINUTES_DETAIL_STATUS dealType = ListMinutesDetail[0].STATUS;
                foreach (var item in ListMinutesDetail)
                {
                    item.STATUS = dealType;
                }
                int i = 1;
                foreach (var item in ListMinutesDetail)
                {
                    if (string.IsNullOrEmpty(item.OPINION))
                        throw new Exception("第【" + i + "】行责任人意见不能未空！");
                    else if (item.OPINION.Length > 500)
                        throw new Exception("第【" + i + "】行责任人意见不能超过500个字符！");
                    if (string.IsNullOrEmpty(item.DEALBACK))
                        throw new Exception("第【" + i + "】行落实情况反馈不能未空！");
                    else if (item.DEALBACK.Length > 500)
                        throw new Exception("第【" + i + "】行落实情况反馈不能超过500个字符！");
                    i++;
                }

                //如果 所有人都 填写了 发给 主持人
                List<T_SC_MT_MEETING_MINUTES_DETAIL_FILE> files = null;
                foreach (var item in ListMinutesDetail)
                {
                    if (item.Nav_Files != null)
                    {
                        if (files == null)
                        {
                            files = new List<T_SC_MT_MEETING_MINUTES_DETAIL_FILE>();
                        }
                        files.AddRange(item.Nav_Files.ToList());
                        item.Nav_Files = null;
                    }
                }

                if (dealType == MINUTES_DETAIL_STATUS.Deal)//责任人 保存
                {
                    this.UnifiedCommit(() =>
                    {
                        if (ListMinutesDetail != null && ListMinutesDetail.Any())//纪要落实
                            BantchSaveEntityNoCommit(ListMinutesDetail);
                        if (files != null && files.Any())
                            BantchSaveEntityNoCommit(files);
                    });
                }
                else if (dealType == MINUTES_DETAIL_STATUS.Host)//责任人 保存并发送
                {
                    //获取待办信息
                    var task = FMNotificActionTaskService.GetEntityTask(entity.TaskID, "SC030_SHOWPRINTPER");
                    List<Guid> listDetailID = ListMinutesDetail.Select(e => e.ID).ToList();

                    var listDetail = GetEntity<T_SC_MT_MEETING_MINUTES>(e => e.ID == entity.ID, new string[] { "Nav_ListMinutesDetail" }).Nav_ListMinutesDetail.Where(e => e.ISNEEDDEAL && !listDetailID.Contains(e.ID) && (e.STATUS == MINUTES_DETAIL_STATUS.Temp_Record || e.STATUS == MINUTES_DETAIL_STATUS.Deal)).Select(e => e.Nav_MeetingMinutes.Nav_ListMinutesDetail);

                    if (listDetail == null || !listDetail.Any())
                    {
                        var meeting = GetEntity<T_SC_MT_MEETING>(entity.MEETING_ID, new string[] { "Nav_UserHost" });
                        //落实整改人 都填写了整改情况
                        //给主持人 发送待办填写 落实效果
                        T_FM_NOTIFICATION_TASK taskHost = NotificationTaskService.InsertUserNoticeTaskModel("会议决议落实效果", entity.ID, entity.ORG_ID, meeting.USER_ID_HOST.Value, meeting.Nav_UserHost.NAME, DateTime.Now, (int)FMNoticeTypeEnum.消息, "SC030_2", FMTASKTYPE.MT_MINUTES_DETAIL_CHECK);

                        this.UnifiedCommit(() =>
                        {
                            if (task != null)//待办
                                UpdateEntityNoCommit(task);
                            if (ListMinutesDetail != null && ListMinutesDetail.Any())//纪要评估 反馈
                                BantchSaveEntityNoCommit(ListMinutesDetail);
                            AddEntityNoCommit(taskHost);//给主持人发送待办
                            if (files != null && files.Any())
                                BantchSaveEntityNoCommit(files);
                        });
                    }
                    else
                    {
                        //还有 未落实的会议决议 保存信息
                        this.UnifiedCommit(() =>
                        {
                            if (task != null)//待办
                                UpdateEntityNoCommit(task);
                            if (ListMinutesDetail != null && ListMinutesDetail.Any())//纪要评估 反馈
                                BantchSaveEntityNoCommit(ListMinutesDetail);
                            if (files != null && files.Any())
                                BantchSaveEntityNoCommit(files);
                        });
                    }
                }
                return true;
            });
        }



        /// <summary>
        /// 主持人  填写落实效果  走审批流
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        [HttpPost, Route("UpdateDealEffect")]
        public JsonActionResult<bool> UpdateDealEffect([FromBody] T_SC_MT_MEETING_MINUTES entity)
        {
            //var sysFilter = new SystemCodeFilter();
            //sysFilter.CodeType = (int)PFCodeRuleType.会议通知;
            //sysFilter.Count = 2;
            //sysFilter.OrgId = entity.ORG_ID;
            //var serialCode = CodeRuleService.NewGenSerial(sysFilter);
            //List<string> listCode = serialCode.Split(",").ToList();

            return SafeExecute<bool>(() =>
            {
                //责任人意见 落实情况反馈
                if (entity.Nav_ListMinutesDetail == null || !entity.Nav_ListMinutesDetail.Any())
                    throw new Exception("未获取到纪要落实信息，操作失败！");
                var ListMinutesDetail = entity.Nav_ListMinutesDetail;
                if (entity.STATUS == PFStandardStatus.Sign)
                {
                    foreach (var item in ListMinutesDetail)
                    {
                        item.STATUS = MINUTES_DETAIL_STATUS.Host;
                    }
                    //保存
                    this.UnifiedCommit(() =>
                    {
                        UpdateEntityNoCommit(entity);
                        if (ListMinutesDetail != null && ListMinutesDetail.Any())//落实效果
                            BantchSaveEntityNoCommit(ListMinutesDetail);
                    });
                }
                else if (entity.STATUS == PFStandardStatus.Approving)
                {
                    //保存并发送
                    int i = 0;
                    foreach (var item in ListMinutesDetail)
                    {
                        i++;
                        item.STATUS = MINUTES_DETAIL_STATUS.End;
                        if (item.DEALEFFECT == 0)
                            throw new Exception("请选择第【" + i + "】行的落实效果！");
                    }

                    entity.APPROVE_ID = Guid.NewGuid();
                    var meeting = GetEntity<T_SC_MT_MEETING>(entity.MEETING_ID);

                    ////公司级 3   部门级 0   车间级 1    班组级 2
                    ////只有明确是车间 走车间级 否则走部门级
                    string param = meeting.LEVELVALUE.Value.ToString();
                    //安全生产委员会 审批到总经理  基层安全会 到对应车间/ 部门 其他到部门级
                    //会议通知就处理了 下句代码应该可以不用
                    if (meeting.MEETINGTYPE == SCMEETINGTYPE.SafetyBoard)
                        param = "3";
                    List<string> listCode = new List<string>();
                    listCode.Add(meeting.CODE + "1");
                    listCode.Add(meeting.CODE + "2");

                    MFlowPermitService.InsertApprove(listCode[0], "SC030", param, entity.ID, "SC030_SHOWPRINT", entity.TaskID, true, () =>
                    {
                        if (entity != null) //保存会议纪要主表  进入审批流
                            UpdateEntityNoCommit(entity);
                        if (ListMinutesDetail != null && ListMinutesDetail.Any())//落实效果
                            BantchSaveEntityNoCommit(ListMinutesDetail);
                    }, entity.APPROVE_ID, meeting.USER_ID_ORIGINATOR, null, null, listCode[1], "SC030_SHOWPRINT", null, null, FMTASKTYPE.MT_MINUTES_DEAL_Audit);
                }
                return true;
            });
        }

        /// <summary>
        /// 会议纪要 参会人员 签到
        /// 最后一个人审批 添加审批流
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        [HttpPost, Route("MeetingMinutesSign")]
        public JsonActionResult<bool> MeetingMinutesSign([FromBody] KeywordFilter filter)
        {
            //var sysFilter = new SystemCodeFilter();
            //sysFilter.CodeType = (int)PFCodeRuleType.会议通知;
            //sysFilter.Count = 2;
            //sysFilter.OrgId = filter.OrgId;
            //var serialCode = CodeRuleService.NewGenSerial(sysFilter);
            return SafeExecute<bool>(() =>
            {
                var TaskID = new Guid(filter.Parameter1);
                if (TaskID == Guid.Empty)
                {
                    throw new Exception("获取数据【待办ID】传参失败！");
                }
                var task = FMNotificActionTaskService.GetEntityTask(TaskID);

                if (task.SOURCE_DATA_ID != new Guid(filter.Keyword))
                {
                    throw new Exception("传参有误！");
                }

                var entity = GetEntity<T_SC_MT_MEETING_MINUTES>(task.SOURCE_DATA_ID.Value);//,  "Nav_ListPJoin", "Nav_ListPReview" 
                int NOTICE_STATUS = (int)FMNoticeStatusEnum.未处理;
                var listNotDeal = GetEntities<T_FM_NOTIFICATION_TASK>(e => e.SOURCE_DATA_ID == task.SOURCE_DATA_ID && e.NOTICE_STATUS == NOTICE_STATUS && e.ID != TaskID && e.SOURCE_FORMCODE == task.SOURCE_FORMCODE, null, null).Count();
                var LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;

                var listModelJoin = GetEntities<T_SC_MT_MEETING_PJOIN>(e => e.MEETING_MINUTES_ID == entity.ID && e.USER_ID == LoginID, null, null);

                //var listModelJoin = entity.Nav_ListPJoin.Where(e => e.USER_ID == LoginID);

                T_SC_MT_MINUTES_PREVIEW modelReview = null;
                if (listModelJoin == null || listModelJoin.Count() < 1)
                {
                    throw new Exception("您未参加该会议，操作失败！");
                }
                foreach (var item in listModelJoin)
                {
                    item.ISRECORDRED = true;
                }

                modelReview = GetEntity<T_SC_MT_MINUTES_PREVIEW>(e => e.MEETING_MINUTES_ID == entity.ID && e.USER_ID == LoginID && !e.IS_DELETED);
                if (modelReview != null && modelReview.ID != Guid.Empty)
                {
                    modelReview.ISRECORDRED = true;
                }
                //if (entity.Nav_ListPReview != null && entity.Nav_ListPReview.Any())
                //{
                //    modelReview = entity.Nav_ListPReview.FirstOrDefault(e => e.USER_ID == LoginID && !e.IS_DELETED);
                //    if (modelReview != null)
                //    {
                //        modelReview.ISRECORDRED = true;
                //    }
                //}

                //if (listNotDeal == null || !listNotDeal.Any())
                if (listNotDeal < 1)
                {

                    entity.Nav_Meeting = GetEntity<T_SC_MT_MEETING>(entity.MEETING_ID);
                    entity.Nav_ListMinutesDetail = GetEntities<T_SC_MT_MEETING_MINUTES_DETAIL>(e => e.MEETING_MINUTES_ID == entity.ID, null, "Nav_UserDeal").ToList();

                    bool isApprove = true;//是否直接审批
                    if (entity.Nav_ListMinutesDetail != null && entity.Nav_ListMinutesDetail.Any())
                    {
                        var listDeal = entity.Nav_ListMinutesDetail.Where(e => e.ISNEEDDEAL);
                        if (listDeal != null && listDeal.Any())
                        {
                            isApprove = false;
                        }
                    }
                    if (isApprove)
                    {
                        List<string> listCode = new List<string>() { "HY" + DateTime.Now.ToString("yyyyMMddHHmmss") + "1", "HY" + DateTime.Now.ToString("yyyyMMddHHmmss") + "2" };

                        //最后一个阅读 
                        entity.STATUS = PFStandardStatus.Approving;
                        entity.APPROVE_ID = Guid.NewGuid();

                        ////公司级 3   部门级 0   车间级 1    班组级 2
                        ////只有明确是车间 走车间级 否则走部门级
                        string param = entity.Nav_Meeting.LEVELVALUE.Value.ToString();
                        //安全生产委员会 审批到总经理  基层安全会 到对应车间/ 部门 其他到部门级
                        //会议通知就处理了 下句代码应该可以不用
                        if (entity.Nav_Meeting.MEETINGTYPE == SCMEETINGTYPE.SafetyBoard)
                            param = "3";

                        MFlowPermitService.InsertApprove(listCode[0], "SC030", param, entity.ID, "SC030_SHOWPRINT", entity.TaskID, true, () =>
                        {
                            if (entity != null) //保存会议纪要主表  进入审批流
                                UpdateEntityNoCommit(entity);
                            if (task != null)//待办
                                UpdateEntityNoCommit(task);
                            if (listModelJoin != null && listModelJoin.Count() > 0)//参会人 是否阅读会议纪要
                                BantchUpdateEntityNoCommit(listModelJoin);
                            //UpdateEntityNoCommit(modelJoin);
                        }, entity.APPROVE_ID, entity.Nav_Meeting.USER_ID_ORIGINATOR, null, null, listCode[1], null, null, null, FMTASKTYPE.MT_MINUTES_Audit);
                    }
                    else
                    {
                        List<T_FM_NOTIFICATION_TASK> listTaskRread = new List<T_FM_NOTIFICATION_TASK>();//每条有时间期限
                        // 给落实责任人 发送落实待办 
                        List<Guid> ListNoticeAll = new List<Guid>();
                        //List<string> ListNoticeAllNAME = new List<string>();
                        foreach (var item in entity.Nav_ListMinutesDetail)
                        {
                            if (!item.ISNEEDDEAL)
                                continue;
                            if (ListNoticeAll.Contains(item.Nav_UserDeal.ID))
                                continue;

                            ListNoticeAll.Add(item.Nav_UserDeal.ID);
                            //ListNoticeAllNAME.Add(item.Nav_UserDeal.NAME);
                            listTaskRread.Add(NotificationTaskService.InsertUserNoticeTaskModel("会议纪要落实", entity.ID, entity.ORG_ID, item.Nav_UserDeal.ID, item.Nav_UserDeal.NAME, DateTime.Now, item.LIMITDATETIME.Value, (int)FMNoticeTypeEnum.消息, "SC030_1"));
                        }

                        //List<T_FM_NOTIFICATION_TASK> listTaskRread = NotificationTaskService.InsertUserNoticeTaskModels("会议纪要落实", entity.ID, entity.ORG_ID, ListNoticeAll, ListNoticeAllNAME, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "SC030_1");

                        this.UnifiedCommit(() =>
                        {
                            if (task != null)//待办
                                UpdateEntityNoCommit(task);
                            if (listModelJoin != null && listModelJoin.Count() > 0)//参会人 是否阅读会议纪要
                                BantchUpdateEntityNoCommit(listModelJoin);
                            //UpdateEntityNoCommit(modelJoin);
                            if (listTaskRread != null && listTaskRread.Any())//落实责任人 填写信息
                                BantchSaveEntityNoCommit(listTaskRread);
                        });
                    }
                }
                else
                {
                    this.UnifiedCommit(() =>
                    {
                        if (task != null)//待办
                            UpdateEntityNoCommit(task);
                        //if (modelJoin != null)//参会人 是否阅读会议纪要
                        //    UpdateEntityNoCommit(modelJoin);
                        if (listModelJoin != null && listModelJoin.Count() > 0)//参会人 是否阅读会议纪要
                            BantchUpdateEntityNoCommit(listModelJoin);
                        //UpdateEntityNoCommit(modelJoin);
                        if (modelReview != null)//参会人 是否阅读会议纪要
                            UpdateEntityNoCommit(modelReview);
                    });
                }

                return true;
            });
        }



        /// <summary>
        /// 获取 纪要中只包含登陆者的明细信息
        /// </summary>
        /// <param name="filter">过滤实体</param>
        /// <returns></returns>
        [HttpPost, Route("GetByDetailDeal")]
        public JsonActionResult<T_SC_MT_MEETING_MINUTES> GetByDetailDeal([FromBody] KeywordFilter filter)
        {
            return SafeExecute<T_SC_MT_MEETING_MINUTES>(() =>
            {
                Guid LoginId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value;
                var result = GetEntity<T_SC_MT_MEETING_MINUTES>(null, filter);
                if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                {
                    result.Nav_ListPJoin = result.Nav_ListPJoin.Where(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.JOIN).ToList();
                }
                if (result.Nav_ListMinutesDetail != null && result.Nav_ListMinutesDetail.Any())
                {
                    var detail = result.Nav_ListMinutesDetail.Where(e => e.ISNEEDDEAL && e.DEAL_USER_ID.HasValue && e.DEAL_USER_ID == LoginId);
                    if (detail != null && detail.Any())
                        result.Nav_ListMinutesDetail = detail.ToList();
                    else
                        result.Nav_ListMinutesDetail = null;
                }
                return result;
            });
        }


        /// <summary>
        /// 获取纪要 主持人 落实效果 填写
        /// </summary>
        /// <param name="filter">过滤实体</param>
        /// <returns></returns>
        [HttpPost, Route("GetDetailEffect")]
        public JsonActionResult<T_SC_MT_MEETING_MINUTES> GetDetailEffect([FromBody] KeywordFilter filter)
        {
            return SafeExecute<T_SC_MT_MEETING_MINUTES>(() =>
            {
                Guid LoginId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value;
                var result = GetEntity<T_SC_MT_MEETING_MINUTES>(null, filter);
                if (result.Nav_ListPJoin != null && result.Nav_ListPJoin.Any())
                {
                    result.Nav_ListPJoin = result.Nav_ListPJoin.Where(e => e.PERSONTYPE == SCMEETINGPERSONTYPE.JOIN).ToList();
                }
                if (result.Nav_ListMinutesDetail != null && result.Nav_ListMinutesDetail.Any())
                {
                    var check = result.Nav_ListMinutesDetail.Where(e => e.ISNEEDDEAL && e.STATUS < MINUTES_DETAIL_STATUS.Host);
                    if (check != null && check.Count() > 0)
                    {
                        throw new Exception("会议决议中所有整改责任人都提交了整改信息后，才能填写落实结果！");
                    }
                    else
                    {
                        result.Nav_ListMinutesDetail = result.Nav_ListMinutesDetail.Where(e => e.ISNEEDDEAL).ToList();
                    }
                }
                return result;
            });
        }

        /// <summary>
        /// 会议纪要审批回调
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet, Route("MeetingMinutesBack")]
        public JsonActionResult<bool> MeetingMinutesBack(string id)
        {
            return SafeExecute<bool>(() =>
            {
                return ApproveCallBackService.CallBack("SC/SCMtMeetingMinutes/MeetingMinutesBack", id);
            });
        }


        /// <summary>
        /// 排序分页查询数据
        /// </summary>
        /// <param name="pageFilter">分页过滤实体</param>
        /// <returns></returns>
        [HttpPost, Route("OrderPaged")]
        public PagedActionResult<T_SC_MT_MEETING_MINUTES> OrderPaged([FromBody] KeywordPageFilter pageFilter)
        {
            PagedActionResult<T_SC_MT_MEETING_MINUTES> result = null;
            if (!string.IsNullOrEmpty(pageFilter.MenuParameter))
            {
                if (pageFilter.MenuParameter == "40")
                {
                    result = WitOrderPaged(e => e.MEETINGTYPE == SCMEETINGTYPE.SafetyBoard || e.MEETINGTYPE == SCMEETINGTYPE.BasicSecurity, pageFilter);
                }
                else
                {
                    result = WitOrderPaged(e => e.MEETINGTYPE == SCMEETINGTYPE.Ordinary || e.MEETINGTYPE == SCMEETINGTYPE.FileAudit || e.MEETINGTYPE == SCMEETINGTYPE.FileReView, pageFilter);
                }
            }
            else
            {
                result = WitOrderPaged(null, pageFilter);
            }
            if (result.Data != null && result.Data.Any() && DataHelper.GetRequestType(Request.Headers) == 2)
            {
                foreach (var item in result.Data)
                {
                    item.STATUSSHOW = item.STATUS.GetDescription();
                }
            }
            return result;
        }

    }
}