From b9b5e61efdabac079c0783562a752a765bba5bea Mon Sep 17 00:00:00 2001 From: xxssyyyyssxx Date: Thu, 4 Nov 2021 16:05:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E9=87=91=E8=AE=A1=E5=88=92=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E4=B8=8E=E5=B1=95=E7=A4=BA=EF=BC=8C=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E8=AE=A1=E7=AE=97=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/backend/ProjectController.java | 39 +++- ...Plan.java => ProjectBudgetPlanDetail.java} | 6 +- .../ProjectBudgetPlanDetailRepository.java | 9 + .../model/ProjectBudgetPlanRepository.java | 9 - .../work/service/ProjectBudgetService.java | 63 ++++--- .../js/project_budget_cost_project_manage.js | 2 +- .../static/assets/js/project_budget_plan.js | 166 +++++++++++++++--- .../templates/admin/project_budget_edit.ftl | 68 +++---- 8 files changed, 265 insertions(+), 97 deletions(-) rename src/main/java/cn/palmte/work/model/{ProjectBudgetPlan.java => ProjectBudgetPlanDetail.java} (97%) create mode 100644 src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailRepository.java delete mode 100644 src/main/java/cn/palmte/work/model/ProjectBudgetPlanRepository.java 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 b231bcf..70a428c 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -147,11 +147,11 @@ public class ProjectController extends BaseController{ model.put("costDetails", projectBudgetService.getBudgetCostDetail(project)); //项目管理成本明细 model.put("costProjectManageDetails", projectBudgetService.getBudgetCostProjectManageDetail(project)); - List projectBudgetPlans = projectBudgetService.getProjectBudgetPlans(project); + List projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project); //资金计划明细 - model.put("projectBudgetPlans", projectBudgetPlans); + model.put("projectBudgetPlanDetails", projectBudgetPlanDetails); //资金计划总 - model.put("projectBudgetPlanTotal", projectBudgetService.getProjectBudgetPlanTotal(projectBudgetPlans)); + model.put("projectBudgetPlanDetailTotal", projectBudgetService.getProjectBudgetPlanDetailTotal(projectBudgetPlanDetails)); return "admin/project_budget_edit"; } @@ -182,8 +182,8 @@ public class ProjectController extends BaseController{ JSONArray details = jsonObject.getJSONArray("details"); List detailList = new ArrayList<>(details.size()); for (int i = 0; i < details.size(); i++) { - ProjectBudgetIncomeDetail incomeDetail = details.getObject(i, ProjectBudgetIncomeDetail.class); - detailList.add(incomeDetail); + ProjectBudgetIncomeDetail detail = details.getObject(i, ProjectBudgetIncomeDetail.class); + detailList.add(detail); } Project project = projectService.getProject(jsonObject.getInteger("projectId")); @@ -203,8 +203,8 @@ public class ProjectController extends BaseController{ JSONArray details = jsonObject.getJSONArray("details"); List detailList = new ArrayList<>(details.size()); for (int i = 0; i < details.size(); i++) { - ProjectBudgetCostDetail costDetail = details.getObject(i, ProjectBudgetCostDetail.class); - detailList.add(costDetail); + ProjectBudgetCostDetail detail = details.getObject(i, ProjectBudgetCostDetail.class); + detailList.add(detail); } Project project = projectService.getProject(jsonObject.getInteger("projectId")); @@ -224,8 +224,8 @@ public class ProjectController extends BaseController{ JSONArray details = jsonObject.getJSONArray("details"); List detailList = new ArrayList<>(details.size()); for (int i = 0; i < details.size(); i++) { - ProjectBudgetCostProjectManageDetail costDetail = details.getObject(i, ProjectBudgetCostProjectManageDetail.class); - detailList.add(costDetail); + ProjectBudgetCostProjectManageDetail detail = details.getObject(i, ProjectBudgetCostProjectManageDetail.class); + detailList.add(detail); } Project project = projectService.getProject(jsonObject.getInteger("projectId")); @@ -235,6 +235,27 @@ public class ProjectController extends BaseController{ return ResponseMsg.buildSuccessMsg("成功"); } + /** + * 保存项资金计划明细 + */ + @RequestMapping("/budgetEditSaveBudgetPlanDetail") + @ResponseBody + public ResponseMsg budgetEditSaveBudgetPlanDetail(@RequestBody String body) { + JSONObject jsonObject = JSON.parseObject(body); + JSONArray details = jsonObject.getJSONArray("details"); + List detailList = new ArrayList<>(details.size()); + for (int i = 0; i < details.size(); i++) { + ProjectBudgetPlanDetail detail = details.getObject(i, ProjectBudgetPlanDetail.class); + detailList.add(detail); + } + + Project project = projectService.getProject(jsonObject.getInteger("projectId")); + + projectBudgetService.clearBudgetPlanDetail(project); + projectBudgetService.saveBudgetPlanDetail(project, detailList); + + return ResponseMsg.buildSuccessMsg("成功"); + } @InitBinder public void initBinder(WebDataBinder webDataBinder){ webDataBinder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetPlan.java b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetail.java similarity index 97% rename from src/main/java/cn/palmte/work/model/ProjectBudgetPlan.java rename to src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetail.java index 7a72180..b950179 100644 --- a/src/main/java/cn/palmte/work/model/ProjectBudgetPlan.java +++ b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetail.java @@ -6,11 +6,11 @@ import javax.persistence.*; import java.math.BigDecimal; /** - * 资金计划表 + * 资金计划明细表 */ @Entity -@Table(name = "project_budget_plan") -public class ProjectBudgetPlan { +@Table(name = "project_budget_plan_detail") +public class ProjectBudgetPlanDetail { /** * id */ diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailRepository.java b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailRepository.java new file mode 100644 index 0000000..cf982ff --- /dev/null +++ b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailRepository.java @@ -0,0 +1,9 @@ +package cn.palmte.work.model; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ProjectBudgetPlanDetailRepository extends JpaRepository { + List findAllByProjectIdEquals(int id); +} diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetPlanRepository.java b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanRepository.java deleted file mode 100644 index db43bf6..0000000 --- a/src/main/java/cn/palmte/work/model/ProjectBudgetPlanRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.palmte.work.model; - -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -public interface ProjectBudgetPlanRepository extends JpaRepository { - List findAllByProjectIdEquals(int id); -} diff --git a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java index ab912ac..6750a93 100644 --- a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java +++ b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java @@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import top.jfunc.common.utils.CollectionUtil; -import javax.persistence.Column; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -32,7 +31,7 @@ public class ProjectBudgetService { @Autowired private ProjectBudgetCostProjectManageDetailRepository projectBudgetCostProjectManageDetailRepository; @Autowired - private ProjectBudgetPlanRepository projectBudgetPlanRepository; + private ProjectBudgetPlanDetailRepository projectBudgetPlanDetailRepository; @Value("#{'${fourcal.fixedprojectmanagedetails}'.split('\\|')}") private String[] fixedProjectManageDetails; @@ -320,20 +319,40 @@ public class ProjectBudgetService { return projectManageDetails; } + /** + * 清空项目的资金计划明细 + */ + public void clearBudgetPlanDetail(Project project){ + List costDetails = projectBudgetPlanDetailRepository.findAllByProjectIdEquals(project.getId()); + if(CollectionUtil.isNotEmpty(costDetails)){ + projectBudgetPlanDetailRepository.deleteInBatch(costDetails); + } + } + /** + * 保存项目的资金计划明细 + */ + public void saveBudgetPlanDetail(Project project, List detailList){ + if(CollectionUtil.isNotEmpty(detailList)){ + for (ProjectBudgetPlanDetail projectBudgetPlanDetail : detailList) { + projectBudgetPlanDetail.setProjectId(project.getId()); + } + projectBudgetPlanDetailRepository.save(detailList); + } + } /** * 获取资金计划数据 */ - public List getProjectBudgetPlans(Project project){ - return projectBudgetPlanRepository.findAllByProjectIdEquals(project.getId()); + public List getProjectBudgetPlanDetails(Project project){ + return projectBudgetPlanDetailRepository.findAllByProjectIdEquals(project.getId()); } /** * 根据每个月的计算资金计划的总 */ - public ProjectBudgetPlan getProjectBudgetPlanTotal(List projectBudgetPlans) { - ProjectBudgetPlan projectBudgetPlan = new ProjectBudgetPlan(); + public ProjectBudgetPlanDetail getProjectBudgetPlanDetailTotal(List projectBudgetPlanDetails) { + ProjectBudgetPlanDetail projectBudgetPlanDetail = new ProjectBudgetPlanDetail(); BigDecimal deviceCost = new BigDecimal(0); BigDecimal engineerCost = new BigDecimal(0); BigDecimal projectManageCost = new BigDecimal(0); @@ -347,8 +366,8 @@ public class ProjectBudgetService { BigDecimal underwrittenPlan = new BigDecimal(0); BigDecimal repaymentPlan = new BigDecimal(0); - if(CollectionUtil.isNotEmpty(projectBudgetPlans)){ - for (ProjectBudgetPlan budgetPlan : projectBudgetPlans) { + if(CollectionUtil.isNotEmpty(projectBudgetPlanDetails)){ + for (ProjectBudgetPlanDetail budgetPlan : projectBudgetPlanDetails) { deviceCost = deviceCost.add(budgetPlan.getDeviceCost()); engineerCost = engineerCost.add(budgetPlan.getEngineerCost()); projectManageCost = projectManageCost.add(budgetPlan.getProjectManageCost()); @@ -365,19 +384,19 @@ public class ProjectBudgetService { } - projectBudgetPlan.setMonth("合计"); - projectBudgetPlan.setDeviceCost(deviceCost); - projectBudgetPlan.setEngineerCost(engineerCost); - projectBudgetPlan.setProjectManageCost(projectManageCost); - projectBudgetPlan.setEarnestMoneyCost(earnestMoneyCost); - projectBudgetPlan.setTotalCost(totalCost); - projectBudgetPlan.setSaleIncome(saleIncome); - projectBudgetPlan.setEarnestMoneyIncome(earnestMoneyIncome); - projectBudgetPlan.setTotalIncome(totalIncome); - projectBudgetPlan.setFundBalance(fundBalance); - projectBudgetPlan.setCapitalInterest(capitalInterest); - projectBudgetPlan.setUnderwrittenPlan(underwrittenPlan); - projectBudgetPlan.setRepaymentPlan(repaymentPlan); - return projectBudgetPlan; + 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; } } 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 dee45ce..42f5e18 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 @@ -1,5 +1,5 @@ /** - * 一个采购成本详情的字段 + * 一个项目管理成本详情的字段 */ COST_PROJECT_MANAGE_DETAIL_ARR=["type","name","detail","unit","amount","price","total","predictMethod","predictWhy","remark","deletable"]; $(function () { 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 46c3c38..9ace3a2 100644 --- a/src/main/resources/static/assets/js/project_budget_plan.js +++ b/src/main/resources/static/assets/js/project_budget_plan.js @@ -1,22 +1,22 @@ /** * 一个资金计划的字段 */ -BUDGET_PLAN_DETAIL_ARR=["type","name","detail","unit","amount","price","total","predictMethod","predictWhy","remark","deletable"]; +BUDGET_PLAN_DETAIL_ARR=["month","deviceCost","engineerCost","project_manageCost","earnestMoneyCost","totalCost","saleIncome","earnestMoneyIncome","totalIncome","fundBalance","capitalInterest","underwrittenPlan","repaymentPlan"]; $(function () { $(".budget-plan-detail").click(function () { - $('#my-prompt-budget-detail').modal({ + $('#my-prompt-budget-plan-detail').modal({ relatedTarget: this, onConfirm: function(e) { //不能使用e.data,因为无法获取动态添加的 - var data = collectData("am-modal-prompt-input-budget-plan"); + var data = collectData("am-modal-prompt-input-budget-plan-detail"); data = prepareAjaxData(data, BUDGET_PLAN_DETAIL_ARR, $("#id").val()); - saveDetail("/fourcal/project/budgetEditSaveBudgetPlanDetail", data, updateBudgetPlanData); + saveDetail("/fourcal/project/budgetEditSaveBudgetPlanDetail", data, updateBudgetPlanDetailData); }, onCancel: function(e) { } }); }); - $("#budgetPlanAddBtn").click(function () { + $("#budgetPlanDetailAddBtn").click(function () { appendTrBudgetPlan(); }); }); @@ -25,31 +25,153 @@ $(function () { */ function appendTrBudgetPlan() { var template = '\n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + - ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + ' \n' + ' '; - $("#budgetPlanTable").append(template); + $("#budgetPlanDetailTable").append(template); //重新绑定删除事件和input修改事件 bindDeleteBtn(); - bindChangeableInputBudgetPlan(); + bindChangeableInputBudgetPlanDetail(); } -function bindChangeableInputBudgetPlan() { +function bindChangeableInputBudgetPlanDetail() { + //设备支出改变 + $(".input-changeable-device-cost-budget-plan").change(function () { + var deviceCost = parseFloat($(this).val()); + //找到对应的工程支出、经营性支出、保证金支出 + var engineerCost = parseFloat($(this).parent().parent().find(".input-changeable-engineer-cost-budget-plan").val()); + var projectManageCost = parseFloat($(this).parent().parent().find(".input-changeable-project-manage-cost-budget-plan").val()); + var earnestMoneyCost = parseFloat($(this).parent().parent().find(".input-changeable-earnest-money-cost-budget-plan").val()); + console.log(deviceCost,engineerCost,projectManageCost,earnestMoneyCost); + + $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); + + + updateBudgetPlanTotal("input-changeable-device-cost-budget-plan","input-total-device-cost-budget-plan"); + updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); + }); + //工程支出改变 + $(".input-changeable-engineer-cost-budget-plan").change(function () { + var engineerCost = parseFloat($(this).val()); + //找到对应的设备支出、经营性支出、保证金支出 + var deviceCost = parseFloat($(this).parent().parent().find(".input-changeable-device-cost-budget-plan").val()); + var projectManageCost = parseFloat($(this).parent().parent().find(".input-changeable-project-manage-cost-budget-plan").val()); + var earnestMoneyCost = parseFloat($(this).parent().parent().find(".input-changeable-earnest-money-cost-budget-plan").val()); + console.log(deviceCost,engineerCost,projectManageCost,earnestMoneyCost); + + $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); + + updateBudgetPlanTotal("input-changeable-engineer-cost-budget-plan","input-total-engineer-cost-budget-plan"); + updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); + }); + //经营性支出改变 + $(".input-changeable-project-manage-cost-budget-plan").change(function () { + var projectManageCost = parseFloat($(this).val()); + //找到对应的设备支出、工程支出、保证金支出 + var deviceCost = parseFloat($(this).parent().parent().find(".input-changeable-device-cost-budget-plan").val()); + var engineerCost = parseFloat($(this).parent().parent().find(".input-changeable-engineer-cost-budget-plan").val()); + var earnestMoneyCost = parseFloat($(this).parent().parent().find(".input-changeable-earnest-money-cost-budget-plan").val()); + console.log(deviceCost,engineerCost,projectManageCost,earnestMoneyCost); + + $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); + + updateBudgetPlanTotal("input-changeable-project-manage-cost-budget-plan","input-total-project-manage-cost-budget-plan"); + updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); + }); + //保证金改变 + $(".input-changeable-earnest-money-cost-budget-plan").change(function () { + var earnestMoneyCost = parseFloat($(this).val()); + //找到对应的设备支出、经营性支出、保证金支出 + var deviceCost = parseFloat($(this).parent().parent().find(".input-changeable-device-cost-budget-plan").val()); + var engineerCost = parseFloat($(this).parent().parent().find(".input-changeable-engineer-cost-budget-plan").val()); + var projectManageCost = parseFloat($(this).parent().parent().find(".input-changeable-project-manage-cost-budget-plan").val()); + console.log(deviceCost,engineerCost,projectManageCost,earnestMoneyCost); + + $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); + + updateBudgetPlanTotal("input-changeable-earnest-money-cost-budget-plan","input-total-earnest-money-cost-budget-plan"); + updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); + }); + + //销售收款改变 + $(".input-changeable-sale-income-budget-plan").change(function () { + var saleIncome = parseFloat($(this).val()); + //找到保证金收款 + var earnestMoneyIncome = parseFloat($(this).parent().parent().find(".input-changeable-earnest-money-income-budget-plan").val()); + console.log(saleIncome, earnestMoneyIncome); + + $(this).parent().parent().find(".input-changeable-total-income-budget-plan").val(saleIncome+earnestMoneyIncome); + + updateBudgetPlanTotal("input-changeable-sale-income-budget-plan","input-total-sale-income-budget-plan"); + updateBudgetPlanTotal("input-changeable-total-income-budget-plan","input-total-total-income-budget-plan"); + }); + //保证金收款改变 + $(".input-changeable-earnest-money-income-budget-plan").change(function () { + var earnestMoneyIncome = parseFloat($(this).val()); + //找到保证金收款 + var saleIncome = parseFloat($(this).parent().parent().find(".input-changeable-sale-income-budget-plan").val()); + console.log(saleIncome, earnestMoneyIncome); + + $(this).parent().parent().find(".input-changeable-total-income-budget-plan").val(saleIncome+earnestMoneyIncome); + + updateBudgetPlanTotal("input-changeable-earnest-money-income-budget-plan","input-total-earnest-money-income-budget-plan"); + updateBudgetPlanTotal("input-changeable-total-income-budget-plan","input-total-total-income-budget-plan"); + }); + + + //资金余额改变 + $(".input-changeable-fund-balance-budget-plan").change(function () { + updateBudgetPlanTotal("input-changeable-fund-balance-budget-plan","input-total-fund-balance-budget-plan"); + }); + //资金利息改变 + $(".input-changeable-capital-interest-budget-plan").change(function () { + updateBudgetPlanTotal("input-changeable-capital-interest-budget-plan","input-total-capital-interest-budget-plan"); + }); + //垫资计划改变 + $(".input-changeable-underwritten-plan-budget-plan").change(function () { + updateBudgetPlanTotal("input-changeable-underwritten-plan-budget-plan","input-total-underwritten-plan-budget-plan"); + }); + //还款计划改变 + $(".input-changeable-repayment-plan-budget-plan").change(function () { + updateBudgetPlanTotal("input-changeable-repayment-plan-budget-plan","input-total-repayment-plan-budget-plan"); + }); + /*//支出合计改变 + $(".input-changeable-total-cost-budget-plan").change(function () { + updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); + }); + //收款合计改变 + $(".input-total-total-income-budget-plan").change(function () { + updateBudgetPlanTotal("input-changeable-total-income-budget-plan","input-total-total-income-budget-plan"); + });*/ } + +/** + * 更新每列的总计 + */ +function updateBudgetPlanTotal(className, totalClassName) { + var total = 0; + //找到本列所有的 + $("."+className).each(function (t) { + total += parseFloat($(this).val()); + }); + + $("."+totalClassName).val(total); +} + /** * 更新页面收入的数据 */ -function updateBudgetPlanData(details) { +function updateBudgetPlanDetailData(details) { } \ 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 545ce6e..5a6d926 100644 --- a/src/main/resources/templates/admin/project_budget_edit.ftl +++ b/src/main/resources/templates/admin/project_budget_edit.ftl @@ -584,11 +584,11 @@ <#--资金计划明细表弹窗--> -
+
新增资金计划明细表——${project.name}
- +
@@ -607,38 +607,38 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - <#if projectBudgetPlans??> - <#list projectBudgetPlans as projectBudgetPlan> + <#if projectBudgetPlanDetails??> + <#list projectBudgetPlanDetails as projectBudgetPlanDetail> - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -646,7 +646,7 @@
月份操作
${projectBudgetPlanTotal.month}${projectBudgetPlanTotal.deviceCost}${projectBudgetPlanTotal.engineerCost}${projectBudgetPlanTotal.projectManageCost}${projectBudgetPlanTotal.earnestMoneyCost}${projectBudgetPlanTotal.totalCost}${projectBudgetPlanTotal.saleIncome}${projectBudgetPlanTotal.earnestMoneyIncome}${projectBudgetPlanTotal.totalIncome}${projectBudgetPlanTotal.fundBalance}${projectBudgetPlanTotal.capitalInterest}${projectBudgetPlanTotal.underwrittenPlan}${projectBudgetPlanTotal.repaymentPlan}
- +