From a53e91620c59271383d6e4fd7e07df3a6a939994 Mon Sep 17 00:00:00 2001 From: xxssyyyyssxx Date: Sat, 6 Nov 2021 21:41:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E9=87=91=E6=B5=81=E9=87=8F=E8=A1=A8?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/palmte/work/bean/CashFlowBean.java | 197 ++++++++++++++++++ .../controller/backend/ProjectController.java | 2 + .../work/service/ProjectBudgetService.java | 27 +++ .../static/assets/js/project_budget_plan.js | 48 +++++ .../templates/admin/project_budget_edit.ftl | 28 +-- 5 files changed, 288 insertions(+), 14 deletions(-) create mode 100644 src/main/java/cn/palmte/work/bean/CashFlowBean.java diff --git a/src/main/java/cn/palmte/work/bean/CashFlowBean.java b/src/main/java/cn/palmte/work/bean/CashFlowBean.java new file mode 100644 index 0000000..081e1bd --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/CashFlowBean.java @@ -0,0 +1,197 @@ +package cn.palmte.work.bean; + +import java.math.BigDecimal; + +/** + * 现金流量 + * @author xiongshiyan at 2021/11/6 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public class CashFlowBean { + /** + * a销售商品、提供劳务收到的现金 + * */ + private BigDecimal saleIncomeCash; + /** + * b收到的税费返还 + * */ + private BigDecimal taxReturn; + /** + * c其他与经营活动有关的现金【保证金收入】 + */ + private BigDecimal earnestMoneyIncome; + /** + * d购买商品、接受劳务支付的现金【设备支出+工程支出】 + */ + private BigDecimal purchaseCost; + /** + * e支付的各项税费 + */ + private BigDecimal taxCost; + /** + *f支付其他与经营活动有关的现金 + */ + private BigDecimal earnestMoneyCost; + /** + * g经营活动产生的现金流量净额 + * g=a+c+b-d-f-e + */ + //private BigDecimal netCashFlow; + /** + * h投资活动现金流入 + */ + private BigDecimal cashInflowFromInvestingActivities; + /** + * i投资活动现金流出 + */ + private BigDecimal cashOutflowFromInvestingActivities; + /** + * j投资活动产生的现金流量净额 + */ + private BigDecimal netCashFromInvestingActivities; + /** + * k融资资金流入【垫资计划】 + */ + private BigDecimal financingCapitalInflow; + /** + * l融资资金流出【还款计划】 + */ + private BigDecimal financingCapitalOutflow; + /** + *m筹资活动产生的现金流量净额 + * m=k-l + */ + //private BigDecimal financingCapitalCashflow; + /** + * n货币资金净增加额 + * n=g+j+m + */ + //private BigDecimal netIncreaseMonetaryFunds; + + public BigDecimal getSaleIncomeCash() { + return handleSpecial(saleIncomeCash); + } + + public void setSaleIncomeCash(BigDecimal saleIncomeCash) { + this.saleIncomeCash = saleIncomeCash; + } + + public BigDecimal getTaxReturn() { + return handleSpecial(taxReturn); + } + + public void setTaxReturn(BigDecimal taxReturn) { + this.taxReturn = taxReturn; + } + + public BigDecimal getEarnestMoneyIncome() { + return handleSpecial(earnestMoneyIncome); + } + + public void setEarnestMoneyIncome(BigDecimal earnestMoneyIncome) { + this.earnestMoneyIncome = earnestMoneyIncome; + } + + public BigDecimal getPurchaseCost() { + return handleSpecial(purchaseCost); + } + + public void setPurchaseCost(BigDecimal purchaseCost) { + this.purchaseCost = purchaseCost; + } + + public BigDecimal getTaxCost() { + return handleSpecial(taxCost); + } + + public void setTaxCost(BigDecimal taxCost) { + this.taxCost = taxCost; + } + + public BigDecimal getEarnestMoneyCost() { + return handleSpecial(earnestMoneyCost); + } + + public void setEarnestMoneyCost(BigDecimal earnestMoneyCost) { + this.earnestMoneyCost = earnestMoneyCost; + } + + public BigDecimal getNetCashFlow() { + + BigDecimal saleIncomeCash = getSaleIncomeCash(); + BigDecimal taxReturn = getTaxReturn(); + BigDecimal earnestMoneyIncome = getEarnestMoneyIncome(); + BigDecimal purchaseCost = getPurchaseCost(); + BigDecimal taxCost = getTaxCost(); + BigDecimal earnestMoneyCost = getEarnestMoneyCost(); + + return saleIncomeCash + .add(taxReturn) + .add(earnestMoneyIncome) + .subtract(purchaseCost) + .subtract(taxCost) + .subtract(earnestMoneyCost); + } + + public BigDecimal getCashInflowFromInvestingActivities() { + return handleSpecial(cashInflowFromInvestingActivities); + } + + public void setCashInflowFromInvestingActivities(BigDecimal cashInflowFromInvestingActivities) { + this.cashInflowFromInvestingActivities = cashInflowFromInvestingActivities; + } + + public BigDecimal getCashOutflowFromInvestingActivities() { + return handleSpecial(cashOutflowFromInvestingActivities); + } + + public void setCashOutflowFromInvestingActivities(BigDecimal cashOutflowFromInvestingActivities) { + this.cashOutflowFromInvestingActivities = cashOutflowFromInvestingActivities; + } + + public BigDecimal getNetCashFromInvestingActivities() { + return handleSpecial(netCashFromInvestingActivities); + } + + public void setNetCashFromInvestingActivities(BigDecimal netCashFromInvestingActivities) { + this.netCashFromInvestingActivities = netCashFromInvestingActivities; + } + + public BigDecimal getFinancingCapitalInflow() { + return handleSpecial(financingCapitalInflow); + } + + public void setFinancingCapitalInflow(BigDecimal financingCapitalInflow) { + this.financingCapitalInflow = financingCapitalInflow; + } + + public BigDecimal getFinancingCapitalOutflow() { + return handleSpecial(financingCapitalOutflow); + } + + public void setFinancingCapitalOutflow(BigDecimal financingCapitalOutflow) { + this.financingCapitalOutflow = financingCapitalOutflow; + } + + public BigDecimal getFinancingCapitalCashflow() { + BigDecimal financingCapitalInflow = getFinancingCapitalInflow(); + BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow(); + return financingCapitalInflow.subtract(financingCapitalOutflow); + } + + public BigDecimal getNetIncreaseMonetaryFunds() { + BigDecimal netCashFlow = getNetCashFlow(); + BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities(); + BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow(); + return netCashFlow + .add(netCashFromInvestingActivities) + .add(financingCapitalCashflow); + } + + /** + * 处理特殊值 + * null就返回0 + */ + protected BigDecimal handleSpecial(BigDecimal src) { + return null == src ? new BigDecimal(0) : src; + } +} diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index 649799a..55a87d1 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -157,6 +157,8 @@ public class ProjectController extends BaseController{ model.put("projectBudgetPlanDetailTotal", projectBudgetService.getProjectBudgetPlanDetailTotal(project, projectBudgetPlanDetails)); //资金计划表中的统计信息【下面资金小表】 model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(projectBudgetPlanDetails)); + //现金表 + model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); //freemarker可以利用的静态方法 model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils")); return "admin/project_budget_edit"; diff --git a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java index ed5d625..a31211e 100644 --- a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java +++ b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java @@ -1,6 +1,7 @@ package cn.palmte.work.service; import cn.palmte.work.bean.BudgetBean; +import cn.palmte.work.bean.CashFlowBean; import cn.palmte.work.bean.ProjectConfigBean; import cn.palmte.work.bean.ProjectUnderwrittenPlanStatisticBean; import cn.palmte.work.model.*; @@ -548,4 +549,30 @@ public class ProjectBudgetService { return bean; } + + /** + * 计算现金流量表 + */ + public CashFlowBean getCashFlowBean(Project project, List projectBudgetPlanDetails){ + CashFlowBean cashFlowBean = new CashFlowBean(); + //获取统计值 + ProjectBudgetPlanDetail detailTotal = getProjectBudgetPlanDetailTotal(project, projectBudgetPlanDetails); + + //a + cashFlowBean.setSaleIncomeCash(detailTotal.getSaleIncome()); + //c + cashFlowBean.setEarnestMoneyIncome(detailTotal.getEarnestMoneyIncome()); + //d + cashFlowBean.setPurchaseCost(detailTotal.getDeviceCost() + .add(detailTotal.getEngineerCost())); + //f + cashFlowBean.setEarnestMoneyCost(detailTotal.getProjectManageCost() + .add(detailTotal.getEarnestMoneyCost()) + .add(detailTotal.getCapitalInterest())); + //k + cashFlowBean.setFinancingCapitalInflow(detailTotal.getUnderwrittenPlan()); + //l + cashFlowBean.setFinancingCapitalOutflow(detailTotal.getRepaymentPlan()); + return cashFlowBean; + } } diff --git a/src/main/resources/static/assets/js/project_budget_plan.js b/src/main/resources/static/assets/js/project_budget_plan.js index 5f484ba..a557a17 100644 --- a/src/main/resources/static/assets/js/project_budget_plan.js +++ b/src/main/resources/static/assets/js/project_budget_plan.js @@ -476,12 +476,60 @@ function updateBudgetPlanDetailData(details) { $("input[name='costExpropriationTaxExclude']").val($(".input-underwritten-plan-statistic-capital-interest-budget-plan").val()); //更新项目贡献率 updateProjectContributionProfitRate(); + //更新现金流量 + updateCashFlow(); } +/** + * 绑定公司管理费用输入框 + */ function bindCompanyManageChangeable() { $("input[name='costCompanyManageTaxExclude']").change(function () { //更新项目贡献率 updateProjectContributionProfitRate(); }); +} + +/** + * 更新现金流量表 + */ +function updateCashFlow() { + + var saleIncome = $(".input-total-sale-income-budget-plan").val(); + var earnestMoneyIncome = $(".input-total-earnest-money-income-budget-plan").val(); + var deviceCost = $(".input-total-device-cost-budget-plan").val(); + var engineerCost = $(".input-total-engineer-cost-budget-plan").val(); + + var projectManageCost = $(".input-total-project-manage-cost-budget-plan").val(); + var earnestMoneyCost = $(".input-total-earnest-money-cost-budget-plan").val(); + var capitalInterest = $(".input-total-capital-interest-budget-plan").val(); + + var underwrittenPlan = $(".input-total-underwritten-plan-budget-plan").val(); + var repaymentPlan = $(".input-total-repayment-plan-budget-plan").val(); + + var d = f2(deviceCost)+f2(engineerCost); + var f = f2(projectManageCost)+f2(earnestMoneyCost)+f2(capitalInterest); + var g = f2(saleIncome)+0+f2(earnestMoneyIncome)-d-0-f; + var m = f2(underwrittenPlan)-f2(repaymentPlan); + var n = g+0+m; + + console.log(saleIncome,earnestMoneyIncome,deviceCost, + engineerCost,projectManageCost,earnestMoneyCost, + capitalInterest,underwrittenPlan,repaymentPlan, + d,f,g,m,m); + + + $("input[name='saleIncomeCash']").val(saleIncome); + $("input[name='earnestMoneyIncome']").val(earnestMoneyIncome); + $("input[name='purchaseCost']").val(d); + $("input[name='earnestMoneyCost']").val(f); + + $("input[name='netCashFlow']").val(g); + + $("input[name='financingCapitalInflow']").val(underwrittenPlan); + $("input[name='financingCapitalOutflow']").val(repaymentPlan); + + $("input[name='financingCapitalCashflow']").val(m); + $("input[name='netIncreaseMonetaryFunds']").val(n); } \ No newline at end of file diff --git a/src/main/resources/templates/admin/project_budget_edit.ftl b/src/main/resources/templates/admin/project_budget_edit.ftl index 107f294..cdd3b9b 100644 --- a/src/main/resources/templates/admin/project_budget_edit.ftl +++ b/src/main/resources/templates/admin/project_budget_edit.ftl @@ -347,59 +347,59 @@ 销售商品、提供劳务收到的现金a - + 收到的税费返还b - + / 收到其他与经营活动有关的现金c - + 购买商品、接受劳务支付的现d - + 支付的各项税费e - + / 支付其他与经营活动有关的现金f - + 经营活动产生的现金流量净额g - + 投资活动现金流入h - + / 投资活动现金流出i - + / 投资活动产生的现金流量净额j - + / 融资资金流入k - + 还款资金流出l - + 筹资活动产生的现金流量净额m - + 货币资金净增加额n - +