package cn.palmte.work.service; import cn.palmte.work.bean.BudgetBean; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import top.jfunc.common.utils.CollectionUtil; 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; 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 incomes = projectBudgetIncomeRepository.findAllByProjectIdEquals(project.getId()); List collect = incomes.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_DEVICE).collect(Collectors.toList()); if(CollectionUtil.isEmpty(collect)){ //要么全部,要么没有 return budgetBean; } ProjectBudgetIncome projectBudgetIncomeDevice = collect.get(0); budgetBean.setIncomeDeviceTaxInclude(projectBudgetIncomeDevice.getIncomeTaxInclude()); budgetBean.setIncomeDeviceTaxExclude(projectBudgetIncomeDevice.getIncomeTaxExclude()); ProjectBudgetIncome projectBudgetIncomeEngineer = incomes.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_ENGINEER).collect(Collectors.toList()).get(0); budgetBean.setIncomeEngineerTaxInclude(projectBudgetIncomeEngineer.getIncomeTaxInclude()); budgetBean.setIncomeEngineerTaxExclude(projectBudgetIncomeEngineer.getIncomeTaxExclude()); ProjectBudgetIncome projectBudgetIncomeService = incomes.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_SERVICE).collect(Collectors.toList()).get(0); budgetBean.setIncomeServiceTaxInclude(projectBudgetIncomeService.getIncomeTaxInclude()); budgetBean.setIncomeServiceTaxExclude(projectBudgetIncomeService.getIncomeTaxExclude()); List costs = projectBudgetCostRepository.findAllByProjectIdEquals(project.getId()); ProjectBudgetCost projectBudgetCostDevice = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_DEVICE).collect(Collectors.toList()).get(0); budgetBean.setCostPurchaseDeviceTaxInclude(projectBudgetCostDevice.getCostTaxInclude()); budgetBean.setCostPurchaseDeviceTaxExclude(projectBudgetCostDevice.getCostTaxExclude()); ProjectBudgetCost projectBudgetCostBuild = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_BUILDING).collect(Collectors.toList()).get(0); budgetBean.setCostPurchaseBuildTaxInclude(projectBudgetCostBuild.getCostTaxInclude()); budgetBean.setCostPurchaseBuildTaxExclude(projectBudgetCostBuild.getCostTaxExclude()); ProjectBudgetCost projectBudgetCostService = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_SERVICE).collect(Collectors.toList()).get(0); budgetBean.setCostPurchaseServiceTaxInclude(projectBudgetCostService.getCostTaxInclude()); budgetBean.setCostPurchaseServiceTaxExclude(projectBudgetCostService.getCostTaxExclude()); ProjectBudgetCost projectBudgetCostOther = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER).collect(Collectors.toList()).get(0); budgetBean.setCostPurchaseOtherTaxInclude(projectBudgetCostOther.getCostTaxInclude()); budgetBean.setCostPurchaseOtherTaxExclude(projectBudgetCostOther.getCostTaxExclude()); ProjectBudgetCost projectBudgetCostProjectManage = costs.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_PROJECT_MANAGE).collect(Collectors.toList()).get(0); /*budgetBean.setCostProjectManageTaxInclude(projectBudgetCostProjectManage.getCostTaxInclude());*/ budgetBean.setCostProjectManageTaxExclude(projectBudgetCostProjectManage.getCostTaxExclude()); 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 manages = projectBudgetCostManageRepository.findAllByProjectIdEquals(project.getId()); ProjectBudgetCostManage costManageExpropriation = manages.stream().filter(d -> d.getType() == ProjectBudgetCostManage.TYPE_EXPROPRIATION).collect(Collectors.toList()).get(0); budgetBean.setCostExpropriationTaxExclude(costManageExpropriation.getCostTaxExclude()); ProjectBudgetCostManage costManageCompany = manages.stream().filter(d -> d.getType() == ProjectBudgetCostManage.TYPE_COMPANY_MANAGE).collect(Collectors.toList()).get(0); budgetBean.setCostCompanyManageTaxExclude(costManageCompany.getCostTaxExclude()); return budgetBean; } /** * 清空项目的收入明细 */ public void clearBudgetIncomeDetail(Project project){ List incomeDetails = projectBudgetIncomeDetailRepository.findAllByProjectIdEquals(project.getId()); if(CollectionUtil.isNotEmpty(incomeDetails)){ projectBudgetIncomeDetailRepository.deleteInBatch(incomeDetails); } } /** * 保存项目的收入明细 */ public void saveBudgetIncomeDetail(Project project, List detailList){ 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); } } /** * 保存项目的成本明细 */ public void saveBudgetCostDetail(Project project, List detailList){ 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); } } /** * 保存项目的项目管理成本明细 */ public void saveBudgetCostProjectManageDetail(Project project, List detailList){ if(CollectionUtil.isNotEmpty(detailList)){ for (ProjectBudgetCostProjectManageDetail projectBudgetCostProjectManageDetail : detailList) { projectBudgetCostProjectManageDetail.setProjectId(project.getId()); } projectBudgetCostProjectManageDetailRepository.save(detailList); } } public List getBudgetCostProjectManageDetail(Project project){ return projectBudgetCostProjectManageDetailRepository.findAllByProjectIdEquals(project.getId()); } }