/// <summary> /// 计算合计 /// </summary> /// <returns></returns> private List <B_MonthlyReportDetail> GetSummaryDate(List <MonthlyReportDetail> listMRD, C_Target CTarget) { List <B_MonthlyReportDetail> listSummaryMRD = new List <B_MonthlyReportDetail>(); B_MonthlyReportDetail bmrd = new B_MonthlyReportDetail(); bmrd.ID = Guid.NewGuid(); bmrd.SystemID = _System.ID; bmrd.FinYear = FinYear; bmrd.FinMonth = FinMonth; bmrd.TargetID = CTarget.ID; if (listMRD.Count > 0) { bmrd.NPlanAmmount = listMRD.Sum(p => p.NPlanAmmount); bmrd.NActualAmmount = listMRD.Sum(p => p.NActualAmmount); bmrd.NDifference = listMRD.Sum(p => p.NDifference); bmrd.NAccumulativePlanAmmount = listMRD.Sum(p => p.NAccumulativePlanAmmount); bmrd.NAccumulativeActualAmmount = listMRD.Sum(p => p.NAccumulativeActualAmmount); bmrd.NAccumulativeDifference = listMRD.Sum(p => p.NAccumulativeDifference); bmrd.NPlanAmmountByYear = listMRD.Sum(p => p.NPlanAmmountByYear); if (bmrd.NPlanAmmountByYear != 0) { bmrd.NDisplayRateByYear = Math.Round((bmrd.NAccumulativeActualAmmount / bmrd.NPlanAmmountByYear), 5, MidpointRounding.AwayFromZero).ToString("P1"); } else { bmrd.NDisplayRateByYear = "--"; } } bmrd = TargetEvaluationEngine.TargetEvaluationService.Calculation(bmrd, false); listSummaryMRD.Add(bmrd); return(listSummaryMRD); }
public List <DictionaryVmodel> UpdateMonthReportDetail(string rpts, string strMonthReportOrderType, string info, bool IncludeHaveDetail, string strMonthReportID) { List <DictionaryVmodel> ListObj = new List <DictionaryVmodel>(); MonthlyReportDetail detail = JsonHelper.Deserialize <MonthlyReportDetail>(info); B_MonthlyReportDetail B_detail = CalculationEvaluationEngine.CalculationEvaluationService.Calculation(detail.ToBModel(), ""); B_MonthlyreportdetailOperator.Instance.UpdateMonthlyreportdetail(B_detail); ReportInstance rpt = JsonHelper.Deserialize <ReportInstance>(rpts); rpt.ReportDetails.Remove(rpt.ReportDetails.Find(p => p.ID == detail.ID)); rpt.ReportDetails.Add(B_detail.ToVModel()); ListObj.Add(new DictionaryVmodel("ReportInstance", rpt)); ListObj.Add(new DictionaryVmodel("MonthDetail", GetTargetDetailList(rpt, strMonthReportOrderType, IncludeHaveDetail))); ListObj.Add(new DictionaryVmodel("Misstarget", GetMissTargetList(rpt, strMonthReportID, true))); ListObj.Add(new DictionaryVmodel("MonthReportDescription", GetMonthTRptDescription(rpt))); ListObj.Add(new DictionaryVmodel("CurrentMissTargetList", GetCurrentMissTargetList(rpt, strMonthReportID.ToString(), true))); SaveJsonData(strMonthReportID.ToGuid(), rpt, ListObj); return(ListObj); }
public List <DictionaryVmodel> UpdateDirectlyMonthReportDetail(string rpts, string info, string strMonthReportID) { List <DictionaryVmodel> ListObj = new List <DictionaryVmodel>(); ReportInstance rpt = JsonHelper.Deserialize <ReportInstance>(rpts); MonthReportSummaryViewModel mrsvm = JsonHelper.Deserialize <MonthReportSummaryViewModel>(info); MonthlyReportDetail mrd = rpt.ReportDetails.Find(p => p.ID == mrsvm.MonthlyDetailID); if (mrd != null) { MonthlyReportDetail tempMRD = mrd; tempMRD.NActualAmmount = (decimal)mrsvm.NActualAmmount; B_MonthlyReportDetail B_detail = CalculationEvaluationEngine.CalculationEvaluationService.Calculation(tempMRD.ToBModel(), ""); B_MonthlyreportdetailOperator.Instance.UpdateMonthlyreportdetail(B_detail); rpt.ReportDetails.Remove(mrd); rpt.ReportDetails.Add(B_detail.ToVModel()); } ListObj.Add(new DictionaryVmodel("ReportInstance", rpt)); ListObj.Add(new DictionaryVmodel("MonthDetail", GetTargetDetailList(rpt, "", false))); ListObj.Add(new DictionaryVmodel("Misstarget", GetMissTargetList(rpt, strMonthReportID, true))); ListObj.Add(new DictionaryVmodel("MonthReportDescription", GetMonthTRptDescription(rpt))); ListObj.Add(new DictionaryVmodel("CurrentMissTargetList", GetCurrentMissTargetList(rpt, strMonthReportID.ToString(), true))); SaveJsonData(strMonthReportID.ToGuid(), rpt, ListObj); return(ListObj); }
/// <summary> /// 计算引擎(优先级是在指标上配置,然后是在系统上配置) /// </summary> /// <param name="RptDetail"></param> /// <param name="TemplateType"></param> /// <returns></returns> public B_MonthlyReportDetail Calculation(B_MonthlyReportDetail RptDetail, string TemplateType) { string InterfaceName = "*"; C_System sys = new C_System(); if (RptDetail.CreateTime != null && RptDetail.CreateTime != DateTime.MinValue && RptDetail.CreateTime.ToString() != "0001/1/1 0:00:00") { sys = StaticResource.Instance[RptDetail.SystemID, RptDetail.CreateTime]; } else { sys = StaticResource.Instance[RptDetail.SystemID, DateTime.Now]; } //最后是系统设置 if (sys != null) { if (sys.Category == 4) { InterfaceName = "Directly"; } } //然后是系统的配置 if (sys != null && sys.Configuration.Element("Interfaces") != null) { if (sys.Configuration.Element("Interfaces").Elements("ICalculationEvaluation") != null && sys.Configuration.Element("Interfaces").Elements("ICalculationEvaluation").ToList().Count > 0) { foreach (XElement e in sys.Configuration.Element("Interfaces").Elements("ICalculationEvaluation").ToList()) { //if (e.Attribute("TemplateType").Value.ToLower().Trim() == TemplateType.ToLower().Trim()) //{ InterfaceName = e.Attribute("InterfaceName").Value.Trim(); //} } } } //优先级是指标 C_Target target = StaticResource.Instance.TargetList[RptDetail.SystemID].Find(p => p.ID == RptDetail.TargetID); if (target != null && target.Configuration.Element("Interfaces") != null) { if (target.Configuration.Element("Interfaces").Elements("ICalculationEvaluation") != null && target.Configuration.Element("Interfaces").Elements("ICalculationEvaluation").ToList().Count > 0) { foreach (XElement e in target.Configuration.Element("Interfaces").Elements("ICalculationEvaluation").ToList()) { //if (e.Attribute("TemplateType").Value.ToLower().Trim() == TemplateType.ToLower().Trim()) //{ InterfaceName = e.Attribute("InterfaceName").Value.Trim(); //} } } } return((B_MonthlyReportDetail)this[InterfaceName].Calculation(RptDetail)); }
/// <summary> /// 计算区域明细项项合计 /// </summary> /// <param name="listData"></param> /// <param name="bmrd"></param> /// <param name="CTarget"></param> /// <returns></returns> private B_MonthlyReportDetail SummaryAreaData(List <DictionaryVmodel> dvList, B_MonthlyReportDetail bmrd, C_Target CTarget) { //特殊处理差额,针对指标 XElement element = null; element = CTarget.Configuration; XElement subElement = null; List <B_MonthlyReportDetail> listData = new List <B_MonthlyReportDetail>(); bool IsDifferenceException = false; if (element.Elements("IsDifferenceExceptionTarget").ToList().Count > 0) { subElement = element.Elements("IsDifferenceExceptionTarget").ToList()[0]; IsDifferenceException = subElement.GetAttributeValue("value", false); } foreach (var item in dvList) { listData.Add(item.BMonthReportDetail); } bmrd = new B_MonthlyReportDetail(); bmrd.ID = Guid.NewGuid(); bmrd.SystemID = _System.ID; bmrd.FinYear = FinYear; bmrd.FinMonth = FinMonth; bmrd.TargetID = CTarget.ID; bmrd.NPlanAmmount = listData.Sum(p => p.NPlanAmmount); bmrd.NActualAmmount = listData.Sum(p => p.NActualAmmount); bmrd.NDifference = listData.Sum(p => p.NDifference); bmrd.NAccumulativePlanAmmount = listData.Sum(p => p.NAccumulativePlanAmmount); bmrd.NAccumulativeActualAmmount = listData.Sum(p => p.NAccumulativeActualAmmount); bmrd.NAccumulativeDifference = listData.Sum(p => p.NAccumulativeDifference); bmrd.NPlanAmmountByYear = listData.Sum(p => p.NPlanAmmountByYear); if (bmrd.NPlanAmmountByYear != 0) { bmrd.NDisplayRateByYear = Math.Round((bmrd.NAccumulativeActualAmmount / bmrd.NPlanAmmountByYear), 5, MidpointRounding.AwayFromZero).ToString("P1"); } else { bmrd.NDisplayRateByYear = "--"; } if (IsDifferenceException) //异常 { List <B_MonthlyReportDetail> aa = listData.Where(p => p.NAccumulativeDifference < 0).ToList(); //差额异常指标 bmrd.OAccumulativeDifference = bmrd.NAccumulativeDifference = aa.Sum(p => p.NAccumulativeDifference); bmrd.ODifference = bmrd.NDifference = listData.Where(p => p.NDifference <= 0).Sum(p => p.NDifference); } return(bmrd); }
/// <summary> /// 正常计算 /// </summary> /// <param name="RptDetail"></param> /// <param name="TemplateType"></param> /// <returns></returns> public object Calculation(B_MonthlyReportDetail RptDetail, string TemplateType) { string InterfaceName = "*"; C_System sys = new C_System(); if (RptDetail.CreateTime != null && RptDetail.CreateTime != DateTime.MinValue) { sys = StaticResource.Instance[RptDetail.SystemID, RptDetail.CreateTime]; } else { sys = StaticResource.Instance[RptDetail.SystemID, DateTime.Now]; } if (sys.Category == 2 || sys.GroupType == "ProSystem") //如果系统是项目系统 { InterfaceName = "Project"; //项目公司有单独的计算 } else if (sys.Category == 3) { InterfaceName = "Group"; //集团总部有单独的计算 } else { C_Target T = StaticResource.Instance.TargetList[RptDetail.SystemID].Find(t => t.ID == RptDetail.TargetID); if (T != null) { InterfaceName = T.TargetType.ToString(); } } if (sys != null && sys.Configuration.Element("Interfaces") != null) { if (sys.Configuration.Element("Interfaces").Elements("ITargetCalculation") != null && sys.Configuration.Element("Interfaces").Elements("ITargetCalculation").ToList().Count > 0) { foreach (XElement e in sys.Configuration.Element("Interfaces").Elements("ITargetCalculation").ToList()) { if (e.Attribute("TemplateType").Value.ToLower().Trim() == TemplateType.ToLower().Trim()) { InterfaceName = e.Attribute("InterfaceName").Value.Trim(); } } } } return(this[InterfaceName].Calculation(RptDetail)); }
public List <DictionaryVmodel> UpGroupdateMonthReportDetail(string rpts, string strMonthReportOrderType, string info, bool IncludeHaveDetail, string strMonthReportID) { List <DictionaryVmodel> ListObj = new List <DictionaryVmodel>(); List <MonthlyReportDetail> lstMrd = null; V_GroupCompany v_GroupCompany = JsonHelper.Deserialize <V_GroupCompany>(info); lstMrd = v_GroupCompany.ListGroupTargetDetail; if (lstMrd == null) { GroupDictionaryVmodel gdv = JsonHelper.Deserialize <GroupDictionaryVmodel>(info); lstMrd = (List <MonthlyReportDetail>)gdv.Value; } List <B_MonthlyReportDetail> lstBMrd = new List <B_MonthlyReportDetail>(); for (int i = 0; i < lstMrd.Count; i++) { if (lstMrd[i].ID != Guid.Empty) { B_MonthlyReportDetail B_detail = CalculationEvaluationEngine.CalculationEvaluationService.Calculation(lstMrd[i].ToBModel(), ""); if (B_detail.CompanyID != Guid.Empty) { B_MonthlyreportdetailOperator.Instance.UpdateMonthlyreportdetail(B_detail); } lstBMrd.Add(B_detail); } } ReportInstance rpt = JsonHelper.Deserialize <ReportInstance>(rpts); for (int j = 0; j < lstBMrd.Count; j++) { rpt.ReportDetails.Remove(rpt.ReportDetails.Find(p => p.ID == lstBMrd[j].ID)); rpt.ReportDetails.Add(lstBMrd[j].ToVModel()); } ListObj.Add(new DictionaryVmodel("ReportInstance", rpt)); ListObj.Add(new DictionaryVmodel("MonthDetail", GetTargetDetailList(rpt, strMonthReportOrderType, IncludeHaveDetail))); ListObj.Add(new DictionaryVmodel("Misstarget", GetMissTargetList(rpt, strMonthReportID, true))); ListObj.Add(new DictionaryVmodel("MonthReportDescription", GetMonthTRptDescription(rpt))); ListObj.Add(new DictionaryVmodel("CurrentMissTargetList", GetCurrentMissTargetList(rpt, strMonthReportID.ToString(), true))); SaveJsonData(strMonthReportID.ToGuid(), rpt, ListObj); return(ListObj); }
/// <summary> /// 计算明细项项合计和小计 /// </summary> /// <param name="listData"></param> /// <param name="bmrd"></param> /// <param name="CTarget"></param> /// <returns></returns> private B_MonthlyReportDetail SummaryData(List <MonthlyReportDetail> listData, B_MonthlyReportDetail bmrd, C_Target CTarget) { bmrd = new B_MonthlyReportDetail(); bmrd.ID = Guid.NewGuid(); bmrd.SystemID = _System.ID; bmrd.FinYear = FinYear; bmrd.FinMonth = FinMonth; bmrd.TargetID = CTarget.ID; bmrd.NPlanAmmount = listData.Sum(p => p.NPlanAmmount); bmrd.NActualAmmount = listData.Sum(p => p.NActualAmmount); bmrd.NDifference = listData.Sum(p => p.NDifference); bmrd.NAccumulativePlanAmmount = listData.Sum(p => p.NAccumulativePlanAmmount); bmrd.NAccumulativeActualAmmount = listData.Sum(p => p.NAccumulativeActualAmmount); bmrd.NAccumulativeDifference = listData.Sum(p => p.NAccumulativeDifference); return(bmrd); }
public int ModifyMissTargetRptInfo(string info) { int result = 0; B_MonthlyReportDetail detail = JsonHelper.Deserialize <B_MonthlyReportDetail>(info); B_MonthlyreportdetailOperator.Instance.UpdateMonthlyreportdetail(detail); //保存Json , 开始 ReportInstance rpt = new ReportInstance(detail.MonthlyReportID, true); SaveJsonData(detail.MonthlyReportID, rpt); //保存Json ,结束 return(result); }
/// <summary> /// 判断异常指标 /// </summary> /// <param name="RptDetail"></param> /// <param name="TemplateType"></param> /// <returns></returns> public B_MonthlyReportDetail Calculation(B_MonthlyReportDetail RptDetail, string TemplateType) { string InterfaceName = "*"; C_System sys = StaticResource.Instance[RptDetail.SystemID, RptDetail.CreateTime]; if (sys != null && sys.Configuration.Element("Interfaces") != null) { if (sys.Configuration.Element("Interfaces").Elements("IExceptionTargetEvaluation") != null && sys.Configuration.Element("Interfaces").Elements("IExceptionTargetEvaluation").ToList().Count > 0) { foreach (XElement e in sys.Configuration.Element("Interfaces").Elements("IExceptionTargetEvaluation").ToList()) { //if (e.Attribute("TemplateType").Value.ToLower().Trim() == TemplateType.ToLower().Trim()) //{ InterfaceName = e.Attribute("InterfaceName").Value.Trim(); //} } } } return((B_MonthlyReportDetail)this[InterfaceName].Calculation(RptDetail)); }
public List <DictionaryVmodel> UpdateProMonthReportDetail(string rpts, string strMonthReportOrderType, string info, bool IncludeHaveDetail, string strMonthReportID) { List <DictionaryVmodel> ListObj = new List <DictionaryVmodel>(); //首先拿到数据 ReportInstance rpt = JsonHelper.Deserialize <ReportInstance>(rpts); //在难道需要编辑的数据 V_ProjectCompany ProDetail = JsonHelper.Deserialize <V_ProjectCompany>(info); //循环指标 foreach (V_ProjectTarget item in ProDetail.ProjectTargets) { //获取修改的实体 B_MonthlyReportDetail B_detail = B_MonthlyreportdetailOperator.Instance.GetMonthlyreportdetail(item.ProMonthlyReportDetailID); if (B_detail != null) { B_detail.NActualAmmount = item.NActualAmmount; //当月实际值 B_detail.NAccumulativeActualAmmount = item.NAccumulativeActualAmmount; //当月实际累计值 } //重新计算 B_MonthlyReportDetail UpdateData = CalculationEvaluationEngine.CalculationEvaluationService.Calculation(B_detail, ""); //修改数据 B_MonthlyreportdetailOperator.Instance.UpdateMonthlyreportdetail(UpdateData); rpt.ReportDetails.Remove(rpt.ReportDetails.Find(p => p.ID == B_detail.ID)); rpt.ReportDetails.Add(B_detail.ToVModel()); } ListObj.Add(new DictionaryVmodel("ReportInstance", rpt)); ListObj.Add(new DictionaryVmodel("MonthDetail", GetTargetDetailList(rpt, strMonthReportOrderType, IncludeHaveDetail))); ListObj.Add(new DictionaryVmodel("Misstarget", GetMissTargetList(rpt, strMonthReportID, true))); ListObj.Add(new DictionaryVmodel("MonthReportDescription", GetMonthTRptDescription(rpt))); ListObj.Add(new DictionaryVmodel("CurrentMissTargetList", GetCurrentMissTargetList(rpt, strMonthReportID.ToString(), true))); SaveJsonData(strMonthReportID.ToGuid(), rpt, ListObj); return(ListObj); }
/// <summary> /// 计算合计 /// </summary> /// <returns></returns> private List <B_MonthlyReportDetail> GetSummaryDate(List <MonthlyReportDetail> listMRD, C_Target CTarget) { List <B_MonthlyReportDetail> listSummaryMRD = new List <B_MonthlyReportDetail>(); B_MonthlyReportDetail bmrd = new B_MonthlyReportDetail(); bmrd.ID = Guid.NewGuid(); bmrd.SystemID = _System.ID; bmrd.FinYear = FinYear; bmrd.FinMonth = FinMonth; bmrd.TargetID = CTarget.ID; if (listMRD.Count > 0) { bmrd.NPlanAmmount = listMRD.Sum(p => p.NPlanAmmount); bmrd.NActualAmmount = listMRD.Sum(p => p.NActualAmmount); bmrd.NDifference = listMRD.Sum(p => p.NDifference); bmrd.NAccumulativePlanAmmount = listMRD.Sum(p => p.NAccumulativePlanAmmount); bmrd.NAccumulativeActualAmmount = listMRD.Sum(p => p.NAccumulativeActualAmmount); bmrd.NAccumulativeDifference = listMRD.Sum(p => p.NAccumulativeDifference); } bmrd = TargetEvaluationEngine.TargetEvaluationService.Calculation(bmrd, false); listSummaryMRD.Add(bmrd); return(listSummaryMRD); }
public B_MonthlyReportDetail Calculation(B_MonthlyReportDetail RptDetail, bool WithCounter = true) { C_Target _CTarget = new C_Target(); if (RptDetail != null) { _CTarget = StaticResource.Instance.GetTargetList(RptDetail.SystemID, RptDetail.CreateTime).Where(p => p.ID == RptDetail.TargetID).FirstOrDefault(); } //判断当前公司和指标是否为异常指标。 List <C_ExceptionTarget> listExceptionTarget = StaticResource.Instance.GetExceptionTargetList(RptDetail.CompanyID, RptDetail.TargetID); if (listExceptionTarget.Count > 0) { if (listExceptionTarget.FirstOrDefault().ExceptionType == (int)ExceptionTargetType.HaveDeTailNONeedEvaluation) { RptDetail.IsMissTarget = false; RptDetail.Counter = 0; RptDetail.IsMissTargetCurrent = false; RptDetail.ReturnType = 0; //补回状态是0 ,设置为特殊的异常考核实体是,它的未完成,补回都需要设置为0 } } return(RptDetail); }
public static MonthlyReportDetail ToVModel(this B_MonthlyReportDetail value) { //这是为了前台显示,美观强制去掉“\n” string tempMIssTargetReason = string.Empty; if (value.MIssTargetReason != null) { tempMIssTargetReason = value.MIssTargetReason.TrimStart('\n').TrimStart('\r').TrimEnd('\n').TrimEnd('\r'); if (string.IsNullOrEmpty(tempMIssTargetReason)) { tempMIssTargetReason = ""; } else { tempMIssTargetReason = "\n" + tempMIssTargetReason; } } string tempMIssTargetDescription = string.Empty; if (value.MIssTargetDescription != null) { tempMIssTargetDescription = value.MIssTargetDescription.TrimStart('\n').TrimStart('\r').TrimEnd('\n').TrimEnd('\r'); if (string.IsNullOrEmpty(tempMIssTargetDescription)) { tempMIssTargetDescription = ""; } else { tempMIssTargetDescription = "\n" + tempMIssTargetDescription; } } string tempCurrentMIssTargetReason = string.Empty; if (value.CurrentMIssTargetReason != null) { tempCurrentMIssTargetReason = value.CurrentMIssTargetReason.TrimStart('\n').TrimStart('\r').TrimEnd('\n').TrimEnd('\r'); if (string.IsNullOrEmpty(tempCurrentMIssTargetReason)) { tempCurrentMIssTargetReason = ""; } else { tempCurrentMIssTargetReason = "\n" + tempCurrentMIssTargetReason; } } string tempCurrentMIssTargetDescription = string.Empty; if (value.CurrentMIssTargetDescription != null) { tempCurrentMIssTargetDescription = value.CurrentMIssTargetDescription.TrimStart('\n').TrimStart('\r').TrimEnd('\n').TrimEnd('\r'); if (string.IsNullOrEmpty(tempCurrentMIssTargetDescription)) { tempCurrentMIssTargetDescription = ""; } else { tempCurrentMIssTargetDescription = "\n" + tempCurrentMIssTargetDescription; } } string tempReturnDescription = string.Empty; if (value.ReturnDescription != null) { tempReturnDescription = value.ReturnDescription.TrimStart('\n').TrimStart('\r').TrimEnd('\n').TrimEnd('\r'); if (string.IsNullOrEmpty(tempReturnDescription)) { tempReturnDescription = ""; } } string tempCommitReason = string.Empty; if (value.CommitReason != null) { tempCommitReason = value.CommitReason.TrimStart('\n').TrimStart('\r').TrimEnd('\n').TrimEnd('\r'); if (string.IsNullOrEmpty(tempCommitReason)) { tempCommitReason = ""; } } MonthlyReportDetail result = new MonthlyReportDetail { ID = value.ID, SystemID = value.SystemID, IsDeleted = value.IsDeleted, FinMonth = value.FinMonth, FinYear = value.FinYear, CreateTime = value.CreateTime, CreatorName = value.CreatorName, ModifierName = value.ModifierName, ModifyTime = value.ModifyTime, TargetID = value.TargetID, CompanyID = value.CompanyID, TargetPlanID = value.TargetPlanID, OPlanAmmount = value.OPlanAmmount, OActualAmmount = value.OActualAmmount, OActualRate = value.OActualRate, ODisplayRate = value.ODisplayRate, NPlanAmmount = value.NPlanAmmount, NActualAmmount = value.NActualAmmount, NActualRate = value.NActualRate, NDisplayRate = value.NDisplayRate, OAccumulativePlanAmmount = value.OAccumulativePlanAmmount, OAccumulativeActualAmmount = value.OAccumulativeActualAmmount, OAccumulativeActualRate = value.OAccumulativeActualRate, OAcccumulativeDisplayRate = value.OAcccumulativeDisplayRate, NAccumulativePlanAmmount = value.NAccumulativePlanAmmount, NAccumulativeActualAmmount = value.NAccumulativeActualAmmount, NAccumulativeActualRate = value.NAccumulativeActualRate, NAccumulativeDisplayRate = value.NAccumulativeDisplayRate, IsMissTarget = value.IsMissTarget, IsMissTargetCurrent = value.IsMissTargetCurrent, Counter = value.Counter, FirstMissTargetDate = value.FirstMissTargetDate, PromissDate = value.PromissDate, CommitDate = value.CommitDate, MIssTargetReason = tempMIssTargetReason, MIssTargetDescription = tempMIssTargetDescription, CurrentMIssTargetReason = tempCurrentMIssTargetReason, CurrentMIssTargetDescription = tempCurrentMIssTargetDescription, NAccumulativeDifference = value.NAccumulativeDifference, NDifference = value.NDifference, OAccumulativeDifference = value.OAccumulativeDifference, ODifference = value.ODifference, ReturnType = value.ReturnType, MonthlyReportID = value.MonthlyReportID, MeasureRate = value.MeasureRate, ReturnDescription = tempReturnDescription, SystemName = StaticResource.Instance[value.SystemID, DateTime.Now].SystemName, Company = value.CompanyID == Guid.Empty?null:StaticResource.Instance.GetCompanyModel(value.CompanyID), CompanyName = value.CompanyID == Guid.Empty ? null : StaticResource.Instance.GetCompanyModel(value.CompanyID).CompanyName, TargetName = StaticResource.Instance.TargetList[value.SystemID].Where(p => p.ID == value.TargetID).FirstOrDefault().TargetName, TargetType = StaticResource.Instance.TargetList[value.SystemID].Where(p => p.ID == value.TargetID).FirstOrDefault().TargetType, Display = value.Display, CompanyProperty1 = value.CompanyProperty1, IsCommitDate = value.IsCommitDate, CommitReason = tempCommitReason, CurrentMonthCommitDate = value.CurrentMonthCommitDate, CurrentMonthCommitReason = value.CurrentMonthCommitReason, ReturnType_Sub = value.ReturnType_Sub, NewCounter = value.NewCounter, CompanyProperty = value.CompanyProperty }; 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 }
public void Execute(Quartz.IJobExecutionContext context) { Common.ScheduleService.Log.Instance.Info("计算未完成指标考核范围Stare!"); //获取需要的项目系统 List <C_System> sysList = C_SystemOperator.Instance.GetSystemListBySeq().ToList(); //获取上报年 C_ReportTime RTime = C_ReportTimeOperator.Instance.GetReportTime(); sysList.ForEach(S => { Common.ScheduleService.Log.Instance.Info("循环系统 Stare! " + S.SystemName); //筛选指标类型是 收入和净利润 (这里还包含了,旅业的客流量) ,不包含成本类的指标 List <C_Target> targetList = StaticResource.Instance.GetTargetList(S.ID, DateTime.Now).Where(T => T.NeedEvaluation == true && (T.TargetType != (int)EnumTargetType.Cost)).ToList(); targetList.ForEach(t => { Common.ScheduleService.Log.Instance.Info("循环系统下的考核指标 Stare! " + t.TargetName.ToString()); //获取上报年计划指标 (参数,公司ID, 指标ID, 系统ID) List <A_TargetPlanDetail> targetPlanList = A_TargetplandetailOperator.Instance.GetTargetplandetailList(S.ID, RTime.ReportTime.Value.Year).ToList(); for (int i = 1; i <= 12; i++) { Common.ScheduleService.Log.Instance.Info("循环系统下的考核指标的 全年12月 Stare! " + i.ToString() + "月"); #region 循环12月,在里面查询公司 //每个月,上报的月报单独指标 A表 List <A_MonthlyReportDetail> currentMRDList = A_MonthlyreportdetailOperator.Instance.GetAMonthlyreportdetailList(S.ID, RTime.ReportTime.Value.Year, i).Where(M => M.TargetID == t.ID).ToList(); //每个月,上报的月报单独指标, B表 List <B_MonthlyReportDetail> currentB_MRDList = B_MonthlyreportdetailOperator.Instance.GetMonthlyreportdetailList(S.ID, RTime.ReportTime.Value.Year, i, Guid.Empty).Where(M => M.TargetID == t.ID).ToList(); //未完成数量 int MissTargetA = 0; int MissTargetB = 0; MissTargetA = currentMRDList.Where(p => p.IsMissTarget == true).ToList().Count(); MissTargetB = currentB_MRDList.Where(p => p.IsMissTarget == true).ToList().Count(); //每个月的单独计划指标公司 List <A_TargetPlanDetail> currentTargetPlanList = targetPlanList.Where(tp => tp.FinMonth <= i && tp.TargetID == t.ID).ToList(); //获取上报且考核的公司 List <C_Company> companyList = C_CompanyOperator.Instance.GetCompanyListByNeedEvaluation(t.ID, S.ID).ToList(); //该list 作为记数用 A表的 List <C_Company> companyListCount = new List <C_Company>(); //该list 作为记数用 B表的 List <C_Company> companyB_ListCount = new List <C_Company>(); //这里循环有效的考核范围公司 companyList.ForEach(c => { //首先判断当月公司是否存在,存在代表:大于0 int isCompanyCount = currentTargetPlanList.Where(P => P.CompanyID == c.ID).Count(); //获取当月指标等于0的个数 int tempCount = currentTargetPlanList.Where(P => P.CompanyID == c.ID && P.Target == 0).Count(); //记录A表数据 int isMonthRotCount = currentMRDList.Where(MR => MR.CompanyID == c.ID).Count(); //记录B表数据 int isB_MonthRotCount = currentB_MRDList.Where(MR => MR.CompanyID == c.ID).Count(); A_MonthlyReportDetail MonthRpt = currentMRDList.Where(MR => MR.CompanyID == c.ID).FirstOrDefault(); B_MonthlyReportDetail B_MonthRpt = currentB_MRDList.Where(MR => MR.CompanyID == c.ID).FirstOrDefault(); //A表数据的List if (isMonthRotCount > 0 && isCompanyCount > 0 && tempCount != i) { //这里排除总部 if (c.CompanyName.IndexOf("总部") == -1 && MonthRpt.CompanyProperty1 != "筹备门店") { companyListCount.Add(c); } } //B表数据的List if (isB_MonthRotCount > 0 && isCompanyCount > 0 && tempCount != i) { //这里排除总部 if (c.CompanyName.IndexOf("总部") == -1 && B_MonthRpt.CompanyProperty1 != "筹备门店") { companyB_ListCount.Add(c); } } }); //End companyList try { //首先获取数据 , 这里区分A表 和B表的数据 (A表数据) R_MissTargetEvaluationScope UpdateModel = R_MissTargetEvaluationScopeOperator.Instance.GetEvaluationDetailByType(S.ID, t.ID, RTime.ReportTime.Value.Year, i, "NeedEvaluation"); if (UpdateModel != null) { //修改 if (companyListCount != null) { UpdateModel.EvaluationNumber = companyListCount.Count; } else { UpdateModel.EvaluationNumber = 0; } UpdateModel.MissTargetNumber = MissTargetA; UpdateModel.ModifierName = "Sys"; UpdateModel.ModifyTime = DateTime.Now; R_MissTargetEvaluationScopeOperator.Instance.UpdateMissTargetEvaluationScope(UpdateModel); } else { //新增 R_MissTargetEvaluationScope ScopeModel = new R_MissTargetEvaluationScope(); if (companyListCount != null) { ScopeModel.EvaluationNumber = companyListCount.Count; } else { ScopeModel.EvaluationNumber = 0; } ScopeModel.MissTargetNumber = MissTargetA; ScopeModel.FinMonth = i; ScopeModel.FinYear = RTime.ReportTime.Value.Year; ScopeModel.SystemID = S.ID; ScopeModel.TargetID = t.ID; ScopeModel.EvaluationType = "NeedEvaluation"; ScopeModel.CreateTime = DateTime.Now; ScopeModel.CreatorName = "Sys"; //12个月的,每个月,添加一次 R_MissTargetEvaluationScopeOperator.Instance.AddMissTargetEvaluationScope(ScopeModel); } //----------------------------------------------------------------------------------------------------------------- //这里代表B表的数据 R_MissTargetEvaluationScope B_UpdateModel = R_MissTargetEvaluationScopeOperator.Instance.GetEvaluationDetailByType(S.ID, t.ID, RTime.ReportTime.Value.Year, i, "BNeedEvaluation"); if (UpdateModel != null) { //修改 if (companyB_ListCount != null) { B_UpdateModel.EvaluationNumber = companyB_ListCount.Count; } else { B_UpdateModel.EvaluationNumber = 0; } B_UpdateModel.MissTargetNumber = MissTargetB; B_UpdateModel.ModifierName = "Sys"; B_UpdateModel.ModifyTime = DateTime.Now; R_MissTargetEvaluationScopeOperator.Instance.UpdateMissTargetEvaluationScope(B_UpdateModel); } else { //新增 R_MissTargetEvaluationScope ScopeModel = new R_MissTargetEvaluationScope(); if (companyB_ListCount != null) { ScopeModel.EvaluationNumber = companyB_ListCount.Count; } else { ScopeModel.EvaluationNumber = 0; } ScopeModel.MissTargetNumber = MissTargetB; ScopeModel.FinMonth = i; ScopeModel.FinYear = RTime.ReportTime.Value.Year; ScopeModel.SystemID = S.ID; ScopeModel.TargetID = t.ID; ScopeModel.EvaluationType = "BNeedEvaluation"; ScopeModel.CreateTime = DateTime.Now; ScopeModel.CreatorName = "Sys"; //12个月的,每个月,添加一次 R_MissTargetEvaluationScopeOperator.Instance.AddMissTargetEvaluationScope(ScopeModel); } } catch (Exception Exp) { Common.ScheduleService.Log.Instance.Error("添加错误 TargetID" + t.ID + "SystemID" + S.ID + "FinMonth" + i + "FinYear" + RTime.ReportTime.Value.Year); } #endregion } Common.ScheduleService.Log.Instance.Info("循环系统下的考核指标 End!" + t.TargetName.ToString()); }); //End targetList Common.ScheduleService.Log.Instance.Info("循环系统 End!" + S.SystemName.ToString()); });// End sysList Common.ScheduleService.Log.Instance.Info("计算未完成指标考核范围End!"); }
/// <summary> /// A To B /// </summary> /// <param name="value"></param> /// <returns></returns> public static B_MonthlyReportDetail ToBModel(this A_MonthlyReportDetail value) { B_MonthlyReportDetail result = new B_MonthlyReportDetail { ID = value.ID, SystemID = value.SystemID, IsDeleted = value.IsDeleted, FinMonth = value.FinMonth, FinYear = value.FinYear, CreateTime = value.CreateTime, CreatorName = value.CreatorName, ModifierName = value.ModifierName, ModifyTime = value.ModifyTime, TargetID = value.TargetID, CompanyID = value.CompanyID, TargetPlanID = value.TargetPlanID, OPlanAmmount = value.OPlanAmmount, OActualAmmount = value.OActualAmmount, OActualRate = value.OActualRate, ODisplayRate = value.ODisplayRate, NPlanAmmount = value.NPlanAmmount, NActualAmmount = value.NActualAmmount, NActualRate = value.NActualRate, NDisplayRate = value.NDisplayRate, OAccumulativePlanAmmount = value.OAccumulativePlanAmmount, OAccumulativeActualAmmount = value.OAccumulativeActualAmmount, OAccumulativeActualRate = value.OAccumulativeActualRate, OAcccumulativeDisplayRate = value.OAcccumulativeDisplayRate, NAccumulativePlanAmmount = value.NAccumulativePlanAmmount, NAccumulativeActualAmmount = value.NAccumulativeActualAmmount, NAccumulativeActualRate = value.NAccumulativeActualRate, NAccumulativeDisplayRate = value.NAccumulativeDisplayRate, IsMissTarget = value.IsMissTarget, IsMissTargetCurrent = value.IsMissTargetCurrent, Counter = value.Counter, FirstMissTargetDate = value.FirstMissTargetDate, PromissDate = value.PromissDate, CommitDate = value.CommitDate, MIssTargetReason = value.MIssTargetReason, MIssTargetDescription = value.MIssTargetDescription, CurrentMIssTargetDescription = value.CurrentMIssTargetDescription, CurrentMIssTargetReason = value.CurrentMIssTargetReason, NAccumulativeDifference = value.NAccumulativeDifference, NDifference = value.NDifference, OAccumulativeDifference = value.OAccumulativeDifference, ODifference = value.ODifference, ReturnType = value.ReturnType, MonthlyReportID = value.MonthlyReportID, MeasureRate = value.MeasureRate, ReturnDescription = value.ReturnDescription, Display = value.Display, CompanyProperty1 = value.CompanyProperty1, IsCommitDate = value.IsCommitDate, CommitReason = value.CommitReason, CurrentMonthCommitDate = value.CurrentMonthCommitDate, CurrentMonthCommitReason = value.CurrentMonthCommitReason, ReturnType_Sub = value.ReturnType_Sub, NewCounter = value.NewCounter, CompanyProperty = value.CompanyProperty }; return(result); }
/// <summary> /// B To A 这里个方法只是同于 提交审批最后进入最终的数据,IsBToA:True ,标识特殊处理, false:表示正常处理B 表到A表数据 /// </summary> /// <param name="value"></param> /// <param name="IsBToA">是否B表数据转换成A表数据</param> /// <returns></returns> public static A_MonthlyReportDetail ToAModel(this B_MonthlyReportDetail value, bool IsBToA) { int _IsCommitDate = 0; if (IsBToA) //审批 { if (value.PromissDate != null && value.PromissDate.Value.AddMonths(-1).Month == value.FinMonth && value.PromissDate.Value.AddMonths(-1).Year == value.FinYear) { _IsCommitDate = 1; } } else { _IsCommitDate = value.IsCommitDate; } A_MonthlyReportDetail result = new A_MonthlyReportDetail { ID = value.ID, SystemID = value.SystemID, IsDeleted = value.IsDeleted, FinMonth = value.FinMonth, FinYear = value.FinYear, CreateTime = value.CreateTime, CreatorName = value.CreatorName, ModifierName = value.ModifierName, ModifyTime = value.ModifyTime, TargetID = value.TargetID, CompanyID = value.CompanyID, TargetPlanID = value.TargetPlanID, OPlanAmmount = value.OPlanAmmount, OActualAmmount = value.OActualAmmount, OActualRate = value.OActualRate, ODisplayRate = value.ODisplayRate, NPlanAmmount = value.NPlanAmmount, NActualAmmount = value.NActualAmmount, NActualRate = value.NActualRate, NDisplayRate = value.NDisplayRate, OAccumulativePlanAmmount = value.OAccumulativePlanAmmount, OAccumulativeActualAmmount = value.OAccumulativeActualAmmount, OAccumulativeActualRate = value.OAccumulativeActualRate, OAcccumulativeDisplayRate = value.OAcccumulativeDisplayRate, NAccumulativePlanAmmount = value.NAccumulativePlanAmmount, NAccumulativeActualAmmount = value.NAccumulativeActualAmmount, NAccumulativeActualRate = value.NAccumulativeActualRate, NAccumulativeDisplayRate = value.NAccumulativeDisplayRate, IsMissTarget = value.IsMissTarget, Counter = value.Counter, FirstMissTargetDate = value.FirstMissTargetDate, PromissDate = value.PromissDate, CommitDate = value.CommitDate, MIssTargetReason = value.MIssTargetReason, MIssTargetDescription = value.MIssTargetDescription, CurrentMIssTargetReason = value.CurrentMIssTargetReason, CurrentMIssTargetDescription = value.CurrentMIssTargetDescription, ReturnType = value.ReturnType, IsMissTargetCurrent = value.IsMissTargetCurrent, NAccumulativeDifference = value.NAccumulativeDifference, NDifference = value.NDifference, OAccumulativeDifference = value.OAccumulativeDifference, ODifference = value.ODifference, MonthlyReportID = value.MonthlyReportID, MeasureRate = value.MeasureRate, ReturnDescription = value.ReturnDescription, Display = value.Display, CompanyProperty1 = value.CompanyProperty1, IsCommitDate = _IsCommitDate, CommitReason = value.CommitReason, IsDelayComplete = false, CurrentMonthCommitDate = value.CurrentMonthCommitDate, CurrentMonthCommitReason = value.CurrentMonthCommitReason, ReturnType_Sub = value.ReturnType_Sub, NewCounter = value.NewCounter, CompanyProperty = value.CompanyProperty }; return(result); }
/// <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); }
public B_MonthlyReportDetail Calculation(B_MonthlyReportDetail RptDetail, bool WithCounter = true) { B_MonthlyReportDetail rpt = RptDetail; rpt.ReturnType = 0; rpt.Counter = 0; rpt.IsMissTarget = false; rpt.IsMissTargetCurrent = false; C_Target T = StaticResource.Instance.TargetList[RptDetail.SystemID].Find(t => t.ID == RptDetail.TargetID); bool IsBaseline = false; if (T != null && T.BaseLine.Year == rpt.FinYear && T.BaseLine.Month == rpt.FinMonth) { IsBaseline = true; } //是否能够改动计划,如果能改,取Excel数据,不能改取系统计划数(在Taget Configuration配置) List <A_TargetPlanDetail> listCurrentMonthData = StaticResource.Instance.GetTargetPlanList(rpt.SystemID, rpt.FinYear).ToList().Where(p => p.FinMonth == rpt.FinMonth && p.CompanyID == rpt.CompanyID).ToList(); if (listCurrentMonthData.Count > 0) { A_TargetPlanDetail currentMonthData = listCurrentMonthData[0]; bool IsModifiy = false; if (currentMonthData.Target != RptDetail.OPlanAmmount) { //获取当前指标 List <C_Target> listTarget = StaticResource.Instance.GetTargetList(RptDetail.SystemID, RptDetail.CreateTime).ToList().Where(p => p.ID == RptDetail.TargetID).ToList(); if (listTarget.Count > 0) { //获取当前指标的Configuration IList <System.Xml.Linq.XElement> xmlConfiguration = listTarget[0].Configuration.Elements("IsModifyTargetPlanDetail").ToList(); if (xmlConfiguration.Count > 0) { //判断当前指标是否可以修改 if (xmlConfiguration.ToList()[0].GetAttributeValue("IsModifiy", "") == "True") { IsModifiy = true; } } } } //如果IsModifiy为True,则计划数可以修改,否则反之。 if (IsModifiy == false) { RptDetail.OPlanAmmount = currentMonthData.Target; } } A_MonthlyReportDetail lastMonthData = A_MonthlyreportdetailOperator.Instance.GetAMonthlyreportdetail(rpt.SystemID, rpt.CompanyID, rpt.TargetID, rpt.FinYear, rpt.FinMonth - 1); if (lastMonthData != null) { rpt.NAccumulativeActualAmmount = lastMonthData.NAccumulativeActualAmmount + rpt.NActualAmmount; rpt.OAccumulativeActualAmmount = lastMonthData.OAccumulativeActualAmmount + rpt.OActualAmmount; //重新考核需要特殊处理,直接获取累计指标,无承诺补回时间 if (!IsBaseline) { rpt.NAccumulativePlanAmmount = lastMonthData.NAccumulativePlanAmmount + rpt.NPlanAmmount; rpt.OAccumulativePlanAmmount = lastMonthData.OAccumulativePlanAmmount + rpt.OPlanAmmount; rpt.CommitDate = lastMonthData.CurrentMonthCommitDate; rpt.CommitReason = lastMonthData.CurrentMonthCommitReason; } else { IList <A_TargetPlanDetail> ATPD = StaticResource.Instance.GetTargetPlanList(rpt.SystemID, rpt.FinYear).FindAll(P => P.CompanyID == rpt.CompanyID && P.TargetID == rpt.TargetID && P.FinMonth <= rpt.FinMonth); rpt.NAccumulativePlanAmmount = ATPD.Sum(p => p.Target); rpt.OAccumulativePlanAmmount = ATPD.Sum(p => p.Target); } } else { if (WithCounter) { rpt.NAccumulativeActualAmmount = rpt.NActualAmmount; rpt.NAccumulativePlanAmmount = rpt.NPlanAmmount; rpt.OAccumulativeActualAmmount = rpt.OActualAmmount; rpt.OAccumulativePlanAmmount = rpt.OPlanAmmount; } } //特殊处理差额,针对指标 XElement element = null; if (T != null) { element = T.Configuration; } XElement subElement = null; bool IsDifferenceException = false; if (element != null && element.Element("IsDifferenceExceptionTarget") != null) { subElement = element.Elements("IsDifferenceExceptionTarget").ToList()[0]; IsDifferenceException = subElement.GetAttributeValue("value", false); } if (!IsDifferenceException) { rpt.NAccumulativeDifference = rpt.NAccumulativeActualAmmount - rpt.NAccumulativePlanAmmount; rpt.OAccumulativeDifference = rpt.OAccumulativeActualAmmount - rpt.OAccumulativePlanAmmount; rpt.NDifference = rpt.NActualAmmount - rpt.NPlanAmmount; rpt.ODifference = rpt.OActualAmmount - rpt.OPlanAmmount; } rpt = (B_MonthlyReportDetail)this[T.TargetType.ToString()].Calculation(RptDetail); if (T != null && T.NeedEvaluation) { DateTime ReportDate = DateTime.MinValue; DateTime.TryParse(rpt.FinYear + "-" + rpt.FinMonth + "-1 00:00:00", out ReportDate); ReportDate = ReportDate.AddMonths(1).AddMinutes(-5); //累计未完成情况 //上月累计未完成 if (!IsBaseline) //从1月开始重新计算 { if (lastMonthData != null && (lastMonthData.IsMissTarget || lastMonthData.NAccumulativeDifference < 0)) { if (rpt.IsMissTarget || rpt.NAccumulativeDifference < 0) { if (lastMonthData.CurrentMonthCommitDate >= ReportDate) { rpt.ReturnType = (int)EnumReturnType.Returning; if (lastMonthData.ReturnType_Sub == EnumHelper.GetEnumDescription(typeof(EnumReturnType_Sub), (int)EnumReturnType_Sub.Sub_UnableReturnByYear)) { rpt.ReturnDescription = lastMonthData.ReturnDescription; } } else { rpt.ReturnType = (int)EnumReturnType.NotReturn; } if (rpt.IsMissTarget && WithCounter) { rpt.Counter = lastMonthData.Counter + 1; } } else { if (lastMonthData.CurrentMonthCommitDate >= ReportDate) { rpt.ReturnType = (int)EnumReturnType.AccomplishInadvance; } else { rpt.ReturnType = (int)EnumReturnType.Accomplish; } if (WithCounter) { rpt.Counter = 0; rpt.FirstMissTargetDate = null; } } //要求期限,是本月 if (lastMonthData.CurrentMonthCommitDate < ReportDate && lastMonthData.CurrentMonthCommitDate >= ReportDate.AddMonths(-1)) { rpt.IsCommitDate = 1; } else { rpt.IsCommitDate = 0; } } //无上月数据(1月)或上月累计完成 else { if (rpt.IsMissTarget || rpt.NAccumulativeDifference < 0) { rpt.ReturnType = (int)EnumReturnType.New; if (rpt.IsMissTarget && WithCounter) { rpt.Counter = 1; rpt.FirstMissTargetDate = ReportDate; } } } } //无上月数据(1月)或上月累计完成 //重新计算 else { if (rpt.IsMissTarget || rpt.NAccumulativeDifference < 0) { rpt.ReturnType = (int)EnumReturnType.New; if (rpt.IsMissTarget && WithCounter) { rpt.Counter = 1; rpt.FirstMissTargetDate = ReportDate; } } } } else { rpt.IsMissTarget = false; rpt.IsMissTargetCurrent = false; } return(rpt); }