using APT.BaseData.Domain.Entities.FM;
using APT.Infrastructure.Core;
using Microsoft.AspNetCore.Mvc;
using APT.Infrastructure.Api;
using System.Collections.Generic;
using System.Linq.Expressions;
using System;
using System.Linq;
using APT.BaseData.Domain.ApiModel;
using Ubiety.Dns.Core;
using System.Security.AccessControl;
using APT.MS.Domain.Entities.FO;
using APT.BaseData.Domain.Entities;
using APT.MS.Domain.Enums;
using APT.MS.Domain.Entities.BI;
using static APT.MS.Domain.Enums.BI.BIEnums;
using APT.Utility;
using APT.MS.Domain.Entities.BS;
namespace APT.SC.WebApi.Controllers.Api.BI
{
    /// 
    ///  年度监测汇总
    /// 
    [Route("api/BI/BISafe")]
    public class BISafeController : AuthorizeApiController
    {
        //IBIBSSafeCheckService BIBSSafeCheckService { get; set; }
        //public BISafeController(IBIBSSafeCheckService bIBSSafeCheckService)
        //{
        //    BIBSSafeCheckService = bIBSSafeCheckService;
        //}
        /// 
        /// 显示
        /// 
        /// 
        /// 
        [HttpPost, Route("GetShow")]
        public JsonActionResult GetShow([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                BISafe result = new BISafe();
                string Parameter1 = string.Empty;
                string Parameter2 = string.Empty;
                if (filter.FilterGroup.Rules.Count == 2)
                {
                    foreach (var item in filter.FilterGroup.Rules)
                    {
                        if (item.Field == "Parameter1")
                        {
                            Parameter1 = item.Value.ToString();
                        }
                        else if (item.Field == "Parameter2")
                        {
                            if (item.Value == null)
                            {
                                throw new Exception("参数2为空!");
                            }
                            else
                            {
                                Parameter2 = item.Value.ToString();
                            }
                        }
                    }
                }
                if (!string.IsNullOrEmpty(Parameter1) || !string.IsNullOrEmpty(Parameter2))
                {
                    string Code = "BI002_BSSAFECHECK"; //编码
                    FilterTimeType? timeType = null;
                    BSMineTypeEditEnum? mineType = null;
                    try
                    {
                        timeType = (FilterTimeType)(int.Parse(Parameter1));
                    }
                    catch { }
                    try
                    {
                        mineType = (BSMineTypeEditEnum)(int.Parse(Parameter2));
                    }
                    catch { }
                    if (timeType != null && mineType != null)
                    {
                        var listSafeCheck = GetEntities(e => e.ORG_ID == filter.OrgId.Value && e.TimeType == timeType.Value && e.MineType == mineType.Value, null).OrderBy(e => e.TEAMNAME).ToList();
                        var listCheckType = GetEntities(e => e.ORG_ID == filter.OrgId.Value && e.TimeType == timeType.Value && e.MineType == mineType.Value, null).OrderBy(e => e.name).ToList();
                        var summary = GetEntity(e => e.ORG_ID == filter.OrgId.Value && e.TimeType == timeType.Value && e.MineType == mineType.Value && e.CODE == Code);
                        result.listSafeCheck = listSafeCheck;
                        result.listCheckType = listCheckType;
                        result.summary = summary;
                    }
                }
                return result;
            });
        }
        #region      安全检查绩效报表
        #region    主界面与各弹窗的方法
        /// 
        /// 显示  
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056Main")]
        public JsonActionResult GetBI056Main([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056Main result = new ModelBI056Main();
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                #region  enmusLevel=> lisLevelOrder   enmusMineType=>lisMineTypeOrder 
                //var enmus = GetEntities(e => !e.IS_DELETED, null, "ID", "VALUE", "NUM", "CODE", "NAME");
                var enmus = GetEntities(e => !e.IS_DELETED, null, null);
                if (enmus == null || !enmus.Any())
                    throw new Exception("获取生成单元、组织层级等枚举信息失败!");
                List lisLevelOrder = new List();
                List lisMineTypeOrder = new List();
                var enmusLevel = enmus.Where(e => e.CODE == "HMLevleEnum").OrderBy(e => e.NUM).ToList();
                var enmusMineType = enmus.Where(e => e.CODE == "BSMineTypeEnum").OrderBy(e => e.NUM).ToList();
                if (enmusLevel == null || !enmusLevel.Any())
                    throw new Exception("获取组织层级枚举信息失败!");
                else
                {
                    foreach (var item in enmusLevel)
                    {
                        lisLevelOrder.Add(item.NAME);
                    }
                }
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                #endregion
                #region 改良版 listSafeCheck 所有的符合条件的检查信息
                Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value;
                if (dtEnd.HasValue)
                    expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value);
                BaseFilter filterSearch = new BaseFilter(filter.OrgId);
                filterSearch.IgnoreDataRule = true;
                filterSearch.Include.Add("Nav_CheckTypeLevel");
                filterSearch.SelectField = new List() { "ID", "CHECKOBJECT", "CHECK_TYPE_ID", "IS_DELETED", "CHECKTIME", "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID" };
                //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel");
                var listSafeCheck = GetEntities(expression, filterSearch, "Nav_CheckTypeLevel");
                #endregion
                #region    1_1 改良版
                List> listCheckCount = new List>();
                List listCheckLevelCount = null;
                foreach (var item in enmusLevel)
                {
                    //mineTypeName: ["露天矿", "选矿厂", "尾矿库", "职能部门"],
                    //legendName: ["公司级", "部门级", "车间级", "班组级"],
                    //checkCount: [[3, 3, 3, 3], [12, 12, 12, 6], [24, 24, 24, 12], [90, 90, 120, 36]],
                    listCheckLevelCount = new List();
                    //选矿 10,  尾矿  20, 矿山  30,  地下矿  40,
                    foreach (var itemMine in enmusMineType)
                    {
                        int count = listSafeCheck.Where(e => e.CHECKOBJECT == itemMine.VALUE && e.Nav_CheckTypeLevel.CheckLevel_ENUMS_ID == item.ID).Count();
                        listCheckLevelCount.Add(count);
                    }
                    listCheckCount.Add(listCheckLevelCount);
                }
                //数据组装
                result.Count1_1 = listCheckCount;
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.lisLevelOrder = lisLevelOrder;
                #endregion
                #region  3_1 改良版
                List> listCheckTypeCount = new List>();
                List listCheckTypeCountPer = null;
                var listCheckType = GetEntities(e => !e.IS_DELETED, null).OrderBy(e => e.PARENT_ID).ThenBy(e => e.NUM);
                List listCheckTypeName = new List();
                List listCheckTypeID = new List();
                Dictionary> dicParent = new Dictionary>();
                List listSum = new List();
                Guid guidParent = Guid.Empty;
                foreach (var item in listCheckType)
                {
                    if (item.PARENT_ID.HasValue)
                    {
                        if (!listCheckTypeName.Contains(item.NAME))
                        {
                            listCheckTypeName.Add(item.NAME);
                            listCheckTypeID.Add(item.ID);
                            guidParent = item.PARENT_ID.Value;
                        }
                        listSum.Add(item.ID);
                    }
                    else
                    {
                        listCheckTypeName.Add(item.NAME);
                        listCheckTypeID.Add(item.ID);
                    }
                }
                listSum.Add(guidParent);//有些人直接定义 综合检查
                dicParent.Add(guidParent, listSum);
                foreach (var item in enmusMineType)
                {
                    listCheckTypeCountPer = new List();
                    foreach (var itemCheckType in listCheckTypeID)
                    {
                        //检查类型
                        if (itemCheckType == guidParent)
                        {
                            int count = listSafeCheck.Where(e => e.CHECKOBJECT == item.VALUE && listSum.Contains(e.CHECK_TYPE_ID.Value)).Count();
                            listCheckTypeCountPer.Add(count);
                        }
                        else
                        {
                            int count = listSafeCheck.Where(e => e.CHECKOBJECT == item.VALUE && e.CHECK_TYPE_ID == itemCheckType).Count();
                            listCheckTypeCountPer.Add(count);
                        }
                    }
                    listCheckTypeCount.Add(listCheckTypeCountPer);
                }
                //数据组装
                result.Count3_1 = listCheckTypeCount;
                result.lisCheckTypeName = listCheckTypeName;
                #endregion
                #region      隐患  1_2    2_1    2_2    3_2    
                Expression> expression2_2 = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && e.RiskContentState.HasValue && !e.IS_DELETED;// && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80)&& e.DESCREPTION != null
                if (dtEnd.HasValue)
                    expression2_2 = expression2_2.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value);
                var listContent = GetEntities(expression2_2, null, "Nav_Submit");
                #region    1_2   各生产单元 隐患数
                List listRiskMineCount1_2 = new List();
                foreach (var item in enmusMineType)
                {
                    listRiskMineCount1_2.Add(listContent.Where(e => e.Nav_Submit != null && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == (BSMineTypeEnum)item.VALUE).Count());
                }
                result.listRiskMineCount1_2 = listRiskMineCount1_2;
                #endregion
                #region     2_1 月度  已完成 未完成 整改率
                List listMonth = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12 };
                if (dtStart.Year > DateTime.Now.Year)
                {
                    listMonth.Clear();
                }
                else if (dtStart.Year == DateTime.Now.Year)
                {
                    listMonth = listMonth.Where(e => e <= DateTime.Now.Month).OrderBy(e => e).ToList();
                }
                List listFinish2_1 = new List();
                List listNotFinish2_1 = new List();
                List listFinish2_1Percent = new List();
                foreach (var item in listMonth)
                {
                    listFinish2_1.Add(listContent.Where(e => e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80)).Count());
                    listNotFinish2_1.Add(listContent.Where(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && e.RiskContentState.Value != 60 && e.RiskContentState.Value != 80).Count());//只是上报 没有检查范围 不计算在内 不然与后面的弹窗不对等
                }
                for (int i = 0; i < listMonth.Count; i++)
                {
                    if (listNotFinish2_1[i] == 0)
                    {
                        listFinish2_1Percent.Add(100);
                    }
                    else if (listFinish2_1[i] == 0)
                    {
                        listFinish2_1Percent.Add(0);
                    }
                    else
                    {
                        listFinish2_1Percent.Add((decimal)Math.Round((listFinish2_1[i] * 100.0 / (listNotFinish2_1[i] + listFinish2_1[i])), 2));
                    }
                }
                //result.listMonth = listMonth;
                result.listFinish2_1 = listFinish2_1;
                result.listNotFinish2_1 = listNotFinish2_1;
                result.listFinish2_1Percent = listFinish2_1Percent;
                #endregion
                #region   2_2  隐患Top
                var query = listContent.Where(e => e.DESCREPTION != null).GroupBy(e => e.DESCREPTION).Select(e => new
                {
                    DESCREPTION = e.Key,
                    Count = e.Count()
                }).OrderByDescending(e => e.Count).Take(6);//.Where(e => e.DESCREPTION != null)  名称不能为null
                if (query != null && query.Any())
                {
                    List ListDescreption2_2 = new List();
                    List Count2_2 = new List();
                    foreach (var item in query)
                    {
                        Count2_2.Add(item.Count);
                        ListDescreption2_2.Add(item.DESCREPTION);
                    }
                    result.Count2_2 = Count2_2;
                    result.ListDescreption2_2 = ListDescreption2_2;
                }
                else
                {
                    result.Count2_2 = new List();
                    result.ListDescreption2_2 = new List();
                }
                #endregion
                #region    3_2 检查类型隐患统计
                List> listRiskMoneCheckType = new List>();
                foreach (var item in enmusMineType)
                {
                    listCheckTypeCountPer = new List();
                    foreach (var itemCheckType in listCheckTypeID)
                    {
                        //检查类型
                        if (itemCheckType == guidParent)
                        {
                            int count = listContent.Where(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && listSum.Contains(e.Nav_Submit.CHECK_TYPE_ID.Value)).Count();
                            listCheckTypeCountPer.Add(count);
                        }
                        else
                        {
                            int count = listContent.Where(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && e.Nav_Submit.CHECK_TYPE_ID == itemCheckType).Count();
                            listCheckTypeCountPer.Add(count);
                        }
                    }
                    listRiskMoneCheckType.Add(listCheckTypeCountPer);
                }
                result.Count3_2 = listRiskMoneCheckType;
                #endregion
                #endregion
                return result;
            });
        }
        //#region     旧版直接查询 count
        ///// 
        ///// 显示  
        ///// 
        ///// 
        ///// 
        //[HttpPost, Route("GetBI056Main")]
        //public JsonActionResult GetBI056Main([FromBody] KeywordFilter filter)
        //{
        //    return SafeExecute(() =>
        //    {
        //        ModelBI056Main result = new ModelBI056Main();
        //        DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
        //        DateTime? dtEnd = null;
        //        #region  enmusLevel=> lisLevelOrder   enmusMineType=>lisMineTypeOrder 
        //        //var enmus = GetEntities(e => !e.IS_DELETED, null, "ID", "VALUE", "NUM", "CODE", "NAME");
        //        var enmus = GetEntities(e => !e.IS_DELETED, null, null);
        //        if (enmus == null || !enmus.Any())
        //            throw new Exception("获取生成单元、组织层级等枚举信息失败!");
        //        List lisLevelOrder = new List();
        //        List lisMineTypeOrder = new List();
        //        var enmusLevel = enmus.Where(e => e.CODE == "HMLevleEnum").OrderBy(e => e.NUM).ToList();
        //        var enmusMineType = enmus.Where(e => e.CODE == "BSMineTypeEnum").OrderBy(e => e.NUM).ToList();
        //        if (enmusLevel == null || !enmusLevel.Any())
        //            throw new Exception("获取组织层级枚举信息失败!");
        //        else
        //        {
        //            foreach (var item in enmusLevel)
        //            {
        //                lisLevelOrder.Add(item.NAME);
        //            }
        //        }
        //        if (enmusMineType == null || !enmusMineType.Any())
        //            throw new Exception("获取生成单元枚举信息失败!");
        //        else
        //        {
        //            foreach (var item in enmusMineType)
        //            {
        //                lisMineTypeOrder.Add(item.NAME);
        //            }
        //        }
        //        #endregion
        //        #region    1_1   listCheckCount(List>)
        //        Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value;
        //        if (dtEnd.HasValue)
        //            expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value);
        //        //BSMineTypeEditEnum  选矿 10,  尾矿  20, 矿山  30,  地下矿  40,
        //        //FMDepartmentType    层级 3公司级 0部门级 1车间级 2班组级
        //        //expression 不能组合 
        //        //公司级 部门级 车间级 班组级 用filter过滤 
        //        BaseFilter filterSearch1_1 = new BaseFilter(filter.OrgId);
        //        filterSearch1_1.IgnoreDataRule = true;
        //        filterSearch1_1.Include.Add("Nav_CheckTypeLevel");
        //        FilterGroup filterGroup = new FilterGroup();
        //        filterGroup.IsAnd = true;
        //        FilterRule filterGroupRule = new FilterRule();
        //        filterGroupRule.Field = "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID";
        //        FilterRule filterGroupMineRule = new FilterRule();
        //        filterGroupMineRule.Field = "CHECKOBJECT";
        //        List> listCheckCount = new List>();
        //        List listCheckLevelCount = null;
        //        foreach (var item in enmusLevel)
        //        {
        //            //mineTypeName: ["露天矿", "选矿厂", "尾矿库", "职能部门"],
        //            //legendName: ["公司级", "部门级", "车间级", "班组级"],
        //            //checkCount: [[3, 3, 3, 3], [12, 12, 12, 6], [24, 24, 24, 12], [90, 90, 120, 36]],
        //            listCheckLevelCount = new List();
        //            //选矿 10,  尾矿  20, 矿山  30,  地下矿  40,
        //            foreach (var itemMine in enmusMineType)
        //            {
        //                if (filterGroup.Rules != null && filterGroup.Rules.Any())
        //                    filterGroup.Rules.Clear();
        //                filterGroupRule.Value = item.ID;
        //                filterGroup.Rules.Add(filterGroupRule);
        //                filterGroupMineRule.Value = itemMine.VALUE;
        //                filterGroup.Rules.Add(filterGroupMineRule);
        //                filterSearch1_1.FilterGroup = filterGroup;
        //                int count = GetCount(expression, filterSearch1_1);
        //                listCheckLevelCount.Add(count);
        //            }
        //            listCheckCount.Add(listCheckLevelCount);
        //        }
        //        //数据组装
        //        result.Count1_1 = listCheckCount;
        //        result.lisMineTypeOrder = lisMineTypeOrder;
        //        result.lisLevelOrder = lisLevelOrder;
        //        #endregion
        //        #region 3_1
        //        List> listCheckTypeCount = new List>();
        //        List listCheckTypeCountPer = null;
        //        var listCheckType = GetEntities(e => !e.IS_DELETED, null).OrderBy(e => e.PARENT_ID).ThenBy(e => e.NUM);
        //        List listCheckTypeName = new List();
        //        List listCheckTypeID = new List();
        //        Dictionary> dicParent = new Dictionary>();
        //        List listSum = new List();
        //        Guid guidParent = Guid.Empty;
        //        foreach (var item in listCheckType)
        //        {
        //            if (item.PARENT_ID.HasValue)
        //            {
        //                if (!listCheckTypeName.Contains(item.NAME))
        //                {
        //                    listCheckTypeName.Add(item.NAME);
        //                    listCheckTypeID.Add(item.ID);
        //                    guidParent = item.PARENT_ID.Value;
        //                }
        //                listSum.Add(item.ID);
        //            }
        //            else
        //            {
        //                listCheckTypeName.Add(item.NAME);
        //                listCheckTypeID.Add(item.ID);
        //            }
        //        }
        //        listSum.Add(guidParent);//有些人直接定义 综合检查
        //        dicParent.Add(guidParent, listSum);
        //        Expression> expression3_1 = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value;
        //        if (dtEnd.HasValue)
        //            expression3_1 = expression3_1.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value);
        //        Expression> expression3_1_Contains = expression3_1.And(e => listSum.Contains(e.CHECK_TYPE_ID.Value));
        //        BaseFilter filterSearch3_1 = new BaseFilter(filter.OrgId);
        //        filterSearch3_1.IgnoreDataRule = true;
        //        filterGroupRule = new FilterRule();
        //        filterGroupRule.Field = "CHECK_TYPE_ID";
        //        filterGroupMineRule = new FilterRule();
        //        filterGroupMineRule.Field = "CHECKOBJECT";
        //        foreach (var item in enmusMineType)
        //        {
        //            listCheckTypeCountPer = new List();
        //            foreach (var itemCheckType in listCheckTypeID)
        //            {
        //                if (filterGroup.Rules != null && filterGroup.Rules.Any())
        //                    filterGroup.Rules.Clear();
        //                //检查类型
        //                if (itemCheckType == guidParent)
        //                {
        //                    //报错  expression3_1 => expression3_1_Contains
        //                    //filterGroupRule.Operate = FilterOperate.Contains;
        //                    //filterGroupRule.Value = listSum;
        //                    //生产单元
        //                    filterGroupMineRule.Value = item.VALUE;
        //                    filterGroup.Rules.Add(filterGroupMineRule);
        //                    filterSearch3_1.FilterGroup = filterGroup;
        //                    int count = GetCount(expression3_1_Contains, filterSearch3_1);
        //                    listCheckTypeCountPer.Add(count);
        //                }
        //                else
        //                {
        //                    filterGroupRule.Value = itemCheckType;
        //                    filterGroup.Rules.Add(filterGroupRule);
        //                    //生产单元
        //                    filterGroupMineRule.Value = item.VALUE;
        //                    filterGroup.Rules.Add(filterGroupMineRule);
        //                    filterSearch3_1.FilterGroup = filterGroup;
        //                    int count = GetCount(expression3_1, filterSearch3_1);
        //                    listCheckTypeCountPer.Add(count);
        //                }
        //                //filterGroup.Rules.Add(filterGroupRule);
        //                ////生产单元
        //                //filterGroupMineRule.Value = item.VALUE;
        //                //filterGroup.Rules.Add(filterGroupMineRule);
        //                //filterSearch3_1.FilterGroup = filterGroup;
        //                //int count = GetCount(expression3_1, filterSearch3_1);
        //                //listCheckTypeCountPer.Add(count);
        //            }
        //            listCheckTypeCount.Add(listCheckTypeCountPer);
        //        }
        //        result.Count3_1 = listCheckTypeCount;
        //        result.lisCheckTypeName = listCheckTypeName;
        //        #endregion
        //        return result;
        //    });
        //}
        //#endregion
        #region    各弹窗方法
        #region      1_1  GetBI056_1_1
        /// 
        /// 显示
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056_1_1")]
        public JsonActionResult GetBI056_1_1([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056_1_1 result = new ModelBI056_1_1();
                int year = DateTime.Now.Year;
                int month = DateTime.Now.Month;
                List listMonth = null;
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                if (!string.IsNullOrEmpty(filter.Keyword))
                {
                    var season = int.Parse(filter.Keyword);
                    switch (season)
                    {
                        case 1:
                            listMonth = new List() { 1, 2, 3 };
                            break;
                        case 2:
                            listMonth = new List() { 4, 5, 6 };
                            break;
                        case 3:
                            listMonth = new List() { 7, 8, 9 };
                            break;
                        case 4:
                            listMonth = new List() { 10, 11, 12 };
                            break;
                        default:
                            break;
                    }
                    dtStart = dtStart.AddMonths(3 * (season - 1));
                    dtEnd = dtStart.AddMonths(3).AddSeconds(-1);
                }
                #region  enmusLevel=> lisLevelOrder   enmusMineType=>lisMineTypeOrder 
                var enmus = GetEntities(e => !e.IS_DELETED, null, null);
                if (enmus == null || !enmus.Any())
                    throw new Exception("获取生成单元、组织层级等枚举信息失败!");
                List lisLevelOrder = new List();
                List lisMineTypeOrder = new List();
                var enmusLevel = enmus.Where(e => e.CODE == "HMLevleEnum").OrderBy(e => e.NUM).ToList();
                var enmusMineType = enmus.Where(e => e.CODE == "BSMineTypeEnum").OrderBy(e => e.NUM).ToList();
                if (enmusLevel == null || !enmusLevel.Any())
                    throw new Exception("获取组织层级枚举信息失败!");
                else
                {
                    foreach (var item in enmusLevel)
                    {
                        lisLevelOrder.Add(item.NAME);
                    }
                }
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                #endregion
                List> listResult = new List>();
                List listResultPer = null;
                int count = 0;
                #region 改良版 listSafeCheck 所有的符合条件的检查信息
                Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value;
                if (dtEnd.HasValue)
                    expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value);
                BaseFilter filterSearch = new BaseFilter(filter.OrgId);
                filterSearch.IgnoreDataRule = true;
                filterSearch.Include.Add("Nav_CheckTypeLevel");
                filterSearch.SelectField = new List() { "ID", "CHECKOBJECT", "CHECK_TYPE_ID", "IS_DELETED", "CHECKTIME", "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID" };
                //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel");
                var listSafeCheck = GetEntities(expression, filterSearch, "Nav_CheckTypeLevel");
                #endregion
                foreach (var item in enmusLevel)
                {
                    listResultPer = new List();
                    foreach (var itemMonth in listMonth)
                    {
                        if (itemMonth > month && dtStart.Year == year)//同年 如果月份 大于当前月   直接跳出计算
                        {
                            break;
                        }
                        //层级 各 生产单元  几月到几月 安全检查数量
                        foreach (var itemMine in enmusMineType)
                        {
                            count = listSafeCheck.Where(e => e.CHECKOBJECT == itemMine.VALUE && e.Nav_CheckTypeLevel.CheckLevel_ENUMS_ID == item.ID && e.CHECKTIME.Value.Month == itemMonth).Count();
                            listResultPer.Add(count);
                        }
                    }
                    listResult.Add(listResultPer);
                }
                //数据组装
                result.Count = listResult;
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.lisLevelOrder = lisLevelOrder;
                return result;
            });
        }
        #endregion
        #region   1_2  GetBI056_1_2
        /// 
        /// 显示
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056_1_2")]
        public JsonActionResult GetBI056_1_2([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056_1_2 result = new ModelBI056_1_2();
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                List lisMineTypeOrder = new List();
                var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList();
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                List listMonth = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12 };
                if (dtStart.Year > DateTime.Now.Year)
                {
                    listMonth.Clear();
                }
                else if (dtStart.Year == DateTime.Now.Year)
                {
                    listMonth = listMonth.Where(e => e <= DateTime.Now.Month).OrderBy(e => e).ToList();
                }
                List> ListCount = new List>();
                Expression> expression = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart;//&& e.DESCREPTION != null
                if (dtEnd.HasValue)
                    expression = expression.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value);
                var listContent = GetEntities(expression, null, "Nav_Submit");
                BSMineTypeEnum? mineType = null;
                List ListCountPer = null;
                foreach (var item in enmusMineType)
                {
                    mineType = (BSMineTypeEnum)item.VALUE;
                    ListCountPer = new List();
                    foreach (var itemMonth in listMonth)
                    {
                        ListCountPer.Add(listContent.Count(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == mineType && e.CREATE_TIME.Value.Month == itemMonth));
                    }
                    ListCount.Add(ListCountPer);
                }
                //数据组装
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.ListCount = ListCount;
                return result;
            });
        }
        #endregion
        #region   2_1  GetBI056_2_1
        /// 
        /// 显示
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056_2_1")]
        public JsonActionResult GetBI056_2_1([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056_2_1 result = new ModelBI056_2_1();
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                List lisMineTypeOrder = new List();
                var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList();
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                Expression> expression2_2 = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && e.RiskContentState.HasValue && !e.IS_DELETED;//&& e.DESCREPTION != null
                if (dtEnd.HasValue)
                    expression2_2 = expression2_2.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value);
                var listContent = GetEntities(expression2_2, null, "Nav_Submit");
                List listMonth = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12 };
                if (dtStart.Year > DateTime.Now.Year)
                {
                    listMonth.Clear();
                }
                else if (dtStart.Year == DateTime.Now.Year)
                {
                    listMonth = listMonth.Where(e => e <= DateTime.Now.Month).OrderBy(e => e).ToList();
                }
                List listFinishPer2_1 = null;
                List listNotFinishPer2_1 = null;
                List listFinishPer2_1Percent = null;
                List> listFinish2_1 = new List>();
                List> listNotFinish2_1 = new List>();
                List> listFinish2_1Percent = new List>();
                BSMineTypeEnum? CHECKOBJECT = null;
                foreach (var itemEnums in enmusMineType)
                {
                    CHECKOBJECT = (BSMineTypeEnum)itemEnums.VALUE;
                    listFinishPer2_1 = new List();
                    listNotFinishPer2_1 = new List();
                    listFinishPer2_1Percent = new List();
                    foreach (var item in listMonth)
                    {
                        listFinishPer2_1.Add(listContent.Count(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == CHECKOBJECT && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80)));
                        listNotFinishPer2_1.Add(listContent.Count(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == CHECKOBJECT && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && e.RiskContentState.Value != 60 && e.RiskContentState.Value != 80));
                    }
                    for (int i = 0; i < listMonth.Count; i++)
                    {
                        if (listNotFinishPer2_1[i] == 0)
                        {
                            listFinishPer2_1Percent.Add(100);
                        }
                        else if (listFinishPer2_1[i] == 0)
                        {
                            listFinishPer2_1Percent.Add(0);
                        }
                        else
                        {
                            listFinishPer2_1Percent.Add((decimal)Math.Round((listFinishPer2_1[i] * 100.0 / (listNotFinishPer2_1[i] + listFinishPer2_1[i])), 2));
                        }
                    }
                    listFinish2_1.Add(listFinishPer2_1);
                    listNotFinish2_1.Add(listNotFinishPer2_1);
                    listFinish2_1Percent.Add(listFinishPer2_1Percent);
                }
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.listFinish2_1 = listFinish2_1;
                result.listNotFinish2_1 = listNotFinish2_1;
                result.listFinish2_1Percent = listFinish2_1Percent;
                return result;
            });
        }
        #endregion
        #region   2_2  GetBI056_2_2
        /// 
        /// 显示
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056_2_2")]
        public JsonActionResult GetBI056_2_2([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056_2_2 result = new ModelBI056_2_2();
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                List lisMineTypeOrder = new List();
                var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList();
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                List> ListCount = new List>();
                List> ListDescreption = new List>();
                Expression> expression2_2 = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && e.DESCREPTION != null;//&& e.RiskContentState.HasValue && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80)  名称不能为null
                if (dtEnd.HasValue)
                    expression2_2 = expression2_2.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value);
                BSMineTypeEnum? mineType = null;
                List ListCountPer = null;
                List ListDescreptionPer = null;
                foreach (var item in enmusMineType)
                {
                    mineType = (BSMineTypeEnum)item.VALUE;
                    Expression> expression2_2Mine = expression2_2.And(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == mineType);
                    var listContent = GetEntities(expression2_2Mine, null, "Nav_Submit");
                    var query = listContent.GroupBy(e => e.DESCREPTION).Select(e => new
                    {
                        DESCREPTION = e.Key,
                        Count = e.Count()
                    }).OrderByDescending(e => e.Count).Take(6);
                    ListCountPer = new List();
                    ListDescreptionPer = new List();
                    if (query != null && query.Any())
                    {
                        foreach (var itemVal in query)
                        {
                            ListCountPer.Add(itemVal.Count);
                            ListDescreptionPer.Add(itemVal.DESCREPTION);
                        }
                    }
                    ListCount.Add(ListCountPer);
                    ListDescreption.Add(ListDescreptionPer);
                }
                //数据组装
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.ListCount = ListCount;
                result.ListDescreption = ListDescreption;
                return result;
            });
        }
        #endregion
        #region    3_1  GetBI056_3_1
        /// 
        /// 各生产单元 各月 各检查类型数量
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056_3_1")]
        public JsonActionResult GetBI056_3_1([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056_3_1 result = new ModelBI056_3_1();
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList();
                List lisMineTypeOrder = new List();
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                var listCheckType = GetEntities(e => !e.IS_DELETED, null, "Nav_ListMineType").OrderBy(e => e.PARENT_ID).ThenBy(e => e.NUM).ToList();
                Dictionary> dicParent = new Dictionary>();
                List listSum = new List();
                Guid guidParent = Guid.Empty;
                foreach (var item in listCheckType)
                {
                    if (item.PARENT_ID.HasValue)
                    {
                        if (guidParent != Guid.Empty)
                        {
                            guidParent = item.PARENT_ID.Value;
                        }
                        listSum.Add(item.ID);
                    }
                }
                listSum.Add(guidParent);//有些人直接定义 综合检查
                dicParent.Add(guidParent, listSum);
                List> listCheckTypes = new List>();
                foreach (var item in enmusMineType)
                {
                    listCheckTypes.Add(listCheckType.Where(e => e.Nav_ListMineType.Where(e => e.MINETYPE_ENUMS_ID == item.ID).Any()).ToList());
                }
                List> lisMineCheckTypeOrder = new List>();
                List lisMineCheckTypeOrderPer = null;
                foreach (var item in listCheckTypes)
                {
                    lisMineCheckTypeOrderPer = new List();
                    foreach (var itemCheckType in item)
                    {
                        lisMineCheckTypeOrderPer.Add(itemCheckType.NAME);
                    }
                    lisMineCheckTypeOrder.Add(lisMineCheckTypeOrderPer);
                }
                #region 改良版 listSafeCheck 所有的符合条件的检查信息
                Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value;
                if (dtEnd.HasValue)
                    expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value);
                BaseFilter filterSearch = new BaseFilter(filter.OrgId);
                filterSearch.IgnoreDataRule = true;
                filterSearch.Include.Add("Nav_CheckTypeLevel");
                filterSearch.SelectField = new List() { "ID", "CHECKOBJECT", "CHECK_TYPE_ID", "IS_DELETED", "CHECKTIME", "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID" };
                //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel");
                var listSafeCheck = GetEntities(expression, filterSearch, "Nav_CheckTypeLevel");
                #endregion
                #region  3_1 改良版
                List>> listCheckTypeMonthCount = new List>>();
                List> listCheckTypeCount = null;
                List listCheckTypeCountPer = null;
                List listMonth = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12 };
                if (dtStart.Year > DateTime.Now.Year)
                {
                    listMonth.Clear();
                }
                else if (dtStart.Year == DateTime.Now.Year)
                {
                    listMonth = listMonth.Where(e => e <= DateTime.Now.Month).OrderBy(e => e).ToList();
                }
                var enmusMineTypeCount = enmusMineType.Count();
                for (int i = 0; i < enmusMineTypeCount; i++)
                {
                    listCheckTypeCount = new List>();
                    int MineCheckTypeCount = listCheckTypes[i].Count;
                    for (int j = 0; j < MineCheckTypeCount; j++)
                    {
                        listCheckTypeCountPer = new List();
                        foreach (int itemMonth in listMonth)
                        {
                            //检查类型
                            if (listCheckTypes[i][j].ID == guidParent)
                            {
                                int count = listSafeCheck.Where(e => e.CHECKOBJECT == enmusMineType[i].VALUE && e.CHECKTIME.Value.Month == itemMonth && listSum.Contains(e.CHECK_TYPE_ID.Value)).Count();
                                listCheckTypeCountPer.Add(count);
                            }
                            else
                            {
                                int count = listSafeCheck.Where(e => e.CHECKOBJECT == enmusMineType[i].VALUE && e.CHECKTIME.Value.Month == itemMonth && e.CHECK_TYPE_ID == listCheckTypes[i][j].ID).Count();
                                listCheckTypeCountPer.Add(count);
                            }
                        }
                        listCheckTypeCount.Add(listCheckTypeCountPer);
                    }
                    listCheckTypeMonthCount.Add(listCheckTypeCount);
                }
                //数据组装
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.lisMineCheckTypeOrder = lisMineCheckTypeOrder;
                result.Count3_1 = listCheckTypeMonthCount;
                #endregion
                return result;
            });
        }
        #endregion
        #region    3_2  GetBI056_3_2
        /// 
        /// 各生产单元 各月 各检查类型数量
        /// 
        /// 
        /// 
        [HttpPost, Route("GetBI056_3_2")]
        public JsonActionResult GetBI056_3_2([FromBody] KeywordFilter filter)
        {
            return SafeExecute(() =>
            {
                ModelBI056_3_2 result = new ModelBI056_3_2();
                DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00");
                DateTime? dtEnd = null;
                List listMonth = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12 };
                if (dtStart.Year > DateTime.Now.Year)
                {
                    listMonth.Clear();
                }
                else if (dtStart.Year == DateTime.Now.Year)
                {
                    listMonth = listMonth.Where(e => e <= DateTime.Now.Month).OrderBy(e => e).ToList();
                }
                var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList();
                List lisMineTypeOrder = new List();
                if (enmusMineType == null || !enmusMineType.Any())
                    throw new Exception("获取生成单元枚举信息失败!");
                else
                {
                    foreach (var item in enmusMineType)
                    {
                        lisMineTypeOrder.Add(item.NAME);
                    }
                }
                var listCheckType = GetEntities(e => !e.IS_DELETED, null, "Nav_ListMineType").OrderBy(e => e.PARENT_ID).ThenBy(e => e.NUM);
                List listCheckTypeName = new List();
                List listCheckTypeID = new List();
                Dictionary> dicParent = new Dictionary>();
                List listSum = new List();
                Guid guidParent = Guid.Empty;
                foreach (var item in listCheckType)
                {
                    if (item.PARENT_ID.HasValue)
                    {
                        if (!listCheckTypeName.Contains(item.NAME))
                        {
                            listCheckTypeName.Add(item.NAME);
                            listCheckTypeID.Add(item.ID);
                            guidParent = item.PARENT_ID.Value;
                        }
                        listSum.Add(item.ID);
                    }
                    else
                    {
                        listCheckTypeName.Add(item.NAME);
                        listCheckTypeID.Add(item.ID);
                    }
                }
                listSum.Add(guidParent);//有些人直接定义 综合检查
                dicParent.Add(guidParent, listSum);
                List> listCheckTypes = new List>();
                foreach (var item in enmusMineType)
                {
                    listCheckTypes.Add(listCheckType.Where(e => e.Nav_ListMineType.Where(e => e.MINETYPE_ENUMS_ID == item.ID).Any()).ToList());
                }
                Expression> expression = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && e.RiskContentState.HasValue && !e.IS_DELETED;
                if (dtEnd.HasValue)
                    expression = expression.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value);
                var listContent = GetEntities(expression, null, "Nav_Submit").ToList();
                List> lisMineCheckTypeOrder = new List>();
                List lisMineCheckTypeOrderPer = null;
                foreach (var item in listCheckTypes)
                {
                    lisMineCheckTypeOrderPer = new List();
                    foreach (var itemCheckType in item)
                    {
                        lisMineCheckTypeOrderPer.Add(itemCheckType.NAME);
                    }
                    lisMineCheckTypeOrder.Add(lisMineCheckTypeOrderPer);
                }
                List>> listRisk = new List>>();
                List> listRiskMoneCheckType = null;
                List listCheckTypeCountPer = null;
                int MintTypeIndex = -1;
                foreach (var item in enmusMineType)
                {
                    MintTypeIndex++;
                    listRiskMoneCheckType = new List>();
                    foreach (var itemCheckType in listCheckTypes[MintTypeIndex])
                    {
                        listCheckTypeCountPer = new List();
                        foreach (var itemMonth in listMonth)
                        {
                            //检查类型
                            if (itemCheckType.ID == guidParent)
                            {
                                int count = listContent.Count(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && listSum.Contains(e.Nav_Submit.CHECK_TYPE_ID.Value) && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == itemMonth && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && listSum.Contains(e.Nav_Submit.CHECK_TYPE_ID.Value));
                                listCheckTypeCountPer.Add(count);
                            }
                            else
                            {
                                int count = listContent.Count(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && e.Nav_Submit.CHECK_TYPE_ID == itemCheckType.ID && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == itemMonth && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && e.Nav_Submit.CHECK_TYPE_ID == itemCheckType.ID);
                                listCheckTypeCountPer.Add(count);
                            }
                        }
                        listRiskMoneCheckType.Add(listCheckTypeCountPer);
                    }
                    listRisk.Add(listRiskMoneCheckType);
                }
                result.lisMineTypeOrder = lisMineTypeOrder;
                result.lisMineCheckType = lisMineCheckTypeOrder;
                result.Count3_1 = listRisk;
                return result;
            });
        }
        #endregion
        #endregion
        #endregion
        #region     model
        public class ModelBI056Main
        {
            public List lisMineTypeOrder { get; set; }
            public List lisLevelOrder { get; set; }
            public List> Count1_1 { get; set; }
            public List listRiskMineCount1_2 { get; set; }
            public List listFinish2_1 { get; set; }
            public List listMonth { get; set; }
            public List listNotFinish2_1 { get; set; }
            public List listFinish2_1Percent { get; set; }
            public List ListDescreption2_2 { get; set; }
            public List Count2_2 { get; set; }
            public List> Count3_1 { get; set; }
            public List lisCheckTypeName { get; set; }
            public List> Count3_2 { get; set; }
        }
        public class ModelBI056_1_1
        {
            public List lisMineTypeOrder { get; set; }
            public List lisLevelOrder { get; set; }
            public List> Count { get; set; }
        }
        public class ModelBI056_1_2
        {
            public List lisMineTypeOrder { get; set; }
            public List> ListCount { get; set; }
        }
        public class ModelBI056_2_1
        {
            public List lisMineTypeOrder { get; set; }
            public List> listFinish2_1 { get; set; }
            public List> listNotFinish2_1 { get; set; }
            public List> listFinish2_1Percent { get; set; }
        }
        public class ModelBI056_2_2
        {
            public List lisMineTypeOrder { get; set; }
            public List> ListCount { get; set; }
            public List> ListDescreption { get; set; }
        }
        public class ModelBI056_3_1
        {
            /// 
            /// 生产单元
            /// 
            public List lisMineTypeOrder { get; set; }
            /// 
            /// 生产单元 检查类型
            /// 
            public List> lisMineCheckTypeOrder { get; set; }
            /// 
            /// 检查数量
            /// 
            public List>> Count3_1 { get; set; }
        }
        public class ModelBI056_3_2
        {
            /// 
            /// 生产单元
            /// 
            public List lisMineTypeOrder { get; set; }
            /// 
            /// 生产单元 检查类型
            /// 
            public List> lisMineCheckType { get; set; }
            /// 
            /// 检查数量
            /// 
            public List>> Count3_1 { get; set; }
        }
        #endregion
        #endregion
    }
    public class BISafe
    {
        public List listSafeCheck { get; set; }
        public List listCheckType { get; set; }
        public T_BI_SUMMARY summary { get; set; }
    }
}