diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/domain/aggregate/budgetinfo/BudgetInfoRepository.java b/ServiceSite/src/main/java/com/seasky/projectplan/domain/aggregate/budgetinfo/BudgetInfoRepository.java
index acbdc270127661fdde939a3c7ed02a3d0c1ab935..3b441743fce1e730465e6cae172a15b4d1da0f4b 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/domain/aggregate/budgetinfo/BudgetInfoRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/domain/aggregate/budgetinfo/BudgetInfoRepository.java
@@ -2,6 +2,8 @@ package com.seasky.projectplan.domain.aggregate.budgetinfo;
 
 import com.seasky.core.ddd.base.DddRepository;
 
+import java.util.List;
+
 /**
  * 椤圭洰绫诲瀷浠撳偍灞�
  *
@@ -33,4 +35,12 @@ public interface BudgetInfoRepository extends DddRepository<BudgetInfoAgg> {
      * @return {@link BudgetInfoAgg}
      */
     BudgetInfoAgg queryBudgetInfo(BudgetInfoAgg budgetInfoAgg);
+
+    /**
+     * 鏌ヨ椤圭洰绫诲瀷C绾�
+     *
+     * @param budgetInfoAgg 缁忚垂鎬�
+     * @return {@link BudgetInfoAgg}
+     */
+    List<BudgetInfoAgg> queryBudgetInfoList(BudgetInfoAgg budgetInfoAgg);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/BudgetInfoDomainSvrImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/BudgetInfoDomainSvrImpl.java
index 1f57cb28d73f4d00071f55e4dd5a4944436f71e3..a9c9042f6c4910516ad7382aa30a6930358e74c8 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/BudgetInfoDomainSvrImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/BudgetInfoDomainSvrImpl.java
@@ -9,6 +9,8 @@ import com.seasky.projectplan.domain.aggregate.budgetinfo.BudgetInfoRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 椤圭洰绫诲瀷DomainSvrimpl
  *
@@ -30,23 +32,21 @@ public class BudgetInfoDomainSvrImpl implements BudgetInfoDomainSvr{
      */
     @Override
     public Integer saveBudgetInfo(BudgetInfoAgg budgetInfoAgg) {
-        if(budgetInfoAgg.getParentBudgetId() != null){
-            if (repository.queryBudgetInfo(BudgetInfoAgg.builder().id(budgetInfoAgg.getParentBudgetId()).build()) == null){
-                throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "鎵€閫夐」鐩被鍨嬬埗绾т笉瀛樺湪", ""));
-            }
+        if (budgetInfoAgg.getBudgetName() == null || budgetInfoAgg.getBudgetCode() == null || budgetInfoAgg.getParentBudgetId() == null){
+            throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "椤圭洰绫诲瀷鍚嶇О銆佺紪鍙蜂笉鑳戒负绌�,蹇呴』鎸囧畾鍏剁埗绾�", ""));
+        }
+        if (repository.queryBudgetInfo(BudgetInfoAgg.builder().id(budgetInfoAgg.getParentBudgetId()).build()) == null){
+            throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "鎵€閫夐」鐩被鍨嬬埗绾т笉瀛樺湪", ""));
         }
+        verifyBudgetInfo(budgetInfoAgg);
 
-        //TODO year濡傛灉涓虹┖ 榛樿鑾峰彇baseconfig涓殑 BudgetSwitchEntity鐨剏ear灞炴€�
+        //TODO year濡傛灉涓虹┖ 榛樿鑾峰彇base config涓殑 BudgetSwitchEntity鐨剏ear灞炴€�
 
-        verifyBudgetInfo(budgetInfoAgg);
         if (budgetInfoAgg.getId() == null){
             //鏂板
-            if (budgetInfoAgg.getBudgetName() == null || budgetInfoAgg.getBudgetCode() == null || budgetInfoAgg.getParentBudgetId() == null){
-                throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "椤圭洰绫诲瀷鍚嶇О銆佺紪鍙蜂笉鑳戒负绌�,蹇呴』鎸囧畾鍏剁埗绾�", ""));
-            }
         }else {
             //淇敼
-            BudgetInfoAgg modifyAgg = repository.queryBudgetInfo(budgetInfoAgg);
+            BudgetInfoAgg modifyAgg = repository.queryBudgetInfo(BudgetInfoAgg.builder().id(budgetInfoAgg.getId()).build());
             if (modifyAgg == null){
                 throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "鎵句笉鍒拌淇敼鐨勯」鐩被鍨嬪璞�", ""));
             }
@@ -66,9 +66,20 @@ public class BudgetInfoDomainSvrImpl implements BudgetInfoDomainSvr{
      */
     @Override
     public Integer removeBudgetInfo(BudgetInfoAgg budgetInfoAgg) {
-        return null;
+        BudgetInfoAgg modifyAgg = repository.queryBudgetInfo(BudgetInfoAgg.builder().id(budgetInfoAgg.getId()).build());
+        if (modifyAgg == null){
+            throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "鎵句笉鍒拌鍒犻櫎鐨勯」鐩被鍨嬪璞�", ""));
+        }
+        List<BudgetInfoAgg> modifyAggList = repository.queryBudgetInfoList(BudgetInfoAgg.builder().parentBudgetId(budgetInfoAgg.getId()).build());
+        if (modifyAggList.size() > 0){
+            throw new DataVerifyException(new Error(ResponseCode.DATA_VERIFY_EXCEPTION, null, "璇ラ」鐩被鍨嬪璞″瓨鍦ㄥ瓙绾�,涓嶈兘鍒犻櫎", ""));
+        }
+        return repository.removeBudgetInfo(budgetInfoAgg);
     }
 
+
+
+
     /**
      * 鏂板/淇敼 椤圭洰绫诲瀷 楠岃瘉鏄惁閲嶅
      *
@@ -83,7 +94,7 @@ public class BudgetInfoDomainSvrImpl implements BudgetInfoDomainSvr{
         if (verifyName != null){
             verify = false;
             if (budgetInfoAgg.getId() != null){
-                //id涓嶄负绌�(鍗充慨鏀归」鐩被鍨�) 鏃� 鏍¢獙閲嶅闇€鎺掗櫎鑷韩
+                //id涓嶄负绌�(鍗虫墽琛屼慨鏀归」鐩被鍨嬩笟鍔�) 鏃� 鏍¢獙閲嶅鎬ч渶鎺掗櫎鑷韩
                 if (budgetInfoAgg.getId().equals(verifyName.getId())){
                     verify = true;
                 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/BudgetInfoMapper.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/BudgetInfoMapper.java
index 8c3de2e538cc34a784d01cf4fde3db48dad124a6..883ac71dae679ccff97d8c8af72435f0f3b025e3 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/BudgetInfoMapper.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/BudgetInfoMapper.java
@@ -29,11 +29,18 @@ public interface BudgetInfoMapper extends BaseMapper<BudgetInfoPo> {
 
 
     /**
-     * 鏌ヨ璧勯噾
-     * 鏌ヨ缁忚垂淇℃伅C绾�
+     * 鏌ヨ璧勯噾C绾�
      *
      * @param budgetInfoQo 棰勭畻淇℃伅Qo
      * @return {@link BudgetInfoPo}
      */
-    BudgetInfoPo queryFunding(@Param("pm") BudgetInfoQo budgetInfoQo);
+    BudgetInfoPo queryBudgetInfo(@Param("pm") BudgetInfoQo budgetInfoQo);
+
+    /**
+     * 鏌ヨ璧勯噾闆嗗悎C绾�
+     *
+     * @param budgetInfoQo 棰勭畻淇℃伅Qo
+     * @return {@link BudgetInfoPo}
+     */
+    List<BudgetInfoPo> queryBudgetInfoList(@Param("pm") BudgetInfoQo budgetInfoQo);
 }
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 7fe89aa27b3590712b3a8c9441d6c2c972138a13..195a7fb81d1ab8d13a45dc2b2e8c6c809f27b1c1 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
@@ -13,7 +13,50 @@
     </update>
 
 
-    <select id="queryFunding" resultType="com.seasky.projectplan.infrastructure.dataobject.po.BudgetInfoPo">
+    <select id="queryBudgetInfo" resultType="com.seasky.projectplan.infrastructure.dataobject.po.BudgetInfoPo">
+        select * from budget_info
+        <where>
+            available = 'YES'
+            <if test="pm.id != null">
+                and id = #{pm.id}
+            </if>
+            <if test="pm.year != null">
+                and year = #{pm.year}
+            </if>
+            <if test="pm.budgetName != null and pm.budgetName != ''">
+                and budget_name = #{pm.budgetName}
+            </if>
+            <if test="pm.budgetCode != null and pm.budgetCode != ''">
+                and budget_code = #{pm.budgetCode}
+            </if>
+            <if test="pm.parentBudgetId != null">
+                and funding_name = #{pm.parentBudgetId}
+            </if>
+            <if test="pm.canUseDeptJson != null and pm.canUseDeptJson != ''">
+                and can_use_dept_json = #{pm.canUseDeptJson}
+            </if>
+            <if test="pm.functionDeptJson != null and pm.functionDeptJson != ''">
+                and function_dept_json = #{pm.functionDeptJson}
+            </if>
+            <if test="pm.canUseFundJson != null and pm.canUseFundJson != ''">
+                and can_use_fund_json = #{pm.canUseFundJson}
+            </if>
+            <if test="pm.beginDate != null ">
+                and begin_date = #{pm.beginDate}
+            </if>
+            <if test="pm.endDate != null ">
+                and end_date = #{pm.endDate}
+            </if>
+            <if test="pm.chargerJson != null and pm.chargerJson != ''">
+                and charger_json = #{pm.chargerJson}
+            </if>
+            <if test="pm.haveTarget != null">
+                and have_target = #{pm.haveTarget}
+            </if>
+        </where>
+    </select>
+    <select id="queryBudgetInfoList"
+            resultType="com.seasky.projectplan.infrastructure.dataobject.po.BudgetInfoPo">
         select * from budget_info
         <where>
             available = 'YES'
@@ -55,7 +98,6 @@
             </if>
         </where>
     </select>
-
 
 
 </mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoConvert.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoConvert.java
index 3138c6cbc4c5c5793299bd20d2ffaa515311503c..eb63aeb823bbf3451df2ee268afd3ecaa41f586e 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoConvert.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoConvert.java
@@ -5,6 +5,8 @@ import com.seasky.projectplan.domain.aggregate.budgetinfo.BudgetInfoAgg;
 import com.seasky.projectplan.infrastructure.dataobject.po.BudgetInfoPo;
 import com.seasky.projectplan.infrastructure.dataobject.qo.BudgetInfoQo;
 
+import java.util.List;
+
 /**
  * 椤圭洰绫诲瀷宸ュ巶绫�
  *
@@ -43,4 +45,14 @@ public class BudgetInfoConvert {
         return MapperUtils.INSTANCE.map(BudgetInfoAgg.class,budgetInfoPo);
     }
 
+    /**
+     * po绫诲垪琛� 杞� 鑱氬悎鏍瑰垪琛�
+     *
+     * @param budgetInfoPos 棰勭畻淇℃伅pos
+     * @return {@link List<BudgetInfoAgg>}
+     */
+    public static List<BudgetInfoAgg> poListToAggList(List<BudgetInfoPo> budgetInfoPos){
+        return MapperUtils.INSTANCE.mapAsList(BudgetInfoAgg.class,budgetInfoPos);
+    }
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoRepositoryImpl.java
index 55c68a267ec45b0e7550060206dcbc158ee054dc..b3d841afbc555afae8ec7da1e5d12ee71c0db4d3 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/repository/budgetinfo/BudgetInfoRepositoryImpl.java
@@ -13,6 +13,8 @@ import com.seasky.projectplan.infrastructure.db.mapper.table.BudgetInfoMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * 椤圭洰绫诲瀷 浠撳偍灞俰mpl
  *
@@ -68,8 +70,21 @@ public class BudgetInfoRepositoryImpl implements BudgetInfoRepository {
     @Override
     public BudgetInfoAgg queryBudgetInfo(BudgetInfoAgg budgetInfoAgg) {
         BudgetInfoQo fundingQo = BudgetInfoConvert.aggToQo(budgetInfoAgg);
-        BudgetInfoPo fundingParam = budgetInfoMapper.queryFunding(fundingQo);
-        return BudgetInfoConvert.poToAgg(fundingParam);
+        BudgetInfoPo budgetInfoPo = budgetInfoMapper.queryBudgetInfo(fundingQo);
+        return BudgetInfoConvert.poToAgg(budgetInfoPo);
+    }
+
+    /**
+     * 鏌ヨ椤圭洰绫诲瀷淇℃伅鍒楄〃
+     *
+     * @param budgetInfoAgg 棰勭畻淇℃伅鑱氬悎鏍�
+     * @return {@link List<BudgetInfoAgg>}
+     */
+    @Override
+    public List<BudgetInfoAgg> queryBudgetInfoList(BudgetInfoAgg budgetInfoAgg) {
+        BudgetInfoQo fundingQo = BudgetInfoConvert.aggToQo(budgetInfoAgg);
+        List<BudgetInfoPo> budgetInfoPos = budgetInfoMapper.queryBudgetInfoList(fundingQo);
+        return BudgetInfoConvert.poListToAggList(budgetInfoPos);
     }