public ResultContext GetMonthList(string SystemID, int Year, int Month, string TargetPlanID, bool IsLatestVersion = false, string DataSource = "Draft", bool IsAll = false)
        {
            try
            {
                MonthlyReportController ms    = new MonthlyReportController();
                List <DictionaryVmodel> listM = ms.GetReportInstance(SystemID, Year, Month, TargetPlanID, IsLatestVersion, DataSource, IsAll);
                Guid result = Guid.Empty;
                Guid.TryParse(SystemID, out result);
                if (result == Guid.Empty)
                {
                    return(new ResultContext((int)StatusCodeEnum.isFalse, "系统编码错误"));
                }
                DictionaryVmodel dv = new DictionaryVmodel();
                if (listM.Count > 0)
                {
                    dv = listM[2];
                }

                return(new ResultContext(new { title = listM[1].ObjValue, list = JsonConvert.SerializeObject(dv) }));
            }
            catch (Exception ex)
            {
                return(new ResultContext((int)StatusCodeEnum.isCatch, ex.ToString()));

                throw;
            }
        }
        /// <summary>
        ///  合并经营报告明细(混合指标)
        /// </summary>
        /// <param name="dvCurrent">已计算的单项指标集合</param>
        /// <returns></returns>
        public List <DictionaryVmodel> GetMergeComplateMonthReportDetail(List <DictionaryVmodel> dvCurrentList)
        {
            List <DictionaryVmodel> dvResult = new List <DictionaryVmodel>();

            var completeBlendTargetDetailXml = SplitCompleteBlendTargetDetailXml(_System.Configuration);

            //遍历完成情况明细中包含几个混合指标(目前需求一个版块只允许有一个)
            foreach (var item in completeBlendTargetDetailXml)
            {
                //合并混合指标为Object
                List <DictionaryVmodel> dvMergeList = new List <DictionaryVmodel>();

                DictionaryVmodel dv = new DictionaryVmodel();
                dv.Name          = item.TargetName;
                dv.IsBlendTarget = true;
                dv.Mark          = "Target";
                dv.Senquence     = item.Senquence;
                foreach (var dvItem in dvCurrentList)
                {
                    dv.HtmlTemplate = dvItem.HtmlTemplate;
                    var TargetList = item.VTargetList.Where(m => m.TargetName == dvItem.Name).ToList();
                    //判断当前指标是否为混合指标
                    if (TargetList != null && TargetList.Count() > 0)
                    {
                        dvMergeList.Add(dvItem);
                    }
                    else
                    {
                        //如果不存在单指标才重新添加
                        if (dvResult.Where(m => m.Name == dvItem.Name).Count() == 0)
                        {
                            dvResult.Add(dvItem);
                        }
                    }
                }
                if (dvMergeList.Count > 0)
                {
                    dv.ObjValue = dvMergeList;
                    dvResult.Add(dv);
                }
            }
            //重新排序
            return(dvResult.OrderBy(m => m.Senquence).ToList());
        }
        /// <summary>
        /// 分组数据
        /// </summary>
        /// <param name="Group">分组条件</param>
        /// <param name="XmlType">补回情况/未完成说明</param>
        /// <returns></returns>
        List <DictionaryVmodel> FormartCounterData(VCounter counter, VGroup Group, string XmlType, string GroupStr, ref List <MonthlyReportDetail> Source)
        {
            List <DictionaryVmodel> result = new List <DictionaryVmodel>();

            List <MonthlyReportDetail> tempList = CalclateMissTargetdata(counter, Group.TargetIDs);

            string TitleName = MonthDescriptionTools(counter.Title, Group.TargetIDs, counter.Expression, tempList);

            DictionaryVmodel dictM = new DictionaryVmodel(TitleName, tempList);

            dictM.Mark             = "Data";
            dictM.GuoupID          = GroupStr;
            dictM.TargetGroupCount = Group.TargetIDs.Count();
            dictM.SystemName       = _System.SystemName;
            dictM.Value            = counter.Senquence.ToString();
            result.Add(dictM);

            return(result);
        }
Example #4
0
        private List <DictionaryVmodel> FormartProData(List <ProjectCounter> ProCounter)
        {
            List <DictionaryVmodel> result = new List <DictionaryVmodel>();

            List <V_ProjectCompany> ProList = new List <V_ProjectCompany>();

            List <V_ProjectCompany> VP = new List <V_ProjectCompany>();

            /*这里XML确保“区域公司小计”的排序在“总计”的前面,这样在计算的时候容易,
             * 但是在展示的时候 总计需要在区域公司的前面,这个时候需要重新排序,同时还需要将明细数据放到最后
             */

            foreach (ProjectCounter item in ProCounter.OrderBy(g => g.Senquence))
            {
                if (!item.IsDetail) //不是明细项
                {
                    if (item.Title == "总计")
                    {
                        //显示的项
                        ProList.AddRange(GetProjectModel(ProList, item)); //2 总计
                    }
                    else
                    {
                        ProList.AddRange(GetProjectModel(item));  //1 区域小计
                    }
                }
                else
                {                                                             //是明细项
                    VP = ProList.OrderBy(p => p.ProCompanySequence).ToList(); //重新排序  //3
                    VP.AddRange(GetProjectCompany());
                }
            }
            DictionaryVmodel Dict = new DictionaryVmodel();

            Dict.Mark     = "Data";
            Dict.ObjValue = VP;


            result.Add(Dict);
            return(result);
        }
Example #5
0
        /// <summary>
        /// 分组数据
        /// </summary>
        /// <param name="Group">分组条件</param>
        /// <param name="XmlType">补回情况/未完成说明</param>
        /// <returns></returns>
        List <DictionaryVmodel> FormartVData(VGroup Group, string XmlType, string GroupStr)
        {
            List <DictionaryVmodel> result = new List <DictionaryVmodel>();

            //循环Group下的数据
            foreach (var counter in Group.CounterList.OrderBy(C => C.Senquence))
            {
                if (counter.SubCounterList != null && counter.SubCounterList.Count > 0)
                {
                    DictionaryVmodel dictC = new DictionaryVmodel(counter.Title, FormartCounterData(counter, Group, XmlType, GroupStr, ref VLastList));
                    dictC.Mark             = "Counter";
                    dictC.GuoupID          = GroupStr;
                    dictC.TargetGroupCount = 1;
                    dictC.SystemName       = _System.SystemName;
                    result.Add(dictC);
                }
                else
                {
                    result.AddRange(FormartCounterData(counter, Group, XmlType, GroupStr, ref VLastList));
                }
            }
            return(result);
        }
Example #6
0
        /// <summary>
        /// 分组数据
        /// </summary>
        /// <param name="Group">分组条件</param>
        /// <param name="XmlType">补回情况/未完成说明</param>
        /// <returns></returns>
        List <DictionaryVmodel> FormartCounterData(VCounter counter, VGroup Group, string XmlType, string GroupStr, ref List <MonthlyReportDetail> Source)
        {
            List <DictionaryVmodel> result = new List <DictionaryVmodel>();

            if (counter.SubCounterList != null && counter.SubCounterList.Count > 0)
            {
                List <MonthlyReportDetail> subSource = Calclatedata(counter, Group.TargetIDs, ref Source);

                foreach (VCounter c in counter.SubCounterList)
                {
                    if (c.SubCounterList != null && c.SubCounterList.Count > 0)
                    {
                        DictionaryVmodel dictC = new DictionaryVmodel(c.Title, FormartCounterData(c, Group, XmlType, GroupStr, ref subSource));
                        dictC.Mark             = "Counter";
                        dictC.GuoupID          = GroupStr;
                        dictC.TargetGroupCount = 1;
                        dictC.SystemName       = _System.SystemName;
                        result.Add(dictC);
                    }
                    else
                    {
                        result.AddRange(FormartCounterData(c, Group, XmlType, GroupStr, ref subSource));
                    }
                }
            }
            else
            {
                DictionaryVmodel dictR = new DictionaryVmodel(counter.Title, Calclatedata(counter, Group.TargetIDs, ref Source));
                dictR.Mark             = "Data";
                dictR.GuoupID          = GroupStr;
                dictR.TargetGroupCount = 1;
                dictR.SystemName       = _System.SystemName;
                result.Add(dictR);
            }
            return(result);
        }
        /// <summary>
        /// 获取区域汇总信息
        /// </summary>
        /// <param name="listMRD"></param>
        /// <param name="ChildDataPermissions"></param>
        /// <returns></returns>
        private List <DictionaryVmodel> EditDataParent(List <DictionaryVmodel> dvList, C_Target CTarget, List <S_Organizational> listOrganizational)
        {
            #region 声明变量
            List <DictionaryVmodel> lstDVM = new List <DictionaryVmodel>();
            B_MonthlyReportDetail   bmrd   = null;
            #endregion

            //对区域数据分组获取大区信息
            var areaList = dvList.GroupBy(m => new { m.GuoupID, m.Value, m.Level }).Select(n => new
            {
                AreaID   = n.Key.GuoupID,
                AreaName = n.Key.Value,
                Level    = n.Key.Level,
                Count    = n.Count()
            });
            //大区
            foreach (var item in areaList)
            {
                List <DictionaryVmodel> currentDVListGroup = dvList.Where(m => m.GuoupID == item.AreaID).ToList();

                DictionaryVmodel dv = new DictionaryVmodel();

                dv.Name = item.AreaName;
                dv.Mark = "Area";
                bmrd    = SummaryAreaData(currentDVListGroup, dv.BMonthReportDetail, CTarget);
                bmrd    = TargetEvaluationEngine.TargetEvaluationService.Calculation(bmrd, false);
                dv.BMonthReportDetail = bmrd;
                dv.RowSpanCount       = currentDVListGroup.Count;
                dv.ObjValue           = currentDVListGroup;

                //大于3表示当前区域上面还存在区域(level=1 组织架构顶级 level=2 板块)
                if (item.Level > 3)
                {
                    //获取当前区域信息
                    var currentAreaList = listOrganizational.Where(m => m.ID == Guid.Parse(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);
            }
        }
        /// <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
        }
Example #9
0
        public List <DictionaryVmodel> GetReturnRptDataSource(ReportInstance RptModel, C_System sys)
        {
            VLastList     = new List <MonthlyReportDetail>();
            _System       = sys;
            FinMonth      = RptModel.FinMonth;
            FinYear       = RptModel.FinYear;
            ReportDetails = RptModel.ReportDetails;

            List <VGroup> GroupList = new List <VGroup>();
            XElement      element   = null;

            //加载XML,系统配置信息
            element = _System.Configuration;

            if (element.Elements("MisstargetReturn").Elements("Group") != null)
            {
                List <XElement> Groups = element.Elements("MisstargetReturn").Elements("Group").ToList();
                foreach (XElement group in Groups)
                {
                    GroupList.Add(new VGroup(group));
                }
            }

            //上个月A表单一指标
            if (VLastList == null || VLastList.Count <= 0)
            {
                int lastFinMonth = 0;

                if (FinMonth == 1)
                {
                    lastFinMonth = 0;
                }
                else
                {
                    lastFinMonth = FinMonth - 1;
                }

                //上月A表的数据
                //List<A_MonthlyReportDetail> Lastlist = A_MonthlyreportdetailOperator.Instance.GetAMonthlyreportdetailList(_System.ID, FinYear, lastFinMonth).ToList();
                List <A_MonthlyReportDetail> Lastlist = A_MonthlyreportdetailOperator.Instance.GetAMonthlyReportDetailListForTargetPlanID(_System.ID, FinYear, lastFinMonth, RptModel.TargetPlanID).ToList();
                //当月A表数据
                //List<A_MonthlyReportDetail> list_A = A_MonthlyreportdetailOperator.Instance.GetAMonthlyreportdetailList(_System.ID, FinYear, FinMonth).ToList();
                List <A_MonthlyReportDetail> list_A = A_MonthlyreportdetailOperator.Instance.GetAMonthlyReportDetailListForTargetPlanID(_System.ID, FinYear, FinMonth, RptModel.TargetPlanID).ToList();

                //当月B表数据
                List <B_MonthlyReportDetail> list_B = B_MonthlyreportdetailOperator.Instance.GetMonthlyreportdetailList(_System.ID, FinYear, FinMonth, RptModel._MonthReportID).ToList();

                List <Guid> Companies = new List <Guid>();

                //调用引擎
                Companies = LastMonthCompaniesEngine.LastMonthCompaniesService.GetLastMonthCompaniesID(Lastlist, _System.ID);

                ReportDetails.RemoveAll(R => !Companies.Contains(R.CompanyID));
                foreach (MonthlyReportDetail item in ReportDetails) //循环当月
                {
                    A_MonthlyReportDetail lastMRD = Lastlist.Find(p => p.CompanyID == item.CompanyID && p.TargetID == item.TargetID);

                    if (lastMRD != null)
                    {
                        item.LastNAccumulativeActualAmmount = lastMRD.NAccumulativeActualAmmount;
                        item.LastNAccumulativeDifference    = lastMRD.NAccumulativeDifference;
                        item.LastNAccumulativePlanAmmount   = lastMRD.NAccumulativePlanAmmount;
                        item.LastIsMissTarget = lastMRD.IsMissTarget;
                        item.AddDifference    = item.NAccumulativeDifference - item.LastNAccumulativeDifference;
                    }
                    VLastList.Add(item);
                }
            }

            List <DictionaryVmodel> ReturnList = new List <DictionaryVmodel>();

            //补回情况,分组List
            foreach (var Group in GroupList.OrderBy(G => G.Senquence))
            {
                DictionaryVmodel Vmodel = new DictionaryVmodel();
                Vmodel.Name             = Group.TargetName;
                Vmodel.ObjValue         = FormartVData(Group, "TargetReturn", Group.TargetName);
                Vmodel.Mark             = "Group";
                Vmodel.GuoupID          = Group.TargetName;
                Vmodel.SystemName       = _System.SystemName;
                Vmodel.TargetGroupCount = Group.TargetIDs.Count();
                Vmodel.HtmlTemplate     = GetRetuenHtmlTemplate(element);
                ReturnList.Add(Vmodel);
            }

            return(ReturnList);
        }
        bool IsSingleTarget        = false; // Update 2015-5-13  是否单个指标

        public List <DictionaryVmodel> GetMissTargetRptDataSource(ReportInstance RptModel, C_System sys)
        {
            #region 初始化
            MissTargetList     = new List <MonthlyReportDetail>();
            MissTargetTextList = new List <MonthlyReportDetail>();
            ReportDetails      = new List <MonthlyReportDetail>();
            targetList         = new List <C_Target>();

            #endregion

            _System    = sys;
            FinMonth   = RptModel.FinMonth;
            FinYear    = RptModel.FinYear;
            targetList = RptModel._Target;


            List <VGroup> GroupList = new List <VGroup>();
            XElement      element   = null;

            //加载XML,系统配置信息
            element = _System.Configuration; //局部

            if (element.Elements("Misstarget").Elements("Group") != null)
            {
                List <XElement> Groups = element.Elements("Misstarget").Elements("Group").ToList();
                foreach (XElement group in Groups)
                {
                    GroupList.Add(new VGroup(group));
                }
            }

            //-------Update 2015 -5-13 区分未完成的时候是单个指标,还是组合指标 start
            if (element.Elements("Misstarget").ToList().Count > 0)
            {
                XElement subElement = element.Elements("Misstarget").ToList()[0];

                IsSingleTarget = subElement.GetAttributeValue("IsSingleTarget", false);
            }
            //-------Update 2015 -5-13 区分未完成的时候是单个指标,还是组合指标  End


            ReportDetails = RptModel.ReportDetails;

            //当月未完成A或B表指标
            if (ReportDetails != null && ReportDetails.Count > 0)
            {
                MissTargetList = ReportDetails; //当月的数据

                int lastFinMonth = 0;

                if (FinMonth == 1)
                {
                    lastFinMonth = 0;
                }
                else
                {
                    lastFinMonth = FinMonth - 1;
                }

                //找到上个月的数据 , 上个月的数据只能在A表中
                //List<A_MonthlyReportDetail> AList = A_MonthlyreportdetailOperator.Instance.GetAMonthlyreportdetailList(RptModel._System.ID, FinYear, lastFinMonth).ToList();
                List <A_MonthlyReportDetail> AList = A_MonthlyreportdetailOperator.Instance.GetAMonthlyReportDetailListForTargetPlanID(RptModel._System.ID, FinYear, lastFinMonth, RptModel.TargetPlanID).ToList();


                // 获取各个公司全年的总指标数据
                List <V_PlanTargetModel> VPlanTargeList = A_TargetplandetailOperator.Instance.GetAnnualPlanTarget(ReportDetails[0].TargetPlanID, FinYear);

                //上月的数据
                LastMissTargetList = new List <MonthlyReportDetail>();
                AList.ForEach(P => LastMissTargetList.Add(P.ToVModel()));

                foreach (MonthlyReportDetail item in MissTargetList)
                {
                    MonthlyReportDetail LastTempDetai = LastMissTargetList.Find(p => p.CompanyID == item.CompanyID && p.TargetID == item.TargetID);

                    V_PlanTargetModel PTM = VPlanTargeList.Find(Tp => Tp.CompanyID == item.CompanyID && Tp.TargetID == item.TargetID);

                    //将全年指标总数加进去
                    if (PTM != null)
                    {
                        item.AnnualTargetPlanValue = PTM.Target;
                    }

                    //判断上个月是否有数据
                    if (LastTempDetai != null)
                    {
                        item.LastNAccumulativeActualAmmount = LastTempDetai.NAccumulativeActualAmmount;
                        item.LastNAccumulativeDifference    = LastTempDetai.NAccumulativeDifference;
                        item.LastNAccumulativePlanAmmount   = LastTempDetai.NAccumulativePlanAmmount;
                        item.AddDifference    = item.NAccumulativeDifference - item.LastNAccumulativeDifference;
                        item.LastIsMissTarget = LastTempDetai.IsMissTarget;
                        item.LastIsCommitDate = LastTempDetai.IsCommitDate;
                    }
                    else
                    {
                        item.AddDifference = item.NAccumulativeDifference - 0;
                    }

                    MissTargetTextList.Add(item);
                }
            }

            Dictionary <string, object> Alldata = new Dictionary <string, object>();

            List <DictionaryVmodel> ReturnList = new List <DictionaryVmodel>();

            //补回情况,分组List
            foreach (var Group in GroupList.OrderBy(G => G.Senquence))
            {
                DictionaryVmodel Vmodel = new DictionaryVmodel();
                Vmodel.Name             = Group.TargetName;
                Vmodel.ObjValue         = FormartVData(Group, "MissTarget", Group.TargetName);
                Vmodel.Mark             = "Group";
                Vmodel.GuoupID          = Group.TargetName;
                Vmodel.TargetGroupCount = Group.TargetIDs.Count();
                Vmodel.SystemName       = _System.SystemName;
                ReturnList.Add(Vmodel);
            }
            return(ReturnList);
        }
Example #11
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);
        }