483 lines
32 KiB
Java
483 lines
32 KiB
Java
package cn.palmte.work.service;
|
|
|
|
import cn.palmte.work.bean.*;
|
|
import cn.palmte.work.model.*;
|
|
import cn.palmte.work.utils.InterfaceUtil;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import top.jfunc.common.utils.CollectionUtil;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @author Yuanping Zhang
|
|
* @date 2021/11/15
|
|
*/
|
|
@Service
|
|
public class ProjectSettleService {
|
|
private static final Logger logger = LoggerFactory.getLogger(ProjectSettleService.class);
|
|
|
|
@Autowired
|
|
private ProjectSettleIncomeRepository projectSettleIncomeRepository;
|
|
|
|
@Autowired
|
|
private ProjectSettleCostRepository projectSettleCostRepository;
|
|
|
|
@Autowired
|
|
private ProjectSettleCostManageRepository projectSettleCostManageRepository;
|
|
|
|
@Autowired
|
|
private ProjectSettleProfitMarginRepository projectSettleProfitMarginRepository;
|
|
|
|
@Autowired
|
|
private ProjectSettleCashFlowRepository projectSettleCashFlowRepository;
|
|
|
|
@Autowired
|
|
private ProjectInstanceService projectInstanceService;
|
|
|
|
@Autowired
|
|
private ProjectService projectService;
|
|
|
|
|
|
public void save(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) {
|
|
//收入记录
|
|
income(project, settleBean, budgetBean, estimateBean, time);
|
|
//成本记录
|
|
cost(project, settleBean, budgetBean, estimateBean, time);
|
|
//管理记录
|
|
costManage(project, settleBean, budgetBean, estimateBean, time);
|
|
//利润记录
|
|
profit(project, settleBean, budgetBean, estimateBean, time);
|
|
//资金流量记录
|
|
cashFlow(project, settleBean, budgetBean, time);
|
|
|
|
projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_UNCOMMIT);
|
|
}
|
|
|
|
public void saveAndApprove(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) throws Exception{
|
|
//收入记录
|
|
income(project, settleBean, budgetBean, estimateBean, time);
|
|
//成本记录
|
|
cost(project, settleBean, budgetBean, estimateBean, time);
|
|
//管理记录
|
|
costManage(project, settleBean, budgetBean, estimateBean, time);
|
|
//利润记录
|
|
profit(project, settleBean, budgetBean, estimateBean, time);
|
|
//资金流量记录
|
|
cashFlow(project, settleBean, budgetBean, time);
|
|
|
|
projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING);
|
|
|
|
//发起结算流程
|
|
projectInstanceService.startSettleProcessInstance(project, InterfaceUtil.getAdmin());
|
|
|
|
}
|
|
|
|
|
|
public void clearSettle(Project project, String time){
|
|
List<ProjectSettleIncome> incomes = projectSettleIncomeRepository.findAllByProjectIdAndTime(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(incomes)){
|
|
projectSettleIncomeRepository.deleteInBatch(incomes);
|
|
}
|
|
|
|
List<ProjectSettleCost> costs = projectSettleCostRepository.findAllByProjectIdAndTime(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(costs)){
|
|
projectSettleCostRepository.deleteInBatch(costs);
|
|
}
|
|
|
|
List<ProjectSettleCostManage> costManages = projectSettleCostManageRepository.findAllByProjectIdAndTime(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(costManages)){
|
|
projectSettleCostManageRepository.deleteInBatch(costManages);
|
|
}
|
|
|
|
List<ProjectSettleProfitMargin> profitMargins = projectSettleProfitMarginRepository.findAllByProjectIdAndTime(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(profitMargins)){
|
|
projectSettleProfitMarginRepository.deleteInBatch(profitMargins);
|
|
}
|
|
|
|
List<ProjectSettleCashFlow> cashFlows = projectSettleCashFlowRepository.findAllByProjectIdAndTime(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(cashFlows)){
|
|
projectSettleCashFlowRepository.deleteInBatch(cashFlows);
|
|
}
|
|
}
|
|
|
|
private void cost(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) {
|
|
ProjectSettleCost projectSettleCostDevice = new ProjectSettleCost();
|
|
projectSettleCostDevice.setProjectId(project.getId());
|
|
projectSettleCostDevice.setFee(ProjectSettleCost.FEE_PURCHASE);
|
|
projectSettleCostDevice.setType(ProjectSettleCost.TYPE_DEVICE);
|
|
projectSettleCostDevice.setEstimate(estimateBean.getCostPurchaseDeviceEstimateTotal());
|
|
projectSettleCostDevice.setBudget(budgetBean.getCostPurchaseDeviceBudgetTotal());
|
|
projectSettleCostDevice.setCostTaxExclude(settleBean.getCostPurchaseDevice());
|
|
projectSettleCostDevice.setTime(time);
|
|
projectSettleCostRepository.saveAndFlush(projectSettleCostDevice);
|
|
|
|
ProjectSettleCost projectSettleCostBuild = new ProjectSettleCost();
|
|
projectSettleCostBuild.setProjectId(project.getId());
|
|
projectSettleCostBuild.setFee(ProjectSettleCost.FEE_PURCHASE);
|
|
projectSettleCostBuild.setType(ProjectSettleCost.TYPE_BUILDING);
|
|
projectSettleCostBuild.setCostTaxExclude(settleBean.getCostPurchaseBuild());
|
|
projectSettleCostBuild.setEstimate(estimateBean.getCostPurchaseBuildEstimateTotal());
|
|
projectSettleCostBuild.setBudget(budgetBean.getCostPurchaseBuildBudgetTotal());
|
|
projectSettleCostBuild.setTime(time);
|
|
projectSettleCostRepository.saveAndFlush(projectSettleCostBuild);
|
|
|
|
ProjectSettleCost projectSettleCostService = new ProjectSettleCost();
|
|
projectSettleCostService.setProjectId(project.getId());
|
|
projectSettleCostService.setFee(ProjectSettleCost.FEE_PURCHASE);
|
|
projectSettleCostService.setType(ProjectSettleCost.TYPE_SERVICE);
|
|
projectSettleCostService.setCostTaxExclude(settleBean.getCostPurchaseService());
|
|
projectSettleCostService.setEstimate(estimateBean.getCostPurchaseServiceEstimateTotal());
|
|
projectSettleCostService.setBudget(budgetBean.getCostPurchaseServiceBudgetTotal());
|
|
projectSettleCostService.setTime(time);
|
|
projectSettleCostRepository.saveAndFlush(projectSettleCostService);
|
|
|
|
ProjectSettleCost projectSettleCostOther = new ProjectSettleCost();
|
|
projectSettleCostOther.setProjectId(project.getId());
|
|
projectSettleCostOther.setFee(ProjectSettleCost.FEE_PURCHASE);
|
|
projectSettleCostOther.setType(ProjectSettleCost.TYPE_OTHER);
|
|
projectSettleCostOther.setCostTaxExclude(settleBean.getCostPurchaseOther());
|
|
projectSettleCostOther.setEstimate(estimateBean.getCostPurchaseOtherEstimateTotal());
|
|
projectSettleCostOther.setBudget(budgetBean.getCostPurchaseOtherBudgetTotal());
|
|
projectSettleCostOther.setTime(time);
|
|
projectSettleCostRepository.saveAndFlush(projectSettleCostOther);
|
|
|
|
ProjectSettleCost projectSettleCostProject = new ProjectSettleCost();
|
|
projectSettleCostProject.setProjectId(project.getId());
|
|
projectSettleCostProject.setFee(ProjectSettleCost.FEE_PROJECT_MANAGE);
|
|
projectSettleCostProject.setType(ProjectSettleCost.TYPE_PROJECT_MANAGE);
|
|
projectSettleCostProject.setCostTaxExclude(settleBean.getCostProjectManage());
|
|
projectSettleCostProject.setEstimate(estimateBean.getCostProjectManageEstimateTotal());
|
|
projectSettleCostProject.setBudget(budgetBean.getCostProjectManageBudgetTotal());
|
|
projectSettleCostProject.setTime(time);
|
|
projectSettleCostRepository.saveAndFlush(projectSettleCostProject);
|
|
|
|
ProjectSettleCost projectSettleCostOtherOther = new ProjectSettleCost();
|
|
projectSettleCostOtherOther.setProjectId(project.getId());
|
|
projectSettleCostOtherOther.setFee(ProjectSettleCost.FEE_OTHER);
|
|
projectSettleCostOtherOther.setType(ProjectSettleCost.TYPE_OTHER_OTHER);
|
|
projectSettleCostOtherOther.setCostTaxExclude(settleBean.getCostOther());
|
|
projectSettleCostOtherOther.setEstimate(estimateBean.getCostOtherEstimateTotal());
|
|
projectSettleCostOtherOther.setBudget(budgetBean.getCostOtherBudgetTotal());
|
|
projectSettleCostOtherOther.setTime(time);
|
|
projectSettleCostRepository.saveAndFlush(projectSettleCostOtherOther);
|
|
|
|
}
|
|
|
|
private void costManage(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) {
|
|
ProjectSettleCostManage projectSettleCostExpro = new ProjectSettleCostManage();
|
|
projectSettleCostExpro.setProjectId(project.getId());
|
|
projectSettleCostExpro.setType(ProjectSettleCostManage.TYPE_EXPROPRIATION);
|
|
projectSettleCostExpro.setCostTaxExclude(settleBean.getCostExpropriation());
|
|
projectSettleCostExpro.setEstimate(estimateBean.getCostExpropriationEstimateTotal());
|
|
projectSettleCostExpro.setBudget(budgetBean.getCostExpropriationBudgetTotal());
|
|
projectSettleCostExpro.setTime(time);
|
|
projectSettleCostManageRepository.saveAndFlush(projectSettleCostExpro);
|
|
|
|
ProjectSettleCostManage projectSettleCostManage = new ProjectSettleCostManage();
|
|
projectSettleCostManage.setProjectId(project.getId());
|
|
projectSettleCostManage.setType(ProjectSettleCostManage.TYPE_COMPANY_MANAGE);
|
|
projectSettleCostManage.setCostTaxExclude(settleBean.getCostCompanyManage());
|
|
projectSettleCostManage.setEstimate(estimateBean.getCostCompanyManageEstimateTotal());
|
|
projectSettleCostManage.setBudget(budgetBean.getCostCompanyManageBudgetTotal());
|
|
projectSettleCostManage.setTime(time);
|
|
projectSettleCostManageRepository.saveAndFlush(projectSettleCostManage);
|
|
|
|
ProjectSettleCostManage projectSettleCostIncomeTaxManage = new ProjectSettleCostManage();
|
|
projectSettleCostIncomeTaxManage.setProjectId(project.getId());
|
|
projectSettleCostIncomeTaxManage.setType(ProjectSettleCostManage.TYPE_INCOME_TAX);
|
|
projectSettleCostIncomeTaxManage.setCostTaxExclude(settleBean.getCostIncomeTax());
|
|
projectSettleCostIncomeTaxManage.setEstimate(new BigDecimal(0));
|
|
projectSettleCostIncomeTaxManage.setBudget(new BigDecimal(0));
|
|
projectSettleCostIncomeTaxManage.setTime(time);
|
|
projectSettleCostManageRepository.saveAndFlush(projectSettleCostIncomeTaxManage);
|
|
}
|
|
|
|
private void income(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) {
|
|
ProjectSettleIncome projectSettleIncomeDevice = new ProjectSettleIncome();
|
|
projectSettleIncomeDevice.setProjectId(project.getId());
|
|
projectSettleIncomeDevice.setType(ProjectSettleIncome.TYPE_DEVICE);
|
|
projectSettleIncomeDevice.setIncomeTaxExclude(settleBean.getIncomeDevice());
|
|
projectSettleIncomeDevice.setEstimate(estimateBean.getIncomeDeviceEstimateTotal());
|
|
projectSettleIncomeDevice.setBudget(budgetBean.getIncomeDeviceBudgetTotal());
|
|
projectSettleIncomeDevice.setTime(time);
|
|
projectSettleIncomeRepository.saveAndFlush(projectSettleIncomeDevice);
|
|
|
|
ProjectSettleIncome projectSettleIncomeEngineer = new ProjectSettleIncome();
|
|
projectSettleIncomeEngineer.setProjectId(project.getId());
|
|
projectSettleIncomeEngineer.setType(ProjectSettleIncome.TYPE_ENGINEER);
|
|
projectSettleIncomeEngineer.setIncomeTaxExclude(settleBean.getIncomeEngineer());
|
|
projectSettleIncomeEngineer.setEstimate(estimateBean.getIncomeEngineerEstimateTotal());
|
|
projectSettleIncomeEngineer.setBudget(budgetBean.getIncomeEngineerBudgetTotal());
|
|
projectSettleIncomeEngineer.setTime(time);
|
|
projectSettleIncomeRepository.saveAndFlush(projectSettleIncomeEngineer);
|
|
|
|
ProjectSettleIncome projectSettleIncomeService = new ProjectSettleIncome();
|
|
projectSettleIncomeService.setProjectId(project.getId());
|
|
projectSettleIncomeService.setType(ProjectSettleIncome.TYPE_SERVICE);
|
|
projectSettleIncomeService.setIncomeTaxExclude(settleBean.getIncomeService());
|
|
projectSettleIncomeService.setEstimate(estimateBean.getIncomeServiceEstimateTotal());
|
|
projectSettleIncomeService.setBudget(budgetBean.getIncomeServiceBudgetTotal());
|
|
projectSettleIncomeService.setTime(time);
|
|
projectSettleIncomeRepository.saveAndFlush(projectSettleIncomeService);
|
|
}
|
|
|
|
private void profit(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) {
|
|
ProjectSettleProfitMargin projectSettleGrossProfit = new ProjectSettleProfitMargin();
|
|
projectSettleGrossProfit.setProjectId(project.getId());
|
|
projectSettleGrossProfit.setType(ProjectSettleProfitMargin.TYPE_GROSS_PROFIT);
|
|
projectSettleGrossProfit.setAmount(settleBean.getGrossProfit());
|
|
projectSettleGrossProfit.setBudget(budgetBean.getGrossProfitBudgetTotal());
|
|
projectSettleGrossProfit.setEstimate(estimateBean.getGrossProfitEstimateTotal());
|
|
projectSettleGrossProfit.setTime(time);
|
|
projectSettleProfitMarginRepository.saveAndFlush(projectSettleGrossProfit);
|
|
|
|
ProjectSettleProfitMargin projectSettleContributionProfit = new ProjectSettleProfitMargin();
|
|
projectSettleContributionProfit.setProjectId(project.getId());
|
|
projectSettleContributionProfit.setType(ProjectSettleProfitMargin.TYPE_CONTRIBUTION_PROFIT);
|
|
projectSettleContributionProfit.setAmount(settleBean.getContributionProfit());
|
|
projectSettleContributionProfit.setBudget(budgetBean.getContributionProfitBudgetTotal());
|
|
projectSettleContributionProfit.setEstimate(estimateBean.getContributionProfitEstimateTotal());
|
|
projectSettleContributionProfit.setTime(time);
|
|
projectSettleProfitMarginRepository.saveAndFlush(projectSettleContributionProfit);
|
|
|
|
ProjectSettleProfitMargin projectSettleNetProfit = new ProjectSettleProfitMargin();
|
|
projectSettleNetProfit.setProjectId(project.getId());
|
|
projectSettleNetProfit.setType(ProjectSettleProfitMargin.TYPE_NET_PROFIT);
|
|
projectSettleNetProfit.setAmount(settleBean.getNetProfit());
|
|
projectSettleNetProfit.setBudget(budgetBean.getNetProfitBudgetTotal());
|
|
projectSettleNetProfit.setEstimate(estimateBean.getNetProfitEstimateTotal());
|
|
projectSettleNetProfit.setTime(time);
|
|
projectSettleProfitMarginRepository.saveAndFlush(projectSettleNetProfit);
|
|
}
|
|
|
|
private void cashFlow(Project project, SettleBean settleBean, BudgetSettleBean cashFlowBean, String time) {
|
|
ProjectSettleCashFlow projectSettleSaleIncomeCash = new ProjectSettleCashFlow();
|
|
projectSettleSaleIncomeCash.setProjectId(project.getId());
|
|
projectSettleSaleIncomeCash.setType(ProjectSettleCashFlow.SALE_INCOME_CASH);
|
|
projectSettleSaleIncomeCash.setAmount(settleBean.getSaleIncomeCash());
|
|
projectSettleSaleIncomeCash.setBudget(cashFlowBean.getSaleIncomeCashBudget());
|
|
projectSettleSaleIncomeCash.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleSaleIncomeCash);
|
|
|
|
ProjectSettleCashFlow projectSettleTaxReturn = new ProjectSettleCashFlow();
|
|
projectSettleTaxReturn.setProjectId(project.getId());
|
|
projectSettleTaxReturn.setType(ProjectSettleCashFlow.TAX_RETURN);
|
|
projectSettleTaxReturn.setAmount(settleBean.getTaxReturn());
|
|
projectSettleTaxReturn.setBudget(cashFlowBean.getTaxReturnBudget());
|
|
projectSettleTaxReturn.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleTaxReturn);
|
|
|
|
ProjectSettleCashFlow projectSettleEarnestMoneyIncome = new ProjectSettleCashFlow();
|
|
projectSettleEarnestMoneyIncome.setProjectId(project.getId());
|
|
projectSettleEarnestMoneyIncome.setType(ProjectSettleCashFlow.EARNEST_MONEY_INCOME);
|
|
projectSettleEarnestMoneyIncome.setAmount(settleBean.getEarnestMoneyIncome());
|
|
projectSettleEarnestMoneyIncome.setBudget(cashFlowBean.getEarnestMoneyIncomeBudget());
|
|
projectSettleEarnestMoneyIncome.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleEarnestMoneyIncome);
|
|
|
|
ProjectSettleCashFlow projectSettlePurchaseCost = new ProjectSettleCashFlow();
|
|
projectSettlePurchaseCost.setProjectId(project.getId());
|
|
projectSettlePurchaseCost.setType(ProjectSettleCashFlow.PURCHASE_COST);
|
|
projectSettlePurchaseCost.setAmount(settleBean.getPurchaseCost());
|
|
projectSettlePurchaseCost.setBudget(cashFlowBean.getPurchaseCostBudget());
|
|
projectSettlePurchaseCost.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettlePurchaseCost);
|
|
|
|
ProjectSettleCashFlow projectSettleTaxCost = new ProjectSettleCashFlow();
|
|
projectSettleTaxCost.setProjectId(project.getId());
|
|
projectSettleTaxCost.setType(ProjectSettleCashFlow.TAX_COST);
|
|
projectSettleTaxCost.setAmount(settleBean.getTaxCost());
|
|
projectSettleTaxCost.setBudget(cashFlowBean.getTaxCostBudget());
|
|
projectSettleTaxCost.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleTaxCost);
|
|
|
|
ProjectSettleCashFlow projectSettleEarnestMoneyCost = new ProjectSettleCashFlow();
|
|
projectSettleEarnestMoneyCost.setProjectId(project.getId());
|
|
projectSettleEarnestMoneyCost.setType(ProjectSettleCashFlow.EARNEST_MONEY_COST);
|
|
projectSettleEarnestMoneyCost.setAmount(settleBean.getEarnestMoneyCost());
|
|
projectSettleEarnestMoneyCost.setBudget(cashFlowBean.getEarnestMoneyCostBudget());
|
|
projectSettleEarnestMoneyCost.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleEarnestMoneyCost);
|
|
|
|
ProjectSettleCashFlow projectSettleNetCashFlow = new ProjectSettleCashFlow();
|
|
projectSettleNetCashFlow.setProjectId(project.getId());
|
|
projectSettleNetCashFlow.setType(ProjectSettleCashFlow.NET_CASH_FLOW);
|
|
projectSettleNetCashFlow.setAmount(settleBean.getNetCashFlow());
|
|
projectSettleNetCashFlow.setBudget(cashFlowBean.getNetCashFlowBudget());
|
|
projectSettleNetCashFlow.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleNetCashFlow);
|
|
|
|
ProjectSettleCashFlow projectSettleCashInflowFromInvestingActivities = new ProjectSettleCashFlow();
|
|
projectSettleCashInflowFromInvestingActivities.setProjectId(project.getId());
|
|
projectSettleCashInflowFromInvestingActivities.setType(ProjectSettleCashFlow.CASH_INFLOW_FROM_INVESTING_ACTIVITIES);
|
|
projectSettleCashInflowFromInvestingActivities.setAmount(settleBean.getCashInflowFromInvestingActivities());
|
|
projectSettleCashInflowFromInvestingActivities.setBudget(cashFlowBean.getCashInflowFromInvestingActivitiesBudget());
|
|
projectSettleCashInflowFromInvestingActivities.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleCashInflowFromInvestingActivities);
|
|
|
|
ProjectSettleCashFlow projectSettleCashOutflowFromInvestingActivities = new ProjectSettleCashFlow();
|
|
projectSettleCashOutflowFromInvestingActivities.setProjectId(project.getId());
|
|
projectSettleCashOutflowFromInvestingActivities.setType(ProjectSettleCashFlow.CASH_OUTFLOW_FROM_INVESTING_ACTIVITIES);
|
|
projectSettleCashOutflowFromInvestingActivities.setAmount(settleBean.getCashOutflowFromInvestingActivities());
|
|
projectSettleCashOutflowFromInvestingActivities.setBudget(cashFlowBean.getCashOutflowFromInvestingActivitiesBudget());
|
|
projectSettleCashOutflowFromInvestingActivities.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleCashOutflowFromInvestingActivities);
|
|
|
|
ProjectSettleCashFlow projectSettleNetCashFromInvestingActivities = new ProjectSettleCashFlow();
|
|
projectSettleNetCashFromInvestingActivities.setProjectId(project.getId());
|
|
projectSettleNetCashFromInvestingActivities.setType(ProjectSettleCashFlow.NET_CASH_FROM_INVESTING_ACTIVITIES);
|
|
projectSettleNetCashFromInvestingActivities.setAmount(settleBean.getNetCashFromInvestingActivities());
|
|
projectSettleNetCashFromInvestingActivities.setBudget(cashFlowBean.getNetCashFromInvestingActivitiesBudget());
|
|
projectSettleNetCashFromInvestingActivities.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleNetCashFromInvestingActivities);
|
|
|
|
ProjectSettleCashFlow projectSettleFinancingCapitalInflow = new ProjectSettleCashFlow();
|
|
projectSettleFinancingCapitalInflow.setProjectId(project.getId());
|
|
projectSettleFinancingCapitalInflow.setType(ProjectSettleCashFlow.FINANCING_CAPITAL_INFLOW);
|
|
projectSettleFinancingCapitalInflow.setAmount(settleBean.getFinancingCapitalInflow());
|
|
projectSettleFinancingCapitalInflow.setBudget(cashFlowBean.getFinancingCapitalInflowBudget());
|
|
projectSettleFinancingCapitalInflow.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleFinancingCapitalInflow);
|
|
|
|
ProjectSettleCashFlow projectSettleFinancingCapitalOutflow = new ProjectSettleCashFlow();
|
|
projectSettleFinancingCapitalOutflow.setProjectId(project.getId());
|
|
projectSettleFinancingCapitalOutflow.setType(ProjectSettleCashFlow.FINANCING_CAPITAL_OUTFLOW);
|
|
projectSettleFinancingCapitalOutflow.setAmount(settleBean.getFinancingCapitalOutflow());
|
|
projectSettleFinancingCapitalOutflow.setBudget(cashFlowBean.getFinancingCapitalOutflowBudget());
|
|
projectSettleFinancingCapitalOutflow.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleFinancingCapitalOutflow);
|
|
|
|
ProjectSettleCashFlow projectSettleFinancingCapitalCashflow = new ProjectSettleCashFlow();
|
|
projectSettleFinancingCapitalCashflow.setProjectId(project.getId());
|
|
projectSettleFinancingCapitalCashflow.setType(ProjectSettleCashFlow.FINANCING_CAPITAL_CASHFLOW);
|
|
projectSettleFinancingCapitalCashflow.setAmount(settleBean.getFinancingCapitalCashflow());
|
|
projectSettleFinancingCapitalCashflow.setBudget(cashFlowBean.getFinancingCapitalCashflowBudget());
|
|
projectSettleFinancingCapitalCashflow.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleFinancingCapitalCashflow);
|
|
|
|
ProjectSettleCashFlow projectSettleNetIncreaseMonetaryFunds = new ProjectSettleCashFlow();
|
|
projectSettleNetIncreaseMonetaryFunds.setProjectId(project.getId());
|
|
projectSettleNetIncreaseMonetaryFunds.setType(ProjectSettleCashFlow.NET_INCREASE_MONETARY_FUNDS);
|
|
projectSettleNetIncreaseMonetaryFunds.setAmount(settleBean.getNetIncreaseMonetaryFunds());
|
|
projectSettleNetIncreaseMonetaryFunds.setBudget(cashFlowBean.getNetIncreaseMonetaryFundsBudget());
|
|
projectSettleNetIncreaseMonetaryFunds.setTime(time);
|
|
projectSettleCashFlowRepository.saveAndFlush(projectSettleNetIncreaseMonetaryFunds);
|
|
}
|
|
|
|
public FormerBean getFormerSettle(Project project, String time) {
|
|
FormerBean settleBean = new FormerBean();
|
|
List<ProjectSettleIncome> incomes = projectSettleIncomeRepository.findAllByProjectIdBefore(project.getId(), time);
|
|
|
|
if(CollectionUtil.isNotEmpty(incomes)){
|
|
BigDecimal incomeDevice = incomes.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_DEVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setIncomeDeviceTaxExclude(incomeDevice);
|
|
|
|
BigDecimal incomeEngineer = incomes.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_ENGINEER).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setIncomeEngineerTaxExclude(incomeEngineer );
|
|
|
|
BigDecimal incomeService = incomes.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_SERVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setIncomeServiceTaxExclude(incomeService);
|
|
}
|
|
|
|
|
|
List<ProjectSettleCost> costs = projectSettleCostRepository.findAllByProjectIdBefore(project.getId(), time);
|
|
|
|
if(CollectionUtil.isNotEmpty(costs)){
|
|
BigDecimal costDevice = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_DEVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostPurchaseDeviceTaxExclude(costDevice);
|
|
|
|
BigDecimal costBuild = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_BUILDING).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostPurchaseBuildTaxExclude(costBuild);
|
|
|
|
BigDecimal costService = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostPurchaseServiceTaxExclude(costService);
|
|
|
|
BigDecimal costOther = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostPurchaseOtherTaxExclude(costOther);
|
|
|
|
BigDecimal costProjectManage = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_PROJECT_MANAGE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostProjectManageTaxExclude(costProjectManage );
|
|
|
|
BigDecimal costOtherOther = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_OTHER_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostOtherOtherTaxExclude(costOtherOther);
|
|
}
|
|
|
|
|
|
List<ProjectSettleCostManage> manages = projectSettleCostManageRepository.findAllByProjectIdBefore(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(manages)){
|
|
BigDecimal costManageExpropriation = manages.stream().filter(d -> d.getType() == ProjectSettleCostManage.TYPE_EXPROPRIATION).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostExpropriationTaxExclude(costManageExpropriation);
|
|
|
|
BigDecimal costManageCompany = manages.stream().filter(d -> d.getType() == ProjectSettleCostManage.TYPE_COMPANY_MANAGE).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostCompanyManageTaxExclude(costManageCompany);
|
|
|
|
BigDecimal costIncomeTax = manages.stream().filter(d -> d.getType() == ProjectSettleCostManage.TYPE_INCOME_TAX).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCostIncomeTax(costIncomeTax);
|
|
}
|
|
|
|
List<ProjectSettleProfitMargin> profits = projectSettleProfitMarginRepository.findAllByProjectIdBefore(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(profits)) {
|
|
BigDecimal grossProfit = profits.stream().filter(d -> d.getType() == ProjectSettleProfitMargin.TYPE_GROSS_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setGrossProfit(grossProfit);
|
|
|
|
BigDecimal contributionProfit = profits.stream().filter(d -> d.getType() == ProjectSettleProfitMargin.TYPE_CONTRIBUTION_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setContributionProfit(contributionProfit);
|
|
|
|
BigDecimal netProfit = profits.stream().filter(d -> d.getType() == ProjectSettleProfitMargin.TYPE_NET_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setNetProfit(netProfit);
|
|
}
|
|
|
|
List<ProjectSettleCashFlow> cashFlows = projectSettleCashFlowRepository.findAllByProjectIdBefore(project.getId(), time);
|
|
if(CollectionUtil.isNotEmpty(cashFlows)) {
|
|
BigDecimal saleIncomeCash = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.SALE_INCOME_CASH).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setSaleIncomeCash(saleIncomeCash);
|
|
|
|
BigDecimal taxReturn = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.TAX_RETURN).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setTaxReturn(taxReturn);
|
|
|
|
BigDecimal earnestMoneyIncome = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.EARNEST_MONEY_INCOME).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setEarnestMoneyIncome(earnestMoneyIncome);
|
|
|
|
BigDecimal purchaseCost = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.PURCHASE_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setPurchaseCost(purchaseCost);
|
|
|
|
BigDecimal taxCost = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.TAX_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setTaxCost(taxCost);
|
|
|
|
BigDecimal earnestMoneyCost = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.EARNEST_MONEY_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setEarnestMoneyCost(earnestMoneyCost);
|
|
|
|
BigDecimal netCashFlow = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.NET_CASH_FLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setNetCashFlow(netCashFlow);
|
|
|
|
BigDecimal cashInflowFromInvestingActivities = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.CASH_INFLOW_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCashInflowFromInvestingActivities(cashInflowFromInvestingActivities);
|
|
|
|
BigDecimal cashOutflowFromInvestingActivities = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.CASH_OUTFLOW_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setCashOutflowFromInvestingActivities(cashOutflowFromInvestingActivities);
|
|
|
|
BigDecimal netCashFromInvestingActivities = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.NET_CASH_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setNetCashFromInvestingActivities(netCashFromInvestingActivities);
|
|
|
|
BigDecimal financingCapitalInflow = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_INFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setFinancingCapitalInflow(financingCapitalInflow);
|
|
|
|
BigDecimal financingCapitalOutflow = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_OUTFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setFinancingCapitalOutflow(financingCapitalOutflow);
|
|
|
|
BigDecimal financingCapitalCashflow = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_CASHFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setFinancingCapitalCashflow(financingCapitalCashflow);
|
|
|
|
BigDecimal netIncreaseMonetaryFunds = cashFlows.stream().filter(d -> d.getType() == ProjectSettleCashFlow.NET_INCREASE_MONETARY_FUNDS).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
settleBean.setNetIncreaseMonetaryFunds(netIncreaseMonetaryFunds);
|
|
}
|
|
|
|
return settleBean;
|
|
}
|
|
}
|