diff --git a/ServiceSite/facade/pom.xml b/ServiceSite/facade/pom.xml
index afcf617704d1f802d39f5ba2d936851b8a2b6cbc..7d99754a0b14e34cbd7a78bc2db3cafc47b43d92 100644
--- a/ServiceSite/facade/pom.xml
+++ b/ServiceSite/facade/pom.xml
@@ -4,7 +4,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>com.seasky</groupId>
 	<artifactId>projectplan-api</artifactId>
-	<version>1.0.1.026</version>
+	<version>1.0.1.2.1.1.2</version>
 	<name>projectplan-api</name>
 	<description>projectplan-api project for projectplan</description>
 
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IAttachmentController.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IAttachmentController.java
index de6fac2b8c87222ab5054c8fe2d056c51137da4a..9afd0c0d3a8a078c46114ff001e0d96b266d91e9 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IAttachmentController.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IAttachmentController.java
@@ -25,47 +25,25 @@ import java.util.List;
 @RequestMapping("attachment")
 public interface IAttachmentController {
 
-    /**
-     * 涓婁紶闄勪欢
-     *
-     * @param file    鏂囦欢
-     * @param request 璇锋眰
-     * @return {@link Object}
-     * @throws Exception 寮傚父
-     *//*
+
+
     @PostMapping(path = "uploadAttachment")
     Object uploadAttachment(@RequestParam("file") MultipartFile file, AttachmentCmd request) throws Exception;
 
-    *//**
-     * 涓嬭浇闄勪欢
-     *
-     * @param response      鍝嶅簲
-     * @param attachmentQry 闄勪欢qry
-     * @throws IOException ioexception
-     *//*
+
+
     @PostMapping(path = "downloadAttachment")
     void downloadAttachment(HttpServletResponse response, @RequestBody AttachmentQry attachmentQry) throws IOException;
 
-    *//**
-     * 鍒犻櫎闄勪欢
-     *
-     * @param request 璇锋眰
-     * @return {@link Object}
-     * @throws IOException ioexception
-     *//*
+
+
     @PostMapping(path = "removeAttachment")
     Object removeAttachment(@RequestBody AttachmentQry request) throws IOException;
 
-    *//**
-     * 涓婁紶闄勪欢鍒楄〃
-     *
-     * @param files   鏂囦欢
-     * @param request 璇锋眰
-     * @return {@link Object}
-     * @throws Exception 寮傚父
-     *//*
+
+
     @PostMapping(path = "uploadAttachmentList")
-    Object uploadAttachmentList(@RequestParam("files") MultipartFile[] files, AttachmentCmd request) throws Exception;*/
+    Object uploadAttachmentList(@RequestParam("files") MultipartFile[] files, AttachmentCmd request) throws Exception;
 
 
     /**
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IProjectPlan.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IProjectPlan.java
index fc5e2409ee2ee7617915f199a2f752f621f1f592..393ee1a6e0d81e323777fec35d5d63b9b91deee8 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IProjectPlan.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IProjectPlan.java
@@ -352,4 +352,12 @@ public interface IProjectPlan {
      */
     @PostMapping(path = "/saveExpenseCardNumber")
     Result<Object> saveExpenseCardNumber(ExpenseCardCmd expenseCard);
+
+    /**
+     * init閰嶉淇℃伅
+     *
+     * @return {@link Result<Integer>}
+     */
+    @PostMapping(path = "/initQuotaInfo")
+    Result<Integer> initQuotaInfo();
 }
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/ITestController.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/ITestController.java
deleted file mode 100644
index fbc5a39c83c219ea0bbfe8075f8918584e62fd12..0000000000000000000000000000000000000000
--- a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/ITestController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.seasky.projectplan.api;
-
-import com.seasky.core.common.Result;
-import com.seasky.projectplan.dto.test.TestCmd;
-import com.seasky.projectplan.dto.test.TestQueryOut;
-import com.seasky.projectplan.dto.test.TestQueryQry;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.io.UnsupportedEncodingException;
-
-@FeignClient("dddtemplate-provider")
-@RequestMapping("test")
-@Api("Test")
-public interface ITestController {
-
-    @ApiOperation("1.testQ")
-    @PostMapping(path = "/pc/v1/queryList")
-    Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry);
-
-    @ApiOperation("2.testExport")
-    @PostMapping(path = "/pc/v1/export")
-    ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException;
-
-    @ApiOperation("3.testSave")
-    @PostMapping(path = "/pc/v1/save")
-    Result<Long> testSave(@RequestBody TestCmd testCmd);
-
-    @ApiOperation("4.testSubmit")
-    @PostMapping(path = "/pc/v1/submit")
-    Result<Long> testSubmit(@RequestBody TestCmd testCmd);
-
-    @ApiOperation("5.testSaveAndSubmit")
-    @PostMapping(path = "/pc/v1/saveandsubmit")
-    Result<Long> testSaveAndSubmit(@RequestBody TestCmd testCmd);
-}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/fund/FundCmd.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/fund/FundCmd.java
index c4f1bd43115a9ff5b7590a480aa687aa284a88aa..a77f624e499bdd37366997d51d8d880320028f14 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/fund/FundCmd.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/fund/FundCmd.java
@@ -7,6 +7,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.Size;
 
 /**
@@ -36,6 +37,7 @@ public class FundCmd extends BaseDto {
      * 缁忔祹绉戠洰鍚嶇О
      */
     @ApiModelProperty(name = "缁忔祹绉戠洰鍚嶇О", example = "鏍�")
+    @NotEmpty(message = "缁忔祹绉戠洰涓嶈兘涓虹┖")
     @Size(max = 255,message = "缁忔祹绉戠洰鍚嶇О 闀垮害涓嶈兘澶т簬 255 浣�")
     private String fundName;
 
diff --git a/ServiceSite/pom.xml b/ServiceSite/pom.xml
index 7090cb31fafbc899c89757d11251bd4160ea3ae7..e23507444a2c288c3e0e657399d5d01edce1b984 100644
--- a/ServiceSite/pom.xml
+++ b/ServiceSite/pom.xml
@@ -80,7 +80,7 @@
         <dependency>
             <groupId>com.seasky</groupId>
             <artifactId>projectplan-api</artifactId>
-            <version>1.0.1.026</version>
+            <version>1.0.1.2.1.1.2</version>
         </dependency>
         <dependency>
             <groupId>com.seasky</groupId>
diff --git a/ServiceSite/src/main/java/com/seasky/Application.java b/ServiceSite/src/main/java/com/seasky/Application.java
index 9ff5d0fa5d7a3815504c4ce50b3a8b92ab902326..5b733c83cb2ab9b46aecf6b0ff1540da85e69fb0 100644
--- a/ServiceSite/src/main/java/com/seasky/Application.java
+++ b/ServiceSite/src/main/java/com/seasky/Application.java
@@ -18,7 +18,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
 @EnableDiscoveryClient
 @EnableFeignClients(basePackages = {
 
-        "com.seasky.micro.basedata.api","com.seasky.microflowapi.api"
+        "com.seasky.micro.basedata.api","com.seasky.microflowapi.api","com.seasky.budget.quota.api"
 
 })
 @EnableAsync
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvr.java b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvr.java
index d2f85dd7ac65037cdf6fb8266edee16edcd43d53..16dd1c62695ec07be8e148d6f846bcf408fc8337 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvr.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvr.java
@@ -147,5 +147,10 @@ public interface ProjectPlanSvr {
      */
     void saveExpenseCardNumber(ExpenseCardCmd expenseCard);
 
-
+    /**
+     * init閰嶉淇℃伅
+     *
+     * @return {@link Integer}
+     */
+    Integer initQuotaInfo();
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvrImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvrImpl.java
index 71f9e460ec2bc65df624190e6d72089ba0f1d79a..02a88aac8781156f17a7fde86bd9219c6034ec66 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvrImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/projectplan/ProjectPlanSvrImpl.java
@@ -723,8 +723,8 @@ public class ProjectPlanSvrImpl implements ProjectPlanSvr {
                     }
 
                 }
-
-                Map<String, Object> toQuotaDeptMoneyPo = new HashMap<>();
+// TODO: 2022/4/12
+                /*Map<String, Object> toQuotaDeptMoneyPo = new HashMap<>();
                 toQuotaDeptMoneyPo.put("project_id", cmd.getId());
                 List<ToQuotaDeptMoneyPo> toQuotaDeptMoneyPoList = toQuotaDeptMoneyMapper.selectByMap(toQuotaDeptMoneyPo);
                 //鏍¢獙鏉′欢锛歵oQuotaDeptMoneyPoList涓嶄负绌猴紝闀垮害涓嶄负0
@@ -734,7 +734,7 @@ public class ProjectPlanSvrImpl implements ProjectPlanSvr {
                                 (new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "閮ㄩ棬鐢虫姤閲戦瓒呭嚭閮ㄩ棬鏍稿畾閲戦", ""));
 
                     }
-                }
+                }*/
 
             }
         }
@@ -1054,5 +1054,15 @@ public class ProjectPlanSvrImpl implements ProjectPlanSvr {
 
     }
 
+    /**
+     * init閰嶉淇℃伅
+     *
+     * @return {@link Integer}
+     */
+    @Override
+    public Integer initQuotaInfo() {
+        return null;
+    }
+
 
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/ProjectDetailDo.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/ProjectDetailDo.java
new file mode 100644
index 0000000000000000000000000000000000000000..8694e71e28c362533321bbb4b3cb971440bc99f9
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/ProjectDetailDo.java
@@ -0,0 +1,40 @@
+package com.seasky.projectplan.infrastructure.dataobject.co;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * 椤圭洰鐨勭粏鑺�
+ *
+ * @author bandi
+ * @date 2022/03/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class ProjectDetailDo {
+
+    @ApiModelProperty(name = "涓婚敭id", example = "1")
+    private Long id;
+
+    @ApiModelProperty(name = "棰濆害缂栧彿", example = "1")
+    @TableField("sapCode2")
+    private String limitCode;
+
+    @ApiModelProperty(name = "棰濆害鍚嶇О", example = "1")
+    private String limitName;
+
+    @ApiModelProperty(name = "棰濆害閲戦", example = "1")
+    @TableField("subTotal")
+    private BigDecimal limitAmount;
+    @ApiModelProperty(name = "鎵胯椤圭洰缂栧彿", example = "1")
+    @TableField("sapCode")
+    private String fmCode;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/ProjectToQuotaDo.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/ProjectToQuotaDo.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cad81baa6ee5f01442d5ceba1553605e99ae038
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/ProjectToQuotaDo.java
@@ -0,0 +1,124 @@
+package com.seasky.projectplan.infrastructure.dataobject.co;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * 椤圭洰閰嶉
+ *
+ * @author bandi
+ * @date 2022/03/23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class ProjectToQuotaDo {
+    @ApiModelProperty(name = "涓婚敭id", example = "1")
+    private Long id;
+
+
+    @ApiModelProperty(name = "椤圭洰鍚嶇О", example = "椤圭洰鍚嶇О")
+    @TableField("project_name")
+    private String projectName;
+
+
+    @ApiModelProperty(name = "椤圭洰缂栧彿", example = "1")
+    @TableField("number")
+    private String projectCode;
+
+
+    @ApiModelProperty(name = "棰勭畻缁撴瀯妯℃澘", example = "棰勭畻缁撴瀯妯℃澘")
+
+    @TableField("fmOneCode")
+    private String promiseProject;
+
+
+    @ApiModelProperty(name = "绔嬮」骞村害", example = "2021")
+    @TableField("year")
+    private Integer budgetYear;
+
+
+    @ApiModelProperty(name = "鎵€灞為儴闂�", example = "閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty(name = "缁忚垂id", example = "1")
+    private Long fundId;
+
+    @ApiModelProperty(name = "鎸囨爣id", example = "1")
+    private Long expenditureId;
+
+    @ApiModelProperty(name = "鎸囨爣鏂板椤圭洰鑺傜偣id", example = "1")
+    private Long indexSelfId;
+
+
+    @ApiModelProperty(name = "妯℃澘id", example = "1")
+    private Long moduleId;
+
+    @ApiModelProperty(name = "鏄惁鍚敤", example = "YES")
+    private String isAvailable;
+
+
+    @ApiModelProperty(name = "璐熻矗浜虹紪鍙�", example = "001")
+    @TableField("project_leader_code")
+    private String managerCode;
+
+
+    @ApiModelProperty(name = "璐熻矗浜哄悕绉�", example = "璐熻矗浜�")
+    @TableField("project_leader_name")
+    private String managerName;
+
+
+    @ApiModelProperty(name = "鏀嚭鍔熻兘鍒嗙被", example = "鏀嚭鍔熻兘鍒嗙被")
+    private String functionType;
+
+
+    @ApiModelProperty(name = "鏀嚭绫诲埆", example = "鏀嚭绫诲埆")
+    private String expenditureType;
+
+
+    @ApiModelProperty(name = "璧勯噾鎬ц川", example = "璧勯噾鎬ц川")
+    private String fundNature;
+
+
+    @ApiModelProperty(name = "閮ㄩ棬缁忚垂", example = "閮ㄩ棬缁忚垂")
+    private String departmentFund;
+
+    @ApiModelProperty(name = "閮ㄩ棬缂栧彿4", example = "閮ㄩ棬缂栧彿")
+    @TableField("department_code")
+    private String departmentCode;
+
+
+    @ApiModelProperty(name = "浠g紪椤圭洰", example = "浠g紪椤圭洰")
+    private String agentProject;
+
+
+    @ApiModelProperty(name = "棰勭畻绫诲埆", example = "棰勭畻绫诲埆")
+    private String budgetType;
+
+
+    @ApiModelProperty(name = "璧勯噾鏉ユ簮", example = "璧勯噾鏉ユ簮")
+    private String fundSource;
+
+
+    @ApiModelProperty(name = "棰勭暀瀛楁1", example = "1")
+    @TableField("number")
+    private String reserveOne;
+
+
+    @ApiModelProperty(name = "棰勭暀瀛楁2", example = "2")
+    private String reserveTwo;
+
+    @ApiModelProperty(name = "寮€棰樺勾浠�", example = "2020")
+    private Integer openYear;
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/SapFmDo.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/SapFmDo.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0e33a63d371dee1a7be5c0fc30a251ba8b6a109
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/SapFmDo.java
@@ -0,0 +1,38 @@
+package com.seasky.projectplan.infrastructure.dataobject.co;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * sap璋冮鍋�
+ *
+ * @author bandi
+ * @date 2022/03/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class SapFmDo {
+    /**
+     * 鎵胯椤圭洰缂栧彿
+     */
+    @TableField("sapCode")
+    private String fmCode;
+
+    /**
+     * 鎵胯椤圭洰璇存槑
+     */
+    private String fmName;
+
+    /**
+     * 閽�
+     */
+    @TableField("subTotal")
+    private BigDecimal money;
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/YBHisInfoDo.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/YBHisInfoDo.java
index 09fc0b099d398455a00f906b05cd5e9fec0ccb88..f2f321d77dd51e416acb3c9ae5cfe4abb824779d 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/YBHisInfoDo.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/co/YBHisInfoDo.java
@@ -23,11 +23,11 @@ public class YBHisInfoDo extends BaseDataObject {
     @ApiModelProperty("棰勬嫧涓昏〃id")
     private Long id;
 
-    @TableField("remak")
+    @TableField("remark")
     @ApiModelProperty("澶囨敞")
     private String remake;
 
-    @TableField("currentAmountApproveds")
+    @TableField("currentAmountApproved")
     @ApiModelProperty("鎷ㄦ鎬婚噾棰�")
     private BigDecimal currentAmountApproved;
 
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/ProjectPlanBookMapper.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/ProjectPlanBookMapper.java
index 54bd016c18499f5e59b1e460d5f28c47e5121509..86c47e4c2ee3bb6e2cc7e12f80fb00282ea44e80 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/ProjectPlanBookMapper.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/ProjectPlanBookMapper.java
@@ -8,9 +8,7 @@ import com.seasky.projectplan.dto.projectplan.ProjectPersonPlanQry;
 import com.seasky.projectplan.dto.projectplan.ProjectPlanBookOut;
 import com.seasky.projectplan.dto.projectplan.ProjectInfoPlanQry;
 import com.seasky.projectplan.dto.quotamanage.ToQuotaMoneyManageCmd;
-import com.seasky.projectplan.infrastructure.dataobject.co.ProjectDailyPlanDo;
-import com.seasky.projectplan.infrastructure.dataobject.co.ProjectInfoPlanDo;
-import com.seasky.projectplan.infrastructure.dataobject.co.ProjectPersonPlanDo;
+import com.seasky.projectplan.infrastructure.dataobject.co.*;
 import com.seasky.projectplan.infrastructure.dataobject.po.ProjectPlanBookPo;
 import com.seasky.projectplan.infrastructure.dataobject.qo.ProjectPlanBookQo;
 import org.apache.ibatis.annotations.Mapper;
@@ -201,4 +199,29 @@ public interface ProjectPlanBookMapper extends BaseMapper<ProjectPlanBookPo> {
      * @return {@link List<ProjectPlanBookPo>}
      */
     Page<ProjectPlanBookPo> queryCanUseProjectInfo(Page<ToQuotaMoneyManageCmd> page, @Param("year") Long year);
+
+    /**
+     * 鍒濆鍖栨煡璇㈤」鐩�
+     *
+     * @param year 涓€骞�
+     * @return {@link List<ProjectToQuotaDo>}
+     */
+    List<ProjectToQuotaDo> queryInitProject(@Param("year") Long year);
+
+    /**
+     * 鏌ヨsap椤圭洰id
+     *
+     * @param id id
+     * @return {@link List<SapFmDo>}
+     */
+    List<SapFmDo> querySapByProjectId(@Param("id") Long id);
+
+
+    /**
+     * 鏌ヨfjsap椤圭洰id
+     *
+     * @param id id
+     * @return {@link List<ProjectDetailDo>}
+     */
+    List<ProjectDetailDo> queryFJSapByProjectId(@Param("id") Long id);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/BudgetInfoMapper.xml b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/BudgetInfoMapper.xml
index 4256b35c8b88c49144040c75ca999103f7d81c48..b26eabcf684fafca62f113c9aac79e9388e814b8 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/BudgetInfoMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/BudgetInfoMapper.xml
@@ -193,7 +193,7 @@
         from budget_info
         <where>
             available = 'YES'
-            and (select count(1) from budget_info e where e.parent_budget_id=budget_info.id) = 0
+            and (select count(1) from budget_info e where e.parent_budget_id=budget_info.id and e.available = 'YES') = 0
             <if test="pm.id != null">
                 and id = #{pm.id}
             </if>
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectMapper.xml b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectMapper.xml
index 9360d702f45d6c1300f7a49374f415e3dee299c2..525b9376f83bc1166a1d334aac327d9ad574c479 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectMapper.xml
@@ -4,7 +4,7 @@
 
     <select id="queryYBHisInfoById"
             resultType="com.seasky.projectplan.infrastructure.dataobject.co.YBHisInfoDo">
-        select remark,id,currentAmountApproveds
+        select remark,id,isnull(currentAmountApproveds,0) as currentAmountApproved
         from project_prediction
         where projectPlanBookId=#{id} and available='YES'
     </select>
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectPlanBookMapper.xml b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectPlanBookMapper.xml
index 2f24b22bd4d48e35f8c0fc2d814e46375e681c92..c5c335dc4908d6c06700b1d3deab70966a853f23 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectPlanBookMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/ProjectPlanBookMapper.xml
@@ -897,5 +897,26 @@
         select tbb2.projectId from dbo.toQuotaDept tbb1 inner join dbo.toQuotaDept_money tbb2 on tbb1.id=tbb2.parentid
         where tbb1.available='YES' and tbb2.available='YES' and tbb1.year=#{year} and tbb2.projectId is not null)
     </select>
+    <select id="queryInitProject" resultType="com.seasky.projectplan.infrastructure.dataobject.co.ProjectToQuotaDo">
+select tb1.number,tb2.department_name,tb2.department_code,tb2.project_name,tb2.year,tb2.project_leader_name,tb2.project_leader_code,tb3.FM_FIPGR as fm_fipgr,tb4.FIPGR as fipgr,tb2.id,isnull(tb5.id,1390139259413770242) as moduleId from dbo.ExpenseCardNumber tb1 inner join dbo.project_plan_book tb2 on tb1.ProjectPlanID=tb2.id
+left join FMFCTRBP tb3 on tb1.number=tb3.FISTL left join PRPS tb4 on tb1.number=tb4.POSKI
+left join Budget_Quota_Test.dbo.template tb5 on tb4.FIPGR=tb5.code
+  where tb2.state='瀹℃牳瀹屾垚' and tb2.plan_type='ERSHANG' and tb2.available='YES' and tb1.available='YES' and tb1.number is not null and tb1.number!=''
+  and tb1.state!='宸插悓姝�'
+    </select>
+    <select id="querySapByProjectId" resultType="com.seasky.projectplan.infrastructure.dataobject.co.SapFmDo">
+       select sapCode, sum(subtotal) as subTotal from (select tb4.sapCode,tb3.subtotal from project_plan_book tb1 inner join ExpenseCardNumber tb2 on tb1.id=tb2.ProjectPlanID inner join dbo.plan_book_subject tb3 on tb1.id=tb3.plan_book_id
+  left join Budget_Quota_Test.dbo.sap tb4 on tb3.subject_code=tb4.code and tb2.number like tb4.type+'%' and tb4.remark=1
+  where tb1.id=#{id} and tb1.available='YES' and tb2.available='YES'
+  and tb3.available='YES'
+  and tb4.available='YES') tbz group by sapCode
+    </select>
+    <select id="queryFJSapByProjectId" resultType="com.seasky.projectplan.infrastructure.dataobject.co.ProjectDetailDo">
+   select sapCode,sapKMCode as sapCode2, sum(subtotal) as subTotal from (select tb4.sapCode,tb4.sapKMCode,tb3.subtotal from project_plan_book tb1 inner join ExpenseCardNumber tb2 on tb1.id=tb2.ProjectPlanID inner join dbo.plan_book_subject tb3 on tb1.id=tb3.plan_book_id
+  left join Budget_Quota_Test.dbo.sap tb4 on tb3.subject_code=tb4.code and tb2.number like tb4.type+'%' and tb4.remark=1
+  where tb1.id=#{id} and tb1.available='YES' and tb2.available='YES'
+  and tb3.available='YES'
+  and tb4.available='YES') tbz where sapKMCode!='' group by sapCode,sapKMCode
+    </select>
 
 </mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/fund/FundQueryServiceImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/fund/FundQueryServiceImpl.java
index 2fb64fc1f2d7c4e101ca8a43ec0631187140e7c0..63e06792a63566394634fd48b92e1ba4fc12d19a 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/fund/FundQueryServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/fund/FundQueryServiceImpl.java
@@ -122,7 +122,7 @@ public class FundQueryServiceImpl extends AbstractService<FundPo, FundMapper> im
      * @param budgetInfoId 缁忔祹绉戠洰id
      * @return {@link List<InfoCanUseFundOut>}
      */
-    @Override
+   /* @Override
     public List<InfoCanUseFundOut> queryFundListByBudgetId(Long budgetInfoId) {
         BudgetInfoPo budgetInfoPo = budgetInfoMapper.selectById(budgetInfoId);
         if (budgetInfoPo == null) {
@@ -159,9 +159,9 @@ public class FundQueryServiceImpl extends AbstractService<FundPo, FundMapper> im
 
 
         return outList;
-    }
+    }*/
     //閲戣瀺鐗堟湰
-    /*@Override
+    @Override
     public List<InfoCanUseFundOut> queryFundListByBudgetId(Long budgetInfoId) {
 
         BudgetInfoPo budgetInfoPo = budgetInfoMapper.selectById(budgetInfoId);
@@ -186,7 +186,7 @@ public class FundQueryServiceImpl extends AbstractService<FundPo, FundMapper> im
         }
         return infoCanUseFundOuts;
 
-    }*/
+    }
 
     /**
      * 鏌ヨ鍏敤缁忚垂绉戠洰
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/prediction/QueryYBInfoServiceImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/prediction/QueryYBInfoServiceImpl.java
index 49c62f1295801bca6282c20b88e03cca8a2992aa..cf9c4e4db2567961f8a9fb726d500c0ae8d8ea05 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/prediction/QueryYBInfoServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/prediction/QueryYBInfoServiceImpl.java
@@ -117,6 +117,7 @@ public class QueryYBInfoServiceImpl extends AbstractService<ProjectPlanBookPo, P
             }
         }
         outPage.setRecords(projectPlanBookOuts);
+        outPage.setTotal(page.getTotal());
         return Pagination.fromPage(outPage);
     }
 
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/rpc/TripartiteRPCImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/rpc/TripartiteRPCImpl.java
index a7ea452ba78b93d243ff6d9973c771a142ab4f99..08034b83d4faf02cee3873f27a03e911ffe3ee5f 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/rpc/TripartiteRPCImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/rpc/TripartiteRPCImpl.java
@@ -14,7 +14,7 @@ public class TripartiteRPCImpl implements TripartiteRPC{
     @Resource
     ExternalInterface externalInterface;
 
-    private final String GetPojectBudgetData_arrival_url = "http://192.168.1.77:8075/ExternalInterface/BusinessProject/GetPojectBudgetData?ProjectCode=";
+    private final String GetPojectBudgetData_arrival_url = "http://cwlx.lixin.edu.cn:8012/ExternalInterface/BusinessProject/GetPojectBudgetData?ProjectCode=";
 
     /**
      * 鏄惁绔嬮」
@@ -30,7 +30,7 @@ public class TripartiteRPCImpl implements TripartiteRPC{
 
 
 
-    private final String CreateProject_arrival_url = "http://192.168.1.77:8075/ExternalInterface/BusinessProject/CreateProject";
+    private final String CreateProject_arrival_url = "http://cwlx.lixin.edu.cn:8012/ExternalInterface/BusinessProject/CreateProject";
 
     /**
      * 绔嬮」
@@ -47,7 +47,7 @@ public class TripartiteRPCImpl implements TripartiteRPC{
 
 
 
-    private final String CreateProjectInfo_arrival_url = "http://192.168.1.77:8075/ExternalInterface/BusinessProject/CreateProjectInfo";
+    private final String CreateProjectInfo_arrival_url = "http://cwlx.lixin.edu.cn:8012/ExternalInterface/BusinessProject/CreateProjectInfo";
 
     /**
      * 椤圭洰鎷ㄦ
@@ -63,7 +63,7 @@ public class TripartiteRPCImpl implements TripartiteRPC{
 
 
 
-    private final String CreateControlsInfo_arrival_url = "http://192.168.1.77:8075/ExternalInterface/BusinessProject/CreateControlsInfo";
+    private final String CreateControlsInfo_arrival_url = "http://cwlx.lixin.edu.cn:8012/ExternalInterface/BusinessProject/CreateControlsInfo";
 
     /**
      * 棰濆害鎷ㄦ
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/ProjectPlanController.java b/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/ProjectPlanController.java
index 5316c7dc8d13c700c1b415722a35734bd102d3ea..74e65556672d6597c285bdef4c004c21408cc22f 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/ProjectPlanController.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/ProjectPlanController.java
@@ -39,7 +39,6 @@ public class ProjectPlanController extends BaseController implements IProjectPla
     private ProjectPlanQueryService queryService;
 
 
-
     @ApiOperation("1.淇濆瓨椤圭洰缁忚垂鐢虫姤涔�")
     @Override
     public Result<Long> saveProjectInfoPlan(@RequestBody ProjectPlanBookCmd projectPlanBookCmd) {
@@ -105,6 +104,7 @@ public class ProjectPlanController extends BaseController implements IProjectPla
     public Result<Integer> rollBackProjectPlanList(@RequestBody List<ActionFlowCmd> list) {
         return ok(ResponseCode.SUCCESS, commandSvr.rollBackProjectPlanList(list));
     }
+
     @ApiOperation("12.鍥哄畾鎵归噺鎻愪氦椤圭洰鐢虫姤涔﹁嚦瀹℃牳瀹屾垚")
     @Override
     public Result<Integer> submitProjectPlanListToFinish(@RequestBody List<Long> idList) {
@@ -182,7 +182,7 @@ public class ProjectPlanController extends BaseController implements IProjectPla
     @ApiOperation("Q11.鏍规嵁浼犲叆閮ㄩ棬鑾峰彇鏌ヨ瀹氶鍩虹淇℃伅")
     @Override
     public Result<PlanBookBasicInformationOut> queryBasicInformation(@RequestBody PlanBookBasicInformationQry planBookBasicInformationQry) {
-        return  ok(ResponseCode.SUCCESS, queryService.queryBasicInformation(planBookBasicInformationQry));
+        return ok(ResponseCode.SUCCESS, queryService.queryBasicInformation(planBookBasicInformationQry));
     }
 
     /**
@@ -193,21 +193,21 @@ public class ProjectPlanController extends BaseController implements IProjectPla
      */
     @ApiOperation("Q13.鎵归噺瀵煎嚭鏃ュ父缁忚垂鐢虫姤涔�")
     @Override
-    public void exportProjectPlan(HttpServletRequest request, HttpServletResponse response,@RequestBody ProjectDailyPlanQry projectDailyPlanQry) {
-        queryService.exportProjectPlan(request,response,projectDailyPlanQry);
+    public void exportProjectPlan(HttpServletRequest request, HttpServletResponse response, @RequestBody ProjectDailyPlanQry projectDailyPlanQry) {
+        queryService.exportProjectPlan(request, response, projectDailyPlanQry);
     }
 
     /**
      * 瀵煎嚭椤圭洰鐢虫姤涔�
      *
-     * @param request             璇锋眰
-     * @param response            鍝嶅簲
+     * @param request            璇锋眰
+     * @param response           鍝嶅簲
      * @param projectInfoPlanQry 椤圭洰鏃ュ父璁″垝qry
      */
     @ApiOperation("Q12.鎵归噺瀵煎嚭椤圭洰缁忚垂鐢虫姤涔�")
     @Override
-    public void exportInfoProjectPlan(HttpServletRequest request, HttpServletResponse response,@RequestBody  ProjectInfoPlanQry projectInfoPlanQry) {
-        queryService.exportInfoProjectPlan(request,response,projectInfoPlanQry);
+    public void exportInfoProjectPlan(HttpServletRequest request, HttpServletResponse response, @RequestBody ProjectInfoPlanQry projectInfoPlanQry) {
+        queryService.exportInfoProjectPlan(request, response, projectInfoPlanQry);
     }
 
     /**
@@ -219,22 +219,22 @@ public class ProjectPlanController extends BaseController implements IProjectPla
      */
     @ApiOperation("Q14.鎵归噺瀵煎嚭椤圭洰缁忚垂鐢虫姤涔�")
     @Override
-    public void exportInfoProjectPlanByCurrentUserDept(HttpServletRequest request, HttpServletResponse response,@RequestBody  ProjectInfoPlanQry projectInfoPlanQry) {
-        queryService.exportInfoProjectPlanByCurrentUserDept(request,response,projectInfoPlanQry);
+    public void exportInfoProjectPlanByCurrentUserDept(HttpServletRequest request, HttpServletResponse response, @RequestBody ProjectInfoPlanQry projectInfoPlanQry) {
+        queryService.exportInfoProjectPlanByCurrentUserDept(request, response, projectInfoPlanQry);
 
     }
 
     /**
      * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄩ泦鍚堝鍑洪」鐩敵鎶ヤ功
      *
-     * @param request            璇锋眰
-     * @param response           鍝嶅簲
+     * @param request              璇锋眰
+     * @param response             鍝嶅簲
      * @param projectPersonPlanQry 椤圭洰淇℃伅璁″垝qry
      */
     @ApiOperation("Q15.鎵归噺瀵煎嚭浜哄憳缁忚垂鐢虫姤涔�")
     @Override
-    public void exportPersonProjectPlanByCurrentUserDept(HttpServletRequest request, HttpServletResponse response,@RequestBody  ProjectPersonPlanQry projectPersonPlanQry) {
-        queryService.exportPersonProjectPlanByCurrentUserDept(request,response,projectPersonPlanQry);
+    public void exportPersonProjectPlanByCurrentUserDept(HttpServletRequest request, HttpServletResponse response, @RequestBody ProjectPersonPlanQry projectPersonPlanQry) {
+        queryService.exportPersonProjectPlanByCurrentUserDept(request, response, projectPersonPlanQry);
 
     }
 
@@ -247,7 +247,7 @@ public class ProjectPlanController extends BaseController implements IProjectPla
     @ApiOperation("Q16.涓嬭浇椤圭洰鐢虫姤涔﹀鍏ユā鏉�")
     @Override
     public void downLoadInfoTemplate(HttpServletRequest request, HttpServletResponse response) {
-        queryService.downLoadInfoTemplate(request,response);
+        queryService.downLoadInfoTemplate(request, response);
     }
 
     /**
@@ -261,7 +261,7 @@ public class ProjectPlanController extends BaseController implements IProjectPla
     @ApiOperation("C12.瀵煎叆椤圭洰鐢虫姤涔�")
     @Override
     public Result<Object> importInfoPlan(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "file") MultipartFile file) {
-        commandSvr.importInfoPlan(request,response,file);
+        commandSvr.importInfoPlan(request, response, file);
         return ok(ResponseCode.SUCCESS);
     }
 
@@ -281,12 +281,13 @@ public class ProjectPlanController extends BaseController implements IProjectPla
     @ApiOperation("10.鑾峰彇鐧诲綍浜烘墍鍦ㄩ儴闂ㄧ殑鍘嗗彶骞村害鐨勯」鐩簱淇℃伅(鍒嗛〉鏄剧ず)")
     @Override
     public Result<PublicProjectHisOut> queryHistoryPublicPageByCurrentUserDept(@RequestBody PublicHisQry qry) {
-        return ok(ResponseCode.SUCCESS,queryService.queryHistoryPublicPageByCurrentUserDept(qry));
+        return ok(ResponseCode.SUCCESS, queryService.queryHistoryPublicPageByCurrentUserDept(qry));
     }
+
     @ApiOperation("10.寮哄埗娴佺▼閲嶅惎锛堜笉閬楃暀鍘嗗彶瀹℃壒璁板綍锛�")
     @Override
-    public Result<Integer> initProjectPlanFlow(@RequestBody List<Long> ids){
-        return ok(ResponseCode.SUCCESS,commandSvr.initProjectPlanFlow(ids));
+    public Result<Integer> initProjectPlanFlow(@RequestBody List<Long> ids) {
+        return ok(ResponseCode.SUCCESS, commandSvr.initProjectPlanFlow(ids));
     }
 
     /**
@@ -314,4 +315,14 @@ public class ProjectPlanController extends BaseController implements IProjectPla
         return ok(ResponseCode.SUCCESS);
     }
 
+    /**
+     * init閰嶉淇℃伅
+     *
+     * @return {@link Result<Integer>}
+     */
+    @Override
+    @ApiOperation("鍚屾鏁版嵁鑷虫寚鏍�")
+    public Result<Integer> initQuotaInfo() {
+        return ok(ResponseCode.SUCCESS, commandSvr.initQuotaInfo());
+    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/TestController.java b/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/TestController.java
deleted file mode 100644
index 4b8c881125e654ed3600e18b3214f8654e0ef770..0000000000000000000000000000000000000000
--- a/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/TestController.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.seasky.projectplan.interfaces.controller;
-
-
-import com.seasky.core.common.ResponseCode;
-import com.seasky.core.common.Result;
-import com.seasky.projectplan.api.ITestController;
-import com.seasky.projectplan.application.query.TestQueryService;
-import com.seasky.projectplan.dto.test.TestCmd;
-import com.seasky.projectplan.dto.test.TestQueryOut;
-import com.seasky.projectplan.dto.test.TestQueryQry;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.List;
-
-import static com.seasky.core.common.Response.ok;
-
-/**
- * 绀轰緥API
- *
- * @author XueYawei
- * @date 2020/12/07
- */
-@RestController
-@RequestMapping("test")
-public class TestController extends BaseController implements ITestController {
-
-//    @Autowired
-//    private TestCmdService testApplicationCmdService;
-    @Autowired
-    private TestQueryService testQueryService;
-
-    /**
-     * 鏌ヨ绀轰緥
-     *
-     * @param testQry
-     * @return {@link Result<TestQueryOut>}
-     */
-    @Override
-    public Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry){
-        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
-    }
-
-    /**
-     * 瀵煎嚭
-     * 涓巘estQ鍚屾牱鑾峰彇鏁版嵁,浣嗚浆鎹㈡垚涓嶅悓鏁版嵁鏍煎紡杩斿洖
-     *
-     * @param testQry
-     * @return {@link ResponseEntity<byte[]>}
-     */
-    @Override
-    public ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException {
-        List<TestQueryOut> list = testQueryService.queryTestList(testQry);
-
-        byte[] excelbyte = null; // 姝ゅ璋冪敤excel宸ュ叿绫昏浆鎴恊xcel
-        HttpHeaders header = new HttpHeaders();
-        header.add("Content-Length", "0");
-        header.add("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode("xxxnanme", "UTF-8"));
-        return new ResponseEntity<>(excelbyte, header, HttpStatus.OK);
-    }
-
-    /**
-     * 淇濆瓨鑽夌ǹ
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSave(TestCmd testCmd) {
-//        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SaveTest(testCmd));
-        return null;
-    }
-
-    /**
-     * 鎻愪氦
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSubmit(TestCmd testCmd) {
-//        return ok(ResponseCode.SUCCESS, testApplicationCmdService.SubmitTest(testCmd));
-        return null;
-    }
-
-    /**
-     * 淇濆瓨骞舵彁浜�
-     *
-     * @param testCmd
-     * @return {@link Result<Long>}
-     */
-    @Override
-    public Result<Long> testSaveAndSubmit(TestCmd testCmd) {
-//        return  ok(ResponseCode.SUCCESS, testApplicationCmdService.SavaAndSubmitTest(testCmd));
-        return null;
-    }
-}