public object GetSystemTargetCount(List <MonthlyReportDetail> MissTargetList, List <MonthlyReportDetail> LastMissTargetList, List <MonthlyReportDetail> SingleMissTargetList, List <MonthlyReportDetail> DoubleMissTargetList, List <MonthlyReportDetail> FilterMissTargetList)
        {
            MissTargetDataSource model = new MissTargetDataSource();

            //model.MissTargetDataSource1 = MissTargetList;
            //model.MissTargetDataSource2 = LastMissTargetList;
            model.MissTargetDataSource3 = MissTargetList;
            model.MissTargetDataSource4 = LastMissTargetList;
            model.MissTargetDataSource5 = MissTargetList;
            return(model);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="StrValue"></param>
        /// <param name="TargetIDs"></param>
        /// <param name="CounterExpression">主要是为了计算上个月的计算公式</param>
        /// <returns></returns>
        private string MonthDescriptionTools(string StrValue, List <Guid> TargetIDs, string CounterExpression, List <MonthlyReportDetail> MRDList)
        {
            //双指标:包含上月未完成+补回
            List <MonthlyReportDetail> DoubleResult = MRDList.Select(x => x).ToList();

            //单个指标:包含上月未完成+补回
            List <MonthlyReportDetail> SingleResult = MRDList.Select(c => c).ToList();

            //上月的补回公司

            List <MonthlyReportDetail> _LastList = MissTargetTextList.Where(p => p.ReturnType >= (int)EnumReturnType.Accomplish).ToList();
            List <Guid> CompanyIDs = new List <Guid>();

            _LastList.ForEach(M =>
            {
                if (TargetIDs.Contains(M.TargetID) && !CompanyIDs.Contains(M.CompanyID))
                {
                    CompanyIDs.Add(M.CompanyID);
                }
            });

            //未完成list
            List <MonthlyReportDetail> Mlist = MissTargetTextList.Where(p => (p.ReturnType > 0 && p.ReturnType <= (int)EnumReturnType.Accomplish) && (TargetIDs.Contains(p.TargetID))).ToList();

            Mlist.ForEach(M =>
            {
                if (CompanyIDs.Contains(M.TargetID))
                {
                    CompanyIDs.Remove(M.TargetID);
                }
            });

            List <MonthlyReportDetail> LastList = new List <MonthlyReportDetail>();

            CompanyIDs.ForEach(C => { LastList.AddRange(MissTargetTextList.Where(M => M.CompanyID == C).ToList()); });

            //----------------------Update 2015 -5- 7  这里的筛选是为了配合组合指标的,单个指标不再这里做处理 ---------

            if (TargetIDs.Count > 1) //如果XMl里的指标是一个就是单个,其它的都是组合指标
            {
                IsSingleTarget = false;
            }
            else
            {
                IsSingleTarget = true;
            }

            if (!IsSingleTarget) //是否单个指标针对(商管,物管的),这里不用理会补回的公司
            {
                LastList.ForEach(p =>
                {
                    if (p.ReturnType >= (int)EnumReturnType.Accomplish)
                    {
                        //如果该数据是补回的,搜索该数据的公司是否有新增的未完成,如果有排除掉; 因该数据不是 补回数据
                        var TempReturnList = LastList.Where(f => f.CompanyID == p.CompanyID && f.IsMissTarget == true).ToList();
                        if (TempReturnList.Count > 0)
                        {
                            CompanyIDs.Remove(p.CompanyID);
                        }
                    }
                });
                //清空,然后重新再次加载
                LastList.RemoveRange(0, LastList.Count);
                CompanyIDs.ForEach(C => { LastList.AddRange(MissTargetTextList.Where(M => M.CompanyID == C).ToList()); });
            }
            //----------------------Update 2015 -5- 7   end ---------


            if (LastList.Count > 0)
            {
                //循环上月的补回公司
                foreach (var itemLast in LastList)
                {
                    int AccomplishCount = MissTargetTextList.FindAll(z => z.CompanyID == itemLast.CompanyID && z.ReturnType >= (int)EnumReturnType.Accomplish).Count;

                    //这个是组合指标都完成
                    if (AccomplishCount == TargetIDs.Count)
                    {
                        //双指标 ,//本月的数据 同时必须比对 指标
                        if (DoubleResult.FindAll(p => p.CompanyID == itemLast.CompanyID && p.TargetID == itemLast.TargetID).Count == 0)
                        {
                            DoubleResult.Add(itemLast);
                        }
                    }
                    else
                    {
                        if (SingleResult.FindAll(p => p.CompanyID == itemLast.CompanyID && p.TargetID == itemLast.TargetID).Count == 0)
                        {
                            SingleResult.Add(itemLast);
                        }
                    }
                }
            }


            //提供不同的数据源
            MissTargetDataSource DataSource = (MissTargetDataSource)SystemTargetCountEngine.SystemTargetCountEngineService.GetSystemTargetCount(MissTargetTextList, LastMissTargetList, SingleResult, DoubleResult, MRDList, _System);


            if (IsSingleTarget && _System.SystemName == "万达旅业")
            {
                DoubleResult = DataSource.MissTargetDataSource1;

                SingleResult = DataSource.MissTargetDataSource2;

                MRDList = DataSource.MissTargetDataSource1;
            }
            else
            {
                //双指标的
                if (DataSource.MissTargetDataSource3 != null && DataSource.MissTargetDataSource3.Count > 0)
                {
                    DoubleResult = DataSource.MissTargetDataSource3;
                }
                else
                {
                    DoubleResult = new List <MonthlyReportDetail>();
                }

                //单个指标的
                if (DataSource.MissTargetDataSource4 != null && DataSource.MissTargetDataSource4.Count > 0)
                {
                    SingleResult = DataSource.MissTargetDataSource4;
                }
                else
                {
                    SingleResult = new List <MonthlyReportDetail>();
                }


                MRDList = DataSource.MissTargetDataSource5;
            }

            if (!string.IsNullOrEmpty(StrValue))
            {
                //正则表达式,定义要替换的部分
                var       matchResults = System.Text.RegularExpressions.Regex.Match(StrValue, @".*?{(.*?)}");
                Hashtable ht           = new Hashtable();
                while (matchResults.Success)
                {
                    //var num1 = matchResults.Groups[0].Value; // 第一个数字
                    string _Expression = matchResults.Groups[1].Value; // 第二个数字
                    string _Month      = _Expression.Substring(0, 2);

                    string Expression = _Expression.Replace(_Month, "").TrimStart().ToString();

                    //公司数量
                    int CompanyCount = 0;

                    if (_Month == "上双")
                    {
                        //Expression 计算有多少个公司
                        CompanyCount = GetLastMonthCompanyCount(Expression, TargetIDs, DoubleResult);
                    }
                    else if (_Month == "上单")
                    {
                        //Expression 计算有多少个公司
                        CompanyCount = GetLastMonthCompanyCount(Expression, TargetIDs, SingleResult);
                    }
                    else //本月
                    {
                        //Expression 计算有多少个公司
                        CompanyCount = GetCompanyCount(Expression, TargetIDs, MRDList);
                    }
                    //存入Hashtable中
                    string red_color_CompanyCount = @"<span style='color: red;'>" + CompanyCount.ToString() + "</span>";

                    if (ht.ContainsKey(_Expression) == false)
                    {
                        ht.Add(_Expression, red_color_CompanyCount);
                    }
                    else
                    {
                        ht[_Expression] = red_color_CompanyCount;
                    }

                    matchResults = matchResults.NextMatch();
                }

                //循环Hashtable,替换公式,显示返回公司的数量
                foreach (string key in ht.Keys)
                {
                    StrValue = StrValue.Replace("{" + key + "}", ht[key].ToString());
                }
            }
            return(StrValue);
        }