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