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); }