From 9f3c4a33279f10ed420d604765487558ab0744f0 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期五, 11 四月 2025 11:42:21 +0800
Subject: [PATCH] 获取已完成灌溉计划接口增加分页功能

---
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java           |   21 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardCtrl.java   |  137 +++++++++------
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java                   |    9 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml                                  |   14 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java             |   15 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java |    7 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/Client.java        |   22 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardSv.java     |  208 +++++++++++++++++++++--
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java                         |   16 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntakeSimple.java                          |   30 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java   |   18 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml                                        |   26 ++
 12 files changed, 431 insertions(+), 92 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
index c6f6114..896603a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -10,6 +10,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author ZhuBaoMin
@@ -74,11 +75,17 @@
     List<VoPlans> getNotCompletePlans();
 
     /**
+     * 鑾峰彇宸插畬鎴愮殑璁″垝鏁伴噺
+     * @return
+     */
+    Long getCompletedPlansCount(Map<String, Object> params);
+
+    /**
      * 鑾峰彇宸插畬鎴愮殑璁″垝鍒楄〃锛屽皬绋嬪簭璁″垝鍒楄〃椤典娇鐢�
      * 璁″垝鐘舵�侊細1-鑽夌锛�2-鏈墽琛岋紝3-鎵ц涓紝4-宸插畬鎴�
      * @return
      */
-    List<VoPlans> getCompletedPlans();
+    List<VoPlans> getCompletedPlans(Map<String, Object> params);
 
     /**
      * 鏍规嵁璁″垝ID鑾峰彇寰呯粓姝㈣鍒掔殑缁撴潫鏃堕棿锛氭湭鍒犻櫎銆佹湭缁堟銆佸凡鍙戝竷銆佸綋鍓嶆椂闂村皬浜庤鍒掔粨鏉熸椂闂�
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java
index 1a44d5e..3ae6c73 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeMapper.java
@@ -2,10 +2,7 @@
 
 
 import com.dy.pipIrrGlobal.pojoPr.PrIntake;
-import com.dy.pipIrrGlobal.voPr.IntakeUpdateLngLat;
-import com.dy.pipIrrGlobal.voPr.VoAllIntake;
-import com.dy.pipIrrGlobal.voPr.VoIntake;
-import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
+import com.dy.pipIrrGlobal.voPr.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -197,4 +194,15 @@
      */
     int updateByPrimaryKeySelective1(IntakeUpdateLngLat record);
 
+    /**
+     * 鑾峰彇鏈粦瀹氬埌杞亴缁勭殑鍙栨按鍙e垪琛�
+     * @return
+     */
+    List<VoIntakeSimple> getFreeIntakes();
+
+    /**
+     * 鑾峰彇鏈粦瀹氳櫄鎷熷崱鐨勫彇姘村彛鍒楄〃锛岀粰鍙栨按鍙g粦铏氭嫙鍗′娇鐢�
+     * @return
+     */
+    List<VoIntakeSimple> getNotLinkVcIntakes();
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntakeSimple.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntakeSimple.java
new file mode 100644
index 0000000..883a151
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoIntakeSimple.java
@@ -0,0 +1,30 @@
+package com.dy.pipIrrGlobal.voPr;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-04-09 17:12
+ * @LastEditTime 2025-04-09 17:12
+ * @Description 鍙栨按鍙g畝鍗曡鍥惧璞★紝杞亴缁勭粦瀹氬彇姘村彛浣跨敤
+ */
+
+@Data
+@JsonPropertyOrder({"intakeId", "intakeName"})
+public class VoIntakeSimple {
+    public static final long serialVersionUID = 202504091713001L;
+
+    /**
+     * 鍙栨按鍙D
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long intakeId;
+
+    /**
+     * 鍙栨按鍙e悕绉�
+     */
+    private String intakeName;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
index 63e9a5e..449f82d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -303,6 +303,15 @@
     ORDER BY plan.plan_state DESC
   </select>
 
+  <!--鑾峰彇宸插畬鎴愮殑璁″垝鏁伴噺-->
+  <select id="getCompletedPlansCount" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM ir_irrigate_plan plan
+    INNER JOIN ir_project pro ON pro.id = plan.project_id
+    WHERE plan.deleted = 0 AND ((plan.plan_state = 2 AND NOW() &gt;= plan.plan_stop_time) OR (plan.executing_state = 3))
+  </select>
+
   <!--鑾峰彇宸插畬鎴愮殑璁″垝鍒楄〃锛屽皬绋嬪簭璁″垝鍒楄〃椤典娇鐢�-->
   <select id="getCompletedPlans" resultType="com.dy.pipIrrGlobal.voIr.VoPlans">
     SELECT
@@ -318,6 +327,11 @@
         INNER JOIN ir_project pro ON pro.id = plan.project_id
     WHERE plan.deleted = 0 AND ((plan.plan_state = 2 AND NOW() &gt;= plan.plan_stop_time) OR (plan.executing_state = 3))
     ORDER BY plan.plan_state DESC
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
   </select>
 
   <!--鏍规嵁璁″垝ID鑾峰彇寰呯粓姝㈣鍒掔殑缁撴潫鏃堕棿锛氭湭鍒犻櫎銆佹湭缁堟銆佸凡鍙戝竷銆佸綋鍓嶆椂闂村皬浜庤鍒掔粨鏉熸椂闂�-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
index af44947..46397ea 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -737,4 +737,30 @@
         </set>
         where id = #{id,jdbcType=BIGINT}
     </update>
+
+    <!--鑾峰彇鏈粦瀹氬埌杞亴缁勭殑鍙栨按鍙e垪琛�-->
+    <select id="getFreeIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntakeSimple">
+        SELECT
+            id AS intakeId,
+            name AS intakeName
+        FROM pr_intake inta
+        WHERE NOT EXISTS (
+                SELECT 1
+                FROM ir_group_intake gi
+                WHERE gi.intake_id = inta.id
+            ) AND inta.deleted = 0
+    </select>
+
+    <!--鑾峰彇鏈粦瀹氳櫄鎷熷崱鐨勫彇姘村彛鍒楄〃锛岀粰鍙栨按鍙g粦铏氭嫙鍗′娇鐢�-->
+    <select id="getNotLinkVcIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntakeSimple">
+        SELECT
+            id AS intakeId,
+            name AS intakeName
+        FROM pr_intake inta
+        WHERE NOT EXISTS (
+                SELECT 1
+                FROM pr_intake_vc iv
+                WHERE iv.intake_id = inta.id
+            ) AND inta.deleted = 0
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
index a1cf5ef..6591aad 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
@@ -9,11 +9,8 @@
 import com.dy.pipIrrGlobal.excel.CellWriteHandler;
 import com.dy.pipIrrGlobal.excel.ExcelUtil;
 import com.dy.pipIrrGlobal.pojoPr.PrIntake;
-import com.dy.pipIrrGlobal.voPr.VoAllIntake;
-import com.dy.pipIrrGlobal.voPr.VoIntake;
-import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
+import com.dy.pipIrrGlobal.voPr.*;
 import com.dy.pipIrrGlobal.voSe.VoActiveCard;
-import com.dy.pipIrrGlobal.voPr.IntakeUpdateLngLat;
 import com.dy.pipIrrProject.result.ProjectResultCode;
 import com.taobao.api.ApiException;
 import io.swagger.v3.oas.annotations.Operation;
@@ -347,4 +344,20 @@
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
+
+    /**
+     * 鑾峰彇鏈粦瀹氬埌杞亴缁勭殑鍙栨按鍙e垪琛�
+     * @return
+     */
+    @GetMapping(path = "getFreeIntakes")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoIntakeSimple>>> getFreeIntakes() {
+        try {
+            QueryResultVo<List<VoIntakeSimple>> res = intakeSv.getFreeIntakes();
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍙栨按鍙e紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
index caa9e6d..1a7137f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -12,10 +12,7 @@
 import com.dy.pipIrrGlobal.daoPr.PrDivideMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrIntake;
-import com.dy.pipIrrGlobal.voPr.IntakeUpdateLngLat;
-import com.dy.pipIrrGlobal.voPr.VoAllIntake;
-import com.dy.pipIrrGlobal.voPr.VoIntake;
-import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
+import com.dy.pipIrrGlobal.voPr.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -351,4 +348,14 @@
     public int updateIntakeLngLat(IntakeUpdateLngLat po) {
         return prIntakeMapper.updateByPrimaryKeySelective1(po);
     }
+
+    /**
+     * 鑾峰彇鏈粦瀹氬埌杞亴缁勭殑鍙栨按鍙e垪琛�
+     * @return
+     */
+    public QueryResultVo<List<VoIntakeSimple>> getFreeIntakes() {
+        QueryResultVo<List<VoIntakeSimple>> rsVo = new QueryResultVo<>();
+        rsVo.obj = prIntakeMapper.getFreeIntakes();
+        return rsVo;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
index 0fc14c5..ffd55e9 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -2,6 +2,8 @@
 
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryConditionVo;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule;
 import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate;
@@ -388,10 +390,9 @@
      * @return
      */
     @GetMapping(path = "/getCompletedPlans")
-    public BaseResponse<List<VoPlans>> getCompletedPlans() {
+    public BaseResponse<QueryResultVo<List<VoPlans>>> getCompletedPlans(QueryConditionVo qo) {
         try {
-            List<VoPlans> res = irrigatePlanSv.getCompletedPlans();
-            return BaseResponseUtils.buildSuccess(res);
+            return BaseResponseUtils.buildSuccess(irrigatePlanSv.getCompletedPlans(qo));
         } catch (Exception e) {
             log.error("鑾峰彇椤圭洰璁板綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage());
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
index b29d8cc..abb4064 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -4,6 +4,8 @@
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryConditionVo;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoIr.*;
 import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
@@ -12,9 +14,11 @@
 import com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule;
 import com.dy.pipIrrGlobal.voIr.*;
 import com.dy.pipIrrGlobal.voRm.VoIntakeVc;
+import com.dy.pipIrrGlobal.voSe.VoClient;
 import com.dy.pipIrrWechat.irrigatePlan.dto.PlanSimple;
 import com.dy.pipIrrWechat.irrigatePlan.enums.OperateTypeENUM;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -186,8 +190,18 @@
      * 鑾峰彇宸插畬鎴愮殑璁″垝鍒楄〃锛屽皬绋嬪簭璁″垝鍒楄〃椤典娇鐢�
      * @return
      */
-    public List<VoPlans> getCompletedPlans() {
-        return irrigatePlanMapper.getCompletedPlans();
+    public QueryResultVo<List<VoPlans>> getCompletedPlans(QueryConditionVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
+
+        Long itemTotal = (long)irrigatePlanMapper.getCompletedPlansCount(params);
+        QueryResultVo<List<VoPlans>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = queryVo.pageSize ;
+        rsVo.pageCurr = queryVo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = irrigatePlanMapper.getCompletedPlans(params);
+
+        return rsVo ;
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardCtrl.java
index 3e6b1fd..0005593 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardCtrl.java
@@ -5,11 +5,13 @@
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.pojoSe.SeVcOperate;
 import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voIr.VoPlanDetails;
 import com.dy.pipIrrGlobal.voSe.VoRechargeProfile;
 import com.dy.pipIrrGlobal.voSe.VoVcRecharge;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
 import com.dy.pipIrrWechat.result.WechatResultCode;
 import com.dy.pipIrrWechat.util.PayHelper;
+import com.dy.pipIrrWechat.virtualCard.dto.Client;
 import com.dy.pipIrrWechat.virtualCard.dto.DtoCancel;
 import com.dy.pipIrrWechat.virtualCard.dto.DtoRegist;
 import com.dy.pipIrrWechat.virtualCard.enums.LastOperateENUM;
@@ -23,10 +25,7 @@
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -57,61 +56,68 @@
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
-        Long clientId = po.getClientId();
 
-        // 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode
-        Long areaCodeL = virtualCardSv.getAreaCodeById(clientId);
-        if(areaCodeL == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.AREA_CODE_MISTAKE.getMessage());
+        Map map_result = virtualCardSv.addVC(po.getClientId(), 0D);
+        if(map_result.get("success").equals(false)) {
+            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
-        String areaCode = String.valueOf(areaCodeL);
+        return BaseResponseUtils.buildSuccess() ;
 
-        /**
-         * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪铏氭嫙鍗¤〃涓拡瀵硅櫄鎷熷崱缂栧彿锛坴cNum锛夎繘琛屾ā绯婃煡璇�
-         * 濡傛灉5浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
-         * 濡傛灉5浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
-         * cardNum涓烘柊鐨勫崱鍙�
-         */
-        String vcNum = Optional.ofNullable(virtualCardSv.getVcCardNumOfMax(areaCode)).orElse("");
-        if(vcNum != null && vcNum.trim().length() > 0) {
-            Integer number = Integer.parseInt(vcNum.substring(12));
-            number = number + 1;
-            if(number > 65535) {
-                return BaseResponseUtils.buildErrorMsg(WechatResultCode.CARD_NUMBER_OVERRUN.getMessage());
-            }
-            vcNum = vcNum.substring(0, 12) + String.format("%05d", number);
-        } else {
-            vcNum = areaCode + "00001";
-        }
-
-        // 鐢熸垚铏氭嫙鍗¤褰�
-        SeVirtualCard seVirtualCard = new SeVirtualCard();
-        seVirtualCard.setVcNum(Long.parseLong(vcNum));
-        seVirtualCard.setClientId(clientId);
-        seVirtualCard.setMoney(0d);
-        seVirtualCard.setState((byte)1);
-        seVirtualCard.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode());
-        seVirtualCard.setLastOperateTime(new Date());
-        seVirtualCard.setInUse((byte) 0);
-        seVirtualCard.setCreateTime(new Date());
-        Long vcId = virtualCardSv.insertVirtualCard(seVirtualCard);
-        if(vcId == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
-        }
-
-        // 鐢熸垚铏氭嫙鍗℃搷浣滆褰曪紝娉ㄥ唽铏氭嫙鍗℃搷浣滀汉涓哄啘鎴�
-        SeVcOperate seVcOperate = new SeVcOperate();
-        seVcOperate.setVcId(vcId);
-        seVcOperate.setClientId(clientId);
-        seVcOperate.setOperateType(LastOperateENUM.OPEN_ACCOUNT.getCode());
-        seVcOperate.setOperator(clientId);
-        seVcOperate.setOperateTime(new Date());
-        Long vcOperateId = virtualCardSv.insertVcOperate(seVcOperate);
-        if(vcOperateId == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
-        }
-
-        return BaseResponseUtils.buildSuccess(true) ;
+        //Long clientId = po.getClientId();
+        //
+        //// 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode
+        //Long areaCodeL = virtualCardSv.getAreaCodeById(clientId);
+        //if(areaCodeL == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.AREA_CODE_MISTAKE.getMessage());
+        //}
+        //String areaCode = String.valueOf(areaCodeL);
+        //
+        ///**
+        // * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪铏氭嫙鍗¤〃涓拡瀵硅櫄鎷熷崱缂栧彿锛坴cNum锛夎繘琛屾ā绯婃煡璇�
+        // * 濡傛灉5浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
+        // * 濡傛灉5浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
+        // * cardNum涓烘柊鐨勫崱鍙�
+        // */
+        //String vcNum = Optional.ofNullable(virtualCardSv.getVcCardNumOfMax(areaCode)).orElse("");
+        //if(vcNum != null && vcNum.trim().length() > 0) {
+        //    Integer number = Integer.parseInt(vcNum.substring(12));
+        //    number = number + 1;
+        //    if(number > 65535) {
+        //        return BaseResponseUtils.buildErrorMsg(WechatResultCode.CARD_NUMBER_OVERRUN.getMessage());
+        //    }
+        //    vcNum = vcNum.substring(0, 12) + String.format("%05d", number);
+        //} else {
+        //    vcNum = areaCode + "00001";
+        //}
+        //
+        //// 鐢熸垚铏氭嫙鍗¤褰�
+        //SeVirtualCard seVirtualCard = new SeVirtualCard();
+        //seVirtualCard.setVcNum(Long.parseLong(vcNum));
+        //seVirtualCard.setClientId(clientId);
+        //seVirtualCard.setMoney(0d);
+        //seVirtualCard.setState((byte)1);
+        //seVirtualCard.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode());
+        //seVirtualCard.setLastOperateTime(new Date());
+        //seVirtualCard.setInUse((byte) 0);
+        //seVirtualCard.setCreateTime(new Date());
+        //Long vcId = virtualCardSv.insertVirtualCard(seVirtualCard);
+        //if(vcId == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
+        //}
+        //
+        //// 鐢熸垚铏氭嫙鍗℃搷浣滆褰曪紝娉ㄥ唽铏氭嫙鍗℃搷浣滀汉涓哄啘鎴�
+        //SeVcOperate seVcOperate = new SeVcOperate();
+        //seVcOperate.setVcId(vcId);
+        //seVcOperate.setClientId(clientId);
+        //seVcOperate.setOperateType(LastOperateENUM.OPEN_ACCOUNT.getCode());
+        //seVcOperate.setOperator(clientId);
+        //seVcOperate.setOperateTime(new Date());
+        //Long vcOperateId = virtualCardSv.insertVcOperate(seVcOperate);
+        //if(vcOperateId == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
+        //}
+        //
+        //return BaseResponseUtils.buildSuccess(true) ;
     }
 
     /**
@@ -344,4 +350,23 @@
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
+    /**
+     * 缁戝畾铏氭嫙鍗″埌鍙栨按鍙�
+     * @return
+     */
+    @PostMapping(path = "linkVcToIntake")
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResponse<Boolean> linkVcToIntake(@RequestBody @Valid Client client, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long clientId = client.getClientId();
+        Map map_result = virtualCardSv.linkVcToIntake(clientId);
+        if(map_result.get("success").equals(false)) {
+            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
+        }
+        return BaseResponseUtils.buildSuccess() ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardSv.java
index 7cd6de0..a0912b9 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardSv.java
@@ -3,13 +3,20 @@
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
 import com.dy.pipIrrGlobal.daoSe.*;
+import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate;
+import com.dy.pipIrrGlobal.pojoPr.PrIntakeVc;
 import com.dy.pipIrrGlobal.pojoSe.*;
+import com.dy.pipIrrGlobal.voPr.VoIntakeSimple;
 import com.dy.pipIrrGlobal.voSe.VoOrders;
 import com.dy.pipIrrGlobal.voSe.VoRechargeProfile;
 import com.dy.pipIrrGlobal.voSe.VoVcRecharge;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrWechat.irrigatePlan.enums.OperateTypeENUM;
 import com.dy.pipIrrWechat.result.WechatResultCode;
+import com.dy.pipIrrWechat.virtualCard.dto.DtoRegist;
 import com.dy.pipIrrWechat.virtualCard.dto.DtoVirtualCard;
 import com.dy.pipIrrWechat.virtualCard.enums.LastOperateENUM;
 import com.dy.pipIrrWechat.virtualCard.enums.OrderStateENUM;
@@ -21,9 +28,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -56,11 +61,18 @@
     @Autowired
     private SeRechargeProfileMapper seRechargeProfileMapper;
 
+    @Autowired
+    private PrIntakeMapper prIntakeMapper;
+
+    @Autowired
+    private PrIntakeVcMapper prIntakeVcMapper;
+
     @Value("${vc.alarmValue}")
     private Integer alarmValue;
 
     /**
      * 鏍规嵁鍐滄埛ID鑾峰彇5绾ц鏀垮尯鍒掍唬鐮侊紝娉ㄥ唽铏氭嫙鍗′娇鐢�
+     *
      * @param clientId 鍐滄埛ID
      * @return 5绾ц鏀垮尯鍒掍唬鐮�
      */
@@ -70,6 +82,7 @@
 
     /**
      * 鑾峰彇鍐滄埛鍏ㄩ儴铏氭嫙鍗�
+     *
      * @return
      */
     public List<VoVirtualCard> getVCs(Long clientId) {
@@ -78,6 +91,7 @@
 
     /**
      * 鏍规嵁铏氭嫙鍗D鑾峰彇铏氭嫙鍗″璞�
+     *
      * @param vcId
      * @return
      */
@@ -87,6 +101,7 @@
 
     /**
      * 娉ㄥ唽铏氭嫙鍗�
+     *
      * @param po
      * @return
      */
@@ -97,16 +112,18 @@
 
     /**
      * 鏍规嵁鍐滄埛ID鍙婅櫄鎷熷崱ID鑾峰彇姝e父鐘舵�佺殑铏氭嫙鍗″璞�
+     *
      * @param clientId
      * @param vcId
      * @return
      */
-    public SeVirtualCard getVcByClientIdAndVcId (Long clientId, Long vcId) {
+    public SeVirtualCard getVcByClientIdAndVcId(Long clientId, Long vcId) {
         return seVirtualCardMapper.getVcByClientIdAndVcId(clientId, vcId);
     }
 
     /**
      * 鏍规嵁铏氭嫙鍗D娉ㄩ攢铏氭嫙鍗�
+     *
      * @param clientId
      * @param vcId
      * @return
@@ -117,6 +134,7 @@
 
     /**
      * 鏍规嵁琛屾斂鍖哄垝涓叉ā绯婃煡璇㈣櫄鎷熷崱缂栧彿锛屾敞鍐岃櫄鎷熷崱浣跨敤
+     *
      * @param areaCode
      * @return
      */
@@ -136,6 +154,7 @@
     /**
      * 淇敼铏氭嫙鍗�
      * 鍏呭�笺�佹秷璐广�佺敵璇烽��娆俱�佸鏍搁��娆炬椂闇�瑕佷慨鏀硅櫄鎷熷崱鐨勶細浣欓銆佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+     *
      * @param po
      * @return
      */
@@ -145,6 +164,7 @@
 
     /**
      * 鏍规嵁铏氭嫙鍗$紪鍙疯幏鍙栬櫄鎷熷崱瀵硅薄
+     *
      * @param virtualId
      * @return
      */
@@ -155,6 +175,7 @@
     /**
      * 娣诲姞铏氭嫙鍗″厖鍊艰褰�
      * JSAPI涓嬪崟鍚庣敓鎴愰儴鍒嗗厖鍊艰褰�
+     *
      * @param po
      * @return -1锛氳櫄鎷熷崱涓嶅瓨鍦紝0锛氭坊鍔犲厖鍊艰褰曞け璐�
      */
@@ -168,7 +189,7 @@
         // 楠岃瘉璇ヨ櫄鎷熷崱璐︽埛鏄惁瀛樺湪骞跺彇鍑哄綋鍓嶈处鎴蜂綑棰�
         SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId);
 
-        if(seVirtualCard == null) {
+        if (seVirtualCard == null) {
             return -1L;
         }
         Double money = seVirtualCard.getMoney();
@@ -184,7 +205,7 @@
         seVcRecharge.setOrderState(OrderStateENUM.NON_PAYMENT.getCode());
         seVcRechargeMapper.insert(seVcRecharge);
         Long rechargeId = seVcRecharge.getId();
-        if(rechargeId == null) {
+        if (rechargeId == null) {
             return 0L;
         }
         return rechargeId;
@@ -192,6 +213,7 @@
 
     /**
      * 鏍规嵁璁㈠崟鍙疯幏鍙栬櫄鎷熷崱鍏呭�煎璞�
+     *
      * @param orderNumber
      * @return
      */
@@ -202,15 +224,16 @@
     /**
      * 淇敼铏氭嫙鍗″厖鍊艰褰�
      * 寰俊鏀粯閫氱煡鍚庯細
-     *      1. 鏇存柊鍏呭�艰〃锛氬厖鍊煎悗浣欓銆佹敮浠樺畬鎴愭椂闂淬�佽鍗曠姸鎬�
-     *      2. 鏇存柊铏氭嫙鍗¤〃锛氳处鎴蜂綑棰濄�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+     * 1. 鏇存柊鍏呭�艰〃锛氬厖鍊煎悗浣欓銆佹敮浠樺畬鎴愭椂闂淬�佽鍗曠姸鎬�
+     * 2. 鏇存柊铏氭嫙鍗¤〃锛氳处鎴蜂綑棰濄�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+     *
      * @param orderNumber 璁㈠崟缂栧彿
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
     public BaseResponse<Boolean> updateVCRecharge(String orderNumber, Date rechargeTime) {
         SeVcRecharge seVcRecharge = seVcRechargeMapper.getVCRechargeByorderNumber(orderNumber);
-        if(seVcRecharge == null) {
+        if (seVcRecharge == null) {
             return BaseResponseUtils.buildFail(WechatResultCode.RECHARGE_NOT_EXIST.getMessage());
         }
 
@@ -223,27 +246,28 @@
         seVcRecharge.setRechargeTime(rechargeTime);
         seVcRecharge.setOrderState(OrderStateENUM.PAID.getCode());
         Integer rec = seVcRechargeMapper.updateByPrimaryKeySelective(seVcRecharge);
-        if(rec == null) {
+        if (rec == null) {
             return BaseResponseUtils.buildFail(WechatResultCode.RECHARGE_FAIL.getMessage());
         }
 
         SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId);
-        if(seVirtualCard == null) {
+        if (seVirtualCard == null) {
             return BaseResponseUtils.buildFail(WechatResultCode.VIRTUAL_CARD_NOT_EXIST.getMessage());
         }
         seVirtualCard.setMoney(afterRrecharge);
         seVirtualCard.setLastOperate(LastOperateENUM.RECHARGE.getCode());
         seVirtualCard.setLastOperateTime(new Date());
         Integer rec2 = seVirtualCardMapper.updateByPrimaryKeySelective(seVirtualCard);
-        if(rec2 == null) {
+        if (rec2 == null) {
             return BaseResponseUtils.buildFail(WechatResultCode.RECHARGE_FAIL.getMessage());
         }
-        return BaseResponseUtils.buildSuccess(true) ;
+        return BaseResponseUtils.buildSuccess(true);
     }
 
     /**
      * 淇敼铏氭嫙鍗″厖鍊艰褰曪紙搴熷純锛�
      * 寰俊灏忕▼搴忔敮浠橀�氱煡鍚庝慨鏀癸細浣欓銆佸厖鍊煎悗浣欓銆佸厖鍊煎畬鎴愭椂闂�
+     *
      * @param po
      * @return
      */
@@ -253,16 +277,18 @@
 
     /**
      * 鏍规嵁铏氭嫙鍗″彿鑾峰彇璁㈠崟鍒楄〃
+     *
      * @param virtualId
      * @return
      */
     public List<VoOrders> selectOrders(Long virtualId) {
         List<VoOrders> rsVo = seVcRechargeMapper.getOrders(virtualId);
-        return rsVo ;
+        return rsVo;
     }
 
     /**
      * 鏍规嵁閫�娆綢D鑾峰彇閫�娆惧璞�
+     *
      * @param refundId
      * @return
      */
@@ -272,6 +298,7 @@
 
     /**
      * 娣诲姞閫�娆剧敵璇�
+     *
      * @param po
      * @return
      */
@@ -282,6 +309,7 @@
 
     /**
      * 淇敼閫�娆捐褰�
+     *
      * @param po
      * @return
      */
@@ -291,6 +319,7 @@
 
     /**
      * 鏍规嵁璁㈠崟鍙疯幏鍙栧叾鍚勭瑪閫�娆鹃噾棰�
+     *
      * @param orderNumber
      * @return
      */
@@ -301,6 +330,7 @@
 
     /**
      * 娣诲姞閫�娆惧垎椤�
+     *
      * @param po
      * @return
      */
@@ -311,6 +341,7 @@
 
     /**
      * 缂栬緫閫�娆惧垎椤�
+     *
      * @param po
      * @return
      */
@@ -320,22 +351,24 @@
 
     /**
      * 鏍规嵁璁㈠崟鍙风敓鎴愰��娆惧崟鍙�
+     *
      * @param orderNumber
      * @return
      */
     public String generateRefundNumber(String orderNumber) {
         String refundNumber = seVcRefundItemMapper.getLastRefundNumber(orderNumber);
-        if(refundNumber == null) {
+        if (refundNumber == null) {
             refundNumber = orderNumber + "01";
             return refundNumber;
         }
 
-        String a = String.format("%02d", (Integer.parseInt(refundNumber.substring(29,30).trim()) + 1));
-        return  a;
+        String a = String.format("%02d", (Integer.parseInt(refundNumber.substring(29, 30).trim()) + 1));
+        return a;
     }
 
     /**
      * 鏍规嵁璁㈠崟鍙疯幏鍙栧厖鍊奸噾棰濓紝璋冪敤閫�娆剧敵璇锋帴鍙d娇鐢�
+     *
      * @param orderNumber
      * @return
      */
@@ -346,6 +379,7 @@
 
     /**
      * 鏍规嵁閫�娆鹃�氱煡鎺ュ彛杩斿洖鐨勯��娆惧崟鍙峰弽鏌ラ��娆綢D锛屾煡璇㈣閫�娆綢D涓嬫湭閫�娆捐褰曟暟閲�
+     *
      * @param refundNumber
      * @return
      */
@@ -355,6 +389,7 @@
 
     /**
      * 鏍规嵁閫�娆惧崟鍙疯幏鍙栭��娆綢D锛岄��娆鹃�氱煡鍚庢洿鏂伴��娆捐〃鎵�闇�
+     *
      * @param refundNumber
      * @return
      */
@@ -364,10 +399,11 @@
 
     /**
      * 鑾峰彇铏氭嫙鍗″厖鍊艰褰�
+     *
      * @param dtoVcRecharge
      * @return
      */
-    public QueryResultVo<List<VoVcRecharge>> getVcRechargeRecords(QoVcRecharge dtoVcRecharge){
+    public QueryResultVo<List<VoVcRecharge>> getVcRechargeRecords(QoVcRecharge dtoVcRecharge) {
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(dtoVcRecharge);
         Long itemTotal = seVirtualCardMapper.getRechargeRecordCount(params);
 
@@ -383,6 +419,7 @@
 
     /**
      * 娣诲姞铏氭嫙鍗℃搷浣滆褰�
+     *
      * @param po
      * @return
      */
@@ -393,9 +430,144 @@
 
     /**
      * 鑾峰彇铏氭嫙鍗″父鐢ㄥ厖鍊奸噾棰濋厤缃�
+     *
      * @return
      */
     public List<VoRechargeProfile> gerRechargeProfiles() {
         return seRechargeProfileMapper.gerRechargeProfiles();
     }
+
+    /**
+     * 娉ㄥ唽铏氭嫙鍗�
+     *
+     * @param clientId
+     * @return
+     */
+    public Map addVC(Long clientId, Double money) {
+        // 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode
+        Long areaCodeL = getAreaCodeById(clientId);
+        if (areaCodeL == null) {
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.AREA_CODE_MISTAKE.getMessage());
+            map.put("content", null);
+            return map;
+        }
+        String areaCode = String.valueOf(areaCodeL);
+
+        /**
+         * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪铏氭嫙鍗¤〃涓拡瀵硅櫄鎷熷崱缂栧彿锛坴cNum锛夎繘琛屾ā绯婃煡璇�
+         * 濡傛灉5浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
+         * 濡傛灉5浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
+         * cardNum涓烘柊鐨勫崱鍙�
+         */
+        String vcNum = Optional.ofNullable(getVcCardNumOfMax(areaCode)).orElse("");
+        if (vcNum != null && vcNum.trim().length() > 0) {
+            Integer number = Integer.parseInt(vcNum.substring(12));
+            number = number + 1;
+            if (number > 65535) {
+                Map map = new HashMap<>();
+                map.put("success", false);
+                map.put("msg", WechatResultCode.CARD_NUMBER_OVERRUN.getMessage());
+                map.put("content", null);
+                return map;
+            }
+            vcNum = vcNum.substring(0, 12) + String.format("%05d", number);
+        } else {
+            vcNum = areaCode + "00001";
+        }
+
+        // 鐢熸垚铏氭嫙鍗¤褰�
+        SeVirtualCard seVirtualCard = new SeVirtualCard();
+        seVirtualCard.setVcNum(Long.parseLong(vcNum));
+        seVirtualCard.setClientId(clientId);
+        seVirtualCard.setMoney(money);
+        seVirtualCard.setState((byte) 1);
+        seVirtualCard.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode());
+        seVirtualCard.setLastOperateTime(new Date());
+        seVirtualCard.setInUse((byte) 0);
+        seVirtualCard.setCreateTime(new Date());
+        Long vcId = insertVirtualCard(seVirtualCard);
+        if (vcId == null) {
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
+            map.put("content", null);
+            return map;
+        }
+
+        // 鐢熸垚铏氭嫙鍗℃搷浣滆褰曪紝娉ㄥ唽铏氭嫙鍗℃搷浣滀汉涓哄啘鎴�
+        SeVcOperate seVcOperate = new SeVcOperate();
+        seVcOperate.setVcId(vcId);
+        seVcOperate.setClientId(clientId);
+        seVcOperate.setOperateType(LastOperateENUM.OPEN_ACCOUNT.getCode());
+        seVcOperate.setOperator(clientId);
+        seVcOperate.setOperateTime(new Date());
+        Long vcOperateId = insertVcOperate(seVcOperate);
+        if (vcOperateId == null) {
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage());
+            map.put("content", null);
+            return map;
+        }
+
+        Map map = new HashMap<>();
+        map.put("success", true);
+        map.put("msg", "铏氭嫙鍗℃敞鍐屾垚鍔�");
+        map.put("content", vcId);
+        return map;
+    }
+
+    /**
+     * 鑾峰彇鏈粦瀹氳櫄鎷熷崱鐨勫彇姘村彛鍒楄〃锛岀粰鍙栨按鍙g粦铏氭嫙鍗′娇鐢�
+     *
+     * @return
+     */
+    public Map linkVcToIntake(Long clientId) {
+        // 楠岃瘉鏄惁瀛樺湪鍙栨按鍙f湭缁戣櫄鎷熷崱
+        List<VoIntakeSimple> list = prIntakeMapper.getNotLinkVcIntakes();
+        if (list == null || list.size() == 0) {
+            Map map = new HashMap<>();
+            map.put("success", true);
+            map.put("msg", "鎵�鏈夊彇姘村彛閮藉尮閰嶄簡铏氭嫙鍗�");
+            map.put("content", null);
+            return map;
+        }
+
+        // 閬嶅巻鎵�鏈夋湭缁戣櫄鎷熷崱鐨勫彇姘村彛
+        for (VoIntakeSimple voIntakeSimple : list) {
+            Long intakeId = voIntakeSimple.getIntakeId();
+
+            // 鍒涘缓铏氭嫙鍗�
+            Map map_result = addVC(clientId, 100000D);
+            if (map_result.get("success").equals(false)) {
+                Map map = new HashMap<>();
+                map.put("success", false);
+                map.put("msg", "鐏岃櫄鎷熷崱娉ㄥ唽澶辫触");
+                map.put("content", null);
+                return map;
+            }
+            Long vcId = (Long) map_result.get("content");
+
+            // 鍙栨按鍙g粦铏氭嫙鍗�
+            PrIntakeVc intakeVc = new PrIntakeVc();
+            intakeVc.setIntakeId(intakeId);
+            intakeVc.setVcId(vcId);
+            Integer result = prIntakeVcMapper.insert(intakeVc);
+
+            if (result == null) {
+                Map map = new HashMap<>();
+                map.put("success", false);
+                map.put("msg", "鍙栨按鍙g粦铏氭嫙鍗″け璐�");
+                map.put("content", null);
+                return map;
+            }
+        }
+        Map map = new HashMap<>();
+        map.put("success", true);
+        map.put("msg", "鍙栨按鍙g粦铏氭嫙鍗℃垚鍔�");
+        map.put("content", null);
+        return map;
+    }
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/Client.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/Client.java
new file mode 100644
index 0000000..45d137a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/Client.java
@@ -0,0 +1,22 @@
+package com.dy.pipIrrWechat.virtualCard.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-04-10 16:09
+ * @LastEditTime 2025-04-10 16:09
+ * @Description 鍐滄埛瀵硅薄锛岀粰鍙栨按鍙g粦铏氭嫙鍗℃椂浣跨敤
+ */
+
+@Data
+public class Client {
+    public static final long serialVersionUID = 202504101610001L;
+
+    /**
+     * 鍐滄埛ID
+     */
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
+}

--
Gitblit v1.8.0