/// <summary> /// 读取xml文件(ComplateTargetDetail.xml) /// </summary> /// <returns>完成情况明细模板</returns> private List <VTarget> SplitCompleteTargetDetailXml(XElement xelement) { List <VTarget> targetList = new List <VTarget>(); XElement elementCTD = xelement; if (elementCTD.Elements("ManageTargetDetail").Elements("BlendTargets").Count() > 0) { //完成情况明细模板 List <XElement> Targets = elementCTD.Elements("ManageTargetDetail").Elements("BlendTargets").Elements("Target").ToList(); VTarget vt = null; foreach (XElement target in Targets) { vt = new VTarget(target); targetList.Add(vt); } } if (elementCTD.Elements("ManageTargetDetail").Elements("Target").Count() > 0) { //完成情况明细模板 List <XElement> Targets = elementCTD.Elements("ManageTargetDetail").Elements("Target").ToList(); VTarget vt = null; foreach (XElement target in Targets) { vt = new VTarget(target); targetList.Add(vt); } } return(targetList); }
/// <summary> /// 数据筛选 /// </summary> /// <param name="strCP">公司类型Item</param> /// <param name="listMRDetail">数据</param> /// <param name="vt">指标项</param> /// <returns></returns> private List <DictionaryVmodel> EditData(List <MonthlyReportDetail> listMRD, VTarget vt, C_Target CTarget, List <S_Organizational> listOrganizational, VItemCompanyProperty vcp) { #region 声明变量 List <DictionaryVmodel> lstDVM = new List <DictionaryVmodel>(); List <MonthlyReportDetail> VCounterListMonthlyReportDetailViewModel = null; B_MonthlyReportDetail bmrd = null; List <VCounter> listVCounter = null; #endregion #region 数据判断与拼装 //判断当前指标是否存在模板,如果存在使用指标模板,如果不存在使用当前系统的模板。 if (CTarget.Configuration.Elements("ManageTargetDetail").Elements("Target").ToList().Count > 0) { listVCounter = SplitCompleteTargetDetailXml(CTarget.Configuration)[0].CounterList; } else { listVCounter = vt.CounterList; } //对项目公司数据按照区域分组获取区域信息 var areaList = listMRD.GroupBy(m => new { m.AreaID, m.AreaName, m.AreaLevel }).Select(n => new { AreaID = n.Key.AreaID, AreaName = n.Key.AreaName, AreaLevel = n.Key.AreaLevel, Count = n.Count() }).OrderBy(m => m.AreaID); //从项目汇总到上一级区域 foreach (var item in areaList) { DictionaryVmodel dv = dv = new DictionaryVmodel(); VCounterListMonthlyReportDetailViewModel = new List <MonthlyReportDetail>(); var currentAreaMrd = listMRD.Where(m => m.AreaID == item.AreaID).ToList(); dv.Name = item.AreaName; dv.Mark = "LastArea"; bmrd = SummaryData(currentAreaMrd, dv.BMonthReportDetail, CTarget); //调用计算完成率的方法 bmrd = TargetEvaluationEngine.TargetEvaluationService.Calculation(bmrd, false); dv.BMonthReportDetail = bmrd; //如果是混合指标按照公司排序 否则按照XML中配置进行排序 if (vt.IsBlendTarget) { VCounterListMonthlyReportDetailViewModel = currentAreaMrd.OrderBy(m => m.Company.Sequence).ThenBy(m => m.Company.CompanyName).ToList(); } else { VCounterListMonthlyReportDetailViewModel = SequenceEngine.SequenceService.GetSequence(_System.ID, strMonthReportOrderType, currentAreaMrd); } dv.ObjValue = VCounterListMonthlyReportDetailViewModel;// EditDataChild(listMRD, CTarget, item.Nodes, ref dvList, ref br); dv.RowSpanCount = VCounterListMonthlyReportDetailViewModel.Count; //大于3表示当前区域上面还存在区域(level=1 组织架构顶级 level=2 板块) if (item.AreaLevel > 3) { //获取当前区域信息 var currentAreaList = listOrganizational.Where(m => m.ID == item.AreaID).ToList(); if (currentAreaList.Any() && currentAreaList.FirstOrDefault().ParentID != Guid.Empty) { //获取当前区域父级区域信息 var parentArea = listOrganizational.Where(m => m.ID == currentAreaList.FirstOrDefault().ParentID); dv.Value = parentArea.FirstOrDefault().CnName.ToString(); dv.GuoupID = parentArea.FirstOrDefault().ID.ToString(); dv.Level = parentArea.FirstOrDefault().Level; } } lstDVM.Add(dv); } //表示存在父级区域 if (lstDVM.Any() && !string.IsNullOrEmpty(lstDVM.FirstOrDefault().GuoupID)) { //最后一级区域的上面的所有区域信息 List <DictionaryVmodel> resultDVM = new List <DictionaryVmodel>(); resultDVM = EditDataParent(lstDVM, CTarget, listOrganizational); return(resultDVM); } else { return(lstDVM); } #endregion }
/// <summary> /// 数据筛选 /// </summary> /// <param name="strCP">公司类型Item</param> /// <param name="listMRDetail">数据</param> /// <param name="vt">指标项</param> /// <returns></returns> private List <DictionaryVmodel> EditData(List <MonthlyReportDetail> listMRD, VTarget vt, C_Target CTarget, List <C_Company> listCompany, VItemCompanyProperty vcp) { #region 声明变量 List <DictionaryVmodel> lstDVM = new List <DictionaryVmodel>(); List <MonthlyReportDetail> VCounterListMonthlyReportDetailViewModel = null; ExpressionParser _parser = null; int rowSpanCount = 0; B_MonthlyReportDetail bmrd = null; List <VCounter> listVCounter = null; #endregion #region 数据判断与拼装 //判断当前指标是否存在模板,如果存在使用指标模板,如果不存在使用当前系统的模板。 if (CTarget.Configuration.Elements("ComplateTargetDetail").Elements("Target").ToList().Count > 0) { listVCounter = SplitCompleteTargetDetailXml(CTarget.Configuration)[0].CounterList; } else { listVCounter = vt.CounterList; } for (int i = 0; listVCounter.Count > i; i++) { DictionaryVmodel dv = dv = new DictionaryVmodel(); VCounterListMonthlyReportDetailViewModel = new List <MonthlyReportDetail>(); foreach (MonthlyReportDetail mrd in listMRD) { Hashtable bizContext = BizContextEngine.BizContextService.GetBizContext(listMRD.FindAll(p => p.CompanyID == mrd.CompanyID), "MonthlyReportDetail"); _parser = new ExpressionParser(bizContext); //区分月累计算式与年累计算式。 string Expression = strMonthReportOrderType == "DetailMonthly" ? listVCounter.ToList()[i].DetailMonthlyExpression : listVCounter.ToList()[i].DetailExpression; if (_parser.CacluateCondition(Expression)) { VCounterListMonthlyReportDetailViewModel.Add(mrd); } } //明细项数据排序 VCounterListMonthlyReportDetailViewModel = SequenceEngine.SequenceService.GetSequence(_System.ID, strMonthReportOrderType, VCounterListMonthlyReportDetailViewModel); dv.Name = listVCounter.ToList()[i].Title; //判断是否隐藏Counter明细项中数据 if (listVCounter[i].Display.ToLower() == "true") { dv.Mark = "DetailShow"; //计算隐藏的行数 rowSpanCount = rowSpanCount + VCounterListMonthlyReportDetailViewModel.Count; } else { dv.Mark = "DetailHide"; } //判断Counter明细项中是否存在该数据。 if (listVCounter[i].HaveDetail.ToLower() == "false") { dv.Mark = "DetailDelete"; } //判断是否存在公司属性 if (vcp != null && i == 0) { dv.Value = vcp.ItemCompanyPropertyName; dv.RowSpanCount = 0; } #region 计算明细项项合计和小计 if (!listVCounter.ToList()[i].Title.Contains("小计") && !listVCounter.ToList()[i].Title.Contains("合计")) { bmrd = SummaryData(VCounterListMonthlyReportDetailViewModel, bmrd, CTarget); } else { bmrd = SummaryData(listMRD, bmrd, CTarget); } #endregion //调用计算完成率的方法 bmrd = TargetEvaluationEngine.TargetEvaluationService.Calculation(bmrd, false); dv.BMonthReportDetail = bmrd; dv.ObjValue = VCounterListMonthlyReportDetailViewModel; lstDVM.Add(dv); } //计算页面要通行数 if (vcp != null) { lstDVM[0].RowSpanCount = rowSpanCount + listVCounter.ToList().Count; } #endregion return(lstDVM); }