/// <summary> /// /// </summary> /// <param name="tbName">部门表名:树形表为其后面+Dir</param> /// <param name="versionId">版本Id</param> /// <param name="sumKey">汇总Key</param> /// <returns></returns> private List <BsonDocument> GetPolicyDirs(string tbName, string versionId, string sumKey) { List <BsonDocument> dirs = new List <BsonDocument>(); if (!string.IsNullOrEmpty(tbName)) { string dirName = tbName + "Dir"; TableRule tbRule = new TableRule(tbName); string primaryKey = tbRule.ColumnRules.Single(s => s.IsPrimary).Name; TableRule dirRule = new TableRule(dirName); string dirKey = dirRule.ColumnRules.Single(s => s.IsPrimary).Name; //找出对应从模板拷贝的目录信息 BsonDocument dirParent = _ctx.FindOneByQuery(tbName, Query.EQ("versionId", versionId)); dirs = _ctx.FindAllByQuery(dirName, Query.EQ(primaryKey, dirParent.String(primaryKey))).ToList(); } TreeHandle.CalcLeafNode(dirs); CalcParentValue(dirs, sumKey);//计算面积 return(dirs); }
/// <summary> /// 计算冲突决策所需要的值 /// </summary> /// <param name="projId"></param> /// <returns></returns> public BsonDocument CalcConflictData(string projId, string versionId) { //项目节点 PolicyVersionBll versionBll = PolicyVersionBll._(_ctx); CostBll costBll = CostBll._(_ctx); decimal projCycle = 0m; DateTime start, end;//项目开始结束时间 versionBll.GetStartEndDate(versionId, out start, out end); projCycle = (end - start).Days / 30; var costDirs = versionBll.GetTableDirs(PolicyDept.Cost, projId, versionId);//成本科目 TreeHandle.CalcLeafNode(costDirs); costBll.CalcTotalCost(costDirs, projId, versionId); //decimal totalCost = costBll.CalcCost(costDirs,projId,versionId);//计算成本总值 decimal totalCost = costDirs.LeafNode().Where(s => s.Int("subType") == 0).Sum(s => s.Decimal("value")); decimal mintotalCost = costDirs.LeafNode().Where(s => s.Int("subType") == 0).Sum(s => s.Decimal("minvalue")); //悲观情况 decimal comtotalCost = costDirs.LeafNode().Where(s => s.Int("subType") == 0).Sum(s => s.Decimal("comvalue")); //客观情况 //融资周期、资本利息、销售周期、销售费用 var repayList = _ctx.FindAllByQuery("RepayDetail", Query.EQ("versionId", versionId)).ToList(); //获取还款计划 var sellList = _ctx.FindAllByQuery("SellDetail", Query.EQ("versionId", versionId)).ToList(); //销售计划 repayList = repayList.Where(s => DateTimeHelper.LTE(start, s.Date("date")) && DateTimeHelper.LTE(s.Date("date"), end)).ToList(); sellList = sellList.Where(s => DateTimeHelper.LTE(start, s.Date("date")) && DateTimeHelper.LTE(s.Date("date"), end)).ToList(); var financeList = repayList.Where(s => s.Decimal("loan") > 0m || s.Decimal("repayVal") > 0m || s.Decimal("interest") > 0m);//融资周期 var financeCycle = financeList.Count(); //悲观融资周期 var minfinanceList = repayList.Where(s => s.Decimal("minLoan") > 0m || s.Decimal("minRepayVal") > 0m || s.Decimal("minInterest") > 0m);//融资周期 var minfinanceCycle = minfinanceList.Count(); //客观融资周期 var comfinanceList = repayList.Where(s => s.Decimal("comLoan") > 0m || s.Decimal("comRepayVal") > 0m || s.Decimal("comInterest") > 0m);//融资周期 var comfinanceCycle = comfinanceList.Count(); var sells = sellList.Where(s => s.Decimal("salesVal") > 0m).ToList();//销售周期 var sellCycle = sells.Count; //悲观销售周期 var minsells = sellList.Where(s => s.Decimal("minSalesVal") > 0m).ToList();//销售周期 var minsellCycle = minsells.Count; //客观销售周期 var comsells = sellList.Where(s => s.Decimal("comSalesVal") > 0m).ToList();//销售周期 var comsellCycle = comsells.Count; var totalInterest = repayList.Sum(s => s.Decimal("interest")); //总利息 //悲观总利息 var mintotalInterest = repayList.Sum(s => s.Decimal("minInterest")); //总利息 //客观总利息 var comtotalInterest = repayList.Sum(s => s.Decimal("comInterest")); //总利息 //var totalSell = sellList.Sum(s => s.Decimal("salesVal"));//总销售额 var totalIn = costDirs.LeafNode().Where(s => s.Int("subType") == 1).Sum(s => s.Decimal("value")); //总收入 var mintotalIn = costDirs.LeafNode().Where(s => s.Int("subType") == 1).Sum(s => s.Decimal("minvalue")); //悲观总收入 var comtotalIn = costDirs.LeafNode().Where(s => s.Int("subType") == 1).Sum(s => s.Decimal("comvalue")); //客观总收入 // List<BsonDocument> ttt = costDirs.Where(s => s.String("销售费用") == "销售费用").ToList(); var sellCost = costDirs.FirstOrDefault(s => s.String("name") == "销售费用").Decimal("value"); var minsellCost = costDirs.FirstOrDefault(s => s.String("name") == "销售费用").Decimal("minvalue"); //悲观销售费用 var comsellCost = costDirs.FirstOrDefault(s => s.String("name") == "销售费用").Decimal("comvalue"); //悲观销售费用 //利润率 var profitRate = 0m; var totalFee = totalCost;//总支出 if (totalIn > 0m) { profitRate = (totalIn - totalFee) / totalIn; //净利润率 = 利润/总投资收入 } //悲观利润率 var minprofitRate = 0m; var mintotalFee = mintotalCost;//总支出 if (mintotalIn > 0m) { minprofitRate = (mintotalIn - mintotalFee) / mintotalIn; //净利润率 = 利润/总投资收入 } //客观利润率 var comprofitRate = 0m; var comtotalFee = comtotalCost;//总支出 if (comtotalIn > 0m) { comprofitRate = (comtotalIn - comtotalFee) / comtotalIn; //净利润率 = 利润/总投资收入 } //面积相关 var decisionList = versionBll.GetTableDirsByVersionId(PolicyDept.DesignArea, versionId); //设计面积 var marketingList = versionBll.GetTableDirsByVersionId(PolicyDept.MarketingArea, versionId); //市场面积 var totalArea = decisionList.Where(s => s.String("name") == "总建筑面积").OrderBy(s => s.String("nodeKey")).FirstOrDefault().Decimal("areaValue"); //总建筑面积 var upArea = decisionList.Where(s => s.String("name") == "地上建筑面积").OrderBy(s => s.String("nodeKey")).FirstOrDefault().Decimal("areaValue"); var downArea = decisionList.Where(s => s.String("name") == "地下建筑面积").OrderBy(s => s.String("nodeKey")).FirstOrDefault().Decimal("areaValue"); var jirongArea = decisionList.Where(s => s.String("name") == "计容建筑面积").OrderBy(s => s.String("nodeKey")).FirstOrDefault().Decimal("areaValue"); var bujirongArea = totalArea - jirongArea; var sellArea = marketingList.SingleOrDefault(s => s.String("name") == "总销售面积").Decimal("areaValue");//可售面积 var noSellArea = totalArea - sellArea; //产品配置价格 var jingguang = costDirs.FirstOrDefault(s => s.String("name") == "景观工程").Decimal("quota"); //景观工程 var gonggong = costDirs.FirstOrDefault(s => s.String("name") == "公共区域装修工程").Decimal("quota"); //公共区域装修工程 var wailimian = costDirs.FirstOrDefault(s => s.String("name").Trim() == "外墙装修(专业)").Decimal("quota"); //公共区域装修工程 return(new BsonDocument { { "projCycle", projCycle.ToString() }, { "totalCost", totalCost.ToString() }, { "financeCycle", financeCycle.ToString() }, { "minfinanceCycle", minfinanceCycle.ToString() }, { "comfinanceCycle", comfinanceCycle.ToString() }, { "sellCycle", sellCycle.ToString() }, { "minsellCycle", minsellCycle.ToString() }, { "comsellCycle", comsellCycle.ToString() }, { "sellCost", sellCost.ToString() }, { "minsellCost", minsellCost.ToString() }, { "comsellCost", comsellCost.ToString() }, { "upArea", upArea.ToString() }, { "downArea", downArea.ToString() }, { "totalArea", totalArea.ToString() }, { "jirongArea", jirongArea.ToString() }, { "sellArea", sellArea.ToString() }, { "noSellArea", noSellArea.ToString() }, { "bujirongArea", bujirongArea.ToString() }, { "profitRate", profitRate.ToString() }, { "minprofitRate", minprofitRate.ToString() }, { "comprofitRate", comprofitRate.ToString() }, { "totalInterest", totalInterest.ToString() }, { "mintotalInterest", mintotalInterest.ToString() }, { "comtotalInterest", comtotalInterest.ToString() }, { "jingguang", jingguang.ToString() }, { "gonggong", gonggong.ToString() }, { "wailimian", wailimian.ToString() } }); }