/// <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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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));
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 /// <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);
 }
Beispiel #9
0
        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));
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        /// <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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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
        }
Beispiel #17
0
        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!");
        }
Beispiel #18
0
        /// <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);
        }
Beispiel #19
0
        /// <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);
        }
Beispiel #20
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);
        }
        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);
        }