diff --git a/src/main/java/cn/palmte/work/bean/FormerBean.java b/src/main/java/cn/palmte/work/bean/FormerBean.java index 1c1d7e6..c6235bd 100644 --- a/src/main/java/cn/palmte/work/bean/FormerBean.java +++ b/src/main/java/cn/palmte/work/bean/FormerBean.java @@ -1,12 +1,13 @@ package cn.palmte.work.bean; import java.math.BigDecimal; +import java.math.RoundingMode; /** * @author Yuanping Zhang * @date 2021/11/15 */ -public class FormerBean extends IncomeCostBean{ +public class FormerBean extends IncomeCostBean { /** * 所得税 @@ -42,11 +43,11 @@ public class FormerBean extends IncomeCostBean{ private BigDecimal netProfitMargin; /** * a销售商品、提供劳务收到的现金 - * */ + */ private BigDecimal saleIncomeCash; /** * b收到的税费返还 - * */ + */ private BigDecimal taxReturn; /** * c其他与经营活动有关的现金【保证金收入】 @@ -61,7 +62,7 @@ public class FormerBean extends IncomeCostBean{ */ private BigDecimal taxCost; /** - *f支付其他与经营活动有关的现金 + * f支付其他与经营活动有关的现金 */ private BigDecimal earnestMoneyCost; /** @@ -89,7 +90,7 @@ public class FormerBean extends IncomeCostBean{ */ private BigDecimal financingCapitalOutflow; /** - *m筹资活动产生的现金流量净额 + * m筹资活动产生的现金流量净额 */ private BigDecimal financingCapitalCashflow; /** @@ -114,7 +115,10 @@ public class FormerBean extends IncomeCostBean{ if (null == grossProfit || null == incomeTotalTaxExclude) { return handleSpecial(null); } - return grossProfit.divide(incomeTotalTaxExclude).multiply(new BigDecimal(100)); + if (incomeTotalTaxExclude.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; + } + return grossProfit.divide(incomeTotalTaxExclude,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); } public void setGrossProfitProfitMargin(BigDecimal grossProfitProfitMargin) { @@ -122,7 +126,7 @@ public class FormerBean extends IncomeCostBean{ } /** - *项目贡献利润利润率 + * 项目贡献利润利润率 */ private BigDecimal contributionProfitProfitMargin; @@ -134,8 +138,10 @@ public class FormerBean extends IncomeCostBean{ if (null == contributionProfit || null == incomeTotalTaxExclude) { return handleSpecial(null); } - return contributionProfit.divide(incomeTotalTaxExclude).multiply(new BigDecimal(100)); - + if (incomeTotalTaxExclude.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; + } + return contributionProfit.divide(incomeTotalTaxExclude,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); } public void setContributionProfitProfitMargin(BigDecimal contributionProfitProfitMargin) { @@ -155,7 +161,10 @@ public class FormerBean extends IncomeCostBean{ if (null == netProfit || null == incomeTotalTaxExclude) { return handleSpecial(null); } - return netProfit.divide(incomeTotalTaxExclude).multiply(new BigDecimal(100)); + if (incomeTotalTaxExclude.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; + } + return netProfit.divide(incomeTotalTaxExclude,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); } public void setNetProfitProfitMargin(BigDecimal netProfitProfitMargin) { diff --git a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java index 138c9da..a666035 100644 --- a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java +++ b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java @@ -60,12 +60,12 @@ public class HumanCostController extends BaseController{ Admin admin = getAdmin(); int roleLevel = admin.getRoleLevel(); List selfProjects = projectRepository.findByCreator(admin.getId(), new Date()); - if (roleLevel <= 2 || roleLevel == 4) { + if (roleLevel <= 3 || roleLevel == 6) { model.put("deptVary", 1); model.put("deptList", deptRepository.findAll()); model.put("projectList", projectRepository.findAll()); model.put("showSalary", 1); - } else if (roleLevel == 3) { + } else if (roleLevel == 4 || roleLevel == 5) { model.put("deptVary", -1); model.put("deptList", new ArrayList<>()); model.put("projectList", projectRepository.findByDeptId(admin.getDeptId())); 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 be1b8d6..c467e1c 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -80,6 +80,7 @@ public class ProjectController extends BaseController { //当前登录人的角色类型 model.put("keywords", keywords); model.put("adminId", InterfaceUtil.getAdminId()); + model.put("admin", InterfaceUtil.getAdmin()); model.put("deptList", deptService.findAll()); ConcurrentHashMap searchInfo = getSearchInfo(keywords, model); model.put("pager", projectService.list(searchInfo, pageNumber, pageSize)); diff --git a/src/main/java/cn/palmte/work/service/HumanCostService.java b/src/main/java/cn/palmte/work/service/HumanCostService.java index aea198e..8362abf 100644 --- a/src/main/java/cn/palmte/work/service/HumanCostService.java +++ b/src/main/java/cn/palmte/work/service/HumanCostService.java @@ -122,8 +122,8 @@ public class HumanCostService { Project project = projectRepository.findByProjectName(projectName); if (project == null) { throw new Exception(projectName + "不存在"); - } else if (project.getStatus() != Project.STATUS_SETTLE || project.getApproveStatusSettle() == 1 || project.getApproveStatusSettle() == 2) { - throw new Exception(projectName + "不在项目结算的可编辑状态"); + } else if (project.getStatus() == Project.STATUS_ESTIMATE || (project.getStatus() == Project.STATUS_ESTIMATE && project.getApproveStatusEstimate() != 2) || (project.getStatus() == Project.STATUS_FINAL && project.getApproveStatusFinal() == 2)) { + throw new Exception(projectName + "不在项目人力成本的可导入状态"); } if (projectSet.contains(projectName)) { throw new Exception("项目名称存在重复!"); @@ -180,6 +180,11 @@ public class HumanCostService { errorList.add(e.getMessage()); } } + if (errorCount > 0) { + final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("失败:%d", errorCount)); + msg.setData(errorList); + return msg; + } for (String key : staffCost.keySet()) { try { if (staffCost.getOrDefault(key, BigDecimal.valueOf(0)).compareTo(BigDecimal.valueOf(1)) != 0) { @@ -195,10 +200,14 @@ public class HumanCostService { int row = projectUserTimeRepository.deleteByTime(date); logger.info("删除重复条目:" + row + "条"); projectUserTimeRepository.save(saveList); + final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("成功:%d, 失败:%d", successCount, errorCount)); + msg.setData(errorList); + return msg; + } else { + final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("失败:%d", errorCount)); + msg.setData(errorList); + return msg; } - final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("成功:%d, 失败:%d", successCount, errorCount)); - msg.setData(errorList); - return msg; } public String[] getHeaders(List staff) { @@ -241,11 +250,11 @@ public class HumanCostService { } Admin admin = InterfaceUtil.getAdmin(); List projectList = null; - if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) { - String sql = "select proj.id, proj.name from project proj where (proj.status = ? or (proj.status = ? and proj.approve_status_budget = ?)) order by proj.id asc"; - projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, Project.STATUS_BUDGET, 2); + if (admin.getRoleLevel() <= 3 || admin.getRoleLevel() == 6) { + String sql = "select proj.id, proj.name from project proj where (proj.status = ? or (proj.status = ? and proj.approve_status_budget = ?) or (proj.status = ? and proj.approve_status_final <> ?)) order by proj.id asc"; + projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, Project.STATUS_BUDGET, 2, Project.STATUS_FINAL, 2); } else { - String sql = "select proj.id, proj.name from project proj where (proj.status = ? or (proj.status = ? and proj.approve_status_budget = ?)) and " + + String sql = "select proj.id, proj.name from project proj where (proj.status = ? or (proj.status = ? and proj.approve_status_budget = ?) or (proj.status = ? and proj.approve_status_final <> ?)) and " + " (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) order by proj.id asc"; //项目可见性,根据角色和人员id int roleId = admin.getRoleId(); diff --git a/src/main/resources/static/assets/js/project_final.js b/src/main/resources/static/assets/js/project_final.js index d4fb114..5b8ad68 100644 --- a/src/main/resources/static/assets/js/project_final.js +++ b/src/main/resources/static/assets/js/project_final.js @@ -2,32 +2,50 @@ function calculateFinal() { $("input[name='incomeDeviceFinalTotal']").change(function () { calIncomeFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='incomeEngineerFinalTotal']").change(function () { calIncomeFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='incomeServiceFinalTotal']").change(function () { calIncomeFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='costPurchaseDeviceFinalTotal']").change(function () { calCostFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='costPurchaseBuildFinalTotal']").change(function () { calCostFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='costPurchaseServiceFinalTotal']").change(function () { calCostFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='costPurchaseOtherFinalTotal']").change(function () { calCostFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='costProjectManageFinalTotal']").change(function () { calCostFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); $("input[name='costOtherFinalTotal']").change(function () { calCostFinalTotal(); + calNetMarginFinalTotal(); + calNetMarginProfitMargin(); }); @@ -69,7 +87,7 @@ function calculateFinal() { calNetIncreaseMonetaryFunds(); }); $("input[name='taxCost']").change(function () { - // calCashFluxFinalTotal(); + // calCashFluxFinalTotal(); calNetCashFlow(); calNetIncreaseMonetaryFunds(); }); @@ -79,10 +97,10 @@ function calculateFinal() { calNetIncreaseMonetaryFunds(); }); $("input[name='netCashFlow']").change(function () { - // calCashFluxFinalTotal(); + // calCashFluxFinalTotal(); }); $("input[name='cashInflowFromInvestingActivities']").change(function () { - // calCashFluxFinalTotal(); + // calCashFluxFinalTotal(); calNetCashFromInvestingActivities(); calNetIncreaseMonetaryFunds(); }) @@ -92,7 +110,7 @@ function calculateFinal() { calNetIncreaseMonetaryFunds(); }); $("input[name='netCashFromInvestingActivities']").change(function () { - // calCashFluxFinalTotal(); + // calCashFluxFinalTotal(); }); $("input[name='financingCapitalInflow']").change(function () { //calCashFluxFinalTotal(); @@ -128,11 +146,11 @@ function calNetCashFlow() { var netCashFlow = $("input[name='netCashFlow']"); - if(saleIncomeCash && taxReturn && earnestMoneyIncome - && purchaseCost && taxCost && earnestMoneyCost){ - netCashFlow.val(parseFloat(saleIncomeCash)+parseFloat(taxReturn)+parseFloat(earnestMoneyIncome) - -parseFloat(purchaseCost)-parseFloat(taxCost)-parseFloat(earnestMoneyCost)); - }else { + if (saleIncomeCash && taxReturn && earnestMoneyIncome + && purchaseCost && taxCost && earnestMoneyCost) { + netCashFlow.val(parseFloat(saleIncomeCash) + parseFloat(taxReturn) + parseFloat(earnestMoneyIncome) + - parseFloat(purchaseCost) - parseFloat(taxCost) - parseFloat(earnestMoneyCost)); + } else { netCashFlow.val(""); } } @@ -146,9 +164,9 @@ function calNetCashFromInvestingActivities() { var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']"); - if(cashInflowFromInvestingActivities && cashOutflowFromInvestingActivities ){ - netCashFromInvestingActivities.val(parseFloat(cashInflowFromInvestingActivities)-parseFloat(cashOutflowFromInvestingActivities)); - }else { + if (cashInflowFromInvestingActivities && cashOutflowFromInvestingActivities) { + netCashFromInvestingActivities.val(parseFloat(cashInflowFromInvestingActivities) - parseFloat(cashOutflowFromInvestingActivities)); + } else { netCashFromInvestingActivities.val(""); } } @@ -162,9 +180,9 @@ function calFinancingCapitalCashflow() { var financingCapitalCashflow = $("input[name='financingCapitalCashflow']"); - if(financingCapitalInflow && financingCapitalOutflow ){ - financingCapitalCashflow.val(parseFloat(financingCapitalInflow)-parseFloat(financingCapitalOutflow)); - }else { + if (financingCapitalInflow && financingCapitalOutflow) { + financingCapitalCashflow.val(parseFloat(financingCapitalInflow) - parseFloat(financingCapitalOutflow)); + } else { financingCapitalCashflow.val(""); } } @@ -176,9 +194,9 @@ function calNetIncreaseMonetaryFunds() { var netIncreaseMonetaryFunds = $("input[name='netIncreaseMonetaryFunds']"); - if(netCashFlow && netCashFromInvestingActivities && financingCapitalCashflow){ - netIncreaseMonetaryFunds.val(parseFloat(netCashFlow)+parseFloat(netCashFromInvestingActivities)+parseFloat(financingCapitalCashflow)); - }else { + if (netCashFlow && netCashFromInvestingActivities && financingCapitalCashflow) { + netIncreaseMonetaryFunds.val(parseFloat(netCashFlow) + parseFloat(netCashFromInvestingActivities) + parseFloat(financingCapitalCashflow)); + } else { netIncreaseMonetaryFunds.val(""); } } @@ -193,9 +211,9 @@ function calIncomeFinalTotal() { var incomeFinalTotal = $("input[name='incomeFinalTotal']"); - if(incomeDeviceFinalTotal && incomeEngineerFinalTotal && incomeServiceFinalTotal){ - incomeFinalTotal.val(parseFloat(incomeDeviceFinalTotal)+parseFloat(incomeEngineerFinalTotal)+parseFloat(incomeServiceFinalTotal)); - }else { + if (incomeDeviceFinalTotal && incomeEngineerFinalTotal && incomeServiceFinalTotal) { + incomeFinalTotal.val(parseFloat(incomeDeviceFinalTotal) + parseFloat(incomeEngineerFinalTotal) + parseFloat(incomeServiceFinalTotal)); + } else { incomeFinalTotal.val(""); } } @@ -213,11 +231,11 @@ function calCostFinalTotal() { var costFinalTotal = $("input[name='costFinalTotal']"); - if(costPurchaseDeviceFinalTotal && costPurchaseBuildFinalTotal && costPurchaseServiceFinalTotal && - costPurchaseOtherFinalTotal && costProjectManageFinalTotal && costOtherFinalTotal){ - costFinalTotal.val(parseFloat(costPurchaseDeviceFinalTotal)+parseFloat(costPurchaseBuildFinalTotal)+parseFloat(costPurchaseServiceFinalTotal)+ - parseFloat(costPurchaseOtherFinalTotal)+parseFloat(costProjectManageFinalTotal)+parseFloat(costOtherFinalTotal)); - }else { + if (costPurchaseDeviceFinalTotal && costPurchaseBuildFinalTotal && costPurchaseServiceFinalTotal && + costPurchaseOtherFinalTotal && costProjectManageFinalTotal && costOtherFinalTotal) { + costFinalTotal.val(parseFloat(costPurchaseDeviceFinalTotal) + parseFloat(costPurchaseBuildFinalTotal) + parseFloat(costPurchaseServiceFinalTotal) + + parseFloat(costPurchaseOtherFinalTotal) + parseFloat(costProjectManageFinalTotal) + parseFloat(costOtherFinalTotal)); + } else { costFinalTotal.val(""); } } @@ -233,9 +251,9 @@ function calManageFinalTotal() { var manageFinalTotal = $("input[name='manageFinalTotal']"); - if(costExpropriationFinalTotal && costCompanyManageFinalTotal && costIncomeTaxFinalTotal){ - manageFinalTotal.val(parseFloat(costExpropriationFinalTotal)+parseFloat(costCompanyManageFinalTotal)+parseFloat(costIncomeTaxFinalTotal)); - }else { + if (costExpropriationFinalTotal && costCompanyManageFinalTotal && costIncomeTaxFinalTotal) { + manageFinalTotal.val(parseFloat(costExpropriationFinalTotal) + parseFloat(costCompanyManageFinalTotal) + parseFloat(costIncomeTaxFinalTotal)); + } else { manageFinalTotal.val(""); } } @@ -261,17 +279,17 @@ function calCashFluxFinalTotal() { var cashFluxFinalTotal = $("input[name='cashFluxFinalTotal']"); - if(saleIncomeCash && taxReturn && earnestMoneyIncome && - purchaseCost && taxCost && earnestMoneyCost&& + if (saleIncomeCash && taxReturn && earnestMoneyIncome && + purchaseCost && taxCost && earnestMoneyCost && netCashFlow && cashInflowFromInvestingActivities && cashOutflowFromInvestingActivities && netCashFromInvestingActivities && financingCapitalInflow && financingCapitalOutflow - && financingCapitalCashflow && netIncreaseMonetaryFunds){ - cashFluxFinalTotal.val(parseFloat(saleIncomeCash)+parseFloat(taxReturn)+parseFloat(earnestMoneyIncome)+ - parseFloat(purchaseCost)+parseFloat(taxCost)+parseFloat(earnestMoneyCost)+ - parseFloat(netCashFlow)+parseFloat(cashInflowFromInvestingActivities)+parseFloat(cashOutflowFromInvestingActivities)+ - parseFloat(netCashFromInvestingActivities)+parseFloat(financingCapitalInflow)+parseFloat(financingCapitalOutflow)+ - parseFloat(financingCapitalCashflow)+parseFloat(netIncreaseMonetaryFunds)); - }else { + && financingCapitalCashflow && netIncreaseMonetaryFunds) { + cashFluxFinalTotal.val(parseFloat(saleIncomeCash) + parseFloat(taxReturn) + parseFloat(earnestMoneyIncome) + + parseFloat(purchaseCost) + parseFloat(taxCost) + parseFloat(earnestMoneyCost) + + parseFloat(netCashFlow) + parseFloat(cashInflowFromInvestingActivities) + parseFloat(cashOutflowFromInvestingActivities) + + parseFloat(netCashFromInvestingActivities) + parseFloat(financingCapitalInflow) + parseFloat(financingCapitalOutflow) + + parseFloat(financingCapitalCashflow) + parseFloat(netIncreaseMonetaryFunds)); + } else { cashFluxFinalTotal.val(""); } } @@ -286,9 +304,9 @@ function calGrossProfitFinalTotal() { var grossProfitFinalTotal = $("input[name='grossProfitFinalTotal']"); - if(incomeFinalTotal && costFinalTotal && costExpropriationFinalTotal){ - grossProfitFinalTotal.val(parseFloat(incomeFinalTotal)-parseFloat(costFinalTotal)-parseFloat(costExpropriationFinalTotal)); - }else { + if (incomeFinalTotal && costFinalTotal && costExpropriationFinalTotal) { + grossProfitFinalTotal.val(parseFloat(incomeFinalTotal) - parseFloat(costFinalTotal) - parseFloat(costExpropriationFinalTotal)); + } else { grossProfitFinalTotal.val(""); } } @@ -301,9 +319,9 @@ function calGrossProfitProfitMargin() { var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); var grossProfitProfitMargin = $("input[name='grossProfitProfitMargin']"); - if(grossProfitFinalTotal && incomeFinalTotal){ - grossProfitProfitMargin.val(f2(grossProfitFinalTotal) / f2(incomeFinalTotal)); - }else { + if (grossProfitFinalTotal && incomeFinalTotal) { + grossProfitProfitMargin.val(100 * grossProfitFinalTotal / incomeFinalTotal); + } else { grossProfitProfitMargin.val(""); } } @@ -318,9 +336,9 @@ function calContributionMarginFinalTotal() { var contributionMarginFinalTotal = $("input[name='contributionMarginFinalTotal']"); - if(grossProfitFinalTotal && costCompanyManageFinalTotal ){ - contributionMarginFinalTotal.val(parseFloat(grossProfitFinalTotal)-parseFloat(costCompanyManageFinalTotal)); - }else { + if (grossProfitFinalTotal && costCompanyManageFinalTotal) { + contributionMarginFinalTotal.val(parseFloat(grossProfitFinalTotal) - parseFloat(costCompanyManageFinalTotal)); + } else { contributionMarginFinalTotal.val(""); } } @@ -333,9 +351,9 @@ function calContributionMarginProfitMargin() { var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); var contributionMarginProfitMargin = $("input[name='contributionMarginProfitMargin']"); - if(contributionMarginFinalTotal && incomeFinalTotal){ - contributionMarginProfitMargin.val(f2(contributionMarginFinalTotal) / f2(incomeFinalTotal)); - }else { + if (contributionMarginFinalTotal && incomeFinalTotal) { + contributionMarginProfitMargin.val(100 * contributionMarginFinalTotal / incomeFinalTotal); + } else { contributionMarginProfitMargin.val(""); } } @@ -350,9 +368,9 @@ function calNetMarginFinalTotal() { var netMarginFinalTotal = $("input[name='netMarginFinalTotal']"); - if(contributionMarginFinalTotal && costIncomeTaxFinalTotal ){ - netMarginFinalTotal.val(parseFloat(contributionMarginFinalTotal)-parseFloat(costIncomeTaxFinalTotal)); - }else { + if (contributionMarginFinalTotal && costIncomeTaxFinalTotal) { + netMarginFinalTotal.val(parseFloat(contributionMarginFinalTotal) - parseFloat(costIncomeTaxFinalTotal)); + } else { netMarginFinalTotal.val(""); } } @@ -365,9 +383,9 @@ function calNetMarginProfitMargin() { var incomeFinalTotal = $("input[name='incomeFinalTotal']").val(); var netMarginProfitMargin = $("input[name='netMarginProfitMargin']"); - if(netMarginFinalTotal && incomeFinalTotal){ - netMarginProfitMargin.val(f2(netMarginFinalTotal) / f2(incomeFinalTotal)); - }else { + if (netMarginFinalTotal && incomeFinalTotal) { + netMarginProfitMargin.val(100 * netMarginFinalTotal / incomeFinalTotal); + } else { netMarginProfitMargin.val(""); } } diff --git a/src/main/resources/templates/admin/project_approve.ftl b/src/main/resources/templates/admin/project_approve.ftl index 8612d96..febf457 100644 --- a/src/main/resources/templates/admin/project_approve.ftl +++ b/src/main/resources/templates/admin/project_approve.ftl @@ -201,21 +201,21 @@
*垫资利息
- ${project.advanceInterestAmount}元 + ${Utils.format(project.advanceInterestAmount)}
*垫资峰值
- ${project.advancePeakAmount}元 + ${Utils.format(project.advancePeakAmount)}
*合同金额
- ${project.contractAmount}元 + ${Utils.format(project.contractAmount)}
@@ -229,14 +229,14 @@
*华智产品金额
- ${project.huazhiProductAmount!}元 + ${Utils.format(project.huazhiProductAmount)}
*紫光其他产品金额
- ${project.ziguangOtherAmount!}元 + ${Utils.format(project.ziguangOtherAmount)}
@@ -643,7 +643,7 @@
- +
@@ -1883,12 +1883,12 @@ - <#-- + - --> +