/// <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
        }
コード例 #3
0
        /// <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);
        }