Пример #1
0
        /// <summary>
        /// 获取总计的数据(第二步)
        /// </summary>
        /// <param name="ProList"></param>
        /// <returns></returns>
        private List <V_ProjectCompany> GetProjectModel(List <V_ProjectCompany> ProList, ProjectCounter ProCounter)
        {
            //项目公司
            List <V_ProjectCompany> ProCompanyList = new List <V_ProjectCompany>();
            //项目公司指标
            List <V_ProjectTarget> _ProTargetLists = new List <V_ProjectTarget>();



            List <V_ProjectTarget> ProTargetListSum = new List <V_ProjectTarget>();

            //把所有区域的指标拿出来
            ProList.ForEach(p => ProTargetListSum.AddRange(p.ProjectTargets));

            /*
             * 这里的总计需要注意:因每个区域系统都是独立的指标,所以只能按照指标名称来比对
             * 所以在各个区域系统的指标名称一定要一样,不然无法统计
             */

            #region 总计的指标总和

            List <C_Target> _TargetList = StaticResource.Instance.TargetList[_SystemID].ToList();

            foreach (C_Target itemTarget in _TargetList.OrderBy(g => g.Sequence))
            {
                V_ProjectTarget VModel = new V_ProjectTarget();

                //从明细表中获取数据
                MonthlyReportDetail tempModel = new MonthlyReportDetail();

                VModel.ProMonthlyReportDetailID = Guid.Empty;

                VModel.ProTargetID         = itemTarget.ID;
                VModel.ProTargetName       = itemTarget.TargetName;
                VModel.ProTargetSequence   = itemTarget.Sequence;
                VModel.ProCompayID         = Guid.Empty;
                VModel.IsMissTarget        = false;
                VModel.IsMissTargetCurrent = false;
                VModel.Counter             = 0;

                //总计: 当月数据字段
                VModel.NPlanAmmount   = ProTargetListSum.FindAll(f => f.ProTargetName == itemTarget.TargetName).Sum(s => s.NPlanAmmount);   //总计:当月计划数 ,从区域小计上获取
                VModel.NActualAmmount = ProTargetListSum.FindAll(f => f.ProTargetName == itemTarget.TargetName).Sum(s => s.NActualAmmount); //总计:当月实际数 ,从区域小计上获取
                if (VModel.NPlanAmmount == 0)
                {
                    VModel.NActualRate = ""; VModel.NDisplayRate = "/";
                }
                else
                {
                    VModel.NActualRate  = "";
                    VModel.NDisplayRate = Math.Round((VModel.NActualAmmount / VModel.NPlanAmmount), 5, MidpointRounding.AwayFromZero).ToString("P1");;
                }

                //总计:当月累计计划数
                VModel.NAccumulativePlanAmmount   = ProTargetListSum.FindAll(f => f.ProTargetName == itemTarget.TargetName).Sum(s => s.NAccumulativePlanAmmount); // ?累计的指标怎么算?
                VModel.NAccumulativeActualAmmount = ProTargetListSum.FindAll(f => f.ProTargetName == itemTarget.TargetName).Sum(s => s.NAccumulativeActualAmmount);
                if (VModel.NAccumulativePlanAmmount == 0)
                {
                    VModel.NAccumulativeActualRate  = "";
                    VModel.NAccumulativeDisplayRate = "/";
                }
                else
                {
                    VModel.NAccumulativeActualRate  = "";
                    VModel.NAccumulativeDisplayRate = Math.Round((VModel.NAccumulativeActualAmmount / VModel.NAccumulativePlanAmmount), 5, MidpointRounding.AwayFromZero).ToString("P1");;
                }

                //总计:年度计划值
                VModel.NActualAmmountByYear = 0;
                VModel.NPlanAmmountByYear   = ProTargetListSum.FindAll(f => f.ProTargetName == itemTarget.TargetName).Sum(s => s.NPlanAmmountByYear);;
                if (VModel.NPlanAmmountByYear != 0)
                {
                    VModel.NDisplayRateByYear = Math.Round((VModel.NAccumulativeActualAmmount / VModel.NPlanAmmountByYear), 5, MidpointRounding.AwayFromZero).ToString("P1");
                }
                else
                {
                    VModel.NPlanAmmountByYear = 0;
                    VModel.NDisplayRateByYear = "/";
                }
                VModel.NActualRateByYear = "";

                _ProTargetLists.Add(VModel);
            }

            #endregion


            V_ProjectCompany tempProCompany = new V_ProjectCompany();
            tempProCompany.ProCompanySequence  = -100;
            tempProCompany.SystemID            = Guid.Empty;
            tempProCompany.ProCompayName       = ProCounter.Title;
            tempProCompany.ProCompayID         = Guid.Empty;
            tempProCompany.ProCompanyProperty1 = "";
            tempProCompany.FinYear             = FinYear;
            tempProCompany.FinMonth            = FinMonth;
            //tempProCompany.CompayModel = itemCompany;
            tempProCompany.ProRowSpan       = 0;
            tempProCompany.ProCompanyNumber = 0;
            tempProCompany.ProjectTargets   = _ProTargetLists;
            tempProCompany.ProDataType      = "XML";
            ProCompanyList.Add(tempProCompany);

            return(ProCompanyList);
        }
Пример #2
0
        /// <summary>
        /// 获取区域公司总计的实体(第一步)
        /// </summary>
        /// <param name="ProCounter"></param>
        /// <returns></returns>
        private List <V_ProjectCompany> GetProjectModel(ProjectCounter ProCounter)
        {
            Guid SysId = Guid.Empty; //从XML中获取的系统ID

            Guid _CompanyId = Guid.Empty;

            if (!string.IsNullOrEmpty(ProCounter.CompanyID))
            {
                _CompanyId = Guid.Parse(ProCounter.CompanyID);
            }

            //公司,区域小计的ID,从XML中获取的
            C_Company itemCompany = C_CompanyOperator.Instance.GetCompany(_CompanyId);

            SysId = itemCompany.SystemID;

            //指标List
            List <C_Target> targetList = StaticResource.Instance.TargetList[SysId].ToList();

            //项目公司
            List <V_ProjectCompany> ProCompanyList = new List <V_ProjectCompany>();

            ReportInstance rpt = null;

            //获取批次ID,如果_MonthReportID 不是为Guid.Empty ,表示:是从上报页面过来的
            //反之,则代表是从查询页面传递过来的
            if (currRptModel._MonthReportID != Guid.Empty)
            {
                //上报页面
                ExceptionHelper.TrueThrow(currRptModel.LastestMonthlyReport == null, "B_MonthlyReport表为Null");

                if (currRptModel.LastestMonthlyReport.SystemBatchID != Guid.Empty)
                {
                    B_SystemBatch _BatchModel = B_SystemBatchOperator.Instance.GetSystemBatch(currRptModel.LastestMonthlyReport.SystemBatchID);

                    List <V_SubReport> subRptList = JsonHelper.Deserialize <List <V_SubReport> >(_BatchModel.SubReport);
                    subRptList.ForEach(p =>
                    {
                        if (p.SystemID == SysId)
                        {
                            rpt = new ReportInstance(p.ReportID, true);// 从B表中获取根据ReportID获取
                        }
                    });
                }
                else
                {
                    rpt = currRptModel;
                }
            }
            else
            {
                //查询页面, 通过系统倒序查找相应的项目系统
                rpt = new ReportInstance(SysId, FinYear, FinMonth, IsLatestVersion);
            }


            ProjectCompanyDetails = rpt.ReportDetails;

            //计划指标,包含了 区域小计的指标
            List <A_TargetPlanDetail> TargetPlanList = new List <A_TargetPlanDetail>();

            if (currRptModel._MonthReportID != Guid.Empty)
            {
                //上报的时候总是获取最新的指标。
                TargetPlanList = StaticResource.Instance.GetTargetPlanList(SysId, FinYear, FinMonth);
            }
            else
            {
                //查询的时候按照版本查询,从B表中查出后转换成A表的数据
                List <B_TargetPlanDetail> _bTargetPlanList = new List <B_TargetPlanDetail>();

                _bTargetPlanList = B_TargetplandetailOperator.Instance.GetTargetplandetailList(rpt.ReportDetails[0].TargetPlanID).ToList();

                //将B 表数据添加到 A表中
                _bTargetPlanList.ForEach(tp => TargetPlanList.Add(tp.ToAModel()));
            }

            List <V_ProjectTarget> ProTargetList  = new List <V_ProjectTarget>();
            V_ProjectCompany       tempProCompany = new V_ProjectCompany();

            tempProCompany.ProCompanySequence  = itemCompany.Sequence;
            tempProCompany.SystemID            = itemCompany.SystemID;
            tempProCompany.ProCompayName       = itemCompany.CompanyName;
            tempProCompany.ProCompayID         = itemCompany.ID;
            tempProCompany.ProCompanyProperty1 = itemCompany.CompanyProperty1;
            tempProCompany.FinYear             = FinYear;
            tempProCompany.FinMonth            = FinMonth;
            tempProCompany.CompayModel         = itemCompany;
            tempProCompany.ProRowSpan          = 0;
            tempProCompany.ProCompanyNumber    = 0;

            //获取批次ID,如果_MonthReportID 不是为Guid.Empty ,表示:是从上报页面过来的
            //反之,则代表是从查询页面传递过来的
            if (currRptModel._MonthReportID != Guid.Empty)
            {
                tempProCompany.ProjectTargets = SingleProTargetLists(targetList, rpt.ReportDetails, TargetPlanList, itemCompany, false);
            }
            else
            {
                tempProCompany.ProjectTargets = SingleProTargetLists(targetList, rpt.ReportDetails, TargetPlanList, itemCompany, true);
            }

            tempProCompany.ProDataType = "XML";
            ProCompanyList.Add(tempProCompany);

            return(ProCompanyList);
        }