From c7300c2aa6e0c95b6c8dc3d80ceb4b478411d283 Mon Sep 17 00:00:00 2001
From: hanbo <2608504783@qq.com>
Date: Fri, 3 Dec 2021 11:53:25 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=88=96=E6=9B=B4=E6=96=B0?=
 =?UTF-8?q?=E5=86=B3=E7=AE=97=E4=BF=A1=E6=81=AF=E5=89=8D=E5=85=88=E6=B8=85?=
 =?UTF-8?q?=E7=90=86=E6=97=A7=E6=95=B0=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../backend/ProjectFinalController.java       |   1 -
 .../ProjectFinalProfitMarginRepository.java   |   4 +
 .../work/service/ProjectFinalSevice.java      | 148 +++++++++---------
 3 files changed, 82 insertions(+), 71 deletions(-)

diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java
index 85fdcbb..6ba4cd3 100644
--- a/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java
+++ b/src/main/java/cn/palmte/work/controller/backend/ProjectFinalController.java
@@ -7,7 +7,6 @@ import cn.palmte.work.model.ProjectSettleIncome;
 import cn.palmte.work.model.ProjectSettleIncomeRepository;
 import cn.palmte.work.service.*;
 import cn.palmte.work.utils.FreeMarkerUtil;
-import cn.palmte.work.utils.InterfaceUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/src/main/java/cn/palmte/work/model/ProjectFinalProfitMarginRepository.java b/src/main/java/cn/palmte/work/model/ProjectFinalProfitMarginRepository.java
index 10ac434..74534bd 100644
--- a/src/main/java/cn/palmte/work/model/ProjectFinalProfitMarginRepository.java
+++ b/src/main/java/cn/palmte/work/model/ProjectFinalProfitMarginRepository.java
@@ -2,6 +2,10 @@ package cn.palmte.work.model;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface ProjectFinalProfitMarginRepository extends JpaRepository<ProjectFinalProfitMargin,Integer> {
 
+    List<ProjectFinalProfitMargin> findByProjectIdEquals(int projectId);
+
 }
diff --git a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java
index 0adcfa4..455eec5 100644
--- a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java
+++ b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java
@@ -60,66 +60,74 @@ public class ProjectFinalSevice {
 
     @Transactional
     public void save(Project project, FinalBean finalBean) {
-        //预算表数据
-        EstimateBean estimate = projectEstimateService.getEstimate(project);
-        //概算表数据
-        BudgetBean budget = projectBudgetService.getBudget(project);
-
-        FormerBean settle = projectSettleService.getCurrentSettle(project, null);
-        //现金流量表数据
-        List<ProjectBudgetPlanDetail> projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project);
-        CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails);
-
-        //保存项目决算收入信息
-        saveProjectFinalIncome(project,finalBean,estimate,budget,settle);
-
-        //保存项目决算成本信息
-        saveProjectFinalCost(project,finalBean,estimate,budget,settle);
-
-        //保存项目结算管理成本信息
-        saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
-
-        //保存项目决算利润率
-        saveProjectFinalProfitMargin(project,finalBean,estimate,budget,settle);
-
-        //保存项目结算现金流量信息
-        saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
-
+        clearAndSave(project, finalBean);
         projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.FINAL_ACCOUNTS, ApproveStatusEnum.APPROVAL_UNCOMMIT);
-
     }
 
     @Transactional
     public void saveAndApprove(Project project, FinalBean finalBean) throws Exception {
-        FormerBean settle = projectSettleService.getCurrentSettle(project, null);
+        clearAndSave(project, finalBean);
+        //更新项目和审批状态
+        projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.FINAL_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING);
+        //发起流程
+        projectInstanceService.startFinalProcessInstance(project.getId(), InterfaceUtil.getAdmin());
+    }
+
+    public void clearAndSave(Project project, FinalBean finalBean) {
+        //清楚旧数据
+        clearFinal(project);
+
         //预算表数据
         EstimateBean estimate = projectEstimateService.getEstimate(project);
         //概算表数据
         BudgetBean budget = projectBudgetService.getBudget(project);
+
+        FormerBean settle = projectSettleService.getCurrentSettle(project, null);
         //现金流量表数据
         List<ProjectBudgetPlanDetail> projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project);
         CashFlowBean cashFlowBean = projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails);
 
         //保存项目决算收入信息
-        saveProjectFinalIncome(project,finalBean,estimate,budget,settle);
+        saveProjectFinalIncome(project, finalBean, estimate, budget, settle);
 
         //保存项目决算成本信息
-        saveProjectFinalCost(project,finalBean,estimate,budget,settle);
+        saveProjectFinalCost(project, finalBean, estimate, budget, settle);
 
         //保存项目结算管理成本信息
-        saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
+        saveProjectFinalCostManage(project, finalBean, estimate, budget, settle);
 
         //保存项目决算利润率
-        saveProjectFinalProfitMargin(project,finalBean,estimate,budget,settle);
+        saveProjectFinalProfitMargin(project, finalBean, estimate, budget, settle);
 
         //保存项目结算现金流量信息
-        saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
+        saveProjectFinalCashFlux(project, finalBean, cashFlowBean, settle);
+    }
 
-        //更新项目和审批状态
-        projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.FINAL_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING);
-        //发起流程
-        projectInstanceService.startFinalProcessInstance(project.getId(), InterfaceUtil.getAdmin());
+    private void clearFinal(Project project) {
+        List<ProjectFinalCost> projectFinalCosts = projectFinalCostRepository.findByProjectIdEquals(project.getId());
+        if (CollectionUtil.isNotEmpty(projectFinalCosts)) {
+            projectFinalCostRepository.deleteInBatch(projectFinalCosts);
+        }
 
+        List<ProjectFinalCostManage> projectFinalCostManages = projectFinalCostManageRepository.findByProjectIdEquals(project.getId());
+        if (CollectionUtil.isNotEmpty(projectFinalCostManages)) {
+            projectFinalCostManageRepository.deleteInBatch(projectFinalCostManages);
+        }
+
+        List<ProjectFinalIncome> projectFinalIncomes = projectFinalIncomeReposiry.findByProjectIdEquals(project.getId());
+        if (CollectionUtil.isNotEmpty(projectFinalIncomes)) {
+            projectFinalIncomeReposiry.deleteInBatch(projectFinalIncomes);
+        }
+
+        List<ProjectFinalProfitMargin> projectFinalProfitMargins = projectFinalProfitMarginRepository.findByProjectIdEquals(project.getId());
+        if (CollectionUtil.isNotEmpty(projectFinalProfitMargins)) {
+            projectFinalProfitMarginRepository.deleteInBatch(projectFinalProfitMargins);
+        }
+
+        List<ProjectFinalCashFlux> projectFinalCashFluxes = projectFinalCashFluxRepository.findByProjectIdEquals(project.getId());
+        if (CollectionUtil.isNotEmpty(projectFinalCashFluxes)) {
+            projectFinalCashFluxRepository.deleteInBatch(projectFinalCashFluxes);
+        }
     }
 
     private void saveProjectFinalProfitMargin(Project project, FinalBean finalBean, EstimateBean estimate, BudgetBean budget, FormerBean settle) {
@@ -154,7 +162,7 @@ public class ProjectFinalSevice {
 
     }
 
-    public void saveProjectFinalCostManage(Project project, FinalBean finalBean,EstimateBean estimate,BudgetBean budget,FormerBean settle){
+    public void saveProjectFinalCostManage(Project project, FinalBean finalBean, EstimateBean estimate, BudgetBean budget, FormerBean settle) {
         ProjectFinalCostManage expropriationManage = new ProjectFinalCostManage();
         expropriationManage.setProjectId(project.getId());
         expropriationManage.setType(ProjectFinalCostManage.TYPE_EXPROPRIATION);
@@ -182,7 +190,7 @@ public class ProjectFinalSevice {
 
     }
 
-    private void saveProjectFinalIncome(Project project, FinalBean finalBean,EstimateBean estimate,BudgetBean budget,FormerBean settle) {
+    private void saveProjectFinalIncome(Project project, FinalBean finalBean, EstimateBean estimate, BudgetBean budget, FormerBean settle) {
         ProjectFinalIncome projectFinalIncomeDevice = new ProjectFinalIncome();
         projectFinalIncomeDevice.setProjectId(project.getId());
         projectFinalIncomeDevice.setType(ProjectFinalIncome.TYPE_DEVICE);
@@ -211,7 +219,7 @@ public class ProjectFinalSevice {
         projectFinalIncomeReposiry.saveAndFlush(projectFinalIncomeService);
     }
 
-    public void saveProjectFinalCost(Project project, FinalBean finalBean,EstimateBean estimate,BudgetBean budget,FormerBean settle){
+    public void saveProjectFinalCost(Project project, FinalBean finalBean, EstimateBean estimate, BudgetBean budget, FormerBean settle) {
         ProjectFinalCost projectFinalCostDevice = new ProjectFinalCost();
         projectFinalCostDevice.setProjectId(project.getId());
         projectFinalCostDevice.setFee(ProjectFinalCost.FEE_PURCHASE);
@@ -274,7 +282,7 @@ public class ProjectFinalSevice {
         projectFinalCostRepository.saveAndFlush(projectFinalCostOtherOther);
     }
 
-    public void saveProjectFinalCashFlux(Project project, FinalBean finalBean, CashFlowBean cashFlowBean,FormerBean settle) {
+    public void saveProjectFinalCashFlux(Project project, FinalBean finalBean, CashFlowBean cashFlowBean, FormerBean settle) {
         List<ProjectFinalCashFlux> list = new ArrayList<>();
 
         ProjectFinalCashFlux projectFinalCashFlux1 = new ProjectFinalCashFlux();
@@ -396,32 +404,32 @@ public class ProjectFinalSevice {
         FinalBean finalBean = new FinalBean();
         List<ProjectFinalIncome> projectFinalIncomes = projectFinalIncomeReposiry.findByProjectIdEquals(project.getId());
 
-        if(CollectionUtil.isNotEmpty(projectFinalIncomes)){
+        if (CollectionUtil.isNotEmpty(projectFinalIncomes)) {
             for (ProjectFinalIncome projectFinalIncome : projectFinalIncomes) {
-                if(ProjectFinalIncome.TYPE_DEVICE == projectFinalIncome.getType()){
+                if (ProjectFinalIncome.TYPE_DEVICE == projectFinalIncome.getType()) {
                     finalBean.setIncomeDeviceFinalTotal(projectFinalIncome.getFinalTotalIncome());
-                }else if(ProjectFinalIncome.TYPE_ENGINEER == projectFinalIncome.getType()){
+                } else if (ProjectFinalIncome.TYPE_ENGINEER == projectFinalIncome.getType()) {
                     finalBean.setIncomeEngineerFinalTotal(projectFinalIncome.getFinalTotalIncome());
-                }else if(ProjectFinalIncome.TYPE_SERVICE == projectFinalIncome.getType()){
+                } else if (ProjectFinalIncome.TYPE_SERVICE == projectFinalIncome.getType()) {
                     finalBean.setIncomeServiceFinalTotal(projectFinalIncome.getFinalTotalIncome());
                 }
             }
         }
 
         List<ProjectFinalCost> projectFinalCosts = projectFinalCostRepository.findByProjectIdEquals(project.getId());
-        if(CollectionUtil.isNotEmpty(projectFinalCosts)){
+        if (CollectionUtil.isNotEmpty(projectFinalCosts)) {
             for (ProjectFinalCost projectFinalCost : projectFinalCosts) {
-                if(ProjectFinalCost.TYPE_DEVICE == projectFinalCost.getType()){
+                if (ProjectFinalCost.TYPE_DEVICE == projectFinalCost.getType()) {
                     finalBean.setCostPurchaseDeviceFinalTotal(projectFinalCost.getFinalTotalCost());
-                }else if(ProjectFinalCost.TYPE_BUILDING == projectFinalCost.getType()){
+                } else if (ProjectFinalCost.TYPE_BUILDING == projectFinalCost.getType()) {
                     finalBean.setCostPurchaseBuildFinalTotal(projectFinalCost.getFinalTotalCost());
-                }else if(ProjectFinalCost.TYPE_SERVICE == projectFinalCost.getType()){
+                } else if (ProjectFinalCost.TYPE_SERVICE == projectFinalCost.getType()) {
                     finalBean.setCostPurchaseServiceFinalTotal(projectFinalCost.getFinalTotalCost());
-                }else if(ProjectFinalCost.TYPE_OTHER == projectFinalCost.getType()){
+                } else if (ProjectFinalCost.TYPE_OTHER == projectFinalCost.getType()) {
                     finalBean.setCostPurchaseOtherFinalTotal(projectFinalCost.getFinalTotalCost());
-                }else if(ProjectFinalCost.TYPE_PROJECT_MANAGE == projectFinalCost.getType()){
+                } else if (ProjectFinalCost.TYPE_PROJECT_MANAGE == projectFinalCost.getType()) {
                     finalBean.setCostProjectManageFinalTotal(projectFinalCost.getFinalTotalCost());
-                }else if (ProjectFinalCost.TYPE_OTHER_OTHER == projectFinalCost.getType()){
+                } else if (ProjectFinalCost.TYPE_OTHER_OTHER == projectFinalCost.getType()) {
                     finalBean.setCostOtherFinalTotal(projectFinalCost.getFinalTotalCost());
                 }
             }
@@ -429,13 +437,13 @@ public class ProjectFinalSevice {
 
         List<ProjectFinalCostManage> projectFinalCostManages = projectFinalCostManageRepository.findByProjectIdEquals(project.getId());
 
-        if(CollectionUtil.isNotEmpty(projectFinalCostManages)){
+        if (CollectionUtil.isNotEmpty(projectFinalCostManages)) {
             for (ProjectFinalCostManage projectFinalCostManage : projectFinalCostManages) {
-                if(ProjectFinalCostManage.TYPE_EXPROPRIATION == projectFinalCostManage.getType()){
+                if (ProjectFinalCostManage.TYPE_EXPROPRIATION == projectFinalCostManage.getType()) {
                     finalBean.setCostExpropriationFinalTotal(projectFinalCostManage.getFinalTotalManageCost());
-                }else if(ProjectFinalCostManage.TYPE_COMPANY_MANAGE == projectFinalCostManage.getType()){
+                } else if (ProjectFinalCostManage.TYPE_COMPANY_MANAGE == projectFinalCostManage.getType()) {
                     finalBean.setCostCompanyManageFinalTotal(projectFinalCostManage.getFinalTotalManageCost());
-                }else if(ProjectFinalCostManage.TYPE_INCOME_TAX == projectFinalCostManage.getType()){
+                } else if (ProjectFinalCostManage.TYPE_INCOME_TAX == projectFinalCostManage.getType()) {
                     finalBean.setCostIncomeTaxFinalTotal(projectFinalCostManage.getFinalTotalManageCost());
                 }
             }
@@ -443,48 +451,48 @@ public class ProjectFinalSevice {
 
 
         List<ProjectFinalCashFlux> projectFinalCashFluxes = projectFinalCashFluxRepository.findByProjectIdEquals(project.getId());
-        if(CollectionUtil.isNotEmpty(projectFinalCashFluxes)){
+        if (CollectionUtil.isNotEmpty(projectFinalCashFluxes)) {
             for (ProjectFinalCashFlux projectFinalCashFlux : projectFinalCashFluxes) {
-                if(ProjectFinalCashFlux.TYPE1 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE1 == projectFinalCashFlux.getType()) {
                     finalBean.setSaleIncomeCash(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE2 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE2 == projectFinalCashFlux.getType()) {
                     finalBean.setTaxReturn(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE3 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE3 == projectFinalCashFlux.getType()) {
                     finalBean.setEarnestMoneyIncome(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE4 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE4 == projectFinalCashFlux.getType()) {
                     finalBean.setPurchaseCost(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE5 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE5 == projectFinalCashFlux.getType()) {
                     finalBean.setTaxCost(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE6 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE6 == projectFinalCashFlux.getType()) {
                     finalBean.setEarnestMoneyCost(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE7 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE7 == projectFinalCashFlux.getType()) {
                     finalBean.setNetCashFlow(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE8 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE8 == projectFinalCashFlux.getType()) {
                     finalBean.setCashInflowFromInvestingActivities(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE9 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE9 == projectFinalCashFlux.getType()) {
                     finalBean.setCashOutflowFromInvestingActivities(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE10 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE10 == projectFinalCashFlux.getType()) {
                     finalBean.setNetCashFromInvestingActivities(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE11 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE11 == projectFinalCashFlux.getType()) {
                     finalBean.setFinancingCapitalInflow(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE12 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE12 == projectFinalCashFlux.getType()) {
                     finalBean.setFinancingCapitalOutflow(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE13 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE13 == projectFinalCashFlux.getType()) {
                     finalBean.setFinancingCapitalCashflow(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
-                if(ProjectFinalCashFlux.TYPE14 == projectFinalCashFlux.getType()){
+                if (ProjectFinalCashFlux.TYPE14 == projectFinalCashFlux.getType()) {
                     finalBean.setNetIncreaseMonetaryFunds(projectFinalCashFlux.getFinalTotalCashFlux());
                 }
             }