diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java
index 5467d2b..283f75a 100644
--- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java
+++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java
@@ -36,6 +36,8 @@ import java.util.concurrent.ConcurrentHashMap;
 @RequestMapping("/project")
 public class ProjectController extends BaseController {
     private static final Logger logger = LoggerFactory.getLogger(ProjectController.class);
+    private static final String PROJECT_ID = "projectId";
+    private static final String DETAILS = "details";
 
     @Autowired
     private DeptService deptService;
@@ -230,16 +232,16 @@ public class ProjectController extends BaseController {
     @ResponseBody
     public ResponseMsg budgetEditSaveIncomeDetail(@RequestBody String body) {
         JSONObject jsonObject = JSON.parseObject(body);
-        JSONArray details = jsonObject.getJSONArray("details");
-        List<ProjectBudgetIncomeDetail> detailList = new ArrayList<>(details.size());
+        JSONArray details = jsonObject.getJSONArray(DETAILS);
+        List<ProjectBudgetIncomeDetailTemp> detailList = new ArrayList<>(details.size());
         for (int i = 0; i < details.size(); i++) {
-            ProjectBudgetIncomeDetail detail = details.getObject(i, ProjectBudgetIncomeDetail.class);
+            ProjectBudgetIncomeDetailTemp detail = details.getObject(i, ProjectBudgetIncomeDetailTemp.class);
             detailList.add(detail);
         }
 
-        Project project = projectService.getProject(jsonObject.getInteger("projectId"));
+        Project project = projectService.getProject(jsonObject.getInteger(PROJECT_ID));
 
-        projectBudgetService.saveBudgetIncomeDetail(project, detailList);
+        projectBudgetService.saveBudgetIncomeDetailTemp(project, detailList);
 
         return ResponseMsg.buildSuccessMsg("成功");
     }
@@ -251,16 +253,16 @@ public class ProjectController extends BaseController {
     @ResponseBody
     public ResponseMsg budgetEditSaveCostDetail(@RequestBody String body) {
         JSONObject jsonObject = JSON.parseObject(body);
-        JSONArray details = jsonObject.getJSONArray("details");
-        List<ProjectBudgetCostDetail> detailList = new ArrayList<>(details.size());
+        JSONArray details = jsonObject.getJSONArray(DETAILS);
+        List<ProjectBudgetCostDetailTemp> detailList = new ArrayList<>(details.size());
         for (int i = 0; i < details.size(); i++) {
-            ProjectBudgetCostDetail detail = details.getObject(i, ProjectBudgetCostDetail.class);
+            ProjectBudgetCostDetailTemp detail = details.getObject(i, ProjectBudgetCostDetailTemp.class);
             detailList.add(detail);
         }
 
-        Project project = projectService.getProject(jsonObject.getInteger("projectId"));
+        Project project = projectService.getProject(jsonObject.getInteger(PROJECT_ID));
 
-        projectBudgetService.saveBudgetCostDetail(project, detailList);
+        projectBudgetService.saveBudgetCostDetailTemp(project, detailList);
 
         return ResponseMsg.buildSuccessMsg("成功");
     }
@@ -272,16 +274,16 @@ public class ProjectController extends BaseController {
     @ResponseBody
     public ResponseMsg budgetEditSaveCostProjectManageDetail(@RequestBody String body) {
         JSONObject jsonObject = JSON.parseObject(body);
-        JSONArray details = jsonObject.getJSONArray("details");
-        List<ProjectBudgetCostProjectManageDetail> detailList = new ArrayList<>(details.size());
+        JSONArray details = jsonObject.getJSONArray(DETAILS);
+        List<ProjectBudgetCostProjectManageDetailTemp> detailList = new ArrayList<>(details.size());
         for (int i = 0; i < details.size(); i++) {
-            ProjectBudgetCostProjectManageDetail detail = details.getObject(i, ProjectBudgetCostProjectManageDetail.class);
+            ProjectBudgetCostProjectManageDetailTemp detail = details.getObject(i, ProjectBudgetCostProjectManageDetailTemp.class);
             detailList.add(detail);
         }
 
-        Project project = projectService.getProject(jsonObject.getInteger("projectId"));
+        Project project = projectService.getProject(jsonObject.getInteger(PROJECT_ID));
 
-        projectBudgetService.saveBudgetCostProjectManageDetail(project, detailList);
+        projectBudgetService.saveBudgetCostProjectManageDetailTemp(project, detailList);
 
         return ResponseMsg.buildSuccessMsg("成功");
     }
@@ -293,16 +295,16 @@ public class ProjectController extends BaseController {
     @ResponseBody
     public ResponseMsg budgetEditSaveBudgetPlanDetail(@RequestBody String body) {
         JSONObject jsonObject = JSON.parseObject(body);
-        JSONArray details = jsonObject.getJSONArray("details");
-        List<ProjectBudgetPlanDetail> detailList = new ArrayList<>(details.size());
+        JSONArray details = jsonObject.getJSONArray(DETAILS);
+        List<ProjectBudgetPlanDetailTemp> detailList = new ArrayList<>(details.size());
         for (int i = 0; i < details.size(); i++) {
-            ProjectBudgetPlanDetail detail = details.getObject(i, ProjectBudgetPlanDetail.class);
+            ProjectBudgetPlanDetailTemp detail = details.getObject(i, ProjectBudgetPlanDetailTemp.class);
             detailList.add(detail);
         }
 
-        Project project = projectService.getProject(jsonObject.getInteger("projectId"));
+        Project project = projectService.getProject(jsonObject.getInteger(PROJECT_ID));
 
-        projectBudgetService.saveBudgetPlanDetail(project, detailList);
+        projectBudgetService.saveBudgetPlanDetailTemp(project, detailList);
 
         return ResponseMsg.buildSuccessMsg("成功");
     }
@@ -426,7 +428,7 @@ public class ProjectController extends BaseController {
      */
     @RequestMapping("/taskRecords/{projectId}")
     public String taskRecords(@PathVariable int projectId, Map<String, Object> model) {
-        model.put("projectId", projectId);
+        model.put(PROJECT_ID, projectId);
         List<ProjectTaskRecord> list = projectTaskRecordService.list(projectId);
         if (list != null && !list.isEmpty()) {
             model.put("list", list);
@@ -452,7 +454,7 @@ public class ProjectController extends BaseController {
      * 流程实列图片
      */
     @RequestMapping("/procInsPng/{projectId}")
-    public void png(HttpServletResponse response, @PathVariable("projectId") int projectId) throws Exception {
+    public void png(HttpServletResponse response, @PathVariable(PROJECT_ID) int projectId) throws Exception {
         List<ProjectInstanceRelation> relationList = projectInstanceRelationRepository.findByProjectIdOrderByCreateTimeDesc(projectId);
         if (relationList == null || relationList.isEmpty()) {
             return;
@@ -499,7 +501,7 @@ public class ProjectController extends BaseController {
         { id:22, pId:2, name:"随意勾选 2-2", open:true},
         { id:23, pId:2, name:"随意勾选 2-3"}*/
         JSONObject jsonObject = JSON.parseObject(body);
-        Integer projectId = jsonObject.getInteger("projectId");
+        Integer projectId = jsonObject.getInteger(PROJECT_ID);
         JSONArray array = jsonObject.getJSONArray("ids");
         String[] ids = new String[array.size()];
         for (int i = 0; i < array.size(); i++) {
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailTemp.java b/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailTemp.java
new file mode 100644
index 0000000..70a4949
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailTemp.java
@@ -0,0 +1,25 @@
+package cn.palmte.work.model;
+
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * 项目预算成本明细临时表
+ */
+@Entity
+@Table(name = "project_budget_cost_detail_temp")
+public class ProjectBudgetCostDetailTemp extends ProjectBudgetCostDetail{
+    public ProjectBudgetCostDetail toProjectBudgetCostDetail(){
+        ProjectBudgetCostDetail detail = new ProjectBudgetCostDetail();
+        detail.setProjectId(getProjectId());
+        detail.setType(getType());
+        detail.setCategory(getCategory());
+        detail.setName(getName());
+        detail.setUnit(getUnit());
+        detail.setAmount(getAmount());
+        detail.setPrice(getPrice());
+        detail.setTaxRate(getTaxRate());
+        return detail;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailTempRepository.java b/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailTempRepository.java
new file mode 100644
index 0000000..e221179
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetCostDetailTempRepository.java
@@ -0,0 +1,9 @@
+package cn.palmte.work.model;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface ProjectBudgetCostDetailTempRepository extends JpaRepository<ProjectBudgetCostDetailTemp,Integer> {
+    List<ProjectBudgetCostDetailTemp> findAllByProjectIdEquals(int id);
+}
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetCostProjectManageDetailTemp.java b/src/main/java/cn/palmte/work/model/ProjectBudgetCostProjectManageDetailTemp.java
new file mode 100644
index 0000000..bbd172d
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetCostProjectManageDetailTemp.java
@@ -0,0 +1,27 @@
+package cn.palmte.work.model;
+
+
+import javax.persistence.*;
+
+/**
+ * 项目预算项目管理成本明细临时表
+ */
+@Entity
+@Table(name = "project_budget_cost_project_manage_detail_temp")
+public class ProjectBudgetCostProjectManageDetailTemp extends ProjectBudgetCostProjectManageDetail{
+    public ProjectBudgetCostProjectManageDetail toProjectBudgetCostProjectManageDetail(){
+        ProjectBudgetCostProjectManageDetail detail = new ProjectBudgetCostProjectManageDetail();
+        detail.setProjectId(getProjectId());
+        detail.setType(getType());
+        detail.setName(getName());
+        detail.setDetail(getDetail());
+        detail.setUnit(getUnit());
+        detail.setAmount(getAmount());
+        detail.setPrice(getPrice());
+        detail.setPredictMethod(getPredictMethod());
+        detail.setPredictWhy(getPredictWhy());
+        detail.setRemark(getRemark());
+        detail.setDeletable(getDeletable());
+        return detail;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetCostProjectManageDetailTempRepository.java b/src/main/java/cn/palmte/work/model/ProjectBudgetCostProjectManageDetailTempRepository.java
new file mode 100644
index 0000000..4184611
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetCostProjectManageDetailTempRepository.java
@@ -0,0 +1,9 @@
+package cn.palmte.work.model;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface ProjectBudgetCostProjectManageDetailTempRepository extends JpaRepository<ProjectBudgetCostProjectManageDetailTemp,Integer> {
+    List<ProjectBudgetCostProjectManageDetailTemp> findAllByProjectIdEquals(int id);
+}
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailTemp.java b/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailTemp.java
new file mode 100644
index 0000000..45e8cfa
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailTemp.java
@@ -0,0 +1,23 @@
+package cn.palmte.work.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * 项目预算收入明细临时表
+ */
+@Entity
+@Table(name = "project_budget_income_detail_temp")
+public class ProjectBudgetIncomeDetailTemp extends ProjectBudgetIncomeDetail{
+    public  ProjectBudgetIncomeDetail toProjectBudgetIncomeDetail(){
+        ProjectBudgetIncomeDetail projectBudgetIncomeDetail = new ProjectBudgetIncomeDetail();
+        projectBudgetIncomeDetail.setProjectId(getProjectId());
+        projectBudgetIncomeDetail.setName(getName());
+        projectBudgetIncomeDetail.setType(getType());
+        projectBudgetIncomeDetail.setUnit(getUnit());
+        projectBudgetIncomeDetail.setAmount(getAmount());
+        projectBudgetIncomeDetail.setPrice(getPrice());
+        projectBudgetIncomeDetail.setTaxRate(getTaxRate());
+        return projectBudgetIncomeDetail;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailTempRepository.java b/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailTempRepository.java
new file mode 100644
index 0000000..1d9bb5c
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetIncomeDetailTempRepository.java
@@ -0,0 +1,9 @@
+package cn.palmte.work.model;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface ProjectBudgetIncomeDetailTempRepository extends JpaRepository<ProjectBudgetIncomeDetailTemp,Integer> {
+    List<ProjectBudgetIncomeDetailTemp> findAllByProjectIdEquals(int id);
+}
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailTemp.java b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailTemp.java
new file mode 100644
index 0000000..098133c
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailTemp.java
@@ -0,0 +1,30 @@
+package cn.palmte.work.model;
+
+import javax.persistence.*;
+
+/**
+ * 资金计划明细临时表
+ */
+@Entity
+@Table(name = "project_budget_plan_detail_temp")
+public class ProjectBudgetPlanDetailTemp extends ProjectBudgetPlanDetail{
+    public ProjectBudgetPlanDetail toProjectBudgetPlanDetail(){
+        ProjectBudgetPlanDetail projectBudgetPlanDetail = new ProjectBudgetPlanDetail();
+        projectBudgetPlanDetail.setProjectId(getProjectId());
+        projectBudgetPlanDetail.setMonth(getMonth());
+        projectBudgetPlanDetail.setDeviceCost(getDeviceCost());
+        projectBudgetPlanDetail.setEngineerCost(getEngineerCost());
+        projectBudgetPlanDetail.setProjectManageCost(getProjectManageCost());
+        projectBudgetPlanDetail.setEarnestMoneyCost(getEarnestMoneyCost());
+        projectBudgetPlanDetail.setTotalCost(getTotalCost());
+        projectBudgetPlanDetail.setSaleIncome(getSaleIncome());
+        projectBudgetPlanDetail.setEarnestMoneyIncome(getEarnestMoneyIncome());
+        projectBudgetPlanDetail.setTotalIncome(getTotalIncome());
+        projectBudgetPlanDetail.setFundBalance(getFundBalance());
+        projectBudgetPlanDetail.setUnderwrittenTaxRate(getUnderwrittenTaxRate());
+        projectBudgetPlanDetail.setCapitalInterest(getCapitalInterest());
+        projectBudgetPlanDetail.setUnderwrittenPlan(getUnderwrittenPlan());
+        projectBudgetPlanDetail.setRepaymentPlan(getRepaymentPlan());
+        return projectBudgetPlanDetail;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailTempRepository.java b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailTempRepository.java
new file mode 100644
index 0000000..f91d8cc
--- /dev/null
+++ b/src/main/java/cn/palmte/work/model/ProjectBudgetPlanDetailTempRepository.java
@@ -0,0 +1,13 @@
+package cn.palmte.work.model;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface ProjectBudgetPlanDetailTempRepository extends JpaRepository<ProjectBudgetPlanDetailTemp,Integer> {
+    List<ProjectBudgetPlanDetailTemp> findAllByProjectIdEquals(int id);
+
+    @Query(value = "select * from project_budget_plan_detail_temp where project_id in ?1", nativeQuery = true)
+    List<ProjectBudgetPlanDetailTemp> findAllByProjectIds(List<Integer> projectInt);
+}
diff --git a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java
index 2d75f44..84cd043 100644
--- a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java
+++ b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java
@@ -28,12 +28,20 @@ public class ProjectBudgetService {
     @Autowired
     private ProjectBudgetIncomeDetailRepository projectBudgetIncomeDetailRepository;
     @Autowired
+    private ProjectBudgetIncomeDetailTempRepository projectBudgetIncomeDetailTempRepository;
+    @Autowired
     private ProjectBudgetCostDetailRepository projectBudgetCostDetailRepository;
     @Autowired
+    private ProjectBudgetCostDetailTempRepository projectBudgetCostDetailTempRepository;
+    @Autowired
     private ProjectBudgetCostProjectManageDetailRepository projectBudgetCostProjectManageDetailRepository;
     @Autowired
+    private ProjectBudgetCostProjectManageDetailTempRepository projectBudgetCostProjectManageDetailTempRepository;
+    @Autowired
     private ProjectBudgetPlanDetailRepository projectBudgetPlanDetailRepository;
     @Autowired
+    private ProjectBudgetPlanDetailTempRepository projectBudgetPlanDetailTempRepository;
+    @Autowired
     private ProjectInstanceService projectInstanceService;
     @Autowired
     private ActTaskDefService actTaskDefService;
@@ -321,6 +329,12 @@ public class ProjectBudgetService {
             projectBudgetIncomeDetailRepository.deleteInBatch(incomeDetails);
         }
     }
+    public void clearBudgetIncomeDetailTemp(Project project){
+        List<ProjectBudgetIncomeDetailTemp> incomeDetails = projectBudgetIncomeDetailTempRepository.findAllByProjectIdEquals(project.getId());
+        if(CollectionUtil.isNotEmpty(incomeDetails)){
+            projectBudgetIncomeDetailTempRepository.deleteInBatch(incomeDetails);
+        }
+    }
 
     /**
      * 保存项目的收入明细
@@ -335,6 +349,17 @@ public class ProjectBudgetService {
             projectBudgetIncomeDetailRepository.save(detailList);
         }
     }
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void saveBudgetIncomeDetailTemp(Project project, List<ProjectBudgetIncomeDetailTemp> detailList){
+        clearBudgetIncomeDetailTemp(project);
+        if(CollectionUtil.isNotEmpty(detailList)){
+            for (ProjectBudgetIncomeDetailTemp projectBudgetIncomeDetail : detailList) {
+                projectBudgetIncomeDetail.setProjectId(project.getId());
+            }
+            projectBudgetIncomeDetailTempRepository.save(detailList);
+        }
+
+    }
 
     /**
      * 获取项目的收入明细
@@ -351,6 +376,12 @@ public class ProjectBudgetService {
             projectBudgetCostDetailRepository.deleteInBatch(costDetails);
         }
     }
+    public void clearBudgetCostDetailTemp(Project project){
+        List<ProjectBudgetCostDetailTemp> costDetails = projectBudgetCostDetailTempRepository.findAllByProjectIdEquals(project.getId());
+        if(CollectionUtil.isNotEmpty(costDetails)){
+            projectBudgetCostDetailTempRepository.deleteInBatch(costDetails);
+        }
+    }
 
     /**
      * 保存项目的成本明细
@@ -366,6 +397,17 @@ public class ProjectBudgetService {
             projectBudgetCostDetailRepository.save(detailList);
         }
     }
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void saveBudgetCostDetailTemp(Project project, List<ProjectBudgetCostDetailTemp> detailList){
+        clearBudgetCostDetailTemp(project);
+
+        if(CollectionUtil.isNotEmpty(detailList)){
+            for (ProjectBudgetCostDetailTemp projectBudgetCostDetail : detailList) {
+                projectBudgetCostDetail.setProjectId(project.getId());
+            }
+            projectBudgetCostDetailTempRepository.save(detailList);
+        }
+    }
 
     /**
      * 获取项目的成本明细
@@ -382,6 +424,12 @@ public class ProjectBudgetService {
             projectBudgetCostProjectManageDetailRepository.deleteInBatch(costDetails);
         }
     }
+    public void clearBudgetCostProjectManageDetailTemp(Project project){
+        List<ProjectBudgetCostProjectManageDetailTemp> costDetails = projectBudgetCostProjectManageDetailTempRepository.findAllByProjectIdEquals(project.getId());
+        if(CollectionUtil.isNotEmpty(costDetails)){
+            projectBudgetCostProjectManageDetailTempRepository.deleteInBatch(costDetails);
+        }
+    }
 
     /**
      * 保存项目的项目管理成本明细
@@ -396,6 +444,16 @@ public class ProjectBudgetService {
             projectBudgetCostProjectManageDetailRepository.save(detailList);
         }
     }
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void saveBudgetCostProjectManageDetailTemp(Project project, List<ProjectBudgetCostProjectManageDetailTemp> detailList){
+        clearBudgetCostProjectManageDetailTemp(project);
+        if(CollectionUtil.isNotEmpty(detailList)){
+            for (ProjectBudgetCostProjectManageDetailTemp projectBudgetCostProjectManageDetail : detailList) {
+                projectBudgetCostProjectManageDetail.setProjectId(project.getId());
+            }
+            projectBudgetCostProjectManageDetailTempRepository.save(detailList);
+        }
+    }
 
     /**
      * 获取项目管理明细
@@ -435,6 +493,12 @@ public class ProjectBudgetService {
             projectBudgetPlanDetailRepository.deleteInBatch(costDetails);
         }
     }
+    public void clearBudgetPlanDetailTemp(Project project){
+        List<ProjectBudgetPlanDetailTemp> costDetails = projectBudgetPlanDetailTempRepository.findAllByProjectIdEquals(project.getId());
+        if(CollectionUtil.isNotEmpty(costDetails)){
+            projectBudgetPlanDetailTempRepository.deleteInBatch(costDetails);
+        }
+    }
 
     /**
      * 保存项目的资金计划明细
@@ -450,6 +514,17 @@ public class ProjectBudgetService {
             projectBudgetPlanDetailRepository.save(detailList);
         }
     }
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void saveBudgetPlanDetailTemp(Project project, List<ProjectBudgetPlanDetailTemp> detailList){
+        clearBudgetPlanDetailTemp(project);
+        if(CollectionUtil.isNotEmpty(detailList)){
+            for (ProjectBudgetPlanDetailTemp projectBudgetPlanDetail : detailList) {
+                projectBudgetPlanDetail.setProjectId(project.getId());
+                projectBudgetPlanDetail.setUnderwrittenTaxRate(project.getUnderwrittenTaxRate());
+            }
+            projectBudgetPlanDetailTempRepository.save(detailList);
+        }
+    }
 
     /**
      * 获取资金计划数据
@@ -553,7 +628,7 @@ public class ProjectBudgetService {
 
 
         ProjectBudgetPlanDetail projectBudgetPlanDetail = new ProjectBudgetPlanDetail();
-        projectBudgetPlanDetail.setMonth("合计");
+        projectBudgetPlanDetail.setMonth("数据代入");
         projectBudgetPlanDetail.setDeviceCost(deviceCost);
         projectBudgetPlanDetail.setEngineerCost(engineerCost);
         projectBudgetPlanDetail.setProjectManageCost(projectManageCost);
@@ -707,6 +782,56 @@ public class ProjectBudgetService {
         //清空重新保存概算信息
         clearBudget(p);
         saveBudget(p, budgetBean);
+
+        clearBudgetDetail(p);
+        saveBudgetDetail(p);
         return p;
     }
+
+    private void saveBudgetDetail(Project p) {
+        //临时表中始终是最新的详情,不管是本次修改还是以前保持的
+        //收入明细
+        List<ProjectBudgetIncomeDetailTemp> projectBudgetIncomeDetailTemps = projectBudgetIncomeDetailTempRepository.findAllByProjectIdEquals(p.getId());
+        if(CollectionUtil.isNotEmpty(projectBudgetIncomeDetailTemps)){
+            List<ProjectBudgetIncomeDetail> incomeDetails = projectBudgetIncomeDetailTemps.stream()
+                    .map(ProjectBudgetIncomeDetailTemp::toProjectBudgetIncomeDetail)
+                    .collect(Collectors.toList());
+            projectBudgetIncomeDetailRepository.save(incomeDetails);
+        }
+        //成本明细
+        List<ProjectBudgetCostDetailTemp> projectBudgetCostDetailTemps = projectBudgetCostDetailTempRepository.findAllByProjectIdEquals(p.getId());
+        if(CollectionUtil.isNotEmpty(projectBudgetCostDetailTemps)){
+            List<ProjectBudgetCostDetail> costDetails = projectBudgetCostDetailTemps.stream()
+                    .map(ProjectBudgetCostDetailTemp::toProjectBudgetCostDetail)
+                    .collect(Collectors.toList());
+            projectBudgetCostDetailRepository.save(costDetails);
+        }
+        //项目管理明细
+        List<ProjectBudgetCostProjectManageDetailTemp> projectBudgetCostProjectManageDetailTemps = projectBudgetCostProjectManageDetailTempRepository.findAllByProjectIdEquals(p.getId());
+        if(CollectionUtil.isNotEmpty(projectBudgetCostProjectManageDetailTemps)){
+            List<ProjectBudgetCostProjectManageDetail> costProjectManageDetails = projectBudgetCostProjectManageDetailTemps.stream()
+                    .map(ProjectBudgetCostProjectManageDetailTemp::toProjectBudgetCostProjectManageDetail)
+                    .collect(Collectors.toList());
+            projectBudgetCostProjectManageDetailRepository.save(costProjectManageDetails);
+        }
+        //资金计划明细
+        List<ProjectBudgetPlanDetailTemp> projectBudgetPlanDetailTemps = projectBudgetPlanDetailTempRepository.findAllByProjectIdEquals(p.getId());
+        if(CollectionUtil.isNotEmpty(projectBudgetPlanDetailTemps)){
+            List<ProjectBudgetPlanDetail> budgetPlanDetails = projectBudgetPlanDetailTemps.stream()
+                    .map(ProjectBudgetPlanDetailTemp::toProjectBudgetPlanDetail)
+                    .collect(Collectors.toList());
+            projectBudgetPlanDetailRepository.save(budgetPlanDetails);
+        }
+    }
+
+    private void clearBudgetDetail(Project p) {
+        //收入明细
+        clearBudgetIncomeDetail(p);
+        //成本明细
+        clearBudgetCostDetail(p);
+        //项目管理明细
+        clearBudgetCostProjectManageDetail(p);
+        //资金计划明细
+        clearBudgetPlanDetail(p);
+    }
 }