package cn.palmte.work.service; import cn.palmte.work.bean.BudgetBean; import cn.palmte.work.bean.ProjectConfigBean; import cn.palmte.work.bean.ProjectUnderwrittenPlanStatisticBean; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 项目预算service * @author xiongshiyan at 2021/10/29 , contact me with email yanshixiong@126.com or phone 15208384257 */ @Service public class ProjectBudgetService { @Autowired private ProjectBudgetIncomeRepository projectBudgetIncomeRepository; @Autowired private ProjectBudgetCostRepository projectBudgetCostRepository; @Autowired private ProjectBudgetCostManageRepository projectBudgetCostManageRepository; @Autowired private ProjectBudgetIncomeDetailRepository projectBudgetIncomeDetailRepository; @Autowired private ProjectBudgetCostDetailRepository projectBudgetCostDetailRepository; @Autowired private ProjectBudgetCostProjectManageDetailRepository projectBudgetCostProjectManageDetailRepository; @Autowired private ProjectBudgetPlanDetailRepository projectBudgetPlanDetailRepository; @Value("#{'${fourcal.fixedprojectmanagedetails}'.split('\\|')}") private String[] fixedProjectManageDetails; public void clearBudget(Project project){ List incomes = projectBudgetIncomeRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(incomes)){ projectBudgetIncomeRepository.deleteInBatch(incomes); } List costs = projectBudgetCostRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(costs)){ projectBudgetCostRepository.deleteInBatch(costs); } List costManages = projectBudgetCostManageRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(costManages)){ projectBudgetCostManageRepository.deleteInBatch(costManages); } } public void saveBudget(Project project, BudgetBean budgetBean){ //收入记录 income(project, budgetBean); //成本记录 cost(project, budgetBean); //管理记录 costManage(project, budgetBean); } private void cost(Project project, BudgetBean budgetBean) { ProjectBudgetCost projectBudgetCostDevice = new ProjectBudgetCost(); projectBudgetCostDevice.setProjectId(project.getId()); projectBudgetCostDevice.setFee(ProjectBudgetCost.FEE_PURCHASE); projectBudgetCostDevice.setType(ProjectBudgetCost.TYPE_DEVICE); projectBudgetCostDevice.setCostTaxInclude(budgetBean.getCostPurchaseDeviceTaxInclude()); projectBudgetCostDevice.setCostTaxExclude(budgetBean.getCostPurchaseDeviceTaxExclude()); projectBudgetCostRepository.saveAndFlush(projectBudgetCostDevice); ProjectBudgetCost projectBudgetCostBuild = new ProjectBudgetCost(); projectBudgetCostBuild.setProjectId(project.getId()); projectBudgetCostBuild.setFee(ProjectBudgetCost.FEE_PURCHASE); projectBudgetCostBuild.setType(ProjectBudgetCost.TYPE_BUILDING); projectBudgetCostBuild.setCostTaxInclude(budgetBean.getCostPurchaseBuildTaxInclude()); projectBudgetCostBuild.setCostTaxExclude(budgetBean.getCostPurchaseBuildTaxExclude()); projectBudgetCostRepository.saveAndFlush(projectBudgetCostBuild); ProjectBudgetCost projectBudgetCostService = new ProjectBudgetCost(); projectBudgetCostService.setProjectId(project.getId()); projectBudgetCostService.setFee(ProjectBudgetCost.FEE_PURCHASE); projectBudgetCostService.setType(ProjectBudgetCost.TYPE_SERVICE); projectBudgetCostService.setCostTaxInclude(budgetBean.getCostPurchaseServiceTaxInclude()); projectBudgetCostService.setCostTaxExclude(budgetBean.getCostPurchaseServiceTaxExclude()); projectBudgetCostRepository.saveAndFlush(projectBudgetCostService); ProjectBudgetCost projectBudgetCostOther = new ProjectBudgetCost(); projectBudgetCostOther.setProjectId(project.getId()); projectBudgetCostOther.setFee(ProjectBudgetCost.FEE_PURCHASE); projectBudgetCostOther.setType(ProjectBudgetCost.TYPE_OTHER); projectBudgetCostOther.setCostTaxInclude(budgetBean.getCostPurchaseOtherTaxInclude()); projectBudgetCostOther.setCostTaxExclude(budgetBean.getCostPurchaseOtherTaxExclude()); projectBudgetCostRepository.saveAndFlush(projectBudgetCostOther); ProjectBudgetCost projectBudgetCostProject = new ProjectBudgetCost(); projectBudgetCostProject.setProjectId(project.getId()); projectBudgetCostProject.setFee(ProjectBudgetCost.FEE_PROJECT_MANAGE); projectBudgetCostProject.setType(ProjectBudgetCost.TYPE_PROJECT_MANAGE); /*projectBudgetCostProject.setCostTaxInclude(budgetBean.getCostProjectManageTaxInclude());*/ projectBudgetCostProject.setCostTaxExclude(budgetBean.getCostProjectManageTaxExclude()); projectBudgetCostRepository.saveAndFlush(projectBudgetCostProject); ProjectBudgetCost projectBudgetCostOtherOther = new ProjectBudgetCost(); projectBudgetCostOtherOther.setProjectId(project.getId()); projectBudgetCostOtherOther.setFee(ProjectBudgetCost.FEE_OTHER); projectBudgetCostOtherOther.setType(ProjectBudgetCost.TYPE_OTHER_OTHER); projectBudgetCostOtherOther.setCostTaxInclude(budgetBean.getCostOtherOtherTaxInclude()); projectBudgetCostOtherOther.setCostTaxExclude(budgetBean.getCostOtherOtherTaxExclude()); projectBudgetCostRepository.saveAndFlush(projectBudgetCostOtherOther); } private void costManage(Project project, BudgetBean budgetBean) { ProjectBudgetCostManage projectBudgetCostZijin = new ProjectBudgetCostManage(); projectBudgetCostZijin.setProjectId(project.getId()); projectBudgetCostZijin.setType(ProjectBudgetCostManage.TYPE_EXPROPRIATION); projectBudgetCostZijin.setCostTaxExclude(budgetBean.getCostExpropriationTaxExclude()); projectBudgetCostManageRepository.saveAndFlush(projectBudgetCostZijin); ProjectBudgetCostManage projectBudgetCostManage = new ProjectBudgetCostManage(); projectBudgetCostManage.setProjectId(project.getId()); projectBudgetCostManage.setType(ProjectBudgetCostManage.TYPE_COMPANY_MANAGE); projectBudgetCostManage.setCostTaxExclude(budgetBean.getCostCompanyManageTaxExclude()); projectBudgetCostManageRepository.saveAndFlush(projectBudgetCostManage); } private void income(Project project, BudgetBean budgetBean) { ProjectBudgetIncome projectBudgetIncomeDevice = new ProjectBudgetIncome(); projectBudgetIncomeDevice.setProjectId(project.getId()); projectBudgetIncomeDevice.setType(ProjectBudgetIncome.TYPE_DEVICE); projectBudgetIncomeDevice.setIncomeTaxInclude(budgetBean.getIncomeDeviceTaxInclude()); projectBudgetIncomeDevice.setIncomeTaxExclude(budgetBean.getIncomeDeviceTaxExclude()); projectBudgetIncomeRepository.saveAndFlush(projectBudgetIncomeDevice); ProjectBudgetIncome projectBudgetIncomeEngineer = new ProjectBudgetIncome(); projectBudgetIncomeEngineer.setProjectId(project.getId()); projectBudgetIncomeEngineer.setType(ProjectBudgetIncome.TYPE_ENGINEER); projectBudgetIncomeEngineer.setIncomeTaxInclude(budgetBean.getIncomeEngineerTaxInclude()); projectBudgetIncomeEngineer.setIncomeTaxExclude(budgetBean.getIncomeEngineerTaxExclude()); projectBudgetIncomeRepository.saveAndFlush(projectBudgetIncomeEngineer); ProjectBudgetIncome projectBudgetIncomeService = new ProjectBudgetIncome(); projectBudgetIncomeService.setProjectId(project.getId()); projectBudgetIncomeService.setType(ProjectBudgetIncome.TYPE_SERVICE); projectBudgetIncomeService.setIncomeTaxInclude(budgetBean.getIncomeServiceTaxInclude()); projectBudgetIncomeService.setIncomeTaxExclude(budgetBean.getIncomeServiceTaxExclude()); projectBudgetIncomeRepository.saveAndFlush(projectBudgetIncomeService); } /** * 其实最好是通过明细表生成,不然可能有数据不一致的情况 */ public BudgetBean getBudget(Project project) { BudgetBean budgetBean = new BudgetBean(); List incomeDetails = projectBudgetIncomeDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(incomeDetails)){ //设备类收入,含税和不含税 List collectDevice = incomeDetails.stream().filter(d -> d.getType() == ProjectBudgetIncomeDetail.TYPE_DEVICE).collect(Collectors.toList()); budgetBean.setIncomeDeviceTaxInclude(getIncomeTotalTaxInclude(collectDevice)); budgetBean.setIncomeDeviceTaxExclude(getIncomeTotalTaxExclude(collectDevice)); //工程类收入,含税和不含税 List collectEngineer = incomeDetails.stream().filter(d -> d.getType() == ProjectBudgetIncomeDetail.TYPE_ENGINEER).collect(Collectors.toList()); budgetBean.setIncomeEngineerTaxInclude(getIncomeTotalTaxInclude(collectEngineer)); budgetBean.setIncomeEngineerTaxExclude(getIncomeTotalTaxExclude(collectEngineer)); //服务类收入,含税和不含税 List collectService = incomeDetails.stream().filter(d -> d.getType() == ProjectBudgetIncomeDetail.TYPE_SERVICE).collect(Collectors.toList()); budgetBean.setIncomeServiceTaxInclude(getIncomeTotalTaxInclude(collectService)); budgetBean.setIncomeServiceTaxExclude(getIncomeTotalTaxExclude(collectService)); } List projectBudgetCostDetails = projectBudgetCostDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(projectBudgetCostDetails)){ //采购成本-设备,含税和不含税 List collectDevice = projectBudgetCostDetails.stream().filter(d -> d.getType() == ProjectBudgetCostDetail.TYPE_DEVICE).collect(Collectors.toList()); budgetBean.setCostPurchaseDeviceTaxInclude(getCostTotalTaxInclude(collectDevice)); budgetBean.setCostPurchaseDeviceTaxExclude(getCostTotalTaxExclude(collectDevice)); //采购成本-施工,含税和不含税 List collectBuild = projectBudgetCostDetails.stream().filter(d -> d.getType() == ProjectBudgetCostDetail.TYPE_BUILD).collect(Collectors.toList()); budgetBean.setCostPurchaseBuildTaxInclude(getCostTotalTaxInclude(collectBuild)); budgetBean.setCostPurchaseBuildTaxExclude(getCostTotalTaxExclude(collectBuild)); //采购成本-服务,含税和不含税 List collectService = projectBudgetCostDetails.stream().filter(d -> d.getType() == ProjectBudgetCostDetail.TYPE_SERVICE).collect(Collectors.toList()); budgetBean.setCostPurchaseServiceTaxInclude(getCostTotalTaxInclude(collectService)); budgetBean.setCostPurchaseServiceTaxExclude(getCostTotalTaxExclude(collectService)); //采购成本-其他,含税和不含税 List collectOther = projectBudgetCostDetails.stream().filter(d -> d.getType() == ProjectBudgetCostDetail.TYPE_OHTER).collect(Collectors.toList()); budgetBean.setCostPurchaseOtherTaxInclude(getCostTotalTaxInclude(collectOther)); budgetBean.setCostPurchaseOtherTaxExclude(getCostTotalTaxExclude(collectOther)); } //项目管理成本 List projectManageDetails = projectBudgetCostProjectManageDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(projectManageDetails)){ budgetBean.setCostProjectManageTaxExclude(getCostProjectManageTotalTaxExclude(projectManageDetails)); } //其他其他成本 List costs = projectBudgetCostRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(costs)){ ProjectBudgetCost projectBudgetCostOtherOther = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER_OTHER).collect(Collectors.toList()).get(0); budgetBean.setCostOtherOtherTaxInclude(projectBudgetCostOtherOther.getCostTaxInclude()); budgetBean.setCostOtherOtherTaxExclude(projectBudgetCostOtherOther.getCostTaxExclude()); } //资金占用成本 List budgetPlanDetails = projectBudgetPlanDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(budgetPlanDetails)){ budgetBean.setCostExpropriationTaxExclude(getTotalCapitalInterest(budgetPlanDetails)); } //公司管理成本 List manages = projectBudgetCostManageRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(manages)){ ProjectBudgetCostManage costManageCompany = manages.stream().filter(d -> d.getType() == ProjectBudgetCostManage.TYPE_COMPANY_MANAGE).collect(Collectors.toList()).get(0); budgetBean.setCostCompanyManageTaxExclude(costManageCompany.getCostTaxExclude()); } return budgetBean; } private BigDecimal getIncomeTotalTaxInclude(List list){ BigDecimal total = new BigDecimal(0); if(CollectionUtil.isEmpty(list)){ return total; } for (ProjectBudgetIncomeDetail detail : list) { total = total.add(detail.getTotalTaxInclude()); } return total; } private BigDecimal getIncomeTotalTaxExclude(List list){ BigDecimal total = new BigDecimal(0); if(CollectionUtil.isEmpty(list)){ return total; } for (ProjectBudgetIncomeDetail detail : list) { total = total.add(detail.getTotalTaxExclude()); } return total; } private BigDecimal getCostTotalTaxInclude(List list){ BigDecimal total = new BigDecimal(0); if(CollectionUtil.isEmpty(list)){ return total; } for (ProjectBudgetCostDetail detail : list) { total = total.add(detail.getTotalTaxInclude()); } return total; } private BigDecimal getCostTotalTaxExclude(List list){ BigDecimal total = new BigDecimal(0); if(CollectionUtil.isEmpty(list)){ return total; } for (ProjectBudgetCostDetail detail : list) { total = total.add(detail.getTotalTaxExclude()); } return total; } private BigDecimal getCostProjectManageTotalTaxExclude(List list){ BigDecimal total = new BigDecimal(0); if(CollectionUtil.isEmpty(list)){ return total; } for (ProjectBudgetCostProjectManageDetail detail : list) { total = total.add(detail.getTotal()); } return total; } private BigDecimal getTotalCapitalInterest(List list){ BigDecimal total = new BigDecimal(0); if(CollectionUtil.isEmpty(list)){ return total; } for (ProjectBudgetPlanDetail detail : list) { total = total.add(detail.getCapitalInterest()); } return total; } /** * 清空项目的收入明细 */ public void clearBudgetIncomeDetail(Project project){ List incomeDetails = projectBudgetIncomeDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(incomeDetails)){ projectBudgetIncomeDetailRepository.deleteInBatch(incomeDetails); } } /** * 保存项目的收入明细 */ @Transactional(rollbackFor = RuntimeException.class) public void saveBudgetIncomeDetail(Project project, List detailList){ clearBudgetIncomeDetail(project); if(CollectionUtil.isNotEmpty(detailList)){ for (ProjectBudgetIncomeDetail projectBudgetIncomeDetail : detailList) { projectBudgetIncomeDetail.setProjectId(project.getId()); } projectBudgetIncomeDetailRepository.save(detailList); } } /** * 获取项目的收入明细 */ public List getBudgetIncomeDetail(Project project){ return projectBudgetIncomeDetailRepository.findAllByProjectIdEquals(project.getId()); } /** * 清空项目的成本明细 */ public void clearBudgetCostDetail(Project project){ List costDetails = projectBudgetCostDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(costDetails)){ projectBudgetCostDetailRepository.deleteInBatch(costDetails); } } /** * 保存项目的成本明细 */ @Transactional(rollbackFor = RuntimeException.class) public void saveBudgetCostDetail(Project project, List detailList){ clearBudgetCostDetail(project); if(CollectionUtil.isNotEmpty(detailList)){ for (ProjectBudgetCostDetail projectBudgetCostDetail : detailList) { projectBudgetCostDetail.setProjectId(project.getId()); } projectBudgetCostDetailRepository.save(detailList); } } /** * 获取项目的成本明细 */ public List getBudgetCostDetail(Project project){ return projectBudgetCostDetailRepository.findAllByProjectIdEquals(project.getId()); } /** * 清空项目的项目管理成本明细 */ public void clearBudgetCostProjectManageDetail(Project project){ List costDetails = projectBudgetCostProjectManageDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(costDetails)){ projectBudgetCostProjectManageDetailRepository.deleteInBatch(costDetails); } } /** * 保存项目的项目管理成本明细 */ @Transactional(rollbackFor = RuntimeException.class) public void saveBudgetCostProjectManageDetail(Project project, List detailList){ clearBudgetCostProjectManageDetail(project); if(CollectionUtil.isNotEmpty(detailList)){ for (ProjectBudgetCostProjectManageDetail projectBudgetCostProjectManageDetail : detailList) { projectBudgetCostProjectManageDetail.setProjectId(project.getId()); } projectBudgetCostProjectManageDetailRepository.save(detailList); } } /** * 获取项目管理明细 */ public List getBudgetCostProjectManageDetail(Project project){ List projectManageDetails = projectBudgetCostProjectManageDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(projectManageDetails)){ return projectManageDetails; }else { //默认必填的明细 return getFixedNotDeletable(); } } private List getFixedNotDeletable() { List projectManageDetails = new ArrayList<>(6); for (String fixedProjectManageDetail : fixedProjectManageDetails) { String[] split = fixedProjectManageDetail.split(","); ProjectBudgetCostProjectManageDetail detail = new ProjectBudgetCostProjectManageDetail(); detail.setType(Integer.parseInt(split[0])); detail.setName(split[1]); detail.setPrice(new BigDecimal(0)); detail.setAmount(0); detail.setDeletable(0); projectManageDetails.add(detail); } return projectManageDetails; } /** * 清空项目的资金计划明细 */ public void clearBudgetPlanDetail(Project project){ List costDetails = projectBudgetPlanDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(costDetails)){ projectBudgetPlanDetailRepository.deleteInBatch(costDetails); } } /** * 保存项目的资金计划明细 */ @Transactional(rollbackFor = RuntimeException.class) public void saveBudgetPlanDetail(Project project, List detailList){ clearBudgetPlanDetail(project); if(CollectionUtil.isNotEmpty(detailList)){ for (ProjectBudgetPlanDetail projectBudgetPlanDetail : detailList) { projectBudgetPlanDetail.setProjectId(project.getId()); projectBudgetPlanDetail.setUnderwrittenTaxRate(project.getUnderwrittenTaxRate()); } projectBudgetPlanDetailRepository.save(detailList); } } /** * 获取资金计划数据 */ public List getProjectBudgetPlanDetails(Project project){ return projectBudgetPlanDetailRepository.findAllByProjectIdEquals(project.getId()); } /** * 根据每个月的计算资金计划的总 */ 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); BigDecimal earnestMoneyCost = new BigDecimal(0); BigDecimal totalCost = new BigDecimal(0); BigDecimal saleIncome = new BigDecimal(0); BigDecimal earnestMoneyIncome = new BigDecimal(0); BigDecimal totalIncome = new BigDecimal(0); BigDecimal fundBalance = new BigDecimal(0); BigDecimal capitalInterest = new BigDecimal(0); BigDecimal underwrittenPlan = new BigDecimal(0); BigDecimal repaymentPlan = new BigDecimal(0); /*BigDecimal underwrittenTaxRate = project.getUnderwrittenTaxRate();*/ if(CollectionUtil.isNotEmpty(projectBudgetPlanDetails)){ for (ProjectBudgetPlanDetail budgetPlan : projectBudgetPlanDetails) { deviceCost = deviceCost.add(budgetPlan.getDeviceCost()); engineerCost = engineerCost.add(budgetPlan.getEngineerCost()); projectManageCost = projectManageCost.add(budgetPlan.getProjectManageCost()); earnestMoneyCost = earnestMoneyCost.add(budgetPlan.getEarnestMoneyCost()); totalCost = totalCost.add(budgetPlan.getTotalCost()); saleIncome = saleIncome.add(budgetPlan.getSaleIncome()); earnestMoneyIncome = earnestMoneyIncome.add(budgetPlan.getEarnestMoneyIncome()); totalIncome = totalIncome.add(budgetPlan.getTotalIncome()); /*fundBalance = fundBalance.add(budgetPlan.getFundBalance());*/ capitalInterest = capitalInterest.add(budgetPlan.getCapitalInterest()); underwrittenPlan = underwrittenPlan.add(budgetPlan.getUnderwrittenPlan()); repaymentPlan = repaymentPlan.add(budgetPlan.getRepaymentPlan()); } } //总余额等于总收入-总支出 fundBalance = totalIncome.subtract(totalCost); 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.setUnderwrittenTaxRate(underwrittenTaxRate);*/ projectBudgetPlanDetail.setCapitalInterest(capitalInterest); projectBudgetPlanDetail.setUnderwrittenPlan(underwrittenPlan); projectBudgetPlanDetail.setRepaymentPlan(repaymentPlan); return projectBudgetPlanDetail; } public ProjectConfigBean getProjectConfigBeanConfig(){ //TODO 从数据库配置中来 ProjectConfigBean projectConfigBean = new ProjectConfigBean(); projectConfigBean.setUnderwrittenTaxRate(new BigDecimal("5.66")); projectConfigBean.setProjectContributionProfitRateThreshold(new BigDecimal("5")); return projectConfigBean; } /** * 根据资金计划获取资金使用统计值 * 月份去峰值月份 * 峰值累计 * 资金利息累计 */ public ProjectUnderwrittenPlanStatisticBean getProjectUnderwrittenPlanStatisticBean(List projectBudgetPlanDetails){ ProjectUnderwrittenPlanStatisticBean bean = new ProjectUnderwrittenPlanStatisticBean(); if(CollectionUtil.isEmpty(projectBudgetPlanDetails)){ return bean; } BigDecimal amount = new BigDecimal(0); BigDecimal capitalInterest = new BigDecimal(0); BigDecimal max = new BigDecimal(0); String maxMonth = ""; for (ProjectBudgetPlanDetail projectBudgetPlanDetail : projectBudgetPlanDetails) { capitalInterest = capitalInterest.add(projectBudgetPlanDetail.getCapitalInterest()); BigDecimal underwrittenPlan = projectBudgetPlanDetail.getUnderwrittenPlan(); amount = amount.add(underwrittenPlan); if(underwrittenPlan.compareTo(max)>0){ max = underwrittenPlan; maxMonth = projectBudgetPlanDetail.getMonth(); } } bean.setMaxMonth(maxMonth); bean.setAmount(amount); bean.setCapitalInterest(capitalInterest); return bean; } }