From 27a9da7c15c8c751c3de89681b6b7c85cb19811a Mon Sep 17 00:00:00 2001
From: fengguangyu <841028466@qq.com>
Date: Mon, 21 Jun 2021 12:49:20 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=85=A5=E7=BC=96=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../api/IInComePlanController.java            |  81 ++++++++++++
 .../baseconfig/personfund/PersonFundCmd.java  |  12 +-
 .../dto/incomeplan/InComePlanCmd.java         |   9 +-
 .../dto/incomeplan/InComePlanOut.java         |  84 +++++++++++++
 .../dto/incomeplan/IncomeplanQry.java         |  36 ++++++
 .../command/incomeplan/InComePlanSvr.java     |   4 +-
 .../command/incomeplan/InComePlanSvrImpl.java |   3 +-
 .../query/InComePlan/InComePlanService.java   |  49 ++++++++
 .../domain/service/DBaseConfigSvrImpl.java    |   9 +-
 .../dataobject/po/InComePlanPo.java           |   2 +-
 .../db/mapper/table/InComePlanMapper.java     |  26 ++++
 .../db/mapper/xml/InComePlanMapper.xml        |  29 +++++
 .../reader/InComePlan/InComePlanConvert.java  |  46 +++++++
 .../InComePlanQueryServiceImpl.java           | 108 ++++++++++++++++
 .../controller/InComePlanController.java      | 119 ++++++++++++++++++
 15 files changed, 609 insertions(+), 8 deletions(-)
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IInComePlanController.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanOut.java
 create mode 100644 ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/IncomeplanQry.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/projectplan/application/query/InComePlan/InComePlanService.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanConvert.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanQueryServiceImpl.java
 create mode 100644 ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/InComePlanController.java

diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IInComePlanController.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IInComePlanController.java
new file mode 100644
index 000000000..5f4a1b532
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/api/IInComePlanController.java
@@ -0,0 +1,81 @@
+package com.seasky.projectplan.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.projectplan.dto.fund.FundCmd;
+import com.seasky.projectplan.dto.fund.FundOut;
+import com.seasky.projectplan.dto.fund.FundQry;
+import com.seasky.projectplan.dto.fund.FundTreeOut;
+import com.seasky.projectplan.dto.incomeplan.InComePlanCmd;
+import com.seasky.projectplan.dto.incomeplan.InComePlanOut;
+import com.seasky.projectplan.dto.incomeplan.IncomeplanQry;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鏀跺叆缂栧埗API
+ *
+ * @author fengguangyu
+ * @date 2021/06/18
+ */
+@FeignClient("projectplan-provider")
+@RequestMapping("InComePlan")
+public interface IInComePlanController {
+
+    /**
+     * 鏂板鎴栦慨鏀规敹鍏ョ紪鍒朵功锛堝鏋滄槸鏂板骞跺惎鍔ㄦ祦绋嬶級
+     *
+     * @param inComePlanCmd 鏀跺叆缂栧埗cmd
+     * @return {@link Result<Integer>}
+     */
+    @PostMapping(path = "/saveInComePlan")
+    Result<Integer> saveInComePlan(InComePlanCmd inComePlanCmd);
+
+    /**
+     * 閫昏緫鍒犻櫎鏀跺叆缂栧埗涔�
+     *
+     * @param ids id
+     * @return {@link Result<Integer>}
+     */
+    @PostMapping(path = "/removeInComePlan")
+    Result<Integer> removeInComePlan(List<Long> ids);
+
+
+    //浠ヤ笅 Q绾�
+    /**
+     * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉
+     *
+     * @return {@link Result<List<InComePlanOut>>}
+     */
+    @PostMapping(path = "/queryInComePlanPageByCurrentUserDept")
+    Result<InComePlanOut> queryInComePlanPageByCurrentUserDept(IncomeplanQry qry);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鏀跺叆缂栧埗淇℃伅
+     *
+     * @return {@link Result<List<InComePlanOut>>}
+     */
+    @PostMapping(path = "/queryInComeById")
+    Result<InComePlanOut> queryInComeById(IncomeplanQry qry);
+
+    /**
+     * 杩斿洖鏀跺叆绫诲瀷鐨勬灇涓鹃泦鍚�
+     *
+     * @return {@link Result<List<InComePlanOut>>}
+     */
+    @PostMapping(path = "/queryInComeTypeEnumList")
+    Result<InComePlanOut> queryInComeTypeEnumList();
+
+    /**
+     * 鏄剧ず鎵€鏈夌殑鏀跺叆缂栧埗淇℃伅甯﹀垎椤�
+     *
+     * @return {@link Result<List<InComePlanOut>>}
+     */
+    @PostMapping(path = "/queryInComePlanPage")
+    Result<InComePlanOut> queryInComePlanPage(IncomeplanQry qry);
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/baseconfig/personfund/PersonFundCmd.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/baseconfig/personfund/PersonFundCmd.java
index cd439b8de..5ebf1e5d8 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/baseconfig/personfund/PersonFundCmd.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/baseconfig/personfund/PersonFundCmd.java
@@ -1,7 +1,13 @@
 package com.seasky.projectplan.dto.baseconfig.personfund;
 
+import com.seasky.core.ddd.base.BaseDto;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
 
 /**
  * 浜虹粡璐筩md
@@ -10,7 +16,10 @@ import lombok.Data;
  * @date 2021/05/24
  */
 @Data
-public class PersonFundCmd {
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PersonFundCmd extends BaseDto implements Serializable {
     @ApiModelProperty("id")
     private Long id;
 
@@ -23,6 +32,7 @@ public class PersonFundCmd {
     @ApiModelProperty("浜哄憳缁忔祹绉戠洰鍚嶇О")
     private String personFundName;
 
+
     @ApiModelProperty("鍙娇鐢ㄩ儴闂╦son瀵硅薄")
     private String canUseDeptJson;
 
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanCmd.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanCmd.java
index 9340c963d..e7df3f9bc 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanCmd.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanCmd.java
@@ -1,7 +1,11 @@
 package com.seasky.projectplan.dto.incomeplan;
 
+import com.seasky.core.ddd.base.BaseDto;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
 
@@ -12,7 +16,10 @@ import java.math.BigDecimal;
  * @date 2021/06/10
  */
 @Data
-public class InComePlanCmd {
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class InComePlanCmd extends BaseDto {
 
     @ApiModelProperty("id")
     private Long id;
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanOut.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanOut.java
new file mode 100644
index 000000000..252af13a3
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/InComePlanOut.java
@@ -0,0 +1,84 @@
+package com.seasky.projectplan.dto.incomeplan;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.seasky.core.ddd.base.BaseDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 鏀跺叆缂栧埗out绫�
+ *
+ * @author fengguangyu
+ * @date 2021/06/18
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class InComePlanOut extends BaseDto implements Serializable {
+
+    /**
+     * 涓婚敭id
+     */
+    private Long id;
+
+    /**
+     * 鍏宠仈鐨勬祦绋嬪疄渚婭D
+     */
+    private Long processId;
+
+    /**
+     * 瀹℃牳鐘舵€�
+     */
+    private String state;
+
+    /**
+     * 鐢虫姤涔︾被鍨�
+     */
+    private String planType;
+
+    /**
+     * 鎬婚噾棰�
+     */
+    private BigDecimal totalMoney;
+
+    /**
+     * 閮ㄩ棬缂栧彿
+     */
+    private String departmentCode;
+
+    /**
+     * 閮ㄩ棬鍚嶇О
+     */
+    private String departmentName;
+
+    /**
+     * 娴佺▼id
+     */
+    private Long flowId;
+
+    /**
+     * 骞翠唤
+     */
+    private Integer year;
+
+    /**
+     * 鍏」鏀跺叆瀵瑰簲妯℃澘鎵€瀛樺唴瀹�
+     */
+    private String otherJson;
+
+    /**
+     * 鏀跺叆绫诲瀷鍚嶇О
+     */
+    private String ComeTypeName;
+
+    /**
+     * 鏀跺叆绫诲瀷鍊�
+     */
+    private String ComeTypeVal;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/IncomeplanQry.java b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/IncomeplanQry.java
new file mode 100644
index 000000000..f59c83e2f
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/projectplan/dto/incomeplan/IncomeplanQry.java
@@ -0,0 +1,36 @@
+package com.seasky.projectplan.dto.incomeplan;
+
+import com.seasky.core.ddd.base.BaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 鏀跺叆缂栧埗 qry
+ *
+ * @author fengguangyu
+ * @date 2021/06/18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@EqualsAndHashCode(callSuper = true)
+public class IncomeplanQry  extends BaseDto {
+
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("閮ㄩ棬缂栧彿")
+    private String departmentCode;
+
+    @NotNull(message = "椤电爜涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "椤电爜", example = "1")
+    private Integer pageIndex;
+
+    @NotNull(message = "鍒嗛〉澶у皬涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "鍒嗛〉澶у皬", example = "10")
+    private Integer pageSize;
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvr.java b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvr.java
index 5aa899078..57a01117c 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvr.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvr.java
@@ -4,6 +4,7 @@ import com.seasky.core.common.Result;
 import com.seasky.projectplan.dto.incomeplan.InComePlanCmd;
 import org.springframework.validation.annotation.Validated;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -21,7 +22,8 @@ public interface InComePlanSvr {
      * @param inComePlanCmd 鏀跺叆缂栧埗涔md
      * @return {@link Result <Integer>}
      */
-    Integer saveInComePlan(InComePlanCmd inComePlanCmd);
+    @Validated
+    Integer saveInComePlan(@Valid InComePlanCmd inComePlanCmd);
 
 
     /**
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvrImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvrImpl.java
index 27ca8857f..5cb8cc6e1 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvrImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/application/command/incomeplan/InComePlanSvrImpl.java
@@ -8,6 +8,7 @@ import com.seasky.projectplan.domain.service.ProjectInfoPlanDomainSvr;
 import com.seasky.projectplan.dto.baseconfig.budgetswitch.BudgetSwitchOut;
 import com.seasky.projectplan.dto.baseconfig.budgetswitch.BudgetSwitchQry;
 import com.seasky.projectplan.dto.incomeplan.InComePlanCmd;
+import com.seasky.projectplan.dto.projectplan.ActionFlowCmd;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -51,7 +52,7 @@ public class InComePlanSvrImpl implements InComePlanSvr {
      * 鎻愪氦鐢虫姤涔�
      * */
     //@Override
-    public void submitInComePlan(InComePlanCmd cmd) {
+    public void submitInComePlan(ActionFlowCmd cmd) {
 
     }
 
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/application/query/InComePlan/InComePlanService.java b/ServiceSite/src/main/java/com/seasky/projectplan/application/query/InComePlan/InComePlanService.java
new file mode 100644
index 000000000..c3c2de60f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/application/query/InComePlan/InComePlanService.java
@@ -0,0 +1,49 @@
+package com.seasky.projectplan.application.query.InComePlan;
+
+import com.seasky.core.base.BaseService;
+import com.seasky.core.common.Pagination;
+import com.seasky.core.common.Result;
+import com.seasky.projectplan.dto.incomeplan.InComePlanOut;
+import com.seasky.projectplan.dto.incomeplan.IncomeplanQry;
+import com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 鏀跺叆缂栧埗鏌ヨ鏈嶅姟
+ *
+ * @author fengguangyu
+ * @date 2021/06/18
+ */
+@Validated
+public interface InComePlanService extends BaseService<InComePlanPo> {
+
+    /**
+     * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉
+     *
+     * @return {@link Result List<InComePlanOut>}
+     */
+    Pagination<InComePlanOut> queryInComePlanPageByCurrentUserDept(IncomeplanQry qry);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鏀跺叆缂栧埗淇℃伅
+     *
+     * @return {@link Result InComePlanOut}
+     */
+    InComePlanOut queryInComeById(IncomeplanQry qry);
+
+    /**
+     * 杩斿洖鏀跺叆绫诲瀷鐨勬灇涓鹃泦鍚�
+     *
+     * @return {@link Result List<InComePlanOut>}
+     */
+    List<InComePlanOut> queryInComeTypeEnumList();
+
+    /**
+     * 鏄剧ず鎵€鏈夌殑鏀跺叆缂栧埗淇℃伅甯﹀垎椤�
+     *
+     * @return {@link Result List<InComePlanOut>}
+     */
+    Pagination<InComePlanOut> queryInComePlanPage(IncomeplanQry qry);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/DBaseConfigSvrImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/DBaseConfigSvrImpl.java
index a777345e8..d6dfe9eb2 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/DBaseConfigSvrImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/domain/service/DBaseConfigSvrImpl.java
@@ -141,9 +141,12 @@ public class DBaseConfigSvrImpl implements DBaseConfigSvr {
 
     @Override
     public void savePersonFund(BaseConfigAgg agg) {
-
-        baseConfigRepository.createPersonFund(agg);
-        baseConfigRepository.modifyPersonFund(agg);
+        PersonFundEntity entity = agg.getPersonFundEntities().get(0);
+        if(ObjectUtils.isEmpty(entity.getId())){
+            baseConfigRepository.createPersonFund(agg);
+        }else {
+            baseConfigRepository.modifyPersonFund(agg);
+        }
     }
 
     @Override
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/po/InComePlanPo.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/po/InComePlanPo.java
index 63c866b09..16285ac5e 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/po/InComePlanPo.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/dataobject/po/InComePlanPo.java
@@ -70,5 +70,5 @@ public class InComePlanPo extends BaseDataObject {
      * 鍏」鏀跺叆瀵瑰簲妯℃澘鎵€瀛樺唴瀹�
      */
     @TableField("otherJson")
-    private Integer otherJson;
+    private String otherJson;
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/InComePlanMapper.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/InComePlanMapper.java
index e79ef420c..0f605db5e 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/InComePlanMapper.java
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/table/InComePlanMapper.java
@@ -1,6 +1,11 @@
 package com.seasky.projectplan.infrastructure.db.mapper.table;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.seasky.core.base.BaseMapper;
+import com.seasky.micro.basedata.dto.OrganizationDTO;
+import com.seasky.projectplan.dto.budgetinfo.BudgetInfoOut;
+import com.seasky.projectplan.dto.incomeplan.InComePlanOut;
+import com.seasky.projectplan.dto.incomeplan.IncomeplanQry;
 import com.seasky.projectplan.infrastructure.dataobject.po.FundPo;
 import com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo;
 import com.seasky.projectplan.infrastructure.dataobject.qo.FundQo;
@@ -42,4 +47,25 @@ public interface InComePlanMapper extends BaseMapper<InComePlanPo> {
      * @return int
      */
     int logicDelete(@Param("pm") InComePlanPo inComePlanPo);
+
+    /**
+     * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉
+     *
+     * @return {@link Page < InComePlanPo >}
+     */
+    Page<InComePlanPo> queryInComePlanPageByCurrentUserDept(Page<InComePlanOut> page, @Param("pm") IncomeplanQry inComePlanQo, @Param("pmO") List<OrganizationDTO> Organization);
+
+    /**
+     * 鏍规嵁ID鏌ヨ鏀跺叆缂栧埗淇℃伅
+     *
+     * @return {@link InComePlanPo}
+     */
+    InComePlanPo queryInComeById(@Param("pm") IncomeplanQry inComePlanQo);
+
+    /**
+     * 鏄剧ず鎵€鏈夌殑鏀跺叆缂栧埗淇℃伅甯﹀垎椤�
+     *
+     * @return {@link Page < InComePlanPo >}
+     */
+    Page<InComePlanPo> queryInComePlanPage(Page<InComePlanOut> page, @Param("pm") IncomeplanQry inComePlanQo);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/InComePlanMapper.xml b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/InComePlanMapper.xml
index 8b4698cfa..521b2d19f 100644
--- a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/InComePlanMapper.xml
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/db/mapper/xml/InComePlanMapper.xml
@@ -32,4 +32,33 @@
         </where>
     </select>
 
+    <select id="queryInComePlanPageByCurrentUserDept" resultType="com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo">
+        select * from InCome_Plan
+        <where>
+            available = 'YES'
+            <if test="pmO != null ">
+                and departmentCode in
+                <foreach collection="pmO" item="item" index="index" open="(" close=")" separator=",">
+                    #{item.code}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+    <select id="queryInComeById" resultType="com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo">
+        select * from InCome_Plan
+        <where>
+            available = 'YES'
+            <if test="pm.id != null">
+                and id = #{pm.id}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryInComePlanPage" resultType="com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo">
+        select * from InCome_Plan
+        <where>
+            available = 'YES'
+        </where>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanConvert.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanConvert.java
new file mode 100644
index 000000000..b34ee50b6
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanConvert.java
@@ -0,0 +1,46 @@
+package com.seasky.projectplan.infrastructure.reader.InComePlan;
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.projectplan.dto.budgetinfo.BudgetInfoOut;
+import com.seasky.projectplan.dto.budgetinfo.BudgetInfoTreeOut;
+import com.seasky.projectplan.dto.fund.FundOut;
+import com.seasky.projectplan.dto.incomeplan.InComePlanOut;
+import com.seasky.projectplan.infrastructure.dataobject.po.BudgetInfoPo;
+import com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏀跺叆缂栧埗宸ュ巶绫�
+ *
+ * @author fengguangyu
+ * @date 2021/05/25
+ */
+public class InComePlanConvert {
+
+
+    /**
+     * po绫昏浆out绫�
+     *
+     * @param inComePlanPo 鏀跺叆缂栧埗po绫�
+     * @return {@link InComePlanOut}
+     */
+    public static InComePlanOut poToOut(InComePlanPo inComePlanPo){
+        return MapperUtils.INSTANCE.map(InComePlanOut.class,inComePlanPo);
+    }
+
+
+    /**
+     * pos绫昏浆out绫籹
+     *
+     * @param inComePlanPo 鏀跺叆缂栧埗鍒楄〃
+     * @return {@link List<FundOut>}
+     */
+    public static List<InComePlanOut> listPoToListOut(List<InComePlanPo> inComePlanPo){
+        return MapperUtils.INSTANCE.mapAsList(InComePlanOut.class,inComePlanPo);
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanQueryServiceImpl.java b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanQueryServiceImpl.java
new file mode 100644
index 000000000..3a3096f07
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/infrastructure/reader/InComePlan/InComePlanQueryServiceImpl.java
@@ -0,0 +1,108 @@
+package com.seasky.projectplan.infrastructure.reader.InComePlan;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seasky.core.base.AbstractService;
+import com.seasky.core.common.Pagination;
+import com.seasky.micro.basedata.api.IUser;
+import com.seasky.micro.basedata.dto.OrganizationDTO;
+import com.seasky.projectplan.application.query.InComePlan.InComePlanService;
+import com.seasky.projectplan.domain.aggregate.common.InComePlanEnum;
+import com.seasky.projectplan.dto.budgetinfo.BudgetInfoOut;
+import com.seasky.projectplan.dto.budgetinfo.BudgetInfoQry;
+import com.seasky.projectplan.dto.incomeplan.InComePlanOut;
+import com.seasky.projectplan.dto.incomeplan.IncomeplanQry;
+import com.seasky.projectplan.infrastructure.dataobject.po.InComePlanPo;
+import com.seasky.projectplan.infrastructure.db.mapper.table.BudgetInfoMapper;
+import com.seasky.projectplan.infrastructure.db.mapper.table.InComePlanMapper;
+import com.seasky.projectplan.infrastructure.reader.budgetinfo.BudgetInfoConvert;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏀跺叆缂栧埗impl
+ *
+ * @author fengguangyu
+ * @date 2021/06/21
+ */
+@Service
+public class InComePlanQueryServiceImpl extends AbstractService<InComePlanPo, InComePlanMapper> implements InComePlanService {
+
+    @Resource
+    InComePlanMapper mapper;
+
+    @Resource
+    IUser iUser;
+
+    /**
+     * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉
+     *
+     * @return {@link Pagination < InComePlanOut >}
+     */
+    @Override
+    public Pagination<InComePlanOut> queryInComePlanPageByCurrentUserDept(IncomeplanQry qry) {
+
+        List<OrganizationDTO> organizationList = iUser.getCurrent("").getData().get(0).getOrganizationList();
+        Page<InComePlanOut> page = new Page<>(qry.getPageIndex(), qry.getPageSize());
+        List<InComePlanOut> records = InComePlanConvert.listPoToListOut(mapper.queryInComePlanPageByCurrentUserDept(page, qry,organizationList).getRecords());
+        page.setRecords(records);
+        return Pagination.fromPage(page);
+    }
+
+    /**
+     * 鏍规嵁ID鏌ヨ鏀跺叆缂栧埗淇℃伅
+     *
+     * @return {@link InComePlanOut}
+     */
+    @Override
+    public InComePlanOut queryInComeById(IncomeplanQry qry) {
+        InComePlanPo records = mapper.queryInComeById(qry);
+        return InComePlanConvert.poToOut(records);
+    }
+
+    /**
+     * 杩斿洖鏀跺叆绫诲瀷鐨勬灇涓鹃泦鍚�
+     *
+     * @return {@link List < InComePlanOut >}
+     */
+    @Override
+    public List<InComePlanOut> queryInComeTypeEnumList() {
+        List<InComePlanOut> list = new ArrayList();
+        InComePlanOut tmp = new InComePlanOut();
+        tmp.setComeTypeName(InComePlanEnum.JIAOYU.key());
+        tmp.setComeTypeVal(InComePlanEnum.JIAOYU.val());
+        list.add(tmp);
+        tmp = new InComePlanOut();
+        tmp.setComeTypeName(InComePlanEnum.BAXIANG.key());
+        tmp.setComeTypeVal(InComePlanEnum.BAXIANG.val());
+        list.add(tmp);
+        tmp = new InComePlanOut();
+        tmp.setComeTypeName(InComePlanEnum.QITA.key());
+        tmp.setComeTypeVal(InComePlanEnum.QITA.val());
+        list.add(tmp);
+        tmp = new InComePlanOut();
+        tmp.setComeTypeName(InComePlanEnum.KEYAN.key());
+        tmp.setComeTypeVal(InComePlanEnum.KEYAN.val());
+        list.add(tmp);
+        tmp = new InComePlanOut();
+        tmp.setComeTypeName(InComePlanEnum.JIAOWEI.key());
+        tmp.setComeTypeVal(InComePlanEnum.JIAOWEI.val());
+        list.add(tmp);
+        return list;
+    }
+
+    /**
+     * 鏄剧ず鎵€鏈夌殑鏀跺叆缂栧埗淇℃伅甯﹀垎椤�
+     *
+     * @return {@link Pagination < InComePlanOut >}
+     */
+    @Override
+    public Pagination<InComePlanOut> queryInComePlanPage(IncomeplanQry qry) {
+        Page<InComePlanOut> page = new Page<>(qry.getPageIndex(), qry.getPageSize());
+        List<InComePlanOut> records = InComePlanConvert.listPoToListOut(mapper.queryInComePlanPage(page, qry).getRecords());
+        page.setRecords(records);
+        return Pagination.fromPage(page);
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/InComePlanController.java b/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/InComePlanController.java
new file mode 100644
index 000000000..b8bd31e59
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/projectplan/interfaces/controller/InComePlanController.java
@@ -0,0 +1,119 @@
+package com.seasky.projectplan.interfaces.controller;
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.projectplan.api.IFund;
+import com.seasky.projectplan.api.IInComePlanController;
+import com.seasky.projectplan.application.command.fund.FundSvr;
+import com.seasky.projectplan.application.command.incomeplan.InComePlanSvr;
+import com.seasky.projectplan.application.query.InComePlan.InComePlanService;
+import com.seasky.projectplan.application.query.budgetinfo.BudgetInfoQueryService;
+import com.seasky.projectplan.application.query.fund.FundQueryService;
+import com.seasky.projectplan.dto.fund.FundCmd;
+import com.seasky.projectplan.dto.fund.FundOut;
+import com.seasky.projectplan.dto.fund.FundQry;
+import com.seasky.projectplan.dto.fund.FundTreeOut;
+import com.seasky.projectplan.dto.incomeplan.InComePlanCmd;
+import com.seasky.projectplan.dto.incomeplan.InComePlanOut;
+import com.seasky.projectplan.dto.incomeplan.IncomeplanQry;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+import static com.seasky.core.common.Response.ok;
+
+/**
+ * 鏀跺叆缂栧埗鎺у埗鍣�
+ *
+ * @author fengguangyu
+ * @date 2021/06/21
+ */
+@Api(tags = "鏀跺叆缂栧埗绠$悊")
+@RestController
+public class InComePlanController extends BaseController implements IInComePlanController {
+
+    @Resource
+    private InComePlanSvr inComePlanSvr;
+
+    @Resource
+    private InComePlanService inComePlanService;
+
+    //浠ヤ笅 C绾�
+
+    /**
+     * 鏂板鎴栦慨鏀规敹鍏ョ紪鍒朵功锛堝鏋滄槸鏂板骞跺惎鍔ㄦ祦绋嬶級
+     *
+     * @param inComePlanCmd s鏀跺叆缂栧埗cmd
+     * @return {@link Result<Integer>}
+     */
+    @ApiOperation("1.鏂板鎴栦慨鏀规敹鍏ョ紪鍒朵功")
+    @Override
+    public Result<Integer> saveInComePlan(@RequestBody InComePlanCmd inComePlanCmd) {
+        return ok(ResponseCode.SUCCESS, inComePlanSvr.saveInComePlan(inComePlanCmd));
+    }
+
+    /**
+     * 閫昏緫鍒犻櫎鏀跺叆缂栧埗涔�
+     *
+     * @param ids id
+     * @return {@link Result<Integer>}
+     */
+    @ApiOperation("2.閫昏緫鍒犻櫎鏀跺叆缂栧埗涔�")
+    @Override
+    public Result<Integer> removeInComePlan(@RequestBody List<Long> ids) {
+        return ok(ResponseCode.SUCCESS, inComePlanSvr.removeInComePlan(ids));
+    }
+
+    //浠ヤ笅 Q绾�
+    /**
+     * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉
+     *
+     * @return {@link Result<FundOut>}
+     */
+    @ApiOperation("1-1.鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉")
+    @Override
+    public Result<InComePlanOut> queryInComePlanPageByCurrentUserDept(IncomeplanQry qry) {
+        return ok(ResponseCode.SUCCESS, inComePlanService.queryInComePlanPageByCurrentUserDept(qry));
+    }
+
+    /**
+     * 鏍规嵁ID鏌ヨ鏀跺叆缂栧埗淇℃伅
+     *
+     * @return {@link Result<FundOut>}
+     */
+    @ApiOperation("1-2.鏍规嵁ID鏌ヨ鏀跺叆缂栧埗淇℃伅")
+    @Override
+    public Result<InComePlanOut> queryInComeById(IncomeplanQry qry) {
+        return ok(ResponseCode.SUCCESS, inComePlanService.queryInComeById(qry));
+    }
+
+    /**
+     * 杩斿洖鏀跺叆绫诲瀷鐨勬灇涓鹃泦鍚�
+     *
+     * @return {@link Result<FundOut>}
+     */
+    @ApiOperation("1-3.杩斿洖鏀跺叆绫诲瀷鐨勬灇涓鹃泦鍚�")
+    @Override
+    public Result<InComePlanOut> queryInComeTypeEnumList() {
+        return ok(ResponseCode.SUCCESS, inComePlanService.queryInComeTypeEnumList());
+    }
+
+    /**
+     * 鏍规嵁褰撳墠鐧诲綍浜烘墍鍦ㄩ儴闂ㄨ幏鍙栧叾閮ㄩ棬鐨勬敹鍏ョ紪鍒朵俊鎭甫鍒嗛〉
+     *
+     * @return {@link Result<FundOut>}
+     */
+    @ApiOperation("1-4.鏄剧ず鎵€鏈夌殑鏀跺叆缂栧埗淇℃伅甯﹀垎椤�")
+    @Override
+    public Result<InComePlanOut> queryInComePlanPage(IncomeplanQry qry) {
+        return ok(ResponseCode.SUCCESS, inComePlanService.queryInComePlanPage(qry));
+    }
+}
-- 
GitLab