diff --git a/pom.xml b/pom.xml
index 27d94a0..3c60883 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,12 @@
             <artifactId>mybatis-spring-boot-starter</artifactId>
             <version>2.0.0</version>
         </dependency>
+        <!-- redis -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+            <version>2.7.12</version>
+        </dependency>
 <!--        分页插件-->
         <dependency>
             <groupId>com.github.pagehelper</groupId>
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/config/redis/RedisConfig.java b/src/main/java/com/sztzjy/forex/trading_trading/config/redis/RedisConfig.java
new file mode 100644
index 0000000..b34e139
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/config/redis/RedisConfig.java
@@ -0,0 +1,41 @@
+package com.sztzjy.forex.trading_trading.config.redis;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+    @Bean
+    public RedisTemplate<String, Object> template(RedisConnectionFactory factory) {
+        // 创建RedisTemplate<String, Object>对象
+        RedisTemplate<String, Object> template = new RedisTemplate<>();
+        // 配置连接工厂
+        template.setConnectionFactory(factory);
+        // 定义Jackson2JsonRedisSerializer序列化对象
+        Jackson2JsonRedisSerializer<Object> jacksonSeial = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会报异常
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jacksonSeial.setObjectMapper(om);
+        StringRedisSerializer stringSerial = new StringRedisSerializer();
+        // redis key 序列化方式使用stringSerial
+        template.setKeySerializer(stringSerial);
+        // redis value 序列化方式使用jackson
+        template.setValueSerializer(jacksonSeial);
+        // redis hash key 序列化方式使用stringSerial
+        template.setHashKeySerializer(stringSerial);
+        // redis hash value 序列化方式使用jackson
+        template.setHashValueSerializer(jacksonSeial);
+        template.afterPropertiesSet();
+        return template;
+    }
+}
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/controller/PendingOrderController.java b/src/main/java/com/sztzjy/forex/trading_trading/controller/PendingOrderController.java
new file mode 100644
index 0000000..e2c670b
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/controller/PendingOrderController.java
@@ -0,0 +1,86 @@
+package com.sztzjy.forex.trading_trading.controller;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.sztzjy.forex.trading_trading.annotation.AnonymousAccess;
+import com.sztzjy.forex.trading_trading.entity.PendingOrder;
+import com.sztzjy.forex.trading_trading.service.PendingOrderService;
+import com.sztzjy.forex.trading_trading.util.RedisUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+@RestController
+@RequestMapping("api/pendingOrder")
+public class PendingOrderController {
+    @Autowired
+    PendingOrderService pendingOrderService;
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    //查询挂单数据
+    @AnonymousAccess
+    @PostMapping("getPendingOrder")
+    public List<PendingOrder> getPendingOrder(@RequestBody JSONObject jsonObject){
+        String trainingId = String.valueOf(jsonObject.get("trainingId"));
+        String memberId = String.valueOf(jsonObject.get("memberId"));
+        PendingOrder pendingOrder=new PendingOrder();
+        pendingOrder.setStatus(0);
+        pendingOrder.setTrainingId(trainingId);
+        pendingOrder.setMemberId(memberId);
+        List<PendingOrder> pendingOrders = pendingOrderService.selectByExample(pendingOrder);
+        return pendingOrders;
+    }
+
+    //撤单 撤单成功后 根据pendingOrderId删除redis键
+    public JSONObject cancelOrder(@RequestBody String pendingOrderId){
+        PendingOrder pendingOrder=new PendingOrder();
+        pendingOrder.setPendingOrderId(pendingOrderId);
+        pendingOrder.setStatus(0);
+        pendingOrderService.cancelOrder(pendingOrder);
+        redisUtil.del("pengingOrder_"+pendingOrder.getPendingOrderId());
+        return JSONObject.parseObject("撤单成功");
+    }
+
+    //挂单自动撤单(到期自动撤单)  扫描redis pengingOrder_id  进行自动撤单
+    public void pendingOrderQuest(){
+        Set<String> pendingOrderSet = redisUtil.keys("pengingOrder_" + "*"); //获取所有挂单键
+        for(String key : pendingOrderSet){
+
+//            System.out.print(value+" ");
+        }
+    }
+
+    //返回挂单对象
+    public PendingOrder returnPendingOrder(String memberId, String trainingId, String tradingCode, String buySellType, Double transactionVolume, Double priceCommission, Double stopLoss, Double stopWin,Date validityTime) {
+        Date now = new Date();
+        String commissionNumber = DateUtil.format(now, "yyyyMMddHHmmss") + System.currentTimeMillis();
+        PendingOrder pendingOrder=new PendingOrder();
+        pendingOrder.setMemberId(memberId);
+        pendingOrder.setTrainingId(trainingId);
+        pendingOrder.setCommissionTime(now);
+        pendingOrder.setTradingCode(tradingCode);
+        pendingOrder.setCommissionNumber(commissionNumber);
+        pendingOrder.setBuySellType(buySellType);
+        pendingOrder.setVolumeTransaction(transactionVolume);
+        pendingOrder.setPriceCommission(priceCommission);
+        pendingOrder.setStopLoss(stopLoss);
+        pendingOrder.setStopWin(stopWin);
+        pendingOrder.setValidityTime(validityTime);
+        pendingOrder.setStatus(0);
+        return pendingOrder;
+    }
+
+    //保存挂单  挂单保存后 将挂单ID和有效期存入redis
+    public void insertPendingOrder(PendingOrder pendingOrder){
+        pendingOrderService.insert(pendingOrder);
+        redisUtil.set("pengingOrder_"+pendingOrder.getPendingOrderId(),pendingOrder.getValidityTime());
+    }
+}
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/controller/TradingController.java b/src/main/java/com/sztzjy/forex/trading_trading/controller/TradingController.java
index f8b70bb..7a3a149 100644
--- a/src/main/java/com/sztzjy/forex/trading_trading/controller/TradingController.java
+++ b/src/main/java/com/sztzjy/forex/trading_trading/controller/TradingController.java
@@ -5,15 +5,18 @@ import com.alibaba.fastjson.JSONObject;
 import com.sztzjy.forex.trading_trading.annotation.AnonymousAccess;
 import com.sztzjy.forex.trading_trading.common.mql5API.Mql5API;
 import com.sztzjy.forex.trading_trading.entity.Member;
+import com.sztzjy.forex.trading_trading.entity.PendingOrder;
 import com.sztzjy.forex.trading_trading.entity.TakeStash;
 import com.sztzjy.forex.trading_trading.entity.mql5Entity.ForexData;
 import com.sztzjy.forex.trading_trading.service.MemberService;
 import com.sztzjy.forex.trading_trading.service.TakeStashService;
+import com.sztzjy.forex.trading_trading.util.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
 import java.util.Date;
 import java.util.List;
 
@@ -28,6 +31,12 @@ public class TradingController {
     @Autowired
     TakeStashService takeStashService;
 
+    @Autowired
+    PendingOrderController pendingOrderController;
+
+    @Autowired
+    RedisUtil redisUtil;
+
     //获取市场报价
     @AnonymousAccess
     @PostMapping("getMarketQuotation")
@@ -61,7 +70,8 @@ public class TradingController {
         Member member = memberService.getMemberByMemberIdAndTrainingId(memberId, trainingId);
         Double availableFunds = member.getAvailableFunds(); //获取账户可用资金
         ForexData forexData = getMarketQuotationByCode(tradingCode); //获取当前买卖价格
-
+        Double buyPic = Double.valueOf(forexData.getBuyPic()); //当前买价
+        Double sellPic = Double.valueOf(forexData.getSellPic());
         if (null != stopLoss || null != stopWin) {   //判断止损止赢是否合理 如果stopLoss stopWin都为null则跳过
             boolean winOrLossStopBoolean = getWinOrLossStop(stopLoss, stopWin, buySellType, forexData);
             if (winOrLossStopBoolean == false) {
@@ -76,11 +86,9 @@ public class TradingController {
                     return JSONObject.parseObject("可用资金不足");
                 }
                 if ("buy".equals(buySellType)) {
-                    Double buyPic = Double.valueOf(forexData.getBuyPic());
                     TakeStash takeStash = returnTakeStash(memberId, trainingId, tradingCode, buySellType, transactionVolume, buyPic, stopLoss, stopWin);
                     takeStashService.insertTakeStash(takeStash);
                 } else if ("sell".equals(buySellType)) {
-                    Double sellPic = Double.valueOf(forexData.getSellPic());
                     TakeStash takeStash = returnTakeStash(memberId, trainingId, tradingCode, buySellType, transactionVolume, sellPic, stopLoss, stopWin);
                     takeStashService.insertTakeStash(takeStash);
                 }
@@ -88,7 +96,6 @@ public class TradingController {
                 updateMemberAvailableFundsAndMarginUsed(member, availableFunds);
             } else { //美元在后 使用可用资金表达式为 买卖手*1000*卖/买价 判断可用资金是否足够 先判断是买还是卖
                 if ("buy".equals(buySellType)) {
-                    Double buyPic = Double.valueOf(forexData.getBuyPic());
                     if (availableFunds < transactionVolume * 1000 * buyPic) {
                         return JSONObject.parseObject("可用资金不足");
                     }
@@ -96,7 +103,6 @@ public class TradingController {
                     takeStashService.insertTakeStash(takeStash);
                     availableFunds = availableFunds - transactionVolume * 1000 * buyPic;
                 } else if ("sell".equals(buySellType)) {
-                    Double sellPic = Double.valueOf(forexData.getSellPic());
                     if (availableFunds < transactionVolume * 1000 * sellPic) {
                         return JSONObject.parseObject("可用资金不足");
                     }
@@ -106,25 +112,41 @@ public class TradingController {
                 }
                 updateMemberAvailableFundsAndMarginUsed(member, availableFunds);
             }
-        } else if (transactionType.equals("gdkc")) {//挂单开仓
-            //限价买进
-            //限价卖出
-            //止损买进
-            //止损卖出
-
-        } else {
-            JSONObject returnJson = JSONObject.parseObject("error");
-            return returnJson;
+        } else if (transactionType.equals("gdkc")) {//挂单开仓  生成的数据为挂单数据  挂单数据生效 判断可用资金是否充足
+            Double priceCommission = (Double) jsonObject.get("priceCommission"); //获取用户输入的价位
+            Date validityTime = (Date) jsonObject.get("validityTime"); //获取挂单有效期
+            if ("buyLimit".equals(buySellType)) { //限价买进(低价买进)  下单时买入价低于当前买价
+                if (priceCommission >= buyPic) {
+                    return JSONObject.parseObject("限价买进价位不能高于当前买价");
+                }
+            }
+            if ("sellLimit".equals(buySellType)) {//限价卖出(高价卖出) 下单时卖出价高于当前卖价
+                if (priceCommission <= sellPic) {
+                    return JSONObject.parseObject("限价卖出价位不能低于当前卖价");
+                }
+            }
+            if ("buyStop".equals(buySellType)) {//止损买进(高价买进) 下单时买入价格高于当前买价
+                if (priceCommission <= buyPic) {
+                    return JSONObject.parseObject("止损买进价位不能低于当前买价");
+                }
+            }
+            if ("sellStop".equals(buySellType)) {//止损卖出(低价卖出)下单时卖出价格低于当前卖价
+                if (priceCommission >= sellPic) {
+                    return JSONObject.parseObject("止损卖出价位不能高于当前卖价");
+                }
+            }
+            PendingOrder pendingOrder = pendingOrderController.returnPendingOrder(memberId, trainingId, tradingCode, buySellType, transactionVolume, priceCommission, stopLoss, stopWin, validityTime);
+            pendingOrderController.insertPendingOrder(pendingOrder);//保存挂单
         }
-
-        return null;
+        JSONObject returnJson = JSONObject.parseObject("error");
+        return returnJson;
     }
 
     //修改当前持仓
     @AnonymousAccess
     @PostMapping("updateTakeStash")
-    public JSONObject updateTakeStash(@RequestBody JSONObject jsonObject){
-        String stashId= String.valueOf(jsonObject.get("stashId"));
+    public JSONObject updateTakeStash(@RequestBody JSONObject jsonObject) {
+        String stashId = String.valueOf(jsonObject.get("stashId"));
         Double stopLoss = (Double) jsonObject.get("stopLoss");
         Double stopWin = (Double) jsonObject.get("stopWin");
         String tradingCode = String.valueOf(jsonObject.get("tradingCode"));
@@ -136,7 +158,7 @@ public class TradingController {
                 return JSONObject.parseObject("止损或获利输入错误");
             }
         }
-        TakeStash takeStash=new TakeStash();
+        TakeStash takeStash = new TakeStash();
         takeStash.setStashId(stashId);
         takeStash.setStopLoss(stopLoss);
         takeStashService.updateByPrimaryKey(takeStash);
@@ -144,7 +166,7 @@ public class TradingController {
     }
 
     //当前持仓平仓  status设置为2
-    public JSONObject pingcangTakeStash(@RequestBody JSONObject jsonObject){
+    public JSONObject pingcangTakeStash(@RequestBody JSONObject jsonObject) {
 
 
         return null;
@@ -183,7 +205,7 @@ public class TradingController {
         if ("buy".equals(buySellType)) {
             Double buyPic = Double.valueOf(forexData.getBuyPic());
             //判断stopLoss 和stopWin 是否为空
-            if(null!=stopLoss && null!=stopWin){
+            if (null != stopLoss && null != stopWin) {
                 if (stopLoss < buyPic && stopWin > buyPic) {
                     return true;
                 }
@@ -204,20 +226,20 @@ public class TradingController {
 
         } else if ("sell".equals(buySellType)) {
             Double sellPic = Double.valueOf(forexData.getSellPic());
-            if(null!=stopLoss && null!=stopWin){
+            if (null != stopLoss && null != stopWin) {
                 if (stopLoss > sellPic && stopWin < sellPic) {
                     return true;
                 }
                 return false;
             }
             if (null == stopLoss) {
-                if(stopWin<sellPic){
+                if (stopWin < sellPic) {
                     return true;
                 }
                 return false;
             }
             if (null == stopWin) {
-                if(stopLoss > sellPic){
+                if (stopLoss > sellPic) {
                     return true;
                 }
                 return false;
@@ -225,5 +247,4 @@ public class TradingController {
         }
         return false;
     }
-
 }
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/entity/PendingOrder.java b/src/main/java/com/sztzjy/forex/trading_trading/entity/PendingOrder.java
new file mode 100644
index 0000000..e2b2f4c
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/entity/PendingOrder.java
@@ -0,0 +1,434 @@
+package com.sztzjy.forex.trading_trading.entity;
+
+import java.util.Date;
+
+public class PendingOrder {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.pending_order_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private String pendingOrderId;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.member_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private String memberId;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.training_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private String trainingId;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.commission_time
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Date commissionTime;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.trading_code
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private String tradingCode;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.commission_number
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private String commissionNumber;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.buy_sell_type
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private String buySellType;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.volume_transaction
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Double volumeTransaction;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.price_commission
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Double priceCommission;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.stop_loss
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Double stopLoss;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.stop_win
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Double stopWin;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.validity_time
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Date validityTime;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column sys_pending_order.status
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    private Integer status;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.pending_order_id
+     *
+     * @return the value of sys_pending_order.pending_order_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getPendingOrderId() {
+        return pendingOrderId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.pending_order_id
+     *
+     * @param pendingOrderId the value for sys_pending_order.pending_order_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setPendingOrderId(String pendingOrderId) {
+        this.pendingOrderId = pendingOrderId == null ? null : pendingOrderId.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.member_id
+     *
+     * @return the value of sys_pending_order.member_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getMemberId() {
+        return memberId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.member_id
+     *
+     * @param memberId the value for sys_pending_order.member_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setMemberId(String memberId) {
+        this.memberId = memberId == null ? null : memberId.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.training_id
+     *
+     * @return the value of sys_pending_order.training_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getTrainingId() {
+        return trainingId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.training_id
+     *
+     * @param trainingId the value for sys_pending_order.training_id
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setTrainingId(String trainingId) {
+        this.trainingId = trainingId == null ? null : trainingId.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.commission_time
+     *
+     * @return the value of sys_pending_order.commission_time
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Date getCommissionTime() {
+        return commissionTime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.commission_time
+     *
+     * @param commissionTime the value for sys_pending_order.commission_time
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setCommissionTime(Date commissionTime) {
+        this.commissionTime = commissionTime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.trading_code
+     *
+     * @return the value of sys_pending_order.trading_code
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getTradingCode() {
+        return tradingCode;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.trading_code
+     *
+     * @param tradingCode the value for sys_pending_order.trading_code
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setTradingCode(String tradingCode) {
+        this.tradingCode = tradingCode == null ? null : tradingCode.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.commission_number
+     *
+     * @return the value of sys_pending_order.commission_number
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getCommissionNumber() {
+        return commissionNumber;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.commission_number
+     *
+     * @param commissionNumber the value for sys_pending_order.commission_number
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setCommissionNumber(String commissionNumber) {
+        this.commissionNumber = commissionNumber == null ? null : commissionNumber.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.buy_sell_type
+     *
+     * @return the value of sys_pending_order.buy_sell_type
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getBuySellType() {
+        return buySellType;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.buy_sell_type
+     *
+     * @param buySellType the value for sys_pending_order.buy_sell_type
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setBuySellType(String buySellType) {
+        this.buySellType = buySellType == null ? null : buySellType.trim();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.volume_transaction
+     *
+     * @return the value of sys_pending_order.volume_transaction
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Double getVolumeTransaction() {
+        return volumeTransaction;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.volume_transaction
+     *
+     * @param volumeTransaction the value for sys_pending_order.volume_transaction
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setVolumeTransaction(Double volumeTransaction) {
+        this.volumeTransaction = volumeTransaction;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.price_commission
+     *
+     * @return the value of sys_pending_order.price_commission
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Double getPriceCommission() {
+        return priceCommission;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.price_commission
+     *
+     * @param priceCommission the value for sys_pending_order.price_commission
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setPriceCommission(Double priceCommission) {
+        this.priceCommission = priceCommission;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.stop_loss
+     *
+     * @return the value of sys_pending_order.stop_loss
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Double getStopLoss() {
+        return stopLoss;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.stop_loss
+     *
+     * @param stopLoss the value for sys_pending_order.stop_loss
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setStopLoss(Double stopLoss) {
+        this.stopLoss = stopLoss;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.stop_win
+     *
+     * @return the value of sys_pending_order.stop_win
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Double getStopWin() {
+        return stopWin;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.stop_win
+     *
+     * @param stopWin the value for sys_pending_order.stop_win
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setStopWin(Double stopWin) {
+        this.stopWin = stopWin;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.validity_time
+     *
+     * @return the value of sys_pending_order.validity_time
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Date getValidityTime() {
+        return validityTime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.validity_time
+     *
+     * @param validityTime the value for sys_pending_order.validity_time
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setValidityTime(Date validityTime) {
+        this.validityTime = validityTime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column sys_pending_order.status
+     *
+     * @return the value of sys_pending_order.status
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Integer getStatus() {
+        return status;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column sys_pending_order.status
+     *
+     * @param status the value for sys_pending_order.status
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/entity/PendingOrderExample.java b/src/main/java/com/sztzjy/forex/trading_trading/entity/PendingOrderExample.java
new file mode 100644
index 0000000..95724c0
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/entity/PendingOrderExample.java
@@ -0,0 +1,1142 @@
+package com.sztzjy.forex.trading_trading.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class PendingOrderExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public PendingOrderExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andPendingOrderIdIsNull() {
+            addCriterion("pending_order_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdIsNotNull() {
+            addCriterion("pending_order_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdEqualTo(String value) {
+            addCriterion("pending_order_id =", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdNotEqualTo(String value) {
+            addCriterion("pending_order_id <>", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdGreaterThan(String value) {
+            addCriterion("pending_order_id >", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdGreaterThanOrEqualTo(String value) {
+            addCriterion("pending_order_id >=", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdLessThan(String value) {
+            addCriterion("pending_order_id <", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdLessThanOrEqualTo(String value) {
+            addCriterion("pending_order_id <=", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdLike(String value) {
+            addCriterion("pending_order_id like", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdNotLike(String value) {
+            addCriterion("pending_order_id not like", value, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdIn(List<String> values) {
+            addCriterion("pending_order_id in", values, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdNotIn(List<String> values) {
+            addCriterion("pending_order_id not in", values, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdBetween(String value1, String value2) {
+            addCriterion("pending_order_id between", value1, value2, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPendingOrderIdNotBetween(String value1, String value2) {
+            addCriterion("pending_order_id not between", value1, value2, "pendingOrderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdIsNull() {
+            addCriterion("member_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdIsNotNull() {
+            addCriterion("member_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdEqualTo(String value) {
+            addCriterion("member_id =", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdNotEqualTo(String value) {
+            addCriterion("member_id <>", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdGreaterThan(String value) {
+            addCriterion("member_id >", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdGreaterThanOrEqualTo(String value) {
+            addCriterion("member_id >=", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdLessThan(String value) {
+            addCriterion("member_id <", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdLessThanOrEqualTo(String value) {
+            addCriterion("member_id <=", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdLike(String value) {
+            addCriterion("member_id like", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdNotLike(String value) {
+            addCriterion("member_id not like", value, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdIn(List<String> values) {
+            addCriterion("member_id in", values, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdNotIn(List<String> values) {
+            addCriterion("member_id not in", values, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdBetween(String value1, String value2) {
+            addCriterion("member_id between", value1, value2, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMemberIdNotBetween(String value1, String value2) {
+            addCriterion("member_id not between", value1, value2, "memberId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdIsNull() {
+            addCriterion("training_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdIsNotNull() {
+            addCriterion("training_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdEqualTo(String value) {
+            addCriterion("training_id =", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdNotEqualTo(String value) {
+            addCriterion("training_id <>", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdGreaterThan(String value) {
+            addCriterion("training_id >", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdGreaterThanOrEqualTo(String value) {
+            addCriterion("training_id >=", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdLessThan(String value) {
+            addCriterion("training_id <", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdLessThanOrEqualTo(String value) {
+            addCriterion("training_id <=", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdLike(String value) {
+            addCriterion("training_id like", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdNotLike(String value) {
+            addCriterion("training_id not like", value, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdIn(List<String> values) {
+            addCriterion("training_id in", values, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdNotIn(List<String> values) {
+            addCriterion("training_id not in", values, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdBetween(String value1, String value2) {
+            addCriterion("training_id between", value1, value2, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTrainingIdNotBetween(String value1, String value2) {
+            addCriterion("training_id not between", value1, value2, "trainingId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeIsNull() {
+            addCriterion("commission_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeIsNotNull() {
+            addCriterion("commission_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeEqualTo(Date value) {
+            addCriterion("commission_time =", value, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeNotEqualTo(Date value) {
+            addCriterion("commission_time <>", value, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeGreaterThan(Date value) {
+            addCriterion("commission_time >", value, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("commission_time >=", value, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeLessThan(Date value) {
+            addCriterion("commission_time <", value, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeLessThanOrEqualTo(Date value) {
+            addCriterion("commission_time <=", value, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeIn(List<Date> values) {
+            addCriterion("commission_time in", values, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeNotIn(List<Date> values) {
+            addCriterion("commission_time not in", values, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeBetween(Date value1, Date value2) {
+            addCriterion("commission_time between", value1, value2, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionTimeNotBetween(Date value1, Date value2) {
+            addCriterion("commission_time not between", value1, value2, "commissionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeIsNull() {
+            addCriterion("trading_code is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeIsNotNull() {
+            addCriterion("trading_code is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeEqualTo(String value) {
+            addCriterion("trading_code =", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeNotEqualTo(String value) {
+            addCriterion("trading_code <>", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeGreaterThan(String value) {
+            addCriterion("trading_code >", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeGreaterThanOrEqualTo(String value) {
+            addCriterion("trading_code >=", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeLessThan(String value) {
+            addCriterion("trading_code <", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeLessThanOrEqualTo(String value) {
+            addCriterion("trading_code <=", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeLike(String value) {
+            addCriterion("trading_code like", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeNotLike(String value) {
+            addCriterion("trading_code not like", value, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeIn(List<String> values) {
+            addCriterion("trading_code in", values, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeNotIn(List<String> values) {
+            addCriterion("trading_code not in", values, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeBetween(String value1, String value2) {
+            addCriterion("trading_code between", value1, value2, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andTradingCodeNotBetween(String value1, String value2) {
+            addCriterion("trading_code not between", value1, value2, "tradingCode");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberIsNull() {
+            addCriterion("commission_number is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberIsNotNull() {
+            addCriterion("commission_number is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberEqualTo(String value) {
+            addCriterion("commission_number =", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberNotEqualTo(String value) {
+            addCriterion("commission_number <>", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberGreaterThan(String value) {
+            addCriterion("commission_number >", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberGreaterThanOrEqualTo(String value) {
+            addCriterion("commission_number >=", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberLessThan(String value) {
+            addCriterion("commission_number <", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberLessThanOrEqualTo(String value) {
+            addCriterion("commission_number <=", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberLike(String value) {
+            addCriterion("commission_number like", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberNotLike(String value) {
+            addCriterion("commission_number not like", value, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberIn(List<String> values) {
+            addCriterion("commission_number in", values, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberNotIn(List<String> values) {
+            addCriterion("commission_number not in", values, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberBetween(String value1, String value2) {
+            addCriterion("commission_number between", value1, value2, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andCommissionNumberNotBetween(String value1, String value2) {
+            addCriterion("commission_number not between", value1, value2, "commissionNumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeIsNull() {
+            addCriterion("buy_sell_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeIsNotNull() {
+            addCriterion("buy_sell_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeEqualTo(String value) {
+            addCriterion("buy_sell_type =", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeNotEqualTo(String value) {
+            addCriterion("buy_sell_type <>", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeGreaterThan(String value) {
+            addCriterion("buy_sell_type >", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("buy_sell_type >=", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeLessThan(String value) {
+            addCriterion("buy_sell_type <", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeLessThanOrEqualTo(String value) {
+            addCriterion("buy_sell_type <=", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeLike(String value) {
+            addCriterion("buy_sell_type like", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeNotLike(String value) {
+            addCriterion("buy_sell_type not like", value, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeIn(List<String> values) {
+            addCriterion("buy_sell_type in", values, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeNotIn(List<String> values) {
+            addCriterion("buy_sell_type not in", values, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeBetween(String value1, String value2) {
+            addCriterion("buy_sell_type between", value1, value2, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andBuySellTypeNotBetween(String value1, String value2) {
+            addCriterion("buy_sell_type not between", value1, value2, "buySellType");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionIsNull() {
+            addCriterion("volume_transaction is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionIsNotNull() {
+            addCriterion("volume_transaction is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionEqualTo(Double value) {
+            addCriterion("volume_transaction =", value, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionNotEqualTo(Double value) {
+            addCriterion("volume_transaction <>", value, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionGreaterThan(Double value) {
+            addCriterion("volume_transaction >", value, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionGreaterThanOrEqualTo(Double value) {
+            addCriterion("volume_transaction >=", value, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionLessThan(Double value) {
+            addCriterion("volume_transaction <", value, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionLessThanOrEqualTo(Double value) {
+            addCriterion("volume_transaction <=", value, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionIn(List<Double> values) {
+            addCriterion("volume_transaction in", values, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionNotIn(List<Double> values) {
+            addCriterion("volume_transaction not in", values, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionBetween(Double value1, Double value2) {
+            addCriterion("volume_transaction between", value1, value2, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andVolumeTransactionNotBetween(Double value1, Double value2) {
+            addCriterion("volume_transaction not between", value1, value2, "volumeTransaction");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionIsNull() {
+            addCriterion("price_commission is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionIsNotNull() {
+            addCriterion("price_commission is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionEqualTo(Double value) {
+            addCriterion("price_commission =", value, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionNotEqualTo(Double value) {
+            addCriterion("price_commission <>", value, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionGreaterThan(Double value) {
+            addCriterion("price_commission >", value, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionGreaterThanOrEqualTo(Double value) {
+            addCriterion("price_commission >=", value, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionLessThan(Double value) {
+            addCriterion("price_commission <", value, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionLessThanOrEqualTo(Double value) {
+            addCriterion("price_commission <=", value, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionIn(List<Double> values) {
+            addCriterion("price_commission in", values, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionNotIn(List<Double> values) {
+            addCriterion("price_commission not in", values, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionBetween(Double value1, Double value2) {
+            addCriterion("price_commission between", value1, value2, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceCommissionNotBetween(Double value1, Double value2) {
+            addCriterion("price_commission not between", value1, value2, "priceCommission");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossIsNull() {
+            addCriterion("stop_loss is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossIsNotNull() {
+            addCriterion("stop_loss is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossEqualTo(Double value) {
+            addCriterion("stop_loss =", value, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossNotEqualTo(Double value) {
+            addCriterion("stop_loss <>", value, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossGreaterThan(Double value) {
+            addCriterion("stop_loss >", value, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossGreaterThanOrEqualTo(Double value) {
+            addCriterion("stop_loss >=", value, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossLessThan(Double value) {
+            addCriterion("stop_loss <", value, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossLessThanOrEqualTo(Double value) {
+            addCriterion("stop_loss <=", value, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossIn(List<Double> values) {
+            addCriterion("stop_loss in", values, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossNotIn(List<Double> values) {
+            addCriterion("stop_loss not in", values, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossBetween(Double value1, Double value2) {
+            addCriterion("stop_loss between", value1, value2, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopLossNotBetween(Double value1, Double value2) {
+            addCriterion("stop_loss not between", value1, value2, "stopLoss");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinIsNull() {
+            addCriterion("stop_win is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinIsNotNull() {
+            addCriterion("stop_win is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinEqualTo(Double value) {
+            addCriterion("stop_win =", value, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinNotEqualTo(Double value) {
+            addCriterion("stop_win <>", value, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinGreaterThan(Double value) {
+            addCriterion("stop_win >", value, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinGreaterThanOrEqualTo(Double value) {
+            addCriterion("stop_win >=", value, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinLessThan(Double value) {
+            addCriterion("stop_win <", value, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinLessThanOrEqualTo(Double value) {
+            addCriterion("stop_win <=", value, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinIn(List<Double> values) {
+            addCriterion("stop_win in", values, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinNotIn(List<Double> values) {
+            addCriterion("stop_win not in", values, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinBetween(Double value1, Double value2) {
+            addCriterion("stop_win between", value1, value2, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andStopWinNotBetween(Double value1, Double value2) {
+            addCriterion("stop_win not between", value1, value2, "stopWin");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeIsNull() {
+            addCriterion("validity_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeIsNotNull() {
+            addCriterion("validity_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeEqualTo(Date value) {
+            addCriterion("validity_time =", value, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeNotEqualTo(Date value) {
+            addCriterion("validity_time <>", value, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeGreaterThan(Date value) {
+            addCriterion("validity_time >", value, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("validity_time >=", value, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeLessThan(Date value) {
+            addCriterion("validity_time <", value, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeLessThanOrEqualTo(Date value) {
+            addCriterion("validity_time <=", value, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeIn(List<Date> values) {
+            addCriterion("validity_time in", values, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeNotIn(List<Date> values) {
+            addCriterion("validity_time not in", values, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeBetween(Date value1, Date value2) {
+            addCriterion("validity_time between", value1, value2, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andValidityTimeNotBetween(Date value1, Date value2) {
+            addCriterion("validity_time not between", value1, value2, "validityTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("status =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("status <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("status >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("status >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("status <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("status <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("status in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("status not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("status between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("status not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated do_not_delete_during_merge Mon Jul 03 11:02:06 CST 2023
+     */
+    public static class Criteria extends GeneratedCriteria {
+        protected Criteria() {
+            super();
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/mappers/PendingOrderMapper.java b/src/main/java/com/sztzjy/forex/trading_trading/mappers/PendingOrderMapper.java
new file mode 100644
index 0000000..ef55a83
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/mappers/PendingOrderMapper.java
@@ -0,0 +1,98 @@
+package com.sztzjy.forex.trading_trading.mappers;
+
+import com.sztzjy.forex.trading_trading.entity.PendingOrder;
+import com.sztzjy.forex.trading_trading.entity.PendingOrderExample;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+@Mapper
+public interface PendingOrderMapper {
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    long countByExample(PendingOrderExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int deleteByExample(PendingOrderExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int deleteByPrimaryKey(String pendingOrderId);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int insert(PendingOrder record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int insertSelective(PendingOrder record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    List<PendingOrder> selectByExample(PendingOrderExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    PendingOrder selectByPrimaryKey(String pendingOrderId);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int updateByExampleSelective(@Param("record") PendingOrder record, @Param("example") PendingOrderExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int updateByExample(@Param("record") PendingOrder record, @Param("example") PendingOrderExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int updateByPrimaryKeySelective(PendingOrder record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table sys_pending_order
+     *
+     * @mbg.generated Mon Jul 03 11:02:06 CST 2023
+     */
+    int updateByPrimaryKey(PendingOrder record);
+}
\ No newline at end of file
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/service/PendingOrderService.java b/src/main/java/com/sztzjy/forex/trading_trading/service/PendingOrderService.java
new file mode 100644
index 0000000..7ac163a
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/service/PendingOrderService.java
@@ -0,0 +1,31 @@
+package com.sztzjy.forex.trading_trading.service;
+
+import com.sztzjy.forex.trading_trading.entity.PendingOrder;
+import com.sztzjy.forex.trading_trading.entity.PendingOrderExample;
+import com.sztzjy.forex.trading_trading.mappers.PendingOrderMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PendingOrderService {
+    @Autowired
+    PendingOrderMapper pendingOrderMapper;
+
+    public void insert(PendingOrder pendingOrder){
+        pendingOrderMapper.insert(pendingOrder);
+    }
+
+    public List<PendingOrder> selectByExample(PendingOrder pendingOrder){
+        PendingOrderExample pendingOrderExample = new PendingOrderExample();
+        PendingOrderExample.Criteria criteria = pendingOrderExample.createCriteria();
+        criteria.andMemberIdEqualTo(pendingOrder.getMemberId()).andTrainingIdEqualTo(pendingOrder.getTrainingId());
+        List<PendingOrder> pendingOrders = pendingOrderMapper.selectByExample(pendingOrderExample);
+        return pendingOrders;
+    }
+
+    public void cancelOrder(PendingOrder pendingOrder){
+        pendingOrderMapper.updateByPrimaryKey(pendingOrder);
+    }
+}
diff --git a/src/main/java/com/sztzjy/forex/trading_trading/util/RedisUtil.java b/src/main/java/com/sztzjy/forex/trading_trading/util/RedisUtil.java
new file mode 100644
index 0000000..e1d7d74
--- /dev/null
+++ b/src/main/java/com/sztzjy/forex/trading_trading/util/RedisUtil.java
@@ -0,0 +1,572 @@
+package com.sztzjy.forex.trading_trading.util;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class RedisUtil {
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    public Set<String> keys(String pattern) {
+        return redisTemplate.keys(pattern);
+    }
+
+    /**
+     * 指定缓存失效时间
+     *
+     * @param key  键
+     * @param time 时间(秒)
+     * @return
+     */
+    public boolean expire(String key, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.expire(key, time, TimeUnit.SECONDS);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 根据key 获取过期时间
+     *
+     * @param key 键 不能为null
+     * @return 时间(秒) 返回0代表为永久有效
+     */
+    public long getExpire(String key) {
+        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+    }
+
+    /**
+     * 判断key是否存在
+     *
+     * @param key 键
+     * @return true 存在 false不存在
+     */
+    public boolean hasKey(String key) {
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 删除缓存
+     *
+     * @param key 可以传一个值 或多个
+     */
+    @SuppressWarnings("unchecked")
+    public void del(String... key) {
+        if (key != null && key.length > 0) {
+            if (key.length == 1) {
+                redisTemplate.delete(key[0]);
+            } else {
+                redisTemplate.delete(CollectionUtils.arrayToList(key));
+            }
+        }
+    }
+
+    // ============================String=============================
+
+    /**
+     * 普通缓存获取
+     *
+     * @param key 键
+     * @return 值
+     */
+    public <T> T get(String key) {
+        if (key == null) return null;
+        ValueOperations<String, T> operation = redisTemplate.opsForValue();
+        return operation.get(key);
+    }
+
+    /**
+     * 普通缓存放入
+     *
+     * @param key   键
+     * @param value 值
+     * @return true成功 false失败
+     */
+    public boolean set(String key, Object value) {
+        try {
+            redisTemplate.opsForValue().set(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+    /**
+     * 普通缓存放入并设置时间
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
+     * @return true成功 false 失败
+     */
+    public boolean set(String key, Object value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+            } else {
+                set(key, value);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 递增
+     *
+     * @param key   键
+     * @param delta 要增加几(大于0)
+     * @return
+     */
+    public long incr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递增因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+    /**
+     * 递减
+     *
+     * @param key   键
+     * @param delta 要减少几(小于0)
+     * @return
+     */
+    public long decr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递减因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, -delta);
+    }
+
+    // ================================Map=================================
+
+    /**
+     * HashGet
+     *
+     * @param key  键 不能为null
+     * @param item 项 不能为null
+     * @return 值
+     */
+    public Object hget(String key, String item) {
+        return redisTemplate.opsForHash().get(key, item);
+    }
+
+    /**
+     * 获取hashKey对应的所有键值
+     *
+     * @param key 键
+     * @return 对应的多个键值
+     */
+    public Map<Object, Object> hmget(String key) {
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+    /**
+     * HashSet
+     *
+     * @param key 键
+     * @param map 对应多个键值
+     * @return true 成功 false 失败
+     */
+    public boolean hmset(String key, Map<String, Object> map) {
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * HashSet 并设置时间
+     *
+     * @param key  键
+     * @param map  对应多个键值
+     * @param time 时间(秒)
+     * @return true成功 false失败
+     */
+    public boolean hmset(String key, Map<String, Object> map, long time) {
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 向一张hash表中放入数据,如果不存在将创建
+     *
+     * @param key   键
+     * @param item  项
+     * @param value 值
+     * @return true 成功 false失败
+     */
+    public boolean hset(String key, String item, Object value) {
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 向一张hash表中放入数据,如果不存在将创建
+     *
+     * @param key   键
+     * @param item  项
+     * @param value 值
+     * @param time  时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
+     * @return true 成功 false失败
+     */
+    public boolean hset(String key, String item, Object value, long time) {
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 删除hash表中的值
+     *
+     * @param key  键 不能为null
+     * @param item 项 可以使多个 不能为null
+     */
+    public void hdel(String key, Object... item) {
+        redisTemplate.opsForHash().delete(key, item);
+    }
+
+    /**
+     * 判断hash表中是否有该项的值
+     *
+     * @param key  键 不能为null
+     * @param item 项 不能为null
+     * @return true 存在 false不存在
+     */
+    public boolean hHasKey(String key, String item) {
+        return redisTemplate.opsForHash().hasKey(key, item);
+    }
+
+    /**
+     * hash递增 如果不存在,就会创建一个 并把新增后的值返回
+     *
+     * @param key  键
+     * @param item 项
+     * @param by   要增加几(大于0)
+     * @return
+     */
+    public double hincr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, by);
+    }
+
+    /**
+     * hash递减
+     *
+     * @param key  键
+     * @param item 项
+     * @param by   要减少记(小于0)
+     * @return
+     */
+    public double hdecr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, -by);
+    }
+
+    // ============================set=============================
+
+    /**
+     * 根据key获取Set中的所有值
+     *
+     * @param key 键
+     * @return
+     */
+    public Set<Object> sGet(String key) {
+        try {
+            return redisTemplate.opsForSet().members(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 根据value从一个set中查询,是否存在
+     *
+     * @param key   键
+     * @param value 值
+     * @return true 存在 false不存在
+     */
+    public boolean sHasKey(String key, Object value) {
+        try {
+            return redisTemplate.opsForSet().isMember(key, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 将数据放入set缓存
+     *
+     * @param key    键
+     * @param values 值 可以是多个
+     * @return 成功个数
+     */
+    public long sSet(String key, Object... values) {
+        try {
+            return redisTemplate.opsForSet().add(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 将set数据放入缓存
+     *
+     * @param key    键
+     * @param time   时间(秒)
+     * @param values 值 可以是多个
+     * @return 成功个数
+     */
+    public long sSetAndTime(String key, long time, Object... values) {
+        try {
+            Long count = redisTemplate.opsForSet().add(key, values);
+            if (time > 0)
+                expire(key, time);
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 获取set缓存的长度
+     *
+     * @param key 键
+     * @return
+     */
+    public long sGetSetSize(String key) {
+        try {
+            return redisTemplate.opsForSet().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 移除值为value的
+     *
+     * @param key    键
+     * @param values 值 可以是多个
+     * @return 移除的个数
+     */
+    public long setRemove(String key, Object... values) {
+        try {
+            Long count = redisTemplate.opsForSet().remove(key, values);
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+    // ===============================list=================================
+
+    /**
+     * 获取list缓存的内容
+     *
+     * @param key   键
+     * @param start 开始
+     * @param end   结束 0 到 -1代表所有值
+     * @return
+     */
+    public List<Object> lGet(String key, long start, long end) {
+        try {
+            return redisTemplate.opsForList().range(key, start, end);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 获取list缓存的长度
+     *
+     * @param key 键
+     * @return
+     */
+    public long lGetListSize(String key) {
+        try {
+            return redisTemplate.opsForList().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 通过索引 获取list中的值
+     *
+     * @param key   键
+     * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
+     * @return
+     */
+    public Object lGetIndex(String key, long index) {
+        try {
+            return redisTemplate.opsForList().index(key, index);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+    public boolean lSet(String key, Object value) {
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+    public boolean lSet(String key, Object value, long time) {
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            if (time > 0)
+                expire(key, time);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+    public boolean lSet(String key, List<Object> value) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+    public boolean lSet(String key, List<Object> value, long time) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            if (time > 0)
+                expire(key, time);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 根据索引修改list中的某条数据
+     *
+     * @param key   键
+     * @param index 索引
+     * @param value 值
+     * @return
+     */
+    public boolean lUpdateIndex(String key, long index, Object value) {
+        try {
+            redisTemplate.opsForList().set(key, index, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 移除N个值为value
+     *
+     * @param key   键
+     * @param count 移除多少个
+     * @param value 值
+     * @return 移除的个数
+     */
+    public long lRemove(String key, long count, Object value) {
+        try {
+            return redisTemplate.opsForList().remove(key, count, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a767496..64f2976 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -13,6 +13,19 @@ spring:
       matching-strategy: ant_path_matcher
   jackson:
     time-zone: GMT+8
+  redis:
+    host: localhost
+    port: 6379
+    database: 0
+#    spring.redis.pool.max-active=8
+#    # 连接池最大阻塞等待时间(使用负值表示没有限制)
+#    spring.redis.pool.max-wait=-1
+#    # 连接池中的最大空闲连接
+#    spring.redis.pool.max-idle=8
+#    # 连接池中的最小空闲连接
+#    spring.redis.pool.min-idle=0
+#    # 连接超时时间(毫秒)
+#    spring.redis.timeout=0
   datasource:
     druid:
       # 初始连接数
diff --git a/src/main/resources/generatorConfig.xml b/src/main/resources/generatorConfig.xml
index 4fa3b9e..be07f85 100644
--- a/src/main/resources/generatorConfig.xml
+++ b/src/main/resources/generatorConfig.xml
@@ -25,7 +25,8 @@
 
         <!-- 需要生成的表 -->
 <!--        <table tableName="sys_member" domainObjectName="Member" />-->
-        <table tableName="sys_take_stash" domainObjectName="TakeStash" />
+<!--        <table tableName="sys_take_stash" domainObjectName="TakeStash" />-->
+        <table tableName="sys_pending_order" domainObjectName="PendingOrder" />
 
     </context>
 
diff --git a/src/main/resources/mappers/PendingOrderMapper.xml b/src/main/resources/mappers/PendingOrderMapper.xml
new file mode 100644
index 0000000..52f8ed8
--- /dev/null
+++ b/src/main/resources/mappers/PendingOrderMapper.xml
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sztzjy.forex.trading_trading.mappers.PendingOrderMapper">
+  <resultMap id="BaseResultMap" type="com.sztzjy.forex.trading_trading.entity.PendingOrder">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    <id column="pending_order_id" jdbcType="VARCHAR" property="pendingOrderId" />
+    <result column="member_id" jdbcType="VARCHAR" property="memberId" />
+    <result column="training_id" jdbcType="VARCHAR" property="trainingId" />
+    <result column="commission_time" jdbcType="TIMESTAMP" property="commissionTime" />
+    <result column="trading_code" jdbcType="VARCHAR" property="tradingCode" />
+    <result column="commission_number" jdbcType="VARCHAR" property="commissionNumber" />
+    <result column="buy_sell_type" jdbcType="VARCHAR" property="buySellType" />
+    <result column="volume_transaction" jdbcType="DOUBLE" property="volumeTransaction" />
+    <result column="price_commission" jdbcType="DOUBLE" property="priceCommission" />
+    <result column="stop_loss" jdbcType="DOUBLE" property="stopLoss" />
+    <result column="stop_win" jdbcType="DOUBLE" property="stopWin" />
+    <result column="validity_time" jdbcType="TIMESTAMP" property="validityTime" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    pending_order_id, member_id, training_id, commission_time, trading_code, commission_number, 
+    buy_sell_type, volume_transaction, price_commission, stop_loss, stop_win, validity_time, 
+    status
+  </sql>
+  <select id="selectByExample" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrderExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from sys_pending_order
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    select 
+    <include refid="Base_Column_List" />
+    from sys_pending_order
+    where pending_order_id = #{pendingOrderId,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    delete from sys_pending_order
+    where pending_order_id = #{pendingOrderId,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrderExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    delete from sys_pending_order
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrder">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    insert into sys_pending_order (pending_order_id, member_id, training_id, 
+      commission_time, trading_code, commission_number, 
+      buy_sell_type, volume_transaction, price_commission, 
+      stop_loss, stop_win, validity_time, 
+      status)
+    values (#{pendingOrderId,jdbcType=VARCHAR}, #{memberId,jdbcType=VARCHAR}, #{trainingId,jdbcType=VARCHAR}, 
+      #{commissionTime,jdbcType=TIMESTAMP}, #{tradingCode,jdbcType=VARCHAR}, #{commissionNumber,jdbcType=VARCHAR}, 
+      #{buySellType,jdbcType=VARCHAR}, #{volumeTransaction,jdbcType=DOUBLE}, #{priceCommission,jdbcType=DOUBLE}, 
+      #{stopLoss,jdbcType=DOUBLE}, #{stopWin,jdbcType=DOUBLE}, #{validityTime,jdbcType=TIMESTAMP}, 
+      #{status,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrder">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    insert into sys_pending_order
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="pendingOrderId != null">
+        pending_order_id,
+      </if>
+      <if test="memberId != null">
+        member_id,
+      </if>
+      <if test="trainingId != null">
+        training_id,
+      </if>
+      <if test="commissionTime != null">
+        commission_time,
+      </if>
+      <if test="tradingCode != null">
+        trading_code,
+      </if>
+      <if test="commissionNumber != null">
+        commission_number,
+      </if>
+      <if test="buySellType != null">
+        buy_sell_type,
+      </if>
+      <if test="volumeTransaction != null">
+        volume_transaction,
+      </if>
+      <if test="priceCommission != null">
+        price_commission,
+      </if>
+      <if test="stopLoss != null">
+        stop_loss,
+      </if>
+      <if test="stopWin != null">
+        stop_win,
+      </if>
+      <if test="validityTime != null">
+        validity_time,
+      </if>
+      <if test="status != null">
+        status,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="pendingOrderId != null">
+        #{pendingOrderId,jdbcType=VARCHAR},
+      </if>
+      <if test="memberId != null">
+        #{memberId,jdbcType=VARCHAR},
+      </if>
+      <if test="trainingId != null">
+        #{trainingId,jdbcType=VARCHAR},
+      </if>
+      <if test="commissionTime != null">
+        #{commissionTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="tradingCode != null">
+        #{tradingCode,jdbcType=VARCHAR},
+      </if>
+      <if test="commissionNumber != null">
+        #{commissionNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="buySellType != null">
+        #{buySellType,jdbcType=VARCHAR},
+      </if>
+      <if test="volumeTransaction != null">
+        #{volumeTransaction,jdbcType=DOUBLE},
+      </if>
+      <if test="priceCommission != null">
+        #{priceCommission,jdbcType=DOUBLE},
+      </if>
+      <if test="stopLoss != null">
+        #{stopLoss,jdbcType=DOUBLE},
+      </if>
+      <if test="stopWin != null">
+        #{stopWin,jdbcType=DOUBLE},
+      </if>
+      <if test="validityTime != null">
+        #{validityTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="status != null">
+        #{status,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrderExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    select count(*) from sys_pending_order
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    update sys_pending_order
+    <set>
+      <if test="record.pendingOrderId != null">
+        pending_order_id = #{record.pendingOrderId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.memberId != null">
+        member_id = #{record.memberId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.trainingId != null">
+        training_id = #{record.trainingId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.commissionTime != null">
+        commission_time = #{record.commissionTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.tradingCode != null">
+        trading_code = #{record.tradingCode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.commissionNumber != null">
+        commission_number = #{record.commissionNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="record.buySellType != null">
+        buy_sell_type = #{record.buySellType,jdbcType=VARCHAR},
+      </if>
+      <if test="record.volumeTransaction != null">
+        volume_transaction = #{record.volumeTransaction,jdbcType=DOUBLE},
+      </if>
+      <if test="record.priceCommission != null">
+        price_commission = #{record.priceCommission,jdbcType=DOUBLE},
+      </if>
+      <if test="record.stopLoss != null">
+        stop_loss = #{record.stopLoss,jdbcType=DOUBLE},
+      </if>
+      <if test="record.stopWin != null">
+        stop_win = #{record.stopWin,jdbcType=DOUBLE},
+      </if>
+      <if test="record.validityTime != null">
+        validity_time = #{record.validityTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.status != null">
+        status = #{record.status,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    update sys_pending_order
+    set pending_order_id = #{record.pendingOrderId,jdbcType=VARCHAR},
+      member_id = #{record.memberId,jdbcType=VARCHAR},
+      training_id = #{record.trainingId,jdbcType=VARCHAR},
+      commission_time = #{record.commissionTime,jdbcType=TIMESTAMP},
+      trading_code = #{record.tradingCode,jdbcType=VARCHAR},
+      commission_number = #{record.commissionNumber,jdbcType=VARCHAR},
+      buy_sell_type = #{record.buySellType,jdbcType=VARCHAR},
+      volume_transaction = #{record.volumeTransaction,jdbcType=DOUBLE},
+      price_commission = #{record.priceCommission,jdbcType=DOUBLE},
+      stop_loss = #{record.stopLoss,jdbcType=DOUBLE},
+      stop_win = #{record.stopWin,jdbcType=DOUBLE},
+      validity_time = #{record.validityTime,jdbcType=TIMESTAMP},
+      status = #{record.status,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrder">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    update sys_pending_order
+    <set>
+      <if test="memberId != null">
+        member_id = #{memberId,jdbcType=VARCHAR},
+      </if>
+      <if test="trainingId != null">
+        training_id = #{trainingId,jdbcType=VARCHAR},
+      </if>
+      <if test="commissionTime != null">
+        commission_time = #{commissionTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="tradingCode != null">
+        trading_code = #{tradingCode,jdbcType=VARCHAR},
+      </if>
+      <if test="commissionNumber != null">
+        commission_number = #{commissionNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="buySellType != null">
+        buy_sell_type = #{buySellType,jdbcType=VARCHAR},
+      </if>
+      <if test="volumeTransaction != null">
+        volume_transaction = #{volumeTransaction,jdbcType=DOUBLE},
+      </if>
+      <if test="priceCommission != null">
+        price_commission = #{priceCommission,jdbcType=DOUBLE},
+      </if>
+      <if test="stopLoss != null">
+        stop_loss = #{stopLoss,jdbcType=DOUBLE},
+      </if>
+      <if test="stopWin != null">
+        stop_win = #{stopWin,jdbcType=DOUBLE},
+      </if>
+      <if test="validityTime != null">
+        validity_time = #{validityTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="status != null">
+        status = #{status,jdbcType=INTEGER},
+      </if>
+    </set>
+    where pending_order_id = #{pendingOrderId,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.sztzjy.forex.trading_trading.entity.PendingOrder">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Mon Jul 03 11:02:06 CST 2023.
+    -->
+    update sys_pending_order
+    set member_id = #{memberId,jdbcType=VARCHAR},
+      training_id = #{trainingId,jdbcType=VARCHAR},
+      commission_time = #{commissionTime,jdbcType=TIMESTAMP},
+      trading_code = #{tradingCode,jdbcType=VARCHAR},
+      commission_number = #{commissionNumber,jdbcType=VARCHAR},
+      buy_sell_type = #{buySellType,jdbcType=VARCHAR},
+      volume_transaction = #{volumeTransaction,jdbcType=DOUBLE},
+      price_commission = #{priceCommission,jdbcType=DOUBLE},
+      stop_loss = #{stopLoss,jdbcType=DOUBLE},
+      stop_win = #{stopWin,jdbcType=DOUBLE},
+      validity_time = #{validityTime,jdbcType=TIMESTAMP},
+      status = #{status,jdbcType=INTEGER}
+    where pending_order_id = #{pendingOrderId,jdbcType=VARCHAR}
+  </update>
+</mapper>
\ No newline at end of file