分月项目统计

master
hanbo 2021-11-18 20:52:41 +08:00
parent a113449b0e
commit 5ba593f16e
8 changed files with 413 additions and 55 deletions

View File

@ -0,0 +1,71 @@
package cn.palmte.work.bean;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class CashFlowStatisticsBean {
private String title;
/**
* a
* */
private BigDecimal saleIncomeCash;
/**
* b
* */
private BigDecimal taxReturn;
/**
* c
*/
private BigDecimal earnestMoneyIncome;
/**
* d+
*/
private BigDecimal purchaseCost;
/**
* e
*/
private BigDecimal taxCost;
/**
*f
*/
private BigDecimal earnestMoneyCost;
/**
* g
* g=a+c+b-d-f-e
*/
private BigDecimal netCashFlow;
/**
* h
*/
private BigDecimal cashInflowFromInvestingActivities;
/**
* i
*/
private BigDecimal cashOutflowFromInvestingActivities;
/**
* j
*/
private BigDecimal netCashFromInvestingActivities;
/**
* k
*/
private BigDecimal financingCapitalInflow;
/**
* l
*/
private BigDecimal financingCapitalOutflow;
/**
*m
* m=k-l
*/
private BigDecimal financingCapitalCashflow;
/**
* n
* n=g+j+m
*/
private BigDecimal netIncreaseMonetaryFunds;
}

View File

@ -1,5 +1,6 @@
package cn.palmte.work.controller.backend;
import cn.palmte.work.bean.CashFlowStatisticsBean;
import cn.palmte.work.bean.PrimaryIndicatorBean;
import cn.palmte.work.service.StatisticsService;
import org.springframework.beans.factory.annotation.Autowired;
@ -19,7 +20,9 @@ public class StatisticsController extends BaseController{
@RequestMapping("/month")
public String month(Map<String, Object> model){
List<PrimaryIndicatorBean> primaryIndicatorList = statisticsService.getPrimaryIndicator();
List<CashFlowStatisticsBean> cashFlowList = statisticsService.getCashFlow();
model.put("primaryIndicatorList",primaryIndicatorList);
model.put("cashFlowList",cashFlowList);
return "admin/month_statistics";
}

View File

@ -26,4 +26,7 @@ public interface ProjectSettleCashFlowRepository extends JpaRepository<ProjectSe
@Query(value = "select * from project_settle_cash_flow where project_id in ?1 and time = ?2", nativeQuery = true)
List<ProjectSettleCashFlow> findAllByProjectsAndTime(List<Integer> ids, String time);
@Query(value = "SELECT time FROM project_settle_cash_flow GROUP BY time ORDER BY time", nativeQuery = true)
List<String> getProjectTime();
}

View File

@ -26,4 +26,10 @@ public interface ProjectSettleCostManageRepository extends JpaRepository<Project
@Query(value = "select * from project_settle_cost_manage where project_id in ?1 and time = ?2", nativeQuery = true)
List<ProjectSettleCostManage> findAllByProjectsAndTime(List<Integer> ids, String time);
@Query(value = "select sum(cost_tax_exclude) from project_settle_cost_manage where time = ? and type = ?", nativeQuery = true)
BigDecimal costManageTaxExcludeSumByTime(String time, int type);
@Query(value = "select sum(cost_tax_exclude) from project_settle_cost_manage where type = ?", nativeQuery = true)
BigDecimal costManageTaxExcludeSumByType(int type);
}

View File

@ -26,4 +26,10 @@ public interface ProjectSettleCostRepository extends JpaRepository<ProjectSettle
@Query(value = "select * from project_settle_cost where project_id in ?1 and time = ?2", nativeQuery = true)
List<ProjectSettleCost> findAllByProjectsAndTime(List<Integer> ids, String time);
@Query(value = "select sum(cost_tax_exclude) from project_settle_cost where time = ? and type = ?", nativeQuery = true)
BigDecimal costTaxExcludeSumByTime(String time, int type);
@Query(value = "select sum(cost_tax_exclude) from project_settle_cost where type = ?", nativeQuery = true)
BigDecimal costTaxExcludeSumByType(int type);
}

View File

@ -29,4 +29,13 @@ public interface ProjectSettleIncomeRepository extends JpaRepository<ProjectSett
@Query(value = "select * from project_settle_income where project_id in ?1 and time = ?2", nativeQuery = true)
List<ProjectSettleIncome> findAllByProjectsAndTime(List<Integer> ids, String time);
@Query(value = "SELECT time FROM project_settle_income GROUP BY time ORDER BY time", nativeQuery = true)
List<String> getProjectTime();
@Query(value = "select sum(income_tax_exclude) from project_settle_income where time = ? and type = ?", nativeQuery = true)
BigDecimal incomeTaxExcludeSumByTime(String time, int type);
@Query(value = "select sum(income_tax_exclude) from project_settle_income where type = ?", nativeQuery = true)
BigDecimal incomeTaxExcludeSumByType(int type);
}

View File

@ -1,9 +1,13 @@
package cn.palmte.work.service;
import cn.palmte.work.bean.CashFlowBean;
import cn.palmte.work.bean.CashFlowStatisticsBean;
import cn.palmte.work.bean.PrimaryIndicatorBean;
import cn.palmte.work.model.*;
import lombok.Data;
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.ArrayList;
@ -21,6 +25,21 @@ public class StatisticsService {
@Autowired
private ProjectBudgetCostManageRepository projectBudgetCostManageRepository;
@Autowired
private ProjectSettleCostRepository projectSettleCostRepository;
@Autowired
private ProjectSettleIncomeRepository projectSettleIncomeRepository;
@Autowired
private ProjectSettleCostManageRepository projectSettleCostManageRepository;
@Autowired
private ProjectBudgetPlanDetailRepository projectBudgetPlanDetailRepository;
@Autowired
private ProjectSettleCashFlowRepository projectSettleCashFlowRepository;
/**
*
*
@ -29,70 +48,157 @@ public class StatisticsService {
public List<PrimaryIndicatorBean> getPrimaryIndicator() {
List<PrimaryIndicatorBean> list = new ArrayList<>();
PrimaryIndicatorBean include = new PrimaryIndicatorBean();
include.setTitle("预算金额(含税)");
//收入数据
BigDecimal deviceIncomeTaxIncludeSum = projectBudgetIncomeRepository.incomeTaxIncludeSum(ProjectBudgetIncome.TYPE_DEVICE);
BigDecimal engineerIncomeTaxIncludeSum = projectBudgetIncomeRepository.incomeTaxIncludeSum(ProjectBudgetIncome.TYPE_ENGINEER);
BigDecimal serviceIncomeTaxIncludeSum = projectBudgetIncomeRepository.incomeTaxIncludeSum(ProjectBudgetIncome.TYPE_SERVICE);
include.setIncomeDevice(deviceIncomeTaxIncludeSum);
include.setIncomeEngineer(engineerIncomeTaxIncludeSum);
include.setIncomeService(serviceIncomeTaxIncludeSum);
//成本
BigDecimal deviceCostTaxIncludeSum = projectBudgetCostRepository.costTaxIncludeSum(ProjectBudgetCost.TYPE_DEVICE);
BigDecimal buildingCostTaxIncludeSum = projectBudgetCostRepository.costTaxIncludeSum(ProjectBudgetCost.TYPE_BUILDING);
BigDecimal serviceCostTaxIncludeSum = projectBudgetCostRepository.costTaxIncludeSum(ProjectBudgetCost.TYPE_SERVICE);
BigDecimal otherCostTaxIncludeSum = projectBudgetCostRepository.costTaxIncludeSum(ProjectBudgetCost.TYPE_OTHER);
BigDecimal projectManageCostTaxIncludeSum = projectBudgetCostRepository.costTaxIncludeSum(ProjectBudgetCost.TYPE_PROJECT_MANAGE);
BigDecimal otherOtherCostTaxIncludeSum = projectBudgetCostRepository.costTaxIncludeSum(ProjectBudgetCost.TYPE_OTHER_OTHER);
include.setCostPurchaseDevice(deviceCostTaxIncludeSum);
include.setCostPurchaseBuild(buildingCostTaxIncludeSum);
include.setCostPurchaseService(serviceCostTaxIncludeSum);
include.setCostPurchaseOther(otherCostTaxIncludeSum);
include.setCostProjectManage(projectManageCostTaxIncludeSum);
include.setCostOtherOther(otherOtherCostTaxIncludeSum);
list.add(include);
PrimaryIndicatorBean exclude = new PrimaryIndicatorBean();
include.setTitle("预算金额(含税)");
exclude.setTitle("预算金额(不含税)");
//收入数据
BigDecimal deviceIncomeTaxExcludeSum = projectBudgetIncomeRepository.incomeTaxExcludeSum(ProjectBudgetIncome.TYPE_DEVICE);
BigDecimal engineerIncomeTaxExcludeSum = projectBudgetIncomeRepository.incomeTaxExcludeSum(ProjectBudgetIncome.TYPE_ENGINEER);
BigDecimal serviceIncomeTaxExcludeSum = projectBudgetIncomeRepository.incomeTaxExcludeSum(ProjectBudgetIncome.TYPE_SERVICE);
List<ProjectBudgetIncome> allIncome = projectBudgetIncomeRepository.findAll();
if (CollectionUtil.isNotEmpty(allIncome)) {
BigDecimal deviceIncomeTaxIncludeSum = allIncome.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_DEVICE).map(ProjectBudgetIncome::getIncomeTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal engineerIncomeTaxIncludeSum = allIncome.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_ENGINEER).map(ProjectBudgetIncome::getIncomeTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal serviceIncomeTaxIncludeSum = allIncome.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_SERVICE).map(ProjectBudgetIncome::getIncomeTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
exclude.setIncomeDevice(deviceIncomeTaxExcludeSum);
exclude.setIncomeEngineer(engineerIncomeTaxExcludeSum);
exclude.setIncomeService(serviceIncomeTaxExcludeSum);
include.setIncomeDevice(deviceIncomeTaxIncludeSum);
include.setIncomeEngineer(engineerIncomeTaxIncludeSum);
include.setIncomeService(serviceIncomeTaxIncludeSum);
//成本
BigDecimal deviceCostTaxExcludeSum = projectBudgetCostRepository.costTaxExcludeSum(ProjectBudgetCost.TYPE_DEVICE);
BigDecimal buildingCostTaxExcludeSum = projectBudgetCostRepository.costTaxExcludeSum(ProjectBudgetCost.TYPE_BUILDING);
BigDecimal serviceCostTaxExcludeSum = projectBudgetCostRepository.costTaxExcludeSum(ProjectBudgetCost.TYPE_SERVICE);
BigDecimal otherCostTaxExcludeSum = projectBudgetCostRepository.costTaxExcludeSum(ProjectBudgetCost.TYPE_OTHER);
BigDecimal projectManageCostTaxExcludeSum = projectBudgetCostRepository.costTaxExcludeSum(ProjectBudgetCost.TYPE_PROJECT_MANAGE);
BigDecimal otherOtherCostTaxExcludeSum = projectBudgetCostRepository.costTaxExcludeSum(ProjectBudgetCost.TYPE_OTHER_OTHER);
BigDecimal deviceIncomeTaxExcludeSum = allIncome.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_DEVICE).map(ProjectBudgetIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal engineerIncomeTaxExcludeSum = allIncome.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_ENGINEER).map(ProjectBudgetIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal serviceIncomeTaxExcludeSum = allIncome.stream().filter(d -> d.getType() == ProjectBudgetIncome.TYPE_SERVICE).map(ProjectBudgetIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
exclude.setCostPurchaseDevice(deviceCostTaxExcludeSum);
exclude.setCostPurchaseBuild(buildingCostTaxExcludeSum);
exclude.setCostPurchaseService(serviceCostTaxExcludeSum);
exclude.setCostPurchaseOther(otherCostTaxExcludeSum);
exclude.setCostProjectManage(projectManageCostTaxExcludeSum);
exclude.setCostOtherOther(otherOtherCostTaxExcludeSum);
exclude.setIncomeDevice(deviceIncomeTaxExcludeSum);
exclude.setIncomeEngineer(engineerIncomeTaxExcludeSum);
exclude.setIncomeService(serviceIncomeTaxExcludeSum);
//管理
BigDecimal expropriationSum = projectBudgetCostManageRepository.costTaxExcludeSum(ProjectBudgetCostManage.TYPE_EXPROPRIATION);
BigDecimal companyManageSum = projectBudgetCostManageRepository.costTaxExcludeSum(ProjectBudgetCostManage.TYPE_COMPANY_MANAGE);
}
exclude.setCostExpropriation(expropriationSum);
exclude.setCostCompanyManage(companyManageSum);
//成本数据
List<ProjectBudgetCost> allCost = projectBudgetCostRepository.findAll();
if (CollectionUtil.isNotEmpty(allCost)) {
BigDecimal deviceCostTaxIncludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_DEVICE).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal buildingCostTaxIncludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_BUILDING).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal serviceCostTaxIncludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_SERVICE).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal otherCostTaxIncludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal projectManageCostTaxIncludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_PROJECT_MANAGE).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal otherOtherCostTaxIncludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER_OTHER).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
include.setCostPurchaseDevice(deviceCostTaxIncludeSum);
include.setCostPurchaseBuild(buildingCostTaxIncludeSum);
include.setCostPurchaseService(serviceCostTaxIncludeSum);
include.setCostPurchaseOther(otherCostTaxIncludeSum);
include.setCostProjectManage(projectManageCostTaxIncludeSum);
include.setCostOtherOther(otherOtherCostTaxIncludeSum);
BigDecimal deviceCostTaxExcludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_DEVICE).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal buildingCostTaxExcludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_BUILDING).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal serviceCostTaxExcludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_SERVICE).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal otherCostTaxExcludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal projectManageCostTaxExcludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_PROJECT_MANAGE).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal otherOtherCostTaxExcludeSum = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_OTHER_OTHER).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
exclude.setCostPurchaseDevice(deviceCostTaxExcludeSum);
exclude.setCostPurchaseBuild(buildingCostTaxExcludeSum);
exclude.setCostPurchaseService(serviceCostTaxExcludeSum);
exclude.setCostPurchaseOther(otherCostTaxExcludeSum);
exclude.setCostProjectManage(projectManageCostTaxExcludeSum);
exclude.setCostOtherOther(otherOtherCostTaxExcludeSum);
}
//管理成本数据
List<ProjectBudgetCostManage> allCostManage = projectBudgetCostManageRepository.findAll();
if (CollectionUtil.isNotEmpty(allCostManage)) {
BigDecimal expropriationSum = allCostManage.stream().filter(d -> d.getType() == ProjectBudgetCostManage.TYPE_EXPROPRIATION).map(ProjectBudgetCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal companyManageSum = allCostManage.stream().filter(d -> d.getType() == ProjectBudgetCostManage.TYPE_COMPANY_MANAGE).map(ProjectBudgetCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
exclude.setCostExpropriation(expropriationSum);
exclude.setCostCompanyManage(companyManageSum);
}
list.add(include);
list.add(exclude);
PrimaryIndicatorBean allSettle = new PrimaryIndicatorBean();
allSettle.setTitle("实际累计(不含税)");
List<ProjectSettleIncome> allSettleIncome = projectSettleIncomeRepository.findAll();
if (CollectionUtil.isNotEmpty(allSettleIncome)) {
BigDecimal incomeDeviceAll = allSettleIncome.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_DEVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal incomeEngineerAll = allSettleIncome.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_ENGINEER).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal incomeServiceAll = allSettleIncome.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_SERVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
allSettle.setIncomeDevice(incomeDeviceAll);
allSettle.setIncomeEngineer(incomeEngineerAll);
allSettle.setIncomeService(incomeServiceAll);
}
List<ProjectSettleCost> allSettleCost = projectSettleCostRepository.findAll();
if (CollectionUtil.isNotEmpty(allSettleCost)) {
BigDecimal costDeviceAll = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_DEVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costBuildingAll = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_BUILDING).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costServiceAll = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costOtherAll = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costProjectManageAll = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_PROJECT_MANAGE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costOtherOtherAll = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_OTHER_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
allSettle.setCostPurchaseDevice(costDeviceAll);
allSettle.setCostPurchaseBuild(costBuildingAll);
allSettle.setCostPurchaseService(costServiceAll);
allSettle.setCostPurchaseOther(costOtherAll);
allSettle.setCostProjectManage(costProjectManageAll);
allSettle.setCostOtherOther(costOtherOtherAll);
}
List<ProjectSettleCostManage> allSettleCostManage = projectSettleCostManageRepository.findAll();
if (CollectionUtil.isNotEmpty(allSettleCostManage)) {
BigDecimal expropriationAll = allSettleCostManage.stream().filter(d -> d.getType() == ProjectSettleCostManage.TYPE_EXPROPRIATION).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal companyManageAll = allSettleCostManage.stream().filter(d -> d.getType() == ProjectSettleCostManage.TYPE_COMPANY_MANAGE).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
allSettle.setCostExpropriation(expropriationAll);
allSettle.setCostCompanyManage(companyManageAll);
}
list.add(allSettle);
List<String> projectTime = projectSettleIncomeRepository.getProjectTime();
if (CollectionUtil.isNotEmpty(projectTime)) {
for (String time : projectTime) {
PrimaryIndicatorBean primaryIndicatorBean = new PrimaryIndicatorBean();
primaryIndicatorBean.setTitle(time);
BigDecimal incomeDevice = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_DEVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal incomeEngineer = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_ENGINEER).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal incomeService = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_SERVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
primaryIndicatorBean.setIncomeDevice(incomeDevice);
primaryIndicatorBean.setIncomeEngineer(incomeEngineer);
primaryIndicatorBean.setIncomeService(incomeService);
BigDecimal costDevice = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_DEVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costBuilding = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_BUILDING).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costService = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costOther = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costProjectManage = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_PROJECT_MANAGE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal costOtherOther = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_OTHER_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
primaryIndicatorBean.setCostPurchaseDevice(costDevice);
primaryIndicatorBean.setCostPurchaseBuild(costBuilding);
primaryIndicatorBean.setCostPurchaseService(costService);
primaryIndicatorBean.setCostPurchaseOther(costOther);
primaryIndicatorBean.setCostProjectManage(costProjectManage);
primaryIndicatorBean.setCostOtherOther(costOtherOther);
BigDecimal expropriation = allSettleCostManage.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCostManage.TYPE_EXPROPRIATION).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal companyManage = allSettleCostManage.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCostManage.TYPE_COMPANY_MANAGE).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
primaryIndicatorBean.setCostExpropriation(expropriation);
primaryIndicatorBean.setCostCompanyManage(companyManage);
list.add(primaryIndicatorBean);
}
}
return list;
}
@ -112,10 +218,117 @@ public class StatisticsService {
*
* @return
*/
public List getCashFlow() {
public List<CashFlowStatisticsBean> getCashFlow() {
List<CashFlowStatisticsBean> list = new ArrayList<>();
CashFlowStatisticsBean cashFlowStatisticsBean = new CashFlowStatisticsBean();
cashFlowStatisticsBean.setTitle("预算金额");
List<ProjectBudgetPlanDetail> cashFlows = projectBudgetPlanDetailRepository.findAll();
return null;
BigDecimal saleIncome = cashFlows.stream().map(ProjectBudgetPlanDetail::getSaleIncome).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsBean.setSaleIncomeCash(saleIncome);
BigDecimal earnestMoneyIncome = cashFlows.stream().map(ProjectBudgetPlanDetail::getEarnestMoneyIncome).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsBean.setEarnestMoneyIncome(earnestMoneyIncome);
BigDecimal deviceCost = cashFlows.stream().map(ProjectBudgetPlanDetail::getDeviceCost).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal engineerCost = cashFlows.stream().map(ProjectBudgetPlanDetail::getEngineerCost).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsBean.setPurchaseCost(deviceCost.add(engineerCost));
BigDecimal projectManageCost = cashFlows.stream().map(ProjectBudgetPlanDetail::getProjectManageCost).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal earnestMoneyCost = cashFlows.stream().map(ProjectBudgetPlanDetail::getEarnestMoneyCost).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal capitalInterest = cashFlows.stream().map(ProjectBudgetPlanDetail::getCapitalInterest).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsBean.setEarnestMoneyCost(projectManageCost.add(earnestMoneyCost).add(capitalInterest));
BigDecimal underWritten = cashFlows.stream().map(ProjectBudgetPlanDetail::getUnderwrittenPlan).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsBean.setFinancingCapitalInflow(underWritten);
BigDecimal repaymentPlan = cashFlows.stream().map(ProjectBudgetPlanDetail::getRepaymentPlan).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsBean.setFinancingCapitalOutflow(repaymentPlan);
cashFlowStatisticsBean.setNetCashFlow(saleIncome.add(earnestMoneyIncome).subtract(cashFlowStatisticsBean.getEarnestMoneyCost()));
cashFlowStatisticsBean.setFinancingCapitalCashflow(underWritten.subtract(repaymentPlan));
cashFlowStatisticsBean.setNetIncreaseMonetaryFunds(cashFlowStatisticsBean.getNetCashFlow().add(cashFlowStatisticsBean.getFinancingCapitalCashflow()));
list.add(cashFlowStatisticsBean);
List<String> projectTime = projectSettleCashFlowRepository.getProjectTime();
List<ProjectSettleCashFlow> all = projectSettleCashFlowRepository.findAll();
CashFlowStatisticsBean cashFlowStatisticsAll = new CashFlowStatisticsBean();
cashFlowStatisticsAll.setTitle("实际累计");
BigDecimal saleIncomeCashAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.SALE_INCOME_CASH).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal taxReturnAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.TAX_RETURN).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal earnestMoneyIncomeTimeAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.EARNEST_MONEY_INCOME).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal purchaseCostAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.PURCHASE_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal taxCostAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.TAX_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal earnestMoneyCostTimeAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.EARNEST_MONEY_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal netCashFlowAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.NET_CASH_FLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal cashInflowFromInvestingActivitiesAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.CASH_INFLOW_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal cashOutflowFromInvestingActivitiesAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.CASH_OUTFLOW_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal netCashFromInvestingActivitiesAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.NET_CASH_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal financingCapitalInflowAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_INFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal financingCapitalOutflowAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_OUTFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal financingCapitalCashFlowAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_CASHFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal netIncreaseMonetaryFundsAll = all.stream().filter(d -> d.getType() == ProjectSettleCashFlow.NET_INCREASE_MONETARY_FUNDS).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatisticsAll.setSaleIncomeCash(saleIncomeCashAll);
cashFlowStatisticsAll.setTaxReturn(taxReturnAll);
cashFlowStatisticsAll.setEarnestMoneyIncome(earnestMoneyIncomeTimeAll);
cashFlowStatisticsAll.setPurchaseCost(purchaseCostAll);
cashFlowStatisticsAll.setTaxCost(taxCostAll);
cashFlowStatisticsAll.setEarnestMoneyCost(earnestMoneyCostTimeAll);
cashFlowStatisticsAll.setNetCashFlow(netCashFlowAll);
cashFlowStatisticsAll.setCashInflowFromInvestingActivities(cashInflowFromInvestingActivitiesAll);
cashFlowStatisticsAll.setCashOutflowFromInvestingActivities(cashOutflowFromInvestingActivitiesAll);
cashFlowStatisticsAll.setNetCashFromInvestingActivities(netCashFromInvestingActivitiesAll);
cashFlowStatisticsAll.setFinancingCapitalInflow(financingCapitalInflowAll);
cashFlowStatisticsAll.setFinancingCapitalOutflow(financingCapitalOutflowAll);
cashFlowStatisticsAll.setFinancingCapitalCashflow(financingCapitalCashFlowAll);
cashFlowStatisticsAll.setNetIncreaseMonetaryFunds(netIncreaseMonetaryFundsAll);
list.add(cashFlowStatisticsAll);
if (CollectionUtil.isNotEmpty(projectTime)) {
for (String time : projectTime) {
CashFlowStatisticsBean cashFlowStatistics = new CashFlowStatisticsBean();
cashFlowStatistics.setTitle(time);
BigDecimal saleIncomeCash = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.SALE_INCOME_CASH).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal taxReturn = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.TAX_RETURN).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal earnestMoneyIncomeTime = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.EARNEST_MONEY_INCOME).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal purchaseCost = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.PURCHASE_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal taxCost = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.TAX_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal earnestMoneyCostTime = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.EARNEST_MONEY_COST).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal netCashFlow = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.NET_CASH_FLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal cashInflowFromInvestingActivities = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.CASH_INFLOW_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal cashOutflowFromInvestingActivities = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.CASH_OUTFLOW_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal netCashFromInvestingActivities = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.NET_CASH_FROM_INVESTING_ACTIVITIES).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal financingCapitalInflow = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_INFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal financingCapitalOutflow = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_OUTFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal financingCapitalCashFlow = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.FINANCING_CAPITAL_CASHFLOW).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal netIncreaseMonetaryFunds = all.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCashFlow.NET_INCREASE_MONETARY_FUNDS).map(ProjectSettleCashFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
cashFlowStatistics.setSaleIncomeCash(saleIncomeCash);
cashFlowStatistics.setTaxReturn(taxReturn);
cashFlowStatistics.setEarnestMoneyIncome(earnestMoneyIncomeTime);
cashFlowStatistics.setPurchaseCost(purchaseCost);
cashFlowStatistics.setTaxCost(taxCost);
cashFlowStatistics.setEarnestMoneyCost(earnestMoneyCostTime);
cashFlowStatistics.setNetCashFlow(netCashFlow);
cashFlowStatistics.setCashInflowFromInvestingActivities(cashInflowFromInvestingActivities);
cashFlowStatistics.setCashOutflowFromInvestingActivities(cashOutflowFromInvestingActivities);
cashFlowStatistics.setNetCashFromInvestingActivities(netCashFromInvestingActivities);
cashFlowStatistics.setFinancingCapitalInflow(financingCapitalInflow);
cashFlowStatistics.setFinancingCapitalOutflow(financingCapitalOutflow);
cashFlowStatistics.setFinancingCapitalCashflow(financingCapitalCashFlow);
cashFlowStatistics.setNetIncreaseMonetaryFunds(netIncreaseMonetaryFunds);
list.add(cashFlowStatistics);
}
}
return list;
}
}

View File

@ -64,7 +64,7 @@
<div class="am-tabs-bd">
<div class="am-tab-panel am-fade am-in" id="tab2">
<table class="am-table am-table-bordered am-table-radius table-main" style="padding:0;">
<tbody>
<thead>
<tr>
<td>/</td>
<td>营业收入</td>
@ -81,6 +81,30 @@
<td>项目净利润</td>
<td>项目净利润率</td>
</tr>
</thead>
<tbody>
<#if (cashFlowList)?exists && (cashFlowList?size>0)>
<#list cashFlowList as list>
<tr>
<td>${list.title!}</td>
<td>${list.saleIncomeCash!}</td>
<td>${list.taxReturn!}</td>
<td>${list.earnestMoneyIncome!}</td>
<td>${list.purchaseCost!}</td>
<td>${list.taxCost!}</td>
<td>${list.earnestMoneyCost!}</td>
<td>${list.netCashFlow!}</td>
<td>${list.cashInflowFromInvestingActivities!}</td>
<td>${list.cashOutflowFromInvestingActivities!}</td>
<td>${list.netCashFromInvestingActivities!}</td>
<td>${list.financingCapitalInflow!}</td>
<td>${list.financingCapitalOutflow!}</td>
<td>${list.financingCapitalCashflow!}</td>
<td>${list.netIncreaseMonetaryFunds!}</td>
</tr>
</#list>
</#if>
</tbody>
</table>
</div>
@ -89,7 +113,7 @@
<div class="am-tabs-bd">
<div class="am-tab-panel am-fade am-in" id="tab3">
<table class="am-table am-table-bordered am-table-radius table-main" style="padding:0;">
<tbody>
<thead>
<tr>
<td>/</td>
<td>销售商品、提供劳务收到的现金</td>
@ -107,6 +131,29 @@
<td>筹资活动产生的现金流量净额</td>
<td>货币资金净增加额</td>
</tr>
</thead>
<tbody>
<#if (cashFlowList)?exists && (cashFlowList?size>0)>
<#list cashFlowList as list>
<tr>
<td>${list.title!}</td>
<td>${list.saleIncomeCash!}</td>
<td>${list.taxReturn!}</td>
<td>${list.earnestMoneyIncome!}</td>
<td>${list.purchaseCost!}</td>
<td>${list.taxCost!}</td>
<td>${list.earnestMoneyCost!}</td>
<td>${list.netCashFlow!}</td>
<td>${list.cashInflowFromInvestingActivities!}</td>
<td>${list.cashOutflowFromInvestingActivities!}</td>
<td>${list.netCashFromInvestingActivities!}</td>
<td>${list.financingCapitalInflow!}</td>
<td>${list.financingCapitalOutflow!}</td>
<td>${list.financingCapitalCashflow!}</td>
<td>${list.netIncreaseMonetaryFunds!}</td>
</tr>
</#list>
</#if>
</tbody>
</table>
</div>