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 c467e1c..38791a9 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -174,21 +174,30 @@ public class ProjectController extends BaseController { public String budget(@RequestParam("id") int id, Map model) { Project project = projectService.getProject(id); model.put("project", project); + //采购类型 + model.put("procurementTypes", procurementTypeService.allProcurementTypeList()); BudgetBean budgetBean = projectBudgetService.getBudget(project); //预算主页面数据 model.put("budgetBean", budgetBean); //收入明细 - model.put("incomeDetails", projectBudgetService.getBudgetIncomeDetail(project)); + List budgetIncomeDetail = projectBudgetService.getBudgetIncomeDetail(project); + model.put("incomeDetails", budgetIncomeDetail); //成本明细 - model.put("costDetails", projectBudgetService.getBudgetCostDetail(project)); - //采购类型 - model.put("procurementTypes", procurementTypeService.allProcurementTypeList()); + List budgetCostDetail = projectBudgetService.getBudgetCostDetail(project); + model.put("costDetails", budgetCostDetail); //项目管理成本明细 - model.put("costProjectManageDetails", projectBudgetService.getBudgetCostProjectManageDetail(project)); + List budgetCostProjectManageDetail = projectBudgetService.getBudgetCostProjectManageDetail(project); + model.put("costProjectManageDetails", budgetCostProjectManageDetail); List projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project); //资金计划明细 model.put("projectBudgetPlanDetails", projectBudgetPlanDetails); - //资金计划总【上面汇总表】 + //资金计划总【上面汇总表第一行】 + model.put("projectBudgetPlanDetailTotalTitle", projectBudgetService.getProjectBudgetPlanDetailTotalTitle(project, + budgetIncomeDetail, + budgetCostDetail, + budgetCostProjectManageDetail, + projectBudgetPlanDetails)); + //资金计划总【上面汇总表第二行】 model.put("projectBudgetPlanDetailTotal", projectBudgetService.getProjectBudgetPlanDetailTotal(project, projectBudgetPlanDetails)); //资金计划表中的统计信息【下面资金小表】 model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(projectBudgetPlanDetails)); diff --git a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java index 5cce687..ff5ccf9 100644 --- a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java +++ b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java @@ -462,7 +462,6 @@ public class ProjectBudgetService { * 根据每个月的计算资金计划的总 */ public ProjectBudgetPlanDetail getProjectBudgetPlanDetailTotal(Project project, List projectBudgetPlanDetails) { - ProjectBudgetPlanDetail projectBudgetPlanDetail = new ProjectBudgetPlanDetail(); BigDecimal deviceCost = new BigDecimal(0); BigDecimal engineerCost = new BigDecimal(0); BigDecimal projectManageCost = new BigDecimal(0); @@ -498,6 +497,7 @@ public class ProjectBudgetService { fundBalance = totalIncome.subtract(totalCost); + ProjectBudgetPlanDetail projectBudgetPlanDetail = new ProjectBudgetPlanDetail(); projectBudgetPlanDetail.setMonth("合计"); projectBudgetPlanDetail.setDeviceCost(deviceCost); projectBudgetPlanDetail.setEngineerCost(engineerCost); @@ -515,6 +515,102 @@ public class ProjectBudgetService { return projectBudgetPlanDetail; } + /** + * 计算资金计划的表头展示数据 + */ + public ProjectBudgetPlanDetail getProjectBudgetPlanDetailTotalTitle(Project project, + List budgetIncomeDetail, + List budgetCostDetail, + List budgetCostProjectManageDetail, + List projectBudgetPlanDetails) { + + BigDecimal deviceCost = calDeviceCost(budgetCostDetail); + BigDecimal engineerCost = calEngineerCost(budgetCostDetail); + BigDecimal projectManageCost = calProjectManageCost(budgetCostProjectManageDetail); + + BigDecimal saleIncome = calSaleIncome(budgetIncomeDetail); + + BigDecimal earnestMoneyIncome = new BigDecimal(0); + BigDecimal earnestMoneyCost = new BigDecimal(0); + BigDecimal capitalInterest = new BigDecimal(0); + BigDecimal underwrittenPlan = new BigDecimal(0); + BigDecimal repaymentPlan = new BigDecimal(0); + + if(CollectionUtil.isNotEmpty(projectBudgetPlanDetails)){ + for (ProjectBudgetPlanDetail budgetPlan : projectBudgetPlanDetails) { + earnestMoneyCost = earnestMoneyCost.add(budgetPlan.getEarnestMoneyCost()); + earnestMoneyIncome = earnestMoneyIncome.add(budgetPlan.getEarnestMoneyIncome()); + capitalInterest = capitalInterest.add(budgetPlan.getCapitalInterest()); + underwrittenPlan = underwrittenPlan.add(budgetPlan.getUnderwrittenPlan()); + repaymentPlan = repaymentPlan.add(budgetPlan.getRepaymentPlan()); + } + } + BigDecimal totalCost = deviceCost.add(engineerCost).add(projectManageCost).add(earnestMoneyCost); + BigDecimal totalIncome = saleIncome.add(earnestMoneyIncome); + + //总余额等于总收入-总支出 + BigDecimal fundBalance = totalIncome.subtract(totalCost); + + + ProjectBudgetPlanDetail projectBudgetPlanDetail = new ProjectBudgetPlanDetail(); + projectBudgetPlanDetail.setMonth("合计"); + projectBudgetPlanDetail.setDeviceCost(deviceCost); + projectBudgetPlanDetail.setEngineerCost(engineerCost); + projectBudgetPlanDetail.setProjectManageCost(projectManageCost); + projectBudgetPlanDetail.setEarnestMoneyCost(earnestMoneyCost); + projectBudgetPlanDetail.setTotalCost(totalCost); + projectBudgetPlanDetail.setSaleIncome(saleIncome); + projectBudgetPlanDetail.setEarnestMoneyIncome(earnestMoneyIncome); + projectBudgetPlanDetail.setTotalIncome(totalIncome); + projectBudgetPlanDetail.setFundBalance(fundBalance); + + projectBudgetPlanDetail.setCapitalInterest(capitalInterest); + projectBudgetPlanDetail.setUnderwrittenPlan(underwrittenPlan); + projectBudgetPlanDetail.setRepaymentPlan(repaymentPlan); + return projectBudgetPlanDetail; + } + + private BigDecimal calSaleIncome(List budgetIncomeDetail) { + BigDecimal saleIncome = new BigDecimal(0); + if(CollectionUtil.isNotEmpty(budgetIncomeDetail)){ + for (ProjectBudgetIncomeDetail projectBudgetIncomeDetail : budgetIncomeDetail) { + saleIncome = saleIncome.add(projectBudgetIncomeDetail.getTotalTaxExclude()); + } + } + return saleIncome; + } + + private BigDecimal calProjectManageCost(List budgetCostProjectManageDetail) { + BigDecimal projectManageCost = new BigDecimal(0); + if(CollectionUtil.isNotEmpty(budgetCostProjectManageDetail)){ + for (ProjectBudgetCostProjectManageDetail projectBudgetCostProjectManageDetail : budgetCostProjectManageDetail) { + projectManageCost = projectManageCost.add(projectBudgetCostProjectManageDetail.getTotal()); + } + } + return projectManageCost; + } + + private BigDecimal calEngineerCost(List budgetCostDetail) { + BigDecimal engineerCost = new BigDecimal(0); + if(CollectionUtil.isNotEmpty(budgetCostDetail)){ + List costDetailList = budgetCostDetail.stream().filter(b -> b.getType() != ProjectBudgetCostDetail.TYPE_DEVICE).collect(Collectors.toList()); + for (ProjectBudgetCostDetail projectBudgetCostDetail : costDetailList) { + engineerCost = engineerCost.add(projectBudgetCostDetail.getTotalTaxExclude()); + } + } + return engineerCost; + } + private BigDecimal calDeviceCost(List budgetCostDetail) { + BigDecimal deviceCost = new BigDecimal(0); + if(CollectionUtil.isNotEmpty(budgetCostDetail)){ + List costDetailList = budgetCostDetail.stream().filter(b -> b.getType() == ProjectBudgetCostDetail.TYPE_DEVICE).collect(Collectors.toList()); + for (ProjectBudgetCostDetail projectBudgetCostDetail : costDetailList) { + deviceCost = deviceCost.add(projectBudgetCostDetail.getTotalTaxExclude()); + } + } + return deviceCost; + } + /** * 根据资金计划获取资金使用统计值 * 月份去峰值月份 diff --git a/src/main/resources/static/assets/js/project_budget_cost.js b/src/main/resources/static/assets/js/project_budget_cost.js index e62eecd..dd88caf 100644 --- a/src/main/resources/static/assets/js/project_budget_cost.js +++ b/src/main/resources/static/assets/js/project_budget_cost.js @@ -185,6 +185,14 @@ function updateCostData(data, returnData) { $("input[name='costPurchaseOtherTaxInclude']").val(f2(otherTaxInclude)); $("input[name='costPurchaseOtherTaxExclude']").val(f2(otherTaxExclude)); + + //资金计划表中的 + $(".input-total-title-device-cost-budget-plan").val(f2(deviceTaxExclude)); + $(".input-total-title-engineer-cost-budget-plan").val(f2(f2(buildTaxExclude)+f2(serviceTaxExclude)+f2(otherTaxExclude))); + $(".input-total-title-total-cost-budget-plan").val(f2(f2(deviceTaxExclude)+f2(buildTaxExclude)+f2(serviceTaxExclude)+f2(otherTaxExclude) + +f2($(".input-total-title-project-manage-cost-budget-plan").val()) + +f2($(".input-total-title-earnest-money-cost-budget-plan").val()))); + /* var costOtherOtherTaxInclude = f2($("input[name='costOtherOtherTaxInclude']").val()); var costOtherOtherTaxExclude = f2($("input[name='costOtherOtherTaxExclude']").val()); diff --git a/src/main/resources/static/assets/js/project_budget_cost_project_manage.js b/src/main/resources/static/assets/js/project_budget_cost_project_manage.js index 9447993..e89f96a 100644 --- a/src/main/resources/static/assets/js/project_budget_cost_project_manage.js +++ b/src/main/resources/static/assets/js/project_budget_cost_project_manage.js @@ -86,6 +86,18 @@ function updateCostProjectManageData(data,returnData) { $("input[name='costProjectManageTaxExclude']").val(total); $("input[name='costProjectManageTaxInclude']").val(total); + //资金计划表中的 + $(".input-total-title-project-manage-cost-budget-plan").val(total); + + + var deviceTaxExclude = $("input[name='costPurchaseDeviceTaxExclude']").val(); + var buildTaxExclude = $("input[name='costPurchaseBuildTaxExclude']").val(); + var serviceTaxExclude = $("input[name='costPurchaseServiceTaxExclude']").val(); + var otherTaxExclude = $("input[name='costPurchaseOtherTaxExclude']").val(); + $(".input-total-title-total-cost-budget-plan").val(f2(f2(deviceTaxExclude)+f2(buildTaxExclude)+f2(serviceTaxExclude)+f2(otherTaxExclude) + +total + +f2($(".input-total-title-earnest-money-cost-budget-plan").val()))); + /*var costPurchaseDeviceTaxInclude = f2($("input[name='costPurchaseDeviceTaxInclude']").val()); var costPurchaseBuildTaxInclude = f2($("input[name='costPurchaseBuildTaxInclude']").val()); var costPurchaseServiceTaxInclude = f2($("input[name='costPurchaseServiceTaxInclude']").val()); diff --git a/src/main/resources/static/assets/js/project_budget_income.js b/src/main/resources/static/assets/js/project_budget_income.js index 1b462e1..37233a2 100644 --- a/src/main/resources/static/assets/js/project_budget_income.js +++ b/src/main/resources/static/assets/js/project_budget_income.js @@ -59,6 +59,12 @@ function updateIncomeData(data,returnData) { $("input[name='incomeTotalTaxInclude']").val(f2(deviceTaxInclude+engineerTaxInclude+serviceTaxInclude)); $("input[name='incomeTotalTaxExclude']").val(f2(deviceTaxExclude+engineerTaxExclude+serviceTaxExclude)); + + $(".input-total-title-sale-income-budget-plan").val($("input[name='incomeTotalTaxExclude']").val()); + $(".input-total-title-total-income-budget-plan").val(f2($("input[name='incomeTotalTaxExclude']").val()) + +f2($(".input-total-title-earnest-money-income-budget-plan").val())); + + updateProjectContributionProfitRate(); } 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 25b333d..e822340 100644 --- a/src/main/resources/static/assets/js/project_budget_plan.js +++ b/src/main/resources/static/assets/js/project_budget_plan.js @@ -487,8 +487,8 @@ function summationByClass(input, className, myIndex) { var total = 0; var trs = input.parent().parent().parent().find("tr"); trs.each(function (index, element) { - //myIndex从0开始,刨除表头和总计两行 - index-=2; + //myIndex从0开始,刨除表头和总计、总计两行 + index-=3; if(index>=0 && index<=myIndex){ total += f2($(this).find(className).val()); } diff --git a/src/main/resources/templates/admin/project_budget_edit.ftl b/src/main/resources/templates/admin/project_budget_edit.ftl index e050350..1d15fe9 100644 --- a/src/main/resources/templates/admin/project_budget_edit.ftl +++ b/src/main/resources/templates/admin/project_budget_edit.ftl @@ -613,6 +613,22 @@ 还款计划 操作 + + + + + + + + + + + + + + + +