From 898fdfe48bdd8fabb0f5e4c2f449a0fb47771281 Mon Sep 17 00:00:00 2001
From: jlt <jltdev@163.com>
Date: Tue, 5 Apr 2022 22:45:30 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8D=B3=E5=B0=86=E5=AE=8C=E6=88=90=E4=BC=9A?=
 =?UTF-8?q?=E5=91=98=E5=85=A5=E9=A9=BB=E7=9A=84=E8=AE=A4=E9=A2=86=E8=8F=9C?=
 =?UTF-8?q?=E5=9C=B0=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/FarmerContractController.java  |  12 +
 .../jlt/csa/controller/FarmerController.java  |  16 +
 .../jlt/csa/controller/GardenController.java  |  19 +
 .../main/java/com/jlt/csa/domain/Farmer.java  |  32 +-
 .../com/jlt/csa/domain/FarmerContract.java    |  41 +-
 .../main/java/com/jlt/csa/domain/Garden.java  |  32 +-
 .../jlt/csa/mapper/FarmerContractMapper.java  |  11 +-
 .../java/com/jlt/csa/mapper/FarmerMapper.java |   8 +
 .../csa/service/IFarmerContractService.java   |   7 +
 .../com/jlt/csa/service/IFarmerService.java   |   8 +
 .../impl/FarmerContractServiceImpl.java       |  23 +-
 .../csa/service/impl/FarmerServiceImpl.java   |  10 +
 .../mapper/csa/FarmerContractMapper.xml       |  47 ++-
 .../resources/mapper/csa/FarmerMapper.xml     |  40 +-
 .../resources/mapper/csa/GardenMapper.xml     |  36 +-
 ruoyi-ui/src/api/csa/contract.js              |  21 +-
 ruoyi-ui/src/api/csa/farmer.js                |   8 +
 ruoyi-ui/src/api/csa/garden.js                |   8 +
 ruoyi-ui/src/views/csa/contract/enter.vue     | 362 ++++++++++++++++++
 ruoyi-ui/src/views/csa/garden/index.vue       |  12 +-
 sql/csa.sql                                   | 134 ++++---
 21 files changed, 775 insertions(+), 112 deletions(-)
 create mode 100644 ruoyi-ui/src/views/csa/contract/enter.vue

diff --git a/private-farm/src/main/java/com/jlt/csa/controller/FarmerContractController.java b/private-farm/src/main/java/com/jlt/csa/controller/FarmerContractController.java
index b042db819..5fd3417d5 100644
--- a/private-farm/src/main/java/com/jlt/csa/controller/FarmerContractController.java
+++ b/private-farm/src/main/java/com/jlt/csa/controller/FarmerContractController.java
@@ -42,6 +42,18 @@ public class FarmerContractController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询入驻会员合约的列表
+     */
+    @PreAuthorize("@ss.hasPermi('csa:contract:list')")
+    @GetMapping("/enter/list")
+    public TableDataInfo enterList(FarmerContract farmerContract)
+    {
+        startPage();
+        List<FarmerContract> list = farmerContractService.selectEnterContractList(farmerContract);
+        return getDataTable(list);
+    }
+
     /**
      * 导出会员签约列表
      */
diff --git a/private-farm/src/main/java/com/jlt/csa/controller/FarmerController.java b/private-farm/src/main/java/com/jlt/csa/controller/FarmerController.java
index cb7afa40c..c2aa02620 100644
--- a/private-farm/src/main/java/com/jlt/csa/controller/FarmerController.java
+++ b/private-farm/src/main/java/com/jlt/csa/controller/FarmerController.java
@@ -2,6 +2,8 @@ package com.jlt.csa.controller;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.jlt.csa.domain.Garden;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -69,6 +71,20 @@ public class FarmerController extends BaseController
         return AjaxResult.success(farmerService.selectFarmerByFarmerId(farmerId));
     }
 
+    /**
+     * 获取带菜地信息的地主详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('csa:farmer:query')")
+    @GetMapping(value = "/garden/{farmerId}")
+    public AjaxResult getInfoWithGarden(@PathVariable("farmerId") Long farmerId)
+    {
+        Farmer farmer = farmerService.selectFarmerWithGardenById(farmerId);
+        if (farmer.getGarden() == null)
+            farmer.setGarden(new Garden());
+
+        return AjaxResult.success(farmer);
+    }
+
     /**
      * 新增农场会员
      */
diff --git a/private-farm/src/main/java/com/jlt/csa/controller/GardenController.java b/private-farm/src/main/java/com/jlt/csa/controller/GardenController.java
index f5023364b..e8b037c4b 100644
--- a/private-farm/src/main/java/com/jlt/csa/controller/GardenController.java
+++ b/private-farm/src/main/java/com/jlt/csa/controller/GardenController.java
@@ -42,6 +42,25 @@ public class GardenController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 按代码筛选可绑定的菜地列表
+     */
+    @PreAuthorize("@ss.hasPermi('csa:garden:query')")
+    @GetMapping({"/cansell/{code}", "/cansell/"})
+    public TableDataInfo listCanSell(@PathVariable(value = "code", required = false) String code)
+    {
+        logger.error("--==>" + code);
+        Garden garden = new Garden();
+        garden.setCode(code);
+        garden.setIsCompleted("Y");
+        garden.setIsSelled("N");
+        garden.setStatus("0");
+
+        List<Garden> list = gardenService.selectGardenList(garden);
+
+        return getDataTable(list);
+    }
+
     /**
      * 导出菜地划分列表
      */
diff --git a/private-farm/src/main/java/com/jlt/csa/domain/Farmer.java b/private-farm/src/main/java/com/jlt/csa/domain/Farmer.java
index 0a7a0a5c9..4ea9fa42e 100644
--- a/private-farm/src/main/java/com/jlt/csa/domain/Farmer.java
+++ b/private-farm/src/main/java/com/jlt/csa/domain/Farmer.java
@@ -18,6 +18,9 @@ public class Farmer extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    /** 菜地 */
+    private Garden garden;
+
     /** 会员id */
     private Long farmerId;
 
@@ -29,9 +32,13 @@ public class Farmer extends BaseEntity
     @Excel(name = "性别")
     private String gender;
 
+    /** 手机号码 */
+    @Excel(name = "手机号码")
+    private String mobileNumber;
+
     /** 金币余额 */
     @Excel(name = "金币余额")
-    private BigDecimal coins;
+    private Long coins;
 
     /** 账户余额 */
     @Excel(name = "账户余额")
@@ -65,7 +72,15 @@ public class Farmer extends BaseEntity
     /** 删除标志 */
     private String delFlag;
 
-    public void setFarmerId(Long farmerId) 
+    public Garden getGarden() {
+        return garden;
+    }
+
+    public void setGarden(Garden garden) {
+        this.garden = garden;
+    }
+
+    public void setFarmerId(Long farmerId)
     {
         this.farmerId = farmerId;
     }
@@ -92,12 +107,21 @@ public class Farmer extends BaseEntity
     {
         return gender;
     }
-    public void setCoins(BigDecimal coins) 
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public void setCoins(Long coins)
     {
         this.coins = coins;
     }
 
-    public BigDecimal getCoins() 
+    public Long getCoins()
     {
         return coins;
     }
diff --git a/private-farm/src/main/java/com/jlt/csa/domain/FarmerContract.java b/private-farm/src/main/java/com/jlt/csa/domain/FarmerContract.java
index 8334d9dd1..2993fc35b 100644
--- a/private-farm/src/main/java/com/jlt/csa/domain/FarmerContract.java
+++ b/private-farm/src/main/java/com/jlt/csa/domain/FarmerContract.java
@@ -30,13 +30,23 @@ public class FarmerContract extends BaseEntity
     @Excel(name = "会员id")
     private Long farmerId;
 
+    /** 地主 */
+    private Farmer farmer;
+
+    /** 菜地id */
+    @Excel(name = "菜地id")
+    private Long gardenId;
+
+    /** 菜地 */
+    private Farmer garden;
+
     /** 签约人 */
     @Excel(name = "签约人")
     private String contractor;
 
     /** 合约金币 */
     @Excel(name = "合约金币")
-    private BigDecimal coins;
+    private Long coins;
 
     /** 合约账户金额 */
     @Excel(name = "合约账户金额")
@@ -120,6 +130,31 @@ public class FarmerContract extends BaseEntity
     {
         return farmerId;
     }
+
+    public Farmer getFarmer() {
+        return farmer;
+    }
+
+    public void setFarmer(Farmer farmer) {
+        this.farmer = farmer;
+    }
+
+    public Long getGardenId() {
+        return gardenId;
+    }
+
+    public void setGardenId(Long gardenId) {
+        this.gardenId = gardenId;
+    }
+
+    public Farmer getGarden() {
+        return garden;
+    }
+
+    public void setGarden(Farmer garden) {
+        this.garden = garden;
+    }
+
     public void setContractor(String contractor)
     {
         this.contractor = contractor;
@@ -129,12 +164,12 @@ public class FarmerContract extends BaseEntity
     {
         return contractor;
     }
-    public void setCoins(BigDecimal coins) 
+    public void setCoins(Long coins)
     {
         this.coins = coins;
     }
 
-    public BigDecimal getCoins() 
+    public Long getCoins()
     {
         return coins;
     }
diff --git a/private-farm/src/main/java/com/jlt/csa/domain/Garden.java b/private-farm/src/main/java/com/jlt/csa/domain/Garden.java
index 255ba1ab7..fabb6fd1d 100644
--- a/private-farm/src/main/java/com/jlt/csa/domain/Garden.java
+++ b/private-farm/src/main/java/com/jlt/csa/domain/Garden.java
@@ -17,7 +17,7 @@ public class Garden extends BaseEntity
     private static final long serialVersionUID = 1L;
 
     /** 菜地id */
-    private Long id;
+    private Long gardenId;
 
     /** 农场分区 */
     @Excel(name = "农场分区")
@@ -36,11 +36,11 @@ public class Garden extends BaseEntity
 
     /** 平方米 */
     @Excel(name = "平方米")
-    private BigDecimal m2;
+    private Integer m2;
 
     /** 会员 */
-    @Excel(name = "会员")
-    private Long memberId;
+    @Excel(name = "会员id")
+    private Long farmerId;
 
     /** 菜地管理员 */
     @Excel(name = "菜地管理员")
@@ -73,14 +73,14 @@ public class Garden extends BaseEntity
     /** 删除标志 */
     private String delFlag;
 
-    public void setId(Long id)
+    public void setGardenId(Long gardenId)
     {
-        this.id = id;
+        this.gardenId = gardenId;
     }
 
-    public Long getId()
+    public Long getGardenId()
     {
-        return id;
+        return gardenId;
     }
     public void setZoneId(Long zoneId)
     {
@@ -117,23 +117,23 @@ public class Garden extends BaseEntity
     {
         return name;
     }
-    public void setM2(BigDecimal m2)
+    public void setM2(Integer m2)
     {
         this.m2 = m2;
     }
 
-    public BigDecimal getM2()
+    public Integer getM2()
     {
         return m2;
     }
-    public void setMemberId(Long memberId)
+    public void setFarmerId(Long farmerId)
     {
-        this.memberId = memberId;
+        this.farmerId = farmerId;
     }
 
-    public Long getMemberId()
+    public Long getFarmerId()
     {
-        return memberId;
+        return farmerId;
     }
     public void setManagerId(Long managerId)
     {
@@ -211,12 +211,12 @@ public class Garden extends BaseEntity
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
+                .append("gardenId", getGardenId())
                 .append("zoneId", getZoneId())
                 .append("code", getCode())
                 .append("name", getName())
                 .append("m2", getM2())
-                .append("memberId", getMemberId())
+                .append("farmerId", getFarmerId())
                 .append("managerId", getManagerId())
                 .append("workerId", getWorkerId())
                 .append("contacterId", getContacterId())
diff --git a/private-farm/src/main/java/com/jlt/csa/mapper/FarmerContractMapper.java b/private-farm/src/main/java/com/jlt/csa/mapper/FarmerContractMapper.java
index cb35f89f0..aa9cf7c43 100644
--- a/private-farm/src/main/java/com/jlt/csa/mapper/FarmerContractMapper.java
+++ b/private-farm/src/main/java/com/jlt/csa/mapper/FarmerContractMapper.java
@@ -23,11 +23,18 @@ public interface FarmerContractMapper
     /**
      * 查询会员签约列表
      * 
-     * @param farmerContract 会员签约
-     * @return 会员签约集合
+     * @param farmerContract 会员合约
+     * @return 会员合约集合
      */
     public List<FarmerContract> selectFarmerContractList(FarmerContract farmerContract);
 
+    /**
+     * 查询入驻会员合约的列表
+     * @param farmerContract 会员合约
+     * @return 会员合约集合
+     */
+    public List<FarmerContract> selectEnterContractList(FarmerContract farmerContract);
+
     /**
      * 新增会员签约
      * 
diff --git a/private-farm/src/main/java/com/jlt/csa/mapper/FarmerMapper.java b/private-farm/src/main/java/com/jlt/csa/mapper/FarmerMapper.java
index d86d16b45..2778da235 100644
--- a/private-farm/src/main/java/com/jlt/csa/mapper/FarmerMapper.java
+++ b/private-farm/src/main/java/com/jlt/csa/mapper/FarmerMapper.java
@@ -19,6 +19,14 @@ public interface FarmerMapper
      */
     public Farmer selectFarmerByFarmerId(Long farmerId);
 
+    /**
+     * 查询带菜地信息的农场会员
+     *
+     * @param farmerId 农场会员主键
+     * @return 农场会员
+     */
+    public Farmer selectFarmerWithGardenById(Long farmerId);
+
     /**
      * 查询农场会员列表
      * 
diff --git a/private-farm/src/main/java/com/jlt/csa/service/IFarmerContractService.java b/private-farm/src/main/java/com/jlt/csa/service/IFarmerContractService.java
index d6e34267a..84a29c535 100644
--- a/private-farm/src/main/java/com/jlt/csa/service/IFarmerContractService.java
+++ b/private-farm/src/main/java/com/jlt/csa/service/IFarmerContractService.java
@@ -30,6 +30,13 @@ public interface IFarmerContractService
      */
     public List<FarmerContract> selectFarmerContractList(FarmerContract farmerContract);
 
+    /**
+     * 查询入驻会员合约的列表
+     * @param farmerContract 会员合约
+     * @return 会员合约集合
+     */
+    public List<FarmerContract> selectEnterContractList(FarmerContract farmerContract);
+
     /**
      * 新增会员签约
      * 
diff --git a/private-farm/src/main/java/com/jlt/csa/service/IFarmerService.java b/private-farm/src/main/java/com/jlt/csa/service/IFarmerService.java
index 56e5fcc40..6191f9ab3 100644
--- a/private-farm/src/main/java/com/jlt/csa/service/IFarmerService.java
+++ b/private-farm/src/main/java/com/jlt/csa/service/IFarmerService.java
@@ -19,6 +19,14 @@ public interface IFarmerService
      */
     public Farmer selectFarmerByFarmerId(Long farmerId);
 
+    /**
+     * 查询带菜地信息的农场会员
+     *
+     * @param farmerId 农场会员主键
+     * @return 农场会员
+     */
+    public Farmer selectFarmerWithGardenById(Long farmerId);
+
     /**
      * 查询农场会员列表
      * 
diff --git a/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerContractServiceImpl.java b/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerContractServiceImpl.java
index 50c8dc0bd..2a0fb877a 100644
--- a/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerContractServiceImpl.java
+++ b/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerContractServiceImpl.java
@@ -57,7 +57,7 @@ public class FarmerContractServiceImpl implements IFarmerContractService
         }
 
         // 合约不符合审核条件,返回错误提示
-        if (!contract.getStatus().equals(DictUtils.getDictValue("csa_contract_status", "申请"))) {
+        if (!contract.getStatus().equals(DictUtils.getDictValue("csa_contract_status", "待审"))) {
             throw new RuntimeException("该合约不符合审核条件!");
         }
 
@@ -68,8 +68,8 @@ public class FarmerContractServiceImpl implements IFarmerContractService
         if (isNewFarmer) {
             // 如果是新签,新建地主信息
             farmer = new Farmer();
-            farmer.setName("待绑定");
-            farmer.setCoins(new BigDecimal(0));
+            farmer.setName(contract.getContractor());
+            farmer.setCoins(0L);
             farmer.setBalance(new BigDecimal(0));
             farmer.setWeight(new BigDecimal(0));
             farmer.setArchedYears(0L);
@@ -84,7 +84,7 @@ public class FarmerContractServiceImpl implements IFarmerContractService
         }
 
         // 累计合约信息至地主,菜地有效期需要在绑定地块时处理
-        farmer.setCoins(farmer.getCoins().add(contract.getCoins()));
+        farmer.setCoins(farmer.getCoins() + contract.getCoins());
         farmer.setBalance(farmer.getBalance().add(contract.getBalance()));
         farmer.setWeight(farmer.getWeight().add(contract.getWeight()));
         farmer.setArchedYears(farmer.getArchedYears() + contract.getArchedYears());
@@ -92,7 +92,7 @@ public class FarmerContractServiceImpl implements IFarmerContractService
         // 构建审核的合约更新字段
         contract = new FarmerContract();
         contract.setContractId(contractId);
-        contract.setStatus("2");
+        contract.setStatus(DictUtils.getDictValue("csa_contract_status", "已审"));
         contract.setUpdateBy(getUsername());
 
         if (isNewFarmer) {
@@ -126,11 +126,20 @@ public class FarmerContractServiceImpl implements IFarmerContractService
      * @return 会员签约
      */
     @Override
-    public List<FarmerContract> selectFarmerContractList(FarmerContract farmerContract)
-    {
+    public List<FarmerContract> selectFarmerContractList(FarmerContract farmerContract) {
         return farmerContractMapper.selectFarmerContractList(farmerContract);
     }
 
+    /**
+     * 查询入驻会员合约的列表
+     * @param farmerContract 会员合约
+     * @return 会员合约集合
+     */
+    @Override
+    public List<FarmerContract> selectEnterContractList(FarmerContract farmerContract) {
+        return farmerContractMapper.selectEnterContractList(farmerContract);
+    }
+
     /**
      * 新增会员签约
      * 
diff --git a/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerServiceImpl.java b/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerServiceImpl.java
index 9b86cae9e..2bce78cd1 100644
--- a/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerServiceImpl.java
+++ b/private-farm/src/main/java/com/jlt/csa/service/impl/FarmerServiceImpl.java
@@ -32,6 +32,16 @@ public class FarmerServiceImpl implements IFarmerService
         return farmerMapper.selectFarmerByFarmerId(farmerId);
     }
 
+    /**
+     * 查询带菜地信息的农场会员
+     *
+     * @param farmerId 农场会员主键
+     * @return 农场会员
+     */
+    public Farmer selectFarmerWithGardenById(Long farmerId) {
+        return farmerMapper.selectFarmerWithGardenById(farmerId);
+    }
+
     /**
      * 查询农场会员列表
      * 
diff --git a/private-farm/src/main/resources/mapper/csa/FarmerContractMapper.xml b/private-farm/src/main/resources/mapper/csa/FarmerContractMapper.xml
index a88677f57..8999328f1 100644
--- a/private-farm/src/main/resources/mapper/csa/FarmerContractMapper.xml
+++ b/private-farm/src/main/resources/mapper/csa/FarmerContractMapper.xml
@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="FarmerContract" id="FarmerContractResult">
         <result property="contractId"    column="contract_id"    />
         <result property="farmerId"    column="farmer_id"    />
+        <result property="gardenId"    column="garden_id"    />
         <result property="contractor"    column="contractor"    />
         <result property="coins"    column="coins"    />
         <result property="balance"    column="balance"    />
@@ -26,10 +27,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"    column="remark"    />
     </resultMap>
 
+    <resultMap type="FarmerContract" id="ContractAndFarmerAndGardenResult" extends="FarmerContractResult">
+        <association property="farmer" javaType="com.jlt.csa.domain.Farmer">
+            <id property="farmerId" column="farmer_id" />
+            <result property="name"    column="name" />
+            <result property="mobileNumber"    column="mobile_number" />
+        </association>
+        <association property="garden" javaType="com.jlt.csa.domain.Garden">
+            <id property="gardenId" column="garden_id" />
+            <result property="code"    column="code" />
+            <result property="name"    column="garden_name" />
+        </association>
+    </resultMap>
+
     <sql id="selectFarmerContractVo">
-        select contract_id, farmer_id, contractor, coins, balance, weight, arched_years, activate_way, join_credential_no, join_date, due_date, days, status, del_flag, create_by, create_time, update_by, update_time, remark from csa_farmer_contract
+        select contract_id, farmer_id, garden_id, contractor, coins, balance, weight, arched_years, activate_way, join_credential_no, join_date, due_date, days, status, del_flag, create_by, create_time, update_by, update_time, remark from csa_farmer_contract
     </sql>
 
+    <sql id="selectContractAndFarmerAndGardenVo">
+        select  c.contract_id, c.farmer_id, c.garden_id, c.contractor, c.coins, c.balance, c.weight, c.arched_years,
+                c.activate_way, c.join_credential_no, c.join_date, c.due_date, c.days, c.status,
+                c.del_flag, c.create_by, c.create_time, c.update_by, c.update_time, c.remark,
+                f.name, f.mobile_number,
+                g.code, g.name as garden_name
+        from csa_farmer_contract as c
+        left join csa_farmer as f on c.farmer_id = f.farmer_id
+        left join csa_garden as g on c.garden_id = g.garden_id
+    </sql>
+
+    <select id="selectEnterContractList" parameterType="FarmerContract" resultMap="ContractAndFarmerAndGardenResult">
+        <include refid="selectContractAndFarmerAndGardenVo" />
+        <where>
+            <if test="contractor != null and contractor != ''"> and c.contractor like concat('%', #{contractor}, '%')</if>
+            <if test="joinDate != null "> and c.join_date = #{joinDate}</if>
+            <if test="dueDate != null "> and c.due_date = #{dueDate}</if>
+            <if test="status == null or status == ''"> and (c.status = '1' or c.status = '2')</if>
+            <if test="status != null and status != ''"> and status = #{status}</if>
+            <if test="delFlag == null or delFlag == ''"> and c.del_flag = '0'</if>
+            <if test="delFlag != null and delFlag != ''"> and c.del_flag = #{del_flag}</if>
+        </where>
+        order by contract_id DESC
+    </select>
+
     <select id="selectFarmerContractList" parameterType="FarmerContract" resultMap="FarmerContractResult">
         <include refid="selectFarmerContractVo"/>
         <where>  
@@ -38,8 +77,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="dueDate != null "> and due_date = #{dueDate}</if>
             <if test="status != null and status != ''"> and status = #{status}</if>
             <if test="delFlag == null or delFlag == ''"> and del_flag = '0'</if>
-            <if test="delFlag != null and delFlag != ''"> and status = #{status}</if>
+            <if test="delFlag != null and delFlag != ''"> and del_flag = #{del_flag}</if>
         </where>
+        order by contract_id DESC
     </select>
     
     <select id="selectFarmerContractByContractId" parameterType="Long" resultMap="FarmerContractResult">
@@ -51,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         insert into csa_farmer_contract
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="farmerId != null">farmer_id,</if>
+            <if test="gardenId != null">garden_id,</if>
             <if test="contractor != null and contractor != ''">contractor,</if>
             <if test="coins != null">coins,</if>
             <if test="balance != null">balance,</if>
@@ -71,6 +112,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="farmerId != null">#{farmerId},</if>
+            <if test="gardenId != null">#{gardenId},</if>
             <if test="contractor != null and contractor != ''">#{contractor},</if>
             <if test="coins != null">#{coins},</if>
             <if test="balance != null">#{balance},</if>
@@ -95,6 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update csa_farmer_contract
         <trim prefix="SET" suffixOverrides=",">
             <if test="farmerId != null">farmer_id = #{farmerId},</if>
+            <if test="gardenId != null">garden_id = #{gardenId},</if>
             <if test="contractor != null and contractor != ''">contractor = #{contractor},</if>
             <if test="coins != null">coins = #{coins},</if>
             <if test="balance != null">balance = #{balance},</if>
diff --git a/private-farm/src/main/resources/mapper/csa/FarmerMapper.xml b/private-farm/src/main/resources/mapper/csa/FarmerMapper.xml
index d9d254673..b35389364 100644
--- a/private-farm/src/main/resources/mapper/csa/FarmerMapper.xml
+++ b/private-farm/src/main/resources/mapper/csa/FarmerMapper.xml
@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="farmerId"    column="farmer_id"    />
         <result property="name"    column="name"    />
         <result property="gender"    column="gender"    />
+        <result property="mobileNumber"    column="mobile_umber"    />
         <result property="coins"    column="coins"    />
         <result property="balance"    column="balance"    />
         <result property="weight"    column="weight"    />
@@ -24,14 +25,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"    column="remark"    />
     </resultMap>
 
+    <resultMap type="Farmer" id="FarmerWithGandenResult" extends="FarmerResult">
+        <association property="garden" javaType="com.jlt.csa.domain.Garden">
+            <id property="gardenId" column="garden_id" />
+            <result property="code"    column="code" />
+            <result property="name"    column="garden_name" />
+        </association>
+    </resultMap>
+
     <sql id="selectFarmerVo">
-        select farmer_id, name, gender, coins, balance, weight, arched_years, join_date, due_date, is_expire, status, del_flag, create_by, create_time, update_by, update_time, remark from csa_farmer
+        select farmer_id, name, gender, coins, mobile_number, balance, weight, arched_years, join_date, due_date, is_expire, status, del_flag, create_by, create_time, update_by, update_time, remark from csa_farmer
+    </sql>
+
+    <sql id="selectFarmerWithGardenVo">
+        select  f.farmer_id, f.name, f.gender, f.coins, f.mobile_number, f.balance, f.weight, f.arched_years,
+                f.join_date, f.due_date, f.is_expire, f.status,
+                f.del_flag, f.create_by, f.create_time, f.update_by, f.update_time, f.remark,
+                g.garden_id, g.code, g.name as garden_name
+        from csa_farmer f
+        left join csa_garden g on f.farmer_id = g.farmer_id
     </sql>
 
     <select id="selectFarmerList" parameterType="Farmer" resultMap="FarmerResult">
         <include refid="selectFarmerVo"/>
         <where>  
             <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="mobileNumber != null  and mobileNumber != ''"> and mobile_number = #{mobileNumber}</if>
+            <if test="joinDate != null "> and join_date = #{joinDate}</if>
+            <if test="dueDate != null "> and due_date = #{dueDate}</if>
+            <if test="isExpire != null  and isExpire != ''"> and is_expire = #{isExpire}</if>
+        </where>
+    </select>
+
+    <select id="selectFarmerWithGardenList" parameterType="Farmer" resultMap="FarmerWithGandenResult">
+        <include refid="selectFarmerWithGardenVo"/>
+        <where>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="mobileNumber != null  and mobileNumber != ''"> and mobile_number = #{mobileNumber}</if>
             <if test="joinDate != null "> and join_date = #{joinDate}</if>
             <if test="dueDate != null "> and due_date = #{dueDate}</if>
             <if test="isExpire != null  and isExpire != ''"> and is_expire = #{isExpire}</if>
@@ -42,12 +72,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFarmerVo"/>
         where farmer_id = #{farmerId}
     </select>
+
+    <select id="selectFarmerWithGardenById" parameterType="Long" resultMap="FarmerWithGandenResult">
+        <include refid="selectFarmerWithGardenVo"/>
+        where f.farmer_id = #{farmerId}
+    </select>
         
     <insert id="insertFarmer" parameterType="Farmer" useGeneratedKeys="true" keyProperty="farmerId">
         insert into csa_farmer
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="name != null and name != ''">name,</if>
             <if test="gender != null">gender,</if>
+            <if test="mobileNumber != null">mobile_number,</if>
             <if test="coins != null">coins,</if>
             <if test="balance != null">balance,</if>
             <if test="weight != null">weight,</if>
@@ -66,6 +102,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="name != null and name != ''">#{name},</if>
             <if test="gender != null">#{gender},</if>
+            <if test="mobileNumber != null">#{mobileNumber},</if>
             <if test="coins != null">#{coins},</if>
             <if test="balance != null">#{balance},</if>
             <if test="weight != null">#{weight},</if>
@@ -88,6 +125,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="SET" suffixOverrides=",">
             <if test="name != null and name != ''">name = #{name},</if>
             <if test="gender != null">gender = #{gender},</if>
+            <if test="mobileNumber != null">mobile_number = #{mobileNumber},</if>
             <if test="coins != null">coins = #{coins},</if>
             <if test="balance != null">balance = #{balance},</if>
             <if test="weight != null">weight = #{weight},</if>
diff --git a/private-farm/src/main/resources/mapper/csa/GardenMapper.xml b/private-farm/src/main/resources/mapper/csa/GardenMapper.xml
index dddd48ffc..8bef60531 100644
--- a/private-farm/src/main/resources/mapper/csa/GardenMapper.xml
+++ b/private-farm/src/main/resources/mapper/csa/GardenMapper.xml
@@ -5,12 +5,12 @@
 <mapper namespace="com.jlt.csa.mapper.GardenMapper">
 
     <resultMap type="Garden" id="GardenResult">
-        <result property="id"    column="id"    />
+        <result property="gardenId"    column="garden_id"    />
         <result property="zoneId"    column="zone_id"    />
         <result property="code"    column="code"    />
         <result property="name"    column="name"    />
         <result property="m2"    column="m2"    />
-        <result property="memberId"    column="member_id"    />
+        <result property="farmerId"    column="farmer_id"    />
         <result property="managerId"    column="manager_id"    />
         <result property="workerId"    column="worker_id"    />
         <result property="contacterId"    column="contacter_id"    />
@@ -31,7 +31,7 @@
     </resultMap>
 
     <sql id="selectGardenVo">
-        select id, zone_id, code, name, m2, member_id, manager_id, worker_id, contacter_id, is_farming, is_selled, is_completed, status, del_flag, create_by, create_time, update_by, update_time, remark from csa_garden
+        select garden_id, zone_id, code, name, m2, farmer_id, manager_id, worker_id, contacter_id, is_farming, is_selled, is_completed, status, del_flag, create_by, create_time, update_by, update_time, remark from csa_garden
     </sql>
 
     <select id="getFarmZone" resultMap="com.jlt.csa.mapper.FarmZoneMapper.FarmZoneResult" parameterType="java.lang.Long">
@@ -42,10 +42,10 @@
         <include refid="selectGardenVo"/>
         <where>
             <if test="zoneId != null "> and zone_id = #{zoneId}</if>
-            <if test="code != null  and code != ''"> and code = #{code}</if>
+            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
             <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
             <if test="m2 != null "> and m2 = #{m2}</if>
-            <if test="memberId != null "> and member_id = #{memberId}</if>
+            <if test="farmerId != null "> and farmer_id = #{farmerId}</if>
             <if test="managerId != null "> and manager_id = #{managerId}</if>
             <if test="workerId != null "> and worker_id = #{workerId}</if>
             <if test="contacterId != null "> and contacter_id = #{contacterId}</if>
@@ -58,18 +58,17 @@
 
     <select id="selectGardenById" parameterType="Long" resultMap="GardenResult">
         <include refid="selectGardenVo"/>
-        where id = #{id}
+        where garden_id =  #{gardenId}
     </select>
 
     <insert id="insertGarden" parameterType="Garden">
         insert into csa_garden
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">id,</if>
             <if test="zoneId != null">zone_id,</if>
             <if test="code != null and code != ''">code,</if>
             <if test="name != null and name != ''">name,</if>
             <if test="m2 != null">m2,</if>
-            <if test="memberId != null">member_id,</if>
+            <if test="farmerId != null">farmer_id,</if>
             <if test="managerId != null">manager_id,</if>
             <if test="workerId != null">worker_id,</if>
             <if test="contacterId != null">contacter_id,</if>
@@ -85,12 +84,11 @@
             <if test="remark != null">remark,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">#{id},</if>
             <if test="zoneId != null">#{zoneId},</if>
             <if test="code != null and code != ''">#{code},</if>
             <if test="name != null and name != ''">#{name},</if>
             <if test="m2 != null">#{m2},</if>
-            <if test="memberId != null">#{memberId},</if>
+            <if test="farmerId != null">#{farmerId},</if>
             <if test="managerId != null">#{managerId},</if>
             <if test="workerId != null">#{workerId},</if>
             <if test="contacterId != null">#{contacterId},</if>
@@ -114,7 +112,7 @@
             <if test="code != null and code != ''">code = #{code},</if>
             <if test="name != null and name != ''">name = #{name},</if>
             <if test="m2 != null">m2 = #{m2},</if>
-            <if test="memberId != null">member_id = #{memberId},</if>
+            <if test="farmerId != null">farmer_id = #{farmerId},</if>
             <if test="managerId != null">manager_id = #{managerId},</if>
             <if test="workerId != null">worker_id = #{workerId},</if>
             <if test="contacterId != null">contacter_id = #{contacterId},</if>
@@ -129,7 +127,7 @@
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="remark != null">remark = #{remark},</if>
         </trim>
-        where id = #{id}
+        where garden_id =  #{gardenId}
     </update>
 
     <update id="updateGardenStatus">
@@ -143,20 +141,20 @@
             <if test="garden.updateBy != null">update_by = #{garden.updateBy},</if>
             <if test="garden.updateTime != null">update_time = #{garden.updateTime},</if>
         </trim>
-        where id in
-        <foreach item="id" collection="ids" open="(" separator="," close=")">
-            #{id}
+        where garden_id in
+        <foreach item="gardenId" collection="ids" open="(" separator="," close=")">
+            #{gardenId}
         </foreach>
     </update>
 
     <delete id="deleteGardenById" parameterType="Long">
-        delete from csa_garden where id = #{id}
+        delete from csa_garden where garden_id = #{gardenId}
     </delete>
 
     <delete id="deleteGardenByIds" parameterType="String">
-        delete from csa_garden where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
-            #{id}
+        delete from csa_garden where garden_id in
+        <foreach item="gardenId" collection="array" open="(" separator="," close=")">
+             #{gardenId}
         </foreach>
     </delete>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-ui/src/api/csa/contract.js b/ruoyi-ui/src/api/csa/contract.js
index aafcf1d7a..5ad755a30 100644
--- a/ruoyi-ui/src/api/csa/contract.js
+++ b/ruoyi-ui/src/api/csa/contract.js
@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 查询会员签约列表
+// 查询会员合约列表
 export function listContract(query) {
   return request({
     url: '/csa/contract/list',
@@ -9,7 +9,16 @@ export function listContract(query) {
   })
 }
 
-// 查询会员签约详细
+// 查询入驻会员合约列表
+export function listEnterContract(query) {
+  return request({
+    url: '/csa/contract/enter/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询会员合约详细
 export function getContract(contractId) {
   return request({
     url: '/csa/contract/' + contractId,
@@ -17,7 +26,7 @@ export function getContract(contractId) {
   })
 }
 
-// 新增会员签约
+// 新增会员合约
 export function addContract(data) {
   return request({
     url: '/csa/contract',
@@ -26,7 +35,7 @@ export function addContract(data) {
   })
 }
 
-// 修改会员签约
+// 修改会员合约
 export function updateContract(data) {
   return request({
     url: '/csa/contract',
@@ -35,7 +44,7 @@ export function updateContract(data) {
   })
 }
 
-// 审核会员签约
+// 审核会员合约
 export function auditContract(id) {
   return request({
     url: '/csa/contract/audit/' + id,
@@ -43,7 +52,7 @@ export function auditContract(id) {
   })
 }
 
-// 删除会员签约
+// 删除会员合约
 export function delContract(contractId) {
   return request({
     url: '/csa/contract/' + contractId,
diff --git a/ruoyi-ui/src/api/csa/farmer.js b/ruoyi-ui/src/api/csa/farmer.js
index 4cf74a156..dcc2b9017 100644
--- a/ruoyi-ui/src/api/csa/farmer.js
+++ b/ruoyi-ui/src/api/csa/farmer.js
@@ -17,6 +17,14 @@ export function getFarmer(farmerId) {
   })
 }
 
+// 查询带菜地信息的地主详细
+export function getFarmerWithGarden(farmerId) {
+  return request({
+    url: '/csa/farmer/garden/' + farmerId,
+    method: 'get'
+  })
+}
+
 // 新增农场会员
 export function addFarmer(data) {
   return request({
diff --git a/ruoyi-ui/src/api/csa/garden.js b/ruoyi-ui/src/api/csa/garden.js
index 4ba2fe2af..36543b264 100644
--- a/ruoyi-ui/src/api/csa/garden.js
+++ b/ruoyi-ui/src/api/csa/garden.js
@@ -9,6 +9,14 @@ export function listGarden(query) {
   })
 }
 
+// 按代码过滤可绑定的菜地列表
+export function listCanSell(code) {
+  return request({
+    url: '/csa/garden/cansell/' + code,
+    method: 'get'
+  })
+}
+
 // 查询菜地划分详细
 export function getGarden(id) {
   return request({
diff --git a/ruoyi-ui/src/views/csa/contract/enter.vue b/ruoyi-ui/src/views/csa/contract/enter.vue
new file mode 100644
index 000000000..9ef60164c
--- /dev/null
+++ b/ruoyi-ui/src/views/csa/contract/enter.vue
@@ -0,0 +1,362 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="姓名" prop="contractor">
+        <el-input
+          v-model="queryParams.contractor"
+          placeholder="请输入姓名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="加入日期" prop="joinDate">
+        <el-date-picker clearable
+                        v-model="queryParams.joinDate"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="请选择加入日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="到期日期" prop="dueDate">
+        <el-date-picker clearable
+                        v-model="queryParams.dueDate"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="请选择到期日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-lock"
+          size="mini"
+          :disabled="single"
+          @click="handleAudit"
+          v-hasPermi="['csa:contract:edit']"
+        >锁定
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="contractList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="签约人" align="center" prop="contractor"/>
+      <el-table-column label="会员姓名" align="center" prop="farmer.name">
+        <template slot-scope="scope">
+          <el-tag
+            :key="scope.row.contractId"
+            :type="scope.row.status == '1' ? 'success' : 'warning'" effect="plain">
+            {{ scope.row.farmer.name }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="手机号码" align="center" prop="farmer.mobileNumber" width="120" />
+      <el-table-column label="菜地编号" align="center" prop="garden.Name">
+        <template slot-scope="scope">
+          <el-tag
+            :key="scope.row.contractId"
+            :type="scope.row.status == '1' ? 'success' : 'warning'" effect="plain">
+            {{ scope.row.garden ? scope.row.garden.Name : '未认领' }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="合约状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.csa_contract_status" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="激活方式" align="center" prop="activateWay">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.csa_activation_way" :value="scope.row.activateWay"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="凭据编号" align="center" prop="joinCredentialNo"/>
+      <el-table-column label="金币数量" align="right" prop="coins" width="80"/>
+<!--      <el-table-column label="账户金额" align="center" prop="balance"/>-->
+      <el-table-column label="菜品斤数" align="right" prop="weight" width="80"/>
+      <el-table-column label="拱棚年限" align="center" prop="archedYears" width="80"/>
+      <el-table-column label="生效日期" align="center" prop="joinDate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.joinDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="到期日期" align="center" prop="dueDate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.dueDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="天数" align="right" prop="days" width="60" />
+      <el-table-column label="备注" align="center" prop="remark" width="200" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            :disabled="(scope.row.status != '2' && scope.row.status == '1')"
+            size="mini "
+            type="text"
+            icon="el-icon-thumb"
+            @click="handleUpdateFarmer(scope.row)"
+            v-hasPermi="['csa:contract:edit']"
+          >认领菜地
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改会员签约对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="560px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="90px" size="small">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="会员姓名" prop="name">
+              <el-input v-model="form.name" placeholder="请输入会员姓名"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="手机号码" prop="mobileNumber">
+              <el-input v-model="form.mobileNumber" placeholder="请输入手机号码"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="菜地编号" prop="garden.code">
+              <el-select v-model="form.garden.gardenId" placeholder="请选择菜地编号"
+                         :loading="isQuery" loading-text="正在查找可用菜地"
+                         filterable remote :remote-method="remoteQueryGarden">
+                <el-option
+                  v-for="garden in this.canSellGardens"
+                  :key="garden.gardenId"
+                  :label="garden.code"
+                  :value="garden.gardenId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="菜地名称" prop="garden.name">
+              <el-input v-model="form.garden.name" placeholder="请输入菜地名称"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" rows="3" placeholder="请输入备注"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listEnterContract, getContract, delContract, addContract, updateContract, auditContract } from '@/api/csa/contract'
+  import { getFarmerWithGarden  } from '@/api/csa/farmer'
+  import { listCanSell } from '@/api/csa/garden'
+  import Dict from '../../system/dict/index'
+
+  export default {
+    name: 'Enter',
+    components: { Dict },
+    dicts: ['csa_activation_way', 'csa_contract_status'],
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 选中的当前行数据
+        curRowData: null,
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 会员签约表格数据
+        contractList: [],
+        // 弹出层标题
+        title: '',
+        // 是否显示显示资料弹出层
+        open: false,
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          contractor: null,
+          joinDate: null,
+          dueDate: null,
+        },
+        // 是否正在查询菜地列表
+        isQuery: false,
+        // 可售的菜地列表
+        canSellGardens: [],
+        // 表单参数
+        form: {farmer: {}, garden: {}},
+        // 表单校验
+        rules: {
+          name: [
+            { required: true, message: '会员姓名不能为空', trigger: 'blur' }
+          ],
+          mobileNumber: [
+            { required: true, message: '手机号码不能为空', trigger: 'blur' }
+          ],
+          garden: {
+              code: [
+                { required: true, message: '菜地编码不能为空', trigger: 'blur' }
+              ],
+              name: [
+                { required: true, message: '菜地名称不能为空', trigger: 'blur' }
+              ]
+          }
+        }
+      }
+    },
+    created() {
+      this.getList()
+    },
+    methods: {
+      /** 查询会员签约列表 */
+      getList() {
+        this.loading = true
+        listEnterContract(this.queryParams).then(response => {
+          this.contractList = response.rows
+          this.total = response.total
+          this.loading = false
+        })
+      },
+      remoteQueryGarden(code) {
+        this.isQuery = true;
+        listCanSell(code).then(response => {
+          this.canSellGardens = response.rows;
+          this.isQuery = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false
+        this.reset()
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          contractId: null,
+          farmer: {},
+          garden: {},
+          remark: null
+        }
+        this.resetForm('form')
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1
+        this.getList()
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm('queryForm')
+        this.handleQuery()
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.curRowData = (selection.length == 1) ? selection[0] : null;
+        this.ids = selection.map(item => item.contractId)
+        this.single = selection.length !== 1
+        this.multiple = !selection.length
+      },
+      /** 认领菜地按钮操作 */
+      handleUpdateFarmer(row) {
+        this.reset()
+        const farmerId = row.farmerId;
+        getFarmerWithGarden(farmerId).then(response => {
+          this.form = response.data
+          this.open = true
+          this.title = '认领菜地'
+        })
+      },
+      /** 审核按钮操作 */
+      handleAudit(row) {
+        if (this.curRowData.status != '3') {
+          this.$modal.alertWarning("只有待定状态的合约才可以审核!");
+          return;
+        }
+
+        this.$modal.confirm('是否要确定审核此合约', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          // this.curRowData.contractId = 2;
+          auditContract(this.curRowData.contractId).then( response => {
+            this.$modal.alertSuccess(
+              "【" + this.curRowData.contractor +
+              "】的凭据编号为【" + this.curRowData.joinCredentialNo + "】的合约审核成功!")
+            this.getList();
+          }).catch((response) => {
+            // this.$modal.alertError(response);
+            // console.log(response)
+          })
+        })
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs['form'].validate(valid => {
+          if (valid) {
+            if (this.form.contractId != null) {
+              updateContract(this.form).then(response => {
+                this.$modal.msgSuccess('修改成功')
+                this.open = false
+                this.getList()
+              })
+            } else {
+              addContract(this.form).then(response => {
+                this.$modal.msgSuccess('新增成功')
+                this.open = false
+                this.getList()
+              })
+            }
+          }
+        })
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const contractIds = row.contractId || this.ids
+        this.$modal.confirm('是否确认删除【' + row.contractor + '】的编号为【' + row.joinCredentialNo + '】的合约?')
+          .then(function() {
+          return delContract(contractIds)
+        }).then(() => {
+          this.getList()
+          this.$modal.msgSuccess('删除成功')
+        }).catch(() => {
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('csa/contract/export', {
+          ...this.queryParams
+        }, `contract_${new Date().getTime()}.xlsx`)
+      }
+    }
+  }
+</script>
diff --git a/ruoyi-ui/src/views/csa/garden/index.vue b/ruoyi-ui/src/views/csa/garden/index.vue
index 1e3c0b91b..78802dbb9 100644
--- a/ruoyi-ui/src/views/csa/garden/index.vue
+++ b/ruoyi-ui/src/views/csa/garden/index.vue
@@ -285,7 +285,7 @@
       // 表单重置
       reset() {
         this.form = {
-          id: null,
+          gardenId: null,
           zoneId: null,
           code: null,
           m2: null,
@@ -307,7 +307,7 @@
       },
       // 多选框选中数据
       handleSelectionChange(selection) {
-        this.ids = selection.map(item => item.id)
+        this.ids = selection.map(item => item.gardenId)
         this.single = selection.length!==1
         this.multiple = !selection.length
       },
@@ -328,7 +328,7 @@
       /** 修改按钮操作 */
       handleUpdate(row) {
         this.reset();
-        const id = row.id || this.ids
+        const id = row.gardenId || this.ids
         getGarden(id).then(response => {
           this.form = response.data;
           this.open = true;
@@ -339,7 +339,7 @@
       submitForm() {
         this.$refs["form"].validate(valid => {
           if (valid) {
-            if (this.form.id != null) {
+            if (this.form.gardenId != null) {
               updateGarden(this.form).then(response => {
                 this.$modal.msgSuccess("修改成功");
                 this.open = false;
@@ -357,7 +357,7 @@
       },
       /** 删除按钮操作 */
       handleDelete(row) {
-        const ids = row.id || this.ids;
+        const ids = row.gardenId || this.ids;
         this.$modal.confirm('是否确认删除选择的菜地?').then(function() {
           return delGarden(ids);
         }).then(() => {
@@ -373,7 +373,7 @@
       },
       /** 设为竣工 */
       handleComplete(row) {
-        const ids = row.id || this.ids;
+        const ids = row.gardenId || this.ids;
         this.$modal.confirm('竣工后分区、编号和面积将不可更改!是否要将选择的菜地设为竣工状态?').then(function() {
           return updateGardenStatus({isCompleted: 'Y'}, ids);
         }).then(() => {
diff --git a/sql/csa.sql b/sql/csa.sql
index dfb354a7c..0bcc4108c 100644
--- a/sql/csa.sql
+++ b/sql/csa.sql
@@ -11,7 +11,7 @@
  Target Server Version : 50731
  File Encoding         : 65001
 
- Date: 05/04/2022 13:52:21
+ Date: 05/04/2022 22:43:57
 */
 
 SET NAMES utf8mb4;
@@ -152,7 +152,7 @@ CREATE TABLE `csa_crop_file`  (
 -- ----------------------------
 -- Records of csa_crop_file
 -- ----------------------------
-INSERT INTO `csa_crop_file` VALUES (1, '白菜', NULL, '/profile/upload/2022/03/31/白菜_20220331195317A003.jpg', NULL, '清脆无丝多叶少梗的白菜', '0', '0', '', '2022-03-25 22:33:34', 'admin', '2022-03-31 22:07:32', NULL);
+INSERT INTO `csa_crop_file` VALUES (1, '白菜', NULL, '/profile/upload/2022/03/31/白菜_20220331195317A003.jpg', NULL, '清脆无丝多叶少梗的白菜', '0', '0', '', '2022-03-25 22:33:34', 'admin', '2022-04-05 18:54:45', NULL);
 INSERT INTO `csa_crop_file` VALUES (2, '紫茄子', NULL, '/profile/upload/2022/03/31/茄子_20220331195518A004.jpg', NULL, '紫色茄子富含花青素', '0', '0', '', '2022-03-31 19:55:20', '', '2022-03-31 19:55:43', NULL);
 INSERT INTO `csa_crop_file` VALUES (3, '辣椒', NULL, '/profile/upload/2022/03/31/辣椒_20220331195927A005.jpeg', NULL, '辣度适中,皮薄味香', '0', '0', '', '2022-03-31 19:59:29', '', '2022-03-31 20:35:00', NULL);
 INSERT INTO `csa_crop_file` VALUES (4, '菜椒', NULL, '/profile/upload/2022/03/31/菜椒_20220331204817A006.jpg', NULL, '口感香脆,营养丰富', '0', '0', '', '2022-03-31 20:48:19', '', '2022-03-31 21:42:02', NULL);
@@ -261,7 +261,7 @@ CREATE TABLE `csa_farm_zone`  (
 -- Records of csa_farm_zone
 -- ----------------------------
 INSERT INTO `csa_farm_zone` VALUES (1, '0', '一号菜园', '0', '0', '101', '2022-03-05 09:53:32', '101', '2022-03-29 20:53:32', '基础版只支持一个农场分区');
-INSERT INTO `csa_farm_zone` VALUES (2, '1', '高山苹果园', '0', '0', '101', '2022-03-06 11:25:21', '101', '2022-03-06 20:35:40', '后山的共享苹果园');
+INSERT INTO `csa_farm_zone` VALUES (2, '1', '高山苹果园', '0', '0', '101', '2022-03-06 11:25:21', 'admin', '2022-04-05 18:50:42', '后山的共享苹果园');
 
 -- ----------------------------
 -- Table structure for csa_farmer
@@ -271,7 +271,8 @@ CREATE TABLE `csa_farmer`  (
   `farmer_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '会员id',
   `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '会员姓名',
   `gender` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别',
-  `coins` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '金币余额',
+  `mobile_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号码',
+  `coins` bigint(20) NOT NULL DEFAULT 0 COMMENT '金币余额',
   `balance` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '账户余额',
   `weight` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '重量余额',
   `arched_years` int(11) NOT NULL DEFAULT 0 COMMENT '拱棚年限余额',
@@ -286,12 +287,13 @@ CREATE TABLE `csa_farmer`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`farmer_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '私家农场会员' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '私家农场会员' ROW_FORMAT = Dynamic;
 
 -- ----------------------------
 -- Records of csa_farmer
 -- ----------------------------
-INSERT INTO `csa_farmer` VALUES (3, '待绑定', NULL, 25000.0000, 300.0000, 20.0000, 1, '2021-05-01', NULL, 'N', '0', '0', '', '2022-04-05 13:06:27', '', '2022-04-05 13:18:27', NULL);
+INSERT INTO `csa_farmer` VALUES (3, '范诚诚', NULL, '13672226668', 25000, 300.0000, 20.0000, 1, '2021-05-01', NULL, 'N', '0', '0', '', '2022-04-05 13:06:27', '', '2022-04-05 13:18:27', NULL);
+INSERT INTO `csa_farmer` VALUES (5, '程开州', NULL, NULL, 15000, 0.0000, 60.0000, 2, '2021-04-05', NULL, 'N', '0', '0', '', '2022-04-05 18:57:35', '', NULL, NULL);
 
 -- ----------------------------
 -- Table structure for csa_farmer_contract
@@ -300,8 +302,9 @@ DROP TABLE IF EXISTS `csa_farmer_contract`;
 CREATE TABLE `csa_farmer_contract`  (
   `contract_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '合约id',
   `farmer_id` int(11) NULL DEFAULT NULL COMMENT '会员id',
+  `garden_id` int(11) NULL DEFAULT NULL COMMENT '菜地id',
   `contractor` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '签约人',
-  `coins` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '合约金币',
+  `coins` bigint(20) NOT NULL DEFAULT 0 COMMENT '合约金币',
   `balance` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '合约账户金额',
   `weight` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '合约重量',
   `arched_years` int(11) NOT NULL DEFAULT 0 COMMENT '合约拱棚年限',
@@ -318,26 +321,26 @@ CREATE TABLE `csa_farmer_contract`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`contract_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员合约' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 104 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员合约' ROW_FORMAT = Dynamic;
 
 -- ----------------------------
 -- Records of csa_farmer_contract
 -- ----------------------------
-INSERT INTO `csa_farmer_contract` VALUES (101, NULL, '王丽美', 10000.0000, 0.0000, 0.0000, 0, 'QY', 'No.008', '2022-03-01', '2022-05-01', 62, '3', '0', 'admin', '2022-04-01 22:29:42', 'admin', '2022-04-04 14:54:20', NULL);
-INSERT INTO `csa_farmer_contract` VALUES (102, NULL, '程开州', 15000.0000, 0.0000, 60.0000, 2, 'QY', 'No.002', '2021-04-05', '2022-04-04', 365, '3', '0', 'admin', '2022-04-04 00:42:06', 'admin', '2022-04-05 00:49:34', '一个重要的客户介绍,非常喜欢我们的农场,订嘱每次到期前都要提醒约续。');
-INSERT INTO `csa_farmer_contract` VALUES (103, 3, '范诚诚', 5000.0000, 300.0000, 20.0000, 1, 'QY', 'No.003', '2021-05-01', '2022-04-30', 365, '2', '0', 'admin', '2022-04-04 14:30:01', 'admin', '2022-04-05 13:18:27', NULL);
+INSERT INTO `csa_farmer_contract` VALUES (101, NULL, NULL, '王丽美', 10000, 0.0000, 0.0000, 0, 'QY', 'No.008', '2022-03-01', '2022-05-01', 62, '3', '0', 'admin', '2022-04-01 22:29:42', 'admin', '2022-04-04 14:54:20', NULL);
+INSERT INTO `csa_farmer_contract` VALUES (102, 5, NULL, '程开州', 15000, 0.0000, 60.0000, 2, 'QY', 'No.002', '2021-04-05', '2022-04-04', 365, '2', '0', 'admin', '2022-04-04 00:42:06', 'admin', '2022-04-05 18:57:35', '好朋友介绍,非常喜欢我们的农场,订嘱每次到期前都要提醒约续。');
+INSERT INTO `csa_farmer_contract` VALUES (103, 3, NULL, '范诚诚', 5000, 300.0000, 20.0000, 1, 'QY', 'No.003', '2021-05-01', '2022-04-30', 365, '2', '0', 'admin', '2022-04-04 14:30:01', 'admin', '2022-04-05 13:18:27', NULL);
 
 -- ----------------------------
 -- Table structure for csa_garden
 -- ----------------------------
 DROP TABLE IF EXISTS `csa_garden`;
 CREATE TABLE `csa_garden`  (
-  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜地id',
+  `garden_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜地id',
   `zone_id` int(11) NOT NULL COMMENT '农场分区id',
   `code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜地编号',
   `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜地名称',
-  `m2` decimal(19, 4) NOT NULL DEFAULT 0.0000 COMMENT '平方米',
-  `member_id` int(11) NULL DEFAULT NULL COMMENT '会员id',
+  `m2` int(11) NOT NULL DEFAULT 0 COMMENT '平方米',
+  `farmer_id` int(11) NULL DEFAULT NULL COMMENT '会员id',
   `manager_id` int(11) NULL DEFAULT NULL COMMENT '菜地管理员id',
   `worker_id` int(11) NULL DEFAULT NULL COMMENT '工人id',
   `contacter_id` int(11) NULL DEFAULT NULL COMMENT '客服人员id',
@@ -351,25 +354,25 @@ CREATE TABLE `csa_garden`  (
   `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (`id`) USING BTREE,
+  PRIMARY KEY (`garden_id`) USING BTREE,
   UNIQUE INDEX `code`(`code`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜地' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜地' ROW_FORMAT = Dynamic;
 
 -- ----------------------------
 -- Records of csa_garden
 -- ----------------------------
-INSERT INTO `csa_garden` VALUES (1, 1, '8001', '百草园', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 19:31:52', '101', '2022-03-29 15:35:54', NULL);
-INSERT INTO `csa_garden` VALUES (2, 1, '8002', '香草居', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 19:33:34', '101', '2022-03-30 22:10:58', NULL);
-INSERT INTO `csa_garden` VALUES (3, 1, '8003', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 13:15:43', '101', '2022-03-30 22:10:58', NULL);
-INSERT INTO `csa_garden` VALUES (4, 1, '8004', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-07 13:20:38', '101', '2022-03-29 21:04:29', '');
-INSERT INTO `csa_garden` VALUES (5, 1, '8005', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-29 21:05:48', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (6, 1, '8006', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-29 22:07:11', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (7, 1, '8007', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-29 22:07:56', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (8, 1, '8008', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-29 22:13:41', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (9, 1, '8009', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-29 22:15:24', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (10, 1, '8010', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-30 22:06:38', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (11, 1, '8011', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-30 22:06:38', '', NULL, NULL);
-INSERT INTO `csa_garden` VALUES (12, 1, '8012', '', 30.0000, NULL, NULL, NULL, NULL, 'N', 'N', 'N', '0', '0', '101', '2022-03-30 22:06:38', '', NULL, NULL);
+INSERT INTO `csa_garden` VALUES (1, 1, '8001', '百草园', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 19:31:52', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (2, 1, '8002', '香草居', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 19:33:34', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (3, 1, '8003', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 13:15:43', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (4, 1, '8004', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-07 13:20:38', 'admin', '2022-04-05 22:42:09', '');
+INSERT INTO `csa_garden` VALUES (5, 1, '8005', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-29 21:05:48', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (6, 1, '8006', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-29 22:07:11', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (7, 1, '8007', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-29 22:07:56', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (8, 1, '8008', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-29 22:13:41', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (9, 1, '8009', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-29 22:15:24', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (10, 1, '8010', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-30 22:06:38', 'admin', '2022-04-05 22:42:09', NULL);
+INSERT INTO `csa_garden` VALUES (11, 1, '8011', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-30 22:06:38', 'admin', '2022-04-05 22:42:15', NULL);
+INSERT INTO `csa_garden` VALUES (12, 1, '8012', '', 30, NULL, NULL, NULL, NULL, 'N', 'N', 'Y', '0', '0', '101', '2022-03-30 22:06:38', 'admin', '2022-04-05 22:42:15', NULL);
 
 -- ----------------------------
 -- Table structure for csa_garden_log
@@ -1229,7 +1232,7 @@ INSERT INTO `sys_dict_data` VALUES (102, 30, '禽舍', '2', 'csa_zone_type', NUL
 INSERT INTO `sys_dict_data` VALUES (103, 10, '签约入驻', 'QY', 'csa_activation_way', NULL, 'default', 'N', '0', 'admin', '2022-04-03 22:22:02', 'admin', '2022-04-03 22:22:41', NULL);
 INSERT INTO `sys_dict_data` VALUES (104, 20, '卡密激活', 'KM', 'csa_activation_way', NULL, 'default', 'N', '1', 'admin', '2022-04-03 22:22:27', 'admin', '2022-04-03 22:22:38', NULL);
 INSERT INTO `sys_dict_data` VALUES (105, 0, '正常', '0', 'csa_contract_status', NULL, 'success', 'N', '0', 'admin', '2022-04-04 14:34:02', 'admin', '2022-04-05 12:49:25', NULL);
-INSERT INTO `sys_dict_data` VALUES (106, 10, '认地', '1', 'csa_contract_status', NULL, 'primary', 'N', '0', 'admin', '2022-04-04 14:34:29', 'admin', '2022-04-05 12:49:31', NULL);
+INSERT INTO `sys_dict_data` VALUES (106, 10, '认领', '1', 'csa_contract_status', NULL, 'primary', 'N', '0', 'admin', '2022-04-04 14:34:29', 'admin', '2022-04-05 16:34:00', NULL);
 INSERT INTO `sys_dict_data` VALUES (107, 20, '已审', '2', 'csa_contract_status', NULL, 'warning', 'N', '0', 'admin', '2022-04-04 14:34:41', 'admin', '2022-04-05 12:49:36', NULL);
 INSERT INTO `sys_dict_data` VALUES (108, 30, '待审', '3', 'csa_contract_status', NULL, 'danger', 'N', '0', 'admin', '2022-04-05 12:48:32', 'admin', '2022-04-05 13:34:19', NULL);
 INSERT INTO `sys_dict_data` VALUES (109, 40, '录入', '4', 'csa_contract_status', NULL, 'default', 'N', '0', 'admin', '2022-04-05 12:51:52', 'admin', '2022-04-05 12:52:16', NULL);
@@ -1338,7 +1341,7 @@ CREATE TABLE `sys_logininfor`  (
   `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息',
   `login_time` datetime NULL DEFAULT NULL COMMENT '访问时间',
   PRIMARY KEY (`info_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 212 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = DYNAMIC;
+) ENGINE = InnoDB AUTO_INCREMENT = 214 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_logininfor
@@ -1455,6 +1458,8 @@ INSERT INTO `sys_logininfor` VALUES (208, 'admin', '127.0.0.1', '内网IP', 'Chr
 INSERT INTO `sys_logininfor` VALUES (209, 'admin', '127.0.0.1', '内网IP', 'Chrome 9', 'Windows 10', '0', '登录成功', '2022-04-04 21:27:32');
 INSERT INTO `sys_logininfor` VALUES (210, 'admin', '127.0.0.1', '内网IP', 'Chrome 9', 'Windows 10', '0', '登录成功', '2022-04-04 23:42:50');
 INSERT INTO `sys_logininfor` VALUES (211, 'admin', '127.0.0.1', '内网IP', 'Chrome 9', 'Windows 10', '0', '登录成功', '2022-04-05 12:42:38');
+INSERT INTO `sys_logininfor` VALUES (212, 'admin', '127.0.0.1', '内网IP', 'Chrome 9', 'Windows 10', '0', '登录成功', '2022-04-05 18:12:36');
+INSERT INTO `sys_logininfor` VALUES (213, 'admin', '127.0.0.1', '内网IP', 'Chrome 9', 'Windows 10', '0', '登录成功', '2022-04-05 21:16:51');
 
 -- ----------------------------
 -- Table structure for sys_menu
@@ -1481,7 +1486,7 @@ CREATE TABLE `sys_menu`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
   PRIMARY KEY (`menu_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2096 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
+) ENGINE = InnoDB AUTO_INCREMENT = 2098 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_menu
@@ -1585,12 +1590,12 @@ INSERT INTO `sys_menu` VALUES (2016, '作物档案查询', 2015, 10, '#', '', NU
 INSERT INTO `sys_menu` VALUES (2017, '作物档案更新', 2015, 20, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:cropfile:update', '#', 'admin', '2022-03-25 22:25:59', 'admin', '2022-03-30 22:32:35', '');
 INSERT INTO `sys_menu` VALUES (2020, '作物档案导出', 2015, 30, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:cropfile:export', '#', 'admin', '2022-03-25 22:25:59', 'admin', '2022-03-30 22:31:55', '');
 INSERT INTO `sys_menu` VALUES (2021, '会员服务', 0, 200, 'member', NULL, NULL, 1, 0, 'M', '0', '0', '', 'peoples', 'admin', '2022-03-25 22:43:43', 'admin', '2022-04-01 22:04:33', '');
-INSERT INTO `sys_menu` VALUES (2022, '会员入驻', 2021, 1, 'farmer', 'csa/farmer/index', NULL, 1, 0, 'C', '0', '0', 'csa:farmer:list', 'people', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 13:49:13', '私家农场会员菜单');
-INSERT INTO `sys_menu` VALUES (2023, '会员入驻查询', 2022, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:farmer:query', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 13:49:20', '');
-INSERT INTO `sys_menu` VALUES (2024, '会员入驻新增', 2022, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:farmer:add', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 13:49:27', '');
-INSERT INTO `sys_menu` VALUES (2025, '会员入驻修改', 2022, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:farmer:edit', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 13:49:35', '');
-INSERT INTO `sys_menu` VALUES (2026, '会员入驻删除', 2022, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:farmer:remove', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 13:49:43', '');
-INSERT INTO `sys_menu` VALUES (2027, '会员入驻导出', 2022, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:farmer:export', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 13:49:51', '');
+INSERT INTO `sys_menu` VALUES (2022, '会员入驻', 2021, 20, 'enter', 'csa/contract/enter', NULL, 1, 0, 'C', '0', '0', 'csa:contract:list', 'guide', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 15:59:11', '私家农场会员菜单');
+INSERT INTO `sys_menu` VALUES (2023, '会员入驻查询', 2022, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:query', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 14:05:42', '');
+INSERT INTO `sys_menu` VALUES (2024, '会员入驻新增', 2022, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:add', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 14:05:52', '');
+INSERT INTO `sys_menu` VALUES (2025, '会员入驻修改', 2022, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:edit', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 14:06:01', '');
+INSERT INTO `sys_menu` VALUES (2026, '会员入驻删除', 2022, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:remove', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 14:06:11', '');
+INSERT INTO `sys_menu` VALUES (2027, '会员入驻导出', 2022, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:export', '#', 'admin', '2022-03-26 14:48:06', 'admin', '2022-04-05 14:06:22', '');
 INSERT INTO `sys_menu` VALUES (2028, '卡务管理', 0, 400, 'card', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'row', 'admin', '2022-03-26 16:14:39', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (2029, '会员卡', 2028, 1, 'card', 'csa/card/index', NULL, 1, 0, 'C', '0', '0', 'csa:card:list', '#', 'admin', '2022-03-26 16:24:15', '', NULL, '会员卡菜单');
 INSERT INTO `sys_menu` VALUES (2030, '会员卡查询', 2029, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:card:query', '#', 'admin', '2022-03-26 16:24:15', '', NULL, '');
@@ -1646,19 +1651,15 @@ INSERT INTO `sys_menu` VALUES (2079, '拱棚使用记录新增', 2077, 2, '#', '
 INSERT INTO `sys_menu` VALUES (2080, '拱棚使用记录修改', 2077, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:archedrecord:edit', '#', 'admin', '2022-03-27 18:46:37', 'admin', '2022-03-27 19:57:57', '');
 INSERT INTO `sys_menu` VALUES (2081, '拱棚使用记录删除', 2077, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:archedrecord:remove', '#', 'admin', '2022-03-27 18:46:37', 'admin', '2022-03-27 19:58:07', '');
 INSERT INTO `sys_menu` VALUES (2082, '拱棚使用记录导出', 2077, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:archedrecord:export', '#', 'admin', '2022-03-27 18:46:37', 'admin', '2022-03-27 19:58:16', '');
-INSERT INTO `sys_menu` VALUES (2083, '业务字典', 1, 60, 'csadict', 'csa/dict/index', NULL, 1, 0, 'C', '0', '0', 'system:dict:list', 'excel', 'admin', '2022-03-27 22:02:03', 'admin', '2022-03-27 22:04:19', '');
-INSERT INTO `sys_menu` VALUES (2084, '字典查询', 2083, 10, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', '2022-03-27 22:05:26', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (2085, '字典新增', 2083, 20, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', '2022-03-27 22:05:52', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (2086, '字典修改', 2083, 30, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', '2022-03-27 22:06:12', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (2087, '字典删除', 2083, 40, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', '2022-03-27 22:06:33', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (2088, '字典导出', 2083, 50, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', '2022-03-27 22:06:59', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (2089, '合约登记', 2021, 1, 'contract', 'csa/contract/index', NULL, 1, 0, 'C', '0', '0', 'csa:contract:list', 'edit', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 13:42:21', '会员签约菜单');
+INSERT INTO `sys_menu` VALUES (2089, '合约登记', 2021, 10, 'contract', 'csa/contract/index', NULL, 1, 0, 'C', '0', '0', 'csa:contract:list', 'edit', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 14:05:23', '会员签约菜单');
 INSERT INTO `sys_menu` VALUES (2090, '合约登记查询', 2089, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:query', '#', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 13:42:30', '');
 INSERT INTO `sys_menu` VALUES (2091, '合约登记新增', 2089, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:add', '#', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 13:42:47', '');
 INSERT INTO `sys_menu` VALUES (2092, '合约登记修改', 2089, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:edit', '#', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 13:42:54', '');
 INSERT INTO `sys_menu` VALUES (2093, '合约登记删除', 2089, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:remove', '#', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 13:43:02', '');
 INSERT INTO `sys_menu` VALUES (2094, '合约登记导出', 2089, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'csa:contract:export', '#', 'admin', '2022-04-01 21:53:16', 'admin', '2022-04-05 13:43:10', '');
 INSERT INTO `sys_menu` VALUES (2095, '现场管理', 0, 300, 'park', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'build', 'admin', '2022-04-01 22:00:53', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2096, '会员管理', 2021, 30, 'farmer', 'csa/farmer/index', NULL, 1, 0, 'C', '0', '0', 'csa:farmer:list', 'people', 'admin', '2022-04-05 16:00:18', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2097, '会员查询', 2096, 10, '', NULL, NULL, 1, 0, 'F', '0', '0', 'csa:farmer:list', '#', 'admin', '2022-04-05 16:00:51', '', NULL, '');
 
 -- ----------------------------
 -- Table structure for sys_notice
@@ -1706,7 +1707,7 @@ CREATE TABLE `sys_oper_log`  (
   `error_msg` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '错误消息',
   `oper_time` datetime NULL DEFAULT NULL COMMENT '操作时间',
   PRIMARY KEY (`oper_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 688 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = DYNAMIC;
+) ENGINE = InnoDB AUTO_INCREMENT = 729 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_oper_log
@@ -2299,6 +2300,47 @@ INSERT INTO `sys_oper_log` VALUES (684, '菜单管理', 2, 'com.ruoyi.web.contro
 INSERT INTO `sys_oper_log` VALUES (685, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":3,\"menuName\":\"会员入驻修改\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2025,\"menuType\":\"F\",\"perms\":\"csa:farmer:edit\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 13:49:36');
 INSERT INTO `sys_oper_log` VALUES (686, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":4,\"menuName\":\"会员入驻删除\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2026,\"menuType\":\"F\",\"perms\":\"csa:farmer:remove\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 13:49:43');
 INSERT INTO `sys_oper_log` VALUES (687, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":5,\"menuName\":\"会员入驻导出\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2027,\"menuType\":\"F\",\"perms\":\"csa:farmer:export\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 13:49:52');
+INSERT INTO `sys_oper_log` VALUES (688, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"people\",\"orderNum\":20,\"menuName\":\"会员入驻\",\"params\":{},\"parentId\":2021,\"isCache\":\"0\",\"path\":\"enter\",\"component\":\"csa/contract/enter\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2022,\"menuType\":\"C\",\"perms\":\"csa:contract:list\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:05:12');
+INSERT INTO `sys_oper_log` VALUES (689, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"edit\",\"orderNum\":10,\"menuName\":\"合约登记\",\"params\":{},\"parentId\":2021,\"isCache\":\"0\",\"path\":\"contract\",\"component\":\"csa/contract/index\",\"children\":[],\"createTime\":1648821196000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2089,\"menuType\":\"C\",\"perms\":\"csa:contract:list\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:05:24');
+INSERT INTO `sys_oper_log` VALUES (690, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":1,\"menuName\":\"会员入驻查询\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2023,\"menuType\":\"F\",\"perms\":\"csa:contract:query\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:05:42');
+INSERT INTO `sys_oper_log` VALUES (691, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":2,\"menuName\":\"会员入驻新增\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2024,\"menuType\":\"F\",\"perms\":\"csa:contract:add\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:05:52');
+INSERT INTO `sys_oper_log` VALUES (692, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":3,\"menuName\":\"会员入驻修改\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2025,\"menuType\":\"F\",\"perms\":\"csa:contract:edit\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:06:01');
+INSERT INTO `sys_oper_log` VALUES (693, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":4,\"menuName\":\"会员入驻删除\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2026,\"menuType\":\"F\",\"perms\":\"csa:contract:remove\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:06:11');
+INSERT INTO `sys_oper_log` VALUES (694, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"#\",\"orderNum\":5,\"menuName\":\"会员入驻导出\",\"params\":{},\"parentId\":2022,\"isCache\":\"0\",\"path\":\"#\",\"component\":\"\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2027,\"menuType\":\"F\",\"perms\":\"csa:contract:export\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 14:06:22');
+INSERT INTO `sys_oper_log` VALUES (695, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"excel\",\"orderNum\":60,\"menuName\":\"业务字典\",\"params\":{},\"parentId\":1,\"isCache\":\"0\",\"path\":\"csadict\",\"component\":\"csa/dict/index\",\"children\":[],\"createTime\":1648389723000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2083,\"menuType\":\"C\",\"perms\":\"system:dict:list\",\"status\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:55:06');
+INSERT INTO `sys_oper_log` VALUES (696, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2083', '127.0.0.1', '内网IP', '{menuId=2083}', '{\"msg\":\"存在子菜单,不允许删除\",\"code\":500}', 0, NULL, '2022-04-05 15:55:34');
+INSERT INTO `sys_oper_log` VALUES (697, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2088', '127.0.0.1', '内网IP', '{menuId=2088}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:55:44');
+INSERT INTO `sys_oper_log` VALUES (698, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2087', '127.0.0.1', '内网IP', '{menuId=2087}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:55:48');
+INSERT INTO `sys_oper_log` VALUES (699, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2086', '127.0.0.1', '内网IP', '{menuId=2086}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:55:50');
+INSERT INTO `sys_oper_log` VALUES (700, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2085', '127.0.0.1', '内网IP', '{menuId=2085}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:55:54');
+INSERT INTO `sys_oper_log` VALUES (701, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2084', '127.0.0.1', '内网IP', '{menuId=2084}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:55:57');
+INSERT INTO `sys_oper_log` VALUES (702, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/2083', '127.0.0.1', '内网IP', '{menuId=2083}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:56:00');
+INSERT INTO `sys_oper_log` VALUES (703, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"guide\",\"orderNum\":20,\"menuName\":\"会员入驻\",\"params\":{},\"parentId\":2021,\"isCache\":\"0\",\"path\":\"enter\",\"component\":\"csa/contract/enter\",\"children\":[],\"createTime\":1648277286000,\"updateBy\":\"admin\",\"isFrame\":\"1\",\"menuId\":2022,\"menuType\":\"C\",\"perms\":\"csa:contract:list\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 15:59:11');
+INSERT INTO `sys_oper_log` VALUES (704, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"icon\":\"people\",\"orderNum\":30,\"menuName\":\"会员管理\",\"params\":{},\"parentId\":2021,\"isCache\":\"0\",\"path\":\"farmer\",\"component\":\"csa/farmer/index\",\"createBy\":\"admin\",\"children\":[],\"isFrame\":\"1\",\"menuType\":\"C\",\"perms\":\"csa:farmer:list\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 16:00:18');
+INSERT INTO `sys_oper_log` VALUES (705, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"visible\":\"0\",\"orderNum\":10,\"menuName\":\"会员查询\",\"params\":{},\"parentId\":2096,\"isCache\":\"0\",\"createBy\":\"admin\",\"children\":[],\"isFrame\":\"1\",\"menuType\":\"F\",\"perms\":\"csa:farmer:list\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 16:00:51');
+INSERT INTO `sys_oper_log` VALUES (706, '字典数据', 2, 'com.ruoyi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', NULL, '/system/dict/data', '127.0.0.1', '内网IP', '{\"dictValue\":\"1\",\"listClass\":\"primary\",\"dictSort\":10,\"params\":{},\"dictType\":\"csa_contract_status\",\"dictLabel\":\"认领\",\"createBy\":\"admin\",\"default\":false,\"isDefault\":\"N\",\"createTime\":1649054069000,\"dictCode\":106,\"updateBy\":\"admin\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 16:34:00');
+INSERT INTO `sys_oper_log` VALUES (707, '农场分区', 2, 'com.jlt.csa.controller.FarmZoneController.edit()', 'PUT', 1, 'admin', NULL, '/csa/farmzone', '127.0.0.1', '内网IP', '{\"createBy\":\"101\",\"createTime\":1646537121000,\"updateBy\":\"admin\",\"name\":\"高山苹果园\",\"remark\":\"后山的共享苹果园\",\"updateTime\":1649155841907,\"id\":2,\"delFlag\":\"0\",\"params\":{},\"type\":\"1\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:50:42');
+INSERT INTO `sys_oper_log` VALUES (708, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden', '127.0.0.1', '内网IP', '{\"code\":\"8004\",\"m2\":30,\"remark\":\"\",\"updateTime\":1649155848694,\"delFlag\":\"0\",\"params\":{},\"isFarming\":\"N\",\"createBy\":\"101\",\"createTime\":1646630438000,\"updateBy\":\"admin\",\"isSelled\":\"N\",\"name\":\"\",\"zoneId\":1,\"gardenId\":4,\"isCompleted\":\"N\",\"status\":\"0\"}', NULL, 1, 'nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named \'garden_id\' in \'class com.jlt.csa.domain.Garden\'', '2022-04-05 18:50:48');
+INSERT INTO `sys_oper_log` VALUES (709, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden', '127.0.0.1', '内网IP', '{\"code\":\"8004\",\"m2\":30,\"remark\":\"\",\"updateTime\":1649155888824,\"delFlag\":\"0\",\"params\":{},\"isFarming\":\"N\",\"createBy\":\"101\",\"createTime\":1646630438000,\"updateBy\":\"admin\",\"isSelled\":\"N\",\"name\":\"\",\"zoneId\":1,\"gardenId\":4,\"isCompleted\":\"N\",\"status\":\"0\"}', NULL, 1, 'nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named \'garden_id\' in \'class com.jlt.csa.domain.Garden\'', '2022-04-05 18:51:28');
+INSERT INTO `sys_oper_log` VALUES (710, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden', '127.0.0.1', '内网IP', '{\"code\":\"8004\",\"m2\":30,\"remark\":\"\",\"updateTime\":1649156063928,\"delFlag\":\"0\",\"params\":{},\"isFarming\":\"N\",\"createBy\":\"101\",\"createTime\":1646630438000,\"updateBy\":\"admin\",\"isSelled\":\"N\",\"name\":\"\",\"zoneId\":1,\"gardenId\":4,\"isCompleted\":\"N\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:54:24');
+INSERT INTO `sys_oper_log` VALUES (711, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden', '127.0.0.1', '内网IP', '{\"code\":\"8004\",\"m2\":60,\"remark\":\"\",\"updateTime\":1649156071615,\"delFlag\":\"0\",\"params\":{},\"isFarming\":\"N\",\"createBy\":\"101\",\"createTime\":1646630438000,\"updateBy\":\"admin\",\"isSelled\":\"N\",\"name\":\"\",\"zoneId\":1,\"gardenId\":4,\"isCompleted\":\"N\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:54:31');
+INSERT INTO `sys_oper_log` VALUES (712, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden', '127.0.0.1', '内网IP', '{\"code\":\"8004\",\"m2\":30,\"remark\":\"\",\"updateTime\":1649156079217,\"delFlag\":\"0\",\"params\":{},\"isFarming\":\"N\",\"createBy\":\"101\",\"createTime\":1646630438000,\"updateBy\":\"admin\",\"isSelled\":\"N\",\"name\":\"\",\"zoneId\":1,\"gardenId\":4,\"isCompleted\":\"N\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:54:39');
+INSERT INTO `sys_oper_log` VALUES (713, '作物档案', 2, 'com.jlt.csa.controller.CropFileController.edit()', 'PUT', 1, 'admin', NULL, '/csa/cropfile', '127.0.0.1', '内网IP', '{\"cropId\":1,\"cropName\":\"白菜\",\"description\":\"清脆无丝多叶少梗的白菜\",\"updateTime\":1649156085103,\"delFlag\":\"0\",\"params\":{},\"picture\":\"/profile/upload/2022/03/31/白菜_20220331195317A003.jpg\",\"createBy\":\"\",\"createTime\":1648218814000,\"updateBy\":\"admin\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:54:45');
+INSERT INTO `sys_oper_log` VALUES (714, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.edit()', 'PUT', 1, 'admin', NULL, '/csa/contract', '127.0.0.1', '内网IP', '{\"contractor\":\"程开州\",\"joinCredentialNo\":\"No.002\",\"coins\":15000,\"dueDate\":1649001600000,\"weight\":60,\"remark\":\"一个重要的客户介绍,非常喜欢我们的农场,订嘱每次到期前都要提醒约续。\",\"updateTime\":1649156107072,\"delFlag\":\"0\",\"params\":{},\"createBy\":\"admin\",\"joinDate\":1617552000000,\"balance\":0,\"createTime\":1649004126000,\"updateBy\":\"admin\",\"contractId\":102,\"days\":365,\"archedYears\":2,\"activateWay\":\"QY\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:55:07');
+INSERT INTO `sys_oper_log` VALUES (715, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.audit()', 'PUT', 1, 'admin', NULL, '/csa/contract/audit/102', '127.0.0.1', '内网IP', '102', NULL, 1, '该合约不符合审核条件!', '2022-04-05 18:55:31');
+INSERT INTO `sys_oper_log` VALUES (716, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.edit()', 'PUT', 1, 'admin', NULL, '/csa/contract', '127.0.0.1', '内网IP', '{\"contractor\":\"程开州\",\"joinCredentialNo\":\"No.002\",\"coins\":15000,\"dueDate\":1649001600000,\"weight\":60,\"remark\":\"一个重要的客户介绍,非常喜欢我们的农场,订嘱每次到期前都要提醒约续。\",\"updateTime\":1649156138333,\"delFlag\":\"0\",\"params\":{},\"createBy\":\"admin\",\"joinDate\":1617552000000,\"balance\":0,\"createTime\":1649004126000,\"updateBy\":\"admin\",\"contractId\":102,\"days\":365,\"archedYears\":2,\"activateWay\":\"QY\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:55:38');
+INSERT INTO `sys_oper_log` VALUES (717, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.audit()', 'PUT', 1, 'admin', NULL, '/csa/contract/audit/102', '127.0.0.1', '内网IP', '102', NULL, 1, '该合约不符合审核条件!', '2022-04-05 18:55:43');
+INSERT INTO `sys_oper_log` VALUES (718, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.audit()', 'PUT', 1, 'admin', NULL, '/csa/contract/audit/102', '127.0.0.1', '内网IP', '102', NULL, 1, '该合约不符合审核条件!', '2022-04-05 18:55:50');
+INSERT INTO `sys_oper_log` VALUES (719, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.audit()', 'PUT', 1, 'admin', NULL, '/csa/contract/audit/102', '127.0.0.1', '内网IP', '102', NULL, 1, '该合约不符合审核条件!', '2022-04-05 18:56:14');
+INSERT INTO `sys_oper_log` VALUES (720, '会员签约', 2, 'com.jlt.csa.controller.FarmerContractController.audit()', 'PUT', 1, 'admin', NULL, '/csa/contract/audit/102', '127.0.0.1', '内网IP', '102', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 18:57:35');
+INSERT INTO `sys_oper_log` VALUES (721, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.updateStatus()', 'PUT', 1, 'admin', NULL, '/csa/garden/,,,,,,,,,', '127.0.0.1', '内网IP', '{\"updateTime\":1649169154793,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"} [null,null,null,null,null,null,null,null,null,null]', '{\"msg\":\"操作失败\",\"code\":500}', 0, NULL, '2022-04-05 22:32:34');
+INSERT INTO `sys_oper_log` VALUES (722, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.updateStatus()', 'PUT', 1, 'admin', NULL, '/csa/garden/,', '127.0.0.1', '内网IP', '{\"updateTime\":1649169163445,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"} [null,null]', '{\"msg\":\"操作失败\",\"code\":500}', 0, NULL, '2022-04-05 22:32:43');
+INSERT INTO `sys_oper_log` VALUES (723, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden/', '127.0.0.1', '内网IP', '{\"updateTime\":1649169168114,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"}', '{\"msg\":\"操作失败\",\"code\":500}', 0, NULL, '2022-04-05 22:32:48');
+INSERT INTO `sys_oper_log` VALUES (724, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden/', '127.0.0.1', '内网IP', '{\"updateTime\":1649169196967,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"}', '{\"msg\":\"操作失败\",\"code\":500}', 0, NULL, '2022-04-05 22:33:16');
+INSERT INTO `sys_oper_log` VALUES (725, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.edit()', 'PUT', 1, 'admin', NULL, '/csa/garden/', '127.0.0.1', '内网IP', '{\"updateTime\":1649169356052,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"}', '{\"msg\":\"操作失败\",\"code\":500}', 0, NULL, '2022-04-05 22:35:56');
+INSERT INTO `sys_oper_log` VALUES (726, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.updateStatus()', 'PUT', 1, 'admin', NULL, '/csa/garden/4', '127.0.0.1', '内网IP', '{\"updateTime\":1649169724820,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"} [4]', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 22:42:05');
+INSERT INTO `sys_oper_log` VALUES (727, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.updateStatus()', 'PUT', 1, 'admin', NULL, '/csa/garden/1,2,3,4,5,6,7,8,9,10', '127.0.0.1', '内网IP', '{\"updateTime\":1649169729414,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"} [1,2,3,4,5,6,7,8,9,10]', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 22:42:09');
+INSERT INTO `sys_oper_log` VALUES (728, '菜地划分', 2, 'com.jlt.csa.controller.GardenController.updateStatus()', 'PUT', 1, 'admin', NULL, '/csa/garden/11,12', '127.0.0.1', '内网IP', '{\"updateTime\":1649169735413,\"params\":{},\"updateBy\":\"admin\",\"isCompleted\":\"Y\"} [11,12]', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2022-04-05 22:42:15');
 
 -- ----------------------------
 -- Table structure for sys_post
@@ -2509,7 +2551,7 @@ CREATE TABLE `sys_user`  (
 -- ----------------------------
 -- Records of sys_user
 -- ----------------------------
-INSERT INTO `sys_user` VALUES (1, 103, 'admin', '超级管理员', '00', '', '', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2022-04-05 12:42:38', 'admin', '2022-03-20 21:45:25', '', '2022-04-05 12:42:37', '管理员');
+INSERT INTO `sys_user` VALUES (1, 103, 'admin', '超级管理员', '00', '', '', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2022-04-05 21:16:51', 'admin', '2022-03-20 21:45:25', '', '2022-04-05 21:16:51', '管理员');
 INSERT INTO `sys_user` VALUES (2, 101, 'boss', '农场管理员', '00', '', '', '2', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2022-03-20 21:45:25', 'admin', '2022-03-20 21:45:25', 'admin', '2022-03-29 17:51:59', '');
 INSERT INTO `sys_user` VALUES (100, 104, '101', '场长', '00', '88@66.com', '18888888888', '0', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2022-03-30 22:05:56', 'admin', '2022-03-29 18:18:00', 'admin', '2022-03-30 22:05:56', NULL);