diff --git a/src/main/java/cn/palmte/work/bean/FormerBean.java b/src/main/java/cn/palmte/work/bean/FormerBean.java index b7d322b..b491c83 100644 --- a/src/main/java/cn/palmte/work/bean/FormerBean.java +++ b/src/main/java/cn/palmte/work/bean/FormerBean.java @@ -20,14 +20,26 @@ public class FormerBean extends IncomeCostBean{ * 毛利润 */ private BigDecimal grossProfit; + /** + * 毛利润 + */ + private BigDecimal grossProfitMargin; /** * 贡献利润 */ private BigDecimal contributionProfit; + /** + * 贡献利润 + */ + private BigDecimal contributionProfitMargin; /** * 净利润 */ private BigDecimal netProfit; + /** + * 净利润 + */ + private BigDecimal netProfitMargin; /** * a销售商品、提供劳务收到的现金 * */ @@ -98,7 +110,15 @@ public class FormerBean extends IncomeCostBean{ } public BigDecimal getCostManageTotal() { - return costManageTotal; + BigDecimal costExpropriation = getCostExpropriationTaxExclude(); + BigDecimal costCompanyManage = getCostCompanyManageTaxExclude(); + BigDecimal costIncomeTax = getCostIncomeTax(); + + if (null == costExpropriation || null == costCompanyManage || null == costIncomeTax) { + return new BigDecimal(0); + } + + return costExpropriation.add(costCompanyManage).add(costIncomeTax); } public void setCostManageTotal(BigDecimal costManageTotal) { @@ -113,6 +133,14 @@ public class FormerBean extends IncomeCostBean{ this.grossProfit = grossProfit; } + public BigDecimal getGrossProfitMargin() { + return grossProfitMargin; + } + + public void setGrossProfitMargin(BigDecimal grossProfitMargin) { + this.grossProfitMargin = grossProfitMargin; + } + public BigDecimal getContributionProfit() { return contributionProfit; } @@ -121,6 +149,14 @@ public class FormerBean extends IncomeCostBean{ this.contributionProfit = contributionProfit; } + public BigDecimal getContributionProfitMargin() { + return contributionProfitMargin; + } + + public void setContributionProfitMargin(BigDecimal contributionProfitMargin) { + this.contributionProfitMargin = contributionProfitMargin; + } + public BigDecimal getNetProfit() { return netProfit; } @@ -129,6 +165,14 @@ public class FormerBean extends IncomeCostBean{ this.netProfit = netProfit; } + public BigDecimal getNetProfitMargin() { + return netProfitMargin; + } + + public void setNetProfitMargin(BigDecimal netProfitMargin) { + this.netProfitMargin = netProfitMargin; + } + public BigDecimal getSaleIncomeCash() { return saleIncomeCash; } @@ -242,11 +286,31 @@ public class FormerBean extends IncomeCostBean{ } public BigDecimal getCashFlowTotal() { -// cashFlowTotal = saleIncomeCash.add(taxReturn).add(earnestMoneyIncome).add(purchaseCost) -// .add(taxCost).add(earnestMoneyCost).add(netCashFlow).add(cashInflowFromInvestingActivities) -// .add(cashOutflowFromInvestingActivities).add(netCashFromInvestingActivities).add(financingCapitalInflow) -// .add(financingCapitalOutflow).add(financingCapitalCashflow).add(netIncreaseMonetaryFunds); - return cashFlowTotal; + BigDecimal saleIncomeCash = getSaleIncomeCash(); + BigDecimal taxReturn = getTaxReturn(); + BigDecimal earnestMoneyIncome = getEarnestMoneyIncome(); + BigDecimal purchaseCost = getPurchaseCost(); + BigDecimal taxCost = getTaxCost(); + BigDecimal earnestMoneyCost = getEarnestMoneyCost(); + BigDecimal netCashFlow = getNetCashFlow(); + BigDecimal cashInflowFromInvestingActivities = getCashInflowFromInvestingActivities(); + BigDecimal cashOutflowFromInvestingActivities = getCashOutflowFromInvestingActivities(); + BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities(); + BigDecimal financingCapitalInflow = getFinancingCapitalInflow(); + BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow(); + BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow(); + BigDecimal netIncreaseMonetaryFunds = getNetIncreaseMonetaryFunds(); + + if (null == saleIncomeCash || null == taxReturn || null == earnestMoneyIncome || null == purchaseCost || null == taxCost + || null == earnestMoneyCost || null == netCashFlow || null == cashInflowFromInvestingActivities || + null == cashOutflowFromInvestingActivities || null == netCashFromInvestingActivities || + null == financingCapitalInflow || null == financingCapitalOutflow || null == financingCapitalCashflow || null == netIncreaseMonetaryFunds) { + return new BigDecimal(0); + } + + return saleIncomeCash.add(taxReturn).add(earnestMoneyIncome).add(purchaseCost).add(taxCost).add(earnestMoneyCost) + .add(netCashFlow).add(cashInflowFromInvestingActivities).add(cashOutflowFromInvestingActivities).add(netCashFromInvestingActivities) + .add(financingCapitalInflow).add(financingCapitalOutflow).add(financingCapitalCashflow).add(netIncreaseMonetaryFunds); } public void setCashFlowTotal(BigDecimal cashFlowTotal) { diff --git a/src/main/java/cn/palmte/work/bean/SettleBean.java b/src/main/java/cn/palmte/work/bean/SettleBean.java index 1caeb29..240df73 100644 --- a/src/main/java/cn/palmte/work/bean/SettleBean.java +++ b/src/main/java/cn/palmte/work/bean/SettleBean.java @@ -220,7 +220,7 @@ public class SettleBean { * 获取所有现金流量总额 * @return */ - public BigDecimal getCashFluxTotal() { + public BigDecimal getCashFlowTotal() { BigDecimal saleIncomeCash = getSaleIncomeCash(); BigDecimal taxReturn = getTaxReturn(); BigDecimal earnestMoneyIncome = getEarnestMoneyIncome(); @@ -248,6 +248,8 @@ public class SettleBean { .add(financingCapitalInflow).add(financingCapitalOutflow).add(financingCapitalCashflow).add(netIncreaseMonetaryFunds); } + private String projectName; + public BigDecimal getIncomeDevice() { return incomeDevice; } @@ -503,4 +505,12 @@ public class SettleBean { public void setNetCashFlow(BigDecimal netCashFlow) { this.netCashFlow = netCashFlow; } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } } diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java index d6d48f1..30ffea0 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java @@ -55,7 +55,7 @@ public class ProjectSettleController extends BaseController{ ProjectSettleIncome projectSettleIncome = projectSettleIncomeRepository.findNewByProjectId(id); if (projectSettleIncome != null) { String former = projectSettleIncome.getTime(); - Date date = DateKit.getDate(former, DateKit.DATE_FORMAT); + Date date = DateKit.getDate(former, DateKit.DATE_FORMAT_YEAR_MONTH2); Calendar instance = Calendar.getInstance(); instance.setTime(date); instance.set(Calendar.MONTH, instance.get(Calendar.MONTH) + 1); diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java index 838a82d..4122873 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java @@ -1,7 +1,9 @@ package cn.palmte.work.controller.backend; +import cn.palmte.work.bean.SettleBean; import cn.palmte.work.model.Admin; import cn.palmte.work.service.ProjectSummaryService; +import cn.palmte.work.utils.DateKit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestParam; import top.jfunc.common.db.bean.Page; import top.jfunc.common.db.bean.Record; +import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -40,12 +44,20 @@ public class ProjectSummaryController extends BaseController { Admin admin = getAdmin(); model.put("keywords",keywords); ConcurrentHashMap searchInfo = getSearchInfo(keywords,model); - List> list = projectSummaryService.getList(searchInfo, pageNumber, pageSize); + String time; + if (!searchInfo.containsKey("time")) { + Calendar instance = Calendar.getInstance(); + instance.setTime(new Date()); + instance.set(Calendar.MONTH, instance.get(Calendar.MONTH)); + Date current = instance.getTime(); + time = DateKit.toStr(current, DateKit.DATE_FORMAT_YEAR_MONTH2); + model.put("time", time); + } else { + time = searchInfo.get("time"); + } + List> list = projectSummaryService.getList(searchInfo, pageNumber, pageSize, time); + model.put("pager", (list.size() > 0)? list.get(0) : new Page(pageNumber, pageSize)); - model.put("pager1", list.get(0)); - model.put("pager2", list.get(1)); - model.put("pager3", list.get(2)); - - return "admin/project_summary"; + return "admin/project_statistics"; } } diff --git a/src/main/java/cn/palmte/work/model/ProjectSettleCashFlowRepository.java b/src/main/java/cn/palmte/work/model/ProjectSettleCashFlowRepository.java index 9a5d872..666ef11 100644 --- a/src/main/java/cn/palmte/work/model/ProjectSettleCashFlowRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectSettleCashFlowRepository.java @@ -17,4 +17,9 @@ public interface ProjectSettleCashFlowRepository extends JpaRepository findAllByProjectIdBefore(int id, String time); List findAllByProjectId(int id); + + List findAllByTime(String time); + + @Query(value = "select sum(amount) from project_settle_cash_flow where project_id = ? and type = ?", nativeQuery = true) + long costAmountSum(int projectId,int type); } diff --git a/src/main/java/cn/palmte/work/model/ProjectSettleCostManageRepository.java b/src/main/java/cn/palmte/work/model/ProjectSettleCostManageRepository.java index b4bcacf..e81624a 100644 --- a/src/main/java/cn/palmte/work/model/ProjectSettleCostManageRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectSettleCostManageRepository.java @@ -20,4 +20,6 @@ public interface ProjectSettleCostManageRepository extends JpaRepository findAllByProjectId(int id); + + List findAllByTime(String time); } diff --git a/src/main/java/cn/palmte/work/model/ProjectSettleCostRepository.java b/src/main/java/cn/palmte/work/model/ProjectSettleCostRepository.java index 9021158..6ec3581 100644 --- a/src/main/java/cn/palmte/work/model/ProjectSettleCostRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectSettleCostRepository.java @@ -20,4 +20,6 @@ public interface ProjectSettleCostRepository extends JpaRepository findAllByProjectId(int id); + + List findAllByTime(String time); } diff --git a/src/main/java/cn/palmte/work/model/ProjectSettleIncomeRepository.java b/src/main/java/cn/palmte/work/model/ProjectSettleIncomeRepository.java index 06578db..8ea5ab1 100644 --- a/src/main/java/cn/palmte/work/model/ProjectSettleIncomeRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectSettleIncomeRepository.java @@ -20,4 +20,9 @@ public interface ProjectSettleIncomeRepository extends JpaRepository findAllByProjectId(int id); + + List findAllByTime(String time); + + @Query(value = "select * from project_settle_income where project_id = ?1 order by id desc limit 0, 1", nativeQuery = true) + ProjectSettleIncome findNewByProjectId(int id); } diff --git a/src/main/java/cn/palmte/work/model/ProjectSettleProfitMarginRepository.java b/src/main/java/cn/palmte/work/model/ProjectSettleProfitMarginRepository.java index d046599..f6ea062 100644 --- a/src/main/java/cn/palmte/work/model/ProjectSettleProfitMarginRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectSettleProfitMarginRepository.java @@ -17,4 +17,6 @@ public interface ProjectSettleProfitMarginRepository extends JpaRepository findAllByProjectIdBefore(int id, String time); List findAllByProjectId(int id); + + List findAllByTime(String time); } diff --git a/src/main/java/cn/palmte/work/service/ProjectSettleService.java b/src/main/java/cn/palmte/work/service/ProjectSettleService.java index 0cb5483..7e7b0f8 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSettleService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSettleService.java @@ -632,4 +632,111 @@ public class ProjectSettleService { return settleBean; } + + public SettleBean getMonthTotalSettle(String time) { + SettleBean settleBean = new SettleBean(); + + List incomes = projectSettleIncomeRepository.findAllByTime(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.setIncomeDevice(incomeDevice); + + BigDecimal incomeEngineer = incomes.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_ENGINEER).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setIncomeEngineer(incomeEngineer ); + + BigDecimal incomeService = incomes.stream().filter(d -> d.getType() == ProjectSettleIncome.TYPE_SERVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setIncomeService(incomeService); + } + + List costs = projectSettleCostRepository.findAllByTime(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.setCostPurchaseDevice(costDevice); + + BigDecimal costBuild = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_BUILDING).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setCostPurchaseBuild(costBuild); + + BigDecimal costService = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setCostPurchaseService(costService); + + BigDecimal costOther = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setCostPurchaseOther(costOther); + + BigDecimal costProjectManage = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_PROJECT_MANAGE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setCostProjectManage(costProjectManage ); + + BigDecimal costOtherOther = costs.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_OTHER_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setCostOther(costOtherOther); + } + + List manages = projectSettleCostManageRepository.findAllByTime(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.setCostExpropriation(costManageExpropriation); + + BigDecimal costManageCompany = manages.stream().filter(d -> d.getType() == ProjectSettleCostManage.TYPE_COMPANY_MANAGE).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add); + settleBean.setCostCompanyManage(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 profits = projectSettleProfitMarginRepository.findAllByTime(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 cashFlows = projectSettleCashFlowRepository.findAllByTime(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; + } } diff --git a/src/main/java/cn/palmte/work/service/ProjectSummaryService.java b/src/main/java/cn/palmte/work/service/ProjectSummaryService.java index 484abce..e1c8d48 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSummaryService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSummaryService.java @@ -1,7 +1,6 @@ package cn.palmte.work.service; -import cn.palmte.work.bean.BudgetBean; -import cn.palmte.work.bean.CashFlowBean; +import cn.palmte.work.bean.SettleBean; import cn.palmte.work.model.Project; import cn.palmte.work.model.ProjectSettleCostRepository; import org.slf4j.Logger; @@ -9,7 +8,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import top.jfunc.common.db.bean.Page; -import top.jfunc.common.db.bean.Record; import top.jfunc.common.db.utils.Pagination; import java.math.BigDecimal; @@ -33,62 +31,96 @@ public class ProjectSummaryService { @Autowired private ProjectSettleCostRepository projectSettleCostRepository; + @Autowired + private ProjectSettleService projectSettleService; + @Autowired private Pagination pagination; - public List> getList(ConcurrentHashMap searchInfo, int pageNumber, int pageSize) { - List> pageList = new ArrayList<>(); + public List> getList(ConcurrentHashMap searchInfo, int pageNumber, int pageSize, String time) { + List> pageList = new ArrayList<>(); if (pageNumber == 1) { //预算金额 Map budget = new HashMap<>(40); String sql = "select proj.id, proj.name from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? group by proj.id order by proj.id asc"; - List projects = pagination.find(sql, Project.class, searchInfo.getOrDefault("time", "2021-00")); - for (Project project : projects) { - BudgetBean budgetBean = projectBudgetService.getBudget(project); - CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetService.getProjectBudgetPlanDetails(project)); - budget.put("incomeDeviceTaxExclude", budget.getOrDefault("incomeDeviceTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeDeviceTaxExclude())); - budget.put("incomeEngineerTaxExclude", budget.getOrDefault("incomeEngineerTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeEngineerTaxExclude())); - budget.put("incomeServiceTaxExclude", budget.getOrDefault("incomeServiceTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeServiceTaxExclude())); - budget.put("costPurchaseDeviceTaxExclude", budget.getOrDefault("costPurchaseDeviceTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseDeviceTaxExclude())); - budget.put("costPurchaseBuildTaxExclude", budget.getOrDefault("costPurchaseBuildTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseBuildTaxExclude())); - budget.put("costPurchaseServiceTaxExclude", budget.getOrDefault("costPurchaseServiceTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseServiceTaxExclude())); - budget.put("costPurchaseOtherTaxExclude", budget.getOrDefault("costPurchaseOtherTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseOtherTaxExclude())); - budget.put("costOtherOtherTaxExclude", budget.getOrDefault("costOtherOtherTaxExclude", new BigDecimal(0)).add(budgetBean.getCostOtherOtherTaxExclude())); - budget.put("costProjectManageTaxExclude", budget.getOrDefault("costProjectManageTaxExclude", new BigDecimal(0)).add(budgetBean.getCostProjectManageTaxExclude())); - budget.put("costExpropriationTaxExclude", budget.getOrDefault("costExpropriationTaxExclude", new BigDecimal(0)).add(budgetBean.getCostExpropriationTaxExclude())); - budget.put("costCompanyManageTaxExclude", budget.getOrDefault("costCompanyManageTaxExclude", new BigDecimal(0)).add(budgetBean.getCostCompanyManageTaxExclude())); + List projects = pagination.find(sql, Project.class, time); +// for (Project project : projects) { +// BudgetBean budgetBean = projectBudgetService.getBudget(project); +// CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetService.getProjectBudgetPlanDetails(project)); +// budget.put("incomeDevice", budget.getOrDefault("incomeDeviceTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeDeviceTaxExclude())); +// budget.put("incomeEngineer", budget.getOrDefault("incomeEngineerTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeEngineerTaxExclude())); +// budget.put("incomeService", budget.getOrDefault("incomeServiceTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeServiceTaxExclude())); +// budget.put("costPurchaseDevice", budget.getOrDefault("costPurchaseDeviceTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseDeviceTaxExclude())); +// budget.put("costPurchaseBuild", budget.getOrDefault("costPurchaseBuildTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseBuildTaxExclude())); +// budget.put("costPurchaseService", budget.getOrDefault("costPurchaseServiceTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseServiceTaxExclude())); +// budget.put("costPurchaseOther", budget.getOrDefault("costPurchaseOtherTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseOtherTaxExclude())); +// budget.put("costOtherOther", budget.getOrDefault("costOtherOtherTaxExclude", new BigDecimal(0)).add(budgetBean.getCostOtherOtherTaxExclude())); +// budget.put("costProjectManage", budget.getOrDefault("costProjectManageTaxExclude", new BigDecimal(0)).add(budgetBean.getCostProjectManageTaxExclude())); +// budget.put("costExpropriation", budget.getOrDefault("costExpropriationTaxExclude", new BigDecimal(0)).add(budgetBean.getCostExpropriationTaxExclude())); +// budget.put("costCompanyManage", budget.getOrDefault("costCompanyManageTaxExclude", new BigDecimal(0)).add(budgetBean.getCostCompanyManageTaxExclude())); +// +// budget.put("incomeTotal", budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeTotalTaxExclude())); +// budget.put("incomeTotalTaxInclude", budget.getOrDefault("incomeTotalTaxInclude", new BigDecimal(0)).add(budgetBean.getIncomeTotalTaxInclude())); +// budget.put("costTotal2", budget.getOrDefault("costTotalTaxExclude2", new BigDecimal(0)).add(budgetBean.getCostTotalTaxExclude())); +// budget.put("costTotalTaxInclude", budget.getOrDefault("costTotalTaxInclude", new BigDecimal(0)).add(budgetBean.getCostTotalTaxInclude())); +// budget.put("costTotal", budget.getOrDefault("costTotalTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseDeviceTaxExclude().add(budgetBean.getCostPurchaseBuildTaxExclude()).add(budgetBean.getCostPurchaseServiceTaxExclude()).add(budgetBean.getCostPurchaseOtherTaxExclude()))); +// budget.put("projectGrossProfit", budget.getOrDefault("projectGrossProfit", new BigDecimal(0)).add(budgetBean.getProjectGrossProfit())); +// budget.put("projectContributionProfit", budget.getOrDefault("projectContributionProfit", new BigDecimal(0)).add(budgetBean.getProjectContributionProfit())); +// +// budget.put("saleIncomeCash", budget.getOrDefault("saleIncomeCash", new BigDecimal(0)).add(cashFlowBean.getSaleIncomeCash())); +// budget.put("taxReturn", budget.getOrDefault("taxReturn", new BigDecimal(0)).add(cashFlowBean.getTaxReturn())); +// budget.put("earnestMoneyIncome", budget.getOrDefault("earnestMoneyIncome", new BigDecimal(0)).add(cashFlowBean.getEarnestMoneyIncome())); +// budget.put("purchaseCost", budget.getOrDefault("purchaseCost", new BigDecimal(0)).add(cashFlowBean.getPurchaseCost())); +// budget.put("taxCost", budget.getOrDefault("taxCost", new BigDecimal(0)).add(cashFlowBean.getTaxCost())); +// budget.put("earnestMoneyCost", budget.getOrDefault("earnestMoneyCost", new BigDecimal(0)).add(cashFlowBean.getEarnestMoneyCost())); +// budget.put("netCashFlow", budget.getOrDefault("netCashFlow", new BigDecimal(0)).add(cashFlowBean.getNetCashFlow())); +// budget.put("cashInflowFromInvestingActivities", budget.getOrDefault("cashInflowFromInvestingActivities", new BigDecimal(0)).add(cashFlowBean.getCashInflowFromInvestingActivities())); +// budget.put("cashOutflowFromInvestingActivities", budget.getOrDefault("cashOutflowFromInvestingActivities", new BigDecimal(0)).add(cashFlowBean.getCashOutflowFromInvestingActivities())); +// budget.put("netCashFromInvestingActivities", budget.getOrDefault("netCashFromInvestingActivities", new BigDecimal(0)).add(cashFlowBean.getNetCashFromInvestingActivities())); +// budget.put("financingCapitalInflow", budget.getOrDefault("financingCapitalInflow", new BigDecimal(0)).add(cashFlowBean.getFinancingCapitalInflow())); +// budget.put("financingCapitalOutflow", budget.getOrDefault("financingCapitalOutflow", new BigDecimal(0)).add(cashFlowBean.getFinancingCapitalOutflow())); +// budget.put("financingCapitalCashflow", budget.getOrDefault("financingCapitalCashflow", new BigDecimal(0)).add(cashFlowBean.getFinancingCapitalCashflow())); +// budget.put("netIncreaseMonetaryFunds", budget.getOrDefault("netIncreaseMonetaryFunds", new BigDecimal(0)).add(cashFlowBean.getNetIncreaseMonetaryFunds())); +// } +// Record budgetRecord = new Record(); +// budgetRecord.getColumns().putAll(budget); +// budgetRecord.set("projectName", "预算金额(不含税)"); +// budgetRecord.set("projectGrossProfitRate", budget.getOrDefault("projectGrossProfit", new BigDecimal(0)).divide(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(1)))); +// budgetRecord.set("projectContributionProfitRate", budget.getOrDefault("projectContributionProfit", new BigDecimal(0)).divide(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(1)))); +// budgetRecord.set("taxCost", budget.getOrDefault("incomeTotalTaxInclude", new BigDecimal(0)).subtract(budget.getOrDefault("incomeTotal", new BigDecimal(0))).subtract(budget.getOrDefault("costTotalTaxInclude", new BigDecimal(0))).add(budget.getOrDefault("costTotal2", new BigDecimal(0)))); +// budgetRecord.set("projectNetProfit", budget.getOrDefault("projectGrossProfit", new BigDecimal(0)).subtract(budgetRecord.getBigDecimal("taxCost"))); +// budgetRecord.set("projectContributionProfitRate", budgetRecord.getBigDecimal("projectNetProfit").divide(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(1)))); + SettleBean budgetBean = new SettleBean(); + budgetBean.setProjectName("预算金额(不含税)"); + Page page = new Page<>(pageNumber, pageSize); + List list = new ArrayList<>(); + list.add(budgetBean); - budget.put("incomeTotalTaxExclude", budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(0)).add(budgetBean.getIncomeTotalTaxExclude())); - budget.put("incomeTotalTaxInclude", budget.getOrDefault("incomeTotalTaxInclude", new BigDecimal(0)).add(budgetBean.getIncomeTotalTaxInclude())); - budget.put("costTotalTaxExclude2", budget.getOrDefault("costTotalTaxExclude2", new BigDecimal(0)).add(budgetBean.getCostTotalTaxExclude())); - budget.put("costTotalTaxInclude", budget.getOrDefault("costTotalTaxInclude", new BigDecimal(0)).add(budgetBean.getCostTotalTaxInclude())); - budget.put("costTotalTaxExclude", budget.getOrDefault("costTotalTaxExclude", new BigDecimal(0)).add(budgetBean.getCostPurchaseDeviceTaxExclude().add(budgetBean.getCostPurchaseBuildTaxExclude()).add(budgetBean.getCostPurchaseServiceTaxExclude()).add(budgetBean.getCostPurchaseOtherTaxExclude()))); - budget.put("projectGrossProfit", budget.getOrDefault("projectGrossProfit", new BigDecimal(0)).add(budgetBean.getProjectGrossProfit())); - budget.put("projectContributionProfit", budget.getOrDefault("projectContributionProfit", new BigDecimal(0)).add(budgetBean.getProjectContributionProfit())); - - budget.put("saleIncomeCash", budget.getOrDefault("saleIncomeCash", new BigDecimal(0)).add(cashFlowBean.getSaleIncomeCash())); - budget.put("taxReturn", budget.getOrDefault("taxReturn", new BigDecimal(0)).add(cashFlowBean.getTaxReturn())); - budget.put("earnestMoneyIncome", budget.getOrDefault("earnestMoneyIncome", new BigDecimal(0)).add(cashFlowBean.getEarnestMoneyIncome())); - budget.put("purchaseCost", budget.getOrDefault("purchaseCost", new BigDecimal(0)).add(cashFlowBean.getPurchaseCost())); - budget.put("taxCost", budget.getOrDefault("taxCost", new BigDecimal(0)).add(cashFlowBean.getTaxCost())); - budget.put("earnestMoneyCost", budget.getOrDefault("earnestMoneyCost", new BigDecimal(0)).add(cashFlowBean.getEarnestMoneyCost())); - budget.put("netCashFlow", budget.getOrDefault("netCashFlow", new BigDecimal(0)).add(cashFlowBean.getNetCashFlow())); - budget.put("cashInflowFromInvestingActivities", budget.getOrDefault("cashInflowFromInvestingActivities", new BigDecimal(0)).add(cashFlowBean.getCashInflowFromInvestingActivities())); - budget.put("cashOutflowFromInvestingActivities", budget.getOrDefault("cashOutflowFromInvestingActivities", new BigDecimal(0)).add(cashFlowBean.getCashOutflowFromInvestingActivities())); - budget.put("netCashFromInvestingActivities", budget.getOrDefault("netCashFromInvestingActivities", new BigDecimal(0)).add(cashFlowBean.getNetCashFromInvestingActivities())); - budget.put("financingCapitalInflow", budget.getOrDefault("financingCapitalInflow", new BigDecimal(0)).add(cashFlowBean.getFinancingCapitalInflow())); - budget.put("financingCapitalOutflow", budget.getOrDefault("financingCapitalOutflow", new BigDecimal(0)).add(cashFlowBean.getFinancingCapitalOutflow())); - budget.put("financingCapitalCashflow", budget.getOrDefault("financingCapitalCashflow", new BigDecimal(0)).add(cashFlowBean.getFinancingCapitalCashflow())); - budget.put("netIncreaseMonetaryFunds", budget.getOrDefault("netIncreaseMonetaryFunds", new BigDecimal(0)).add(cashFlowBean.getNetIncreaseMonetaryFunds())); + SettleBean totalSettle = projectSettleService.getMonthTotalSettle(time); + BigDecimal divide = totalSettle.getIncomeTotal(); + if (divide.equals(new BigDecimal(0))) { + divide = new BigDecimal(1); } - Record budgetRecord = new Record(); - budgetRecord.getColumns().putAll(budget); - budgetRecord.set("projectName", "预算金额(不含税)"); - budgetRecord.set("projectGrossProfitRate", budget.getOrDefault("projectGrossProfit", new BigDecimal(0)).divide(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(1)))); - budgetRecord.set("projectContributionProfitRate", budget.getOrDefault("projectContributionProfit", new BigDecimal(0)).divide(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(1)))); - budgetRecord.set("taxCost", budget.getOrDefault("incomeTotalTaxInclude", new BigDecimal(0)).subtract(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(0))).subtract(budget.getOrDefault("costTotalTaxInclude", new BigDecimal(0))).add(budget.getOrDefault("costTotalTaxExclude2", new BigDecimal(0)))); - budgetRecord.set("projectNetProfit", budget.getOrDefault("projectGrossProfit", new BigDecimal(0)).subtract(budgetRecord.getBigDecimal("taxCost"))); - budgetRecord.set("projectContributionProfitRate", budgetRecord.getBigDecimal("projectNetProfit").divide(budget.getOrDefault("incomeTotalTaxExclude", new BigDecimal(1)))); + totalSettle.setGrossProfitProfitMargin(totalSettle.getGrossProfit().divide(divide, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + totalSettle.setContributionProfitProfitMargin(totalSettle.getContributionProfit().divide(divide, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + totalSettle.setNetProfitProfitMargin(totalSettle.getNetProfit().divide(divide, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + totalSettle.setProjectName("实际累计(不含税)"); + list.add(totalSettle); + + for (Project project : projects) { + SettleBean monthSettle = projectSettleService.getMonthSettle(project, time); + BigDecimal divide2 = monthSettle.getIncomeTotal(); + if (divide2.equals(new BigDecimal(0))) { + divide2 = new BigDecimal(1); + } + monthSettle.setGrossProfitProfitMargin(monthSettle.getGrossProfit().divide(divide2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + monthSettle.setContributionProfitProfitMargin(monthSettle.getContributionProfit().divide(divide2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + monthSettle.setNetProfitProfitMargin(monthSettle.getNetProfit().divide(divide2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); + monthSettle.setProjectName(project.getName()); + list.add(monthSettle); + } + page.setList(list); + pageList.add(page); } else { String sql = "select proj.id, proj.name from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? group by proj.id order by proj.id asc"; } diff --git a/src/main/resources/templates/admin/project_settle_add.ftl b/src/main/resources/templates/admin/project_settle_add.ftl index 3bdefe5..19b8104 100644 --- a/src/main/resources/templates/admin/project_settle_add.ftl +++ b/src/main/resources/templates/admin/project_settle_add.ftl @@ -41,7 +41,8 @@ -
+
+
收入 diff --git a/src/main/resources/templates/admin/project_settle_edit.ftl b/src/main/resources/templates/admin/project_settle_edit.ftl index 216c4e2..84fa0b1 100644 --- a/src/main/resources/templates/admin/project_settle_edit.ftl +++ b/src/main/resources/templates/admin/project_settle_edit.ftl @@ -41,7 +41,8 @@ -
+
+
收入
@@ -60,8 +61,8 @@ - - + + @@ -69,8 +70,8 @@ - - + + @@ -78,8 +79,8 @@ - - + + @@ -87,8 +88,8 @@ - - + +
收入
收入
合计
@@ -112,8 +113,8 @@ - - + + 成本 @@ -122,8 +123,8 @@ - - + + 成本 @@ -132,8 +133,8 @@ - - + + 成本 @@ -142,8 +143,8 @@ - - + + 成本 @@ -152,8 +153,8 @@ - - + + 成本 @@ -162,8 +163,8 @@ - - + + 合计 @@ -172,8 +173,8 @@ - - + + @@ -195,8 +196,8 @@ - - + + 公司管理费用 @@ -204,8 +205,8 @@ - - + + 所得税费用 @@ -213,17 +214,17 @@ / / - - + + 合计 - - - + + + @@ -244,28 +245,28 @@ 项目毛利 - - - - + + + + 项目贡献利润 - - - - + + + + 项目净利润 / - - - - + + + + @@ -284,106 +285,107 @@ 销售商品、提供劳务收到的现金 - - + + 收到的税费返还 / - - + + 收到其他与经营活动有关的现金 - - + + 购买商品、接受劳务支付的现金 - - + + 支付的各项税费 / - - + + 支付其他与经营活动有关的现金 - - + + 经营活动产生的现金流量净额 - + - - + + 投资活动现金流入 / - - + + 投资活动现金流出 / - - + + 投资活动产生的现金流量净额 / - - + + 融资资金流入 - - + + 还款资金流出 - - + + 筹资活动产生的现金流量净额 - - + + 货币资金净增加额 - - + + 合计 - - - - + + + + @@ -405,9 +407,24 @@ - + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/admin/project_summary.ftl b/src/main/resources/templates/admin/project_summary.ftl index 1bf3021..1cd823d 100644 --- a/src/main/resources/templates/admin/project_summary.ftl +++ b/src/main/resources/templates/admin/project_summary.ftl @@ -6,15 +6,17 @@
项目统计
- -
-
-
-
- -
+
+
+
+
+
+
+
+ +
  • 主要指标
  • 损益表
  • @@ -43,21 +45,21 @@ - <#if (pager1.list)?exists> - <#list pager1.list as list> + <#if (pager.list)?exists> + <#list pager.list as list> ${list.projectName!} - ${(list.incomeDeviceTaxExclude!0)?string("0.##")} - ${(list.incomeEngineerTaxExclude!0)?string("0.##")} - ${(list.incomeServiceTaxExclude!0)?string("0.##")} - ${(list.costPurchaseDeviceTaxExclude!0)?string("0.##")} - ${(list.costPurchaseBuildTaxExclude!0)?string("0.##")} - ${(list.costPurchaseServiceTaxExclude!0)?string("0.##")} - ${(list.costPurchaseOtherTaxExclude!0)?string("0.##")} - ${(list.costOtherOtherTaxExclude!0)?string("0.##")} - ${(list.costProjectManageTaxExclude!0)?string("0.##")} - ${(list.costExpropriationTaxExclude!0)?string("0.##")} - ${(list.costCompanyManageTaxExclude!0)?string("0.##")} + ${(list.incomeDevice!0)?string("0.##")} + ${(list.incomeEngineer!0)?string("0.##")} + ${(list.incomeService!0)?string("0.##")} + ${(list.costPurchaseDevice!0)?string("0.##")} + ${(list.costPurchaseBuild!0)?string("0.##")} + ${(list.costPurchaseService!0)?string("0.##")} + ${(list.costPurchaseOther!0)?string("0.##")} + ${(list.costOtherOther!0)?string("0.##")} + ${(list.costProjectManage!0)?string("0.##")} + ${(list.costExpropriation!0)?string("0.##")} + ${(list.costCompanyManage!0)?string("0.##")} @@ -93,18 +95,18 @@ - <#if (pager2.list)?exists> - <#list pager2.list as list> + <#if (pager.list)?exists> + <#list pager.list as list> ${list.projectName!} - ${(list.incomeTotalTaxExclude!0)?string("0.##")} - ${(list.costTotalTaxExclude!0)?string("0.##")} - ${(list.costProjectManageTaxExclude!0)?string("0.##")} - ${(list.costOtherOtherTaxExclude!0)?string("0.##")} - ${(list.costExpropriationTaxExclude!0)?string("0.##")} + ${(list.incomeTotal!0)?string("0.##")} + ${(list.costTotal!0)?string("0.##")} + ${(list.costProjectManage!0)?string("0.##")} + ${(list.costOtherOther!0)?string("0.##")} + ${(list.costExpropriation!0)?string("0.##")} ${(list.projectGrossProfit!0)?string("0.##")} ${(list.projectGrossProfitRate!0)?string("0.##")} - ${(list.costCompanyManageTaxExclude!0)?string("0.##")} + ${(list.costCompanyManage!0)?string("0.##")} ${(list.projectContributionProfit!0)?string("0.##")} ${(list.projectContributionProfitRate!0)?string("0.##")} ${(list.taxCost!0)?string("0.##")} @@ -146,8 +148,8 @@ - <#if (pager3.list)?exists> - <#list pager3.list as list> + <#if (pager.list)?exists> + <#list pager.list as list> ${list.projectName!} ${(list.saleIncomeCash!0)?string("0.##")} @@ -177,7 +179,7 @@
    - <#if (pager1.list)?exists && (pager1.list?size>0) > + <#if (pager.list)?exists && (pager.list?size>0) >
    <#include "../common/common_pager.ftl">
    @@ -191,6 +193,22 @@
+ +