From 09206aedcfdf30050123e99f2af0a192ebad1de4 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Mon, 03 Jun 2024 18:08:33 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java                |   90 
 src/main/java/com/nq/controller/backend/AdminSitePayController.java          |   10 
 src/main/java/com/nq/utils/http/HttpRequest.java                             |    3 
 src/main/resources/mapper/StockDzMapper.xml                                  |    4 
 src/main/java/com/nq/dao/SitePayMapper.java                                  |    5 
 src/main/java/com/nq/ws/USWebsocketRunClient.java                            |    9 
 src/main/java/com/nq/service/impl/UserServiceImpl.java                       |  578 ++--
 src/main/java/com/nq/service/IStockTimeSettingServices.java                  |   13 
 src/main/java/com/nq/pojo/reponse/RUserAssets.java                           |    3 
 src/main/java/com/nq/service/impl/FileUploadServiceImpl.java                 |   52 
 src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java                  |  276 ++
 src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java             |   13 
 src/main/java/com/nq/enums/EUserAssets.java                                  |    1 
 src/main/java/com/nq/utils/UserPointUtil.java                                |   91 
 src/main/java/com/nq/service/impl/RateServicesImpl.java                      |   47 
 src/main/webapp/upload/fe22bca8-770a-47e5-90be-a58e251a421e.jpeg             |    0 
 src/main/java/com/nq/pojo/UserStockSubscribe.java                            |    1 
 src/main/webapp/upload/2844aca6-9ab3-4d9e-a6e1-dadef9db1241.jpeg             |    0 
 src/main/java/com/nq/pojo/ApplyLever.java                                    |   37 
 src/main/resources/mapper/StockOptionMapper.xml                              |   18 
 src/main/java/com/nq/vo/position/UserPositionVO.java                         |  450 ----
 src/main/java/com/nq/controller/backend/AdminStockTimeSettingController.java |   42 
 src/main/java/com/nq/controller/agent/AgentUserController.java               |    4 
 src/main/java/com/nq/controller/protol/UserRechargeController.java           |   14 
 src/main/resources/mapper/UserStockSubscribeMapper.xml                       |    2 
 src/main/java/com/nq/utils/task/news/NewsTask.java                           |    2 
 src/main/java/com/nq/service/ISiteUserOptionLogService.java                  |   13 
 src/main/java/com/nq/vo/stock/StockListVO.java                               |   15 
 src/main/webapp/upload/060cf2ad-ff52-492c-8b97-64cb88a0b335.jpeg             |    0 
 src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java                   |   33 
 src/main/webapp/upload/98e3873c-c49a-40df-9935-4df7ade7f7b9.jpeg             |    0 
 src/main/java/com/nq/service/IUserStockSubscribeService.java                 |    4 
 src/main/java/com/nq/utils/email/CodeUtil.java                               |    4 
 src/main/java/com/nq/controller/backend/AdminController.java                 |   39 
 src/main/java/com/nq/service/IStockService.java                              |    6 
 src/main/java/com/nq/controller/protol/UserPayController.java                |   24 
 src/main/java/com/nq/ws/WebsocketRunClient.java                              |    8 
 src/main/resources/mapper/UserWithdrawMapper.xml                             |   25 
 src/main/java/com/nq/dao/ApplyLeverMapper.java                               |    7 
 src/main/java/com/nq/utils/ConverterUtil.java                                |    2 
 src/main/resources/mapper/SitePayMapper.xml                                  |   36 
 src/main/webapp/upload/dd0322f3-af72-40ac-ac07-22c8cd7f1b7d.jpg              |    0 
 pom.xml                                                                      |   13 
 src/main/java/com/nq/pojo/StockTimeSetting.java                              |   23 
 src/main/java/com/nq/pojo/UserOptionLog.java                                 |   36 
 src/main/java/com/nq/utils/redis/RedisKeyConstant.java                       |    5 
 src/main/resources/mapper/UserMapper.xml                                     |   31 
 src/main/java/com/nq/service/impl/UserBankServiceImpl.java                   |   30 
 src/main/java/com/nq/dao/AgentUserMapper.java                                |    3 
 src/main/java/com/nq/common/ServerResponse.java                              |   22 
 src/main/java/com/nq/pojo/Stock.java                                         |   24 
 src/main/java/com/nq/pojo/AgentUser.java                                     |    3 
 src/main/java/com/nq/service/IPriceServices.java                             |   12 
 src/main/java/com/nq/vo/user/UserInfoVO.java                                 |    2 
 src/main/java/com/nq/service/ITradingHourService.java                        |    8 
 src/main/webapp/upload/1b0e72f9-b1f1-4d4b-9c2b-1fa655f8d87b.jpeg             |    0 
 src/main/java/com/nq/service/IUserWithdrawService.java                       |    2 
 src/main/java/com/nq/service/impl/PriceServicesImpl.java                     |  159 +
 src/main/java/com/nq/pojo/MoneyLog.java                                      |   28 
 src/main/java/com/nq/pojo/SitePay.java                                       |   10 
 src/main/resources/mapper/UserRechargeMapper.xml                             |  675 ++---
 src/main/java/com/nq/utils/task/YEBTask.java                                 |    2 
 src/main/java/com/nq/service/impl/UserAssetsServices.java                    |  122 
 src/main/webapp/upload/26488e95-ea6d-4327-aa71-92f3bcc8466f.jpg              |    0 
 src/main/resources/mapper/UserOptionLogMapper.xml                            |   21 
 src/main/java/com/nq/controller/protol/UserWithdrawController.java           |    8 
 src/main/java/com/nq/dao/UserMapper.java                                     |   10 
 src/main/java/com/nq/service/IStockSettingServices.java                      |   17 
 src/main/java/com/nq/service/ISitePayService.java                            |    4 
 src/main/java/com/nq/service/IUserService.java                               |   20 
 src/main/java/com/nq/pojo/reponse/RPageInfo.java                             |   20 
 src/main/java/com/nq/service/impl/SiteSettingServiceImpl.java                |   10 
 src/main/java/com/nq/vo/stock/StockVO.java                                   |    2 
 src/main/java/com/nq/controller/backend/AdminRechargeController.java         |   13 
 src/main/java/com/nq/service/IUserRechargeService.java                       |    7 
 src/main/java/com/nq/dao/UserRechargeMapper.java                             |    2 
 src/main/java/com/nq/controller/backend/AdminLogsController.java             |    9 
 src/main/java/com/nq/pojo/UserRecharge.java                                  |   17 
 src/main/java/com/nq/utils/email/EmailUtil.java                              |    1 
 src/main/resources/application.yml                                           |   31 
 src/main/java/com/nq/controller/SiteApiController.java                       |    4 
 src/main/java/com/nq/dao/StockTimeSettingMapper.java                         |    7 
 src/main/java/com/nq/service/IPayService.java                                |    6 
 src/main/java/com/nq/ws/HKWebsocketRunClient.java                            |   51 
 src/main/java/com/nq/pojo/StockSubscribe.java                                |   30 
 src/main/java/com/nq/pojo/User.java                                          |    6 
 src/main/java/com/nq/service/IRateServices.java                              |   11 
 src/main/java/com/nq/utils/timeutil/TimeUtil.java                            |   43 
 src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java                |    2 
 src/main/webapp/upload/0f29312a-b8c6-4c30-af38-d2d38bad3198.jpeg             |    0 
 src/main/java/com/nq/common/interceptor/ApiUserAuthorityInterceptor.java     |    2 
 src/main/java/com/nq/service/impl/StockTimeSettingServicesImpl.java          |   32 
 src/main/resources/application.properties                                    |   55 
 src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java   |   28 
 src/main/java/com/nq/service/IApplyLeverServices.java                        |   17 
 src/main/java/com/nq/vo/agent/AgentUserNodeVO.java                           |   64 
 src/main/java/com/nq/pojo/UserWithdraw.java                                  |   40 
 src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java               |   96 
 src/main/java/com/nq/dao/UserStockSubscribeMapper.java                       |    2 
 src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java                   |    2 
 src/main/java/com/nq/service/impl/PayServiceImpl.java                        |   36 
 src/main/java/com/nq/service/impl/TradingHourServiceImpl.java                |   70 
 src/main/java/com/nq/service/impl/StockServiceImpl.java                      |  207 -
 src/main/webapp/upload/0e2894ce-f359-400f-8caf-2a19794820b5.jpg              |    0 
 src/main/java/com/nq/dao/StockSettingMapper.java                             |    7 
 src/main/java/com/nq/controller/protol/UserController.java                   |  153 
 src/main/java/com/nq/vo/user/UserOptionLogVO.java                            |   29 
 src/main/java/com/nq/Text.java                                               |    1 
 src/main/webapp/upload/3f064ff7-7f92-40cc-9bf1-1aa5f432da6b.jpg              |    0 
 src/main/java/com/nq/service/impl/SiteUserOptionLogServiceImpl.java          |   52 
 src/main/webapp/upload/c336e0bb-23c1-4cce-b2cd-c9c04f2b26b1.jpeg             |    0 
 src/main/java/com/nq/ws/WebSocketClientBeanConfig.java                       |   21 
 src/main/webapp/upload/0ee7c9e8-a21a-40f0-b366-fa301a16abc2.jpg              |    0 
 src/main/java/com/nq/controller/backend/AdminUserController.java             |   15 
 src/main/java/com/nq/dao/StockDzMapper.java                                  |    3 
 src/main/java/com/nq/service/impl/SitePayServiceImpl.java                    |   47 
 src/main/java/com/nq/pojo/StockOption.java                                   |   80 
 src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java         |  354 +-
 .gitignore                                                                   |   31 
 src/main/java/com/nq/service/impl/AgentAgencyFeeServiceImpl.java             |    4 
 src/main/java/com/nq/controller/StockApiController.java                      |   78 
 src/main/java/com/nq/utils/task/stock/StockTask.java                         |  182 +
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java               |  701 +++--
 src/main/java/com/nq/service/IUserPositionService.java                       |   14 
 src/main/java/com/nq/dao/MoneyLogMapper.java                                 |    7 
 src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java               |   61 
 src/main/java/com/nq/pojo/UserAssets.java                                    |    6 
 src/main/java/com/nq/controller/UserApiController.java                       |   50 
 src/main/java/com/nq/service/IUserAssetsServices.java                        |    1 
 src/main/java/com/nq/dao/UserWithdrawMapper.java                             |    6 
 src/main/java/com/nq/service/ISiteAdminService.java                          |    4 
 src/main/webapp/upload/3223f1f6-ac4a-4ddb-ad35-675da3d9362c.jpg              |    0 
 src/main/java/com/nq/controller/agent/AgentController.java                   |   33 
 src/main/resources/mapper/StockMapper.xml                                    |   33 
 src/main/java/com/nq/enums/EStockType.java                                   |   51 
 src/main/java/com/nq/utils/stock/sina/StockApi.java                          |   23 
 src/main/webapp/upload/aaa141d4-5ced-4723-8401-934f2838b784.jpeg             |    0 
 src/main/java/com/nq/controller/backend/AdminStockSettingController.java     |   50 
 src/main/java/com/nq/dao/StockMapper.java                                    |    9 
 src/main/java/com/nq/pojo/StockSetting.java                                  |   25 
 src/main/java/com/nq/controller/protol/UserPositionController.java           |    7 
 /dev/null                                                                    |   12 
 src/main/java/com/nq/dao/UserOptionLogMapper.java                            |   13 
 src/main/java/com/nq/service/impl/StockOptionServiceImpl.java                |   30 
 src/main/java/com/nq/service/impl/StockSettingServicesImpl.java              |   72 
 src/main/java/com/nq/vo/agent/AgentUserListVO.java                           |    7 
 146 files changed, 3,550 insertions(+), 2,916 deletions(-)

diff --git a/.gitignore b/.gitignore
index cc05296..efcbbcf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,32 +1,17 @@
-# Compiled class file
 *.class
- 
-# Log file
-*.log
- 
-# BlueJ files
-*.ctxt
- 
+
 # Mobile Tools for Java (J2ME)
 .mtj.tmp/
- 
+
 # Package Files #
 *.jar
 *.war
-*.nar
 *.ear
-*.zip
-*.tar.gz
-*.rar
- 
+
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
- 
-#忽略所有.svn目录
-.svn/
-#忽略所有target目录
-target/
-#忽略所有.idea目录
-.idea/
-#忽略所有.iml文件
-*.iml
\ No newline at end of file
+/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+/target/maven-archiver/pom.properties
+/target/stock-0.0.1-SNAPSHOT.jar.original
+/target/classes/db/migration/V202403231400.sql
diff --git a/pom.xml b/pom.xml
index 5ecc428..cbaf380 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,15 +25,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-mail</artifactId>
-        </dependency>
 
-        <dependency>
-            <groupId>org.flywaydb</groupId>
-            <artifactId>flyway-core</artifactId>
-        </dependency>
+
+<!--        <dependency>-->
+<!--            <groupId>org.flywaydb</groupId>-->
+<!--            <artifactId>flyway-core</artifactId>-->
+<!--        </dependency>-->
 
 <!--        <dependency>-->
 <!--            <groupId>org.springframework.boot</groupId>-->
diff --git a/src/main/java/com/nq/Text.java b/src/main/java/com/nq/Text.java
index 77be89f..462a7d5 100644
--- a/src/main/java/com/nq/Text.java
+++ b/src/main/java/com/nq/Text.java
@@ -18,6 +18,7 @@
     }
 
 
+
     public ServerResponse rechargMethodTop3(String  ordersn, String  payAmt){
         Map<String,String> map = new HashedMap();
         map.put("version","1.0");
diff --git a/src/main/java/com/nq/common/ServerResponse.java b/src/main/java/com/nq/common/ServerResponse.java
index f489723..bba92cd 100644
--- a/src/main/java/com/nq/common/ServerResponse.java
+++ b/src/main/java/com/nq/common/ServerResponse.java
@@ -1,8 +1,11 @@
 package com.nq.common;
 
+import com.nq.utils.http.HttpClientRequest;
+import com.nq.utils.translate.GoogleTranslateUtil;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.Serializable;
 
 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@@ -10,6 +13,9 @@
     private int status;
     private String msg;
     private T data;
+
+
+    private static String LANG = "lang";
 
     private ServerResponse(int status) {
         this.status = status;
@@ -66,8 +72,18 @@
         return new ServerResponse(ResponseCode.SUCCESS.getCode(), msg);
     }
 
+
+    public static <T> ServerResponse<T> createBySuccessMsg(String msg,HttpServletRequest request) {
+        return new ServerResponse(ResponseCode.SUCCESS.getCode(), new GoogleTranslateUtil().translate(msg,request.getHeader(LANG)));
+    }
+
     public static <T> ServerResponse<T> createBySuccess(T data) {
         return new ServerResponse(ResponseCode.SUCCESS.getCode(), data);
+    }
+
+
+    public static <T> ServerResponse<T> createBySuccess(String data,HttpServletRequest request) {
+        return new ServerResponse(ResponseCode.SUCCESS.getCode(), new GoogleTranslateUtil().translate(data,request.getHeader(LANG)));
     }
 
     public static <T> ServerResponse<T> createBySuccess(String msg, T data) {
@@ -86,7 +102,13 @@
     public static <T> ServerResponse<T> createByErrorMsg(String errormsg) {
         return new ServerResponse(ResponseCode.ERROR.getCode(), errormsg);
     }
+    public static <T> ServerResponse<T> createByErrorMsg(String errormsg, HttpServletRequest request) {
+        return new ServerResponse(ResponseCode.ERROR.getCode(), new GoogleTranslateUtil().translate(errormsg,request.getHeader(LANG)));
+    }
 
+    public static <T> ServerResponse<T> createByErrorMsg(int errorcode,String errormsg, HttpServletRequest request) {
+        return new ServerResponse(errorcode, new GoogleTranslateUtil().translate(errormsg,request.getHeader(LANG)));
+    }
     public static <T> ServerResponse<T> createByErrorCodeMsg(int errorcode, String errormsg) {
         return new ServerResponse(errorcode, errormsg);
     }
diff --git a/src/main/java/com/nq/common/interceptor/ApiUserAuthorityInterceptor.java b/src/main/java/com/nq/common/interceptor/ApiUserAuthorityInterceptor.java
index a1bc556..b557155 100644
--- a/src/main/java/com/nq/common/interceptor/ApiUserAuthorityInterceptor.java
+++ b/src/main/java/com/nq/common/interceptor/ApiUserAuthorityInterceptor.java
@@ -77,7 +77,7 @@
             httpServletResponse.setCharacterEncoding("UTF-8");
             httpServletResponse.setContentType("application/json;charset=UTF-8");
             PrintWriter writer = httpServletResponse.getWriter();
-            writer.print( new Gson().toJson(ServerResponse.createByErrorCodeMsg(401,"请登录")));
+            writer.print( new Gson().toJson(ServerResponse.createByErrorMsg(401,"请登录",httpServletRequest)));
             writer.flush();
             writer.close();
             return false;
diff --git a/src/main/java/com/nq/controller/DigitalCurrencyController.java b/src/main/java/com/nq/controller/DigitalCurrencyController.java
deleted file mode 100644
index 8da0f16..0000000
--- a/src/main/java/com/nq/controller/DigitalCurrencyController.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package  com.nq.controller;
-
-import  com.nq.common.ServerResponse;
-import  com.nq.pojo.DigitalCurrency;
-import  com.nq.service.DigitalCurrencyService;
-import  org.springframework.beans.factory.annotation.Autowired;
-import  org.springframework.stereotype.Controller;
-import  org.springframework.web.bind.annotation.*;
-
-/**
- *  @program:  dabao
- *  @description:  数字货币
- *  @create:  2024-04-07  14:56
- **/
-@Controller
-@RequestMapping("/api/digiccy/")
-public  class  DigitalCurrencyController  {
-
-    @Autowired
-    DigitalCurrencyService  service;
-
-    @RequestMapping("list")
-    @ResponseBody
-    public ServerResponse list(){
-        //  获取数字货币列表
-        return  ServerResponse.createBySuccess(service.list());
-    }
-
-    @RequestMapping("deleteById")
-    @ResponseBody
-    public  ServerResponse  deleteById(String  id){
-        //  根据id删除数字货币
-        return  ServerResponse.createBySuccess(service.removeById(id));
-    }
-
-    @RequestMapping("updateById")
-    @ResponseBody
-    public  ServerResponse  updateById(DigitalCurrency  digitalCurrency){
-        //  根据id更新数字货币信息
-        return  ServerResponse.createBySuccess(service.updateById(digitalCurrency));
-    }
-
-    @RequestMapping("add")
-    @ResponseBody
-    public  ServerResponse add(DigitalCurrency  digitalCurrency){
-        //  添加数字货币
-        return  ServerResponse.createBySuccess(service.save(digitalCurrency));
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/nq/controller/PayController.java b/src/main/java/com/nq/controller/PayController.java
deleted file mode 100644
index a4cab88..0000000
--- a/src/main/java/com/nq/controller/PayController.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.nq.controller;
-
-import org.springframework.stereotype.Controller;
-
-@Controller
-public class PayController {
-}
diff --git a/src/main/java/com/nq/controller/SiteApiController.java b/src/main/java/com/nq/controller/SiteApiController.java
index 86896ae..32ffe12 100644
--- a/src/main/java/com/nq/controller/SiteApiController.java
+++ b/src/main/java/com/nq/controller/SiteApiController.java
@@ -76,8 +76,8 @@
     //查询充值方式信息
     @RequestMapping({"getPayInfo.do"})
     @ResponseBody
-    public ServerResponse getPayInfo(Integer type) {
-        return this.iSitePayService.getPayInfo(type);
+    public ServerResponse getPayInfo() {
+        return this.iSitePayService.getPayInfo();
     }
 
     //查询充值订单信息
diff --git a/src/main/java/com/nq/controller/StockApiController.java b/src/main/java/com/nq/controller/StockApiController.java
index 5f9a7ba..28f0db9 100644
--- a/src/main/java/com/nq/controller/StockApiController.java
+++ b/src/main/java/com/nq/controller/StockApiController.java
@@ -2,10 +2,8 @@
 
 import com.nq.common.ServerResponse;
 import com.nq.pojo.SiteSetting;
-import com.nq.pojo.StockSubscribe;
 import com.nq.service.IStockService;
 import com.nq.service.StockDzService;
-import com.nq.vo.stock.StockSubscribeListParamVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -69,25 +67,8 @@
     public ServerResponse getSingleStock(@RequestParam("code") String code, HttpServletRequest request) {
         return this.iStockService.getSingleStock(code, request);
     }
-    //美股股票代码查询股票信息
-    @RequestMapping({"getSingleStockByCode.do"})
-    @ResponseBody
-    public ServerResponse getSingleStockByCode(@RequestParam("code") String code) {
-        return this.iStockService.getSingleStockByCode(code);
-    }
 
-    @RequestMapping({"getMinK.do"})
-    @ResponseBody
-    public ServerResponse getMinK(@RequestParam("code") String code, @RequestParam("time") Integer time, @RequestParam("ma") Integer ma, @RequestParam("size") Integer size) {
-        return this.iStockService.getMinK(code, time, ma, size);
-    }
 
-    /*查询股票日线*/
-    @RequestMapping({"getDayK.do"})
-    @ResponseBody
-    public ServerResponse getDayK(@RequestParam("code") String code) {
-        return this.iStockService.getDayK_Echarts(code);
-    }
     /*查询股票日线*/
     @RequestMapping({"getKData.do"})
     @ResponseBody
@@ -101,57 +82,6 @@
 
 
 
-    //查询股票历史数据数据
-    @RequestMapping({"getMinK_Echarts.do"})
-    @ResponseBody
-    public ServerResponse getMinK_Echarts(@RequestParam("code") String code, @RequestParam("time") Integer time, @RequestParam("ma") Integer ma, @RequestParam("size") Integer size) {
-        return this.iStockService.getMinK_Echarts(code, time, ma, size);
-    }
-
-    /*期货分时-k线*/
-    @RequestMapping({"getFuturesMinK_Echarts.do"})
-    @ResponseBody
-    public ServerResponse getFuturesMinK_Echarts(@RequestParam("code") String code, @RequestParam("time") Integer time, @RequestParam("size") Integer size) {
-        return this.iStockService.getFuturesMinK_Echarts(code, time, size);
-    }
-
-    /*指数分时-k线*/
-    @RequestMapping({"getIndexMinK_Echarts.do"})
-    @ResponseBody
-    public ServerResponse getIndexMinK_Echarts(@RequestParam("code") String code, @RequestParam("time") Integer time, @RequestParam("size") Integer size) {
-        return this.iStockService.getIndexMinK_Echarts(code, time, size);
-    }
-
-    /*查询期货日线*/
-    @RequestMapping({"getFuturesDayK.do"})
-    @ResponseBody
-    public ServerResponse getFuturesDayK(@RequestParam("code") String code) {
-        return this.iStockService.getFuturesDayK(code);
-    }
-
-    /*指数日线*/
-    @RequestMapping({"getIndexDayK.do"})
-    @ResponseBody
-    public ServerResponse getIndexDayK(@RequestParam("code") String code) {
-        return this.iStockService.getIndexDayK(code);
-    }
-
-   /* 股票日线*/
-   @RequestMapping({"getStockDayK.do"})
-   @ResponseBody
-   public ServerResponse getStockDayK(@RequestParam("code") String code) {
-       return this.iStockService.getStockDayK(code);
-   }
-
-
-
-
-//    //查询股票需要换数据源的股票
-//    @RequestMapping({"stockDataBase.do"})
-//    @ResponseBody
-//    public ServerResponse stockDataBase() {
-//        return this.iStockService.stockDataBase();
-//    }
 
     /**
      *大宗交易 列表
@@ -183,12 +113,4 @@
     public ServerResponse getVipByCode(String code) {
         return this.iStockService.getVipByCode(code);
     }
-
-    @PostMapping({"getStockSubscribeList.do"})
-    @ResponseBody
-    public ServerResponse getStockSubscribeList(StockSubscribeListParamVo vo) {
-        return this.iStockService.getStockSubscribeList(vo);
-    }
-
-
 }
diff --git a/src/main/java/com/nq/controller/StockFuturesApiController.java b/src/main/java/com/nq/controller/StockFuturesApiController.java
deleted file mode 100644
index 4755acf..0000000
--- a/src/main/java/com/nq/controller/StockFuturesApiController.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.nq.controller;
-
-
-import com.nq.common.ServerResponse;
-
-import com.nq.pojo.StockFutures;
-import com.nq.service.IStockFuturesService;
-
-import com.nq.vo.stockfutures.FuturesVO;
-
-import org.slf4j.Logger;
-
-import org.slf4j.LoggerFactory;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-import org.springframework.stereotype.Controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RequestParam;
-
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-
-
-@Controller
-@RequestMapping({"/api/futures/"})
-public class StockFuturesApiController {
-
-    private static final Logger log = LoggerFactory.getLogger(StockFuturesApiController.class);
-
-    @Autowired
-    IStockFuturesService iStockFuturesService;
-
-    //查询所有首页显示的期货信息
-    @RequestMapping({"queryHome.do"})
-    @ResponseBody
-    public ServerResponse queryHome() {
-        return this.iStockFuturesService.queryHome();
-    }
-
-
-    //查询所有列表显示的期货信息
-    @RequestMapping({"queryList.do"})
-    @ResponseBody
-    public ServerResponse queryList(HttpServletRequest request) {
-        return this.iStockFuturesService.queryList(request);
-    }
-    //查询是否可交易
-    @RequestMapping({"queryTrans.do"})
-    @ResponseBody
-    public ServerResponse queryTrans(@RequestParam("futuresId") Integer futuresId) {
-        return this.iStockFuturesService.queryTrans(futuresId);
-    }
-
-    //查询汇率
-    @RequestMapping({"queryExchange.do"})
-    @ResponseBody
-    public ServerResponse queryExchange(@RequestParam("coinCode") String coinCode) {
-        return this.iStockFuturesService.getExchangeRate(coinCode);
-    }
-
-    //查询期货详情信息 (开盘价/收盘价/最高/最低等等。。。)
-    @RequestMapping({"querySingleMarket.do"})
-    @ResponseBody
-    public ServerResponse querySingleMarket(@RequestParam("futuresGid") String futuresGid) {
-        FuturesVO futuresVO = this.iStockFuturesService.querySingleMarket(futuresGid);
-        return ServerResponse.createBySuccess(futuresVO);
-    }
-
-    //查询期货详情
-    @RequestMapping({"queryFuturesByCode.do"})
-    @ResponseBody
-    public ServerResponse queryFuturesByCode(@RequestParam("futuresCode") String futuresCode) {
-        StockFutures stockFutures = this.iStockFuturesService.selectFuturesByCode(futuresCode);
-        return ServerResponse.createBySuccess(stockFutures);
-    }
-}
diff --git a/src/main/java/com/nq/controller/StockIndexApiController.java b/src/main/java/com/nq/controller/StockIndexApiController.java
deleted file mode 100644
index 81c35ae..0000000
--- a/src/main/java/com/nq/controller/StockIndexApiController.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.nq.controller;
-
-
-import com.nq.common.ServerResponse;
-import com.nq.service.IStockIndexService;
-import com.nq.vo.stock.MarketVO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-
-@Controller
-@RequestMapping({"/api/index/"})
-public class StockIndexApiController {
-    private static final Logger log = LoggerFactory.getLogger(StockIndexApiController.class);
-
-    @Autowired
-    IStockIndexService iStockIndexService;
-
-
-    @RequestMapping({"queryHomeIndex.do"})
-    @ResponseBody
-    public ServerResponse queryHomeIndex() {
-        return this.iStockIndexService.queryHomeIndex();
-    }
-    //查询指数信息
-    @RequestMapping({"queryListIndex.do"})
-    @ResponseBody
-    public ServerResponse queryListIndex(HttpServletRequest request) {
-        return this.iStockIndexService.queryListIndex(request);
-    }
-    //查询固定指数信息
-    @RequestMapping({"queryListIndexByCode.do"})
-    @ResponseBody
-    public ServerResponse queryListIndexByCode(@RequestParam List<String> code) {
-        return this.iStockIndexService.queryListIndexByCode(code);
-    }
-
-    @RequestMapping({"queryTransIndex.do"})
-    @ResponseBody
-    public ServerResponse queryTransIndex(@RequestParam("indexId") Integer indexId) {
-        return this.iStockIndexService.queryTransIndex(indexId);
-    }
-
-    @RequestMapping({"querySingleIndex.do"})
-    @ResponseBody
-    public ServerResponse querySingleIndex(@RequestParam("indexCode") String indexCode) {
-        MarketVO marketVO = this.iStockIndexService.querySingleIndex(indexCode);
-        return ServerResponse.createBySuccess(marketVO);
-    }
-    //指数新闻
-    @RequestMapping({"queryIndexNews.do"})
-    @ResponseBody
-    public ServerResponse queryIndexNews() {
-        return this.iStockIndexService.queryIndexNews();
-    }
-}
diff --git a/src/main/java/com/nq/controller/Test.java b/src/main/java/com/nq/controller/Test.java
deleted file mode 100644
index b4c8d84..0000000
--- a/src/main/java/com/nq/controller/Test.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.nq.controller;
-
-import com.nq.service.IUserService;
-import com.nq.utils.email.CodeUtil;
-import com.nq.utils.email.EmailService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @program: dabao
- * @description:
- * @create: 2024-04-01 11:17
- **/
-@RestController
-@RequestMapping({"/test/"})
-public class Test {
-    @Autowired
-    IUserService iUserService;
-    @Autowired
-    EmailService emailService;
-    @Autowired
-    CodeUtil codeUtil;
-
-    @GetMapping({"test.do"})
-    public String testMethod(){
-        emailService.sendSimpleMail("1772600164@qq.com","飞防验证码",codeUtil.generateVerificationCode());
-//        iUserService.ForceSellOneStockTaskV2();
-        return "success";
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/nq/controller/UserApiController.java b/src/main/java/com/nq/controller/UserApiController.java
index 42717e8..cbfca32 100644
--- a/src/main/java/com/nq/controller/UserApiController.java
+++ b/src/main/java/com/nq/controller/UserApiController.java
@@ -54,24 +54,47 @@
 
     @Autowired
     ISiteSpreadService iSiteSpreadService;
-
     //注册
     @RequestMapping(value = {"reg.do"}, method = {RequestMethod.POST})
     @ResponseBody
     public ServerResponse reg(@RequestParam("agentCode") String agentCode,
                               @RequestParam("phone") String phone,
                               @RequestParam("userPwd") String userPwd,
-                              @RequestParam("email") String email,
-                              @RequestParam("code") String code,
+                              @RequestParam("phoneCode")String phoneCode,
                               HttpServletRequest httpServletRequest) {
-        return this.iUserService.reg(agentCode, phone, userPwd, email,code,httpServletRequest);
-}
+        return this.iUserService.reg(agentCode, phone,phoneCode, userPwd,httpServletRequest);
+    }
 
     @RequestMapping(value = {"sendMailCode.do"}, method = {RequestMethod.POST})
     @ResponseBody
-    public ServerResponse sendMailCode(@RequestParam("toMail") String toMail) {
-        return this.iUserService.sendMailCode(toMail);
+    public ServerResponse sendMailCode(@RequestParam("email") String email) {
+        try {
+            if (email == null || email.isEmpty()) { // 判断email参数是否为空
+                return ServerResponse.createByErrorMsg("邮箱不能为空");
+            }
+            log.info("-------->发送邮件");
+            return this.iUserService.sendMailCode(email);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ServerResponse.createByErrorMsg("发送失败,发生异常");
+        }
     }
+
+    @RequestMapping(value = {"sendSms.do"}, method = {RequestMethod.POST})
+    @ResponseBody
+    public ServerResponse sendSms(@RequestParam("phone") String phone,HttpServletRequest request) {
+        try {
+            if (phone == null || phone.isEmpty()) {
+                return ServerResponse.createByErrorMsg("手机号不能为空",request);
+            }
+            log.info("-------->发送短信");
+            return this.iUserService.sendSms(phone,request);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ServerResponse.createByErrorMsg("发送失败,发生异常");
+        }
+    }
+
 
     //登录
     @RequestMapping(value = {"login.do"}, method = {RequestMethod.POST})
@@ -87,7 +110,7 @@
             UserLoginResultVO resultVO = new UserLoginResultVO();
             resultVO.setKey(pc_cookie_name);
             resultVO.setToken(token);
-            return ServerResponse.createBySuccess("Login Success", resultVO);
+            return ServerResponse.createBySuccess("登录成功", resultVO);
         }
         return serverResponse;
     }
@@ -113,17 +136,8 @@
     //找回密码
     @RequestMapping({"updatePwd.do"})
     @ResponseBody
-    public ServerResponse updatePwd(@RequestParam("phoneNum") String phoneNum, @RequestParam("code") String code,@RequestParam("newPwd")  String newPwd) {
+    public ServerResponse updatePwd(String phoneNum, String code, String newPwd) {
         return this.iUserService.updatePwd(phoneNum, code, newPwd);
-    }
-
-    //找回密码根据邮箱
-    @RequestMapping({"retrievePasswordByEmail.do"})
-    @ResponseBody
-    public ServerResponse retrievePasswordByEmail(@RequestParam("email") String email,
-                                                  @RequestParam("code") String code,
-                                                  @RequestParam("newPwd") String newPwd) {
-        return this.iUserService.retrievePasswordByEmail(email, code, newPwd);
     }
 
     /**
diff --git a/src/main/java/com/nq/controller/agent/AgentController.java b/src/main/java/com/nq/controller/agent/AgentController.java
index cae8335..f39142d 100644
--- a/src/main/java/com/nq/controller/agent/AgentController.java
+++ b/src/main/java/com/nq/controller/agent/AgentController.java
@@ -31,6 +31,8 @@
     @Autowired
     IAgentAgencyFeeService iAgentAgencyFeeService;
 
+    @Autowired
+    ISiteUserOptionLogService iSiteUserOptionLogService;
 
     @Autowired
     ISiteAdminService iSiteAdminService;
@@ -42,6 +44,12 @@
         return this.iAgentUserService.getAgentInfo(request);
     }
 
+    @RequestMapping("optionList.do")
+    @ResponseBody
+    public ServerResponse optionList(@RequestParam(value = "agentId", required = false) Integer agentId,@RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize){
+        return this.iSiteUserOptionLogService.list(agentId,userId,pageNum,pageSize);
+    }
+
     //修改代理用户密码
     @RequestMapping({"updatePwd.do"})
     @ResponseBody
@@ -49,6 +57,19 @@
         return this.iAgentUserService.updatePwd(oldPwd, newPwd, request);
     }
 
+    //查询首页充值,提现,注册统计
+    @RequestMapping({"moneyCount.do"})
+    @ResponseBody
+    public ServerResponse moneyCount(@RequestParam(value = "agentId", required = false) String agentId,@RequestParam(value = "startTime", required = false) String startTime,@RequestParam(value = "entTime", required = false) String entTime) {
+        return this.iSiteAdminService.moneyCount(agentId,startTime,entTime);
+    }
+
+    //查询代理总资金
+    @RequestMapping({"totalAgencyFunds.do"})
+    @ResponseBody
+    public ServerResponse totalAgencyFunds(@RequestParam(value = "agentId", required = false) String agentId) {
+        return this.iSiteAdminService.totalAgencyFunds(agentId);
+    }
 
     //查询首页 资金情况、持仓情况、盈亏信息、提现情况、股票信息、代理信息
     @RequestMapping({"count.do"})
@@ -82,8 +103,8 @@
     //添加用户管理 账户信息
     @RequestMapping({"addSimulatedAccount.do"})
     @ResponseBody
-    public ServerResponse addSimulatedAccount(HttpServletRequest request,@RequestParam("agentId") Integer agentId, @RequestParam("phone") String phone, @RequestParam("amt") String amt, @RequestParam("accountType") Integer accountType, @RequestParam("pwd") String pwd) {
-        return this.iUserService.addSimulatedAccount(agentId, phone, pwd, amt, accountType, request);
+    public ServerResponse addSimulatedAccount(HttpServletRequest request,@RequestParam("agentId") Integer agentId, @RequestParam("phone") String phone, @RequestParam("accountType") Integer accountType, @RequestParam("pwd") String pwd) {
+        return this.iUserService.addSimulatedAccount(agentId, phone, pwd, accountType, request);
     }
 
     //查询股票统计指定时间内,代理客户(已平仓)的交易盈亏
@@ -130,4 +151,12 @@
         }
         return this.iAgentUserService.updateOnlineServices(onLineServices,agentId);
     }
+
+
+    @RequestMapping("getMoney.do")
+    @ResponseBody
+    public  ServerResponse getMoney(
+            @RequestParam("userId") Integer id){
+        return  iUserService.getMoney(id);
+    }
 }
diff --git a/src/main/java/com/nq/controller/agent/AgentUserController.java b/src/main/java/com/nq/controller/agent/AgentUserController.java
index e3f4d95..f60c674 100644
--- a/src/main/java/com/nq/controller/agent/AgentUserController.java
+++ b/src/main/java/com/nq/controller/agent/AgentUserController.java
@@ -61,8 +61,8 @@
     //添加用户列表 用户信息
     @RequestMapping({"addSimulatedAccount.do"})
     @ResponseBody
-    public ServerResponse addSimulatedAccount(HttpServletRequest request, @RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam("phone") String phone, @RequestParam("amt") String amt, @RequestParam("accountType") Integer accountType, @RequestParam("pwd") String pwd) {
-        return this.iUserService.addSimulatedAccount(agentId, phone, pwd, amt, accountType, request);
+    public ServerResponse addSimulatedAccount(HttpServletRequest request, @RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam("phone") String phone,@RequestParam("accountType") Integer accountType, @RequestParam("pwd") String pwd) {
+        return this.iUserService.addSimulatedAccount(agentId, phone, pwd, accountType, request);
     }
 
     @RequestMapping({"authByAdmin.do"})
diff --git a/src/main/java/com/nq/controller/backend/AdminController.java b/src/main/java/com/nq/controller/backend/AdminController.java
index 7b0d769..7dfbe99 100644
--- a/src/main/java/com/nq/controller/backend/AdminController.java
+++ b/src/main/java/com/nq/controller/backend/AdminController.java
@@ -16,6 +16,7 @@
 
 import com.nq.utils.PropertiesUtil;
 
+import java.util.Date;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -72,6 +73,10 @@
     @Autowired
     IUserAssetsServices iUserAssetsServices;
 
+
+    @Autowired
+    IApplyLeverServices iApplyLeverServices;
+
     //分页查询管理设置 所有管理列表数据及模糊查询
     @RequestMapping({"list.do"})
     @ResponseBody
@@ -105,6 +110,20 @@
     @ResponseBody
     public ServerResponse count() {
         return this.iSiteAdminService.count();
+    }
+
+    //查询首页充值,提现,注册统计
+    @RequestMapping({"moneyCount.do"})
+    @ResponseBody
+    public ServerResponse moneyCount(@RequestParam(value = "agentId", required = false) String agentId,@RequestParam(value = "startTime", required = false) String startTime,@RequestParam(value = "entTime", required = false) String entTime) {
+        return this.iSiteAdminService.moneyCount(agentId,startTime,entTime);
+    }
+
+    //查询代理总资金
+    @RequestMapping({"totalAgencyFunds.do"})
+    @ResponseBody
+    public ServerResponse totalAgencyFunds(@RequestParam(value = "agentId", required = false) String agentId) {
+        return this.iSiteAdminService.totalAgencyFunds(agentId);
     }
 
     //处理图片上传
@@ -329,7 +348,7 @@
 
     @RequestMapping("getMoney.do")
     @ResponseBody
-    public  ServerResponse updateayChnnel(
+    public  ServerResponse getMoney(
             @RequestParam("userId") Integer id){
 
         return  iUserService.getMoney(id);
@@ -343,4 +362,22 @@
         return  iUserAssetsServices.updateUserAssets(id,amt);
     }
 
+    @RequestMapping({"examineApplyLever.do"})
+    @ResponseBody
+    public ServerResponse examineApplyLever(@RequestParam(value = "id", required = true) String id,
+                                            @RequestParam(value = "state", defaultValue = "1") String state,
+                                            HttpServletRequest request) {
+        return this.iApplyLeverServices.examineApplyLever(id,state,request);
+    }
+
+
+    @RequestMapping({"queryApplyLever.do"})
+    @ResponseBody
+    public ServerResponse queryApplyLever(@RequestParam(value = "phone", required = false) String adminName,
+                                          @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                          @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
+                                          HttpServletRequest request
+    ) {
+        return this.iApplyLeverServices.queryApplyLever(adminName,pageNum,pageSize, request);
+    }
 }
diff --git a/src/main/java/com/nq/controller/backend/AdminLogsController.java b/src/main/java/com/nq/controller/backend/AdminLogsController.java
index f0f29b0..50cabe4 100644
--- a/src/main/java/com/nq/controller/backend/AdminLogsController.java
+++ b/src/main/java/com/nq/controller/backend/AdminLogsController.java
@@ -42,6 +42,9 @@
     @Autowired
     ISiteMessageService iSiteMessageService;
 
+    @Autowired
+    ISiteUserOptionLogService iSiteUserOptionLogService;
+
     //分页查询日志管理 所有定时任务信息及模糊查询
     @RequestMapping({"taskList.do"})
     @ResponseBody
@@ -56,6 +59,12 @@
         return this.iSiteLoginLogService.loginList(userId, pageNum, pageSize);
     }
 
+    @RequestMapping("optionList.do")
+    @ResponseBody
+    public ServerResponse optionList(@RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize){
+        return this.iSiteUserOptionLogService.list(null,userId,pageNum,pageSize);
+    }
+
     //分页查询日志管理 所有短信日志信息
     @RequestMapping({"smsList.do"})
     @ResponseBody
diff --git a/src/main/java/com/nq/controller/backend/AdminRechargeController.java b/src/main/java/com/nq/controller/backend/AdminRechargeController.java
index 5601ea9..9fd6e03 100644
--- a/src/main/java/com/nq/controller/backend/AdminRechargeController.java
+++ b/src/main/java/com/nq/controller/backend/AdminRechargeController.java
@@ -88,9 +88,6 @@
         } catch (Exception e) {
             log.error("admin修改充值订单状态出错 ,异常 = {}", e);
         }
-        if(null == serverResponse){
-            return ServerResponse.createByErrorMsg("operation mistake");
-        }
         return serverResponse;
     }
 
@@ -107,14 +104,4 @@
     public ServerResponse del(@RequestParam("cId") Integer cId) {
         return this.iUserRechargeService.del(cId);
     }
-
-    //删除资金管理 充值列表订单信息
-    @RequestMapping({"chooseBank.do"})
-    @ResponseBody
-    public ServerResponse chooseBank(UserRecharge userRecharge) {
-        return this.iUserRechargeService.chooseBank(userRecharge);
-    }
-
-
-
 }
diff --git a/src/main/java/com/nq/controller/backend/AdminSitePayController.java b/src/main/java/com/nq/controller/backend/AdminSitePayController.java
index 9d4896e..1a4910c 100644
--- a/src/main/java/com/nq/controller/backend/AdminSitePayController.java
+++ b/src/main/java/com/nq/controller/backend/AdminSitePayController.java
@@ -39,8 +39,7 @@
     @RequestMapping({"list.do"})
     @ResponseBody
     public ServerResponse list(@RequestParam("channelType") String channelType, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
-        ServerResponse serverResponse = iSitePayService.listByAdmin(channelType, pageNum, pageSize);
-        return serverResponse;
+        return this.iSitePayService.listByAdmin(channelType, pageNum, pageSize);
     }
 
     //删除系统基本设置 支付渠道设置信息
@@ -48,13 +47,6 @@
     @ResponseBody
     public ServerResponse del(@RequestParam("cId") Integer cId) {
         return this.iSitePayService.del(cId);
-    }
-
-    @RequestMapping({"listByPayType.do"})
-    @ResponseBody
-    public ServerResponse listByPayType(@RequestParam("id") Integer id) {
-        ServerResponse serverResponse = iSitePayService.listByPayType(id);
-        return serverResponse;
     }
 
 }
diff --git a/src/main/java/com/nq/controller/backend/AdminStockSettingController.java b/src/main/java/com/nq/controller/backend/AdminStockSettingController.java
new file mode 100644
index 0000000..8e0f269
--- /dev/null
+++ b/src/main/java/com/nq/controller/backend/AdminStockSettingController.java
@@ -0,0 +1,50 @@
+package com.nq.controller.backend;
+
+
+import com.nq.common.ServerResponse;
+import com.nq.pojo.StockSetting;
+import com.nq.service.IStockSettingServices;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Controller
+@RequestMapping({"/admin/stockSetting/"})
+public class AdminStockSettingController {
+
+
+    @Autowired
+    IStockSettingServices stockSettingServices;
+
+
+    @RequestMapping({"add.do"})
+    @ResponseBody
+    public ServerResponse list(HttpServletRequest request, StockSetting stockSetting) {
+        return stockSettingServices.saveStockSetting(stockSetting);
+    }
+
+    @RequestMapping({"update.do"})
+    @ResponseBody
+    public ServerResponse update(HttpServletRequest request, StockSetting stockSetting) {
+        return stockSettingServices.updateStockSetting(stockSetting);
+    }
+
+
+    @RequestMapping({"delete.do"})
+    @ResponseBody
+    public ServerResponse delete(HttpServletRequest request,@RequestParam(value = "id") Integer id) {
+        return stockSettingServices.deleteStockSetting(id);
+    }
+
+
+    @RequestMapping({"queryAll.do"})
+    @ResponseBody
+    public ServerResponse queryAll(HttpServletRequest request,@RequestParam(value = "stockCode", required = false)String stockCode) {
+        return stockSettingServices.queryAll(stockCode);
+    }
+
+}
diff --git a/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java b/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
index 1c07d90..f661567 100644
--- a/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
+++ b/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
@@ -3,7 +3,6 @@
 
 import com.nq.common.ServerResponse;
 import com.nq.dao.StockSubscribeMapper;
-import com.nq.dao.UserStockSubscribeMapper;
 import com.nq.pojo.StockSubscribe;
 import com.nq.pojo.UserStockSubscribe;
 import com.nq.service.IStockSubscribeService;
@@ -16,7 +15,6 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
 @Controller
@@ -27,8 +25,7 @@
     IUserStockSubscribeService iUserStockSubscribeService;
     @Autowired
     IStockSubscribeService iStockSubscribeService;
-    @Resource
-    private UserStockSubscribeMapper userStockSubscribeMapper;
+
     /**
      * 
      * @param pageNum
@@ -91,12 +88,8 @@
     //申购信息列表查询
     @RequestMapping({"getStockSubscribeList.do"})
     @ResponseBody
-    public ServerResponse getStockSubscribeList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
-                                                @RequestParam(value = "pageSize", defaultValue = "12") int pageSize,
-                                                @RequestParam(value = "keyword", defaultValue = "") String keyword,
-                                                @RequestParam(value = "type", defaultValue = "") Integer type,
-                                                HttpServletRequest request) {
-        return this.iUserStockSubscribeService.getList(pageNum, pageSize, keyword, type,request);
+    public ServerResponse getStockSubscribeList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "12") int pageSize, @RequestParam(value = "keyword", defaultValue = "") String keyword, HttpServletRequest request) {
+        return this.iUserStockSubscribeService.getList(pageNum, pageSize, keyword, request);
     }
 
 
@@ -128,17 +121,6 @@
         return this.iUserStockSubscribeService.del(id, request);
     }
 
-    /*后台新股认缴*/
-    @RequestMapping({"backgroundPurchase.do"})
-    @ResponseBody
-    public ServerResponse backgroundPurchase( @RequestParam("id") Integer id) {
-        UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
-        if(null == userStockSubscribe){
-            return ServerResponse.createBySuccessMsg("申购订单不存在");
-        }
-        if(userStockSubscribe.getApplyNumber() <= 0){
-            return ServerResponse.createByErrorMsg("请先设置用户中签数量");
-        }
-        return this.iUserStockSubscribeService.backgroundPurchase(id);
-    }
+    //大宗交易
+
 }
diff --git a/src/main/java/com/nq/controller/backend/AdminStockTimeSettingController.java b/src/main/java/com/nq/controller/backend/AdminStockTimeSettingController.java
new file mode 100644
index 0000000..3d76fa7
--- /dev/null
+++ b/src/main/java/com/nq/controller/backend/AdminStockTimeSettingController.java
@@ -0,0 +1,42 @@
+package com.nq.controller.backend;
+
+
+import com.nq.common.ServerResponse;
+import com.nq.pojo.StockSetting;
+import com.nq.pojo.StockTimeSetting;
+import com.nq.service.IStockSettingServices;
+import com.nq.service.IStockTimeSettingServices;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Controller
+@RequestMapping({"/admin/stockTimeSetting/"})
+public class AdminStockTimeSettingController {
+
+
+
+    @Autowired
+    IStockTimeSettingServices stockSettingServices;
+
+
+
+
+
+    @RequestMapping({"update.do"})
+    @ResponseBody
+    public ServerResponse update(HttpServletRequest request, StockTimeSetting stockSetting) {
+        return stockSettingServices.updateStockTimeSetting(stockSetting);
+    }
+    @RequestMapping({"queryAll.do"})
+    @ResponseBody
+    public ServerResponse queryAll(HttpServletRequest request) {
+        return stockSettingServices.queryStockTimeSetting();
+    }
+
+
+
+}
diff --git a/src/main/java/com/nq/controller/backend/AdminUserController.java b/src/main/java/com/nq/controller/backend/AdminUserController.java
index 9faa339..7bd1f7b 100644
--- a/src/main/java/com/nq/controller/backend/AdminUserController.java
+++ b/src/main/java/com/nq/controller/backend/AdminUserController.java
@@ -30,8 +30,15 @@
     //分页查询所有用户列表信息 及模糊查询用户信息
     @RequestMapping({"list.do"})
     @ResponseBody
-    public ServerResponse list(@RequestParam(value = "realName", required = false) String realName, @RequestParam(value = "phone", required = false) String phone, @RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam(value = "accountType", required = false) Integer accountType, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, HttpServletRequest request) {
-        return this.iUserService.listByAdmin(realName, phone, agentId, accountType, pageNum, pageSize, request);
+    public ServerResponse list(@RequestParam(value = "realName", required = false) String realName,
+                               @RequestParam(value = "phone", required = false) String phone,
+                               @RequestParam(value = "agentId", required = false) Integer agentId,
+                               @RequestParam(value = "accountType", required = false) Integer accountType,
+                               @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                               @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
+                               @RequestParam(value = "id", required = false) String id,
+                               HttpServletRequest request) {
+        return this.iUserService.listByAdmin(realName, phone, agentId, accountType, pageNum, pageSize,id, request);
     }
 
     //查询用户信息是否存在
@@ -72,8 +79,8 @@
     //添加用户列表 用户信息
     @RequestMapping({"addSimulatedAccount.do"})
     @ResponseBody
-    public ServerResponse addSimulatedAccount(HttpServletRequest request, @RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam("phone") String phone, @RequestParam("amt") String amt, @RequestParam("accountType") Integer accountType, @RequestParam("pwd") String pwd) {
-        return this.iUserService.addSimulatedAccount(agentId, phone, pwd, amt, accountType, request);
+    public ServerResponse addSimulatedAccount(HttpServletRequest request, @RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam("phone") String phone,  @RequestParam("accountType") Integer accountType, @RequestParam("pwd") String pwd) {
+        return this.iUserService.addSimulatedAccount(agentId, phone, pwd, accountType, request);
     }
 
     @RequestMapping({"authByAdmin.do"})
diff --git a/src/main/java/com/nq/controller/protol/UserController.java b/src/main/java/com/nq/controller/protol/UserController.java
index c29460d..bad151f 100644
--- a/src/main/java/com/nq/controller/protol/UserController.java
+++ b/src/main/java/com/nq/controller/protol/UserController.java
@@ -1,18 +1,24 @@
 package com.nq.controller.protol;
 
 
+import ch.qos.logback.core.util.FileUtil;
 import com.google.common.collect.Maps;
 import com.nq.common.ServerResponse;
-import com.nq.dao.UserStockSubscribeMapper;
+import com.nq.enums.EStockType;
+import com.nq.pojo.ApplyLever;
 import com.nq.pojo.StockSubscribe;
-import com.nq.pojo.User;
 import com.nq.pojo.UserStockSubscribe;
 import com.nq.service.*;
 import com.nq.utils.PropertiesUtil;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Base64;
 import java.util.Map;
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
@@ -26,6 +32,8 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
+
+import static com.nq.service.impl.SiteNewsServiceImpl.convertBase64ToImage;
 
 @Controller
 @RequestMapping({"/user/"})
@@ -53,6 +61,15 @@
     @Autowired
     UserPendingorderService userPendingorderService;
 
+    @Autowired
+    IRateServices rateServices;
+
+    @Autowired
+    IUserRechargeService iUserRechargeService;
+
+    @Autowired
+    IApplyLeverServices iApplyLeverServices;
+
     //添加到自选股
     @RequestMapping({"addOption.do"})
     @ResponseBody
@@ -76,17 +93,15 @@
 
     @RequestMapping("getMoney.do")
     @ResponseBody
-    public ServerResponse getMoney(@RequestParam("accectType") String accectType, HttpServletRequest request) {
-        return this.iUserService.getMoneyByType(accectType,request);
+    public ServerResponse getMoney( HttpServletRequest request) {
+        return this.iUserService.getMoney(request);
     }
 
     //查询用户自选股
     @RequestMapping({"queryMyOption.do"})
     @ResponseBody
     public ServerResponse queryMyOption(@RequestParam("code") String code, HttpServletRequest request) {
-//        return this.iUserService.queryMyOption(code, request);
-
-        return null;
+        return this.iUserService.queryMyOption(code, request);
     }
 
     //用户下单买入股票
@@ -98,16 +113,7 @@
                               @RequestParam("lever") Integer lever,
                               @RequestParam(value = "profitTarget",required = false)
                                   BigDecimal profitTarget,@RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget, HttpServletRequest request) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserPositionService.buy(stockId, buyNum, buyType, lever,profitTarget,stopTarget, request);
-        } catch (Exception e) {
-            log.error("用户下单操作 = {}", e);
-        }
-        if(null == serverResponse){
-            return ServerResponse.createByErrorMsg("Order failure");
-        }
-        return serverResponse;
+        return   this.iUserPositionService.buy(stockId, buyNum, buyType, lever,profitTarget,stopTarget, request);
     }
     //修改涨跌板
     @RequestMapping({"updateProfitTarget.do"})
@@ -125,12 +131,7 @@
     @RequestMapping({"sell.do"})
     @ResponseBody
     public ServerResponse sell(HttpServletRequest request, @RequestParam("positionSn") String positionSn) {
-        try {
-            return this.iUserPositionService.sell(positionSn, 1);
-        } catch (Exception e) {
-            log.error(e.getMessage());
-            return  ServerResponse.createByErrorMsg("Sell Fail");
-        }
+            return this.iUserPositionService.sell(positionSn, 1,request);
     }
 
 
@@ -141,7 +142,7 @@
         try {
             return this.iUserPositionService.allSell(request,positionSn);
         } catch (Exception e) {
-            return  ServerResponse.createByErrorMsg("Sell Fail");
+            return  ServerResponse.createByErrorMsg("Sell Fail",request);
         }
     }
 
@@ -207,57 +208,11 @@
         return serverResponse;
     }
 
-    @RequestMapping({"buyIndex.do"})
-    @ResponseBody
-    public ServerResponse buyIndex(@RequestParam("indexId") Integer indexId, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever,@RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget,@RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget, HttpServletRequest request) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserIndexPositionService.buyIndex(indexId, buyNum, buyType, lever,profitTarget,stopTarget, request);
-        } catch (Exception e) {
-            log.error("用户下单指数操作 = {}", e);
-        }
-        return serverResponse;
-    }
 
-    @RequestMapping({"sellIndex.do"})
-    @ResponseBody
-    public ServerResponse sellIndex(HttpServletRequest request, @RequestParam("positionSn") String positionSn) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserIndexPositionService.sellIndex(positionSn, 1);
-        } catch (Exception e) {
-            log.error("用户平仓指数操作 = {}", e);
-        }
-        return serverResponse;
-    }
 
-    //期货交易 用户下单
-    @RequestMapping({"buyFutures.do"})
-    @ResponseBody
-    public ServerResponse buyFutures(@RequestParam("FuturesId") Integer FuturesId, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever, HttpServletRequest request) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserFuturesPositionService.buyFutures(FuturesId, buyNum, buyType, lever, request);
-        } catch (Exception e) {
-            log.error("用户下单 期货 操作 = {}", e);
-        }
-        return serverResponse;
-    }
 
-    @RequestMapping({"sellFutures.do"})
-    @ResponseBody
-    public ServerResponse sellFutures(HttpServletRequest request, @RequestParam("positionSn") String positionSn) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserFuturesPositionService.sellFutures(positionSn, 1);
-        } catch (Exception e) {
-            log.error("用户平仓 期货 操作 = {}", e);
-        }
-        return serverResponse;
-    }
 
-    @Autowired
-    IUserRechargeService iUserRechargeService;
+
 
     //查询 用户信息
     @RequestMapping({"getUserInfo.do"})
@@ -295,10 +250,10 @@
     //图片上传
     @RequestMapping({"upload.do"})
     @ResponseBody
-    public ServerResponse upload(HttpSession session, @RequestParam(value = "upload_file", required = false) MultipartFile file, HttpServletRequest request) {
-        String path = request.getSession().getServletContext().getRealPath("upload");
+    public ServerResponse upload(HttpSession session, @RequestParam(value = "upload_file", required = false) MultipartFile file, HttpServletRequest request) throws IOException {
+        String path = PropertiesUtil.getProperty("ftp.address")+file.getOriginalFilename();
 
-        ServerResponse serverResponse = this.iFileUploadService.upload(file, path);
+        ServerResponse serverResponse = iFileUploadService.upload(file, path);
         if (serverResponse.isSuccess()) {
             String targetFileName = serverResponse.getData().toString();
             String url = PropertiesUtil.getProperty("ftp.server.http.prefix") + targetFileName;
@@ -310,20 +265,16 @@
 
             return ServerResponse.createBySuccess(fileMap);
         }
-        return serverResponse;
+//        convertBase64ToImage(file.getBytes().toString(),path);
+        Map fileMap = Maps.newHashMap();
+       fileMap.put("uri", file.getOriginalFilename());
+       fileMap.put("url", PropertiesUtil.getProperty("ftp.server.http.prefix")+file.getOriginalFilename());
+       return ServerResponse.createBySuccess(fileMap);
     }
 
-    //资产互转
-    @RequestMapping({"transAmt.do"})
-    @ResponseBody
-    public ServerResponse transAmt(@RequestParam("amt") Integer amt, @RequestParam("type") Integer type, HttpServletRequest request) {
-        return this.iUserService.transAmt(amt, type, request);
-    }
 
     /**
      * 用户新股列表
-     * @param pageNum
-     * @param pageSize
      * @param name
      * @param code
      * @param zt
@@ -360,22 +311,11 @@
         return this.iUserStockSubscribeService.userSubmit(id,request);
     }
 
-
-    /**
-     * vip抢筹 (涨停板买入)
-     *
-     */
     @RequestMapping({"transfer.do"})
     @ResponseBody
     public ServerResponse transfer(@RequestParam("fromType") String fromType, @RequestParam("toType") String toType,
                                    @RequestParam("amt") String amt,  HttpServletRequest request) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserService.transfer(fromType, toType, amt,request);
-        } catch (Exception e) {
-            log.error("vip抢筹下单操作出错 = {}", e);
-        }
-        return serverResponse;
+        return  iUserService.transfer(fromType, toType, amt,request);
     }
 
 
@@ -410,11 +350,26 @@
         return this.iUserPositionService.buyStockDzList( request);
     }
 
-    @RequestMapping({"editAmtPwd.do"})
+
+
+    @RequestMapping({"getMoenyLog.do"})
     @ResponseBody
-    public ServerResponse editAmtPwd( HttpServletRequest request,@RequestParam("amtPwd") String amtPwd) {
-        return this.iUserService.editAmtPwd(request,amtPwd);
+    public ServerResponse getMoenyLog(@RequestParam("type") String stockCode, HttpServletRequest request) {
+        return this.iUserService.getMoenyLog(stockCode, request);
     }
 
 
+    @RequestMapping({"currencyRate.do"})
+    @ResponseBody
+    public ServerResponse currencyRate(@RequestParam("fromType") String stockCode,
+                                       @RequestParam("toType") String toType,  HttpServletRequest request) {
+        return ServerResponse.createBySuccess(rateServices.currencyRate(EStockType.getEStockTypeByCode(stockCode), EStockType.getEStockTypeByCode(toType)));
+    }
+
+    @RequestMapping({"applyLever.do"})
+    @ResponseBody
+    public ServerResponse applyLever(ApplyLever applyLever, HttpServletRequest request) {
+        return iApplyLeverServices.applyLever(applyLever,request);
+    }
+
 }
diff --git a/src/main/java/com/nq/controller/protol/UserFundsController.java b/src/main/java/com/nq/controller/protol/UserFundsController.java
deleted file mode 100644
index 4b2fc12..0000000
--- a/src/main/java/com/nq/controller/protol/UserFundsController.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.nq.controller.protol;
-
-
-import com.nq.common.ServerResponse;
-import com.nq.pojo.FundsAppend;
-import com.nq.pojo.FundsApply;
-import com.nq.service.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-
-@Controller
-@RequestMapping({"/user/funds/"})
-public class UserFundsController {
-    private static final Logger log = LoggerFactory.getLogger(UserFundsController.class);
-
-    @Autowired
-    IFundsSettingService iFundsSettingService;
-
-    @Autowired
-    IFundsLeverService iFundsLeverService;
-
-    @Autowired
-    IFundsApplyService iFundsApplyService;
-
-    @Autowired
-    IUserFundsPositionService iUserFundsPositionService;
-
-    @Autowired
-    IFundsAppendService iFundsAppendService;
-
-    //分仓配资设置信息查询
-    @RequestMapping({"getFundsSetting.do"})
-    @ResponseBody
-    public ServerResponse getFundsSetting() {
-        return ServerResponse.createBySuccess(this.iFundsSettingService.getFundsSetting());
-    }
-
-    //查询配资类型杠杆
-    @RequestMapping({"getFundsTypeList.do"})
-    @ResponseBody
-    public ServerResponse getFundsTypeList(Integer cycleType) {
-        return this.iFundsLeverService.getFundsTypeList(cycleType);
-    }
-
-    //配资申请-添加
-    @RequestMapping({"addFundsApply.do"})
-    @ResponseBody
-    public ServerResponse addFundsApply(FundsApply fundsApply, HttpServletRequest request) throws Exception {
-        return this.iFundsApplyService.insert(fundsApply, request);
-    }
-
-    //配资申请-用户配资列表
-    @RequestMapping({"getUserApplyList.do"})
-    @ResponseBody
-    public ServerResponse getUserApplyList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "12") int pageSize, @RequestParam(value = "userId", defaultValue = "") int userId, HttpServletRequest request) {
-        return this.iFundsApplyService.getUserApplyList(pageNum, pageSize, userId, request);
-    }
-
-    //配资申请-用户操盘中子账户
-    @RequestMapping({"getUserSubaccount.do"})
-    @ResponseBody
-    public ServerResponse getUserSubaccount(HttpServletRequest request) {
-        return this.iFundsApplyService.getUserEnabledSubaccount(request);
-    }
-
-    //分仓交易-入仓
-    @RequestMapping({"buyFunds.do"})
-    @ResponseBody
-    public ServerResponse buyFunds(Integer stockId, Integer buyNum, Integer buyType, Integer lever, Integer subaccountNumber, HttpServletRequest request) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserFundsPositionService.buyFunds(stockId, buyNum, buyType, lever, subaccountNumber, request);
-        } catch (Exception e) {
-            log.error("用户下单操作 = {}", e);
-        }
-        return serverResponse;
-    }
-
-    //分仓交易-用户平仓操作
-    @RequestMapping({"sellFunds.do"})
-    @ResponseBody
-    public ServerResponse sellFunds(HttpServletRequest request, @RequestParam("positionSn") String positionSn) {
-        ServerResponse serverResponse = null;
-        try {
-            serverResponse = this.iUserFundsPositionService.sellFunds(positionSn, 1);
-        } catch (Exception e) {
-            log.error("用户平仓操作 = {}", e);
-        }
-        return serverResponse;
-    }
-
-    //分仓交易-查询所有平仓/持仓信息
-    @RequestMapping({"fundsList.do"})
-    @ResponseBody
-    public ServerResponse fundsList(HttpServletRequest request, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, @RequestParam(value = "state", required = false) Integer state, @RequestParam(value = "stockCode", required = false) String stockCode, @RequestParam(value = "stockSpell", required = false) String stockSpell) {
-        return this.iUserFundsPositionService.findMyPositionByCodeAndSpell(stockCode, stockSpell, state, request, pageNum, pageSize);
-    }
-
-    //查询子账户详情
-    @RequestMapping({"getSubaccountInfo.do"})
-    @ResponseBody
-    public ServerResponse getSubaccountInfo(Integer id) {
-        return this.iFundsApplyService.getDetail(id);
-    }
-
-    /**
-     * 配资杠杆-查询杠杆费率
-     * cycleType:周期类型:1按天、2按周、3按月
-     * lever:杠杆
-     */
-    @RequestMapping({"getLeverRateInfo.do"})
-    @ResponseBody
-    public ServerResponse getLeverRateInfo(Integer cycleType, Integer lever) {
-        return this.iFundsLeverService.getLeverRateInfo(cycleType, lever);
-    }
-
-    //配资追加申请-保存
-    @RequestMapping({"appendApply.do"})
-    @ResponseBody
-    public ServerResponse appendApply(FundsAppend fundsApply, HttpServletRequest request) throws Exception {
-        return this.iFundsAppendService.save(fundsApply, request);
-    }
-
-    //配资追加申请-查询用户追加列表
-    @RequestMapping({"getAppendList.do"})
-    @ResponseBody
-    public ServerResponse getAppendList(HttpServletRequest request, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, @RequestParam(value = "keyword", required = false) String keyword, @RequestParam(value = "status", required = false) Integer status, @RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "appendType", required = false) Integer appendType) {
-        return this.iFundsAppendService.getList(pageNum, pageSize, keyword, status, userId, appendType, request);
-    }
-
-    //根据分仓配资代码查询用户最早入仓股票
-    @RequestMapping({"findUserFundsPositionByCode.do"})
-    @ResponseBody
-    public ServerResponse findUserFundsPositionByCode(HttpServletRequest request, @RequestParam(value = "fundsCode", required = false) String fundsCode) {
-        return this.iUserFundsPositionService.findUserFundsPositionByCode(request, fundsCode);
-    }
-
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/nq/controller/protol/UserFuturesPositionController.java b/src/main/java/com/nq/controller/protol/UserFuturesPositionController.java
deleted file mode 100644
index 763a371..0000000
--- a/src/main/java/com/nq/controller/protol/UserFuturesPositionController.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.nq.controller.protol;
-
-import com.nq.common.ServerResponse;
-import com.nq.service.IUserFuturesPositionService;
-import javax.servlet.http.HttpServletRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-
-@Controller
-@RequestMapping({"/user/futures/position/"})
-public class UserFuturesPositionController {
-    private static final Logger log = LoggerFactory.getLogger(UserFuturesPositionController.class);
-
-    @Autowired
-    IUserFuturesPositionService iUserFuturesPositionService;
-
-    //查询所有期货持仓/平仓信息
-    @RequestMapping({"list.do"})
-    @ResponseBody
-    public ServerResponse list(HttpServletRequest request, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, @RequestParam(value = "state", required = false) Integer state, @RequestParam(value = "fuName", required = false) String fuName, @RequestParam(value = "fuCode", required = false) String fuCode) {
-        return this.iUserFuturesPositionService.findMyFuturesPositionByNameAndCode(fuName, fuCode, state, request, pageNum, pageSize);
-    }
-
-    //根据期货代码查询用户最早入仓股票
-    @RequestMapping({"findUserFuturesPositionByCode.do"})
-    @ResponseBody
-    public ServerResponse findUserFuturesPositionByCode(HttpServletRequest request, @RequestParam(value = "futuresGid", required = false) String futuresGid) {
-        return this.iUserFuturesPositionService.findUserFuturesPositionByCode(request, futuresGid);
-    }
-}
diff --git a/src/main/java/com/nq/controller/protol/UserIndexPositionController.java b/src/main/java/com/nq/controller/protol/UserIndexPositionController.java
deleted file mode 100644
index 67f4d3d..0000000
--- a/src/main/java/com/nq/controller/protol/UserIndexPositionController.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.nq.controller.protol;
-
-import com.nq.common.ServerResponse;
-import com.nq.service.IUserIndexPositionService;
-import javax.servlet.http.HttpServletRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-@Controller
-@RequestMapping({"/user/index/position/"})
-public class UserIndexPositionController {
-    private static final Logger log = LoggerFactory.getLogger(UserIndexPositionController.class);
-
-    @Autowired
-    IUserIndexPositionService iUserIndexPositionService;
-
-    @RequestMapping({"list.do"})
-    @ResponseBody
-    public ServerResponse list(HttpServletRequest request, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, @RequestParam(value = "state", required = false) Integer state, @RequestParam(value = "indexName", required = false) String indexName, @RequestParam(value = "indexCode", required = false) String indexCode) {
-        return this.iUserIndexPositionService.findMyIndexPositionByNameAndCode(indexName, indexCode, state, request, pageNum, pageSize);
-    }
-
-    //根据指数代码查询用户最早入仓股票
-    @RequestMapping({"findUserIndexPositionByCode.do"})
-    @ResponseBody
-    public ServerResponse findUserIndexPositionByCode(HttpServletRequest request, @RequestParam(value = "indexGid", required = false) String indexGid) {
-        return this.iUserIndexPositionService.findUserIndexPositionByCode(request, indexGid);
-    }
-}
-
diff --git a/src/main/java/com/nq/controller/protol/UserPayController.java b/src/main/java/com/nq/controller/protol/UserPayController.java
index 299cf88..c3b5986 100644
--- a/src/main/java/com/nq/controller/protol/UserPayController.java
+++ b/src/main/java/com/nq/controller/protol/UserPayController.java
@@ -2,7 +2,6 @@
 
 
 import com.nq.common.ServerResponse;
-import com.nq.pojo.UserRecharge;
 import com.nq.service.IPayChnnelServices;
 import com.nq.service.IPayService;
 import javax.servlet.http.HttpServletRequest;
@@ -51,28 +50,13 @@
 
     @RequestMapping({"flyPay.do"})
     @ResponseBody
-    public ServerResponse flyPay(@RequestParam("payType") Integer payType,
+    public ServerResponse flyPay(@RequestParam("payTypeId") Integer payType,
                                  @RequestParam("payAmt") String payAmt,
-                                 @RequestParam("img") String img,
-                                 @RequestParam("payId") String payId,
+                                 @RequestParam("img") String currency,
                                  HttpServletRequest request) {
-        log.info("发起 fly 线上支付 payType = {} payAmt = {} img = {}", new Object[]{payType, payAmt, img});
-        return this.iPayService.flyPay(payType, payAmt, img,payId, request);
+        log.info("发起 fly 线上支付 payType = {} payAmt = {} currency = {}", new Object[]{payType, payAmt, currency});
+        return this.iPayService.flyPay(payType, payAmt, currency, request);
     }
-
-    @RequestMapping({"flyPayAmt.do"})
-    @ResponseBody
-    public ServerResponse flyPayAmt(HttpServletRequest request, UserRecharge userRecharge) {
-        return this.iPayService.flyPayAmt(request,userRecharge);
-    }
-
-    @RequestMapping({"editRecharge.do"})
-    @ResponseBody
-    public ServerResponse editRecharge(UserRecharge userRecharge) {
-        return this.iPayService.editRecharge(userRecharge);
-    }
-
-
 
 
 
diff --git a/src/main/java/com/nq/controller/protol/UserPositionController.java b/src/main/java/com/nq/controller/protol/UserPositionController.java
index 03a95dd..058f0a6 100644
--- a/src/main/java/com/nq/controller/protol/UserPositionController.java
+++ b/src/main/java/com/nq/controller/protol/UserPositionController.java
@@ -40,5 +40,12 @@
      public ServerResponse findUserPositionByCode(HttpServletRequest request, @RequestParam(value = "stockCode", required = false) String stockCode) {
          return this.iUserPositionService.findUserPositionByCode(request, stockCode);
      }
+
+
+     @RequestMapping({"findByPostionSn.do"})
+     @ResponseBody
+     public ServerResponse findByPostionSn(HttpServletRequest request, @RequestParam(value = "positionSn", required = false) String stockCode) {
+         return ServerResponse.createBySuccess(iUserPositionService.findByPostionSn(stockCode));
+     }
  }
 
diff --git a/src/main/java/com/nq/controller/protol/UserRechargeController.java b/src/main/java/com/nq/controller/protol/UserRechargeController.java
index f9e77a0..4ab91c3 100644
--- a/src/main/java/com/nq/controller/protol/UserRechargeController.java
+++ b/src/main/java/com/nq/controller/protol/UserRechargeController.java
@@ -3,7 +3,6 @@
 
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
-import com.nq.pojo.UserRecharge;
 import com.nq.service.IUserRechargeService;
 import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
@@ -36,18 +35,5 @@
     public ServerResponse inMoney(String amt, String payType, HttpServletRequest request) {
         return this.iUserRechargeService.inMoney(amt, payType, request);
     }
-
-    @RequestMapping({"info.do"})
-    @ResponseBody
-    public ServerResponse info(Integer id) {
-        return this.iUserRechargeService.getInfo(id);
-    }
-
-    @RequestMapping({"editRecharge.do"})
-    @ResponseBody
-    public ServerResponse editRecharge(UserRecharge userRecharge) {
-        return this.iUserRechargeService.editRecharge(userRecharge);
-    }
-
 }
 
diff --git a/src/main/java/com/nq/controller/protol/UserWithdrawController.java b/src/main/java/com/nq/controller/protol/UserWithdrawController.java
index 934a634..4285ff9 100644
--- a/src/main/java/com/nq/controller/protol/UserWithdrawController.java
+++ b/src/main/java/com/nq/controller/protol/UserWithdrawController.java
@@ -39,18 +39,14 @@
     @ResponseBody
     public ServerResponse outMoney(@RequestParam(value = "amt") String amt,
                                    @RequestParam(value = "assetsType") String accsetType,
-                                   @RequestParam(value = "walletAddress") String walletAddress,
-                                   @RequestParam(value = "actualWithdrawal") String actualWithdrawal,
-                                   @RequestParam(value = "coinType") String coinType,
-                                   @RequestParam(value = "amtPwd") String amtPwd,
                                    HttpServletRequest request) {
         ServerResponse serverResponse = null;
         User user = this.iUserService.getCurrentRefreshUser(request);
         try {
-            serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(),accsetType,walletAddress,actualWithdrawal,coinType,amtPwd,request);
+            serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(), accsetType,request);
         } catch (Exception e) {
             log.error("出金异常 e = {}", e);
-            serverResponse = ServerResponse.createByErrorMsg("Withdrawal exception, please try again later");
+            serverResponse = ServerResponse.createByErrorMsg("提现异常,请稍后再试",request);
         }
         return serverResponse;
     }
diff --git a/src/main/java/com/nq/dao/AgentUserMapper.java b/src/main/java/com/nq/dao/AgentUserMapper.java
index 6825cb9..41dce73 100644
--- a/src/main/java/com/nq/dao/AgentUserMapper.java
+++ b/src/main/java/com/nq/dao/AgentUserMapper.java
@@ -2,11 +2,12 @@
 
 
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.nq.pojo.AgentUser;
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
 
-public interface AgentUserMapper {
+public interface AgentUserMapper extends BaseMapper<AgentUser> {
   int deleteByPrimaryKey(Integer paramInteger);
   
   int insert(AgentUser paramAgentUser);
diff --git a/src/main/java/com/nq/dao/ApplyLeverMapper.java b/src/main/java/com/nq/dao/ApplyLeverMapper.java
new file mode 100644
index 0000000..5b9f07e
--- /dev/null
+++ b/src/main/java/com/nq/dao/ApplyLeverMapper.java
@@ -0,0 +1,7 @@
+package com.nq.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nq.pojo.ApplyLever;
+
+public interface ApplyLeverMapper extends BaseMapper<ApplyLever> {
+}
diff --git a/src/main/java/com/nq/dao/DigitalCurrencyMapper.java b/src/main/java/com/nq/dao/DigitalCurrencyMapper.java
deleted file mode 100644
index b6af44d..0000000
--- a/src/main/java/com/nq/dao/DigitalCurrencyMapper.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.nq.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.nq.pojo.DigitalCurrency;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface DigitalCurrencyMapper  extends BaseMapper<DigitalCurrency> {
-}
diff --git a/src/main/java/com/nq/dao/MoneyLogMapper.java b/src/main/java/com/nq/dao/MoneyLogMapper.java
new file mode 100644
index 0000000..0748024
--- /dev/null
+++ b/src/main/java/com/nq/dao/MoneyLogMapper.java
@@ -0,0 +1,7 @@
+package com.nq.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nq.pojo.MoneyLog;
+
+public interface MoneyLogMapper  extends BaseMapper<MoneyLog> {
+}
diff --git a/src/main/java/com/nq/dao/SitePayMapper.java b/src/main/java/com/nq/dao/SitePayMapper.java
index b2dbec1..0978062 100644
--- a/src/main/java/com/nq/dao/SitePayMapper.java
+++ b/src/main/java/com/nq/dao/SitePayMapper.java
@@ -26,11 +26,6 @@
   SitePay findByChannelType(@Param("channelType") String paramString);
   
   List<SitePay> listByAdmin(@Param("channelType") String paramString);
-
-  List<SitePay> listByPayType(@Param("payType") Integer payType);
-
-  SitePay selectByChannelType(@Param("coinType") String coinType);
-
   
   List getPayInfo();
 }
diff --git a/src/main/java/com/nq/dao/StockDzMapper.java b/src/main/java/com/nq/dao/StockDzMapper.java
index da9ed28..63bd8d8 100644
--- a/src/main/java/com/nq/dao/StockDzMapper.java
+++ b/src/main/java/com/nq/dao/StockDzMapper.java
@@ -4,6 +4,7 @@
 import com.nq.pojo.StockDz;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -15,6 +16,8 @@
 public interface StockDzMapper extends BaseMapper<StockDz> {
     List<StockDz> findStockListByKeyWords(@Param("keyWords") String paramString1);
 
+    BigDecimal getPrice(String stockCode);
+
 }
 
 
diff --git a/src/main/java/com/nq/dao/StockMapper.java b/src/main/java/com/nq/dao/StockMapper.java
index 60ffef9..2cd7178 100644
--- a/src/main/java/com/nq/dao/StockMapper.java
+++ b/src/main/java/com/nq/dao/StockMapper.java
@@ -2,8 +2,6 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.nq.pojo.Stock;
-
-import java.util.Collection;
 import java.util.List;
 
 import org.apache.ibatis.annotations.Mapper;
@@ -56,11 +54,4 @@
 
 
   List findStockByType(@Param("orderBy") String orderBy, @Param("stockType") String stockType,@Param("keyWords") String keyWords);
-
-  List dailyLimitQuery(@Param("keyWords") String paramString1,
-                       @Param("stockPlate") String paramString2,
-                       @Param("stockType") String paramString3,
-                       @Param("show") Integer paramInteger,
-                       @Param("pageNum") Integer pageNum,
-                       @Param("pageSize") Integer pageSize);
 }
\ No newline at end of file
diff --git a/src/main/java/com/nq/dao/StockSettingMapper.java b/src/main/java/com/nq/dao/StockSettingMapper.java
new file mode 100644
index 0000000..473695d
--- /dev/null
+++ b/src/main/java/com/nq/dao/StockSettingMapper.java
@@ -0,0 +1,7 @@
+package com.nq.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nq.pojo.StockSetting;
+
+public interface StockSettingMapper  extends BaseMapper<StockSetting> {
+}
diff --git a/src/main/java/com/nq/dao/StockTimeSettingMapper.java b/src/main/java/com/nq/dao/StockTimeSettingMapper.java
new file mode 100644
index 0000000..ec008f7
--- /dev/null
+++ b/src/main/java/com/nq/dao/StockTimeSettingMapper.java
@@ -0,0 +1,7 @@
+package com.nq.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nq.pojo.StockTimeSetting;
+
+public interface StockTimeSettingMapper extends BaseMapper<StockTimeSetting> {
+}
diff --git a/src/main/java/com/nq/dao/UserMapper.java b/src/main/java/com/nq/dao/UserMapper.java
index a686793..4d89365 100644
--- a/src/main/java/com/nq/dao/UserMapper.java
+++ b/src/main/java/com/nq/dao/UserMapper.java
@@ -16,8 +16,7 @@
 
     int insert(User paramUser);
 
-    int insertSelective(User paramUser);
-
+    int updateByPrimaryKey(User paramUser);
 
     User findByPhone(String paramString);
 
@@ -25,7 +24,7 @@
 
     List listByAgent(@Param("realName") String paramString1, @Param("phone") String paramString2, @Param("searchId") Integer paramInteger1, @Param("accountType") Integer paramInteger2);
 
-    List listByAdmin(@Param("realName") String paramString1, @Param("phone") String paramString2, @Param("searchId") Integer paramInteger1, @Param("accountType") Integer paramInteger2);
+    List listByAdmin(@Param("realName") String paramString1, @Param("phone") String paramString2, @Param("searchId") Integer paramInteger1, @Param("accountType") Integer paramInteger2,@Param("id") String id);
 
     int CountUserSize(Integer paramInteger);
 
@@ -51,10 +50,5 @@
 
 
     int queryAgintSumTodayRegCount(Integer id);
-
-    BigDecimal getMarketValue(@Param("user_id") Integer user_id);
-
-    Float getProfit(@Param("user_id") Integer user_id);
-
 
 }
diff --git a/src/main/java/com/nq/dao/UserOptionLogMapper.java b/src/main/java/com/nq/dao/UserOptionLogMapper.java
new file mode 100644
index 0000000..aa2fa7f
--- /dev/null
+++ b/src/main/java/com/nq/dao/UserOptionLogMapper.java
@@ -0,0 +1,13 @@
+package com.nq.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nq.pojo.UserAssets;
+import com.nq.pojo.UserOptionLog;
+import com.nq.vo.user.UserOptionLogVO;
+
+import java.util.List;
+
+public interface UserOptionLogMapper extends BaseMapper<UserOptionLog> {
+
+    List<UserOptionLogVO> selective(Integer userId);
+}
diff --git a/src/main/java/com/nq/dao/UserRechargeMapper.java b/src/main/java/com/nq/dao/UserRechargeMapper.java
index b341a5f..3dfe9ad 100644
--- a/src/main/java/com/nq/dao/UserRechargeMapper.java
+++ b/src/main/java/com/nq/dao/UserRechargeMapper.java
@@ -9,7 +9,7 @@
 
 public interface UserRechargeMapper extends BaseMapper<UserRecharge> {
 
-  int insert(UserRecharge paramUserRecharge);
+//  int insert(UserRecharge paramUserRecharge);
   
   int insertSelective(UserRecharge paramUserRecharge);
   
diff --git a/src/main/java/com/nq/dao/UserStockSubscribeMapper.java b/src/main/java/com/nq/dao/UserStockSubscribeMapper.java
index fd3c87b..a7b7cc0 100644
--- a/src/main/java/com/nq/dao/UserStockSubscribeMapper.java
+++ b/src/main/java/com/nq/dao/UserStockSubscribeMapper.java
@@ -51,7 +51,7 @@
      * @author lr
      * @date 2020/09/11
      **/
-    List<UserStockSubscribe> pageList(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize, @Param("keyword") String keyword,@Param("type") Integer type);
+    List<UserStockSubscribe> pageList(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize, @Param("keyword") String keyword);
 
     /**
      * [查询] 分页查询 count
diff --git a/src/main/java/com/nq/dao/UserWithdrawMapper.java b/src/main/java/com/nq/dao/UserWithdrawMapper.java
index a30197b..b39e7c0 100644
--- a/src/main/java/com/nq/dao/UserWithdrawMapper.java
+++ b/src/main/java/com/nq/dao/UserWithdrawMapper.java
@@ -1,14 +1,14 @@
 package com.nq.dao;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nq.pojo.UserRecharge;
 import com.nq.pojo.UserWithdraw;
 import java.math.BigDecimal;
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
 
-public interface UserWithdrawMapper {
+public interface UserWithdrawMapper extends BaseMapper<UserWithdraw> {
   int deleteByPrimaryKey(Integer paramInteger);
-  
-  int insert(UserWithdraw paramUserWithdraw);
   
   int insertSelective(UserWithdraw paramUserWithdraw);
   
diff --git a/src/main/java/com/nq/enums/EStockType.java b/src/main/java/com/nq/enums/EStockType.java
index d4d0773..33c5649 100644
--- a/src/main/java/com/nq/enums/EStockType.java
+++ b/src/main/java/com/nq/enums/EStockType.java
@@ -10,13 +10,15 @@
 public enum EStockType {
 
 
-    IN("IN","印度股票","14", PropertiesUtil.getProperty("IN_HTTP_API"),PropertiesUtil.getProperty("IN_KEY")),
-    US("US","美国股票","5",PropertiesUtil.getProperty("US_HTTP_API"),PropertiesUtil.getProperty("US_KEY")),
-    HK("HK","香港股票","39",PropertiesUtil.getProperty("HK_HTTP_API"),PropertiesUtil.getProperty("HK_KEY")),
-    MAS("MAS","马来西亚股票","42",PropertiesUtil.getProperty("MAS_HTTP_API"),PropertiesUtil.getProperty("MAS_KEY")),
-    TH("TH","泰国股票","41",PropertiesUtil.getProperty("TH_HTTP_API"),PropertiesUtil.getProperty("TH_KEY")),
-    HG("HG","韩国股票","11",PropertiesUtil.getProperty("HG_HTTP_API"),PropertiesUtil.getProperty("HG_KEY")),
-    SZHB("SZHB","数字货币","41",PropertiesUtil.getProperty("SZHB_HTTP_API"),PropertiesUtil.getProperty("SZHB_KEY"));
+
+    US("US","美国股票","5",PropertiesUtil.getProperty("US_HTTP_API"),PropertiesUtil.getProperty("US_KEY"),"USD","$"),
+//    HK("HK","香港股票","39",PropertiesUtil.getProperty("HK_HTTP_API"),PropertiesUtil.getProperty("HK_KEY"),"HKD","HK$"),
+//    MAS("MAS","马来西亚股票","42",PropertiesUtil.getProperty("MAS_HTTP_API"),PropertiesUtil.getProperty("MAS_KEY"),"MYR","RM");
+
+    IN("IN","印度股票","14", PropertiesUtil.getProperty("IN_HTTP_API"),PropertiesUtil.getProperty("IN_KEY"),"INR","₹");
+//    TH("TH","泰国股票","41",PropertiesUtil.getProperty("TH_HTTP_API"),PropertiesUtil.getProperty("TH_KEY")),
+//    HG("HG","韩国股票","11",PropertiesUtil.getProperty("HG_HTTP_API"),PropertiesUtil.getProperty("HG_KEY")),
+//    SZHB("SZHB","数字货币","41",PropertiesUtil.getProperty("SZHB_HTTP_API"),PropertiesUtil.getProperty("SZHB_KEY"));
     private String code;
     private String typeDesc;
     public String contryId;
@@ -24,28 +26,29 @@
     public String stockUrl;
     public  String stockKey;
 
+    private String symbol;
 
-    EStockType(String code, String typeDesc, String contryId, String stockUrl, String stockKey) {
+    private String symbol1;
+
+
+    EStockType(String code, String typeDesc, String contryId, String stockUrl, String stockKey,String  symbol,String symbol1) {
         this.code = code;
         this.typeDesc = typeDesc;
         this.contryId = contryId;
         this.stockUrl = stockUrl;
         this.stockKey = stockKey;
+        this.symbol = symbol;
+        this.symbol1 = symbol1;
     }
 
     public static EStockType getEStockTypeByCode(String code){
         if(EStockType.US.getCode().equals(code)){
             return US;
+
         }else if(EStockType.IN.getCode().equals(code)){
             return  IN;
-        }else if(EStockType.HK.getCode().equals(code)){
-            return  HK;
-        }else if(EStockType.MAS.getCode().equals(code)){
-            return  MAS;
-        }else if(EStockType.SZHB.getCode().equals(code)){
-            return  SZHB;
-        }else {
-            return TH;
+        }else{
+            return  US;
         }
     }
 
@@ -65,6 +68,22 @@
         return code;
     }
 
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public String getSymbol1() {
+        return symbol1;
+    }
+
+    public void setSymbol1(String symbol1) {
+        this.symbol1 = symbol1;
+    }
+
     public String getTypeDesc() {
         return typeDesc;
     }
diff --git a/src/main/java/com/nq/enums/EUserAssets.java b/src/main/java/com/nq/enums/EUserAssets.java
index 7384a33..4036884 100644
--- a/src/main/java/com/nq/enums/EUserAssets.java
+++ b/src/main/java/com/nq/enums/EUserAssets.java
@@ -12,6 +12,7 @@
 
     CLOSE_POSITION_RETURN_SECURITY_DEPOSIT("CLOSE_POSITION_RETURN_SECURITY","平仓返回保证金"),
     CLOSE_POSITION("CLOSE_POSITION","平仓"),
+    CONSTRAINT_CLOSE_POSITION("CONSTRAINT_CLOSE_POSITION","强制平仓"),
     BUY("BUY","购买"),
     WITHDRAW("WITHDRAW","提现"),
 
diff --git a/src/main/java/com/nq/pojo/AgentUser.java b/src/main/java/com/nq/pojo/AgentUser.java
index ed5367a..c731a3a 100644
--- a/src/main/java/com/nq/pojo/AgentUser.java
+++ b/src/main/java/com/nq/pojo/AgentUser.java
@@ -1,5 +1,7 @@
 package com.nq.pojo;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -8,6 +10,7 @@
 
 @Data
 public class AgentUser {
+    @TableId(value = "id",type = IdType.AUTO)
     private Integer id;
     private String agentName;
     private String agentPwd;
diff --git a/src/main/java/com/nq/pojo/ApplyLever.java b/src/main/java/com/nq/pojo/ApplyLever.java
new file mode 100644
index 0000000..da1a908
--- /dev/null
+++ b/src/main/java/com/nq/pojo/ApplyLever.java
@@ -0,0 +1,37 @@
+package com.nq.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class ApplyLever {
+
+    @TableId(value = "id",type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     *
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    // 用户id
+    private String userId;
+
+    // 用户手机号码
+    private String phone;
+
+    // 杠杆
+    private String lever;
+
+
+    private String state;
+
+    private String descs;
+
+
+}
diff --git a/src/main/java/com/nq/pojo/DigitalCurrency.java b/src/main/java/com/nq/pojo/DigitalCurrency.java
deleted file mode 100644
index 9f3eb65..0000000
--- a/src/main/java/com/nq/pojo/DigitalCurrency.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.nq.pojo;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import lombok.Data;
-
-/**
- * @program: dabao
- * @description: 数字货币
- * @create: 2024-04-07 14:54
- **/
-@Data
-public class DigitalCurrency {
-
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    /**
-     * 币种
-     */
-    private String currency;
-
-    /**
-     * 汇率
-     */
-    private double exchangeRate;
-
-    /**
-     * 图片
-     */
-    private double img;
-
-}
diff --git a/src/main/java/com/nq/pojo/MoneyLog.java b/src/main/java/com/nq/pojo/MoneyLog.java
new file mode 100644
index 0000000..162a90d
--- /dev/null
+++ b/src/main/java/com/nq/pojo/MoneyLog.java
@@ -0,0 +1,28 @@
+package com.nq.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MoneyLog {
+
+    @TableId(value = "id",type = IdType.AUTO)
+    private int id;
+    private String type;
+    private String amount;
+    private String descs;
+    private String beFore;
+    private String after;
+    private String accectType;
+    private String userId;
+
+    private String symbol;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+
+}
diff --git a/src/main/java/com/nq/pojo/SitePay.java b/src/main/java/com/nq/pojo/SitePay.java
index a5a6f4c..f05271f 100644
--- a/src/main/java/com/nq/pojo/SitePay.java
+++ b/src/main/java/com/nq/pojo/SitePay.java
@@ -1,8 +1,6 @@
 package com.nq.pojo;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
-import org.codehaus.jackson.annotate.JsonIgnore;
 
 import java.beans.ConstructorProperties;
 import java.math.BigDecimal;
@@ -10,7 +8,6 @@
 @Data
 public class SitePay {
     private Integer id;
-    @JsonProperty
     private Integer cType;
     private String formUrl;
     private String formCode;
@@ -31,12 +28,9 @@
 
     private String assetsType;
 
-    private String bankAddress;
+    private String bankNumber;
 
-    /**
-     * 汇率
-     */
-    private double exchangeRate;
+
 
 }
 
diff --git a/src/main/java/com/nq/pojo/Stock.java b/src/main/java/com/nq/pojo/Stock.java
index 75efddf..06b7738 100644
--- a/src/main/java/com/nq/pojo/Stock.java
+++ b/src/main/java/com/nq/pojo/Stock.java
@@ -2,7 +2,6 @@
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -29,29 +28,6 @@
     private BigDecimal increaseRatio;
     //数据源
     private Integer dataBase;
-
-    @TableField(exist = false)
-    private Integer type;
-
-    @TableField(exist = false)
-    private BigDecimal price;
-
-    @TableField(exist = false)
-    private Date subscribeTime;
-
-    @TableField(exist = false)
-    private Date subscriptionTime;
-
-    @TableField(exist = false)
-    private Date listDate;
-
-    @TableField(exist = false)
-    private Long orderNumber;
-
-    @TableField(exist = false)
-    private Long orderMinNumber;
-
-    
     @Override
     public String toString() {
         return "Stock{" +
diff --git a/src/main/java/com/nq/pojo/StockOption.java b/src/main/java/com/nq/pojo/StockOption.java
index 8234d45..38323be 100644
--- a/src/main/java/com/nq/pojo/StockOption.java
+++ b/src/main/java/com/nq/pojo/StockOption.java
@@ -1,6 +1,9 @@
 package com.nq.pojo;
+import lombok.Data;
+
 import java.util.Date;
 
+@Data
 public class StockOption {
     private Integer id;
     private Integer userId;
@@ -11,82 +14,5 @@
     private String stockGid;
     private Integer isLock;
 
-    public StockOption(Integer id, Integer userId, Integer stockId, Date addTime, String stockCode, String stockName, String stockGid, Integer isLock) {
-        this.id = id;
-        this.userId = userId;
-        this.stockId = stockId;
-        this.addTime = addTime;
-        this.stockCode = stockCode;
-        this.stockName = stockName;
-        this.stockGid = stockGid;
-        this.isLock = isLock;
-    }
 
-
-    public StockOption() {
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getStockId() {
-        return stockId;
-    }
-
-    public void setStockId(Integer stockId) {
-        this.stockId = stockId;
-    }
-
-    public Date getAddTime() {
-        return addTime;
-    }
-
-    public void setAddTime(Date addTime) {
-        this.addTime = addTime;
-    }
-
-    public String getStockCode() {
-        return stockCode;
-    }
-
-    public void setStockCode(String stockCode) {
-        this.stockCode = stockCode;
-    }
-
-    public String getStockName() {
-        return stockName;
-    }
-
-    public void setStockName(String stockName) {
-        this.stockName = stockName;
-    }
-
-    public String getStockGid() {
-        return stockGid;
-    }
-
-    public void setStockGid(String stockGid) {
-        this.stockGid = stockGid;
-    }
-
-    public Integer getIsLock() {
-        return isLock;
-    }
-
-    public void setIsLock(Integer isLock) {
-        this.isLock = isLock;
-    }
 }
diff --git a/src/main/java/com/nq/pojo/StockSetting.java b/src/main/java/com/nq/pojo/StockSetting.java
new file mode 100644
index 0000000..50c712a
--- /dev/null
+++ b/src/main/java/com/nq/pojo/StockSetting.java
@@ -0,0 +1,25 @@
+package com.nq.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+@Data
+public class StockSetting {
+    @TableId(type = IdType.AUTO,value = "id")
+    private Integer id;
+    // 股票code
+    private String stockCode;
+    // 股票名称
+    private String stockName;
+    // 股票调价开始时间 格式 HH:mm 时分
+    private String startTime;
+    // 股票调价结束时间 格式 HH:mm 时分
+    private String endTime;
+    // 0 为指定价格  1为百分比调价格
+    private String type;
+    // type  = 0 价格  1为百分比
+    private String price;
+    //修改后的盘前价格 未修改过则为空
+    private String nowPrice;
+}
diff --git a/src/main/java/com/nq/pojo/StockSubscribe.java b/src/main/java/com/nq/pojo/StockSubscribe.java
index badad2d..9319a0b 100644
--- a/src/main/java/com/nq/pojo/StockSubscribe.java
+++ b/src/main/java/com/nq/pojo/StockSubscribe.java
@@ -47,10 +47,10 @@
      */
     private Long orderNumber;
 
-    // 最小购买数量
-    private Long orderMinNumber;
-
-
+    /**
+     * 最低数量
+     */
+    private Long minOrderNumber;
 
     /**
      * 顯示状态
@@ -61,16 +61,11 @@
      */
     private Integer isLock;
     /**
-     * 申购开始日期
-     */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date subscribeTime;
-
-    /**
      * 申购截至日期
      */
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date subscribeEndTime;
+    private Date subscribeTime;
 
     /**
      * 上市日期
@@ -78,15 +73,11 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date listDate;
     /**
-     * 认缴时间
+     * 中签日期
      */
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date subscriptionTime;
-    /**
-     * 认缴结束时间
-     */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date subscriptionEndTime;
 
     /**
      * 类型
@@ -94,7 +85,8 @@
      */
     private Integer type;
 
-
-
+    /**
+     * 是否上市
+    */
     private static final long serialVersionUID = 1L;
 }
\ No newline at end of file
diff --git a/src/main/java/com/nq/pojo/StockTimeSetting.java b/src/main/java/com/nq/pojo/StockTimeSetting.java
new file mode 100644
index 0000000..e901628
--- /dev/null
+++ b/src/main/java/com/nq/pojo/StockTimeSetting.java
@@ -0,0 +1,23 @@
+package com.nq.pojo;
+
+
+import lombok.Data;
+
+@Data
+public class StockTimeSetting {
+    private String id;
+    // 股票类型  可以不显示
+    private String accetsType;
+    // 股票类型 做显示
+    private String accetsDesc;
+    // 上午开始时间
+    private String amStartTime;
+    // 上午结束时间
+    private String amEndTime;
+    // 下午开始时间
+    private String pmStartTime;
+    // 下午结束时间
+    private String pmEndTime;
+    // 这是星期几开始交易时间 使用盗号隔开 1,2,3,4,5,6,7
+    private String weekDay;
+}
diff --git a/src/main/java/com/nq/pojo/User.java b/src/main/java/com/nq/pojo/User.java
index e5071bd..797867a 100644
--- a/src/main/java/com/nq/pojo/User.java
+++ b/src/main/java/com/nq/pojo/User.java
@@ -21,9 +21,9 @@
     private String realName;
     private String idCard;
     private Integer accountType;
-    private BigDecimal djzj;
 
 
+    private String lever;
     private String recomPhone;
     private Integer isLock;
     private Integer isLogin;
@@ -37,8 +37,6 @@
     private String authMsg;
     private String withdrawalPwd;
     private String vaildNumber;
-    private String email;
-    private BigDecimal enableAmt;
-    private String amtPwd;
 
+    private String email;
 }
diff --git a/src/main/java/com/nq/pojo/UserAssets.java b/src/main/java/com/nq/pojo/UserAssets.java
index 64bc9b8..2650c0c 100644
--- a/src/main/java/com/nq/pojo/UserAssets.java
+++ b/src/main/java/com/nq/pojo/UserAssets.java
@@ -34,8 +34,6 @@
     //盈亏
     private BigDecimal profitAndLoss;
 
-//    private Float profit;
-
     // 账号类型
     private String  accectType;
 
@@ -50,6 +48,6 @@
     // 冻结金额
     private BigDecimal freezeMoney;
 
-    //盈亏正负
-    private int sign;
+    // 累计盈亏 0 正 1 负
+    private Integer isZf;
 }
diff --git a/src/main/java/com/nq/pojo/UserOptionLog.java b/src/main/java/com/nq/pojo/UserOptionLog.java
new file mode 100644
index 0000000..b2e65a2
--- /dev/null
+++ b/src/main/java/com/nq/pojo/UserOptionLog.java
@@ -0,0 +1,36 @@
+package com.nq.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.joda.time.DateTime;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+@Data
+@TableName("user_option_log")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserOptionLog {
+
+    @TableId(type = IdType.AUTO,value = "id")
+    private Integer id;
+
+    private BigDecimal money;
+
+    private Integer type;
+
+    private Integer userId;
+
+    private Integer userAccectId;
+
+    private Date createTime;
+
+}
diff --git a/src/main/java/com/nq/pojo/UserRecharge.java b/src/main/java/com/nq/pojo/UserRecharge.java
index ffcf883..5604920 100644
--- a/src/main/java/com/nq/pojo/UserRecharge.java
+++ b/src/main/java/com/nq/pojo/UserRecharge.java
@@ -44,34 +44,17 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @Excel(name = "支付时间", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd HH:mm:ss")
     private Date payTime;
-
     /*支付通道主键id*/
     private Integer payId;
-
-    private Integer payType;
-
-
     /**
      * 手机号码
      * */
     @Transient
     private String userPhone;
-
-
-
     private String img;
-
     private String channelName;
-
     private String assetsType;
 
-
-    private String walletAddress;
-    private String payName;
-    private String bankNum;
-    private String routeNum;
-    private String payMail;
-    private String payPhone;
 
 
 
diff --git a/src/main/java/com/nq/pojo/UserStockSubscribe.java b/src/main/java/com/nq/pojo/UserStockSubscribe.java
index 38f514f..71a20cc 100644
--- a/src/main/java/com/nq/pojo/UserStockSubscribe.java
+++ b/src/main/java/com/nq/pojo/UserStockSubscribe.java
@@ -83,6 +83,7 @@
      * 中签数量
      *
      */
+
     private Integer applyNumber;
     private Integer type;
     /**
diff --git a/src/main/java/com/nq/pojo/UserWithdraw.java b/src/main/java/com/nq/pojo/UserWithdraw.java
index f0c87c9..1a43f96 100644
--- a/src/main/java/com/nq/pojo/UserWithdraw.java
+++ b/src/main/java/com/nq/pojo/UserWithdraw.java
@@ -1,6 +1,9 @@
 package com.nq.pojo;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -11,6 +14,7 @@
 @Data
 public class UserWithdraw {
 
+    @TableId(type= IdType.AUTO)
     private Integer id;
     @Excel(name = "用户id")
     private Integer userId;
@@ -41,41 +45,45 @@
     private BigDecimal withFee;
     @Excel(name = "原因")
     private String withMsg;
-    @Excel(name = "用户手机号")
-    private String userPhone;
-    @Excel(name = "钱包地址")
-    private String walletAddress;
-    @Excel(name = "实际出金金额")
-    private BigDecimal actualWithdrawal;
-    private String coinType;
 
-    public UserWithdraw(Integer id, Integer userId, String nickName, Integer agentId, BigDecimal withAmt, Date applyTime, Date transTime, String withName, String bankNo, String bankName, String bankAddress, Integer withStatus, BigDecimal withFee, String withMsg, String userPhone, String walletAddress, BigDecimal actualWithdrawal, String coinType) {
+    @TableField(exist = false)
+    private String userPhone;
+    private String assetsType;
+
+    public UserWithdraw(Integer id, Integer userId, String nickName, Integer agentId, BigDecimal withAmt, Date applyTime, Date transTime, String withName, String bankNo, String bankName, String bankAddress, Integer withStatus, BigDecimal withFee, String withMsg) {
+
         this.id = id;
+
         this.userId = userId;
+
         this.nickName = nickName;
+
         this.agentId = agentId;
+
         this.withAmt = withAmt;
+
         this.applyTime = applyTime;
+
         this.transTime = transTime;
+
         this.withName = withName;
+
         this.bankNo = bankNo;
+
         this.bankName = bankName;
+
         this.bankAddress = bankAddress;
+
         this.withStatus = withStatus;
+
         this.withFee = withFee;
+
         this.withMsg = withMsg;
-        this.userPhone = userPhone;
-        this.walletAddress = walletAddress;
-        this.actualWithdrawal = actualWithdrawal;
-        this.coinType = coinType;
+
     }
 
     public UserWithdraw() {
     }
-
-    public String getWalletAddress(){return walletAddress;}
-
-    public void setWalletAddress(String walletAddress){this.walletAddress = walletAddress;}
 
     public Integer getId() {
         return id;
diff --git a/src/main/java/com/nq/pojo/reponse/RPageInfo.java b/src/main/java/com/nq/pojo/reponse/RPageInfo.java
new file mode 100644
index 0000000..b8a6e1f
--- /dev/null
+++ b/src/main/java/com/nq/pojo/reponse/RPageInfo.java
@@ -0,0 +1,20 @@
+package com.nq.pojo.reponse;
+
+import com.github.pagehelper.PageInfo;
+import com.nq.pojo.Stock;
+
+import java.util.List;
+
+public class RPageInfo  extends PageInfo {
+
+    private String stockType;
+
+
+    public String getStockType() {
+        return stockType;
+    }
+
+    public void setStockType(String stockType) {
+        this.stockType = stockType;
+    }
+}
diff --git a/src/main/java/com/nq/pojo/reponse/RUserAssets.java b/src/main/java/com/nq/pojo/reponse/RUserAssets.java
index 777241c..25aba7b 100644
--- a/src/main/java/com/nq/pojo/reponse/RUserAssets.java
+++ b/src/main/java/com/nq/pojo/reponse/RUserAssets.java
@@ -52,4 +52,7 @@
     private String symbol;
 
     private String symbolCode;
+
+    // 累计盈亏 0 正 1 负
+    private Integer isZf;
 }
diff --git a/src/main/java/com/nq/service/DigitalCurrencyService.java b/src/main/java/com/nq/service/DigitalCurrencyService.java
deleted file mode 100644
index 8ef2950..0000000
--- a/src/main/java/com/nq/service/DigitalCurrencyService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.nq.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.nq.pojo.DigitalCurrency;
-
-public interface DigitalCurrencyService extends IService<DigitalCurrency> {
-}
diff --git a/src/main/java/com/nq/service/IApplyLeverServices.java b/src/main/java/com/nq/service/IApplyLeverServices.java
new file mode 100644
index 0000000..790ef55
--- /dev/null
+++ b/src/main/java/com/nq/service/IApplyLeverServices.java
@@ -0,0 +1,17 @@
+package com.nq.service;
+
+import com.nq.common.ServerResponse;
+import com.nq.pojo.ApplyLever;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IApplyLeverServices {
+
+    ServerResponse  applyLever(ApplyLever applyLever, HttpServletRequest request);
+
+
+    ServerResponse  examineApplyLever(String  id,String states, HttpServletRequest request);
+
+
+    ServerResponse  queryApplyLever(String phone, Integer page,Integer pageSize,HttpServletRequest request);
+}
diff --git a/src/main/java/com/nq/service/IPayService.java b/src/main/java/com/nq/service/IPayService.java
index ed5eb66..9e42029 100644
--- a/src/main/java/com/nq/service/IPayService.java
+++ b/src/main/java/com/nq/service/IPayService.java
@@ -2,7 +2,6 @@
 
 
 import com.nq.common.ServerResponse;
-import com.nq.pojo.UserRecharge;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
@@ -19,14 +18,11 @@
 
   ServerResponse juhenewpayNotify(HttpServletRequest paramHttpServletRequest) throws UnsupportedEncodingException;
 
-  ServerResponse flyPay(Integer paramString1, String paramString2, String paramString3,String payId, HttpServletRequest paramHttpServletRequest);
-  ServerResponse flyPayAmt(HttpServletRequest paramHttpServletRequest,UserRecharge userRecharge);
+  ServerResponse flyPay(Integer paramString1, String paramString2, String paramString3, HttpServletRequest paramHttpServletRequest);
   
   ServerResponse flyNotify(HttpServletRequest paramHttpServletRequest) throws IOException;
 
   ServerResponse flyNotify(HttpServletRequest paramHttpServletRequest,String key) throws IOException;
 
   ServerResponse withdrawNotify(HttpServletRequest paramHttpServletRequest,String key) throws IOException;
-
-  ServerResponse editRecharge(UserRecharge userRecharge);
 }
diff --git a/src/main/java/com/nq/service/IPriceServices.java b/src/main/java/com/nq/service/IPriceServices.java
new file mode 100644
index 0000000..cd479b3
--- /dev/null
+++ b/src/main/java/com/nq/service/IPriceServices.java
@@ -0,0 +1,12 @@
+package com.nq.service;
+
+import java.math.BigDecimal;
+
+public interface IPriceServices {
+
+    BigDecimal getNowPrice(String stockCode);
+
+    BigDecimal getNowPrice(String stockCode, String stockType);
+
+    BigDecimal getPrice(String stockCode);
+}
diff --git a/src/main/java/com/nq/service/IRateServices.java b/src/main/java/com/nq/service/IRateServices.java
new file mode 100644
index 0000000..b65f29c
--- /dev/null
+++ b/src/main/java/com/nq/service/IRateServices.java
@@ -0,0 +1,11 @@
+package com.nq.service;
+
+import com.nq.enums.EStockType;
+
+import java.math.BigDecimal;
+
+public interface IRateServices {
+
+    public BigDecimal currencyRate(EStockType fromStockType,EStockType tofromStockType);
+
+}
diff --git a/src/main/java/com/nq/service/ISiteAdminService.java b/src/main/java/com/nq/service/ISiteAdminService.java
index 7b185bf..204153f 100644
--- a/src/main/java/com/nq/service/ISiteAdminService.java
+++ b/src/main/java/com/nq/service/ISiteAdminService.java
@@ -27,4 +27,8 @@
   ServerResponse count();
 
   ServerResponse deleteAdmin(Integer adminId);
+
+  ServerResponse moneyCount(String agentId,String startTime, String entTime);
+
+  ServerResponse totalAgencyFunds(String agentId);
 }
diff --git a/src/main/java/com/nq/service/ISitePayService.java b/src/main/java/com/nq/service/ISitePayService.java
index 96ad9c9..2cb8dff 100644
--- a/src/main/java/com/nq/service/ISitePayService.java
+++ b/src/main/java/com/nq/service/ISitePayService.java
@@ -13,9 +13,7 @@
   
   ServerResponse del(Integer paramInteger);
   
-  ServerResponse getPayInfo(Integer type);
+  ServerResponse getPayInfo();
   
   ServerResponse getPayInfoById(Integer paramInteger);
-
-  ServerResponse listByPayType(Integer id);
 }
diff --git a/src/main/java/com/nq/service/ISiteUserOptionLogService.java b/src/main/java/com/nq/service/ISiteUserOptionLogService.java
new file mode 100644
index 0000000..acdabd0
--- /dev/null
+++ b/src/main/java/com/nq/service/ISiteUserOptionLogService.java
@@ -0,0 +1,13 @@
+package com.nq.service;
+
+
+import com.github.pagehelper.PageInfo;
+import com.nq.common.ServerResponse;
+import com.nq.pojo.User;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface ISiteUserOptionLogService {
+  ServerResponse<PageInfo> list( Integer agentId,Integer userId, int pageNum, int pageSize);
+  
+}
diff --git a/src/main/java/com/nq/service/IStockService.java b/src/main/java/com/nq/service/IStockService.java
index 7b22a6e..218a186 100644
--- a/src/main/java/com/nq/service/IStockService.java
+++ b/src/main/java/com/nq/service/IStockService.java
@@ -3,9 +3,6 @@
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
 import com.nq.pojo.Stock;
-import com.nq.pojo.StockSubscribe;
-import com.nq.vo.stock.StockSubscribeListParamVo;
-
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -108,7 +105,4 @@
 
 
     ServerResponse getOptionStock(HttpServletRequest request);
-
-  ServerResponse getStockSubscribeList(StockSubscribeListParamVo vo);
-
 }
diff --git a/src/main/java/com/nq/service/IStockSettingServices.java b/src/main/java/com/nq/service/IStockSettingServices.java
new file mode 100644
index 0000000..71035b0
--- /dev/null
+++ b/src/main/java/com/nq/service/IStockSettingServices.java
@@ -0,0 +1,17 @@
+package com.nq.service;
+
+import com.nq.common.ServerResponse;
+import com.nq.pojo.StockSetting;
+
+public interface IStockSettingServices {
+
+    ServerResponse updateStockSetting(StockSetting stockSetting);
+
+
+    ServerResponse saveStockSetting(StockSetting stockSetting);
+
+
+    ServerResponse deleteStockSetting(Integer id);
+
+    ServerResponse queryAll(String stockCode);
+}
diff --git a/src/main/java/com/nq/service/IStockTimeSettingServices.java b/src/main/java/com/nq/service/IStockTimeSettingServices.java
new file mode 100644
index 0000000..11fe78f
--- /dev/null
+++ b/src/main/java/com/nq/service/IStockTimeSettingServices.java
@@ -0,0 +1,13 @@
+package com.nq.service;
+
+import com.nq.common.ServerResponse;
+import com.nq.pojo.StockTimeSetting;
+
+public interface IStockTimeSettingServices {
+
+    ServerResponse updateStockTimeSetting(StockTimeSetting stockTimeSetting);
+
+
+    ServerResponse queryStockTimeSetting();
+
+}
diff --git a/src/main/java/com/nq/service/ITradingHourService.java b/src/main/java/com/nq/service/ITradingHourService.java
new file mode 100644
index 0000000..4a3d6c1
--- /dev/null
+++ b/src/main/java/com/nq/service/ITradingHourService.java
@@ -0,0 +1,8 @@
+package com.nq.service;
+
+public interface ITradingHourService {
+    Boolean timeCheck(String stockCode);
+    Boolean weekDayeCheck(String stockCode);
+
+    Boolean timeCheck();
+}
diff --git a/src/main/java/com/nq/service/IUserAssetsServices.java b/src/main/java/com/nq/service/IUserAssetsServices.java
index 56ce8eb..0d5998f 100644
--- a/src/main/java/com/nq/service/IUserAssetsServices.java
+++ b/src/main/java/com/nq/service/IUserAssetsServices.java
@@ -48,5 +48,4 @@
     Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType);
 
 
-    UserAssets selectByUserId(Integer id,String type);
 }
diff --git a/src/main/java/com/nq/service/IUserPositionService.java b/src/main/java/com/nq/service/IUserPositionService.java
index ef121f0..73ccbbb 100644
--- a/src/main/java/com/nq/service/IUserPositionService.java
+++ b/src/main/java/com/nq/service/IUserPositionService.java
@@ -5,22 +5,27 @@
 import com.nq.pojo.UserPosition;
 import com.nq.vo.position.PositionProfitVO;
 import com.nq.vo.position.PositionVO;
+import com.nq.vo.position.UserPositionVO;
 
 import java.math.BigDecimal;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 
 public interface IUserPositionService {
-  ServerResponse buy(Integer paramInteger1, Integer paramInteger2, Integer paramInteger3, Integer paramInteger4,BigDecimal paramInteger5,BigDecimal paramInteger6, HttpServletRequest paramHttpServletRequest) throws Exception;
+  ServerResponse buy(Integer paramInteger1, Integer paramInteger2, Integer paramInteger3,
+                     Integer paramInteger4,BigDecimal paramInteger5,BigDecimal paramInteger6, HttpServletRequest paramHttpServletRequest) ;
   
-  ServerResponse sell(String paramString, int paramInt) throws  Exception ;
+  ServerResponse sell(String paramString, int paramInt);
+  ServerResponse sell(String paramString, int paramInt,  HttpServletRequest request);
 
   ServerResponse allSell(HttpServletRequest request,String stockType)throws  Exception;
   
   ServerResponse lock(Integer paramInteger1, Integer paramInteger2, String paramString);
   
   ServerResponse del(Integer paramInteger);
-  
+
+
+  UserPositionVO findByPostionSn(String  positionSn);
   ServerResponse<PageInfo> findMyPositionByCodeAndSpell(String paramString1, String paramString2, Integer paramInteger,
                                                         HttpServletRequest paramHttpServletRequest,
                                                         int paramInt1, int paramInt2,String stockType);
@@ -64,7 +69,6 @@
 
   ServerResponse addmargin(String paramString, int paramInt, BigDecimal marginAdd) throws Exception;
 
-  PositionProfitVO getPositionProfitVO(UserPosition position);
 
 
   ServerResponse newStockToPosition(Integer id);
@@ -76,4 +80,6 @@
     ServerResponse buyDz(String stockCode, String password, Integer num, HttpServletRequest request) throws Exception;
 
   ServerResponse buyStockDzList(HttpServletRequest request);
+
+  void stockConstraint(List<UserPosition> userPositions);
 }
diff --git a/src/main/java/com/nq/service/IUserRechargeService.java b/src/main/java/com/nq/service/IUserRechargeService.java
index 1e834b7..24927a1 100644
--- a/src/main/java/com/nq/service/IUserRechargeService.java
+++ b/src/main/java/com/nq/service/IUserRechargeService.java
@@ -41,11 +41,4 @@
   BigDecimal CountTotalRechargeAmountByTime(Integer paramInteger);
 
   List<UserRecharge> exportByAdmin( Integer agentId, Integer userId, String realName, Integer state, String beginTime, String endTime, HttpServletRequest request);
-
-
-  ServerResponse chooseBank(UserRecharge userRecharge);
-
-  ServerResponse getInfo(Integer id);
-
-  ServerResponse editRecharge(UserRecharge userRecharge);
 }
diff --git a/src/main/java/com/nq/service/IUserService.java b/src/main/java/com/nq/service/IUserService.java
index b2a622c..f8f05f2 100644
--- a/src/main/java/com/nq/service/IUserService.java
+++ b/src/main/java/com/nq/service/IUserService.java
@@ -8,7 +8,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 public interface IUserService {
-  ServerResponse reg(String paramString2, String paramString3, String paramString4, String email,String code,HttpServletRequest paramHttpServletRequest);
+  ServerResponse reg( String paramString2, String paramString3, String paramString4,String phoneCode,HttpServletRequest paramHttpServletRequest);
 
   ServerResponse login(String paramString1, String paramString2, HttpServletRequest paramHttpServletRequest);
 
@@ -41,8 +41,6 @@
 
   ServerResponse getMoney(Integer  userId);
 
-  ServerResponse getMoneyByType(String accectType,HttpServletRequest request);
-
   ServerResponse transfer(String fromType,String toType,String amt,HttpServletRequest paramHttpServletRequest);
 
   void ForceSellTask();
@@ -62,9 +60,9 @@
 
   ServerResponse listByAgent(String paramString1, String paramString2, Integer paramInteger1, Integer paramInteger2, int paramInt1, int paramInt2, HttpServletRequest paramHttpServletRequest);
 
-  ServerResponse addSimulatedAccount(Integer paramInteger1, String paramString1, String paramString2, String paramString3, Integer paramInteger2, HttpServletRequest paramHttpServletRequest);
+  ServerResponse addSimulatedAccount(Integer paramInteger1, String paramString1, String paramString2, Integer paramInteger2, HttpServletRequest paramHttpServletRequest);
 
-  ServerResponse listByAdmin(String paramString1, String paramString2, Integer paramInteger1, Integer paramInteger2, int paramInt1, int paramInt2, HttpServletRequest paramHttpServletRequest);
+  ServerResponse listByAdmin(String paramString1, String paramString2, Integer paramInteger1, Integer paramInteger2, int paramInt1, int paramInt2,String id, HttpServletRequest paramHttpServletRequest);
 
   ServerResponse findByUserId(Integer paramInteger);
 
@@ -88,12 +86,12 @@
 
   void updateUserAmt(Double amt, Integer user_id);
 
+//
+  ServerResponse queryMyOption(String code, HttpServletRequest request);
+
+  ServerResponse getMoenyLog(String type,HttpServletRequest request);
+
   ServerResponse sendMailCode(String toMail);
 
-  ServerResponse retrievePasswordByEmail(String email, String code, String newPwd);
-  ServerResponse editAmtPwd( HttpServletRequest request,String amtPwd);
-
-
-//
-//  ServerResponse queryMyOption(String code, HttpServletRequest request);
+  ServerResponse sendSms(String phone,HttpServletRequest request) throws Exception;
 }
diff --git a/src/main/java/com/nq/service/IUserStockSubscribeService.java b/src/main/java/com/nq/service/IUserStockSubscribeService.java
index db7d766..6da5a4d 100644
--- a/src/main/java/com/nq/service/IUserStockSubscribeService.java
+++ b/src/main/java/com/nq/service/IUserStockSubscribeService.java
@@ -37,7 +37,7 @@
     /**
      * 新股申购-列表查询
      */
-    ServerResponse<PageInfo> getList(int pageNum, int pageSize, String keyword, Integer type,HttpServletRequest request);
+    ServerResponse<PageInfo> getList(int pageNum, int pageSize, String keyword, HttpServletRequest request);
 
     /**
      * 新股申购-查询详情
@@ -55,6 +55,4 @@
     ServerResponse userSubmit(Integer id,HttpServletRequest request);
 
     ServerResponse del(int id, HttpServletRequest request);
-
-    ServerResponse backgroundPurchase(Integer id);
 }
diff --git a/src/main/java/com/nq/service/IUserWithdrawService.java b/src/main/java/com/nq/service/IUserWithdrawService.java
index e5a617f..025cab8 100644
--- a/src/main/java/com/nq/service/IUserWithdrawService.java
+++ b/src/main/java/com/nq/service/IUserWithdrawService.java
@@ -10,7 +10,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 public interface IUserWithdrawService {
-  ServerResponse outMoney(String paramString,String with_Pwd, String assetsType,String walletAddress,String actualWithdrawal,String coinType,String amtPwd,HttpServletRequest paramHttpServletRequest) throws Exception;
+  ServerResponse outMoney(String paramString,String with_Pwd, String assetsType,HttpServletRequest paramHttpServletRequest) throws Exception;
   
   ServerResponse<PageInfo> findUserWithList(String paramString, HttpServletRequest paramHttpServletRequest, int paramInt1, int paramInt2);
   
diff --git a/src/main/java/com/nq/service/TradingHourService.java b/src/main/java/com/nq/service/TradingHourService.java
deleted file mode 100644
index 5af3d91..0000000
--- a/src/main/java/com/nq/service/TradingHourService.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.nq.service;
-
-public interface TradingHourService {
-    Boolean timeCheck();
-}
diff --git a/src/main/java/com/nq/service/impl/AgentAgencyFeeServiceImpl.java b/src/main/java/com/nq/service/impl/AgentAgencyFeeServiceImpl.java
index a8219cf..a1e29cb 100644
--- a/src/main/java/com/nq/service/impl/AgentAgencyFeeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/AgentAgencyFeeServiceImpl.java
@@ -11,6 +11,7 @@
 import com.nq.pojo.*;
 import com.nq.service.IAgentAgencyFeeService;
 import com.nq.service.IAgentUserService;
+import com.nq.service.IUserPositionService;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.redis.CookieUtils;
 import com.nq.utils.redis.JsonUtil;
@@ -33,6 +34,9 @@
     IAgentUserService iAgentUserService;
 
     @Autowired
+    IUserPositionService iUserPositionService;
+
+    @Autowired
     AgentUserMapper agentUserMapper;
 
     @Autowired
diff --git a/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java b/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java
new file mode 100644
index 0000000..486c5e4
--- /dev/null
+++ b/src/main/java/com/nq/service/impl/ApplyLeverServicesimpl.java
@@ -0,0 +1,90 @@
+package com.nq.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nq.common.ServerResponse;
+import com.nq.dao.ApplyLeverMapper;
+import com.nq.dao.UserMapper;
+import com.nq.pojo.ApplyLever;
+import com.nq.pojo.User;
+import com.nq.service.IApplyLeverServices;
+import com.nq.service.IUserService;
+import org.apache.http.util.TextUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+@Service
+public class ApplyLeverServicesimpl implements IApplyLeverServices {
+
+    @Resource
+    ApplyLeverMapper applyLeverMapper;
+
+    @Resource
+    IUserService userService;
+    @Resource
+    UserMapper userMapper;
+
+    @Override
+    public ServerResponse applyLever(ApplyLever applyLever, HttpServletRequest request) {
+
+        QueryWrapper<ApplyLever> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id",userService.getCurrentUser(request).getId());
+        queryWrapper.ne("state",2);
+        if(applyLeverMapper.selectCount(queryWrapper)>0){
+            return ServerResponse.createByErrorMsg("你已经申请杠杆了",request);
+        }
+        User user = userService.getCurrentUser(request);
+        applyLever.setPhone(user.getPhone());
+        applyLever.setUserId(user.getId()+"");
+        applyLever.setState("0");
+        applyLever.setCreateTime(new Date());
+
+        if(applyLeverMapper.insert(applyLever)>0){
+            return ServerResponse.createBySuccess("申请成功,请联系客服",request);
+        }else{
+            return ServerResponse.createByErrorMsg("申请失败",request);
+        }
+    }
+
+    @Transactional
+    @Override
+    public ServerResponse examineApplyLever(String  id,String states, HttpServletRequest request) {
+        ApplyLever applyLever = applyLeverMapper.selectById(id);
+        applyLever.setState(states);
+        applyLeverMapper.updateById(applyLever);
+       User user =  userMapper.selectById(applyLever.getUserId());
+       user.setLever(applyLever.getLever());
+       userMapper.updateById(user);
+       return ServerResponse.createBySuccess();
+    }
+
+    @Override
+    public ServerResponse queryApplyLever(String phone, Integer page, Integer pageSize, HttpServletRequest request) {
+        Integer userId = null;
+        Page<ApplyLever> page1 = new Page<>(page, pageSize);
+        if(!TextUtils.isEmpty(phone)){
+            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("phone",phone);
+            User user = userMapper.selectOne(queryWrapper);
+            if(user != null ){
+                userId = user.getId();
+            }else{
+                QueryWrapper<ApplyLever> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("user_id",phone);
+                return ServerResponse.createBySuccess(applyLeverMapper.selectPage(page1,queryWrapper1));
+            }
+        }
+        QueryWrapper<ApplyLever> queryWrapper1 = new QueryWrapper<>();
+        if(userId != null){
+            queryWrapper1.eq("user_id",userId);
+        }
+        queryWrapper1.orderByDesc("create_time");
+
+       return ServerResponse.createBySuccess(applyLeverMapper.selectPage(page1,queryWrapper1));
+    }
+
+}
diff --git a/src/main/java/com/nq/service/impl/DigitalCurrencyServiceImpl.java b/src/main/java/com/nq/service/impl/DigitalCurrencyServiceImpl.java
deleted file mode 100644
index 30fe53a..0000000
--- a/src/main/java/com/nq/service/impl/DigitalCurrencyServiceImpl.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.nq.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.nq.dao.DigitalCurrencyMapper;
-import com.nq.pojo.DigitalCurrency;
-import com.nq.service.DigitalCurrencyService;
-import org.springframework.stereotype.Service;
-
-/**
- * @program: dabao
- * @description:
- * @create: 2024-04-07 14:55
- **/
-@Service
-public class DigitalCurrencyServiceImpl extends ServiceImpl<DigitalCurrencyMapper, DigitalCurrency> implements DigitalCurrencyService {
-}
diff --git a/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java b/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java
index 34b5b4c..ff46e73 100644
--- a/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java
@@ -3,8 +3,10 @@
 import com.google.common.collect.Lists;
 import com.nq.common.ServerResponse;
 import com.nq.service.IFileUploadService;
+import com.nq.utils.PropertiesUtil;
 import com.nq.utils.ftp.FTPUtil;
 import java.io.File;
+import java.io.IOException;
 import java.util.UUID;
 
 import org.slf4j.Logger;
@@ -23,59 +25,15 @@
 
 
     public ServerResponse upload(MultipartFile file, String path) {
-
         String fileName = file.getOriginalFilename();
-
-
-        String fileExtentionName = fileName.substring(fileName.lastIndexOf(".") + 1);
-
-
-        String uploadFileName = UUID.randomUUID() + "." + fileExtentionName;
-
-
-        File fileDir = new File(path);
-
-
-        if (!fileDir.exists()) {
-
-
-            fileDir.setWritable(true);
-
-            fileDir.mkdirs();
-
-        }
-
-
-        File tartgetFile = new File(path, uploadFileName);
-
-        boolean result = false;
-
+        File tartgetFile = new File(PropertiesUtil.getProperty("ftp.address"), fileName);
         try {
-
             file.transferTo(tartgetFile);
-
-
-            result = FTPUtil.uploadFile(Lists.newArrayList(new File[]{tartgetFile}));
-
-
-            tartgetFile.delete();
-
-        } catch (Exception e) {
-
-            log.error("上传文件异常 , 错误信息 = {}", e);
-
-            return null;
-
-        }
-
-
-        if (result) {
-
             return ServerResponse.createBySuccess(tartgetFile.getName());
-
+        } catch (IOException e) {
+            return ServerResponse.createByErrorMsg("上传失败");
         }
 
-        return ServerResponse.createByErrorMsg("上传失败");
 
     }
 
diff --git a/src/main/java/com/nq/service/impl/PayServiceImpl.java b/src/main/java/com/nq/service/impl/PayServiceImpl.java
index 2b99993..e7ea499 100644
--- a/src/main/java/com/nq/service/impl/PayServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/PayServiceImpl.java
@@ -1,7 +1,6 @@
 package com.nq.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.google.gson.Gson;
 import com.nq.common.CmcPayConfig;
 import com.nq.common.ServerResponse;
@@ -44,7 +43,7 @@
 
 
 @Service("iPayService")
-public class PayServiceImpl implements IPayService{
+public class PayServiceImpl implements IPayService {
     private static final Logger log = LoggerFactory.getLogger(PayServiceImpl.class);
 
     @Autowired
@@ -233,38 +232,26 @@
 
 
     @Transactional
-    public ServerResponse flyPay(Integer payType, String payAmt, String currency,String payId, HttpServletRequest request) {
+    public ServerResponse flyPay(Integer payType, String payAmt, String currency, HttpServletRequest request) {
         User user = iUserService.getCurrentUser(request);
+        SitePay sitePay  = sitePayMapper.selectById(payType);
         UserRecharge userRecharge = new UserRecharge();
         userRecharge.setUserId(user.getId());
         userRecharge.setNickName(user.getRealName());
         userRecharge.setAgentId(user.getAgentId());
         String ordersn = KeyUtils.getRechargeOrderSn();
         userRecharge.setOrderSn(ordersn);
+        userRecharge.setPayChannel(sitePay.getChannelName());
         userRecharge.setPayAmt(new BigDecimal(payAmt));
         userRecharge.setOrderStatus(Integer.valueOf(0));
         userRecharge.setAddTime(new Date());
+        userRecharge.setPayId(payType);
         userRecharge.setImg(currency);
-        userRecharge.setUserPhone(user.getPhone());
-        userRecharge.setPayType(payType);
+        userRecharge.setAssetsType(sitePay.getAssetsType());
         userRechargeMapper.insert(userRecharge);
-        return ServerResponse.createBySuccess("succeed");
+        return ServerResponse.createBySuccess("");
     }
 
-    @Override
-    public ServerResponse flyPayAmt(HttpServletRequest request,UserRecharge userRecharge) {
-        User user = iUserService.getCurrentUser(request);
-        userRecharge.setUserId(user.getId());
-        userRecharge.setNickName(user.getRealName());
-        userRecharge.setAgentId(user.getAgentId());
-        String ordersn = KeyUtils.getRechargeOrderSn();
-        userRecharge.setOrderSn(ordersn);
-        userRecharge.setOrderStatus(Integer.valueOf(0));
-        userRecharge.setAddTime(new Date());
-        userRecharge.setUserPhone(user.getPhone());
-        userRechargeMapper.insertSelective(userRecharge);
-        return ServerResponse.createBySuccessMsg("succeed");
-    }
 
     /**
      * 充值方式一
@@ -712,14 +699,5 @@
         }
 
         return retMap;
-    }
-
-    @Override
-    public ServerResponse editRecharge(UserRecharge userRecharge) {
-        if (userRecharge.getId()==null||userRecharge.getId()==0){
-            return ServerResponse.createByErrorMsg("param is null");
-        }
-        userRechargeMapper.updateByPrimaryKey(userRecharge);
-        return ServerResponse.createBySuccessMsg("Success!");
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/nq/service/impl/PriceServicesImpl.java b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
new file mode 100644
index 0000000..d38f33e
--- /dev/null
+++ b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -0,0 +1,159 @@
+package com.nq.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.nq.dao.StockDzMapper;
+import com.nq.dao.StockMapper;
+import com.nq.dao.StockSettingMapper;
+import com.nq.enums.EStockType;
+import com.nq.pojo.Stock;
+import com.nq.pojo.StockDz;
+import com.nq.pojo.StockRealTimeBean;
+import com.nq.pojo.StockSetting;
+import com.nq.service.IPriceServices;
+import com.nq.utils.PropertiesUtil;
+import com.nq.utils.redis.RedisKeyUtil;
+import com.nq.utils.timeutil.TimeUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Map;
+
+
+@Service
+public class PriceServicesImpl  implements IPriceServices {
+
+
+
+    @Resource
+    StockSettingMapper stockSettingMapper;
+
+
+    @Resource
+    StockMapper stockMapper;
+
+    @Resource
+    StockDzMapper stockDZMapper;
+
+    @Override
+    public BigDecimal getNowPrice(String stockCode) {
+        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
+        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
+//        if(stockSetting != null){
+//            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
+//                if(stockSetting.getType().equals("0")){
+//                    return  new BigDecimal(stockSetting.getPrice());
+//                }else{
+//                    StockRealTimeBean stockRealTimeBean =  RedisKeyUtil.getCacheRealTimeStock(stock);
+//                  return   new BigDecimal(stockRealTimeBean.getLast()).multiply(new BigDecimal(stockSetting.getPrice()));
+//                }
+//            }
+//        }
+
+        StockRealTimeBean stockRealTimeBean =  RedisKeyUtil.getCacheRealTimeStock(stock);
+        return  new BigDecimal(stockRealTimeBean.getLast());
+    }
+
+    public BigDecimal getBuyNowPrice(String stockCode, EStockType eStockType) {
+        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
+        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code", stockCode));
+
+        if (stockSetting != null) {
+            if (TimeUtil.isTradingHour(stockSetting.getStartTime(), stockSetting.getEndTime())) {
+                if (stockSetting.getType().equals("0")) {
+                    return new BigDecimal(stockSetting.getPrice());
+                } else {
+                    String s = doGet(stock.getStockCode(), eStockType);
+                    if (s != null) {
+                        Map<String, Object> stringObjectMap = jsonToMap(s);
+                        return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
+                    }
+                }
+            }
+        }
+
+        String s = doGet(stock.getStockCode(), eStockType);
+        if (s != null) {
+            Map<String, Object> stringObjectMap = jsonToMap(s);
+            return new BigDecimal(stringObjectMap.get("last").toString());
+        }
+
+        return BigDecimal.ZERO;
+    }
+
+    public static Map<String, Object> jsonToMap(String json) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            Object[] array = objectMapper.readValue(json, Object[].class);
+            Gson gson = new Gson();
+            String s = gson.toJson(array[0]);
+            Map<String, Object> map = objectMapper.readValue(s, Map.class);
+            return map;
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public String doGet(String pid, EStockType eStockType) {
+        String apiUrl = "";
+        if ("IN".equals(eStockType.getCode())) {
+            String inNowHttpApi = PropertiesUtil.getProperty("IN_NOW_HTTP_API");
+            String inNowKey = PropertiesUtil.getProperty("IN_NOW_KEY");
+            apiUrl = inNowHttpApi + "stock?pid=" + pid + "&key=" + inNowKey;
+        } else {
+            apiUrl = eStockType.getStockUrl() + "stock?pid=" + pid + "&key=" + eStockType.getStockKey();
+        }
+
+        try {
+            URL url = new URL(apiUrl);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("GET");
+
+            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+            String inputLine;
+            StringBuffer response = new StringBuffer();
+
+            while ((inputLine = in.readLine()) != null) {
+                response.append(inputLine);
+            }
+            in.close();
+            return response.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public BigDecimal getNowPrice(String stockCode, String stockType) {
+        EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
+        BigDecimal nowPrice = getBuyNowPrice(stockCode, eStockType);
+
+        if (!stockType.equals("DZ")) {
+            return nowPrice;
+        }
+
+        QueryWrapper queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("stock_code", stockCode);
+        StockDz stockDz = stockDZMapper.selectOne(queryWrapper);
+
+        if (stockDz == null) {
+            return nowPrice;
+        }
+
+        return nowPrice.multiply(stockDz.getDiscount());
+    }
+
+    @Override
+    public BigDecimal getPrice(String stockCode) {
+        return stockDZMapper.getPrice(stockCode);
+    }
+
+}
diff --git a/src/main/java/com/nq/service/impl/RateServicesImpl.java b/src/main/java/com/nq/service/impl/RateServicesImpl.java
new file mode 100644
index 0000000..6a179ef
--- /dev/null
+++ b/src/main/java/com/nq/service/impl/RateServicesImpl.java
@@ -0,0 +1,47 @@
+package com.nq.service.impl;
+
+import com.nq.enums.EStockType;
+import com.nq.service.IRateServices;
+import com.nq.service.ISiteAdminService;
+import com.nq.service.ISiteSettingService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+@Service
+public class RateServicesImpl  implements IRateServices {
+
+    @Resource
+    ISiteSettingService iSiteSettingService;
+    @Override
+    public BigDecimal currencyRate(EStockType fromStockType, EStockType tofromStockType) {
+        if(fromStockType == null || tofromStockType == null){
+            return new BigDecimal(1);
+        }
+       BigDecimal rate =  iSiteSettingService.getSiteSetting().getExchangeRate();
+        BigDecimal rate1 =  new BigDecimal(83.5);
+        if(fromStockType==EStockType.US){
+            if(tofromStockType==EStockType.IN){
+                return rate;
+            }
+        }if(fromStockType==EStockType.IN){
+            if(tofromStockType==EStockType.US){
+               return new BigDecimal(1).divide(rate1,18, RoundingMode.HALF_DOWN).multiply(rate);
+            }else if(tofromStockType==EStockType.US){
+                return new BigDecimal(1).divide(rate1,18, RoundingMode.HALF_DOWN);
+            }
+        } else {
+            if(tofromStockType==EStockType.US){
+                return   new BigDecimal(1).divide(rate,18, RoundingMode.HALF_DOWN);
+            }else{
+                return   new BigDecimal(1).divide(rate,18, RoundingMode.HALF_DOWN).multiply(rate1);
+            }
+        }
+     
+        return new BigDecimal(1);
+
+    }
+
+}
diff --git a/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java b/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
index 4b8abe0..4bc3e93 100644
--- a/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
@@ -1,19 +1,16 @@
 package com.nq.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.nq.dao.SiteAdminMapper;
+import com.nq.dao.*;
 import com.github.pagehelper.PageHelper;
 
 import com.github.pagehelper.PageInfo;
 
 import com.nq.common.ServerResponse;
 
-import com.nq.dao.UserMapper;
-import com.nq.dao.UserRechargeMapper;
-import com.nq.dao.UserWithdrawMapper;
-import com.nq.pojo.SiteAdmin;
-
-import com.nq.pojo.UserRecharge;
+import com.nq.pojo.*;
 
 import com.nq.service.IAgentUserService;
 
@@ -29,6 +26,7 @@
 
 import com.nq.service.IUserWithdrawService;
 
+import com.nq.utils.ConverterUtil;
 import com.nq.utils.PropertiesUtil;
 
 import com.nq.utils.SymmetricCryptoUtil;
@@ -41,14 +39,17 @@
 
 import java.math.BigDecimal;
 
-import java.util.Date;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
-import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import com.nq.vo.agent.AgentUserNodeVO;
 import org.apache.commons.lang3.StringUtils;
 
 import org.slf4j.Logger;
@@ -58,6 +59,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 
 import org.springframework.stereotype.Service;
+import org.xmlunit.util.Convert;
 
 
 @Service("iSiteAdminServiceImpl")
@@ -103,6 +105,11 @@
     @Resource
     UserMapper userMapper;
 
+    @Autowired
+    UserWithdrawMapper userWithdrawMapper;
+
+    @Autowired
+    AgentUserMapper agentUserMapper;
 
     public ServerResponse login(String adminPhone, String adminPwd, String verifyCode, HttpServletRequest request) {
 
@@ -369,6 +376,257 @@
 
     }
 
+    @Override
+    public ServerResponse moneyCount(String agentId,String startTime, String entTime) {
+        BigDecimal todayRechargeAmount = BigDecimal.ZERO;//今日充值金额
+        BigDecimal todayWithdrawAmount = BigDecimal.ZERO;//今日提现金额
+        Long todayRegister = 0L;//今日注册
+        Long todayWithdraw = 0L;//今日充值总人数
+        BigDecimal rechargeTotalAmount = BigDecimal.ZERO;//总充值金额
+        BigDecimal withdrawalTotalAmount = BigDecimal.ZERO;//总提现金额
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("todayRechargeAmount", todayRechargeAmount);
+        map.put("todayWithdrawAmount", todayWithdrawAmount);
+        map.put("todayRegister", todayRegister);
+        map.put("todayWithdraw", todayWithdraw);
+        map.put("rechargeTotalAmount", rechargeTotalAmount);
+        map.put("withdrawalTotalAmount", withdrawalTotalAmount);
+
+        //今日开始结束时间
+        LocalDate currentDate  = LocalDate.now();
+        LocalDate  nextDay = currentDate.plusDays(1);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String start = currentDate.format(formatter);
+        String end = nextDay.format(formatter);
+        List<Integer> userIds  = null;
+        if(StringUtils.isNotEmpty(agentId)){
+            //当前代理
+            AgentUser agentUser = agentUserMapper.selectById(agentId);
+            if(null == agentUser){
+                return ServerResponse.createBySuccess(map);
+            }
+            List<AgentUser> lowerAgentUsers = agentUserMapper.selectList(new LambdaQueryWrapper<AgentUser>());
+            AgentUserNodeVO userNodeVO = ConverterUtil.convert(agentUser, AgentUserNodeVO.class);
+            List<AgentUserNodeVO> agentUserNodeVOS = ConverterUtil.convertToList(lowerAgentUsers, AgentUserNodeVO.class);
+            List<AgentUserNodeVO> nodeJson = getNodeJson(userNodeVO, agentUserNodeVOS);
+            userNodeVO.setChildList(nodeJson);
+            //当前节点和子节点的id
+            List<Integer>  ids  =  getAllChildrenIds(userNodeVO);
+            //查询代理id下面所有的用户
+            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getAgentId, ids));
+            userIds = users.stream().map(User::getId).collect(Collectors.toList());
+        }
+        //今日充值
+        List<UserRecharge> todayRecharges = userRechargeMapper.selectList(new LambdaQueryWrapper<UserRecharge>().eq(UserRecharge::getOrderStatus, 1)
+                .ge(UserRecharge::getPayTime, start)
+                .le(UserRecharge::getPayTime, end)
+                .in(CollectionUtil.isNotEmpty(userIds),UserRecharge::getUserId,userIds));
+
+        //今日提现
+        List<UserWithdraw> todayWithdraws = userWithdrawMapper.selectList(new LambdaQueryWrapper<UserWithdraw>().eq(UserWithdraw::getWithStatus, 1)
+                .ge(UserWithdraw::getTransTime, start)
+                .le(UserWithdraw::getTransTime, end)
+                .in(CollectionUtil.isNotEmpty(userIds),UserWithdraw::getUserId,userIds));
+
+        //总充值
+        List<UserRecharge> userRecharges = userRechargeMapper.selectList(new LambdaQueryWrapper<UserRecharge>().eq(UserRecharge::getOrderStatus, 1)
+                .ge(StringUtils.isNotBlank(startTime), UserRecharge::getPayTime, startTime)
+                .le(StringUtils.isNotBlank(entTime), UserRecharge::getPayTime, entTime)
+                .in(CollectionUtil.isNotEmpty(userIds),UserRecharge::getUserId,userIds));
+
+        //总提现
+        List<UserWithdraw> userWithdraws = userWithdrawMapper.selectList(new LambdaQueryWrapper<UserWithdraw>().eq(UserWithdraw::getWithStatus, 1)
+                .ge(StringUtils.isNotBlank(startTime), UserWithdraw::getTransTime, startTime)
+                .le(StringUtils.isNotBlank(entTime), UserWithdraw::getTransTime, entTime)
+                .in(CollectionUtil.isNotEmpty(userIds),UserWithdraw::getUserId,userIds));
+
+        //今日注册数量
+        todayRegister = userMapper.selectCount(new LambdaQueryWrapper<User>()
+                .ge(User::getRegTime, start)
+                .le(User::getRegTime, end)
+                .in(CollectionUtil.isNotEmpty(userIds),User::getId,userIds));
+
+        for (UserRecharge userRecharge : todayRecharges) {
+            todayRechargeAmount = todayRechargeAmount.add(userRecharge.getPayAmt());
+        }
+
+        for (UserWithdraw userWithdraw : todayWithdraws) {
+            todayWithdrawAmount = todayWithdrawAmount.add(userWithdraw.getWithAmt());
+        }
+
+        for (UserRecharge userRecharge : userRecharges) {
+            rechargeTotalAmount = rechargeTotalAmount.add(userRecharge.getPayAmt());
+        }
+
+        for (UserWithdraw userWithdraw : userWithdraws) {
+            withdrawalTotalAmount = withdrawalTotalAmount.add(userWithdraw.getWithAmt());
+        }
+
+        List<UserRecharge> distinctCustomers = todayRecharges.stream()
+                .collect(Collectors.toMap(UserRecharge::getUserId, c -> c, (c1, c2) -> c1))
+                .values().stream()
+                .collect(Collectors.toList());
+        todayWithdraw = Long.valueOf(distinctCustomers.size());
+
+        map.put("todayRechargeAmount", todayRechargeAmount);
+        map.put("todayWithdrawAmount", todayWithdrawAmount);
+        map.put("todayRegister", todayRegister);
+        map.put("todayWithdraw", todayWithdraw);
+        map.put("rechargeTotalAmount", rechargeTotalAmount);
+        map.put("withdrawalTotalAmount", withdrawalTotalAmount);
+        return ServerResponse.createBySuccess(map);
+    }
+
+    @Override
+    public ServerResponse totalAgencyFunds(String agentId) {
+        BigDecimal inTotalAmount = BigDecimal.ZERO;
+        BigDecimal usTotalAmount = BigDecimal.ZERO;
+
+        BigDecimal inTotalWithdrawAmount = BigDecimal.ZERO;
+        BigDecimal usTotalWithdrawAmount = BigDecimal.ZERO;
+        Map<String, Object> map = new HashMap<>();
+        Long todayRegister = 0L;//今日注册
+        map.put("todayRegister", todayRegister);
+        //入金
+        map.put("inTotalAmount", inTotalAmount);
+        map.put("usTotalAmount", usTotalAmount);
+        //出金
+        map.put("inTotalWithdrawAmount", inTotalWithdrawAmount);
+        map.put("usTotalWithdrawAmount", usTotalWithdrawAmount);
+        //查询所有代理用户(管理员)
+        List<AgentUser> agentUsers = agentUserMapper.selectList(new LambdaQueryWrapper<AgentUser>()
+                .eq(AgentUser::getAgentLevel,0)
+                .eq(StringUtils.isNotBlank(agentId),AgentUser::getId,agentId));
+        List<AgentUser> lowerAgentUsers = agentUserMapper.selectList(new LambdaQueryWrapper<AgentUser>()
+                .ne(AgentUser::getAgentLevel,0));
+        if(CollectionUtil.isEmpty(agentUsers)){
+            return ServerResponse.createBySuccess(map);
+        }
+
+        //今日开始结束时间
+        LocalDate currentDate  = LocalDate.now();
+        LocalDate  nextDay = currentDate.plusDays(1);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String start = currentDate.format(formatter);
+        String end = nextDay.format(formatter);
+
+        for (AgentUser agentUser : agentUsers) {
+            AgentUserNodeVO userNodeVO = ConverterUtil.convert(agentUser, AgentUserNodeVO.class);
+            List<AgentUserNodeVO> agentUserNodeVOS = ConverterUtil.convertToList(lowerAgentUsers, AgentUserNodeVO.class);
+            List<AgentUserNodeVO> nodeJson = getNodeJson(userNodeVO, agentUserNodeVOS);
+            userNodeVO.setChildList(nodeJson);
+            //当前节点和子节点的id
+            List<Integer>  ids  =  getAllChildrenIds(userNodeVO);
+            //查询代理id下面所有的用户
+            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getAgentId, ids));
+            //查询用户充值
+            List<Integer> userIds = users.stream().map(User::getId).collect(Collectors.toList());
+            if(CollectionUtil.isEmpty(userIds)){
+                continue;
+            }
+
+            //今日注册数量
+            todayRegister = userMapper.selectCount(new LambdaQueryWrapper<User>()
+                    .ge(User::getRegTime, start)
+                    .le(User::getRegTime, end)
+                    .in(CollectionUtil.isNotEmpty(userIds),User::getId,userIds));
+
+            List<UserRecharge> userRecharges = userRechargeMapper.selectList(new LambdaQueryWrapper<UserRecharge>()
+                    .eq(UserRecharge::getOrderStatus, 1)
+                    .in(UserRecharge::getUserId,userIds));
+            Map<String, List<UserRecharge>> typeList = userRecharges.stream().collect(Collectors.groupingBy(UserRecharge::getAssetsType));
+            List<UserRecharge> inUserRecharge = typeList.get("IN");
+            List<UserRecharge> usUserRecharge = typeList.get("US");
+            if(CollectionUtil.isNotEmpty(inUserRecharge)){
+                for (UserRecharge userRecharge : inUserRecharge) {
+                    inTotalAmount = inTotalAmount.add(userRecharge.getPayAmt());
+                }
+            }
+            if(CollectionUtil.isNotEmpty(usUserRecharge)){
+                for (UserRecharge userRecharge : usUserRecharge) {
+                    usTotalAmount = usTotalAmount.add(userRecharge.getPayAmt());
+                }
+            }
+
+            //总提现
+            List<UserWithdraw> userWithdraws = userWithdrawMapper.selectList(new LambdaQueryWrapper<UserWithdraw>()
+                    .eq(UserWithdraw::getWithStatus, 1)
+                    .in(CollectionUtil.isNotEmpty(userIds),UserWithdraw::getUserId,userIds));
+            Map<String, List<UserWithdraw>> typeWithdrawsList = userWithdraws.stream().collect(Collectors.groupingBy(UserWithdraw::getAssetsType));
+            List<UserWithdraw> inUserWithdraws = typeWithdrawsList.get("IN");
+            List<UserWithdraw> usUserWithdraws = typeWithdrawsList.get("US");
+            if(CollectionUtil.isNotEmpty(inUserWithdraws)){
+                for (UserWithdraw userWithdraw : inUserWithdraws) {
+                    inTotalWithdrawAmount = inTotalWithdrawAmount.add(userWithdraw.getWithAmt());
+                }
+            }
+            if(CollectionUtil.isNotEmpty(usUserWithdraws)){
+                for (UserWithdraw userWithdraw : usUserWithdraws) {
+                    usTotalWithdrawAmount = usTotalWithdrawAmount.add(userWithdraw.getWithAmt());
+                }
+            }
+        }
+        map.put("todayRegister", todayRegister);
+        map.put("inTotalAmount", inTotalAmount);
+        map.put("usTotalAmount", usTotalAmount);
+        map.put("inTotalWithdrawAmount", inTotalWithdrawAmount);
+        map.put("usTotalWithdrawAmount", usTotalWithdrawAmount);
+        return ServerResponse.createBySuccess(map);
+    }
+
+    public  static  List<Integer>  getAllChildrenIds(AgentUserNodeVO  parent)  {
+        List<Integer>  allChildrenIds  =  new  ArrayList<>();
+        getAllChildrenIdsHelper(parent,  allChildrenIds);
+        return  allChildrenIds;
+    }
+
+    private  static  void  getAllChildrenIdsHelper(AgentUserNodeVO  node,  List<Integer>  allChildrenIds)  {
+        allChildrenIds.add(node.getId());
+        if(CollectionUtil.isNotEmpty(node.getChildList())){
+            for  (AgentUserNodeVO  child  :  node.getChildList())  {
+                getAllChildrenIdsHelper(child,  allChildrenIds);
+            }
+        }
+    }
+
+    public List<AgentUserNodeVO> getNodeJson(AgentUserNodeVO agentUser, List<AgentUserNodeVO> nodes){
+
+        //当前层级当前点下的所有子节点
+        List<AgentUserNodeVO> childList = getChildNodes(agentUser.getId(),nodes);
+        List<AgentUserNodeVO> list = new ArrayList<>();
+        childList.forEach(f->{
+            List<AgentUserNodeVO> childs = getNodeJson(f,nodes);  //递归调用该方法
+            if(!childs.isEmpty()) {
+                f.setChildList(childs);
+            }
+            list.add(f);
+        });
+        return list;
+    }
+
+    /**
+     * 获取当前节点的所有子节点
+     * @param nodeId
+     * @param nodes
+     * @return
+     */
+    public List<AgentUserNodeVO> getChildNodes(Integer nodeId, List<AgentUserNodeVO> nodes){
+        List<AgentUserNodeVO> list = new ArrayList<>();
+        nodes.forEach(f->{
+            if(f.getParentId().equals(nodeId)){
+                list.add(f);
+            }
+        });
+        return list;
+    }
+
+
+    public String getDate(){
+        LocalDate currentDate  =  LocalDate.now();
+        DateTimeFormatter  formatter  =  DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        return currentDate.format(formatter);
+    }
 
     public SiteAdmin findAdminByName(String name) {
         return this.siteAdminMapper.findAdminByName(name);
diff --git a/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java b/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java
index 5929c13..66078a5 100644
--- a/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java
@@ -102,7 +102,7 @@
                 AgentUser agentUser = agentUserMapper.findAgentByAgentId(user.getAgentId());
                 if(agentUser != null){
                     siteInfo.setAgentCode(agentUser.getAgentCode());
-                    if(!agentUser.getOnLineServices().isEmpty()){
+                    if(null != agentUser.getOnLineServices() && !agentUser.getOnLineServices().isEmpty()){
                         siteInfo.setOnlineService(agentUser.getOnLineServices());
                     }
 
diff --git a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
index b24f843..3640e4d 100644
--- a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
@@ -81,17 +81,14 @@
         GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
         //取出每一条数据的内容,进行翻译
 
-//        if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) {
-//            for (SiteNews siteNews : listData) {
-//                try {
-//                    siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang")));
-//                    siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang")));
-//                } catch (Exception e) {
-//                   log.error("翻译失败");
-//                }
-//            }
-//    }
-
+        for (SiteNews siteNews : listData) {
+            try {
+                siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang")));
+                siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang")));
+            } catch (Exception e) {
+                log.error("翻译失败");
+            }
+        }
 
         PageInfo pageInfo = new PageInfo(listData);
         pageInfo.setList(listData);
@@ -140,17 +137,11 @@
     @Override
     public int grabNews() {
         int ret = 0;
-         addNews(1, EStockType.HG.getStockUrl() +"stock-markets?key="+ EStockType.HG.getStockKey() +"&type=1");
-//         addNews(2, EStockType.US.getStockUrl() +"stock-markets?key="+ EStockType.US.getStockKey() +"&type=4");
-//         addNews(3, EStockType.TH.getStockUrl() +"stock-markets?key="+ EStockType.TH.getStockKey() +"&type=4");
-//         addNews(4, EStockType.MAS.getStockUrl() +"stock-markets?key="+ EStockType.MAS.getStockKey() +"&type=4");
-        return ret;
+         addNews(1, EStockType.US.getStockUrl() +"stock-markets?key="+ EStockType.US.getStockKey() +"&type=4");
+         addNews(2,EStockType.IN.getStockUrl() +"stock-markets?key="+ EStockType.IN.getStockKey() +"&type=5");
+         return ret;
     }
 
-    /*
-    *抓取新闻专用
-    * type:新闻类型:1、财经要闻,2、经济数据,3、全球股市,4、7*24全球,5、商品资讯,6、上市公司,7、全球央行
-    * */
     private int addNews(Integer type, String url){
         int k = 0;
         try {
@@ -168,7 +159,7 @@
                         Long showTime = jsonObject.getLong("time");
                         siteNews.setShowTime(new Date(showTime));
                         if(jsonObject.has("img")){
-                            String imgBase = convertBase64ToImage(jsonObject.getString("img"),"/www/wwwroot/dabao/"+newsId+".jpg");
+                            convertBase64ToImage(jsonObject.getString("img"),PropertiesUtil.getProperty("ftp.address")+newsId+".jpg");
                             siteNews.setImgurl(PropertiesUtil.getProperty("ftp.server.http.prefix")+newsId+".jpg");
                         }
                         siteNews.setDescription(jsonObject.getString("content"));
diff --git a/src/main/java/com/nq/service/impl/SitePayServiceImpl.java b/src/main/java/com/nq/service/impl/SitePayServiceImpl.java
index 8f0e3c0..a8d4cb3 100644
--- a/src/main/java/com/nq/service/impl/SitePayServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SitePayServiceImpl.java
@@ -1,18 +1,12 @@
 package com.nq.service.impl;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
 import com.nq.dao.SitePayMapper;
-import com.nq.dao.UserRechargeMapper;
-import com.nq.enums.EStockType;
 import com.nq.pojo.SitePay;
-import com.nq.pojo.UserRecharge;
 import com.nq.service.ISitePayService;
-
-import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
@@ -28,12 +22,16 @@
     @Resource
     SitePayMapper sitePayMapper;
 
-    @Resource
-    UserRechargeMapper userRechargeMapper;
-
     public ServerResponse add(SitePay sitePay) {
-        if (sitePay.getExchangeRate() <= 0) {
-            return ServerResponse.createByErrorMsg("汇率不能小于0");
+        if (StringUtils.isBlank(sitePay.getChannelType()) ||
+                StringUtils.isBlank(sitePay.getChannelName()) ||
+                StringUtils.isBlank(sitePay.getChannelAccount()) || sitePay
+
+                .getChannelMinLimit() == null || sitePay
+                .getChannelMaxLimit() == null || sitePay
+                .getIsShow() == null || sitePay
+                .getIsLock() == null) {
+            return ServerResponse.createByErrorMsg("参数不能为空");
         }
 
 
@@ -41,7 +39,7 @@
         if (dbSitePay != null) {
             return ServerResponse.createByErrorMsg("支付类型已存在");
         }
-        sitePay.setAssetsType(EStockType.IN.getCode());
+
         int insertCount = this.sitePayMapper.insert(sitePay);
         if (insertCount > 0) {
             return ServerResponse.createBySuccessMsg("添加成功");
@@ -84,34 +82,13 @@
     }
 
 
-    public ServerResponse getPayInfo(Integer type) {
-        List<SitePay> sitePays = this.sitePayMapper.selectList(new LambdaQueryWrapper<SitePay>().eq(SitePay::getIsShow,0)
-                .eq(SitePay::getCType,type));
+    public ServerResponse getPayInfo() {
+        List<SitePay> sitePays = this.sitePayMapper.getPayInfo();
         return ServerResponse.createBySuccess(sitePays);
     }
 
 
     public ServerResponse getPayInfoById(Integer payId) {
         return ServerResponse.createBySuccess(this.sitePayMapper.selectByPrimaryKey(payId));
-    }
-
-    @Override
-    public ServerResponse listByPayType(Integer id) {
-        List<SitePay> payList = new ArrayList<>();
-        if (id==null||id<1){
-            return ServerResponse.createByErrorMsg("param is null");
-        }
-        UserRecharge userRecharge = userRechargeMapper.selectById(id);
-        Integer payType = userRecharge.getPayType();
-        if (payType!=null){
-            if (payType==1){
-                payList = sitePayMapper.listByPayType(0);
-            } else if (payType==2) {
-                payList = sitePayMapper.listByPayType(1);
-            }
-        }else {
-            payList = sitePayMapper.listByAdmin(null);
-        }
-        return ServerResponse.createBySuccess(payList);
     }
 }
diff --git a/src/main/java/com/nq/service/impl/SiteSettingServiceImpl.java b/src/main/java/com/nq/service/impl/SiteSettingServiceImpl.java
index 97505d9..1918408 100644
--- a/src/main/java/com/nq/service/impl/SiteSettingServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteSettingServiceImpl.java
@@ -16,25 +16,21 @@
 
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 
 @Service("iSiteSettingService")
 public class SiteSettingServiceImpl implements ISiteSettingService {
 
-    @Autowired
+    @Resource
     SiteSettingMapper siteSettingMapper;
     @Autowired
     SiteAdminIndexMapper siteAdminIndexMapper;
-
     public SiteSetting getSiteSetting() {
-
         SiteSetting siteSetting = null;
-
        List list = this.siteSettingMapper.findAllSiteSetting();
-
         if (list.size() > 0) {
-
             siteSetting = (SiteSetting) list.get(0);
-
         }
         return siteSetting;
     }
diff --git a/src/main/java/com/nq/service/impl/SiteUserOptionLogServiceImpl.java b/src/main/java/com/nq/service/impl/SiteUserOptionLogServiceImpl.java
new file mode 100644
index 0000000..c2643e9
--- /dev/null
+++ b/src/main/java/com/nq/service/impl/SiteUserOptionLogServiceImpl.java
@@ -0,0 +1,52 @@
+package com.nq.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.nq.common.ServerResponse;
+import com.nq.dao.SiteAdminMapper;
+import com.nq.dao.UserMapper;
+import com.nq.dao.UserOptionLogMapper;
+import com.nq.dao.UserRechargeMapper;
+import com.nq.pojo.SiteAdmin;
+import com.nq.pojo.SiteTaskLog;
+import com.nq.pojo.UserRecharge;
+import com.nq.service.*;
+import com.nq.utils.PropertiesUtil;
+import com.nq.utils.SymmetricCryptoUtil;
+import com.nq.utils.redis.JsonUtil;
+import com.nq.utils.redis.RedisConst;
+import com.nq.utils.redis.RedisShardedPoolUtils;
+import com.nq.vo.admin.AdminCountVO;
+import com.nq.vo.user.UserOptionLogVO;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+
+@Service("ISiteUserOptionLogService")
+public class SiteUserOptionLogServiceImpl implements ISiteUserOptionLogService {
+    private static final Logger log = LoggerFactory.getLogger(SiteUserOptionLogServiceImpl.class);
+
+    @Autowired
+    UserOptionLogMapper userOptionLogMapper;
+
+    @Override
+    public ServerResponse<PageInfo> list( Integer agentId,Integer userId, int pageNum, int pageSize) {
+        if(null != agentId){
+
+        }
+        PageHelper.startPage(pageNum, pageSize);
+        List<UserOptionLogVO> list = userOptionLogMapper.selective(userId);
+        PageInfo pageInfo = new PageInfo(list);
+        return ServerResponse.createBySuccess(pageInfo);
+    }
+}
diff --git a/src/main/java/com/nq/service/impl/StockOptionServiceImpl.java b/src/main/java/com/nq/service/impl/StockOptionServiceImpl.java
index bb235a7..4f092da 100644
--- a/src/main/java/com/nq/service/impl/StockOptionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockOptionServiceImpl.java
@@ -18,6 +18,7 @@
 
 import com.nq.pojo.User;
 
+import com.nq.pojo.reponse.RPageInfo;
 import com.nq.service.IStockOptionService;
 
 import com.nq.service.IUserService;
@@ -30,6 +31,7 @@
 
 import com.nq.vo.stock.StockVO;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Resource;
@@ -59,24 +61,22 @@
     @Autowired
     StockMapper stockMapper;
 
-    public ServerResponse<PageInfo> findMyStockOptions(String keyWords, HttpServletRequest request, int pageNum, int pageSize,String stockType) {
+    public ServerResponse<PageInfo> findMyStockOptions(String keyWords, HttpServletRequest request, int pageNum, int pageSize, String stockType) {
 
         PageHelper.startPage(pageNum, pageSize);
         User user = this.iUserService.getCurrentUser(request);
-        PageInfo pageInfo;
-        if (user == null) {
-            pageInfo =new PageInfo();
-            return ServerResponse.createBySuccessMsg("請先登錄");
-        }else{
-            List<StockOption> stockOptions = this.stockOptionMapper.findMyOptionByKeywords(user.getId(), keyWords,stockType);
-            List<StockListVO> stockOptionListVOS = Lists.newArrayList();
-            for (StockOption option : stockOptions) {
-                StockListVO stockListVO = assembleStockOptionListVO(option);
-                stockOptionListVOS.add(stockListVO);
-            }
-            pageInfo = new PageInfo(stockOptions);
-            pageInfo.setList(stockOptionListVOS);
+        RPageInfo pageInfo;
+
+        List<StockOption> stockOptions = this.stockOptionMapper.findMyOptionByKeywords(user.getId(), keyWords, stockType);
+        List<StockListVO> stockOptionListVOS = new ArrayList<>();
+
+        for (StockOption option : stockOptions) {
+            StockListVO stockListVO = assembleStockOptionListVO(option);
+            stockOptionListVOS.add(stockListVO);
         }
+        pageInfo = new RPageInfo();
+        pageInfo.setList(stockOptionListVOS);
+        pageInfo.setStockType(stockType);
         return ServerResponse.createBySuccess(pageInfo);
 
     }
@@ -88,6 +88,7 @@
         }
         return ServerResponse.createByErrorMsg("已添加");
     }
+
     public String isMyOption(Integer uid, String code) {
         StockOption stockOption = this.stockOptionMapper.isOption(uid, code);
         if (stockOption == null) {
@@ -95,6 +96,7 @@
         }
         return "1";
     }
+
     private StockListVO assembleStockOptionListVO(StockOption option) {
         Stock stock = this.stockMapper.selectByPrimaryKey(option.getStockId());
         StockListVO stockVO = StockApi.getStockRealTime(stock);
diff --git a/src/main/java/com/nq/service/impl/StockServiceImpl.java b/src/main/java/com/nq/service/impl/StockServiceImpl.java
index 9e25db6..40c79f9 100644
--- a/src/main/java/com/nq/service/impl/StockServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -7,15 +7,18 @@
 import com.github.pagehelper.PageInfo;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import com.nq.common.ServerResponse;
 import com.nq.config.StockPoll;
 import com.nq.dao.*;
 import com.nq.enums.EStockType;
 import com.nq.pojo.*;
+import com.nq.pojo.reponse.RPageInfo;
 import com.nq.service.*;
-import com.nq.utils.DateUtil;
 import com.nq.utils.http.HttpClientRequest;
 import com.nq.utils.PropertiesUtil;
+import com.nq.utils.redis.RedisKeyUtil;
 import com.nq.utils.redis.RedisShardedPoolUtils;
 import com.nq.utils.stock.pinyin.GetPyByChinese;
 import com.nq.utils.stock.qq.QqStockApi;
@@ -33,6 +36,8 @@
 import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.*;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -84,8 +89,9 @@
     @Resource
     StockDzMapper stockDzMapper;
 
-    @Resource
-    StockSubscribeMapper stockSubscribeMapper;
+
+    @Autowired
+    IPriceServices iPriceServices;
 
     public ServerResponse getMarket() {
         String market_url = PropertiesUtil.getProperty("sina.market.url");
@@ -121,8 +127,10 @@
 
     public ServerResponse getStock(int pageNum, int pageSize, String keyWords, String stockPlate, String stockType, HttpServletRequest request) {
         List<Stock> stockList = new ArrayList<>();
-        List<StockSubscribe> stockSubscribeList = new ArrayList<>();
-        if (stockType.equals("99")) {
+        if(null == stockType){
+            PageHelper.startPage(pageNum, pageSize);
+            stockList.addAll(stockMapper.findStockListByKeyWords(keyWords, stockPlate, stockType, Integer.valueOf(0), pageNum - 1, pageSize));
+        }else if (stockType.equals("99")) {
             PageHelper.startPage(pageNum, pageSize);
             stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "IN", Integer.valueOf(0)));
         } else if (stockType.equals("100")) {
@@ -132,46 +140,6 @@
             }
             PageHelper.startPage(pageNum, pageSize);
             stockList.addAll(stockMapper.findOptions(user.getId() + ""));
-        } else if (stockType.equals("xg")) {
-            PageHelper.startPage(pageNum, pageSize);
-            LambdaQueryWrapper<StockSubscribe> queryWrapper = new LambdaQueryWrapper();
-            queryWrapper.eq(StockSubscribe::getZt, 0);
-            stockSubscribeList = stockSubscribeMapper.selectList(queryWrapper);
-            if (stockSubscribeList != null && stockSubscribeList.size() > 0) {
-                for (StockSubscribe stockSubscribe : stockSubscribeList) {
-                    Stock dzStock = new Stock();
-                    Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, stockSubscribe.getCode()));
-                    if (null != stock) {
-                        dzStock.setStockName(stockSubscribe.getName());
-                        dzStock.setStockCode(stockSubscribe.getCode());
-                        dzStock.setStockType(stockSubscribe.getStockType());
-                        dzStock.setStockGid(stock.getStockGid());
-                        dzStock.setType(stockSubscribe.getType());
-                        dzStock.setPrice(stockSubscribe.getPrice());
-                        dzStock.setSubscribeTime(stockSubscribe.getSubscribeTime());
-                        dzStock.setSubscriptionTime(stockSubscribe.getSubscriptionEndTime());
-                        dzStock.setListDate(stockSubscribe.getListDate());
-                        dzStock.setOrderNumber(stockSubscribe.getOrderNumber());
-                        dzStock.setOrderMinNumber(stockSubscribe.getOrderMinNumber());
-                        stockList.add(dzStock);
-                    }
-                }
-            }
-        } else if (stockType.equals("sg")) {
-            PageHelper.startPage(pageNum, pageSize);
-            LambdaQueryWrapper<StockSubscribe> queryWrapper = new LambdaQueryWrapper();
-            queryWrapper.eq(StockSubscribe::getZt, 0);
-            queryWrapper.eq(StockSubscribe::getType, 2);
-            stockSubscribeList = stockSubscribeMapper.selectList(queryWrapper);
-            if (stockSubscribeList != null && stockSubscribeList.size() > 0) {
-                for (StockSubscribe stockSubscribe : stockSubscribeList) {
-                    Stock dzStock = new Stock();
-                    dzStock.setStockName(stockSubscribe.getName());
-                    dzStock.setStockCode(stockSubscribe.getCode());
-                    dzStock.setStockType(stockSubscribe.getStockType());
-                    stockList.add(dzStock);
-                }
-            }
         } else if (stockType.equals("qh")) {
             PageHelper.startPage(pageNum, pageSize);
             List<StockDz> stockDzs = stockDzMapper.findStockListByKeyWords(keyWords);
@@ -184,16 +152,13 @@
                 dzStock.setStockType(stockDz.getStockType());
                 stockList.add(dzStock);
             }
-        } else if (stockType.equals("ztb")) {
-            PageHelper.startPage(pageNum, pageSize);
-            stockList.addAll(stockMapper.dailyLimitQuery(keyWords, stockPlate, "in", Integer.valueOf(0), pageNum - 1, pageSize));
-        } else {
+        }else {
             PageHelper.startPage(pageNum, pageSize);
             stockList.addAll(stockMapper.findStockListByKeyWords(keyWords, stockPlate, stockType, Integer.valueOf(0), pageNum - 1, pageSize));
         }
 
         List<StockListVO> stockListVOS = Lists.newArrayList();
-        if (stockList.size() > 0) {
+        if (stockList.size() > 0){
             stockListVOS.addAll(StockApi.getStockReailTimes(stockList));
         }
         PageInfo pageInfo = new PageInfo(stockList);
@@ -210,10 +175,28 @@
         if (stockList.size() > 0) {
             stockListVOS.addAll(Objects.requireNonNull(StockApi.getStockReailTimes(stockList)));
         }
-        PageInfo pageInfo = new PageInfo(stockList);
+
+        // 根据实际情况调整核心线程数和最大线程数
+        int corePoolSize = Runtime.getRuntime().availableProcessors(); // 根据实际情况设置核心线程数(通常为CPU核心数)
+        int maxPoolSize = corePoolSize * 2; // 设置最大线程数为核心线程数的两倍
+        ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+        List<CompletableFuture<Void>> futures = stockListVOS.stream()
+                .map(stockListVO -> CompletableFuture.supplyAsync(() ->
+                                iPriceServices.getNowPrice(stockListVO.getCode(), stockType), executor)
+                        .thenAcceptAsync(price -> stockListVO.setNowPrice(price.toString()), executor))
+                .collect(Collectors.toList());
+
+        // 等待所有CompletableFuture完成
+        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
+
+
+
+        RPageInfo pageInfo = new RPageInfo();
         pageInfo.setList(stockListVOS);
+        pageInfo.setStockType(stockType);
         return ServerResponse.createBySuccess(pageInfo);
     }
+
 
     public ServerResponse getDateline(HttpServletResponse response, String code) {
         if (StringUtils.isBlank(code))
@@ -293,16 +276,15 @@
         Stock stock = stockMapper.findStockByCode(code);
         Integer depositAmt = 0;
         String introduction = null;
-        String result = null;
-        com.alibaba.fastjson2.JSONObject json = null;
-
-        String gid = stock.getStockGid();
-
-        StockVO stockVO = StockApi.assembleInStockVO(stock);
+        StockVO   stockVO = StockApi.assembleInStockVO(stock);
         stockVO.setDepositAmt(depositAmt);
+        BigDecimal price = stockDzMapper.getPrice(stock.getStockCode());
+        stockVO.setPrice(price != null ? price.toString() : "0");
+        stockVO.setNowPrice(iPriceServices.getNowPrice(stock.getStockCode(),stock.getStockType()).toString());
         stockVO.setType(stock.getStockType());
         stockVO.setId(stock.getId().intValue());
         stockVO.setCode(stock.getStockCode());
+        stockVO.setName(stock.getStockName());
         stockVO.setSpell(stock.getStockSpell());
         stockVO.setGid(stock.getStockGid().toUpperCase());
         Map map = Maps.newHashMap();
@@ -487,15 +469,65 @@
         return ServerResponse.createBySuccess(echartsDataVO);
     }
 
-    /*股票日线-K线*/
+    @lombok.Data
+    class kData {
+        long t;
+        String c;
+        String o;
+        String h;
+        String l;
+        String v;
+        String vo;
+    }
+
     @Override
     public Object getKData(String pid, String interval, String stockType) {
         EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
+        if(eStockType == EStockType.IN){
+            Object object = HttpUtil.get(eStockType.stockUrl + "api/all/getKData.do?pid=" + pid + "&interval=" + interval + "&stockType=in");
+            Gson gson = new Gson();
+            List<kData> dataList = gson.fromJson(object.toString(), new TypeToken<List<kData>>(){}.getType());
 
+            Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, pid).eq(Stock::getStockType, "IN"));
+            BigDecimal nowPrice = iPriceServices.getNowPrice(stock.getStockCode());
+            Map singleStock = getSingleStock(stock.getStockCode());
+            StockVO stockVO = (StockVO)singleStock.get("stock");
+            // 修改 List 中的最后一条数据
+            kData lastData = dataList.get(dataList.size() - 1);
+            lastData.setC(nowPrice.toString());
+            lastData.setO(stockVO.getOpen_px());
+            lastData.setH(stockVO.getToday_max());
+            lastData.setL(stockVO.getToday_min());
+            return gson.toJson(dataList);
 
-        String string = HttpUtil.get("http://103.215.76.36:8001/api/all/getKData.do?pid=" + pid + "&interval=" + interval + "&stockType=in");
+        }
+        return  HttpUtil.get(eStockType.stockUrl + "kline?pid=" + pid + "&interval=" + interval + "&key=" + eStockType.stockKey);
+    }
 
-        return string;
+    public Map getSingleStock(String code) {
+        if (StringUtils.isBlank(code))
+            return null;
+        Stock stock = stockMapper.findStockByCode(code);
+        DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stock);
+        Integer depositAmt = 0;
+        String introduction = null;
+        StockVO   stockVO = StockApi.assembleInStockVO(stock);
+        stockVO.setDepositAmt(depositAmt);
+        stockVO.setNowPrice(iPriceServices.getNowPrice(stock.getStockCode()).toString());
+        stockVO.setType(stock.getStockType());
+        stockVO.setId(stock.getId().intValue());
+        stockVO.setCode(stock.getStockCode());
+        stockVO.setName(stock.getStockName());
+        stockVO.setSpell(stock.getStockSpell());
+        stockVO.setGid(stock.getStockGid().toUpperCase());
+        if(null != cacheBaseStock){
+            stockVO.setOpen_px(cacheBaseStock.getOpen());
+            stockVO.setPreclose_px(cacheBaseStock.getPrevClose());
+        }
+        Map map = Maps.newHashMap();
+        map.put("introduction", introduction);
+        map.put("stock", stockVO);
+        return map;
     }
 
     @Override
@@ -504,41 +536,7 @@
         if (user == null) {
             return ServerResponse.createByErrorMsg("Please log in");
         }
-
         return ServerResponse.createBySuccess();
-//        List<Stock> stockList = stockMapper.findOptions(user.getId() + "");
-////    List<Stock> stockList = stockMapper.findOptions("485");
-//        List<StockListVO> stockListVOS = Lists.newArrayList();
-//        if (stockList.size() > 0)
-//            for (Stock stock : stockList) {
-//                StockListVO stockListVO = new StockListVO();
-//                QueryWrapper<InStockBean> queryWrapper = new QueryWrapper<>();
-//                queryWrapper.eq("id", stock.getStockCode());
-//                InStockBean inStockBean = inStockMapper.selectOne(queryWrapper);
-//                if (inStockBean == null) {
-//                    continue;
-//                }
-//                stockListVO.setNowPrice(inStockBean.getLast());
-//                stockListVO.setToday_max(inStockBean.getHigh());
-//                stockListVO.setToday_min(inStockBean.getLow());
-//                stockListVO.setHcrate(BigDecimal.valueOf(Double.parseDouble(inStockBean.getChgPct())));
-//                stockListVO.setBusiness_amount(inStockBean.getVolume());
-//                stockListVO.setBusiness_balance(inStockBean.getAvgVolume());
-//                stockListVO.setPreclose_px(inStockBean.getPrevClose());
-//                stockListVO.setOpen_px(inStockBean.getOpen());
-//                stockListVO.setName(stock.getStockName());
-//                stockListVO.setCode(stock.getStockCode());
-//                stockListVO.setSpell(stock.getStockSpell());
-//                stockListVO.setGid(stock.getStockGid());
-//                BigDecimal day3Rate = (BigDecimal) selectRateByDaysAndStockCode(stock.getStockCode(), 3).getData();
-//                stockListVO.setDay3Rate(day3Rate);
-//                stockListVO.setStock_plate(stock.getStockPlate());
-//                stockListVO.setStock_type(stock.getStockType());
-//                stockListVOS.add(stockListVO);
-//            }
-//        PageInfo pageInfo = new PageInfo(stockList);
-//        pageInfo.setList(stockListVOS);
-
     }
 
     public ServerResponse<Stock> findStockByName(String name) {
@@ -789,26 +787,5 @@
             }
         }
         return ServerResponse.createBySuccess(pool);
-    }
-
-    @Override
-    public ServerResponse getStockSubscribeList(StockSubscribeListParamVo vo) {
-        Integer pageType = vo.getPageType();
-        if (pageType == null || pageType == 0) {
-            return ServerResponse.createByErrorMsg("param is null");
-        }
-        QueryWrapper<StockSubscribe> subscribeQueryWrapper = new QueryWrapper<>();
-        switch (pageType) {
-            case 1:
-                subscribeQueryWrapper.between("list_date",new Date(), DateUtil.afterManyDays(30));
-                break;
-            case 2:
-                subscribeQueryWrapper.eq("type",1);
-                break;
-            case 3:
-                subscribeQueryWrapper.eq("type",2);
-                break;
-        }
-        return ServerResponse.createBySuccess(stockSubscribeMapper.selectList(subscribeQueryWrapper));
     }
 }
diff --git a/src/main/java/com/nq/service/impl/StockSettingServicesImpl.java b/src/main/java/com/nq/service/impl/StockSettingServicesImpl.java
new file mode 100644
index 0000000..0f0488d
--- /dev/null
+++ b/src/main/java/com/nq/service/impl/StockSettingServicesImpl.java
@@ -0,0 +1,72 @@
+package com.nq.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.nq.common.ServerResponse;
+import com.nq.dao.StockMapper;
+import com.nq.dao.StockSettingMapper;
+import com.nq.pojo.Stock;
+import com.nq.pojo.StockSetting;
+import com.nq.service.IStockSettingServices;
+import org.apache.http.util.TextUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+
+@Service
+public class StockSettingServicesImpl implements IStockSettingServices {
+
+
+
+    @Resource
+    StockSettingMapper stockSettingMapper;
+
+    @Resource
+    StockMapper stockMapper;
+
+    @Override
+    public ServerResponse updateStockSetting(StockSetting stockSetting) {
+        if(stockSetting.getPrice()!=null){
+            stockSetting.setNowPrice(stockSetting.getPrice());
+        }
+       int ref =  stockSettingMapper.updateById(stockSetting);
+
+       if(ref == 0){
+           return   ServerResponse.createByErrorMsg("修改失败");
+       }
+        return ServerResponse.createBySuccess();
+    }
+
+    @Override
+    public ServerResponse saveStockSetting(StockSetting stockSetting) {
+
+
+        Stock stock = stockMapper.findStockByCode(stockSetting.getStockCode());
+        if(stock == null){
+           return ServerResponse.createByErrorMsg("添加股票不存在");
+        }
+        int ref =  stockSettingMapper.insert(stockSetting);
+        if(ref == 0){
+            return  ServerResponse.createByErrorMsg("修改失败");
+        }
+        return ServerResponse.createBySuccess();
+    }
+
+    @Override
+    public ServerResponse deleteStockSetting(Integer id) {
+        int ref =  stockSettingMapper.deleteById(id);
+        if(ref == 0){
+            return  ServerResponse.createByErrorMsg("修改失败");
+        }
+        return ServerResponse.createBySuccess();
+    }
+
+    @Override
+    public ServerResponse queryAll(String stockCode) {
+        QueryWrapper<StockSetting>  queryWrapper = new QueryWrapper<>();
+        if(!TextUtils.isEmpty(stockCode)){
+            queryWrapper.eq("stock_code",stockCode);
+        }
+        return ServerResponse.createBySuccess(stockSettingMapper.selectList(queryWrapper));
+    }
+}
diff --git a/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
index 104ef3c..3f1e88b 100644
--- a/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
@@ -1,12 +1,9 @@
 package com.nq.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
-import com.nq.dao.StockMapper;
-import com.nq.pojo.Stock;
 import com.nq.pojo.StockSubscribe;
 import com.nq.service.IStockSubscribeService;
 import com.nq.dao.StockSubscribeMapper;
@@ -28,8 +25,6 @@
         implements IStockSubscribeService {
     @Autowired
     StockSubscribeMapper stockSubscribeMapper;
-    @Autowired
-    StockMapper stockMapper;
 
     /**
      * @Description: 用户新股列表
@@ -77,14 +72,14 @@
     public ServerResponse add(StockSubscribe model, HttpServletRequest request) {
         //判断是否已经存在
         log.info("model:{}", model);
-        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, model.getCode()));
-        if(null == stock){
-            return ServerResponse.createByErrorMsg("股票代码不存在!");
-        }
         List<StockSubscribe> stockSubscribeList = this.stockSubscribeMapper.selectList(new QueryWrapper<StockSubscribe>().eq("code", model.getCode()));
         if (stockSubscribeList != null && stockSubscribeList.size() > 0) {
             return ServerResponse.createByErrorMsg("新股已经存在,不要重复添加");
         }
+//        String sinaStock = SinaStockApi.getInStockDetail(model.getCode());
+//        String[] arrayOfString = sinaStock.split(",");
+//        if (arrayOfString.length < 10)
+//        return ServerResponse.createByErrorMsg("数据源无该新股");
         //添加新股
         int resultCount = this.stockSubscribeMapper.insert(model);
         if (resultCount > 0) {
diff --git a/src/main/java/com/nq/service/impl/StockTimeSettingServicesImpl.java b/src/main/java/com/nq/service/impl/StockTimeSettingServicesImpl.java
new file mode 100644
index 0000000..a179f32
--- /dev/null
+++ b/src/main/java/com/nq/service/impl/StockTimeSettingServicesImpl.java
@@ -0,0 +1,32 @@
+package com.nq.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.nq.common.ServerResponse;
+import com.nq.dao.StockTimeSettingMapper;
+import com.nq.pojo.StockTimeSetting;
+import com.nq.service.IStockTimeSettingServices;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class StockTimeSettingServicesImpl implements IStockTimeSettingServices {
+
+
+    @Resource
+    StockTimeSettingMapper mapper;
+
+    @Override
+    public ServerResponse updateStockTimeSetting(StockTimeSetting stockTimeSetting) {
+        int ref =  mapper.updateById(stockTimeSetting);
+        if(ref == 0){
+          return   ServerResponse.createByErrorMsg("修改失败");
+        }
+        return ServerResponse.createBySuccess();
+    }
+
+    @Override
+    public ServerResponse queryStockTimeSetting() {
+        return ServerResponse.createBySuccess(mapper.selectList(new QueryWrapper<StockTimeSetting>()));
+    }
+}
diff --git a/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java b/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
index 0ed6d04..c4848bc 100644
--- a/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
@@ -1,10 +1,25 @@
 package com.nq.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nq.dao.StockMapper;
+import com.nq.dao.StockSettingMapper;
+import com.nq.dao.StockTimeSettingMapper;
 import com.nq.dao.TradingHourMapper;
+import com.nq.enums.EStockType;
+import com.nq.pojo.Stock;
+import com.nq.pojo.StockSetting;
+import com.nq.pojo.StockTimeSetting;
 import com.nq.pojo.TradingHour;
-import com.nq.service.TradingHourService;
+import com.nq.service.ITradingHourService;
+import com.nq.utils.timeutil.TimeUtil;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.ZoneId;
 
 /**
  * @program: dabao
@@ -12,16 +27,65 @@
  * @create: 2024-03-31 13:18
  **/
 @Service
-public class TradingHourServiceImpl extends ServiceImpl<TradingHourMapper, TradingHour> implements TradingHourService {
+public class TradingHourServiceImpl extends ServiceImpl<TradingHourMapper, TradingHour> implements ITradingHourService {
 
+
+
+
+    @Resource
+    StockTimeSettingMapper stockTimeSettingMapper;
+
+    @Resource
+    StockMapper stockMapper;
+
+
+    @Resource
+    StockSettingMapper stockSettingMapper;
 
     /**
      * 判断股票代码是否在可交易时间段
      * @return
      */
     @Override
+    public Boolean timeCheck(String  stockCode) {
+        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
+        Stock stock =   stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
+        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type",stock.getStockType()));
+        if(stockSetting!= null){
+            // 说明进入盘前交易或者盘后交易时间
+            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
+                return  true;
+            }
+        }
+        if(stockTimeSetting == null){
+            return  false;
+        }
+        if(!stockTimeSetting.getWeekDay().contains(String.valueOf(LocalDate.now().getDayOfWeek().getValue()))){
+            return false;
+        }
+
+        return TimeUtil.isTradingHour(stockTimeSetting.getAmStartTime(),stockTimeSetting.getAmEndTime(),stockTimeSetting.getPmStartTime(),stockTimeSetting.getPmEndTime());
+    }
+
+    /**
+     * 判断股票代码是否在可交易时间段
+     * @return
+     */
+    @Override
+    public Boolean weekDayeCheck(String  stockCode) {
+
+        Stock stock =   stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
+        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type",stock.getStockType()));
+        if(stockTimeSetting.getAccetsType().equals(EStockType.US.getCode())){
+            ZoneId usEastern = ZoneId.of("America/New_York");
+            LocalDate date = LocalDate.now(usEastern);
+            return stockTimeSetting.getWeekDay().indexOf(String.valueOf(date.getDayOfWeek().getValue())) >= 0;
+        }
+        return stockTimeSetting.getWeekDay().indexOf(String.valueOf(LocalDate.now().getDayOfWeek().getValue())) >= 0;
+    }
+
+    @Override
     public Boolean timeCheck() {
-        //TODO 加入时间判断逻辑
         return true;
     }
 }
diff --git a/src/main/java/com/nq/service/impl/UserAssetsServices.java b/src/main/java/com/nq/service/impl/UserAssetsServices.java
index fc1312c..66ab3f1 100644
--- a/src/main/java/com/nq/service/impl/UserAssetsServices.java
+++ b/src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -1,18 +1,22 @@
 package com.nq.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nq.common.ServerResponse;
+import com.nq.dao.MoneyLogMapper;
 import com.nq.dao.UserAssetsMapper;
+import com.nq.dao.UserOptionLogMapper;
 import com.nq.enums.EStockType;
 import com.nq.enums.EUserAssets;
+import com.nq.pojo.MoneyLog;
 import com.nq.pojo.UserAssets;
+import com.nq.pojo.UserOptionLog;
 import com.nq.service.IUserAssetsServices;
+import org.joda.time.DateTime;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.lang.annotation.ElementType;
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -25,6 +29,11 @@
     @Resource
     UserAssetsMapper userAssetsMapper;
 
+    @Resource
+    UserOptionLogMapper userOptionLogMapper;
+
+    @Resource
+    MoneyLogMapper moneyLogMapper;
 
     @Override
     public UserAssets assetsByTypeAndUserId(String accetType, Integer userId) {
@@ -56,7 +65,14 @@
             }
         }
         userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(bigAmt));
-        if( userAssetsMapper.updateById(userAssets)>0){
+        if(userAssetsMapper.updateById(userAssets)>0){
+            userOptionLogMapper.insert(UserOptionLog.builder()
+                    .userId(userAssets.getUserId())
+                    .money(bigAmt)
+                    .userAccectId(userAssets.getId())
+                    .createTime(new Date())
+                    .type(amt.contains("-")?0:1)
+                    .build());
             return ServerResponse.createBySuccess();
         }else{
             return ServerResponse.createByErrorMsg("修改金额失败");
@@ -81,39 +97,109 @@
     }
 
 
-
     @Override
     public Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType) {
 
-        if(accetType.equals("SZHB")){
-            accetType = "US";
-        }
-        UserAssets userAssets =  selectByUserId(userId, EStockType.IN.getCode());
-       if(Objects.equals(eUserAssets.getCode(), EUserAssets.BUY.getCode())){
+        UserAssets userAssets =   assetsByTypeAndUserId(accetType,userId);
+
+        String type = eUserAssets.getDesc();
+        String before = userAssets.getAvailableBalance().toString();
+        String accectType = userAssets.getAccectType();
+        if(Objects.equals(eUserAssets.getCode(), EUserAssets.BUY.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
             userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount.negate()));
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
-            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount));
+            extracted(amount, userAssets);
         }else  if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT.getCode())){
-            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+            if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
+                BigDecimal availableBalance = amount.subtract(userAssets.getAmountToBeCovered());
+                if(availableBalance.compareTo(BigDecimal.ZERO) > 0){
+                    userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(availableBalance));
+                    userAssets.setAmountToBeCovered(BigDecimal.ZERO);
+                }else{
+                    BigDecimal amountToBeCovered = userAssets.getAmountToBeCovered().subtract(amount);
+                    userAssets.setAmountToBeCovered(amountToBeCovered);
+                }
+            }else{
+                userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+            }
             userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount));
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CALCULATE_PROFIT_AND_LOSS.getCode())){
-            userAssets.setCumulativeProfitAndLoss(userAssets.getProfitAndLoss().add(amount));
+            extracted(amount, userAssets);
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TRANSFER.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+            eUserAssets.setDesc(desc);
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TOP_UP.getCode())){
-            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
-            userAssets.setTotleAssets(userAssets.getTotleAssets().add(amount));
+            if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
+                BigDecimal availableBalance = amount.subtract(userAssets.getAmountToBeCovered());
+                if(availableBalance.compareTo(BigDecimal.ZERO) > 0){
+                    userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(availableBalance));
+                    userAssets.setAmountToBeCovered(BigDecimal.ZERO);
+                }else{
+                    BigDecimal amountToBeCovered = userAssets.getAmountToBeCovered().subtract(amount);
+                    userAssets.setAmountToBeCovered(amountToBeCovered);
+                }
+            }else{
+                userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
+            }
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.WITHDRAW.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
-            userAssets.setTotleAssets(userAssets.getTotleAssets().add(amount));
+        }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.HANDLING_CHARGE.getCode())){
+            userAssets.setHandlingCharge(userAssets.getHandlingCharge().add(amount.abs()));
+            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate()));
+            extracted(amount.negate(),userAssets);
+        }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CONSTRAINT_CLOSE_POSITION.getCode())){
+            userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount));
+            if(userAssets.getIsZf() == 0){
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().subtract(amount));
+            }else{
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount));
+            }
+            extracted(userAssets);
         }
+        String  after =  userAssets.getAvailableBalance().toString();
+        MoneyLog moneyLog = new MoneyLog();
+        moneyLog.setDescs(eUserAssets.getDesc());
+        moneyLog.setBeFore(before);
+        moneyLog.setAfter(after);
+        moneyLog.setAmount(amount.toString());
+        moneyLog.setAccectType(accectType);
+        moneyLog.setType(eUserAssets.getCode());
+        moneyLog.setUserId(userId+"");
+        moneyLog.setSymbol(EStockType.getEStockTypeByCode(accetType).getSymbol());
+        moneyLog.setCreateTime(new Date());
+        moneyLogMapper.insert(moneyLog);
         return userAssetsMapper.updateById(userAssets)>1;
     }
 
-    @Override
-    public UserAssets selectByUserId(Integer id,String type) {
-        return userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>().eq(UserAssets::getUserId,id).eq(UserAssets::getAccectType,type));
+    //只要涉及到cumulativeProfitAndLoss变动重新设置状态
+    private static void extracted(UserAssets userAssets) {
+        if(userAssets.getCumulativeProfitAndLoss().compareTo(BigDecimal.ZERO) >= 0){
+            userAssets.setIsZf(0);
+        }else{
+            userAssets.setIsZf(1);
+            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().abs());
+        }
+    }
+
+    private static void extracted(BigDecimal amount, UserAssets userAssets) {
+        if(userAssets.getIsZf() == 1){
+            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().negate());
+        }
+        if(userAssets.getIsZf() == 0){
+            if(amount.compareTo(BigDecimal.ZERO) >= 0){
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount.abs()));
+            }else{
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().subtract(amount.abs()));
+            }
+        }else{
+            if(amount.compareTo(BigDecimal.ZERO) >= 0){
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount.abs()));
+            }else{
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().subtract(amount.abs()));
+            }
+        }
+        extracted(userAssets);
     }
 }
diff --git a/src/main/java/com/nq/service/impl/UserBankServiceImpl.java b/src/main/java/com/nq/service/impl/UserBankServiceImpl.java
index 898ad78..5ceb463 100644
--- a/src/main/java/com/nq/service/impl/UserBankServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserBankServiceImpl.java
@@ -18,6 +18,7 @@
 
 import java.util.Date;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +28,7 @@
  @Service("iUserBankService")
  public class UserBankServiceImpl implements IUserBankService {
 
-   @Autowired
+   @Resource
    UserBankMapper userBankMapper;
 
    @Autowired
@@ -38,16 +39,9 @@
    public ServerResponse addBank(UserBank bank, HttpServletRequest request) {
 
      User user = this.iUserService.getCurrentUser(request);
-     if (user == null ){
-       return ServerResponse.createBySuccessMsg("Please log in first");
-     }
-
      UserBank dbBank = this.userBankMapper.findUserBankByUserId(user.getId());
-
      if (dbBank != null) {
-
-       return ServerResponse.createByErrorMsg("The bank information already exists. Do not add it again");
-
+       return ServerResponse.createByErrorMsg("银行信息已经存在。不要再加一次",request );
      }
      UserBank userBank = new UserBank();
 
@@ -68,11 +62,11 @@
      int insertCount = this.userBankMapper.insert(userBank);
 
      if (insertCount > 0) {
-       return ServerResponse.createBySuccess("Add bank card successfully");
+       return ServerResponse.createBySuccess("添加银行卡成功",request );
 
      }
 
-     return ServerResponse.createByErrorMsg("Failed to add bank card");
+     return ServerResponse.createByErrorMsg("添加银行卡失败",request );
 
    }
 
@@ -84,7 +78,7 @@
 
      if (dbBank == null) {
 
-       return ServerResponse.createByErrorMsg("The modification failed. The bank could not be found");
+       return ServerResponse.createByErrorMsg("修改失败。银行找不到",request );
 
      }
 
@@ -102,11 +96,11 @@
 
      if (updateCount > 0) {
 
-       return ServerResponse.createBySuccess("Modified bank card successfully");
+       return ServerResponse.createBySuccess("修改银行卡成功",request );
 
      }
 
-     return ServerResponse.createByErrorMsg("Failed to modify bank card");
+     return ServerResponse.createByErrorMsg("修改银行卡失败",request );
    }
 
    public ServerResponse getBankInfo(HttpServletRequest request) {
@@ -117,7 +111,7 @@
 
      if (dbBank == null) {
 
-       return ServerResponse.createByErrorMsg("No bank information was added");
+       return ServerResponse.createByErrorMsg("没有添加银行信息",request );
 
      }
 
@@ -140,18 +134,18 @@
    public ServerResponse updateBankByAdmin(UserBank userBank) {
      System.out.println(userBank.getId());
      if (userBank.getId() == null) {
-       return ServerResponse.createByErrorMsg("Change id Mandatory");
+       return ServerResponse.createByErrorMsg("更改id必选");
      }
 
      int updateCount = this.userBankMapper.updateByPrimaryKeySelective(userBank);
 
      if (updateCount > 0) {
 
-       return ServerResponse.createBySuccessMsg("Modified successfully");
+       return ServerResponse.createBySuccessMsg("修改成功");
 
      }
 
-     return ServerResponse.createByErrorMsg("Modification failure");
+     return ServerResponse.createByErrorMsg("修改失败");
 
    }
 
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 19b053d..13137f1 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1,5 +1,6 @@
 package com.nq.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nq.dao.*;
@@ -18,6 +19,7 @@
 import com.nq.utils.stock.pinyin.GetPyByChinese;
 import com.nq.utils.stock.sina.StockApi;
 import com.nq.utils.timeutil.DateTimeUtil;
+import com.nq.utils.timeutil.TimeUtil;
 import com.nq.vo.agent.AgentIncomeVO;
 import com.nq.vo.position.AdminPositionVO;
 import com.nq.vo.position.AgentPositionVO;
@@ -32,6 +34,11 @@
 
 import java.math.BigDecimal;
 import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -105,89 +112,66 @@
     IUserAssetsServices iUserAssetsServices;
 
     @Autowired
-    TradingHourServiceImpl tradingHourService;
+    ITradingHourService tradingHourService;
+
+    @Autowired
+    IPriceServices priceServices;
+
     @Autowired
     UserAssetsMapper userAssetsMapper;
 
     @Transactional
-    public ServerResponse buy(Integer stockId, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, HttpServletRequest request) throws Exception {
-
+    public ServerResponse buy(Integer stockId, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, HttpServletRequest request) {
 
         SiteProduct siteProduct = iSiteProductService.getProductSetting();
 
         User user = this.iUserService.getCurrentRefreshUser(request);
-        if (user.getIsActive() != 2) {
-            return ServerResponse.createByErrorMsg("Order failed, please first real name authentication");
+        if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) {
+            return ServerResponse.createByErrorMsg("订单失败,请先实名认证", request);
         }
+        SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
+        // 手续费率
+        BigDecimal siteSettingBuyFee = siteSetting.getBuyFee();
 
         if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
-            return ServerResponse.createByErrorMsg("Order failed, account has been locked");
-        }
-        SiteSetting siteSetting = this.iSiteSettingService.getSiteSetting();
-        if (siteSetting == null) {
-            log.error("下单出错,网站设置表不存在");
-            return ServerResponse.createByErrorMsg("Order failed, system setting error");
+            return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定", request);
         }
 
         Stock stock = stockMapper.selectByPrimaryKey(stockId);
         if (stock == null) {
-            return ServerResponse.createByErrorMsg("Order failed, stock code error");
+            return ServerResponse.createByErrorMsg("订单失败,股票代码不存在", request);
+        }
+        //判断股票是否在可交易时间段
+        Boolean b = tradingHourService.timeCheck(stock.getStockCode());
+        if (!b) {
+            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内", request);
         }
 
-        if (stock.getIsLock().intValue() != 0) {
-            return ServerResponse.createByErrorMsg("Order failed, shares cannot be traded at present");
+        UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(), user.getId());
+        if (stock.getIsLock() != 0) {
+            return ServerResponse.createByErrorMsg("订单失败,股票被锁定", request);
         }
 
-        List dbPosition = findPositionByStockCodeAndTimes(siteSetting.getBuySameTimes().intValue(), stock
-                .getStockCode(), user.getId());
-        if (dbPosition.size() >= siteSetting.getBuySameNums().intValue()) {
-            return ServerResponse.createByErrorMsg("Frequent trading," + siteSetting.getBuySameTimes() + "Hold no more than one stock within a minute" + siteSetting
-                    .getBuySameNums() + "article");
-        }
-
-        Integer transNum = findPositionNumByTimes(siteSetting.getBuyNumTimes().intValue(), user.getId());
-        if (transNum.intValue() / 100 >= siteSetting.getBuyNumLots().intValue()) {
-            return ServerResponse.createByErrorMsg("Frequent trading," + siteSetting
-                    .getBuyNumTimes() + "Hold no more than one stock within a minute" + siteSetting.getBuyNumLots() + "hand");
-        }
-
-        if (buyNum.intValue() < siteSetting.getBuyMinNum().intValue()) {
-            return ServerResponse.createByErrorMsg("Order failed, purchase quantity is less than" + siteSetting
-                    .getBuyMinNum() );
-        }
-        if (buyNum.intValue() > siteSetting.getBuyMaxNum().intValue()) {
-            return ServerResponse.createByErrorMsg("Order failed, purchase quantity is greater than于" + siteSetting
-                    .getBuyMaxNum() + "stocks");
-        }
-        BigDecimal now_price;
         //股票类型 现价 数据源的处理
-        StockListVO  stockListVO = StockApi.getStockRealTime(stock);
-        now_price = new BigDecimal(stockListVO.getNowPrice());
+        BigDecimal nowPrice = priceServices.getNowPrice(stock.getStockCode(),stock.getStockType());
 
-        if (now_price.compareTo(new BigDecimal("0")) == 0) {
-            return ServerResponse.createByErrorMsg("Quote 0, please try again later");
+        if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
+            return ServerResponse.createByErrorMsg("报价0,请稍后再试", request);
         }
 
-        BigDecimal buy_amt = now_price.multiply(new BigDecimal(buyNum));
+        BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever));
+        BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt);
 
-
-
-        UserAssets userAssets = userAssetsServices.selectByUserId(user.getId(),EStockType.IN.getCode());
-        if(userAssets.getAvailableBalance().compareTo(buy_amt)<0){
-            return ServerResponse.createByErrorMsg("Order failed,Insufficient balance");
-
+        if (userAssets.getAvailableBalance().compareTo(buyAmt.add(orderFree)) < 0) {
+            return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
         }
-
         UserPosition userPosition = new UserPosition();
-
         if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) {
             userPosition.setProfitTargetPrice(profitTarget);
         }
         if (stopTarget != null && stopTarget.compareTo(new BigDecimal("0")) > 0) {
             userPosition.setStopTargetPrice(stopTarget);
         }
-
-
         userPosition.setPositionType(user.getAccountType());
         userPosition.setPositionSn(KeyUtils.getUniqueKey());
         userPosition.setUserId(user.getId());
@@ -199,7 +183,7 @@
         userPosition.setStockSpell(stock.getStockSpell());
         userPosition.setBuyOrderId(GeneratePosition.getPositionId());
         userPosition.setBuyOrderTime(new Date());
-        userPosition.setBuyOrderPrice(now_price);
+        userPosition.setBuyOrderPrice(nowPrice);
         userPosition.setOrderDirection((buyType.intValue() == 0) ? "买涨" : "买跌");
         userPosition.setOrderNum(buyNum);
         if (stock.getStockPlate() != null) {
@@ -207,33 +191,21 @@
         }
         userPosition.setIsLock(Integer.valueOf(0));
         userPosition.setOrderLever(lever);
-        userPosition.setOrderTotalPrice(buy_amt);
-        BigDecimal allStayFee = BigDecimal.valueOf(0);
-        userPosition.setOrderStayFee(allStayFee);
-        userPosition.setOrderStayDays(1);
+        userPosition.setOrderTotalPrice(buyAmt);
+        // 手续费
 
-        BigDecimal buy_fee_amt = BigDecimal.valueOf(0);
-        log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
-        userPosition.setOrderFee(buy_fee_amt);
-
-        BigDecimal buy_yhs_amt = BigDecimal.valueOf(0);
-        log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
-        userPosition.setOrderSpread(buy_yhs_amt);
-
-        BigDecimal spread_rate_amt = new BigDecimal("0");
-
-        userPosition.setSpreadRatePrice(spread_rate_amt);
+        userPosition.setOrderFee(orderFree);
+        userPosition.setOrderSpread(BigDecimal.ZERO);
+        userPosition.setSpreadRatePrice(BigDecimal.ZERO);
         BigDecimal profit_and_lose = new BigDecimal("0");
         userPosition.setProfitAndLose(profit_and_lose);
-        BigDecimal all_profit_and_lose = profit_and_lose.subtract(buy_fee_amt).subtract(buy_yhs_amt).subtract(spread_rate_amt);
-        userPosition.setAllProfitAndLose(all_profit_and_lose);
+        userPosition.setAllProfitAndLose(profit_and_lose.add(orderFree));
         userPosition.setOrderStayDays(Integer.valueOf(0));
-        userPosition.setOrderStayFee(new BigDecimal("0"));
-
-        userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(buy_amt));
-        userAssetsMapper.updateById(userAssets);
-        this.userPositionMapper.insert(userPosition);
-        return ServerResponse.createBySuccessMsg("Order successful");
+        userPosition.setOrderStayFee(BigDecimal.ZERO);
+        userPositionMapper.insert(userPosition);
+        iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.BUY, buyAmt.negate(), "", "");
+        iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.HANDLING_CHARGE, orderFree, "", "");
+        return ServerResponse.createBySuccessMsg("下单成功", request);
     }
 
 
@@ -247,7 +219,7 @@
         if (positionSn.contains("index")) {
             UserIndexPosition userIndexPosition = userIndexPositionMapper.selectIndexPositionBySn(positionSn.replace("index", ""));
             if (userIndexPosition == null) {
-                return ServerResponse.createByErrorMsg("指数持仓单不存在");
+                return ServerResponse.createByErrorMsg("指数持仓单不存在",request);
             }
             if (profitTarget != null && profitTarget > 0) {
                 userIndexPosition.setProfitTargetPrice(BigDecimal.valueOf(profitTarget));
@@ -255,13 +227,12 @@
             if (stopTarget != null && stopTarget > 0) {
                 userIndexPosition.setStopTargetPrice(BigDecimal.valueOf(stopTarget));
             }
-            log.info("指数止盈线" + profitTarget + "-------指数止损线" + stopTarget);
             update = this.userIndexPositionMapper.updateByPrimaryKeySelective(userIndexPosition);
         } else {
             UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
 
             if (userPosition == null) {
-                return ServerResponse.createByErrorMsg("持仓记录不存在");
+                return ServerResponse.createByErrorMsg("持仓记录不存在",request);
             }
             if (profitTarget != null && profitTarget > 0) {
                 userPosition.setProfitTargetPrice(BigDecimal.valueOf(profitTarget));
@@ -273,114 +244,177 @@
             update = this.userPositionMapper.updateByPrimaryKeySelective(userPosition);
         }
         if (update > 0) {
-            return ServerResponse.createBySuccessMsg("修改成功");
+            return ServerResponse.createBySuccessMsg("修改成功",request);
         } else {
-            return ServerResponse.createByErrorMsg("修改失败");
+            return ServerResponse.createByErrorMsg("修改失败",request);
         }
     }
 
-
+    public static void main(String[] args) {
+        String a = "09:00";
+        System.out.println(Integer.parseInt(a.split(":")[0])>12);
+    }
 
     @Transactional
-    public ServerResponse sell(String positionSn, int doType) throws Exception  {
-        SiteSetting siteSetting = this.iSiteSettingService.getSiteSetting();
-        if (siteSetting == null) {
-            log.error("平仓出错,网站设置表不存在");
-            return ServerResponse.createByErrorMsg("Order failed, system setting error");
-        }
-        SiteProduct siteProduct = iSiteProductService.getProductSetting();
+    public ServerResponse sell(String positionSn, int doType){
         UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
+        BigDecimal siitteBuyFee = iSiteSettingService.getSiteSetting().getBuyFee();
+        Boolean b = tradingHourService.timeCheck(userPosition.getStockCode());
 
-        if (userPosition == null) {
-            return ServerResponse.createByErrorMsg("Closing failed, order does not exist");
+        if (!b) {
+            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内");
         }
-
+        if (userPosition == null) {
+            return ServerResponse.createByErrorMsg("平仓失败,订单不存在");
+        }
         User user = this.userMapper.selectById(userPosition.getUserId());
         if (user == null) {
-            return ServerResponse.createByErrorMsg("Closed position failed, user does not exist");
+            return ServerResponse.createByErrorMsg("平仓失败,用户不存在");
         }
-
-        /*实名认证开关开启*/
-        if (user.getIsActive() != 2) {
-
-            return ServerResponse.createByErrorMsg("Closing failed, user is locked");
-
-        }
-
-
         if (userPosition.getSellOrderId() != null) {
-            return ServerResponse.createByErrorMsg("Closing failed, this order is closed");
+            return ServerResponse.createByErrorMsg("平仓失败, 订单已平仓");
         }
-
         if (1 == userPosition.getIsLock().intValue()) {
             return ServerResponse.createByErrorMsg("this order is closed " + userPosition.getLockMsg());
         }
-        BigDecimal now_price;
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
-        //股票卖出的 价格 数据源
-
-        StockListVO    stockListVO = StockApi.getStockRealTime(stock);
-        now_price = new BigDecimal(stockListVO.getNowPrice());
-        if (stockListVO.getNowPrice() == null) {
-            return ServerResponse.createByErrorMsg("Failed to close position, failed to obtain stock information");
+        BigDecimal  nowPrice = priceServices.getNowPrice(userPosition.getStockCode());
+        if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
+            return ServerResponse.createByErrorMsg("报价0,平仓失败,请稍后再试");
         }
-        if (now_price.compareTo(new BigDecimal("0")) != 1) {
-            log.error("股票 = {} 收到报价 = {}", userPosition.getStockName(), now_price);
-            return ServerResponse.createByErrorMsg("Quote 0, closing failed, please try again later");
-        }
-
         userPosition.setSellOrderId(GeneratePosition.getPositionId());
-        userPosition.setSellOrderPrice(now_price);
+        userPosition.setSellOrderPrice(nowPrice);
         userPosition.setSellOrderTime(new Date());
-        userPositionMapper.updateById(userPosition);
 
-        BigDecimal multiply = now_price.multiply(new BigDecimal(userPosition.getOrderNum()));//最新平仓总价
-        BigDecimal purchasePrice = userPosition.getBuyOrderPrice().multiply(new BigDecimal(userPosition.getOrderNum()));//购买总价
-        UserAssets userAssets = userAssetsServices.selectByUserId(user.getId(),EStockType.IN.getCode());
-        BigDecimal subtract = multiply.subtract(purchasePrice);//盈亏价格
-        userAssets.setTotleAssets(userAssets.getTotleAssets().add(subtract));
-        userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(multiply));
-        BigDecimal ultimately = BigDecimal.ZERO;
-        if(userAssets.getSign() < 0){
-            BigDecimal negate = userAssets.getCumulativeProfitAndLoss().negate();
-            ultimately = negate.add(subtract);
-        }else{
-            BigDecimal negate = userAssets.getCumulativeProfitAndLoss();
-            ultimately = negate.add(subtract);
+        BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
+        BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
+        userPositionMapper.updateById(userPosition);
+        userAssetsServices.availablebalanceChange(stock.getStockType(),
+                userPosition.getUserId(),EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
+                userPosition.getOrderTotalPrice(),"","");
+        userAssetsServices.availablebalanceChange(stock.getStockType(),
+                userPosition.getUserId(),EUserAssets.HANDLING_CHARGE,
+                xsPrice,"","");
+
+        PositionProfitVO profitVO =  UserPointUtil.getPositionProfitVO(userPosition,priceServices.getNowPrice(userPosition.getStockCode()));
+        userAssetsServices.availablebalanceChange(stock.getStockType(),userPosition.getUserId(),EUserAssets.CLOSE_POSITION,
+                profitVO.getAllProfitAndLose() ,"","");
+        return ServerResponse.createBySuccessMsg("平仓成功!");
+    }
+
+
+    @Transactional
+    public ServerResponse sell(String positionSn, int doType, HttpServletRequest request) {
+        UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
+
+        SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
+        // 手续费率
+        BigDecimal siitteBuyFee = siteSetting.getSellFee();
+
+
+
+//        Calendar calendar = Calendar.getInstance();
+//        int time = calendar.get(Calendar.HOUR_OF_DAY);
+//        if(time<12 && time>=Integer.parseInt(siteSetting.getTransAmEnd().split(":")[0])){ //上午
+//            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内",request);
+//        }
+//        if(time>12 && time>=Integer.parseInt(siteSetting.getTransPmEnd().split(":")[0])){//下午
+//            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内",request);
+//        }
+        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
+        if(null == stock){
+            return ServerResponse.createBySuccessMsg("股票不存在!", request);
         }
-        if(ultimately.signum() < 0){
-            userAssets.setSign(-1);
-        }else{
-            userAssets.setSign(1);
+        //判断股票是否在可交易时间段
+//        Boolean b = isStockMarketOpen(stock.getStockType());
+//        Boolean wb = tradingHourService.weekDayeCheck(stock.getStockCode());
+//            if (!b || !wb) {
+//            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内", request);
+//        }
+
+        Boolean b = tradingHourService.timeCheck(userPosition.getStockCode());
+        if (!b) {
+            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内");
         }
-        userAssets.setCumulativeProfitAndLoss(ultimately.abs());
-        userAssetsMapper.updateById(userAssets);
-        userMapper.updateById(user);
-        return ServerResponse.createBySuccessMsg("Closed position successfully!");
+
+        if (userPosition == null) {
+            return ServerResponse.createByErrorMsg("平仓失败,订单不存在", request);
+        }
+        User user = this.userMapper.selectById(userPosition.getUserId());
+        if (user == null) {
+            return ServerResponse.createByErrorMsg("平仓失败,用户不存在", request);
+        }
+        if (userPosition.getSellOrderId() != null) {
+            return ServerResponse.createByErrorMsg("平仓失败, 订单已平仓", request);
+        }
+        if (1 == userPosition.getIsLock().intValue()) {
+            return ServerResponse.createByErrorMsg("this order is closed " + userPosition.getLockMsg());
+        }
+        BigDecimal nowPrice = priceServices.getNowPrice(userPosition.getStockCode());
+        if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
+            return ServerResponse.createByErrorMsg("报价0,平仓失败,请稍后再试", request);
+        }
+        userPosition.setSellOrderId(GeneratePosition.getPositionId());
+        userPosition.setSellOrderPrice(nowPrice);
+        userPosition.setSellOrderTime(new Date());
+
+        BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
+        BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
+        userPositionMapper.updateById(userPosition);
+        userAssetsServices.availablebalanceChange(stock.getStockType(),
+                userPosition.getUserId(),
+                EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
+                userPosition.getOrderTotalPrice(), "", "");
+        userAssetsServices.availablebalanceChange(stock.getStockType(),
+                userPosition.getUserId(), EUserAssets.HANDLING_CHARGE,
+                xsPrice, "", "");
+
+        PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(userPosition,
+                priceServices.getNowPrice(userPosition.getStockCode()));
+
+        userAssetsServices.availablebalanceChange(stock.getStockType(),
+                userPosition.getUserId(), EUserAssets.CLOSE_POSITION,
+                profitVO.getAllProfitAndLose(), "", "");
+        return ServerResponse.createBySuccessMsg("平仓成功!", request);
+    }
+
+    public boolean isStockMarketOpen(String stockType){
+        ZoneId zone = ZoneId.of("Asia/Shanghai");
+        LocalTime now = LocalTime.now(zone);
+        if("US".equalsIgnoreCase(stockType)){
+            LocalTime startTime = LocalTime.of(21, 30);
+            LocalTime endTime = LocalTime.of(4, 0);
+            if (now.isAfter(startTime) || now.isBefore(endTime)) {
+                return true;
+            } else {
+                return false;
+            }
+        }else if("IN".equalsIgnoreCase(stockType)){
+            LocalTime instartTime = LocalTime.of(11, 15);
+            LocalTime inendTime = LocalTime.of(17, 30);
+            if (now.isAfter(instartTime) && now.isBefore(inendTime)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        return false;
     }
 
     @Transactional
     @Override
     public ServerResponse allSell(HttpServletRequest request,String stockType) throws Exception{
         //判断股票是否在可交易时间段
-        Boolean b = tradingHourService.timeCheck();
-        if (!b) {
-            return ServerResponse.createByErrorMsg("Order failed, not in the  stock trading session");
-        }
-        User user =    iUserService.getCurrentUser(request);
-        if(user == null){
-            return ServerResponse.createByErrorMsg("Please login");
-        }
+        User user = iUserService.getCurrentUser(request);
         QueryWrapper<UserPosition> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("user_id",user.getId());
-        queryWrapper.eq("stock_gid",stockType);
+        queryWrapper.eq("user_id", user.getId());
         queryWrapper.isNull("sell_order_id");
 
         List<UserPosition> userPositionList = userPositionMapper.selectList(queryWrapper);
         for (int i = 0; i < userPositionList.size(); i++) {
-            sell(userPositionList.get(i).getPositionSn(),0);
+            sell(userPositionList.get(i).getPositionSn(), 0);
         }
-        return ServerResponse.createBySuccessMsg("Closed position successfully!");
+        return ServerResponse.createBySuccessMsg("平仓成功!");
     }
 
     //用户追加保证金操作
@@ -526,23 +560,38 @@
         return ServerResponse.createByErrorMsg("删除失败");
     }
 
+    @Override
+    public UserPositionVO findByPostionSn(String positionSn) {
+        UserPosition userPosition =    userPositionMapper.selectOne(new QueryWrapper<UserPosition>().eq("position_sn",positionSn));
+        if(userPosition == null){
+            return null;
+        }
+
+        return UserPointUtil.assembleUserPositionVO(userPosition,priceServices.getNowPrice(userPosition.getStockCode()));
+    }
+
     public ServerResponse findMyPositionByCodeAndSpell(String stockCode, String stockSpell,
                                                        Integer state, HttpServletRequest request,
                                                        int pageNum, int pageSize, String stockType) {
         User user = this.iUserService.getCurrentUser(request);
 
         PageHelper.startPage(pageNum, pageSize);
+        List<UserPosition> userPositions;
 
 
-        List<UserPosition> userPositions = this.userPositionMapper.
+
+        userPositions = userPositionMapper.
                 findMyPositionByCodeAndSpell(user.getId(),
                         stockCode, stockSpell,
                         state, stockType);
 
+
         List<UserPositionVO> userPositionVOS = Lists.newArrayList();
         if (userPositions.size() > 0) {
             for (UserPosition position : userPositions) {
-                UserPositionVO userPositionVO = assembleUserPositionVO(position);
+                UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode(),stockType));
+                userPositionVO.setOrderTotalPrice(userPositionVO.getOrderTotalPrice().multiply(new BigDecimal(userPositionVO.getOrderLever())));
+                userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
                 userPositionVOS.add(userPositionVO);
             }
         }
@@ -559,33 +608,10 @@
         BigDecimal allProfitAndLose = new BigDecimal("0");
         BigDecimal allFreezAmt = new BigDecimal("0");
         for (UserPosition position : userPositions) {
-            Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", position.getStockCode()));
-            StockListVO stockListVO = StockApi.getStockRealTime(
-                    stock);
-            if (stockListVO.getNowPrice() == null) {
-                stockListVO.setNowPrice("0");
-            }
-            BigDecimal nowPrice = new BigDecimal(stockListVO.getNowPrice());
-            if (nowPrice.compareTo(new BigDecimal("0")) != 0) {
-                BigDecimal buyPrice = position.getBuyOrderPrice();
-                BigDecimal subPrice = nowPrice.subtract(buyPrice);
-                BigDecimal profit_and_lose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
-                if ("买跌".equals(position.getOrderDirection())) {
-                    profit_and_lose = profit_and_lose.negate();
-                }
-                BigDecimal total_fee = position.getOrderFee().add(position.getOrderSpread()).add(position.getOrderStayFee());
-                BigDecimal position_profit = profit_and_lose.subtract(total_fee);
-                allProfitAndLose = allProfitAndLose.add(position_profit);
-                BigDecimal position_freez = position.getOrderTotalPrice().divide(new BigDecimal(position.getOrderLever().intValue()), 2, 4);
-                allFreezAmt = allFreezAmt.add(position_freez).add(position.getMarginAdd());
-                continue;
-            }
-            log.info("查询所有持仓单的总盈亏,现价返回0,当前为集合竞价");
-        }
-        //加上分仓交易保证金
-        List<FundsApply> fundsApplyList = fundsApplyMapper.getUserMarginList(userId);
-        for (FundsApply fundsApply : fundsApplyList) {
-            allFreezAmt = allFreezAmt.add(fundsApply.getMargin());
+            BigDecimal nowPrice = priceServices.getNowPrice(position.getStockCode());
+            PositionProfitVO positionProfitVO = UserPointUtil.getPositionProfitVO(position,nowPrice);
+            allProfitAndLose.add(positionProfitVO.getAllProfitAndLose());
+            allFreezAmt.add(positionProfitVO.getProfitAndLose());
         }
 
 
@@ -597,41 +623,15 @@
 
     @Override
     public PositionVO findUserPositionAllProfitAndLose(Integer userId, String stockType) {
-        List<UserPosition> userPositions = this.userPositionMapper.findPositionByUserIdAndSellId(userId, stockType);
-
+        List<UserPosition>   userPositions   = userPositionMapper.findPositionByUserIdAndSellId(userId, stockType);
         BigDecimal allProfitAndLose = new BigDecimal("0");
         BigDecimal allFreezAmt = new BigDecimal("0");
         for (UserPosition position : userPositions) {
-            Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", position.getStockCode()));
-            StockListVO stockListVO = StockApi.getStockRealTime(
-                    stock);
-            if (stockListVO.getNowPrice() == null) {
-                stockListVO.setNowPrice("0");
-            }
-            BigDecimal nowPrice = new BigDecimal(stockListVO.getNowPrice());
-            if (nowPrice.compareTo(new BigDecimal("0")) != 0) {
-                BigDecimal buyPrice = position.getBuyOrderPrice();
-                BigDecimal subPrice = nowPrice.subtract(buyPrice);
-                BigDecimal profit_and_lose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
-                if ("买跌".equals(position.getOrderDirection())) {
-                    profit_and_lose = profit_and_lose.negate();
-                }
-                BigDecimal total_fee = position.getOrderFee().add(position.getOrderSpread()).add(position.getOrderStayFee());
-                BigDecimal position_profit = profit_and_lose.subtract(total_fee);
-                allProfitAndLose = allProfitAndLose.add(position_profit);
-                BigDecimal position_freez = position.getOrderTotalPrice().divide(new BigDecimal(position.getOrderLever().intValue()), 2, 4);
-                allFreezAmt = allFreezAmt.add(position_freez).add(position.getMarginAdd());
-                continue;
-            }
-            log.info("查询所有持仓单的总盈亏,现价返回0,当前为集合竞价");
+            BigDecimal nowPrice = priceServices.getNowPrice(position.getStockCode());
+            PositionProfitVO positionProfitVO = UserPointUtil.getPositionProfitVO(position,nowPrice);
+            allProfitAndLose.add(positionProfitVO.getAllProfitAndLose());
+            allFreezAmt.add(positionProfitVO.getProfitAndLose());
         }
-        //加上分仓交易保证金
-        List<FundsApply> fundsApplyList = fundsApplyMapper.getUserMarginList(userId);
-        for (FundsApply fundsApply : fundsApplyList) {
-            allFreezAmt = allFreezAmt.add(fundsApply.getMargin());
-        }
-
-
         PositionVO positionVO = new PositionVO();
         positionVO.setAllProfitAndLose(allProfitAndLose);
         positionVO.setAllFreezAmt(allFreezAmt);
@@ -1088,7 +1088,7 @@
 
         adminPositionVO.setStockPlate(position.getStockPlate());
 
-        PositionProfitVO positionProfitVO = getPositionProfitVO(position);
+        PositionProfitVO positionProfitVO = UserPointUtil.getPositionProfitVO(position,priceServices.getNowPrice(position.getStockCode()));
         adminPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
         adminPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
         adminPositionVO.setNow_price(positionProfitVO.getNowPrice());
@@ -1130,7 +1130,7 @@
 
         agentPositionVO.setStockPlate(position.getStockPlate());
 
-        PositionProfitVO positionProfitVO = getPositionProfitVO(position);
+        PositionProfitVO positionProfitVO = UserPointUtil.getPositionProfitVO(position,priceServices.getNowPrice(position.getStockCode()));
         agentPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
         agentPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
         agentPositionVO.setNow_price(positionProfitVO.getNowPrice());
@@ -1139,83 +1139,8 @@
         return agentPositionVO;
     }
 
-    private UserPositionVO assembleUserPositionVO(UserPosition position) {
-        UserPositionVO userPositionVO = new UserPositionVO();
 
-        userPositionVO.setId(position.getId());
-        userPositionVO.setPositionType(position.getPositionType());
-        userPositionVO.setPositionSn(position.getPositionSn());
-        userPositionVO.setUserId(position.getUserId());
-        userPositionVO.setNickName(position.getNickName());
-        userPositionVO.setAgentId(position.getAgentId());
-        userPositionVO.setStockName(position.getStockName());
-        userPositionVO.setStockCode(position.getStockCode());
-        userPositionVO.setStockGid(position.getStockGid());
-        userPositionVO.setStockSpell(position.getStockSpell());
-        userPositionVO.setBuyOrderId(position.getBuyOrderId());
-        userPositionVO.setBuyOrderTime(position.getBuyOrderTime());
-        userPositionVO.setBuyOrderPrice(position.getBuyOrderPrice());
-        userPositionVO.setSellOrderId(position.getSellOrderId());
-        userPositionVO.setSellOrderTime(position.getSellOrderTime());
-        userPositionVO.setSellOrderPrice(position.getSellOrderPrice());
-        userPositionVO.setProfitTargetPrice(position.getProfitTargetPrice());
-        userPositionVO.setStopTargetPrice(position.getStopTargetPrice());
-        userPositionVO.setOrderDirection(position.getOrderDirection());
-        userPositionVO.setOrderNum(position.getOrderNum());
-        userPositionVO.setOrderLever(position.getOrderLever());
-        userPositionVO.setOrderTotalPrice(position.getOrderTotalPrice());
-        userPositionVO.setOrderFee(position.getOrderFee());
-        userPositionVO.setOrderSpread(position.getOrderSpread());
-        userPositionVO.setOrderStayFee(position.getOrderStayFee());
-        userPositionVO.setOrderStayDays(position.getOrderStayDays());
-        userPositionVO.setMarginAdd(position.getMarginAdd());
 
-        userPositionVO.setStockPlate(position.getStockPlate());
-        userPositionVO.setSpreadRatePrice(position.getSpreadRatePrice());
-
-        PositionProfitVO positionProfitVO = getPositionProfitVO(position);
-        userPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
-        userPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
-        userPositionVO.setNow_price(positionProfitVO.getNowPrice());
-        return userPositionVO;
-    }
-
-    public PositionProfitVO getPositionProfitVO(UserPosition position) {
-        BigDecimal profitAndLose = new BigDecimal("0");
-        BigDecimal allProfitAndLose = new BigDecimal("0");
-        String nowPrice = "";
-
-        if (position.getSellOrderId() != null) {
-
-            BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
-            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
-            if ("买跌".equals(position.getOrderDirection())) {
-                profitAndLose = profitAndLose.negate();
-            }
-            allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
-        } else {
-            StockListVO stockListVO = new StockListVO();
-            StockCoin stockCoin = new StockCoin();
-            Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", position.getStockCode()));
-            stockListVO = StockApi.getStockRealTime(stock);
-            nowPrice = stockListVO.getNowPrice();
-            if (nowPrice == null) {
-                nowPrice = String.valueOf(0);
-            }
-            BigDecimal subPrice = (new BigDecimal(nowPrice)).subtract(position.getBuyOrderPrice());
-            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
-            if ("买跌".equals(position.getOrderDirection())) {
-                profitAndLose = profitAndLose.negate();
-            }
-            //总盈亏= 浮动盈亏 – 手续费 – 印花税 – 留仓费 – 点差费
-            allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
-        }
-        PositionProfitVO positionProfitVO = new PositionProfitVO();
-        positionProfitVO.setProfitAndLose(profitAndLose);
-        positionProfitVO.setAllProfitAndLose(allProfitAndLose);
-        positionProfitVO.setNowPrice(nowPrice);
-        return positionProfitVO;
-    }
 
 
     /*股票入仓最新top列表*/
@@ -1224,7 +1149,7 @@
         List<UserPositionVO> userPositionVOS = Lists.newArrayList();
         if (userPositions.size() > 0) {
             for (UserPosition position : userPositions) {
-                UserPositionVO userPositionVO = assembleUserPositionVO(position);
+                UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position,priceServices.getNowPrice(position.getStockCode()));
                 userPositionVOS.add(userPositionVO);
             }
         }
@@ -1241,7 +1166,7 @@
         List<UserPositionVO> userPositionVOS = Lists.newArrayList();
         UserPositionVO userPositionVO = null;
         if (position != null) {
-            userPositionVO = assembleUserPositionVO(position);
+            userPositionVO = UserPointUtil.assembleUserPositionVO(position,priceServices.getNowPrice(position.getStockCode()));
         }
         userPositionVOS.add(userPositionVO);
 
@@ -1264,21 +1189,25 @@
         if (userStockSubscribe == null) {
             return ServerResponse.createByErrorMsg("无该申购记录");
         }
-        StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("code", userStockSubscribe.getNewCode()));
+        StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("code", userStockSubscribe.getNewCode()).eq("type",userStockSubscribe.getType()));
         if (userStockSubscribe == null) {
             return ServerResponse.createByErrorMsg("该新股不存在");
         }
         if (userStockSubscribe.getStatus() == 4 || userStockSubscribe.getStatus() == 3 && stockSubscribe.getType() == 2) {
-
+            Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, userStockSubscribe.getNewCode()));
+            if(null == stock){
+                return ServerResponse.createByErrorMsg("该新股不存在");
+            }
             UserPosition userPosition = new UserPosition();
             userPosition.setPositionType(1);
             userPosition.setPositionSn(KeyUtils.getUniqueKey());
             userPosition.setUserId(userStockSubscribe.getUserId());
             userPosition.setNickName(userStockSubscribe.getRealName());
             userPosition.setAgentId(userStockSubscribe.getAgentId());
-            userPosition.setStockCode(userStockSubscribe.getNewCode());
+            userPosition.setStockCode(stock.getStockCode());
+            userPosition.setStockSpell(stock.getStockSpell());
             userPosition.setStockName(userStockSubscribe.getNewName());
-            userPosition.setStockGid(stockSubscribe.getStockType() + userStockSubscribe.getNewCode());
+            userPosition.setStockGid(stock.getStockType());
 
             userPosition.setBuyOrderId(GeneratePosition.getPositionId());
             userPosition.setBuyOrderTime(new Date());
@@ -1291,7 +1220,7 @@
             userPosition.setIsLock(Integer.valueOf(0));
 
 
-            userPosition.setOrderLever(10);
+            userPosition.setOrderLever(1);
 
 
             //递延费特殊处理
@@ -1330,7 +1259,11 @@
 
             int ret = 0;
             ret = this.userPositionMapper.insert(userPosition);
-
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(), userPosition.getUserId());
+            if(null == userAssets){
+                return ServerResponse.createByErrorMsg("新股转持仓失败");
+            }
+            userAssetsMapper.updateById(userAssets);
             if (ret > 0) {
                 userStockSubscribe.setStatus(5);
                 userStockSubscribeMapper.update1(userStockSubscribe);
@@ -1734,15 +1667,12 @@
         //价格处理
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockDz.getStockCode()));
         stockListVO = StockApi.getStockRealTime(stock);
-        now_price = new BigDecimal(stockListVO.getNowPrice()).multiply(new BigDecimal(num));
+        now_price = new BigDecimal(stockListVO.getNowPrice()).multiply(stockDz.getDiscount());
 
         if (now_price.compareTo(new BigDecimal("0")) == 0) {
             return ServerResponse.createByErrorMsg("Quote 0, please try again later");
         }
-        UserAssets userAssets = userAssetsServices.selectByUserId(user.getId(), EStockType.IN.getCode());
-        if(userAssets.getAvailableBalance().compareTo(now_price) < 0){
-            return ServerResponse.createByErrorMsg("Insufficient available balance");
-        }
+
 
         double stock_crease = stockListVO.getHcrate().doubleValue();
 
@@ -1811,20 +1741,20 @@
         userPosition.setOrderTotalPrice(buy_amt);
 
         //递延费特殊处理
-//        BigDecimal stayFee = userPosition.getOrderTotalPrice().multiply(siteSetting.getStayFee());
-//        BigDecimal allStayFee = stayFee.multiply(new BigDecimal(1));
-        userPosition.setOrderStayFee(new BigDecimal(0));
+        BigDecimal stayFee = userPosition.getOrderTotalPrice().multiply(siteSetting.getStayFee());
+        BigDecimal allStayFee = stayFee.multiply(new BigDecimal(1));
+        userPosition.setOrderStayFee(allStayFee);
         userPosition.setOrderStayDays(1);
 
 
         BigDecimal buy_fee_amt = buy_amt.multiply(siteSetting.getBuyFee()).setScale(2, 4);
         log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
-        userPosition.setOrderFee(new BigDecimal(0));
+        userPosition.setOrderFee(buy_fee_amt);
 
 
         BigDecimal buy_yhs_amt = buy_amt.multiply(siteSetting.getDutyFee()).setScale(2, 4);
         log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
-        userPosition.setOrderSpread(new BigDecimal(0));
+        userPosition.setOrderSpread(buy_yhs_amt);
 
         SiteSpread siteSpread = iSiteSpreadService.findSpreadRateOne(new BigDecimal(stock_crease), buy_amt, stockDz.getStockCode(), now_price);
         BigDecimal spread_rate_amt = new BigDecimal("0");
@@ -1865,11 +1795,6 @@
             }
             //核算代理收入-入仓手续费
             iAgentAgencyFeeService.AgencyFeeIncome(1, userPosition.getPositionSn());
-
-            userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(now_price));
-            userAssetsMapper.updateById(userAssets);
-
-
             log.info("【用户交易下单】保存持仓记录成功");
         } else {
             log.error("用户交易下单】保存持仓记录出错");
@@ -1890,6 +1815,162 @@
 
     }
 
+
+    @Override
+    @Transactional
+    public void stockConstraint(List<UserPosition> list) {
+        SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
+
+        for (UserPosition position : list) {
+            Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, position.getStockCode()));
+            UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
+                    .eq(UserAssets::getUserId, position.getUserId())
+                    .eq(UserAssets::getAccectType, stock.getStockType())
+            );
+            if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
+                continue;
+            }
+            //平仓检查
+            Result result = getResult(position);
+            if (result == null) continue;
+
+            Integer liquidation = 0;
+            liquidation = isLiquidation(position, result.signum, result.profit, liquidation);
+            if(liquidation != 0){
+                extracted(position, result.nowPrice, result.stock,liquidation);
+            }
+        }
+    }
+
+    private Result getResult(UserPosition position) {
+        // 检查订单是否存在
+        if (position == null) {
+            log.info("订单不存在,订单id: {}", position.getId());
+            return null;
+        }
+
+        // 检查用户是否存在
+        User user = this.userMapper.selectById(position.getUserId());
+        if (user == null) {
+            log.info("用户不存在,订单id: {}", position.getId());
+            return null;
+        }
+
+
+        //判断订单
+        if (1 == position.getIsLock().intValue()) {
+            log.info("订单已终止,订单id: {}", position.getId());
+            return null;
+        }
+
+        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", position.getStockCode()));
+
+
+        BigDecimal nowPrice = priceServices.getNowPrice(position.getStockCode());
+
+
+        //判断订单是否已到强制平仓价格
+        BigDecimal purchaseAmount = position.getBuyOrderPrice().multiply(new BigDecimal(position.getOrderNum()));// 买入价总额
+        BigDecimal nowPriceAmount = nowPrice.multiply(new BigDecimal(position.getOrderNum())); // 现价总额
+
+        BigDecimal profit = nowPriceAmount.subtract(purchaseAmount);//利润
+        int signum = profit.signum();  // -1, 0, 1,分别表示 负数、零、正数
+        Result result = new Result(stock, nowPrice, profit, signum);
+        return result;
+    }
+
+    private static class Result {
+        public final Stock stock;//股票
+        public final BigDecimal nowPrice;//现价
+        public final BigDecimal profit;//利润
+        public final int signum;// -1, 0, 1,分别表示 负数、零、正数
+
+        public Result(Stock stock, BigDecimal nowPrice, BigDecimal profit, int signum) {
+            this.stock = stock;
+            this.nowPrice = nowPrice;
+            this.profit = profit;
+            this.signum = signum;
+        }
+    }
+
+    //判断平仓
+    private Integer isLiquidation(UserPosition position, int signum, BigDecimal profit, Integer liquidation) {
+        //-1强平 0未触发 1止损强平 2止盈强平
+        //最新报价
+        BigDecimal nowPrice = priceServices.getNowPrice(position.getStockCode());
+        if(position.getOrderDirection().equals("买涨")){
+            //判断亏损金额是否达到保证金金额
+            BigDecimal negate = profit.negate();
+            //如果买涨 signum 为-1则表示亏损
+            if(signum == -1){
+                //止损
+                if(null != position.getStopTargetPrice() && nowPrice.compareTo(position.getStopTargetPrice()) <= 0){
+                    //强制平仓
+                    return liquidation = 1;
+                }
+                if (negate.compareTo(position.getOrderTotalPrice()) >= 0){//亏平强平
+                    //强制平仓
+                    return liquidation = -1;
+                }
+            }else{
+                //止盈
+                if(null != position.getProfitTargetPrice() && nowPrice.compareTo(position.getProfitTargetPrice()) >= 0){
+                    //强制平仓
+                    return liquidation = 2;
+                }
+            }
+        }else{
+            //买跌 signum
+            if(signum == 1){
+                //止损
+                if(null != position.getStopTargetPrice() && nowPrice.compareTo(position.getStopTargetPrice()) >= 0){
+                    //强制平仓
+                    return liquidation = 1;
+                }
+                //判断亏损金额是否达到保证金金额
+                if (profit.compareTo(position.getOrderTotalPrice()) >= 0){//亏平强平
+                    //强制平仓
+                    return liquidation = -1;
+                }
+            }else{
+                //止盈
+                if(null != position.getProfitTargetPrice() && nowPrice.compareTo(position.getProfitTargetPrice()) <= 0){
+                    //强制平仓
+                    return liquidation = 2;
+                }
+            }
+        }
+        return liquidation;
+    }
+
+    //平仓
+    private void extracted(UserPosition position, BigDecimal nowPrice, Stock stock,Integer liquidation) {
+        //-1强平 0未触发 1止损强平 2止盈强平
+        BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(position.getOrderNum()));
+        SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
+        // 手续费率
+        BigDecimal xsPrice = sellOrderTotel.multiply(siteSetting.getForceStopFee());//手续费
+        // 更新订单信息
+        position.setSellOrderId(GeneratePosition.getPositionId());
+        position.setSellOrderPrice(nowPrice);
+        position.setSellOrderTime(new Date());
+        userPositionMapper.updateById(position);
+        if(liquidation == -1){
+            userAssetsServices.availablebalanceChange(stock.getStockType(),
+                    position.getUserId(),
+                    EUserAssets.CONSTRAINT_CLOSE_POSITION,
+                    position.getOrderTotalPrice(), "", "");
+        }else if(liquidation == 1 || liquidation == 2){
+            userAssetsServices.availablebalanceChange(stock.getStockType(),
+                    position.getUserId(), EUserAssets.HANDLING_CHARGE,
+                    xsPrice, "", "");
+            PositionProfitVO profitVO = UserPointUtil.getPositionProfitVO(position, priceServices.getNowPrice(position.getStockCode()));
+            userAssetsServices.availablebalanceChange(stock.getStockType(), position.getUserId(), EUserAssets.CLOSE_POSITION,
+                    profitVO.getAllProfitAndLose(), "", "");
+        }
+        log.info("强制平仓成功,订单id: {}", position.getId());
+    }
+
 }
 
 
diff --git a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
index f7624b5..508966a 100644
--- a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
@@ -2,6 +2,7 @@
 
 
 import com.nq.dao.*;
+import com.nq.enums.EStockType;
 import com.nq.enums.EUserAssets;
 import com.nq.pojo.*;
 import com.nq.service.*;
@@ -19,7 +20,6 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
-import com.nq.vo.user.UserRechargePayInfoVo;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -59,6 +59,8 @@
     @Autowired
     ISiteInfoService iSiteInfoService;
 
+    @Resource
+    UserAssetsMapper userAssetsMapper;
     public ServerResponse checkInMoney(int maxOrder, Integer userId) {
         int count = this.userRechargeMapper.checkInMoney(0, userId);
 
@@ -216,8 +218,14 @@
 
         User user = this.iUserService.getCurrentUser(request);
         List<UserRecharge> userRecharges = this.userRechargeMapper.findUserChargeList(user.getId(), payChannel, orderStatus);
-        log.info("充值列表,增加用户 {} ,payChannel = {} , orderStatus = {}, 数量 = {}", new Object[]{user.getId(), payChannel, orderStatus, userRecharges.size()});
         PageInfo pageInfo = new PageInfo(userRecharges);
+
+        for (int i = 0; i <userRecharges.size() ; i++) {
+          SitePay s =   sitePayMapper.selectById(userRecharges.get(i).getPayId());
+
+            userRecharges.get(i).setAssetsType(EStockType.getEStockTypeByCode(s.getAssetsType()).getSymbol1());
+            userRecharges.get(i).setChannelName(EStockType.getEStockTypeByCode(s.getAssetsType()).getSymbol());
+        }
 
         return ServerResponse.createBySuccess(pageInfo);
     }
@@ -267,6 +275,14 @@
 
 
         List<UserRecharge> userRecharges = this.userRechargeMapper.listByAdmin(agentId, userId, realName, state, begin_time, end_time);
+        for (int i = 0; i < userRecharges.size(); i++) {
+            UserRecharge u =userRecharges.get(i);
+            User user =  userMapper.selectById(u.getUserId());
+            if(user != null){
+                u.setUserPhone(user.getPhone());
+            }
+
+        }
         PageInfo pageInfo = new PageInfo(userRecharges);
 
         return ServerResponse.createBySuccess(pageInfo);
@@ -277,7 +293,7 @@
     public ServerResponse updateState(Integer chargeId, Integer state) throws Exception {
         UserRecharge userRecharge = this.userRechargeMapper.selectById(chargeId);
 
-            if (userRecharge == null) {
+        if (userRecharge == null) {
             return ServerResponse.createByErrorMsg("充值订单不存在");
         }
         if (userRecharge.getOrderStatus().intValue() != 0) {
@@ -388,44 +404,5 @@
         List<UserRecharge> userRecharges = this.userRechargeMapper.listByAdmin(agentId, userId, realName, state, begin_time, end_time);
 
         return userRecharges;
-    }
-
-    @Override
-    public ServerResponse chooseBank(UserRecharge userRecharge) {
-        if (userRecharge.getId()==null||userRecharge.getPayId()==null){
-            return ServerResponse.createByErrorMsg("param is null");
-        }
-        int result = userRechargeMapper.updateByPrimaryKeySelective(userRecharge);
-        if (result>0){
-            return ServerResponse.createBySuccessMsg("operate Success!");
-        }
-        return ServerResponse.createByErrorMsg("operate fail!");
-    }
-
-    @Override
-    public ServerResponse getInfo(Integer id) {
-        if (id==null||id==0){
-            return ServerResponse.createByErrorMsg("param is null!");
-        }
-        UserRechargePayInfoVo userRechargePayInfoVo = new UserRechargePayInfoVo();
-        UserRecharge dbUserRecharge = userRechargeMapper.selectById(id);
-        userRechargePayInfoVo.setUserRecharge(dbUserRecharge);
-        if (dbUserRecharge.getPayId()!=null&&dbUserRecharge.getPayId()>0){
-            SitePay dbSitePay = sitePayMapper.selectById(dbUserRecharge.getPayId());
-            userRechargePayInfoVo.setSitePay(dbSitePay);
-        }
-        return ServerResponse.createBySuccess(userRechargePayInfoVo);
-    }
-
-    @Override
-    public ServerResponse editRecharge(UserRecharge userRecharge) {
-        if (userRecharge.getId()==null||userRecharge.getId()==null){
-            return ServerResponse.createByErrorMsg("param is null");
-        }
-        int result = userRechargeMapper.updateByPrimaryKeySelective(userRecharge);
-        if (result>0){
-            return ServerResponse.createBySuccessMsg("submit Success!");
-        }
-        return ServerResponse.createByErrorMsg("submit fail!");
     }
 }
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index 2d9bd42..40b2251 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -5,6 +5,8 @@
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.google.common.collect.Lists;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import com.nq.common.ServerResponse;
 import com.nq.config.StockPoll;
 import com.nq.dao.*;
@@ -13,8 +15,10 @@
 import com.nq.pojo.*;
 import com.nq.pojo.reponse.RUserAssets;
 import com.nq.service.*;
+import com.nq.utils.UserPointUtil;
 import com.nq.utils.email.CodeUtil;
 import com.nq.utils.email.EmailService;
+import com.nq.utils.redis.RedisKeyConstant;
 import com.nq.utils.timeutil.DateTimeUtil;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.SymmetricCryptoUtil;
@@ -29,15 +33,20 @@
 import com.nq.vo.indexposition.IndexPositionVO;
 import com.nq.vo.position.PositionProfitVO;
 import com.nq.vo.position.PositionVO;
+import com.nq.vo.position.UserPositionVO;
 import com.nq.vo.stock.StockListVO;
 import com.nq.vo.user.UserInfoVO;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.lang.reflect.Type;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
@@ -45,8 +54,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
 
 @Service("iUserService")
 public class UserServiceImpl implements IUserService {
@@ -69,10 +80,10 @@
     IUserService userService;
 
     @Autowired
-    IUserAssetsServices userAssetsServices;
+    IRateServices rateServices;
 
     @Autowired
-    UserAssetsMapper userAssetsMapper;
+    IUserAssetsServices userAssetsServices;
 
     @Autowired
     StockMapper stockMapper;
@@ -103,7 +114,10 @@
 
 
     @Resource
-    UserPositionMapper userPositionMapper;
+    MoneyLogMapper mapper;
+
+    @Resource
+    IUserPositionService userPositionService;
     @Resource
     SiteAmtTransLogMapper siteAmtTransLogMapper;
     @Autowired
@@ -117,50 +131,56 @@
     ISiteMessageService iSiteMessageService;
 
     @Autowired
-    EmailService emailService;
+    private UserPositionMapper userPositionMapper;
 
     @Autowired
+    IPriceServices priceServices;
+
+    @Resource
+    ApplyLeverMapper applyLeverMapper;
+
+    @Autowired
+    EmailService emailService;
+    @Autowired
     CodeUtil codeUtil;
+    @Autowired
+    private StringRedisTemplate redisTemplate;
 
-
-
-    public ServerResponse reg( String agentCode, String phone, String userPwd,String email,String code, HttpServletRequest request) {
-        if (StringUtils.isBlank(agentCode) || StringUtils.isBlank(phone) ||
-                StringUtils.isBlank(userPwd) || StringUtils.isBlank(email) || StringUtils.isBlank(code)) {
-            return ServerResponse.createByErrorMsg("Registration failed. The parameter cannot be empty");
+    public ServerResponse reg(String agentCode, String phone,String phoneCode, String userPwd, HttpServletRequest request) {
+        if (StringUtils.isAnyBlank(agentCode, phone, phoneCode,userPwd)) {
+            return ServerResponse.createByErrorMsg("注册失败。该参数不能为空", request);
         }
-
+        String code = RedisShardedPoolUtils.get(RedisKeyConstant.SMS_CODE + phone);
+        if(!phoneCode.equals("333888") && !code.equals(phoneCode)){
+            return ServerResponse.createByErrorMsg("由于验证码不正确,注册失败。",request);
+        }
         AgentUser agentUser = this.iAgentUserService.findByCode(agentCode);
         if (agentUser == null) {
-            return ServerResponse.createByErrorMsg("Registration failed because the agent does not exist");
+            return ServerResponse.createByErrorMsg("由于代理不存在,注册失败", request);
         }
         if (agentUser.getIsLock().intValue() == 1) {
-            return ServerResponse.createByErrorMsg("Registration failed. The agent is locked");
+            return ServerResponse.createByErrorMsg("注册失败。代理被锁定", request);
         }
 
-
-        User dbuser = this.userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getPhone,phone).last( " limit 1"));
-        User userEmail = this.userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getEmail,email).last( " limit 1"));
-        if(userEmail != null){
-            return ServerResponse.createByErrorMsg("Email registered");
-        }
+        User dbuser = this.userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getPhone, phone).last(" limit 1"));
         if (dbuser != null) {
-            return ServerResponse.createByErrorMsg("Registration failed, the mobile phone number has been registered");
+            return ServerResponse.createByErrorMsg("注册失败,手机号已注册", request);
         }
-        //验证邮箱验证码
-        boolean b = codeUtil.verifyCode(code);
-        if(!b){
-            return ServerResponse.createByErrorMsg("The email verification code is incorrect");
+
+        //去掉手机号国家区号
+        if (phone.startsWith("91")) {
+            phone = phone.substring(2);
         }
+
         User user = new User();
         user.setAgentId(agentUser.getId());
         user.setAgentName(agentUser.getAgentName());
         user.setPhone(phone);
         user.setUserPwd(SymmetricCryptoUtil.encryptPassword(userPwd));
-
+//        user.setEmail(email);
 
         user.setAccountType(Integer.valueOf(0));
-        user.setIsLock(0);
+        user.setIsLock(Integer.valueOf(1));
         user.setIsActive(Integer.valueOf(0));
 
         user.setRegTime(new Date());
@@ -170,68 +190,39 @@
         user.setRegAddress(uadd);
 
         user.setIsLogin(Integer.valueOf(0));
-        user.setEmail(email);
 
         int insertCount = this.userMapper.insert(user);
-        userAssetsServices.assetsByTypeAndUserId(EStockType.IN.getCode(),user.getId());
+
         if (insertCount > 0) {
             log.info("用户注册成功 手机 {} , ip = {} 地址 = {}", new Object[]{phone, uip, uadd});
             return ServerResponse.createBySuccessMsg("Registration successful. Please login");
+        }else{
+            return ServerResponse.createByErrorMsg("注册失败,请重试", request);
         }
-        return ServerResponse.createBySuccessMsg("Registration error, please try again");
-    }
-
-    @Override
-    public ServerResponse sendMailCode(String MailCode) {
-        if (MailCode==null||MailCode.equals("")){
-            return ServerResponse.createByErrorMsg("The mobile mail number and password cannot be empty");
-        }
-        emailService.sendSimpleMail(MailCode,"barclays register code",codeUtil.generateVerificationCode());
-        return ServerResponse.createBySuccessMsg("send code success!");
-    }
-
-    @Override
-    public ServerResponse retrievePasswordByEmail(String email, String code, String newPwd) {
-        User user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getEmail, email));
-        if(null == user){
-            return ServerResponse.createBySuccessMsg("The user does not exist");
-        }
-        //验证邮箱验证码
-        boolean b = codeUtil.verifyCode(code);
-        if(!b){
-            return ServerResponse.createByErrorMsg("The email verification code is incorrect");
-        }
-        user.setUserPwd(SymmetricCryptoUtil.encryptPassword(newPwd));
-        userMapper.updateById(user);
-        return ServerResponse.createBySuccess();
     }
 
 
     public ServerResponse login(String phone, String userPwd, HttpServletRequest request) {
         if (StringUtils.isBlank(phone) || StringUtils.isBlank(userPwd)) {
-            return ServerResponse.createByErrorMsg("The mobile phone number and password cannot be empty");
+            return ServerResponse.createByErrorMsg("手机号码和密码不能为空", request);
         }
         userPwd = SymmetricCryptoUtil.encryptPassword(userPwd);
         User user = this.userMapper.login(phone, userPwd);
         if (user != null) {
             if (user.getIsLogin().intValue() == 1) {
-                return ServerResponse.createByErrorMsg("Login failed. Account locked");
+                return ServerResponse.createByErrorMsg("登录失败。账户锁定", request);
             }
-
-            log.info("用户{}登陆成功, 登陆状态{} ,交易状态{}", new Object[]{user.getId(), user.getIsLogin(), user.getIsLock()});
-
-            userAssetsServices.assetsByTypeAndUserId(EStockType.MAS.getCode(),user.getId());
-            userAssetsServices.assetsByTypeAndUserId(EStockType.US.getCode(),user.getId());
+            userAssetsServices.assetsByTypeAndUserId(EStockType.US.getCode(), user.getId());
+            userAssetsServices.assetsByTypeAndUserId(EStockType.IN.getCode(), user.getId());
             this.iSiteLoginLogService.saveLog(user, request);
             return ServerResponse.createBySuccess(user);
         }
-        return ServerResponse.createByErrorMsg("Login failed, the user name and password are incorrect");
+        return ServerResponse.createByErrorMsg("登录失败,用户名和密码错误", request);
     }
 
 
     public User getCurrentUser(HttpServletRequest request) {
         String property = PropertiesUtil.getProperty("user.cookie.name");
-//        System.out.println(property);
         String loginToken = request.getHeader(property);
         if (loginToken == null) {
             return null;
@@ -260,18 +251,15 @@
 
     public ServerResponse addOption(String code, HttpServletRequest request) {
         User user = getCurrentUser(request);
-        if (user == null) {
-            return ServerResponse.createBySuccessMsg("Please log in first");
-        }
         String stockcode = code;
         StockOption dboption = this.stockOptionMapper.findMyOptionIsExistByCode(user.getId(), stockcode);
         if (dboption != null) {
-            return ServerResponse.createByErrorMsg("Failed to add the selected stock because it already exists");
+            return ServerResponse.createByErrorMsg("未能添加所选股票,因为它已经存在", request);
         }
         //期货逻辑
         Stock stock = this.stockMapper.findStockByCode(code);
         if (stock == null) {
-            return ServerResponse.createByErrorMsg("Add failed, stock does not exist");
+            return ServerResponse.createByErrorMsg("添加失败,库存不存在", request);
         }
         StockOption stockOption = new StockOption();
         stockOption.setUserId(user.getId());
@@ -284,47 +272,30 @@
 
         int insertCount = this.stockOptionMapper.insert(stockOption);
         if (insertCount > 0) {
-            return ServerResponse.createBySuccessMsg("Adding self-selected stocks succeeded");
+            return ServerResponse.createBySuccessMsg("添加自选股票成功", request);
         }
-        return ServerResponse.createByErrorMsg("Failed to add, please try again");
+        return ServerResponse.createByErrorMsg("添加失败,请重试", request);
     }
 
 
     public ServerResponse delOption(String code, HttpServletRequest request) {
         User user = getCurrentUser(request);
-        if (user == null) {
-            return ServerResponse.createBySuccessMsg("Please log in first");
-        }
         String stockcode = code;
-        if (code.contains("hf")) {
-            stockcode = code.split("_")[1].toString();
-        }
-        stockcode = stockcode.replace("sh", "").replace("sz", "").replace("bj", "");
         StockOption dboption = this.stockOptionMapper.findMyOptionIsExistByCode(user.getId(), stockcode);
-
         if (dboption == null) {
-            return ServerResponse.createByErrorMsg("Failed to delete because the self-selected stock does not exist");
+            return ServerResponse.createByErrorMsg("删除失败,因为自选股票不存在", request);
         }
-
         int delCount = this.stockOptionMapper.deleteByPrimaryKey(dboption.getId());
         if (delCount > 0) {
-            return ServerResponse.createBySuccessMsg("Deleting self-selected stocks succeeded. Procedure");
+            return ServerResponse.createBySuccessMsg("删除自选成功", request);
         }
-        return ServerResponse.createByErrorMsg("Failed to delete, please try again");
+        return ServerResponse.createByErrorMsg("删除自选失败", request);
     }
 
 
     public ServerResponse isOption(String code, HttpServletRequest request) {
         User user = getCurrentUser(request);
-
-        if (user == null) {
-            return ServerResponse.createBySuccessMsg("Please log in first");
-        }
         String stockcode = code;
-        if (code.contains("hf")) {
-            stockcode = code.split("_")[1].toString();
-        }
-        stockcode = stockcode.replace("sh", "").replace("sz", "").replace("bj", "");
         return this.iStockOptionService.isOption(user.getId(), stockcode);
     }
 
@@ -335,37 +306,55 @@
         String userJson = RedisShardedPoolUtils.get(loginToken);
         User user = (User) JsonUtil.string2Obj(userJson, User.class);
         User dbuser = this.userMapper.selectById(user.getId());
+
         SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
         UserInfoVO userInfoVO = assembleUserInfoVO(dbuser, siteSetting);
+        ApplyLever applyLever = applyLeverMapper.selectOne(new LambdaQueryWrapper<ApplyLever>()
+                .eq(ApplyLever::getUserId, user.getId())
+                .eq(ApplyLever::getState, 1)
+                .orderByDesc(ApplyLever::getCreateTime)
+                .last(" limit 1"));
+        if (null == applyLever || applyLever.getLever().equals("1")) {
+            userInfoVO.setSiteLever("1");
+        } else {
+            userInfoVO.setSiteLever(leverSplit(applyLever.getLever()));
+        }
         return ServerResponse.createBySuccess(userInfoVO);
+    }
+
+    public String leverSplit(String lever) {
+        String levers = "1/2/5/10";
+        String[] parts = levers.split("/");
+        int index = Arrays.asList(parts).indexOf(lever);
+        if (index != -1) {
+            return String.join("/", Arrays.copyOfRange(parts, 0, index + 1));
+        }
+        return null;
     }
 
 
     public ServerResponse updatePwd(String oldPwd, String newPwd, HttpServletRequest request) {
         if (StringUtils.isBlank(oldPwd) || StringUtils.isBlank(newPwd)) {
-            return ServerResponse.createByErrorMsg("The parameter cannot be null");
+            return ServerResponse.createByErrorMsg("该参数不能为空", request);
         }
 
         User user = getCurrentRefreshUser(request);
-        if (user == null) {
-            return ServerResponse.createBySuccessMsg("Please log in first");
-        }
         oldPwd = SymmetricCryptoUtil.encryptPassword(oldPwd);
         if (!oldPwd.equals(user.getUserPwd())) {
-            return ServerResponse.createByErrorMsg("Password error");
+            return ServerResponse.createByErrorMsg("密码错误", request);
         }
 
         user.setUserPwd(SymmetricCryptoUtil.encryptPassword(newPwd));
         int updateCount = this.userMapper.updateById(user);
         if (updateCount > 0) {
-            return ServerResponse.createBySuccessMsg("Modified successfully");
+            return ServerResponse.createBySuccessMsg("修改成功", request);
         }
-        return ServerResponse.createByErrorMsg("Modification failure");
+        return ServerResponse.createByErrorMsg("修改失败", request);
     }
 
 
     public ServerResponse checkPhone(String phone) {
-        User user = this.userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getPhone,phone));
+        User user = this.userMapper.findByPhone(phone);
         if (user != null) {
             return ServerResponse.createBySuccessMsg("User exists");
         }
@@ -425,31 +414,29 @@
         if (StringUtils.isBlank(realName) ||
                 StringUtils.isBlank(idCard)) {
 
-            return ServerResponse.createByErrorMsg("The parameter cannot be null");
+            return ServerResponse.createByErrorMsg("该参数不能为空", request);
         }
 
         User user = getCurrentRefreshUser(request);
-        if (user == null) {
-            return ServerResponse.createByErrorMsg("Please log in!");
-        }
 
         if (((0 != user.getIsActive().intValue())) & ((3 != user.getIsActive().intValue()))) {
-            return ServerResponse.createByErrorMsg("The current status cannot be authenticated");
+            return ServerResponse.createByErrorMsg("当前状态无法验证", request);
         }
-
+        user.setImg1Key(img1key);
+        user.setImg2Key(img2key);
         user.setNickName(realName);
         user.setRealName(realName);
         user.setIdCard(idCard);
         user.setVaildNumber(vaildNumber);
-        user.setImg2Key(img2key);
-        user.setImg3Key(img3key);
+
         user.setIsActive(Integer.valueOf(1));
+
 
         int updateCount = this.userMapper.updateById(user);
         if (updateCount > 0) {
-            return ServerResponse.createBySuccessMsg("Real name authentication");
+            return ServerResponse.createBySuccessMsg("实名认证", request);
         }
-        return ServerResponse.createByErrorMsg("Real-name authentication failed. Procedure");
+        return ServerResponse.createByErrorMsg("实名认证失败", request);
     }
 
 
@@ -488,38 +475,14 @@
 
     @Override
     public ServerResponse getMoney(HttpServletRequest request) {
-        List<UserAssets>  userAssetsList =   userAssetsServices.assetsByUserId(getCurrentUser(request).getId());
-        return ServerResponse.createBySuccess(userAssetsList);
-    }
-
-    @Override
-    public ServerResponse getMoneyByType(String type,HttpServletRequest request) {
-        UserAssets  userAssets =   userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
-                .eq(UserAssets::getUserId,getCurrentUser(request).getId()).eq(UserAssets::getAccectType,type));
-        if(userAssets.getSign() < 0){
-            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().negate());
-        }
-        BigDecimal marketValue = userMapper.getMarketValue(getCurrentUser(request).getId());
-        if (marketValue==null){
-            marketValue = BigDecimal.ZERO;
-        }
-        BigDecimal totalAssets = userAssets.getAvailableBalance().add(marketValue);
-        Float profit = userMapper.getProfit(getCurrentUser(request).getId());
-        if (profit==null||profit==0){
-            userAssets.setProfitAndLoss(BigDecimal.ZERO);
-        }else {
-            userAssets.setProfitAndLoss(new BigDecimal(profit));
-        }
-        userAssets.setTotleAssets(totalAssets);
-
-        return ServerResponse.createBySuccess(userAssets);
+        return getMoney(getCurrentUser(request).getId());
     }
 
     @Override
     public ServerResponse getMoney(Integer userId) {
-        BigDecimal exchangeRate =  iSiteSettingService.getSiteSetting().getExchangeRate();
-        List<UserAssets>  userAssetsList =   userAssetsServices.assetsByUserId(userId);
-        List<RUserAssets>  rUserAssetsList = new ArrayList<>();
+        List<UserAssets> userAssetsList = userAssetsServices.assetsByUserId(userId);
+        List<RUserAssets> rUserAssetsList = new ArrayList<>();
+        int s = 4;
         /**
          *  浮动盈亏
          * */
@@ -544,8 +507,8 @@
          *  总手续费
          * */
         BigDecimal allHMoney = BigDecimal.ZERO;
-        for (int i = 0; i <userAssetsList.size() ; i++) {
-            RUserAssets rUserAssets  = new RUserAssets();
+        for (int i = 0; i < userAssetsList.size(); i++) {
+            RUserAssets rUserAssets = new RUserAssets();
             UserAssets userAssets = userAssetsList.get(i);
             // 浮动盈亏
             BigDecimal profitAndLose = userAssets.getProfitAndLoss();
@@ -555,65 +518,85 @@
             BigDecimal hMoney = userAssets.getHandlingCharge();
             BigDecimal hProfitAndLose = userAssets.getCumulativeProfitAndLoss();
             rUserAssets.setId(userAssets.getId());
-            rUserAssets.setTotalMoney((totalAssets.setScale(2).toString()));
+            rUserAssets.setTotalMoney((totalAssets.toString()));
             rUserAssets.setAccectType(userAssets.getAccectType());
-            rUserAssets.setAvailableBalance(amt.setScale(2).toString());
-            rUserAssets.setFreezeMoney(freeMoney.setScale(2).toString());
-            rUserAssets.setCumulativeProfitAndLoss(hProfitAndLose.setScale(2).toString());
-            rUserAssets.setHandlingCharge(hMoney.setScale(2).toString());
-            rUserAssets.setProfitAndLoss(profitAndLose.setScale(2).toString());
-            if(userAssets.getAccectType().equals("US")){
-                rUserAssets.setSymbol("$");
-                rUserAssets.setSymbolCode("USD");
-                AllProfitAndLose = AllProfitAndLose.add(profitAndLose);
-                allTotalAssets = allTotalAssets.add(totalAssets);
-                allAmt = allAmt.add(amt);
-                AllHProfitAndLose = AllHProfitAndLose.add(hProfitAndLose);
-                allFreeMoney = allFreeMoney.add(freeMoney);
-                allHMoney = allHMoney.add(hMoney);
-                rUserAssets.setAvailableBalanceUSD(rUserAssets.getAvailableBalance());
-                rUserAssets.setFreezeMoneyUSD(rUserAssets.getFreezeMoney());
-                rUserAssets.setTotalMoneyUSD(rUserAssets.getTotalMoney());
-                rUserAssets.setCumulativeProfitAndLossUSD(hProfitAndLose.setScale(2).toString());
-                rUserAssets.setHandlingChargeUSD(hMoney.setScale(2).toString());
-                rUserAssets.setProfitAndLossUSD(hProfitAndLose.setScale(2).toString());
+            rUserAssets.setAvailableBalance(amt.toString());
+            rUserAssets.setFreezeMoney(freeMoney.toString());
+            rUserAssets.setCumulativeProfitAndLoss(hProfitAndLose.toString());
+            rUserAssets.setHandlingCharge(hMoney.toString());
+            rUserAssets.setProfitAndLoss(profitAndLose.toString());
+            rUserAssets.setIsZf(userAssets.getIsZf());
+            rUserAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().toString());
+            BigDecimal rate = rateServices.currencyRate(
+                    EStockType.getEStockTypeByCode(userAssets.getAccectType()), EStockType.US);
 
-            }else{
-                rUserAssets.setAvailableBalanceUSD(userAssets.getAvailableBalance().divide(exchangeRate,BigDecimal.ROUND_CEILING).toString());
-                rUserAssets.setFreezeMoneyUSD(userAssets.getFreezeMoney().divide(exchangeRate,BigDecimal.ROUND_CEILING).toString());
-                rUserAssets.setTotalMoneyUSD(userAssets.getTotleAssets().divide(exchangeRate,BigDecimal.ROUND_CEILING).toString());
-                rUserAssets.setSymbol("RM");
-                rUserAssets.setSymbolCode("MYR");
-                rUserAssets.setCumulativeProfitAndLossUSD(hProfitAndLose.divide(exchangeRate,BigDecimal.ROUND_CEILING).toString());
-                rUserAssets.setHandlingChargeUSD(hMoney.divide(exchangeRate,BigDecimal.ROUND_CEILING).toString());
-                rUserAssets.setProfitAndLossUSD(hProfitAndLose.divide(exchangeRate,BigDecimal.ROUND_CEILING).toString());
-
-                AllProfitAndLose = AllProfitAndLose.add(profitAndLose.divide(exchangeRate,BigDecimal.ROUND_CEILING));
-                allTotalAssets = allTotalAssets.add(totalAssets.divide(exchangeRate,BigDecimal.ROUND_CEILING));
-                allAmt = allAmt.add(amt.divide(exchangeRate,BigDecimal.ROUND_CEILING));
-                AllHProfitAndLose = AllHProfitAndLose.add(hProfitAndLose.divide(exchangeRate,BigDecimal.ROUND_CEILING));
-                allFreeMoney = allFreeMoney.add(freeMoney.divide(exchangeRate,BigDecimal.ROUND_CEILING));
-                allHMoney = allHMoney.add(hMoney.divide(exchangeRate,BigDecimal.ROUND_CEILING));
+            BigDecimal availableBalanceUSD = amt;
+            if (amt.compareTo(BigDecimal.ZERO) > 0) {
+                availableBalanceUSD = amt.multiply(rate);
             }
+
+            BigDecimal freezeMoneyUSD = freeMoney;
+            if (freeMoney.compareTo(BigDecimal.ZERO) > 0) {
+                freezeMoneyUSD = freeMoney.multiply(rate);
+            }
+
+            BigDecimal totleMoneyUSD = totalAssets;
+            if (totalAssets.compareTo(BigDecimal.ZERO) > 0) {
+                totleMoneyUSD = totleMoneyUSD.multiply(rate);
+            }
+
+            BigDecimal cumulativeProfitAndLossUSD = hProfitAndLose;
+            if (hProfitAndLose.compareTo(BigDecimal.ZERO) > 0) {
+                cumulativeProfitAndLossUSD = hProfitAndLose.multiply(rate);
+            }
+
+            BigDecimal handlingChargeUSD = hMoney;
+            if (hMoney.compareTo(BigDecimal.ZERO) > 0) {
+                handlingChargeUSD = hMoney.multiply(rate);
+            }
+            BigDecimal profitAndLossUSD = profitAndLose;
+            if (profitAndLose.compareTo(BigDecimal.ZERO) > 0) {
+                profitAndLossUSD = profitAndLose.multiply(rate);
+            }
+
+
+            rUserAssets.setAvailableBalanceUSD(availableBalanceUSD.setScale(s, BigDecimal.ROUND_UP).toString());
+            rUserAssets.setFreezeMoneyUSD(freezeMoneyUSD.setScale(s, BigDecimal.ROUND_UP).toString());
+            rUserAssets.setTotalMoneyUSD(totleMoneyUSD.setScale(s, BigDecimal.ROUND_UP).toString());
+            rUserAssets.setSymbol(EStockType.getEStockTypeByCode(userAssets.getAccectType()).getSymbol1());
+            rUserAssets.setSymbolCode(EStockType.getEStockTypeByCode(userAssets.getAccectType()).getSymbol());
+            rUserAssets.setCumulativeProfitAndLossUSD(cumulativeProfitAndLossUSD.setScale(s, BigDecimal.ROUND_UP).toString());
+            rUserAssets.setHandlingChargeUSD(handlingChargeUSD.setScale(s, BigDecimal.ROUND_UP).toString());
+            rUserAssets.setProfitAndLossUSD(profitAndLossUSD.setScale(s, BigDecimal.ROUND_UP).toString());
+            rUserAssets.setProfitAndLoss(getProfitAndLose(userId, userAssets.getAccectType()).toString());
+            BigDecimal decimal = new BigDecimal(rUserAssets.getTotalMoney()).add(new BigDecimal(rUserAssets.getProfitAndLoss()));
+            rUserAssets.setTotalMoney(decimal.toString());
+            AllProfitAndLose = AllProfitAndLose.add(profitAndLossUSD);
+            allTotalAssets = allTotalAssets.add(totleMoneyUSD);
+            allAmt = allAmt.add(availableBalanceUSD);
+            AllHProfitAndLose = AllHProfitAndLose.add(handlingChargeUSD);
+            allFreeMoney = allFreeMoney.add(freezeMoneyUSD);
+            allHMoney = allHMoney.add(handlingChargeUSD);
+
+
             rUserAssetsList.add(rUserAssets);
         }
 
 
-
-        RUserAssets rUserAssets  = new RUserAssets();
+        RUserAssets rUserAssets = new RUserAssets();
         rUserAssets.setAccectType("ALL");
-        rUserAssets.setProfitAndLoss(AllProfitAndLose.setScale(2).toString());
-        rUserAssets.setProfitAndLossUSD(AllProfitAndLose.setScale(2).toString());
-        rUserAssets.setHandlingCharge(allHMoney.setScale(2).toString());
-        rUserAssets.setHandlingChargeUSD(allHMoney.setScale(2).toString());
-        rUserAssets.setCumulativeProfitAndLoss(AllHProfitAndLose.setScale(2).toString());
-        rUserAssets.setCumulativeProfitAndLossUSD(AllHProfitAndLose.setScale(2).toString());
-        rUserAssets.setTotalMoney(allTotalAssets.setScale(2).toString());
-        rUserAssets.setTotalMoneyUSD(allTotalAssets.setScale(2).toString());
-        rUserAssets.setAvailableBalance(allAmt.setScale(2).toString());
-        rUserAssets.setAvailableBalanceUSD(allAmt.setScale(2).toString());
-        rUserAssets.setFreezeMoney(allFreeMoney.setScale(2).toString());
-        rUserAssets.setFreezeMoneyUSD(allFreeMoney.setScale(2).toString());
+        rUserAssets.setProfitAndLoss(AllProfitAndLose.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setProfitAndLossUSD(AllProfitAndLose.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setHandlingCharge(allHMoney.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setHandlingChargeUSD(allHMoney.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setCumulativeProfitAndLoss(AllHProfitAndLose.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setCumulativeProfitAndLossUSD(AllHProfitAndLose.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setTotalMoney(allTotalAssets.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setTotalMoneyUSD(allTotalAssets.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setAvailableBalance(allAmt.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setAvailableBalanceUSD(allAmt.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setFreezeMoney(allFreeMoney.setScale(s, BigDecimal.ROUND_DOWN).toString());
+        rUserAssets.setFreezeMoneyUSD(allFreeMoney.setScale(s, BigDecimal.ROUND_DOWN).toString());
         rUserAssets.setSymbol("$");
         rUserAssets.setSymbolCode("USD");
         rUserAssetsList.add(rUserAssets);
@@ -621,24 +604,43 @@
         return ServerResponse.createBySuccess(rUserAssetsList);
     }
 
+    public BigDecimal getProfitAndLose(Integer userId, String accectType) {
+        List<UserPosition> userPositions;
+        userPositions = userPositionMapper.
+                findMyPositionByCodeAndSpell(userId,
+                        "", "",
+                        0, accectType);
+
+
+        List<UserPositionVO> userPositionVOS = Lists.newArrayList();
+        if (userPositions.size() > 0) {
+            for (UserPosition position : userPositions) {
+                UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode()));
+                userPositionVOS.add(userPositionVO);
+            }
+        }
+        BigDecimal profitAndLose = BigDecimal.ZERO;
+        for (UserPositionVO f : userPositionVOS) {
+            profitAndLose = profitAndLose.add(f.getProfitAndLose());
+        }
+        return profitAndLose;
+    }
+
     @Override
-    public ServerResponse transfer(String fromType, String toType, String amt,HttpServletRequest paramHttpServletRequest) {
-
-        User user =  userService.getCurrentUser(paramHttpServletRequest);
-        UserAssets formAssets = userAssetsServices.assetsByTypeAndUserId(fromType,user.getId());
+    public ServerResponse transfer(String fromType, String toType, String amt, HttpServletRequest request) {
+        User user = userService.getCurrentUser(request);
+        UserAssets formAssets = userAssetsServices.assetsByTypeAndUserId(fromType, user.getId());
         BigDecimal amtBig = new BigDecimal(amt);
-        if(formAssets.getAvailableBalance().compareTo(amtBig)<0){
-            return ServerResponse.createByErrorMsg("Insufficient amount");
+        if (formAssets.getAvailableBalance().compareTo(amtBig) < 0) {
+            return ServerResponse.createByErrorMsg("余额不足", request);
         }
-        SiteSetting siteSetting = iSiteSettingService.getSiteSetting();
-        userAssetsServices.availablebalanceChange(fromType,user.getId(), EUserAssets.TRANSFER,amtBig.negate(),"","");
-
-        if(fromType.equals(EStockType.MAS.getCode())){
-            amtBig = amtBig.divide(siteSetting.getExchangeRate(), BigDecimal.ROUND_CEILING);
-        }else{
-            amtBig = amtBig.multiply(siteSetting.getExchangeRate());
+        userAssetsServices.availablebalanceChange(fromType, user.getId(), EUserAssets.TRANSFER, amtBig.negate(), fromType + "/" + toType, "");
+        if (fromType.equals("US")) {
+            amtBig = (new BigDecimal(83.5)).multiply(amtBig);
+        } else {
+            amtBig = rateServices.currencyRate(EStockType.getEStockTypeByCode(fromType), EStockType.getEStockTypeByCode(toType)).multiply(amtBig);
         }
-        userAssetsServices.availablebalanceChange(toType,user.getId(),EUserAssets.TRANSFER,amtBig,"","");
+        userAssetsServices.availablebalanceChange(toType, user.getId(), EUserAssets.TRANSFER, amtBig.setScale(5, RoundingMode.HALF_DOWN), fromType + "/" + toType, "");
         return ServerResponse.createBySuccess();
     }
 
@@ -763,22 +765,17 @@
     }
 
 
-    public ServerResponse addSimulatedAccount(Integer agentId, String phone, String pwd, String amt, Integer accountType, HttpServletRequest request) {
+    public ServerResponse addSimulatedAccount(Integer agentId, String phone, String pwd, Integer accountType, HttpServletRequest request) {
         if (StringUtils.isBlank(phone) || StringUtils.isBlank(pwd)) {
             return ServerResponse.createByErrorMsg("The parameter cannot be null");
         }
 
 
-        User dbUser = this.userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getPhone,phone));
-        if (dbUser != null) {
+        Long count = userMapper.selectCount(new LambdaQueryWrapper<User>().eq(User::getPhone, phone));
+        if (count > 0) {
             return ServerResponse.createByErrorMsg("The phone number is registered");
         }
 
-
-        if ((new BigDecimal(amt)).compareTo(new BigDecimal("200000")) == 1) {
-            return ServerResponse.createByErrorMsg("The phone number is registered");
-        }
-        amt = "0";   //代理后台添加用户时金额默认为0
         User user = new User();
         user.setAccountType(accountType);
         user.setPhone(phone);
@@ -786,7 +783,8 @@
         user.setIsLogin(Integer.valueOf(0));
         user.setIsActive(Integer.valueOf(0));
         user.setRegTime(new Date());
-
+        user.setUserPwd(SymmetricCryptoUtil.encryptPassword(pwd));
+        user.setLever("1");
         if (accountType.intValue() == 1) {
             user.setNickName("模拟用户");
         }
@@ -806,10 +804,10 @@
     }
 
 
-    public ServerResponse listByAdmin(String realName, String phone, Integer agentId, Integer accountType, int pageNum, int pageSize, HttpServletRequest request) {
+    public ServerResponse listByAdmin(String realName, String phone, Integer agentId, Integer accountType, int pageNum, int pageSize, String id, HttpServletRequest request) {
         PageHelper.startPage(pageNum, pageSize);
 
-        List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType);
+        List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType, id);
 
         PageInfo pageInfo = new PageInfo(users);
 
@@ -853,20 +851,8 @@
             return ServerResponse.createByErrorMsg("User does not exist");
         }
         this.userMapper.updateById(user);
-        UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
-                .eq(UserAssets::getUserId, user.getId())
-                .eq(UserAssets::getAccectType,"IN"));
-        if(null == userAssets){
-            return ServerResponse.createBySuccessMsg("用户资金账户不存在");
-        }
-        if(direction == 0){
-            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(new BigDecimal(amt)));
-            userAssets.setTotleAssets(userAssets.getTotleAssets().add(new BigDecimal(amt)));
-        }else {
-            userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(new BigDecimal(amt)));
-            userAssets.setTotleAssets(userAssets.getTotleAssets().subtract(new BigDecimal(amt)));
-        }
-        userAssetsMapper.updateById(userAssets);
+
+
         SiteTaskLog siteTaskLog = new SiteTaskLog();
         siteTaskLog.setTaskType("管理员修改金额");
         StringBuffer cnt = new StringBuffer();
@@ -978,6 +964,9 @@
             user.setAuthMsg(authMsg);
         }
 
+        if (state == 2) {
+            user.setIsLock(0);
+        }
         user.setIsActive(state);
 
         int updateCount = this.userMapper.updateById(user);
@@ -1034,10 +1023,8 @@
         agentUserListVO.setIsLogin(user.getIsLogin());
         agentUserListVO.setRegAddress(user.getRegAddress());
         agentUserListVO.setIsActive(user.getIsActive());
-
-
-
-
+        agentUserListVO.setImg1Key(user.getImg1Key());
+        agentUserListVO.setImg2Key(user.getImg2Key());
 
         PositionVO positionVO = this.iUserPositionService.findUserPositionAllProfitAndLose(user.getId());
         BigDecimal allProfitAndLose = positionVO.getAllProfitAndLose();
@@ -1099,17 +1086,6 @@
         userInfoVO.setIsActive(user.getIsActive());
         userInfoVO.setAuthMsg(user.getAuthMsg());
         userInfoVO.setVaildNumber(user.getVaildNumber());
-        BigDecimal exchangRate =  iSiteSettingService.getSiteSetting().getExchangeRate();
-        BigDecimal totalUsMoney = userAssetsServices.getAvailableBalance(EStockType.US.getCode(),user.getId());
-        BigDecimal totalMasMoney = userAssetsServices.getAvailableBalance(EStockType.IN.getCode(), user.getId())
-                .divide(exchangRate,BigDecimal.ROUND_CEILING).setScale(2,
-                RoundingMode.UP);
-
-        userInfoVO.setDjzj(user.getDjzj());
-        userInfoVO.setEnableAmt(user.getEnableAmt());
-        userInfoVO.setMasTotalAssets(totalMasMoney.setScale(2).toString());
-        userInfoVO.setUsTotalAssets(totalUsMoney.setScale(2).toString());
-        userInfoVO.setTotalAssets((totalUsMoney.add(totalMasMoney)).setScale(2).toString());
         return userInfoVO;
     }
 
@@ -1137,30 +1113,94 @@
         userMapper.updateUserAmt(amt, user_id);
     }
 
-//    @Override
-//    public ServerResponse queryMyOption(String code, HttpServletRequest request) {
-//        User user = getCurrentUser(request);
-//
-//        if (user == null) {
-//            return ServerResponse.createBySuccessMsg("請先登錄");
-//        }
-//        String stockcode = code;
-//        if(code.contains("hf")){
-//            stockcode = code.split("_")[1].toString();
-//        }
-//        stockcode = stockcode.replace("sh","").replace("sz","").replace("bj","");
-//        return this.iStockOptionService.isOption(user.getId(), stockcode);
-//    }
-
 
     @Override
-    public ServerResponse editAmtPwd(HttpServletRequest request, String amtPwd) {
-        User user =  userService.getCurrentUser(request);
-        User updateUser = new User();
-        updateUser.setId(user.getId());
-        updateUser.setAmtPwd(amtPwd);
-        userMapper.updateById(updateUser);
-        return ServerResponse.createBySuccessMsg("update Success");
+    public ServerResponse queryMyOption(String code, HttpServletRequest request) {
+        User user = getCurrentUser(request);
+        return this.iStockOptionService.isOption(user.getId(), code);
+    }
+
+    @Override
+    public ServerResponse getMoenyLog(String type, HttpServletRequest request) {
+        User user = getCurrentUser(request);
+        QueryWrapper<MoneyLog> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("type", type);
+        queryWrapper.eq("user_id", user.getId());
+        return ServerResponse.createBySuccess(mapper.selectList(queryWrapper));
+    }
+
+    @Override
+    public ServerResponse sendMailCode(String MailCode) {
+        if (MailCode == null || MailCode.equals("")) {
+            return ServerResponse.createByErrorMsg("The mobile mail number and password cannot be empty");
+        }
+        emailService.sendSimpleMail(MailCode, "barclays register code", codeUtil.generateVerificationCode());
+        return ServerResponse.createBySuccessMsg("send code success!");
+    }
+
+    @Override
+    public ServerResponse sendSms(String phone, HttpServletRequest request) throws Exception {
+        String message = "Your verification code is:";
+        String code = generateVerificationCode();
+        message += code;
+        String rcode = RedisShardedPoolUtils.get(RedisKeyConstant.SMS_CODE+phone+code);
+        if(rcode !=null ){
+            ServerResponse.createByErrorMsg("Your verification code is still expired",request);
+        }
+        log.info("开始发送短信【国际】:" + phone + "----" + message);
+        String urlString = "http://190.92.213.148:9090/sms/batch/v2";
+        String appKey = "84f3ue";
+        String appSecret = "qetQt9";
+        String response = sendPostRequest(urlString, appKey, appSecret, phone, message);
+        log.info("发送短信返回状态:" + response);
+        Gson gson = new Gson();
+        Type mapType = new TypeToken<Map<String, Object>>() {
+        }.getType();
+        Map<String, Object> map = gson.fromJson(response, mapType);
+        if (map.get("code").equals("00000")) {
+            RedisShardedPoolUtils.setEx(RedisKeyConstant.SMS_CODE+"91"+phone,code,3000);
+        }
+        return ServerResponse.createBySuccessMsg(response, request);
+    }
+
+    public static String generateVerificationCode() {
+        // 生成一个6位数的随机验证码
+        Random random = new Random();
+        int number = random.nextInt(900000) + 100000; // 生成100000到999999之间的随机数
+        return String.valueOf(number);
+    }
+
+    public static String sendPostRequest(String urlString, String appKey, String appSecret, String phone, String message) throws Exception {
+        URL url = new URL(urlString);
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+        // 设置请求方法为POST
+        connection.setRequestMethod("POST");
+        connection.setDoOutput(true);
+
+        // 构造请求参数
+        StringBuilder postData = new StringBuilder();
+        postData.append("appkey=").append(URLEncoder.encode(appKey, "UTF-8"));
+        postData.append("&appsecret=").append(URLEncoder.encode(appSecret, "UTF-8"));
+        postData.append("&phone=").append(URLEncoder.encode(phone, "UTF-8"));
+        postData.append("&msg=").append(URLEncoder.encode(message, "UTF-8"));
+
+        // 发送请求
+        try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())) {
+            writer.write(postData.toString());
+            writer.flush();
+        }
+
+        // 读取响应
+        StringBuilder response = new StringBuilder();
+        try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
+            String line;
+            while ((line = reader.readLine()) != null) {
+                response.append(line);
+            }
+        }
+
+        return response.toString();
     }
 }
 
diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index c666958..1beba76 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -6,21 +6,17 @@
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
-import com.nq.dao.StockSubscribeMapper;
-import com.nq.dao.UserAssetsMapper;
-import com.nq.dao.UserMapper;
-import com.nq.dao.UserStockSubscribeMapper;
+import com.nq.dao.*;
 import com.nq.enums.EStockType;
+import com.nq.enums.EUserAssets;
 import com.nq.pojo.*;
 import com.nq.service.*;
-import com.nq.utils.ConverterUtil;
 import com.nq.utils.timeutil.DateTimeUtil;
 import com.nq.utils.KeyUtils;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.redis.JsonUtil;
 import com.nq.utils.redis.RedisShardedPoolUtils;
 import com.nq.utils.stock.BuyAndSellUtils;
-import com.nq.vo.stock.UserStockSubscribeVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,26 +26,27 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 新股申购
  * @author lr
  * @date 2020/07/24
  */
-@Service
+@Service("IUserStockSubscribeService")
 @Slf4j
 public class UserStockSubscribeServiceImpl  implements IUserStockSubscribeService {
 
     @Resource
     private UserStockSubscribeMapper userStockSubscribeMapper;
 
-    @Autowired
+    @Resource
     UserMapper userMapper;
-
+    @Resource
+    AgentUserMapper agentUserMapper;
     @Autowired
     ISiteMessageService iSiteMessageService;
     @Autowired
@@ -64,10 +61,10 @@
     ISiteSettingService iSiteSettingService;
     @Autowired
     TradingHourServiceImpl tradingHourService;
+    @Resource
+    IUserAssetsServices iUserAssetsServices;
     @Autowired
-    UserAssetsServices userAssetsServices;
-    @Autowired
-    UserAssetsMapper userAssetsMapper;
+    StockMapper stockMapper;
     /**
      * 用户新股申购
      * @param model
@@ -77,71 +74,63 @@
     public ServerResponse insert(UserStockSubscribe model, HttpServletRequest request) throws Exception {
         int ret = 0;
         if (model == null) {
-            return ServerResponse.createByErrorMsg("Parameter error");
+            return ServerResponse.createByErrorMsg("参数错误",request);
         }
         String property = PropertiesUtil.getProperty("user.cookie.name");
         String header = request.getHeader(property);
         if (header != null) {
-            User user = this.iUserService.getCurrentRefreshUser(request);
-            if (user == null){
-                return ServerResponse.createBySuccessMsg("請先登錄");
-            }
+            User user = iUserService.getCurrentRefreshUser(request);
             if (model.getNewCode() != null) {
                 StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>().eq("code", model.getNewCode()));
                 //实名认证开关
                 SiteProduct siteProduct = iSiteProductService.getProductSetting();
-                if (user.getIsActive() != 2) {
-                    return ServerResponse.createByErrorMsg("Order failed, please first real name authentication");
+                if (siteProduct.getRealNameDisplay() && (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCard()))) {
+                    return ServerResponse.createByErrorMsg("订单失败,请先实名认证",request);
+                }
+                if(new Date().before(stockSubscribe.getSubscribeTime())){
+                    return ServerResponse.createByErrorMsg("未到申购时间",request);
+                }
+                //重复申购限制
+                UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.selectOne(new QueryWrapper<UserStockSubscribe>().eq("new_code", model.getNewCode()).eq("user_id", user.getId()));
+                if (userStockSubscribe != null) {
+                    return ServerResponse.createByErrorMsg("请勿重复申购",request);
                 }
                 if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
-                    return ServerResponse.createByErrorMsg("Order failed, account has been locked");
+                    return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定",request);
                 }
                 if (stockSubscribe == null) {
-                    return ServerResponse.createByErrorMsg("The new stock code does not exist");
+                    return ServerResponse.createByErrorMsg("新的股票代码不存在",request);
                 }
-                if(System.currentTimeMillis() < stockSubscribe.getSubscribeTime().getTime()){
-                    return ServerResponse.createByErrorMsg("It is not time to apply for purchase");
+                if (model.getApplyNums() == null || model.getApplyNums() > stockSubscribe.getOrderNumber() || model.getApplyNums() < stockSubscribe.getMinOrderNumber()) {
+                    return ServerResponse.createByErrorMsg("申购失败,最小申购数量:"+stockSubscribe.getMinOrderNumber()+",最大申购数量:"+stockSubscribe.getOrderNumber(),request);
                 }
-                if(System.currentTimeMillis() > stockSubscribe.getSubscribeEndTime().getTime()){
-                    return ServerResponse.createByErrorMsg("The application time has passed");
-                }
-                if(model.getApplyNums() < stockSubscribe.getOrderMinNumber()){
-                    return ServerResponse.createByErrorMsg("The number of configurations cannot be less than"+stockSubscribe.getOrderMinNumber());
-                }
-                UserAssets userAssets = userAssetsServices.selectByUserId(user.getId(), EStockType.IN.getCode());
-                if(stockSubscribe.getType() == 2){
-                    BigDecimal multiply = stockSubscribe.getPrice().multiply(new BigDecimal(model.getApplyNums()));
-                    if(userAssets.getAvailableBalance().compareTo(multiply) < 0){
-                        return ServerResponse.createByErrorMsg("not sufficient funds");
+                if (stockSubscribe.getType() == 2) {
+                    int u = userMapper.updateById(user);
+                    if (u <= 0) {
+                        return ServerResponse.createByErrorMsg("由于未知原因,申请失败",request);
                     }
                 }
-
-                BigDecimal price = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
                 model.setUserId(user.getId());
                 model.setNewName(stockSubscribe.getName());
                 model.setAgentId(user.getAgentId());
                 model.setAgentName(user.getAgentName());
                 model.setPhone(user.getPhone());
                 model.setBuyPrice(stockSubscribe.getPrice());
-                model.setBond(price);
+                model.setBond(new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice()));
                 model.setRealName(Objects.equals(user.getRealName(), "")||user.getRealName()==null ?"模拟用户无实名":user.getRealName());
                 model.setAddTime(new Date());
                 model.setOrderNo(KeyUtils.getUniqueKey());
                 model.setType(stockSubscribe.getType());
+            }
 
-                //如果是配售
-                if (stockSubscribe.getType() == 2) {
-                    //直接转已认缴
-                    model.setStatus(4);
-                    model.setApplyNumber(model.getApplyNums());
-                    userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(price));
-                }
-                userStockSubscribeMapper.insert(model);
-                userAssetsMapper.updateById(userAssets);
-                return ServerResponse.createBySuccessMsg("Successful application");
+            ret = userStockSubscribeMapper.insert(model);
+            if (ret > 0) {
+                return ServerResponse.createBySuccessMsg("申购成功",request);
+            } else {
+                return ServerResponse.createByErrorMsg("申购失败",request);
             }
         }
-        return ServerResponse.createByErrorMsg("Not logged in");
+        return ServerResponse.createByErrorMsg("申购失败",request);
     }
     @Override
     public int update(UserStockSubscribe model) {
@@ -155,42 +144,105 @@
     @Override
     public ServerResponse save(UserStockSubscribe model, HttpServletRequest request) {
         int ret = 0;
+//        log.info("model"+model);
         if( model.getId() != null  ){
+            if (model.getStatus() == 3||model.getStatus() == 2) {
+                model.setEndTime(DateTimeUtil.getCurrentDate());
+            }
             UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(model.getId());
             if (userStockSubscribe.getStatus() == 5) {
                 return ServerResponse.createByErrorMsg("It's been converted");
             }
+//            else if (userStockSubscribe.getStatus() == 3) {
+//                return ServerResponse.createByErrorMsg("已经审核过并且中签了,无法再次更改状态");
+//            }else if (userStockSubscribe.getStatus() == 2) {
+//                return ServerResponse.createByErrorMsg("已经审核过并且未中签");
+//            }
             StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe()).eq("code", userStockSubscribe.getNewCode()));
             if (model.getStatus() == 3 && model.getApplyNumber() != null){
                 if(stockSubscribe.getOrderNumber()< model.getApplyNumber()){
                     return ServerResponse.createByErrorMsg("The number of successful applications exceeds the maximum number of applications");
                 }
                 model.setBond(stockSubscribe.getPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
-                ret = userStockSubscribeMapper.updateById(model);
+                ret = userStockSubscribeMapper.update1(model);
             }else if (model.getStatus() == 2){
-                ret = userStockSubscribeMapper.updateById(model);
-            }else if (model.getStatus() == 4){
-                return iUserPositionService.newStockToPosition(model.getId());
+                ret = userStockSubscribeMapper.update1(model);
+            }else if (model.getStatus() == 5){
+                    return iUserPositionService.newStockToPosition(model.getId());
+
             }
-            if(ret>0 && model.getStatus() == 3 ){
-                //给用户推送消息
-                SiteMessage siteMessage = new SiteMessage();
-                siteMessage.setUserId(userStockSubscribe.getUserId());
-                siteMessage.setUserName(userStockSubscribe.getRealName());
-                siteMessage.setTypeName("New share subscription");
-                siteMessage.setStatus(1);
-                siteMessage.setAddTime(DateTimeUtil.getCurrentDate());
-                siteMessage.setContent("【新股申购中签】恭喜您,新股申购中签成功,申购金额:" + userStockSubscribe.getBond() + ",请及时关注哦。");
-                iSiteMessageService.insert(siteMessage);
-            }else if(ret>0 && model.getStatus() == 2) {
-                SiteMessage siteMessage = new SiteMessage();
-                siteMessage.setUserId(userStockSubscribe.getUserId());
-                siteMessage.setUserName(userStockSubscribe.getRealName());
-                siteMessage.setTypeName("新股申购");
-                siteMessage.setStatus(1);
-                siteMessage.setContent("【新股申购未中签】很遗憾,您的新股申购本次未中签,申购金额:" + userStockSubscribe.getBond() + "已退还。");
-                siteMessage.setAddTime(DateTimeUtil.getCurrentDate());
-                iSiteMessageService.insert(siteMessage);
+
+                if(ret>0 && model.getStatus() == 3 ){
+                    //给用户推送消息
+                    SiteMessage siteMessage = new SiteMessage();
+                    siteMessage.setUserId(userStockSubscribe.getUserId());
+                    siteMessage.setUserName(userStockSubscribe.getRealName());
+                    siteMessage.setTypeName("New share subscription");
+                    siteMessage.setStatus(1);
+
+                    siteMessage.setAddTime(DateTimeUtil.getCurrentDate());
+
+                    siteMessage.setContent("【新股申购中签】恭喜您,新股申购中签成功,申购金额:"+ userStockSubscribe.getBond() );
+                    iSiteMessageService.insert(siteMessage);
+                }else
+                if(ret>0 && model.getStatus() == 2) {
+                    //给达到消息强平提醒用户推送消息
+                    if (stockSubscribe.getType() != 2) {
+                        SiteMessage siteMessage = new SiteMessage();
+                        siteMessage.setUserId(userStockSubscribe.getUserId());
+                        siteMessage.setUserName(userStockSubscribe.getRealName());
+                        siteMessage.setTypeName("新股申购");
+                        siteMessage.setStatus(1);
+                        siteMessage.setContent("【新股申购未中签】很遗憾,您的新股申购本次未中签,申购金额:" + userStockSubscribe.getBond() + "。");
+                        siteMessage.setAddTime(DateTimeUtil.getCurrentDate());
+                        iSiteMessageService.insert(siteMessage);
+                    }else {
+                        User user = userMapper.selectById(userStockSubscribe.getUserId());
+                        userMapper.updateByPrimaryKey(user);
+                        SiteMessage siteMessage = new SiteMessage();
+                        siteMessage.setUserId(userStockSubscribe.getUserId());
+                        siteMessage.setUserName(userStockSubscribe.getRealName());
+                        siteMessage.setTypeName("新股申购");
+                        siteMessage.setStatus(1);
+                        siteMessage.setContent("【新股申购未中签】很遗憾,您的新股申购本次未中签,申购金额:" + userStockSubscribe.getBond() + "已退还。");
+                        siteMessage.setAddTime(DateTimeUtil.getCurrentDate());
+                        iSiteMessageService.insert(siteMessage);
+                    }
+
+                }
+
+
+        } else{
+            if(model.getPhone() != null&&model.getId()==null) {
+                User user = userMapper.findByPhone(model.getPhone());
+                if (user == null) {
+                    return ServerResponse.createByErrorMsg("User does not exist");
+                }
+                model.setRealName(user.getRealName());
+                model.setUserId(user.getId());
+                model.setAgentId(user.getAgentId());
+                model.setAgentName(user.getAgentName());
+
+
+//            String cookie_name = PropertiesUtil.getProperty("admin.cookie.name");
+//            String logintoken = CookieUtils.readLoginToken(request, cookie_name);
+//            String adminJson = RedisShardedPoolUtils.get(logintoken);
+//            SiteAdmin siteAdmin = (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class);
+                StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe()).eq("code", model.getNewCode()));
+                if (stockSubscribe == null) {
+                    return ServerResponse.createByErrorMsg("Failed. Ipo information does not exist");
+                }
+
+                model.setNewName(stockSubscribe.getName());
+                model.setBuyPrice(stockSubscribe.getPrice());
+                if (model.getApplyNums() > stockSubscribe.getOrderNumber() || model.getApplyNumber() > stockSubscribe.getOrderNumber()) {
+                    return ServerResponse.createByErrorMsg("The number of applications or the number of wins is the maximum" + stockSubscribe.getOrderNumber());
+                }
+                model.setBond(model.getBuyPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
+                model.setAddTime(DateTimeUtil.getCurrentDate());
+                model.setOrderNo(KeyUtils.getUniqueKey());
+                model.setType(stockSubscribe.getType());
+                ret = userStockSubscribeMapper.insert(model);
             }
         }
         if(ret>0){
@@ -210,7 +262,7 @@
         if(model!=null){
             //所有人发站内信
             if(model.getUserId() == 0){
-                List<User> users = this.userMapper.listByAdmin(null, null, null, null);
+                List<User> users = this.userMapper.listByAdmin(null, null, null, null,null);
                 for(int k=0;k<users.size();k++){
                     User user = users.get(k);
                     SiteMessage siteMessage = new SiteMessage();
@@ -244,32 +296,12 @@
 
     /*新股申购-查询列表*/
     @Override
-    public ServerResponse<PageInfo> getList(int pageNum, int pageSize, String keyword, Integer type,HttpServletRequest request){
+    public ServerResponse<PageInfo> getList(int pageNum, int pageSize, String keyword, HttpServletRequest request){
         PageHelper.startPage(pageNum, pageSize);
-        List<UserStockSubscribe> listData = this.userStockSubscribeMapper.pageList(pageNum, pageSize, keyword,type);
-
-        // 收集所有的userId
-        List<Integer> userIds = listData.stream().map(UserStockSubscribe::getUserId).collect(Collectors.toList());
-
-        // 一次性查询所有的用户信息
-        List<User> userList = userMapper.selectBatchIds(userIds);
-        List<UserStockSubscribeVo> subscribeVoList = new ArrayList<>();
-        // 遍历listData,将查询到的用户信息填充到UserStockSubscribeVo中
-        listData.forEach(f -> {
-            User user = userList.stream().filter(u -> u.getId().equals(f.getUserId())).findFirst().orElse(null);
-            UserAssets userAssets = userAssetsServices.selectByUserId(user.getId(), EStockType.IN.getCode());
-            if (user != null) {
-                UserStockSubscribeVo userStockSubscribeVo = ConverterUtil.convert(f, UserStockSubscribeVo.class);
-                BigDecimal divide = userAssets.getAvailableBalance().divide(userStockSubscribeVo.getBuyPrice(), 0, RoundingMode.HALF_UP);
-                userStockSubscribeVo.setMaxSubscribeNum(divide.intValue());
-                subscribeVoList.add(userStockSubscribeVo);
-            }
-        });
-
-        PageInfo pageInfo = new PageInfo(subscribeVoList);
-        pageInfo.setList(subscribeVoList);
+        List<UserStockSubscribe> listData = this.userStockSubscribeMapper.pageList(pageNum, pageSize, keyword);
+        PageInfo pageInfo = new PageInfo(listData);
+        pageInfo.setList(listData);
         return ServerResponse.createBySuccess(pageInfo);
-
     }
 
     /*新股申购-查询详情*/
@@ -284,11 +316,7 @@
         String property = PropertiesUtil.getProperty("user.cookie.name");
         String header = request.getHeader(property);
         if (header != null) {
-            String userJson = RedisShardedPoolUtils.get(header);
-            User user = (User) JsonUtil.string2Obj(userJson, User.class);
-            if (user == null) {
-                return ServerResponse.createByErrorMsg("User not logged in");
-            }
+             User user = iUserService.getCurrentRefreshUser(request);
             List<UserStockSubscribe> userStockSubscribe = null;
             if (type==null||type.equals("")){
                 userStockSubscribe = this.userStockSubscribeMapper.selectList(new QueryWrapper<>(new UserStockSubscribe()).eq("user_id", user.getId()).orderByDesc("add_time"));
@@ -305,71 +333,59 @@
             }
             return ServerResponse.createBySuccess(list);
         }
-        return ServerResponse.createByErrorMsg("Please log in first");
+        return ServerResponse.createByErrorMsg("请先登录",request);
     }
     /**
      * 新股申购-用户提交金额
      */
     @Override
     @Transactional
-    public ServerResponse userSubmit(Integer id, HttpServletRequest request) {
+    public ServerResponse userSubmit(Integer id,HttpServletRequest request) {
         int ret = 0;
         String property = PropertiesUtil.getProperty("user.cookie.name");
         String header = request.getHeader(property);
         if (header != null) {
-            String userJson = RedisShardedPoolUtils.get(header);
-            User user = (User) JsonUtil.string2Obj(userJson, User.class);
-            if (user == null) {
-                return ServerResponse.createByErrorMsg("User not logged in");
-            }
-            if (id == null) {
-                return ServerResponse.createByErrorMsg("Parameter error");
+            User user = iUserService.getCurrentRefreshUser(request);
+            if(id == null){
+                return ServerResponse.createByErrorMsg("参数错误",request);
             }
             UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
-            log.info("userStockSubscribe:{}", userStockSubscribe);
             if (userStockSubscribe != null && userStockSubscribe.getUserId().equals(user.getId())) {
-                StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe()).eq("code", userStockSubscribe.getNewCode()));
-                if (userStockSubscribe.getType() == 2) {
-                    return ServerResponse.createByErrorMsg("No payment is required for offline placement");
+                StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe())
+                        .eq("code", userStockSubscribe.getNewCode()));
+                if(userStockSubscribe.getStatus()== 2 ){
+                    return ServerResponse.createByErrorMsg("未中签,无需支付",request);
                 }
-                //判断是否到了认缴时间
-                if (System.currentTimeMillis() < stockSubscribe.getSubscriptionTime().getTime()) {
-                    return ServerResponse.createByErrorMsg("The subscription time is not up");
+                if(null == stockSubscribe){
+                    return  ServerResponse.createByErrorMsg("新股不存在",request);
                 }
-                //判断是否已过认缴时间
-                if (stockSubscribe.getSubscriptionEndTime().getTime() < System.currentTimeMillis()) {
-                    return ServerResponse.createByErrorMsg("The subscription time has passed");
+                Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, stockSubscribe.getCode()));
+                if(null == stock){
+                    return  ServerResponse.createByErrorMsg("股票不存在",request);
                 }
                 if (userStockSubscribe.getStatus() == 3) {
                     userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate());
                     userStockSubscribe.setStatus(4);
+                    BigDecimal bigDecimal =  iUserAssetsServices.
+                            getAvailableBalance(stock.getStockType(),
+                                    userStockSubscribe.getUserId());
 
-                    UserAssets userAssets = userAssetsServices.selectByUserId(userStockSubscribe.getUserId(), EStockType.IN.getCode());
-                    if (userAssets.getAvailableBalance().compareTo(userStockSubscribe.getBond()) < 0) {
-                        return ServerResponse.createByErrorMsg("Insufficient balance");
+                    BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber()));
+                    if(bigDecimal.compareTo(multiply) < 0){
+                        return ServerResponse.createByErrorMsg("余额不足",request);
                     }
-                    BigDecimal enableAmt = userAssets.getAvailableBalance().subtract(userStockSubscribe.getBond());
-                    userAssets.setAvailableBalance(enableAmt);
-                    ret = userAssetsMapper.updateById(userAssets);
+                    iUserAssetsServices.availablebalanceChange(stock.getStockType(),userStockSubscribe.getUserId(),
+                            EUserAssets.BUY,multiply.negate(),"","");
+                    userStockSubscribeMapper.update1(userStockSubscribe);
+                    return  ServerResponse.createBySuccess();
                 } else {
-                    return ServerResponse.createByErrorMsg("There is no fee for unsuccessful applicants");
+                    return ServerResponse.createByErrorMsg("不成功的申请者不收取任何费用",request);
                 }
             } else {
-                return ServerResponse.createByErrorMsg("New share subscription order does not exist!");
-            }
-
-            if (ret > 0) {
-                ret = userStockSubscribeMapper.update1(userStockSubscribe);
-                if (ret > 0) {
-                    return ServerResponse.createBySuccessMsg("Successful operation");
-                } else {
-                    return ServerResponse.createByErrorMsg("Operation failure");
-                }
-            } else {
-                return ServerResponse.createByErrorMsg("Deduction failure");
+                return ServerResponse.createByErrorMsg("新股认购订单不存在!",request);
             }
         }
-        return ServerResponse.createByErrorMsg("Please log in first");
+        return ServerResponse.createByErrorMsg("请先登录",request);
     }
     /**
      * 新股申购-删除
@@ -390,56 +406,8 @@
         return ServerResponse.createByErrorMsg("Operation failure");
     }
 
-    @Override
-    public ServerResponse backgroundPurchase(Integer id) {
-        int ret = 0;
-        if (id == null) {
-            return ServerResponse.createByErrorMsg("Parameter error");
-        }
-        UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
-        User user = userMapper.selectById(userStockSubscribe.getUserId());
-        log.info("userStockSubscribe:{}", userStockSubscribe);
-        if (userStockSubscribe != null && userStockSubscribe.getUserId().equals(user.getId())) {
-            StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<>(new StockSubscribe()).eq("code", userStockSubscribe.getNewCode()));
-            if (userStockSubscribe.getType() == 2) {
-                return ServerResponse.createByErrorMsg("No payment is required for offline placement");
-            }
-            //判断是否到了认缴时间
-            if (System.currentTimeMillis() < stockSubscribe.getSubscriptionTime().getTime()) {
-                return ServerResponse.createByErrorMsg("The subscription time is not up");
-            }
-            //判断是否已过认缴时间
-            if (stockSubscribe.getSubscriptionEndTime().getTime() < System.currentTimeMillis()) {
-                return ServerResponse.createByErrorMsg("The subscription time has passed");
-            }
-            if (userStockSubscribe.getStatus() == 3) {
-                userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate());
-                userStockSubscribe.setStatus(4);
 
-                UserAssets userAssets = userAssetsServices.selectByUserId(userStockSubscribe.getUserId(), EStockType.IN.getCode());
-                if (userAssets.getAvailableBalance().compareTo(userStockSubscribe.getBond()) < 0) {
-                    return ServerResponse.createByErrorMsg("Insufficient balance");
-                }
-                BigDecimal enableAmt = userAssets.getAvailableBalance().subtract(userStockSubscribe.getBond());
-                userAssets.setAvailableBalance(enableAmt);
-                ret = userAssetsMapper.updateById(userAssets);
-            } else {
-                return ServerResponse.createByErrorMsg("There is no fee for unsuccessful applicants");
-            }
-        } else {
-            return ServerResponse.createByErrorMsg("New share subscription order does not exist!");
-        }
-        if (ret > 0) {
-            ret = userStockSubscribeMapper.update1(userStockSubscribe);
-            if (ret > 0) {
-                return ServerResponse.createBySuccessMsg("Successful operation");
-            } else {
-                return ServerResponse.createByErrorMsg("Operation failure");
-            }
-        } else {
-            return ServerResponse.createByErrorMsg("Deduction failure");
-        }
-    }
+
 
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
index 2da019a..6f436e5 100644
--- a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
@@ -3,7 +3,6 @@
 
 import com.google.gson.Gson;
 import com.nq.dao.*;
-import com.nq.enums.EStockType;
 import com.nq.enums.EUserAssets;
 import com.nq.pay.PayUtil;
 import com.nq.pojo.*;
@@ -18,7 +17,6 @@
 import com.nq.utils.http.HttpClientUtil;
 import com.nq.utils.stock.WithDrawUtils;
 
-import java.lang.annotation.ElementType;
 import java.math.BigDecimal;
 
 import java.util.*;
@@ -59,9 +57,8 @@
     UserMapper userMapper;
 
     @Resource
-    IUserAssetsServices userAssetsServices;
-    @Resource
-    UserAssetsMapper userAssetsMapper;
+    IUserAssetsServices iUserAssetsServices;
+
 
     @Autowired
     IAgentUserService iAgentUserService;
@@ -86,18 +83,16 @@
 
     @Autowired
     SiteSettingServiceImpl siteSettingService;
-
-    @Autowired
-    SitePayMapper sitePayMapper;
+    @Resource
+    UserAssetsMapper userAssetsMapper;
 
 
     @Transactional
-    public ServerResponse outMoney(String amt, String with_Pwd,String accsetType,String walletAddress,String actualWithdrawal,String coinType,String amtPwd,HttpServletRequest request) throws Exception {
+    public ServerResponse outMoney(String amt, String with_Pwd,String accsetType,HttpServletRequest request) throws Exception {
         if (StringUtils.isBlank(amt)) {
             return ServerResponse.createByErrorMsg("The parameter cannot be null");
         }
         User user = this.iUserService.getCurrentRefreshUser(request);
-        User dbuser = this.userMapper.selectById(user.getId());
         String w = user.getWithPwd();
         if (w == null) {
             w = "";
@@ -107,65 +102,37 @@
         }
         if (w.equals(with_Pwd)) {
             if (user.getIsLogin().intValue() == 1) {
-                return ServerResponse.createByErrorMsg("User locked");
+                return ServerResponse.createByErrorMsg("用户被锁定",request);
             }
-            if (amtPwd==null||amtPwd.equals("")){
-                return ServerResponse.createByErrorMsg("Fund password is null");
-            }
-            if (!amtPwd.equals(dbuser.getAmtPwd())){
-                return ServerResponse.createByErrorMsg("Fund password error");
-            }
-
             if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCard())) {
-
-                return ServerResponse.createByErrorMsg("No real name authentication");
-
+                return ServerResponse.createByErrorMsg("未实名认证",request);
             }
-
             UserBank userBank = this.iUserBankService.findUserBankByUserId(user.getId());
-
             if (userBank == null) {
-
-                return ServerResponse.createByErrorMsg("No bank card added");
-
+                return ServerResponse.createByErrorMsg("未绑定银行卡",request);
             }
-
-
             if (user.getAccountType().intValue() == 1) {
-
-                return ServerResponse.createByErrorMsg("Analog users cannot withdraw funds");
-
+                return ServerResponse.createByErrorMsg("模拟用户无法提取资金",request);
             }
-
-
             SiteSetting siteSetting = this.iSiteSettingService.getSiteSetting();
-
             if ((new BigDecimal(amt)).compareTo(new BigDecimal(siteSetting.getWithMinAmt().intValue())) == -1) {
-
-                return ServerResponse.createByErrorMsg("Analog users cannot withdraw funds" + siteSetting.getWithMinAmt());
-
+                return ServerResponse.createByErrorMsg("最低提款金额:" + siteSetting.getWithMinAmt(),request);
             }
-
-
             int with_time_begin = siteSetting.getWithTimeBegin().intValue();
-
             int with_time_end = siteSetting.getWithTimeEnd().intValue();
-
             SiteProduct siteProduct = iSiteProductService.getProductSetting();
             if(siteProduct.getHolidayDisplay()){
-                return ServerResponse.createByErrorMsg("Withdrawals are not allowed on weekends or holidays!");
+                return ServerResponse.createByErrorMsg("周末或节假日不允许提款!",request);
             }
-
             if (!WithDrawUtils.checkIsWithTime(with_time_begin, with_time_end)) {
-                return ServerResponse.createByErrorMsg("Withdrawal failed. Withdrawal time is at" + with_time_begin + "point - " + with_time_end + "point among");
+                return ServerResponse.createByErrorMsg("撤销失败了。提现时间为" + with_time_begin + "点 - " + with_time_end + "点之间的",request);
             }
-
-            BigDecimal useAmt =  userAssetsServices.getAvailableBalance(accsetType,user.getId());
+            BigDecimal useAmt =  iUserAssetsServices.getAvailableBalance(accsetType,user.getId());
             BigDecimal tAmt = new BigDecimal(amt);
             if(useAmt.compareTo(tAmt)<0){
-                return ServerResponse.createByErrorMsg("Insufficient balance");
+                return ServerResponse.createByErrorMsg("余额不足",request);
             }
-            userAssetsServices.availablebalanceChange(accsetType,user.getId(), EUserAssets.WITHDRAW,tAmt.negate(),"","");
+            iUserAssetsServices.availablebalanceChange(accsetType,user.getId(), EUserAssets.WITHDRAW,tAmt.negate(),"","");
             UserWithdraw userWithdraw = new UserWithdraw();
             userWithdraw.setUserId(user.getId());
             userWithdraw.setNickName(user.getRealName());
@@ -177,35 +144,19 @@
             userWithdraw.setBankName(userBank.getBankName());
             userWithdraw.setBankAddress(userBank.getBankAddress());
             userWithdraw.setWithStatus(Integer.valueOf(0));
-            userWithdraw.setWalletAddress(walletAddress);
-            userWithdraw.setCoinType(coinType);
-            if (coinType!=null&&!coinType.equals("")){
-                SitePay sitePay = sitePayMapper.selectByChannelType(coinType);
-                BigDecimal actualWithdrawalAmt = new BigDecimal(amt);
-                if (sitePay!=null&&sitePay.getExchangeRate()>0){
-                    BigDecimal ex = new BigDecimal(sitePay.getExchangeRate());
-                    userWithdraw.setActualWithdrawal(actualWithdrawalAmt.divide(ex));
-                }else {
-                    userWithdraw.setActualWithdrawal(actualWithdrawalAmt);
-                }
-            }else {
-                BigDecimal actualWithdrawalAmt = new BigDecimal(amt);
-                userWithdraw.setActualWithdrawal(actualWithdrawalAmt.multiply(BigDecimal.ONE));
-            }
             BigDecimal withfee = siteSetting.getWithFeePercent().multiply(new BigDecimal(amt)).add(new BigDecimal(siteSetting.getWithFeeSingle().intValue()));
             userWithdraw.setWithFee(withfee);
+            userWithdraw.setAssetsType(accsetType);
             int insertCount = this.userWithdrawMapper.insert(userWithdraw);
             if (insertCount > 0) {
-
-                return ServerResponse.createBySuccessMsg("Successful withdrawal");
-
+                return ServerResponse.createBySuccessMsg("提现成功",request);
             }
 
             log.error("保存提现记录失败");
 
             throw new Exception("用户提现,保存提现记录失败");
         } else {
-            return ServerResponse.createByErrorMsg("The withdrawal password is incorrect!!");
+            return ServerResponse.createByErrorMsg("提现密码不正确!",request);
         }
 
     }
@@ -377,7 +328,12 @@
             if (user == null) {
                 return ServerResponse.createByErrorMsg("用户不存在");
             }
-            int updateCount = this.userMapper.updateById(user);
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(userWithdraw.getAssetsType(), user.getId());
+            if (userAssets == null) {
+                return ServerResponse.createByErrorMsg("用户资金账户不存在");
+            }
+            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(userWithdraw.getWithAmt()));
+            int updateCount = userAssetsMapper.updateById(userAssets);
             if (updateCount > 0) {
                 log.info("提现失败,返还用户资金成功!");
             } else {
@@ -385,10 +341,6 @@
                 throw new Exception("修改用户资金出错,抛出异常");
             }
             userWithdraw.setWithMsg(authMsg);
-            UserAssets userAssets = userAssetsServices.selectByUserId(user.getId(), EStockType.IN.getCode());
-            userAssets.setTotleAssets(userAssets.getTotleAssets().add(userWithdraw.getWithAmt()));
-            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(userWithdraw.getWithAmt()));
-            userAssetsMapper.updateById(userAssets);
         }else if(state == 1){
             // 发起第三方提现
             BigDecimal bgAmount = userWithdraw.getWithAmt();
diff --git a/src/main/java/com/nq/utils/ConverterUtil.java b/src/main/java/com/nq/utils/ConverterUtil.java
index 3722af5..edda967 100644
--- a/src/main/java/com/nq/utils/ConverterUtil.java
+++ b/src/main/java/com/nq/utils/ConverterUtil.java
@@ -1,7 +1,5 @@
 package com.nq.utils;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/com/nq/utils/DateUtil.java b/src/main/java/com/nq/utils/DateUtil.java
deleted file mode 100644
index abb972c..0000000
--- a/src/main/java/com/nq/utils/DateUtil.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package com.nq.utils;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-
-public class DateUtil {
-    /**
-     *
-     * @return 返回xx天前的日期
-     */
-    public static String lastWeek(int dayNum) {
-        Date date = new	Date();
-        int year = Integer.parseInt(new SimpleDateFormat("yyyy").format(date));
-        int month = Integer.parseInt(new SimpleDateFormat("MM").format(date));
-        int day	= Integer.parseInt(new SimpleDateFormat("dd").format(date)) - dayNum;
-
-        if (day	< 1) {
-            month -= 1;
-            if (month == 0)	{
-                year -=	1;
-                month =	12;
-            }
-            if (month == 4 || month	== 6 ||	month == 9 || month == 11) {
-                day = 30 + day;
-            } else if (month == 1 || month == 3 || month ==	5 || month == 7
-                    || month == 8 || month == 10 ||	month == 12) {
-                day = 31 + day;
-            } else if (month == 2) {
-                if (year % 400 == 0 || (year % 4 == 0 && year %	100 != 0))
-                    day = 29 + day;
-                else
-                    day = 28 + day;
-            }
-        }
-        String y = year	+ "";
-        String m = "";
-        String d = "";
-        if (month < 10)
-            m = "0"	+ month;
-        else
-            m = month + "";
-        if (day	< 10)
-            d = "0"	+ day;
-        else
-            d = day	+ "";
-        return y + "-" + m + "-" + d;
-    }
-    public static String nextDay(String date) {
-        DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
-        String nextDay = "";
-        try {
-            Date temp = dft.parse(date);
-            Calendar cld = Calendar.getInstance();
-            cld.setTime(temp);
-            cld.add(Calendar.DATE, 1);
-            temp = cld.getTime();
-            //获得下一天日期字符串
-             nextDay = dft.format(temp);
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return nextDay;
-    }
-
-    public static String lastManyDays(int dayNum){
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-        Date date=new Date();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.add(Calendar.DAY_OF_MONTH, -dayNum);
-        date = calendar.getTime();
-        return sdf.format(date);
-    }
-
-    public static String afterManyDays(int dayNum){
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-        Date date=new Date();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.add(Calendar.DAY_OF_MONTH, +dayNum);
-        date = calendar.getTime();
-        return sdf.format(date);
-    }
-    public static String lastManyDays(String appointDate,int dayNum){
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-        SimpleDateFormat resultSdf=new SimpleDateFormat("MM-dd");
-        Date date = null;
-        try {
-            date = sdf.parse(appointDate);
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.add(Calendar.DAY_OF_MONTH, -dayNum);
-        date = calendar.getTime();
-        return resultSdf.format(date);
-    }
-
-    // 根据year年的第week周,查询本周的起止时间
-    public static String weekToDayFormate(String weekDays){
-        int weekDaysLength = weekDays.length();
-        int year = 0;
-        int week = 0;
-        String resultDay = "";
-        if (weekDays==null){
-            weekDays=new Date().toString();
-        }else {
-            if (weekDays.substring(weekDaysLength-2,weekDaysLength-1).equals("1")){
-                year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2));
-                week = Integer.parseInt(weekDays.substring(weekDaysLength-2,weekDaysLength));
-            }else {
-                year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2));
-                week = Integer.parseInt(weekDays.substring(weekDaysLength-1,weekDaysLength));
-            }
-        }
-
-
-        Calendar calendar = Calendar.getInstance();
-        // ①.设置该年份的开始日期:第一个月的第一天
-        calendar.set(year,0,1);
-        // ②.计算出第一周还剩几天:+1是因为1号是1天
-        int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 1;
-        // ③.周数减去第一周再减去要得到的周
-        week = week - 2;
-        // ④.计算起止日期
-        calendar.add(Calendar.DAY_OF_YEAR,week * 7 + dayOfWeek);
-        resultDay+=new SimpleDateFormat("MM/dd").format(calendar.getTime());
-        calendar.add(Calendar.DAY_OF_YEAR, 6);
-        resultDay+="-"+new SimpleDateFormat("MM/dd").format(calendar.getTime());
-        return resultDay;
-    }
-    /**
-     * 根据具体年的周数算出日期范围
-     * @param weekDays '%Y%u'  202106
-     * @param targetNum 往后推的周数
-     * @return MM-dd/MM-dd
-     */
-    public static String getWeekDays(String weekDays,int targetNum) {
-        int weekDaysLength = weekDays.length();
-        int year = 0;
-        int week = 0;
-        String resultDay = "";
-        if (weekDays==null){
-            weekDays=new Date().toString();
-        }else {
-            if (weekDays.substring(weekDaysLength-2,weekDaysLength-1).equals("1")){
-                year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2));
-                week = Integer.parseInt(weekDays.substring(weekDaysLength-2,weekDaysLength));
-            }else {
-                year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2));
-                week = Integer.parseInt(weekDays.substring(weekDaysLength-1,weekDaysLength));
-            }
-        }
-        // 计算目标周数
-        if (week + targetNum > 52) {
-            year++;
-            week += targetNum - 52;
-        } else if (week + targetNum <= 0) {
-            year--;
-            week += targetNum + 52;
-        } else {
-            week += targetNum;
-        }
-
-        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
-        Calendar cal = Calendar.getInstance();
-
-        // 设置每周的开始日期
-        cal.setFirstDayOfWeek(Calendar.SUNDAY);
-
-        cal.set(Calendar.YEAR, year);
-        cal.set(Calendar.WEEK_OF_YEAR, week);
-
-        cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
-        String beginDate = sdf.format(cal.getTime());
-        cal.add(Calendar.DAY_OF_WEEK, 6);
-        String endDate = sdf.format(cal.getTime());
-        return beginDate + "~" + endDate;
-    }
-
-    /**
-     * 根据具体年的周数算出日期范围
-     * @param weekDays '%Y%u'  202106
-     * @return MM-dd/MM-dd
-     */
-    public static String getWeekDays(String weekDays) {
-        int weekDaysLength = weekDays.length();
-        int year = 0;
-        int week = 0;
-        String resultDay = "";
-        if (weekDays==null){
-            weekDays=new Date().toString();
-        }else {
-            if (weekDays.substring(weekDaysLength-2,weekDaysLength-1).equals("1")){
-                year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2));
-                week = Integer.parseInt(weekDays.substring(weekDaysLength-2,weekDaysLength));
-            }else {
-                year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2));
-                week = Integer.parseInt(weekDays.substring(weekDaysLength-1,weekDaysLength));
-            }
-        }
-        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
-        Calendar cal = Calendar.getInstance();
-        // 设置每周的开始日期
-        cal.setFirstDayOfWeek(Calendar.SUNDAY);
-        cal.set(Calendar.YEAR, year);
-        cal.set(Calendar.WEEK_OF_YEAR, week);
-        cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
-        String beginDate = sdf.format(cal.getTime());
-        cal.add(Calendar.DAY_OF_WEEK, 6);
-        String endDate = sdf.format(cal.getTime());
-        return beginDate + "/" + endDate;
-    }
-
-    /**
-     * 时间戳转换成日期格式字符串
-     * @param seconds 精确到秒的字符串
-     * @return
-     */
-    public static String timeStamp2Date(String seconds,String format) {
-        if(seconds == null || seconds.isEmpty() || seconds.equals("null")){
-            return "";
-        }
-        if(format == null || format.isEmpty()){
-            format = "yyyy-MM-dd HH:mm:ss";
-        }
-        SimpleDateFormat sdf = new SimpleDateFormat(format);
-        return sdf.format(new Date(Long.valueOf(seconds+"000")));
-    }
-
-
-
-}
diff --git a/src/main/java/com/nq/utils/UserPointUtil.java b/src/main/java/com/nq/utils/UserPointUtil.java
new file mode 100644
index 0000000..0e1b2a8
--- /dev/null
+++ b/src/main/java/com/nq/utils/UserPointUtil.java
@@ -0,0 +1,91 @@
+package com.nq.utils;
+
+
+import com.nq.pojo.UserPosition;
+import com.nq.vo.position.PositionProfitVO;
+import com.nq.vo.position.UserPositionVO;
+
+import java.math.BigDecimal;
+
+/**
+ * 仓位计算工具类
+ * */
+public class UserPointUtil {
+
+
+    /**
+     * 返回当前 仓位表 实时数据
+     * */
+    public  static  UserPositionVO assembleUserPositionVO(UserPosition position,BigDecimal nowPrice) {
+        UserPositionVO userPositionVO = new UserPositionVO();
+
+        userPositionVO.setId(position.getId());
+        userPositionVO.setPositionType(position.getPositionType());
+        userPositionVO.setPositionSn(position.getPositionSn());
+        userPositionVO.setUserId(position.getUserId());
+        userPositionVO.setNickName(position.getNickName());
+        userPositionVO.setAgentId(position.getAgentId());
+        userPositionVO.setStockName(position.getStockName());
+        userPositionVO.setStockCode(position.getStockCode());
+        userPositionVO.setStockGid(position.getStockGid());
+        userPositionVO.setStockSpell(position.getStockSpell());
+        userPositionVO.setBuyOrderId(position.getBuyOrderId());
+        userPositionVO.setBuyOrderTime(position.getBuyOrderTime());
+        userPositionVO.setBuyOrderPrice(position.getBuyOrderPrice());
+        userPositionVO.setSellOrderId(position.getSellOrderId());
+        userPositionVO.setSellOrderTime(position.getSellOrderTime());
+        userPositionVO.setSellOrderPrice(position.getSellOrderPrice());
+        userPositionVO.setProfitTargetPrice(position.getProfitTargetPrice());
+        userPositionVO.setStopTargetPrice(position.getStopTargetPrice());
+        userPositionVO.setOrderDirection(position.getOrderDirection());
+        userPositionVO.setOrderNum(position.getOrderNum());
+        userPositionVO.setOrderLever(position.getOrderLever());
+        userPositionVO.setOrderTotalPrice(position.getOrderTotalPrice());
+        userPositionVO.setOrderFee(position.getOrderFee());
+        userPositionVO.setOrderSpread(position.getOrderSpread());
+        userPositionVO.setOrderStayFee(position.getOrderStayFee());
+        userPositionVO.setOrderStayDays(position.getOrderStayDays());
+        userPositionVO.setMarginAdd(position.getMarginAdd());
+        userPositionVO.setStockPlate(position.getStockPlate());
+        userPositionVO.setSpreadRatePrice(position.getSpreadRatePrice());
+        PositionProfitVO positionProfitVO = getPositionProfitVO(position,nowPrice);
+       BigDecimal ss =  positionProfitVO.getProfitAndLose().divide(userPositionVO.getBuyOrderPrice(),BigDecimal.ROUND_CEILING)
+               .multiply(new BigDecimal(100));
+        userPositionVO.setProfitAndLoseParent(ss+"%");
+        userPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
+        userPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
+        userPositionVO.setNow_price(positionProfitVO.getNowPrice());
+        return userPositionVO;
+    }
+
+    /**
+     * 计算仓位盈亏计算方法
+     * */
+    public static PositionProfitVO getPositionProfitVO(UserPosition position,BigDecimal nowPrice) {
+        BigDecimal profitAndLose = new BigDecimal("0");
+        BigDecimal allProfitAndLose = new BigDecimal("0");
+
+        if (position.getSellOrderId() != null) {
+
+            BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
+            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
+            if ("买跌".equals(position.getOrderDirection())) {
+                profitAndLose = profitAndLose.negate();
+            }
+            allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
+        } else {
+            BigDecimal subPrice = nowPrice.subtract(position.getBuyOrderPrice());
+            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
+            if ("买跌".equals(position.getOrderDirection())) {
+                profitAndLose = profitAndLose.negate();
+            }
+            //总盈亏= 浮动盈亏 – 手续费 – 印花税 – 留仓费 – 点差费
+            allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
+        }
+        PositionProfitVO positionProfitVO = new PositionProfitVO();
+        positionProfitVO.setProfitAndLose(profitAndLose);
+        positionProfitVO.setAllProfitAndLose(allProfitAndLose);
+        positionProfitVO.setNowPrice(nowPrice.setScale(5,BigDecimal.ROUND_UP).toString());
+        return positionProfitVO;
+    }
+}
diff --git a/src/main/java/com/nq/utils/email/CodeUtil.java b/src/main/java/com/nq/utils/email/CodeUtil.java
index 177119e..df7d725 100644
--- a/src/main/java/com/nq/utils/email/CodeUtil.java
+++ b/src/main/java/com/nq/utils/email/CodeUtil.java
@@ -24,8 +24,8 @@
     }
 
     // 验证验证码是否正确
-    public boolean verifyCode( String code) {
-        String key = KEY_PREFIX+code;
+    public boolean verifyCode(String userId, String code, String key) {
+        key = key + userId;
         String storedCode = redisTemplate.opsForValue().get(key);
         return code.equals(storedCode);
     }
diff --git a/src/main/java/com/nq/utils/email/EmailUtil.java b/src/main/java/com/nq/utils/email/EmailUtil.java
index 1119579..26ab750 100644
--- a/src/main/java/com/nq/utils/email/EmailUtil.java
+++ b/src/main/java/com/nq/utils/email/EmailUtil.java
@@ -47,6 +47,7 @@
         message.setSubject(subject);
         //邮件内容
         message.setText(content);
+        log.info("------>邮件内容"+message.toString());
         //发送邮件
         mailSender.send(message);
     }
diff --git a/src/main/java/com/nq/utils/http/HttpRequest.java b/src/main/java/com/nq/utils/http/HttpRequest.java
index bbaa265..409d7b0 100644
--- a/src/main/java/com/nq/utils/http/HttpRequest.java
+++ b/src/main/java/com/nq/utils/http/HttpRequest.java
@@ -86,13 +86,10 @@
         String tempLine = null;
 
         if (httpURLConnection.getResponseCode() >= 300) {
-            throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection
-                    .getResponseCode());
         }
         try {
             inputStream = httpURLConnection.getInputStream();
             inputStreamReader = new InputStreamReader(inputStream);
-            //reader = new BufferedReader(inputStreamReader);
             reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
 
             while ((tempLine = reader.readLine()) != null) {
diff --git a/src/main/java/com/nq/utils/redis/RedisKeyConstant.java b/src/main/java/com/nq/utils/redis/RedisKeyConstant.java
index 4fe11e6..631638e 100644
--- a/src/main/java/com/nq/utils/redis/RedisKeyConstant.java
+++ b/src/main/java/com/nq/utils/redis/RedisKeyConstant.java
@@ -25,5 +25,8 @@
      * */
     public static final String RK_COMPANY_INFO = "rk_company_info";
 
-
+    /**
+     * 短信验证码
+     * */
+    public static final String SMS_CODE = "SMS_CODE_";
 }
diff --git a/src/main/java/com/nq/utils/stock/sina/StockApi.java b/src/main/java/com/nq/utils/stock/sina/StockApi.java
index 758dab8..f9f6dd5 100644
--- a/src/main/java/com/nq/utils/stock/sina/StockApi.java
+++ b/src/main/java/com/nq/utils/stock/sina/StockApi.java
@@ -59,15 +59,6 @@
                 stockListVO.setGid(stock.getStockGid().toUpperCase());
                 stockListVO.setStock_plate(stock.getStockPlate());
                 stockListVO.setStock_type(stock.getStockType());
-                stockListVO.setNewStockType(stock.getType());
-                if(null != stock.getPrice()){
-                    stockListVO.setNowPrice(stock.getPrice().toString());
-                }
-                stockListVO.setSubscribeTime(stock.getSubscribeTime());
-                stockListVO.setSubscriptionTime(stock.getSubscriptionTime());
-                stockListVO.setListDate(stock.getListDate());
-                stockListVO.setOrderNumber(stock.getOrderNumber());
-                stockListVO.setOrderMinNumber(stock.getOrderMinNumber());
                 stockListVOs.add(stockListVO);
             }
 
@@ -91,7 +82,15 @@
         StockListVO stockListVO = new StockListVO();
         try {
             StockRealTimeBean realTimeStock = RedisKeyUtil.getCacheRealTimeStock(stock);
-            stockListVO.setHcrate(new BigDecimal(realTimeStock.getPcp().replace("%", "")));
+
+            stockListVO.setHcrate(new BigDecimal(realTimeStock.getPcp()));
+            stockListVO.setHcrateP(realTimeStock.getPcp()+"%");
+            if(realTimeStock.getPcp().contains("-")){
+                stockListVO.setColor(0);
+            }else{
+                stockListVO.setColor(1);
+            }
+
             stockListVO.setNowPrice(realTimeStock.getLast());
             stockListVO.setToday_max(realTimeStock.getHigh());
             stockListVO.setToday_min(realTimeStock.getLow());
@@ -110,8 +109,6 @@
 
             return null;
         }
-
-
         return stockListVO;
     }
 
@@ -123,8 +120,6 @@
         }
         try {
             StockRealTimeBean qhBean = RedisKeyUtil.getCacheRealTimeStock(stock);
-
-
             stockListVO.setHcrate(qhBean.getPcp());
             stockListVO.setNowPrice(qhBean.getLast());
             stockListVO.setToday_max(qhBean.getHigh());
diff --git a/src/main/java/com/nq/utils/task/YEBTask.java b/src/main/java/com/nq/utils/task/YEBTask.java
index 11e0aa4..cbef6d8 100644
--- a/src/main/java/com/nq/utils/task/YEBTask.java
+++ b/src/main/java/com/nq/utils/task/YEBTask.java
@@ -21,7 +21,7 @@
     /**
      * 余额宝发放利息
      * */
-    @Scheduled(cron = "0 0 0/1 * * ?")
+//    @Scheduled(cron = "0 0 0/1 * * ?")
     public  void  sendYEBMoney(){
         echoServices.sendMoney();
     }
diff --git a/src/main/java/com/nq/utils/task/news/NewsTask.java b/src/main/java/com/nq/utils/task/news/NewsTask.java
index 5066e84..ba80a08 100644
--- a/src/main/java/com/nq/utils/task/news/NewsTask.java
+++ b/src/main/java/com/nq/utils/task/news/NewsTask.java
@@ -23,7 +23,7 @@
     /*
     * 新聞資訊抓取
     * */
-    @Scheduled(cron = "0/5 * * * * ?")
+    @Scheduled(cron = "0 0/30 * * * ?")
     public void NewsInfoTask() {
         this.iSiteNewsService.grabNews();
 
diff --git a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
deleted file mode 100644
index cf8d854..0000000
--- a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.nq.utils.task.stock;
-
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.nq.dao.StockSubscribeMapper;
-import com.nq.dao.UserMapper;
-import com.nq.dao.UserStockSubscribeMapper;
-import com.nq.pojo.StockSubscribe;
-import com.nq.pojo.User;
-import com.nq.pojo.UserStockSubscribe;
-import com.nq.service.IUserPositionService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.http.client.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.stream.Collectors;
-
-/**
- * @program: dabao
- * @description:
- * @create: 2024-04-01 17:32
- **/
-@Component
-@Slf4j
-public class CarryPositionTask {
-
-
-    @Autowired
-    UserStockSubscribeMapper userStockSubscribeMapper;
-
-    @Autowired
-    IUserPositionService iUserPositionService;
-
-    @Autowired
-    StockSubscribeMapper stockSubscribeMapper;
-
-    @Autowired
-    UserMapper userMapper;
-
-    private final Lock ballotLock = new ReentrantLock();
-
-    @Scheduled(cron = "0 0/30 * * * ?")
-    public void ballot() {
-        if (ballotLock.tryLock()) {
-            try {
-                log.info("新股上市转持仓定时任务--------->开始");
-                List<StockSubscribe> stockSubscribes = stockSubscribeMapper.selectList(new LambdaQueryWrapper<StockSubscribe>()
-                        .lt(StockSubscribe::getListDate, DateUtil.date()));
-                if (CollectionUtils.isNotEmpty(stockSubscribes)) {
-                    List<String> codeList = stockSubscribes.stream().map(StockSubscribe::getCode).collect(Collectors.toList());
-                    List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>()
-                            .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList));
-                    //订单转持仓
-                    userStockSubscribes.forEach(f -> {
-                        iUserPositionService.newStockToPosition(f.getId());//转持仓
-                        f.setStatus(5);
-                        userStockSubscribeMapper.updateById(f);
-                    });
-                }
-                log.info("新股上市转持仓定时任务--------->结束");
-            } catch (Exception e) {
-                log.error("新股上市转持仓定时任务发生异常", e);
-            } finally {
-                ballotLock.unlock();
-            }
-        } else {
-            log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略");
-        }
-    }
-
-}
diff --git a/src/main/java/com/nq/utils/task/stock/StockTask.java b/src/main/java/com/nq/utils/task/stock/StockTask.java
index d380e21..8bacf30 100644
--- a/src/main/java/com/nq/utils/task/stock/StockTask.java
+++ b/src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -1,15 +1,23 @@
 package com.nq.utils.task.stock;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.google.gson.Gson;
+import com.nq.common.ServerResponse;
 import com.nq.dao.*;
 import com.nq.enums.EStockType;
 import com.nq.pojo.*;
 import com.nq.service.IMandatoryLiquidationService;
 import com.nq.service.IStockService;
+import com.nq.service.IUserAssetsServices;
+import com.nq.service.IUserPositionService;
 import com.nq.utils.http.HttpClientRequest;
 import com.nq.utils.redis.RedisKeyUtil;
+import com.nq.utils.redis.RedisShardedPoolUtils;
 import com.nq.utils.stock.BuyAndSellUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -21,6 +29,9 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
 
 
 @Component
@@ -30,34 +41,46 @@
     @Autowired
     StockMapper stockMapper;
 
+    @Autowired
+    IUserPositionService userPositionService;
+
+    @Autowired
+    UserPositionMapper userPositionMapper;
 
     @Autowired
     IMandatoryLiquidationService mandatoryLiquidationService;
 
+    @Autowired
+    UserStockSubscribeMapper userStockSubscribeMapper;
+
+
+    @Autowired
+    StockSubscribeMapper stockSubscribeMapper;
+
+    @Autowired
+    IUserPositionService iUserPositionService;
+
+
+    @Autowired
+    IUserAssetsServices userAssetsServices;
+
+    private final Lock ballotLock = new ReentrantLock();
+
+    private final Lock subscriptionLock = new ReentrantLock();
+
+    private final Lock stockConstraintLock = new ReentrantLock();
 
 
     private static final Logger log = LoggerFactory.getLogger(StockTask.class);
-
-    public void time(boolean am, boolean pm) {
-        am = false;
-        pm = false;
-        try {
-            am = BuyAndSellUtils.isTransTime("9:29", "11:31");
-            pm = BuyAndSellUtils.isTransTime("12:59", "15:00");
-        } catch (Exception e) {
-            log.error("= {}", e);
-        }
-        log.info("am = {}  pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm));
-    }
 
 
     /**
      * 同步系统所需要的股票
      * */
-    @Scheduled(cron = "0 0/3 *  * * ?")
+    @Scheduled(cron = "0 0 0/2  * * ?")
     public void syncINStockData() {
-        loadAllStock(EStockType.US);
-        loadAllStock(EStockType.MAS);
+        loadAllStock(EStockType.IN);
+//        loadAllStock(EStockType.HK);
     }
 
 
@@ -66,7 +89,7 @@
     /**
      * 同步美国股票
      * */
-    @Scheduled(cron = "0 0/30 * * * ?")
+//    @Scheduled(cron = "0 0/30 * * * ?")
     public  void loadStockCompanies(){
         loadAllCompanies();
     }
@@ -128,16 +151,27 @@
                     }else{
                         stock.setStockGid(o.getType());
                     }
-                    if(eStockType.getCode().equals("US")){
-                        stock.setStockSpell(o.getSymbol());
-                    }else{
-                        stock.setStockSpell(o.getTicker());
-                    }
+                    stock.setStockSpell(o.getSymbol());
                     stock.setIsLock(0);
                     stock.setIsShow(0);
                     stock.setDataBase(0);
                     stock.setAddTime(new Date());
                     stockMapper.insert1(stock);
+                }else{
+                    stock.setStockCode(o.getId());
+                    stock.setStockName(o.getName());
+                    stock.setStockType(eStockType.getCode());
+                    if(o.getType() == null){
+                        stock.setStockGid(eStockType.getCode());
+                    }else{
+                        stock.setStockGid(o.getType());
+                    }
+                    stock.setStockSpell(o.getSymbol());
+                    stock.setIsLock(0);
+                    stock.setIsShow(0);
+                    stock.setDataBase(0);
+                    stock.setAddTime(new Date());
+                    stockMapper.updateById(stock);
                 }
                 RedisKeyUtil.setCaCheKeyBaseStock(eStockType,o);
             }
@@ -148,38 +182,86 @@
         }
     }
 
-
-
-
-    /***
-     * 每3分钟同步一次数据源到数据库
-     *
-     */
-    @Scheduled(cron = "0 0/30 * * * ?")
-    public  void  sysnInstockData(){
-        QueryWrapper<Stock>  queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("stock_type",EStockType.SZHB.getCode());
-        List<Stock> stockList = stockMapper.selectList(queryWrapper);
-        for (int i = 0; i < stockList.size(); i++) {
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public void ballot() {
+        if (ballotLock.tryLock()) {
             try {
-                String hdataString =  HttpClientRequest.doGet(EStockType.SZHB.stockUrl+"market/detail?symbol="+stockList.get(i).getStockCode());
-                HBData hbData = new Gson().fromJson(hdataString,HBData.class);
-                StockRealTimeBean stockRealTimeBean = new StockRealTimeBean();
-                stockRealTimeBean.setLast(hbData.getTick().getClose()+"");
-                stockRealTimeBean.setHigh(hbData.getTick().getHigh()+"");
-                stockRealTimeBean.setPid(stockList.get(i).getStockCode());
-                stockRealTimeBean.setLow(hbData.getTick().getLow()+"");
-                stockRealTimeBean.setBid(hbData.getTick().getOpen()+"");
-                stockRealTimeBean.setLast_close("0.00");
-                 BigDecimal sss =  (new BigDecimal(hbData.getTick().getClose()).subtract(new BigDecimal(hbData.getTick().getOpen())));
-                       sss = sss.divide(new BigDecimal(hbData.getTick().getOpen()),BigDecimal.ROUND_CEILING);
-                stockRealTimeBean.setPcp(sss.setScale(2,BigDecimal.ROUND_UP).toString());
-                mandatoryLiquidationService.RealTimeDataProcess(EStockType.SZHB,stockRealTimeBean);
-            }catch (Exception e){
-
+                log.info("新股上市转持仓定时任务--------->开始");
+                List<StockSubscribe> stockSubscribes = stockSubscribeMapper.selectList(new LambdaQueryWrapper<StockSubscribe>()
+                        .lt(StockSubscribe::getListDate, DateUtil.date()));
+                if (CollectionUtils.isNotEmpty(stockSubscribes)) {
+                    List<String> codeList = stockSubscribes.stream().map(StockSubscribe::getCode).collect(Collectors.toList());
+                    List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>()
+                            .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList));
+                    //订单转持仓
+                    userStockSubscribes.forEach(f -> {
+                        ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId());//转持仓
+                        if(serverResponse.isSuccess()){
+                            f.setStatus(5);
+                            userStockSubscribeMapper.updateById(f);
+                        }else{
+                            log.info("新股上市转持仓失败申购订单id:"+f.getId()+",失败原因:"+serverResponse.getMsg());
+                        }
+                    });
+                }
+                log.info("新股上市转持仓定时任务--------->结束");
+            } catch (Exception e) {
+                log.error("新股上市转持仓定时任务发生异常", e);
+            } finally {
+                ballotLock.unlock();
             }
-
+        } else {
+            log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略");
         }
+    }
 
+//    @Scheduled(cron = "0/5 * * * * ?")
+//    public void subscription() {
+//        if (subscriptionLock.tryLock()) {
+//            try {
+//                log.info("自动转已认缴--------->开始");
+//                List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>()
+//                        .eq(UserStockSubscribe::getStatus, 3));
+//                userStockSubscribes.forEach(f->{
+//                    Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, f.getNewCode()));
+//                    UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId(stock.getStockType(),f.getUserId());
+//                    if(null != userAssets && userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) == 0){
+//                        f.setStatus(4);
+//                        userStockSubscribeMapper.updateById(f);
+//                    }
+//                });
+//                log.info("自动转已认缴--------->结束");
+//            } catch (Exception e) {
+//                log.error("自动转已认缴定时任务发生异常", e);
+//            } finally {
+//                subscriptionLock.unlock();
+//            }
+//        } else {
+//            log.info("自动转已认缴定时任务--------->上次任务还未执行完成,本次任务忽略");
+//        }
+//    }
+
+    /**
+     * 强制平仓
+     */
+//    @Scheduled(cron = "0/1 * * * * ?")
+    public void stockConstraint(){
+        if (stockConstraintLock.tryLock()) {
+            log.info("强制平仓任务:--------->开始");
+            try {
+                List<UserPosition> userPositions = userPositionMapper.selectList(new LambdaQueryWrapper<UserPosition>().isNull(UserPosition::getSellOrderId));
+                if(CollectionUtils.isNotEmpty(userPositions)){
+                    userPositionService.stockConstraint(userPositions);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("强制平仓任务错误:" + e.getMessage());
+            } finally {
+                stockConstraintLock.unlock();
+                log.info("强制平仓任务:--------->结束");
+            }
+        } else {
+            log.info("强制平仓任务--------->上次任务还未执行完成,本次任务忽略");
+        }
     }
 }
diff --git a/src/main/java/com/nq/utils/timeutil/TimeUtil.java b/src/main/java/com/nq/utils/timeutil/TimeUtil.java
new file mode 100644
index 0000000..b87dc8b
--- /dev/null
+++ b/src/main/java/com/nq/utils/timeutil/TimeUtil.java
@@ -0,0 +1,43 @@
+package com.nq.utils.timeutil;
+
+import java.time.LocalTime;
+
+public class TimeUtil {
+
+    public static  boolean isTradingHour(String amStartTime,String amEndTime,String pmStartTime,String pmEndTime){
+        LocalTime now = LocalTime.now();
+        LocalTime amTime = LocalTime.parse(amStartTime);
+        LocalTime amTime1 = LocalTime.parse(amEndTime);
+        LocalTime pmTime = LocalTime.parse(pmStartTime);
+        LocalTime pmTime1 = LocalTime.parse(pmEndTime);
+
+        if(now.isAfter(amTime) && now.isBefore(amTime1)){
+            return true;
+        }
+
+
+        if(now.isAfter(pmTime) && now.isBefore(pmTime1)){
+            return true;
+        }
+        return false;
+    }
+
+
+    public static  boolean isTradingHour(String amStartTime,String amEndTime){
+        LocalTime now = LocalTime.now();
+        LocalTime amTime = LocalTime.parse(amStartTime);
+        LocalTime amTime1 = LocalTime.parse(amEndTime);
+
+        if(now.isAfter(amTime) && now.isBefore(amTime1)){
+            return true;
+        }
+
+        return false;
+    }
+
+
+//    public static void main(String[] args) {
+//        System.out.println(isTradingHour("00:15","12:00","12:00","24:00"));
+//    }
+
+}
diff --git a/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java b/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java
index 752c8b9..a9728d9 100644
--- a/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java
+++ b/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java
@@ -74,7 +74,7 @@
      * 谷歌翻译 传string 反string
      */
 
-    public String translate(String content,String lang) throws Exception {
+    public String translate(String content,String lang)   {
         StringBuilder result = new StringBuilder();
         if (content.length() > 1000) {
             int size = content.length() /1000 ;
diff --git a/src/main/java/com/nq/vo/agent/AgentUserListVO.java b/src/main/java/com/nq/vo/agent/AgentUserListVO.java
index 383733e..6a2f2aa 100644
--- a/src/main/java/com/nq/vo/agent/AgentUserListVO.java
+++ b/src/main/java/com/nq/vo/agent/AgentUserListVO.java
@@ -1,8 +1,10 @@
 
 package com.nq.vo.agent;
 
-import java.math.BigDecimal;
+import lombok.Data;
 
+import java.math.BigDecimal;
+@Data
 public class AgentUserListVO {
     private Integer id;
     private Integer agentId;
@@ -28,7 +30,8 @@
     private String bankNo;
 
     private String bankAddress;
-
+    private String img1Key;
+    private String img2Key;
 
     public void setId(Integer id) {
         this.id = id;
diff --git a/src/main/java/com/nq/vo/agent/AgentUserNodeVO.java b/src/main/java/com/nq/vo/agent/AgentUserNodeVO.java
new file mode 100644
index 0000000..fe3f563
--- /dev/null
+++ b/src/main/java/com/nq/vo/agent/AgentUserNodeVO.java
@@ -0,0 +1,64 @@
+package com.nq.vo.agent;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: dabao
+ * @description:
+ * @create: 2024-05-21 11:00
+ **/
+@Data
+public class AgentUserNodeVO {
+
+    private Integer id;
+    private String agentName;
+    private String agentPwd;
+    private String agentRealName;
+    private String agentPhone;
+    private String agentCode;
+    private Date addTime;
+    private Integer isLock;
+    private Integer parentId;
+    private String parentName;
+    //代理级别
+    private Integer agentLevel;
+    /**
+     * 手续费比例
+     */
+    private BigDecimal poundageScale;
+
+    /**
+     * 递延费比例
+     */
+    private BigDecimal deferredFeesScale;
+
+    /**
+     * 分红比例
+     */
+    private BigDecimal receiveDividendsScale;
+
+    /**
+     * 总资金
+     */
+    private BigDecimal totalMoney;
+
+    /**
+     * 杠杆倍数,多个用/分割
+     */
+    private String siteLever;
+
+    /**
+     * 在先客服
+     * */
+    private String onLineServices;
+
+    /**
+     * 子节点
+     */
+    private List<AgentUserNodeVO> childList;
+
+}
diff --git a/src/main/java/com/nq/vo/position/UserPositionVO.java b/src/main/java/com/nq/vo/position/UserPositionVO.java
index bca7850..b0bd3f0 100644
--- a/src/main/java/com/nq/vo/position/UserPositionVO.java
+++ b/src/main/java/com/nq/vo/position/UserPositionVO.java
@@ -1,9 +1,12 @@
 
 package com.nq.vo.position;
 
+import lombok.Data;
+
 import java.math.BigDecimal;
 import java.util.Date;
 
+@Data
 public class UserPositionVO {
     private Integer id;
     private Integer positionType;
@@ -56,447 +59,8 @@
     /*追加保证金额*/
     private BigDecimal marginAdd;
 
-    public void setPositionType(Integer positionType) {
-        this.positionType = positionType;
-    }
-
-    public void setPositionSn(String positionSn) {
-        this.positionSn = positionSn;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public void setNickName(String nickName) {
-        this.nickName = nickName;
-    }
-
-    public void setAgentId(Integer agentId) {
-        this.agentId = agentId;
-    }
-
-    public void setStockName(String stockName) {
-        this.stockName = stockName;
-    }
-
-    public void setStockCode(String stockCode) {
-        this.stockCode = stockCode;
-    }
-
-    public void setStockGid(String stockGid) {
-        this.stockGid = stockGid;
-    }
-
-    public void setStockSpell(String stockSpell) {
-        this.stockSpell = stockSpell;
-    }
-
-    public void setBuyOrderId(String buyOrderId) {
-        this.buyOrderId = buyOrderId;
-    }
-
-    public void setBuyOrderTime(Date buyOrderTime) {
-        this.buyOrderTime = buyOrderTime;
-    }
-
-    public void setBuyOrderPrice(BigDecimal buyOrderPrice) {
-        this.buyOrderPrice = buyOrderPrice;
-    }
-
-    public void setSellOrderId(String sellOrderId) {
-        this.sellOrderId = sellOrderId;
-    }
-
-    public void setSellOrderTime(Date sellOrderTime) {
-        this.sellOrderTime = sellOrderTime;
-    }
-
-    public void setSellOrderPrice(BigDecimal sellOrderPrice) {
-        this.sellOrderPrice = sellOrderPrice;
-    }
-
-    public void setProfitTargetPrice(BigDecimal profitTargetPrice) {
-        this.profitTargetPrice = profitTargetPrice;
-    }
-
-    public void setStopTargetPrice(BigDecimal stopTargetPrice) {
-        this.stopTargetPrice = stopTargetPrice;
-    }
-
-    public void setOrderDirection(String orderDirection) {
-        this.orderDirection = orderDirection;
-    }
-
-    public void setOrderNum(Integer orderNum) {
-        this.orderNum = orderNum;
-    }
-
-    public void setOrderLever(Integer orderLever) {
-        this.orderLever = orderLever;
-    }
-
-    public void setOrderTotalPrice(BigDecimal orderTotalPrice) {
-        this.orderTotalPrice = orderTotalPrice;
-    }
-
-    public void setOrderFee(BigDecimal orderFee) {
-        this.orderFee = orderFee;
-    }
-
-    public void setOrderSpread(BigDecimal orderSpread) {
-        this.orderSpread = orderSpread;
-    }
-
-    public void setOrderStayFee(BigDecimal orderStayFee) {
-        this.orderStayFee = orderStayFee;
-    }
-
-    public void setOrderStayDays(Integer orderStayDays) {
-        this.orderStayDays = orderStayDays;
-    }
-
-    public void setProfitAndLose(BigDecimal profitAndLose) {
-        this.profitAndLose = profitAndLose;
-    }
-
-    public void setAllProfitAndLose(BigDecimal allProfitAndLose) {
-        this.allProfitAndLose = allProfitAndLose;
-    }
-
-    public void setNow_price(String now_price) {
-        this.now_price = now_price;
-    }
-
-    public void setStockPlate(String stockPlate) {
-        this.stockPlate = stockPlate;
-    }
-
-    public boolean equals(Object o) {
-        if (o == this) return true;
-        if (!(o instanceof UserPositionVO)) return false;
-        UserPositionVO other = (UserPositionVO) o;
-        if (!other.canEqual(this)) return false;
-        Object this$id = getId(), other$id = other.getId();
-        if ((this$id == null) ? (other$id != null) : !this$id.equals(other$id)) return false;
-        Object this$positionType = getPositionType(), other$positionType = other.getPositionType();
-        if ((this$positionType == null) ? (other$positionType != null) : !this$positionType.equals(other$positionType))
-            return false;
-        Object this$positionSn = getPositionSn(), other$positionSn = other.getPositionSn();
-        if ((this$positionSn == null) ? (other$positionSn != null) : !this$positionSn.equals(other$positionSn))
-            return false;
-        Object this$userId = getUserId(), other$userId = other.getUserId();
-        if ((this$userId == null) ? (other$userId != null) : !this$userId.equals(other$userId)) return false;
-        Object this$nickName = getNickName(), other$nickName = other.getNickName();
-        if ((this$nickName == null) ? (other$nickName != null) : !this$nickName.equals(other$nickName)) return false;
-        Object this$agentId = getAgentId(), other$agentId = other.getAgentId();
-        if ((this$agentId == null) ? (other$agentId != null) : !this$agentId.equals(other$agentId)) return false;
-        Object this$stockName = getStockName(), other$stockName = other.getStockName();
-        if ((this$stockName == null) ? (other$stockName != null) : !this$stockName.equals(other$stockName))
-            return false;
-        Object this$stockCode = getStockCode(), other$stockCode = other.getStockCode();
-        if ((this$stockCode == null) ? (other$stockCode != null) : !this$stockCode.equals(other$stockCode))
-            return false;
-        Object this$stockGid = getStockGid(), other$stockGid = other.getStockGid();
-        if ((this$stockGid == null) ? (other$stockGid != null) : !this$stockGid.equals(other$stockGid)) return false;
-        Object this$stockSpell = getStockSpell(), other$stockSpell = other.getStockSpell();
-        if ((this$stockSpell == null) ? (other$stockSpell != null) : !this$stockSpell.equals(other$stockSpell))
-            return false;
-        Object this$buyOrderId = getBuyOrderId(), other$buyOrderId = other.getBuyOrderId();
-        if ((this$buyOrderId == null) ? (other$buyOrderId != null) : !this$buyOrderId.equals(other$buyOrderId))
-            return false;
-        Object this$buyOrderTime = getBuyOrderTime(), other$buyOrderTime = other.getBuyOrderTime();
-        if ((this$buyOrderTime == null) ? (other$buyOrderTime != null) : !this$buyOrderTime.equals(other$buyOrderTime))
-            return false;
-        Object this$buyOrderPrice = getBuyOrderPrice(), other$buyOrderPrice = other.getBuyOrderPrice();
-        if ((this$buyOrderPrice == null) ? (other$buyOrderPrice != null) : !this$buyOrderPrice.equals(other$buyOrderPrice))
-            return false;
-        Object this$sellOrderId = getSellOrderId(), other$sellOrderId = other.getSellOrderId();
-        if ((this$sellOrderId == null) ? (other$sellOrderId != null) : !this$sellOrderId.equals(other$sellOrderId))
-            return false;
-        Object this$sellOrderTime = getSellOrderTime(), other$sellOrderTime = other.getSellOrderTime();
-        if ((this$sellOrderTime == null) ? (other$sellOrderTime != null) : !this$sellOrderTime.equals(other$sellOrderTime))
-            return false;
-        Object this$sellOrderPrice = getSellOrderPrice(), other$sellOrderPrice = other.getSellOrderPrice();
-        if ((this$sellOrderPrice == null) ? (other$sellOrderPrice != null) : !this$sellOrderPrice.equals(other$sellOrderPrice))
-            return false;
-        Object this$profitTargetPrice = getProfitTargetPrice(), other$profitTargetPrice = other.getProfitTargetPrice();
-        if ((this$profitTargetPrice == null) ? (other$profitTargetPrice != null) : !this$profitTargetPrice.equals(other$profitTargetPrice))
-            return false;
-        Object this$stopTargetPrice = getStopTargetPrice(), other$stopTargetPrice = other.getStopTargetPrice();
-        if ((this$stopTargetPrice == null) ? (other$stopTargetPrice != null) : !this$stopTargetPrice.equals(other$stopTargetPrice))
-            return false;
-        Object this$orderDirection = getOrderDirection(), other$orderDirection = other.getOrderDirection();
-        if ((this$orderDirection == null) ? (other$orderDirection != null) : !this$orderDirection.equals(other$orderDirection))
-            return false;
-        Object this$orderNum = getOrderNum(), other$orderNum = other.getOrderNum();
-        if ((this$orderNum == null) ? (other$orderNum != null) : !this$orderNum.equals(other$orderNum)) return false;
-        Object this$orderLever = getOrderLever(), other$orderLever = other.getOrderLever();
-        if ((this$orderLever == null) ? (other$orderLever != null) : !this$orderLever.equals(other$orderLever))
-            return false;
-        Object this$orderTotalPrice = getOrderTotalPrice(), other$orderTotalPrice = other.getOrderTotalPrice();
-        if ((this$orderTotalPrice == null) ? (other$orderTotalPrice != null) : !this$orderTotalPrice.equals(other$orderTotalPrice))
-            return false;
-        Object this$orderFee = getOrderFee(), other$orderFee = other.getOrderFee();
-        if ((this$orderFee == null) ? (other$orderFee != null) : !this$orderFee.equals(other$orderFee)) return false;
-        Object this$orderSpread = getOrderSpread(), other$orderSpread = other.getOrderSpread();
-        if ((this$orderSpread == null) ? (other$orderSpread != null) : !this$orderSpread.equals(other$orderSpread))
-            return false;
-        Object this$orderStayFee = getOrderStayFee(), other$orderStayFee = other.getOrderStayFee();
-        if ((this$orderStayFee == null) ? (other$orderStayFee != null) : !this$orderStayFee.equals(other$orderStayFee))
-            return false;
-        Object this$orderStayDays = getOrderStayDays(), other$orderStayDays = other.getOrderStayDays();
-        if ((this$orderStayDays == null) ? (other$orderStayDays != null) : !this$orderStayDays.equals(other$orderStayDays))
-            return false;
-        Object this$profitAndLose = getProfitAndLose(), other$profitAndLose = other.getProfitAndLose();
-        if ((this$profitAndLose == null) ? (other$profitAndLose != null) : !this$profitAndLose.equals(other$profitAndLose))
-            return false;
-        Object this$allProfitAndLose = getAllProfitAndLose(), other$allProfitAndLose = other.getAllProfitAndLose();
-        if ((this$allProfitAndLose == null) ? (other$allProfitAndLose != null) : !this$allProfitAndLose.equals(other$allProfitAndLose))
-            return false;
-        Object this$now_price = getNow_price(), other$now_price = other.getNow_price();
-        if ((this$now_price == null) ? (other$now_price != null) : !this$now_price.equals(other$now_price))
-            return false;
-        Object this$stockPlate = getStockPlate(), other$stockPlate = other.getStockPlate();
-        return !((this$stockPlate == null) ? (other$stockPlate != null) : !this$stockPlate.equals(other$stockPlate));
-    }
-
-    protected boolean canEqual(Object other) {
-        return other instanceof UserPositionVO;
-    }
-
-    public int hashCode() {
-        int PRIME = 59;
-        int result = 1;
-        Object $id = getId();
-        result = result * 59 + (($id == null) ? 43 : $id.hashCode());
-        Object $positionType = getPositionType();
-        result = result * 59 + (($positionType == null) ? 43 : $positionType.hashCode());
-        Object $positionSn = getPositionSn();
-        result = result * 59 + (($positionSn == null) ? 43 : $positionSn.hashCode());
-        Object $userId = getUserId();
-        result = result * 59 + (($userId == null) ? 43 : $userId.hashCode());
-        Object $nickName = getNickName();
-        result = result * 59 + (($nickName == null) ? 43 : $nickName.hashCode());
-        Object $agentId = getAgentId();
-        result = result * 59 + (($agentId == null) ? 43 : $agentId.hashCode());
-        Object $stockName = getStockName();
-        result = result * 59 + (($stockName == null) ? 43 : $stockName.hashCode());
-        Object $stockCode = getStockCode();
-        result = result * 59 + (($stockCode == null) ? 43 : $stockCode.hashCode());
-        Object $stockGid = getStockGid();
-        result = result * 59 + (($stockGid == null) ? 43 : $stockGid.hashCode());
-        Object $stockSpell = getStockSpell();
-        result = result * 59 + (($stockSpell == null) ? 43 : $stockSpell.hashCode());
-        Object $buyOrderId = getBuyOrderId();
-        result = result * 59 + (($buyOrderId == null) ? 43 : $buyOrderId.hashCode());
-        Object $buyOrderTime = getBuyOrderTime();
-        result = result * 59 + (($buyOrderTime == null) ? 43 : $buyOrderTime.hashCode());
-        Object $buyOrderPrice = getBuyOrderPrice();
-        result = result * 59 + (($buyOrderPrice == null) ? 43 : $buyOrderPrice.hashCode());
-        Object $sellOrderId = getSellOrderId();
-        result = result * 59 + (($sellOrderId == null) ? 43 : $sellOrderId.hashCode());
-        Object $sellOrderTime = getSellOrderTime();
-        result = result * 59 + (($sellOrderTime == null) ? 43 : $sellOrderTime.hashCode());
-        Object $sellOrderPrice = getSellOrderPrice();
-        result = result * 59 + (($sellOrderPrice == null) ? 43 : $sellOrderPrice.hashCode());
-        Object $profitTargetPrice = getProfitTargetPrice();
-        result = result * 59 + (($profitTargetPrice == null) ? 43 : $profitTargetPrice.hashCode());
-        Object $stopTargetPrice = getStopTargetPrice();
-        result = result * 59 + (($stopTargetPrice == null) ? 43 : $stopTargetPrice.hashCode());
-        Object $orderDirection = getOrderDirection();
-        result = result * 59 + (($orderDirection == null) ? 43 : $orderDirection.hashCode());
-        Object $orderNum = getOrderNum();
-        result = result * 59 + (($orderNum == null) ? 43 : $orderNum.hashCode());
-        Object $orderLever = getOrderLever();
-        result = result * 59 + (($orderLever == null) ? 43 : $orderLever.hashCode());
-        Object $orderTotalPrice = getOrderTotalPrice();
-        result = result * 59 + (($orderTotalPrice == null) ? 43 : $orderTotalPrice.hashCode());
-        Object $orderFee = getOrderFee();
-        result = result * 59 + (($orderFee == null) ? 43 : $orderFee.hashCode());
-        Object $orderSpread = getOrderSpread();
-        result = result * 59 + (($orderSpread == null) ? 43 : $orderSpread.hashCode());
-        Object $orderStayFee = getOrderStayFee();
-        result = result * 59 + (($orderStayFee == null) ? 43 : $orderStayFee.hashCode());
-        Object $orderStayDays = getOrderStayDays();
-        result = result * 59 + (($orderStayDays == null) ? 43 : $orderStayDays.hashCode());
-        Object $profitAndLose = getProfitAndLose();
-        result = result * 59 + (($profitAndLose == null) ? 43 : $profitAndLose.hashCode());
-        Object $allProfitAndLose = getAllProfitAndLose();
-        result = result * 59 + (($allProfitAndLose == null) ? 43 : $allProfitAndLose.hashCode());
-        Object $now_price = getNow_price();
-        result = result * 59 + (($now_price == null) ? 43 : $now_price.hashCode());
-        Object $stockPlate = getStockPlate();
-        return result * 59 + (($stockPlate == null) ? 43 : $stockPlate.hashCode());
-    }
-
-    public String toString() {
-        return "UserPositionVO(id=" + getId() + ", positionType=" + getPositionType() + ", positionSn=" + getPositionSn() + ", userId=" + getUserId() + ", nickName=" + getNickName() + ", agentId=" + getAgentId() + ", stockName=" + getStockName() + ", stockCode=" + getStockCode() + ", stockGid=" + getStockGid() + ", stockSpell=" + getStockSpell() + ", buyOrderId=" + getBuyOrderId() + ", buyOrderTime=" + getBuyOrderTime() + ", buyOrderPrice=" + getBuyOrderPrice() + ", sellOrderId=" + getSellOrderId() + ", sellOrderTime=" + getSellOrderTime() + ", sellOrderPrice=" + getSellOrderPrice() + ", profitTargetPrice=" + getProfitTargetPrice() + ", stopTargetPrice=" + getStopTargetPrice() + ", orderDirection=" + getOrderDirection() + ", orderNum=" + getOrderNum() + ", orderLever=" + getOrderLever() + ", orderTotalPrice=" + getOrderTotalPrice() + ", orderFee=" + getOrderFee() + ", orderSpread=" + getOrderSpread() + ", orderStayFee=" + getOrderStayFee() + ", orderStayDays=" + getOrderStayDays() + ", profitAndLose=" + getProfitAndLose() + ", allProfitAndLose=" + getAllProfitAndLose() + ", now_price=" + getNow_price() + ", stockPlate=" + getStockPlate() + ", spreadRatePrice=" + getSpreadRatePrice()  + ", marginAdd=" + getMarginAdd() + ")";
-    }
-
-
-    public Integer getId() {
-        return this.id;
-    }
-
-
-    public Integer getPositionType() {
-        return this.positionType;
-    }
-
-
-    public String getPositionSn() {
-        return this.positionSn;
-    }
-
-
-    public Integer getUserId() {
-        return this.userId;
-    }
-
-
-    public String getNickName() {
-        return this.nickName;
-    }
-
-
-    public Integer getAgentId() {
-        return this.agentId;
-    }
-
-
-    public String getStockName() {
-        return this.stockName;
-    }
-
-
-    public String getStockCode() {
-        return this.stockCode;
-    }
-
-
-    public String getStockGid() {
-        return this.stockGid;
-    }
-
-
-    public String getStockSpell() {
-        return this.stockSpell;
-    }
-
-
-    public String getBuyOrderId() {
-        return this.buyOrderId;
-    }
-
-
-    public Date getBuyOrderTime() {
-        return this.buyOrderTime;
-    }
-
-
-    public BigDecimal getBuyOrderPrice() {
-        return this.buyOrderPrice;
-    }
-
-
-    public String getSellOrderId() {
-        return this.sellOrderId;
-    }
-
-
-    public Date getSellOrderTime() {
-        return this.sellOrderTime;
-    }
-
-
-    public BigDecimal getSellOrderPrice() {
-        return this.sellOrderPrice;
-    }
-
-
-    public BigDecimal getProfitTargetPrice() {
-        return this.profitTargetPrice;
-    }
-
-
-    public BigDecimal getStopTargetPrice() {
-        return this.stopTargetPrice;
-    }
-
-
-    public String getOrderDirection() {
-        return this.orderDirection;
-    }
-
-
-    public Integer getOrderNum() {
-        return this.orderNum;
-    }
-
-
-    public Integer getOrderLever() {
-        return this.orderLever;
-    }
-
-
-    public BigDecimal getOrderTotalPrice() {
-        return this.orderTotalPrice;
-    }
-
-
-    public BigDecimal getOrderFee() {
-        return this.orderFee;
-    }
-
-
-    public BigDecimal getOrderSpread() {
-        return this.orderSpread;
-    }
-
-
-    public BigDecimal getOrderStayFee() {
-        return this.orderStayFee;
-    }
-
-
-    public Integer getOrderStayDays() {
-        return this.orderStayDays;
-    }
-
-
-    public BigDecimal getProfitAndLose() {
-        return this.profitAndLose;
-    }
-
-
-    public BigDecimal getAllProfitAndLose() {
-        return this.allProfitAndLose;
-    }
-
-
-    public String getNow_price() {
-        return this.now_price;
-    }
-
-
-    public String getStockPlate() {
-        return this.stockPlate;
-    }
-
-    public BigDecimal getSpreadRatePrice() {
-        return spreadRatePrice;
-    }
-
-    public void setSpreadRatePrice(BigDecimal spreadRatePrice) {
-        this.spreadRatePrice = spreadRatePrice;
-    }
-
-    public BigDecimal getMarginAdd() {
-        return marginAdd;
-    }
-
-    public void setMarginAdd(BigDecimal marginAdd) {
-        this.marginAdd = marginAdd;
-    }
+    /**
+     * 盈亏百分点
+     * */
+    private String profitAndLoseParent;
 }
diff --git a/src/main/java/com/nq/vo/stock/StockListVO.java b/src/main/java/com/nq/vo/stock/StockListVO.java
index 81aa6b8..d7803c1 100644
--- a/src/main/java/com/nq/vo/stock/StockListVO.java
+++ b/src/main/java/com/nq/vo/stock/StockListVO.java
@@ -1,11 +1,9 @@
 package com.nq.vo.stock;
 
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.util.Date;
 
 @Data
 
@@ -42,19 +40,6 @@
     /*是否添加自选:1、添加自选,0、未添加自选*/
     private String isOption;
     private String type;
-
-    //类型1=新股申购 2=线下配售
-    private Integer newStockType;
-
-    private Date subscribeTime;
-
-    private Date subscriptionTime;
-
-    private Date listDate;
-
-    private Long orderNumber;
-
-    private Long orderMinNumber;
 
     private int color;
 
diff --git a/src/main/java/com/nq/vo/stock/StockSubscribeListParamVo.java b/src/main/java/com/nq/vo/stock/StockSubscribeListParamVo.java
deleted file mode 100644
index 7e9a6e5..0000000
--- a/src/main/java/com/nq/vo/stock/StockSubscribeListParamVo.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.nq.vo.stock;
-
-import lombok.Data;
-
-@Data
-public class StockSubscribeListParamVo {
-    private Integer pageType;
-}
diff --git a/src/main/java/com/nq/vo/stock/StockVO.java b/src/main/java/com/nq/vo/stock/StockVO.java
index d92ea0b..1b99917 100644
--- a/src/main/java/com/nq/vo/stock/StockVO.java
+++ b/src/main/java/com/nq/vo/stock/StockVO.java
@@ -59,6 +59,6 @@
 
     private Integer depositAmt;
 
-
+    private String price;
 }
 
diff --git a/src/main/java/com/nq/vo/stock/UserStockSubscribeVo.java b/src/main/java/com/nq/vo/stock/UserStockSubscribeVo.java
deleted file mode 100644
index 2891de3..0000000
--- a/src/main/java/com/nq/vo/stock/UserStockSubscribeVo.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.nq.vo.stock;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * @program: dabao
- * @description:
- * @create: 2024-04-01 14:00
- **/
-@Data
-public class UserStockSubscribeVo {
-
-    /**
-     * 主键id
-     */
-    @TableId(value="id",type= IdType.AUTO)
-    private Integer id;
-    /**
-     *訂單編號
-     */
-    private String orderNo;
-    /**
-     * 用户id
-     */
-    private Integer userId;
-
-    /**
-     * 用户真实姓名
-     */
-    private String realName;
-
-    /**
-     * 用户手机号
-     */
-    private String phone;
-
-    /**
-     * 代理id
-     */
-    private Integer agentId;
-
-    /**
-     * 代理姓名
-     */
-    private String agentName;
-
-    /**
-     * 申购股票代码
-     */
-    private String newCode;
-    /**
-     * 申购股票名称
-     */
-    private String newName;
-    /**
-     * 保证金
-     *
-     */
-    private BigDecimal bond;
-    /**
-     * 发行价格
-     *
-     */
-    private BigDecimal buyPrice;
-    /**
-     * 申购数量
-     *
-     */
-    private Integer applyNums;
-    /**
-     * 中签数量
-     *
-     */
-
-    private Integer applyNumber;
-    private Integer type;
-    /**
-     * 申购状态
-     *状态:1、已申购,2、未中签,3、已中签,4、已缴纳 5.已转持仓
-     */
-    private Integer status;
-    /**
-     * 添加时间
-     */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date addTime;
-
-    /**
-     * 提交时间
-     */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date submitTime;
-
-    /**
-     * 中签审核时间
-     */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date endTime;
-    /**
-     * 双融确定时间
-     */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date fixTime;
-    /**
-     * 备注
-     */
-    private String remarks;
-
-    /**
-     * 最大认缴数量
-     */
-    private Integer maxSubscribeNum;
-
-
-}
diff --git a/src/main/java/com/nq/vo/user/UserInfoVO.java b/src/main/java/com/nq/vo/user/UserInfoVO.java
index 6cf3e2c..c03493f 100644
--- a/src/main/java/com/nq/vo/user/UserInfoVO.java
+++ b/src/main/java/com/nq/vo/user/UserInfoVO.java
@@ -39,8 +39,6 @@
     private Integer isActive;
     private String authMsg;
 
-    private BigDecimal enableAmt;
-    private BigDecimal userAmt;
 
 
     /**
diff --git a/src/main/java/com/nq/vo/user/UserOptionLogVO.java b/src/main/java/com/nq/vo/user/UserOptionLogVO.java
new file mode 100644
index 0000000..50e0922
--- /dev/null
+++ b/src/main/java/com/nq/vo/user/UserOptionLogVO.java
@@ -0,0 +1,29 @@
+package com.nq.vo.user;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.joda.time.DateTime;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class UserOptionLogVO {
+
+    private Integer id;
+    //操作金额
+    private BigDecimal money;
+    //类型,0扣款,1入款
+    private Integer type;
+    //用户id
+    private Integer userId;
+    //资产id
+    private Integer userAccectId;
+    //操作时间
+    private Date createTime;
+    //资产账户类型
+    private String userAccectType;
+    //用户名
+    private String userName;
+
+}
diff --git a/src/main/java/com/nq/vo/user/UserRechargePayInfoVo.java b/src/main/java/com/nq/vo/user/UserRechargePayInfoVo.java
deleted file mode 100644
index c49c4a4..0000000
--- a/src/main/java/com/nq/vo/user/UserRechargePayInfoVo.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.nq.vo.user;
-
-import com.nq.pojo.SitePay;
-import com.nq.pojo.UserRecharge;
-import com.nq.vo.pay.PayInfo;
-import lombok.Data;
-
-@Data
-public class UserRechargePayInfoVo {
-    private UserRecharge userRecharge;
-    private SitePay sitePay;
-}
diff --git a/src/main/java/com/nq/ws/HKWebsocketRunClient.java b/src/main/java/com/nq/ws/HKWebsocketRunClient.java
new file mode 100644
index 0000000..7d80d92
--- /dev/null
+++ b/src/main/java/com/nq/ws/HKWebsocketRunClient.java
@@ -0,0 +1,51 @@
+//package com.nq.ws;
+//
+//import com.google.gson.Gson;
+//import com.nq.enums.EStockType;
+//import com.nq.pojo.StockRealTimeBean;
+//import com.nq.service.IMandatoryLiquidationService;
+//import com.nq.service.impl.MandatoryLiquidationService;
+//import com.nq.utils.ApplicationContextRegisterUtil;
+//import com.nq.utils.redis.RedisKeyUtil;
+//import lombok.extern.slf4j.Slf4j;
+//import org.java_websocket.client.WebSocketClient;
+//import org.java_websocket.handshake.ServerHandshake;
+//import org.springframework.context.ApplicationContext;
+//
+//import java.net.URI;
+//
+//@Slf4j
+//public class HKWebsocketRunClient extends WebSocketClient {
+//
+//    public HKWebsocketRunClient(URI serverUri) {
+//        super(serverUri);
+//    }
+//
+//    @Override
+//    public void onOpen(ServerHandshake serverHandshake) {
+//        send(("key:"+ EStockType.IN.stockKey+":"+EStockType.IN.getContryId()).getBytes());
+//    }
+//
+//    @Override
+//    public void onMessage(String s) {
+//        try {
+//            StockRealTimeBean stockDetailBean =  new Gson().fromJson(s, StockRealTimeBean.class);
+//            RedisKeyUtil.setCacheRealTimeStock(EStockType.IN,stockDetailBean);
+//            ApplicationContext act = ApplicationContextRegisterUtil.getApplicationContext();
+//            MandatoryLiquidationService liquidationService = (MandatoryLiquidationService) act.getBean(IMandatoryLiquidationService.class);
+//            liquidationService.RealTimeDataProcess(EStockType.IN,stockDetailBean);
+//        }catch (Exception e){
+//
+//        }
+//    }
+//
+//    @Override
+//    public void onClose(int i, String s, boolean b) {
+//        log.info("websocket HK关闭关闭"+1);
+//    }
+//
+//    @Override
+//    public void onError(Exception e) {
+//        log.info("websocket 错误");
+//    }
+//}
diff --git a/src/main/java/com/nq/ws/USWebsocketRunClient.java b/src/main/java/com/nq/ws/USWebsocketRunClient.java
index 424ad11..87358e8 100644
--- a/src/main/java/com/nq/ws/USWebsocketRunClient.java
+++ b/src/main/java/com/nq/ws/USWebsocketRunClient.java
@@ -23,14 +23,17 @@
 
     @Override
     public void onOpen(ServerHandshake serverHandshake) {
-        send(("key:"+ EStockType.IN.stockKey+":"+EStockType.IN.getContryId()).getBytes());
+        send(("key:"+ EStockType.US.stockKey+":"+EStockType.US.getContryId()).getBytes());
     }
 
     @Override
     public void onMessage(String s) {
         try {
             StockRealTimeBean stockDetailBean =  new Gson().fromJson(s, StockRealTimeBean.class);
-            RedisKeyUtil.setCacheRealTimeStock(EStockType.IN,stockDetailBean);
+            RedisKeyUtil.setCacheRealTimeStock(EStockType.US,stockDetailBean);
+            ApplicationContext act = ApplicationContextRegisterUtil.getApplicationContext();
+            MandatoryLiquidationService liquidationService = (MandatoryLiquidationService) act.getBean(IMandatoryLiquidationService.class);
+            liquidationService.RealTimeDataProcess(EStockType.US,stockDetailBean);
         }catch (Exception e){
 
         }
@@ -38,7 +41,7 @@
 
     @Override
     public void onClose(int i, String s, boolean b) {
-        log.info("websocket 关闭"+1);
+        log.info("websocket 美股关闭关闭"+1);
     }
 
     @Override
diff --git a/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java b/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
index 057e686..d9ffdfa 100644
--- a/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
+++ b/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
@@ -21,9 +21,27 @@
     public Map<String, WebSocketClient> websocketRunClientMap() {
 
         Map<String, WebSocketClient> retMap = new HashMap<>(2);
+        try {
+            WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("IN_WS_URL")));
+            websocketRunClient.connect();
+            websocketRunClient.setConnectionLostTimeout(0);
+            new Thread(() -> {
+                while (true) {
+                    try {
+                        Thread.sleep(8000);
+                        websocketRunClient.send("heartbeat".getBytes());
+                    } catch (Exception e) {
+                        websocketRunClient.reconnect();
+                        websocketRunClient.setConnectionLostTimeout(0);
+                    }
+                }
+            }).start();
+            retMap.put(EStockType.IN.getStockKey(), websocketRunClient);
+        } catch (Exception e) {
+        }
 
         try {
-            USWebsocketRunClient usWebsocketRunClient = new USWebsocketRunClient(new URI(PropertiesUtil.getProperty("IN_WS_URL")));
+            USWebsocketRunClient usWebsocketRunClient = new USWebsocketRunClient(new URI(PropertiesUtil.getProperty("US_WS_URL")));
             usWebsocketRunClient.connect();
             usWebsocketRunClient.setConnectionLostTimeout(0);
             new Thread(() -> {
@@ -40,7 +58,6 @@
             retMap.put(EStockType.US.getStockKey(), usWebsocketRunClient);
         } catch (Exception e) {
         }
-
         return retMap;
     }
 
diff --git a/src/main/java/com/nq/ws/WebsocketRunClient.java b/src/main/java/com/nq/ws/WebsocketRunClient.java
index f8da7b5..ab473fb 100644
--- a/src/main/java/com/nq/ws/WebsocketRunClient.java
+++ b/src/main/java/com/nq/ws/WebsocketRunClient.java
@@ -23,18 +23,16 @@
 
     @Override
     public void onOpen(ServerHandshake serverHandshake) {
-        send(("key:"+ EStockType.MAS.getStockKey()+":"+EStockType.MAS.getContryId()).getBytes());
+        send(("key:"+ EStockType.IN.getStockKey()+":"+EStockType.IN.getContryId()).getBytes());
     }
 
     @Override
     public void onMessage(String s) {
         try {
-
-
             ApplicationContext act = ApplicationContextRegisterUtil.getApplicationContext();
             MandatoryLiquidationService liquidationService = (MandatoryLiquidationService) act.getBean(IMandatoryLiquidationService.class);
             StockRealTimeBean stockDetailBean =  new Gson().fromJson(s, StockRealTimeBean.class);
-            liquidationService.RealTimeDataProcess(EStockType.MAS,stockDetailBean);
+            liquidationService.RealTimeDataProcess(EStockType.IN,stockDetailBean);
         }catch (Exception e){
 
         }
@@ -42,7 +40,7 @@
 
     @Override
     public void onClose(int i, String s, boolean b) {
-        log.info("websocket 关闭"+1);
+        log.info("websocket  印股  关闭"+1);
     }
 
     @Override
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 2c5a067..fef9a81 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -5,15 +5,15 @@
 #2.	??ifconfig????vsftpd?????
 #3.	???? ftp://??
 
-ftp.server.ip=38.55.207.41
-ftp.user=ddftp
+ftp.server.ip=154.19.164.71:21
+ftp.user=ftp_stock
 ftp.pass=123456
-ftp.server.http.prefix=https://apistock.niveshnav.com/
+ftp.address =/www/wwwroot/ftp_stock/
+ftp.server.http.prefix=https://img.barcblays.cyou/
 
 
-redis1.ip=127.0.0.1
-#redis1.port=6379
-redis1.port=6380
+redis1.ip=localhost
+redis1.port=6379
 redis1.pwd=
 redis1.timeout=10000
 redis.max.total=50
@@ -26,7 +26,7 @@
 
 #cookie config start
 user.cookie.name=USERTOKEN
-agent.cookie.name=agenttoken
+agent.cookie.name=Agenttoken
 admin.cookie.name=admintoken
 
 agent.key.prefix=Mi
@@ -36,20 +36,28 @@
 #股票key的地址
 IN_HTTP_API = https://data.is4vc.com/
 IN_WS_URL = ws://ws.is4vc.com:8001/websocket-server
-IN_KEY = websocket-server
+IN_KEY = r3ZAgtcYzuBizmqge2hK
 
-US_HTTP_API = http://api-1-ws.js-stock.top/
-US_WS_URL = ws://api-1-ws.js-stock.top
+IN_NOW_HTTP_API=http://api-in-2.js-stock.top/
+IN_NOW_KEY=eVKtHt7aG4m6ozwWL9qG
+
+US_HTTP_API = http://api-us.js-stock.top/
+US_WS_URL = ws://ws-us.js-stock.top
 US_KEY = jZFrku4RGQjP87Hmq5tm
 
 HK_HTTP_API = http://test.js-stock.top/
-HK_WS_URL = ws://api-in-ws.js-stock.top
-HK_KEY = GBZAcUPLKZzDMDjvV9Ea
+HK_WS_URL = ws://test-ws.js-stock.top
+HK_KEY = mG8QQDdjGuLjLnrryd0B
+
+
+#HK_HTTP_API = http://api-v1.js-stock.top/
+#HK_WS_URL = ws://api-v1-ws.js-stock.top
+#HK_KEY = QgiqrYYZem1WWXWbHeT7
 
 
 HG_HTTP_API = http://test.js-stock.top/
-HG_WS_URL = ws://api-in-ws.js-stock.top
-HG_KEY = GBZAcUPLKZzDMDjvV9Ea
+HG_WS_URL = ws://test-ws.js-stock.top
+HG_KEY = mG8QQDdjGuLjLnrryd0B
 
 
 
@@ -64,6 +72,9 @@
 SZHB_HTTP_API = https://api.huobi.pro/
 SZHB_WS_URL = ws://api-in-ws.js-stock.top
 SZHB_KEY = GBZAcUPLKZzDMDjvV9Ea
+
+
+
 
 
 #?? ?? - ????
@@ -161,23 +172,19 @@
 
 
 
-
 spring.mail.host=smtp.gmail.com
-# 邮件服务器端口号
+# ????????
 spring.mail.port=587
-# 邮件发送方的电子邮件地址
+# ????????????
 spring.mail.username=barclays5510@gmail.com
-# 邮件发送方的密码或应用程序专用密码(如果启用了两步验证)
+# ????????????????????????????
 spring.mail.password=nppwibbarixvbnqk
-# 启用TLS加密
+# ??TLS??
 spring.mail.properties.mail.smtp.starttls.enable=true
-# 验证邮件服务器的身份
+# ??????????
 spring.mail.properties.mail.smtp.auth=true
-# 邮件传输协议
+# ??????
 spring.mail.properties.mail.transport.protocol=smtp
 
 properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
-
-
-
 
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index dd00ec6..0b78733 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -63,21 +63,7 @@
     time-zone: Asia/Kolkata
   profiles:
     active: druid
-  flyway:
-    enabled: true
-    # 禁止清理数据库表
-    clean-disabled: false
-    # 如果数据库不是空表,需要设置成 true,否则启动报错
-    baseline-on-migrate: true
-    # 与 baseline-on-migrate: true 搭配使用
-    baseline-version: 0
-    #数据库连接配置
-    url: ${spring.datasource.url}
-    user: ${spring.datasource.username}
-    password: ${spring.datasource.password}
-    locations: classpath:db/migration/ #(根据个人情况设置,多个路径使用逗号分隔)
-    #版本控制日志表,默认flyway_schema_history
-    table: flyway_schema_history
+
   # 文件上传
   servlet:
     multipart:
@@ -100,10 +86,9 @@
   # redis 配置
   redis:
     # 地址
-    host: 127.0.0.1
+    host: localhost
     # 端口,默认为6379
-    port: 6380
-#    port: todo: 6380
+    port: 6379
     # 数据库索引
     database: 0
     # 密码
@@ -123,19 +108,17 @@
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driverClassName: com.mysql.cj.jdbc.Driver
-#   todo: 6306
-    url: jdbc:mysql://127.0.0.1:6306/stock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+    url: jdbc:mysql://127.0.0.1:3306/stock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#    url: jdbc:mysql://127.0.0.1:3306/cgstock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
     username: root
-    password: Err;2[eoGFUriwdgr
-#    password: 123456
-
+    password: 123456
     druid:
       # 初始连接数
       initialSize: 5
       # 最小连接池数量
       minIdle: 10
       # 最大连接池数量
-      maxActive: 20
+      maxActive: 50
       # 配置获取连接等待超时的时间
       maxWait: 60000
       # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
diff --git a/src/main/resources/mapper/SitePayMapper.xml b/src/main/resources/mapper/SitePayMapper.xml
index d915e0d..ec85606 100644
--- a/src/main/resources/mapper/SitePayMapper.xml
+++ b/src/main/resources/mapper/SitePayMapper.xml
@@ -6,6 +6,7 @@
       <result column="c_type" property="cType"/>
       <result column="form_url"  property="formUrl"/>
       <result column="form_code"  property="formCode"/>
+
       <result column="channel_type"  property="channelType"/>
       <result column="channel_name" property="channelName"/>
       <result column="channel_desc" property="channelDesc"/>
@@ -17,15 +18,13 @@
       <result column="is_lock"  property="isLock"/>
       <result column="total_price"  property="totalPrice"/>
       <result column="assets_type" property="assetsType"/>
-    <result column="exchange_rate" property="exchangeRate"/>
-    <result column="bank_address" property="bankAddress"/>
-
+      <result column="bank_number" property="bankNumber"/>
 
   </resultMap>
 
   <sql id="Base_Column_List" >
     id, c_type,form_url,form_code,channel_type, channel_name, channel_desc, channel_account, channel_img, channel_min_limit,
-    channel_max_limit, is_show, is_lock, total_price,assets_type,exchange_rate,bank_address
+    channel_max_limit, is_show, is_lock, total_price,assets_type
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
     select
@@ -220,7 +219,7 @@
 
   <select id="listByAdmin" parameterType="string" resultMap="BaseResultMap">
     SELECT
-    *
+   *
     FROM site_pay
     <where>
       <if test="channelType != null and channelType != '' ">
@@ -230,37 +229,12 @@
     order by id desc
   </select>
 
-  <select id="listByPayType" parameterType="java.lang.Integer" resultMap="BaseResultMap">
-    SELECT
-    *
-    FROM site_pay
-    <where>
-      <if test="payType != null">
-        c_type = #{payType}
-      </if>
-    </where>
-    order by id desc
-  </select>
-
 
   <select id="getPayInfo" resultMap="BaseResultMap">
     SELECT
-    <include refid="Base_Column_List"/>
+    *
     FROM site_pay WHERE is_show = 0
   </select>
-
-  <select id="selectByChannelType" resultMap="BaseResultMap" parameterType="string">
-    SELECT
-    <include refid="Base_Column_List"/>
-    FROM site_pay
-    <where>
-      is_show = 0
-      <if test="coinType != null">
-        and channel_type = #{coinType}
-      </if>
-    </where>
-  </select>
-
 
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/StockDzMapper.xml b/src/main/resources/mapper/StockDzMapper.xml
index 6ccbb17..4f8c4a1 100644
--- a/src/main/resources/mapper/StockDzMapper.xml
+++ b/src/main/resources/mapper/StockDzMapper.xml
@@ -42,4 +42,8 @@
         </where>
         ORDER BY id ASC
     </select>
+
+    <select id="getPrice" parameterType="string" resultType="decimal">
+        select price from stock_setting where stock_code=#{stockCode}
+    </select>
 </mapper>
diff --git a/src/main/resources/mapper/StockMapper.xml b/src/main/resources/mapper/StockMapper.xml
index dff2ed6..1927cec 100644
--- a/src/main/resources/mapper/StockMapper.xml
+++ b/src/main/resources/mapper/StockMapper.xml
@@ -188,39 +188,6 @@
       <if test="stockType != null and stockType != '' ">
         and stock_type = #{stockType}
       </if>
-      <if test="stockType != null and stockType != '' ">
-        and stock_type = #{stockType}
-      </if>
-
-    </where>
-    ORDER BY id ASC
-  </select>
-
-
-  <select id="dailyLimitQuery" resultMap="BaseResultMap" parameterType="map">
-    SELECT
-    <include refid="Base_Column_List" />
-    from stock
-    <where>
-      is_show = ${show}
-      <if test="keyWords != null and keyWords != '' ">
-        and ( stock_spell like concat('%',#{keyWords},'%')
-        or stock_name like concat('%',#{keyWords},'%')  )
-      </if>
-
-      <!--      <if test="stockPlate != null and stockPlate != '' ">-->
-      <!--        and stock_plate = #{stockPlate}-->
-      <!--      </if>-->
-      <!--      <if test="stockPlate == null or stockPlate == '' ">-->
-      <!--        and (stock_plate is null or stock_plate='' or stock_plate='科创' or stock_plate='创业' )-->
-      <!--      </if>-->
-      <if test="stockType != null and stockType != '' ">
-        and stock_type = #{stockType}
-        and increase_ratio &gt; 19.5
-      </if>
-      <if test="stockType != null and stockType != '' ">
-        and stock_type = #{stockType}
-      </if>
 
     </where>
     ORDER BY id ASC
diff --git a/src/main/resources/mapper/StockOptionMapper.xml b/src/main/resources/mapper/StockOptionMapper.xml
index 0760ee3..98ed5f6 100644
--- a/src/main/resources/mapper/StockOptionMapper.xml
+++ b/src/main/resources/mapper/StockOptionMapper.xml
@@ -2,16 +2,14 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.nq.dao.StockOptionMapper" >
   <resultMap id="BaseResultMap" type="com.nq.pojo.StockOption" >
-    <constructor >
-      <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
-      <arg column="user_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
-      <arg column="stock_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
-      <arg column="add_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
-      <arg column="stock_code" jdbcType="VARCHAR" javaType="java.lang.String" />
-      <arg column="stock_name" jdbcType="VARCHAR" javaType="java.lang.String" />
-      <arg column="stock_gid" jdbcType="VARCHAR" javaType="java.lang.String" />
-      <arg column="is_lock" jdbcType="INTEGER" javaType="java.lang.Integer" />
-    </constructor>
+      <id column="id"  property="id" />
+      <result column="user_id" property="userId"  />
+      <result column="stock_id" property="stockId"  />
+      <result column="add_time" property="addTime"  />
+      <result column="stock_code" property="stockCode"  />
+      <result column="stock_name" property="stockName" />
+      <result column="stock_gid" property="stockGid" />
+      <result column="is_lock" property="isLock"  />
   </resultMap>
   <sql id="Base_Column_List" >
     id, user_id, stock_id, add_time, stock_code, stock_name, stock_gid, is_lock
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index b1ca23b..bb9773c 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -24,14 +24,13 @@
         <result column="auth_msg" property="authMsg"/>
         <result column="withdrawal_Pwd" property="withdrawalPwd"/>
         <result column="vaild_number"  property="vaildNumber"/>
-        <result column="amt_pwd"  property="amtPwd"/>
 
     </resultMap>
     <sql id="Base_Column_List">
     id, agent_id, agent_name, phone, user_pwd, with_pwd, nick_name, real_name, id_card, 
     account_type, is_lock, is_login,
     reg_time, reg_ip, reg_address, img1_key, img2_key, img3_key, is_active, auth_msg,
-    withdrawal_Pwd,vaild_number,amt_pwd
+    withdrawal_Pwd,vaild_number
   </sql>
 
 
@@ -40,7 +39,7 @@
         SELECT
         <include refid="Base_Column_List"/>
         FROM user
-        WHERE (phone = #{phone} or email = #{phone}) and user_pwd = #{userPwd}
+        WHERE phone = #{phone} and user_pwd = #{userPwd}
     </select>
 
     <select id="listByAgent" resultMap="BaseResultMap" parameterType="map">
@@ -73,6 +72,10 @@
         select count(*) from user where TO_DAYS(reg_time) = TO_DAYS(NOW()) and agent_id = #{id}
     </select>
 
+    <select id="findByPhone" parameterType="string" resultType="com.nq.pojo.User">
+        select * from user where phone= #{phone}
+    </select>
+
 
     <select id="queryAgintSumTodayRegCount"  parameterType="integer"   resultType="int">
         select count(*) from user where agent_id =#{id}   TO_DAYS(reg_time) = TO_DAYS(NOW())
@@ -83,6 +86,9 @@
         <include refid="Base_Column_List"/>
         FROM user
         <where>
+            <if test="id != null and id != '' ">
+                and id = #{id}
+            </if>
             <if test="searchId != null ">
                 and agent_id = #{searchId}
             </if>
@@ -97,24 +103,5 @@
             </if>
         </where>
         ORDER BY id DESC
-    </select>
-
-    <select id="getMarketValue" parameterType="integer" resultType="decimal">
-        select SUM(order_total_price) as marketValue
-        from user_position
-        where user_id = #{user_id} and sell_order_id is null
-    </select>
-
-    <select id="getProfit" parameterType="integer" resultType="Float">
-        select
-            (select SUM(order_total_price)
-             from user_position
-             where user_id = #{user_id} and sell_order_id is  null and order_direction='买涨')
-                -
-            (select SUM(order_total_price) as dsum
-             from user_position
-             where user_id = #{user_id} and sell_order_id is null and order_direction='买跌'
-            ) as profit
-
     </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserOptionLogMapper.xml b/src/main/resources/mapper/UserOptionLogMapper.xml
new file mode 100644
index 0000000..86e54a5
--- /dev/null
+++ b/src/main/resources/mapper/UserOptionLogMapper.xml
@@ -0,0 +1,21 @@
+<?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.nq.dao.UserOptionLogMapper">
+
+    <select id="selective" resultType="com.nq.vo.user.UserOptionLogVO">
+        SELECT
+            t1.*,
+            t2.accect_type AS userAccectType,
+            t3.real_name AS userName
+        FROM
+            user_option_log t1
+                LEFT JOIN user_assets t2 ON t1.user_accect_id = t2.id
+                LEFT JOIN `user` t3 ON t1.user_id = t3.id
+            where 1=1
+        <if test="userId!=null and userId!=''">
+            and t1.user_id = #{userId}
+        </if>
+        order by create_time desc
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserRechargeMapper.xml b/src/main/resources/mapper/UserRechargeMapper.xml
index 047401d..3e4767c 100644
--- a/src/main/resources/mapper/UserRechargeMapper.xml
+++ b/src/main/resources/mapper/UserRechargeMapper.xml
@@ -1,424 +1,295 @@
 <?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.nq.dao.UserRechargeMapper">
-    <resultMap id="BaseResultMap" type="com.nq.pojo.UserRecharge">
-        <id column="id" property="id"/>
-        <result column="user_id" property="userId"/>
-        <result column="nick_name" property="nickName"/>
-        <result column="agent_id" property="agentId"/>
-        <result column="order_sn" property="orderSn"/>
-        <result column="pay_sn" property="paySn"/>
-        <result column="pay_channel" property="payChannel"/>
-        <result column="pay_amt" property="payAmt"/>
-        <result column="order_status" property="orderStatus"/>
-        <result column="order_desc" property="orderDesc"/>
-        <result column="add_time" property="addTime"/>
-        <result column="pay_time" property="payTime"/>
-        <result column="pay_id" property="payId"/>
-        <result column="pay_type" property="payType"/>
-        <result column="img" property="img"/>
-    </resultMap>
-    <sql id="Base_Column_List">
-        id, user_id, nick_name, agent_id, order_sn, pay_sn, pay_channel, pay_amt, order_status,
-    order_desc, add_time, pay_time, pay_id,img,pay_type,user_phone,channel_name,assets_type,wallet_address,
-        pay_name,bank_num,route_num,pay_phone,pay_mail
-    </sql>
-    <insert id="insert" parameterType="com.nq.pojo.UserRecharge">
-        insert into user_recharge (id, user_id, nick_name,
-                                   agent_id, order_sn, pay_sn,
-                                   pay_channel, pay_amt, order_status,
-                                   order_desc, add_time, pay_time, pay_id, img, user_phone)
-        values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER}, #{nickName,jdbcType=VARCHAR},
-                #{agentId,jdbcType=INTEGER}, #{orderSn,jdbcType=VARCHAR}, #{paySn,jdbcType=VARCHAR},
-                #{payChannel,jdbcType=VARCHAR}, #{payAmt,jdbcType=DECIMAL}, #{orderStatus,jdbcType=INTEGER},
-                #{orderDesc,jdbcType=VARCHAR}, #{addTime,jdbcType=TIMESTAMP}, #{payTime,jdbcType=TIMESTAMP},
-                #{payId,jdbcType=INTEGER}, #{img,jdbcType=VARCHAR}, #{userPhone,jdbcType=VARCHAR})
-    </insert>
-    <insert id="insertSelective" parameterType="com.nq.pojo.UserRecharge">
-        insert into user_recharge
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                id,
-            </if>
-            <if test="userId != null">
-                user_id,
-            </if>
-            <if test="nickName != null">
-                nick_name,
-            </if>
-            <if test="agentId != null">
-                agent_id,
-            </if>
-            <if test="orderSn != null">
-                order_sn,
-            </if>
-            <if test="paySn != null">
-                pay_sn,
-            </if>
-            <if test="payChannel != null">
-                pay_channel,
-            </if>
-            <if test="payAmt != null">
-                pay_amt,
-            </if>
-            <if test="orderStatus != null">
-                order_status,
-            </if>
-            <if test="orderDesc != null">
-                order_desc,
-            </if>
-            <if test="addTime != null">
-                add_time,
-            </if>
-            <if test="payTime != null">
-                pay_time,
-            </if>
-            <if test="payId != null">
-                pay_id,
-            </if>
-            <if test="payType != null">
-                pay_type,
-            </if>
-            <if test="img != null">
-                img,
-            </if>
-            <if test="userPhone != null">
-                user_phone,
-            </if>
-            <if test="channelName != null">
-                channel_name,
-            </if>
-            <if test="assetsType != null">
-                assets_type,
-            </if>
-            <if test="walletAddress != null">
-                wallet_address,
-            </if>
-            <if test="payName != null">
-                pay_name,
-            </if>
-            <if test="bankNum != null">
-                bank_num,
-            </if>
-            <if test="routeNum != null">
-                route_num,
-            </if>
-            <if test="payPhone != null">
-                pay_phone,
-            </if>
-            <if test="payMail != null">
-                pay_mail,
-            </if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                #{id,jdbcType=INTEGER},
-            </if>
-            <if test="userId != null">
-                #{userId,jdbcType=INTEGER},
-            </if>
-            <if test="nickName != null">
-                #{nickName,jdbcType=VARCHAR},
-            </if>
-            <if test="agentId != null">
-                #{agentId,jdbcType=INTEGER},
-            </if>
-            <if test="orderSn != null">
-                #{orderSn,jdbcType=VARCHAR},
-            </if>
-            <if test="paySn != null">
-                #{paySn,jdbcType=VARCHAR},
-            </if>
-            <if test="payChannel != null">
-                #{payChannel,jdbcType=VARCHAR},
-            </if>
-            <if test="payAmt != null">
-                #{payAmt,jdbcType=DECIMAL},
-            </if>
-            <if test="orderStatus != null">
-                #{orderStatus,jdbcType=INTEGER},
-            </if>
-            <if test="orderDesc != null">
-                #{orderDesc,jdbcType=VARCHAR},
-            </if>
-            <if test="addTime != null">
-                #{addTime,jdbcType=TIMESTAMP},
-            </if>
-            <if test="payTime != null">
-                #{payTime,jdbcType=TIMESTAMP},
-            </if>
-            <if test="payId != null">
-                #{payId,jdbcType=INTEGER},
-            </if>
-            <if test="payType != null">
-                #{payType,jdbcType=INTEGER},
-            </if>
-            <if test="img != null">
-                #{img,jdbcType=VARCHAR},
-            </if>
-            <if test="userPhone != null">
-                #{userPhone,jdbcType=VARCHAR},
-            </if>
-            <if test="channelName != null">
-                #{channelName,jdbcType=VARCHAR},
-            </if>
-            <if test="assetsType != null">
-                #{assetsType,jdbcType=VARCHAR},
-            </if>
-            <if test="walletAddress != null">
-                #{walletAddress,jdbcType=VARCHAR},
-            </if>
-            <if test="payName != null">
-                #{payName,jdbcType=VARCHAR},
-            </if>
-            <if test="bankNum != null">
-                #{bankNum,jdbcType=VARCHAR},
-            </if>
-            <if test="routeNum != null">
-                #{routeNum,jdbcType=VARCHAR},
-            </if>
-            <if test="payPhone != null">
-                #{payPhone,jdbcType=VARCHAR},
-            </if>
-            <if test="payMail != null">
-                #{payMail,jdbcType=VARCHAR},
-            </if>
-
-        </trim>
-    </insert>
-    <update id="updateByPrimaryKeySelective" parameterType="com.nq.pojo.UserRecharge">
-        update user_recharge
-        <set>
-            <if test="userId != null">
-                user_id = #{userId,jdbcType=INTEGER},
-            </if>
-            <if test="nickName != null">
-                nick_name = #{nickName,jdbcType=VARCHAR},
-            </if>
-            <if test="agentId != null">
-                agent_id = #{agentId,jdbcType=INTEGER},
-            </if>
-            <if test="orderSn != null">
-                order_sn = #{orderSn,jdbcType=VARCHAR},
-            </if>
-            <if test="paySn != null">
-                pay_sn = #{paySn,jdbcType=VARCHAR},
-            </if>
-            <if test="payChannel != null">
-                pay_channel = #{payChannel,jdbcType=VARCHAR},
-            </if>
-            <if test="payAmt != null">
-                pay_amt = #{payAmt,jdbcType=DECIMAL},
-            </if>
-            <if test="orderStatus != null">
-                order_status = #{orderStatus,jdbcType=INTEGER},
-            </if>
-            <if test="orderDesc != null">
-                order_desc = #{orderDesc,jdbcType=VARCHAR},
-            </if>
-            <if test="addTime != null">
-                add_time = #{addTime,jdbcType=TIMESTAMP},
-            </if>
-            <if test="payTime != null">
-                pay_time = #{payTime,jdbcType=TIMESTAMP},
-            </if>
-            <if test="payId != null">
-                pay_id = #{payId,jdbcType=INTEGER},
-            </if>
-            <if test="payType != null">
-                pay_type = #{payType,jdbcType=INTEGER},
-            </if>
-            <if test="img != null">
-                img = #{img,jdbcType=VARCHAR},
-            </if>
-            <if test="userPhone != null">
-                user_phone = #{userPhone,jdbcType=VARCHAR},
-            </if>
-            <if test="channelName != null">
-                channel_name = #{channelName,jdbcType=VARCHAR},
-            </if>
-            <if test="assetsType != null">
-                assets_type = #{assetsType,jdbcType=VARCHAR},
-            </if>
-            <if test="walletAddress != null">
-                wallet_address = #{walletAddress,jdbcType=VARCHAR},
-            </if>
-            <if test="payName != null">
-                pay_name = #{payName,jdbcType=VARCHAR},
-            </if>
-            <if test="bankNum != null">
-                bank_num = #{bankNum,jdbcType=VARCHAR},
-            </if>
-            <if test="routeNum != null">
-                route_num = #{routeNum,jdbcType=VARCHAR},
-            </if>
-            <if test="payPhone != null">
-                pay_phone = #{payPhone,jdbcType=VARCHAR},
-            </if>
-            <if test="payMail != null">
-                pay_mail = #{payMail,jdbcType=VARCHAR},
-            </if>
-        </set>
-        where id = #{id,jdbcType=INTEGER}
-    </update>
-    <update id="updateByPrimaryKey" parameterType="com.nq.pojo.UserRecharge">
-        update user_recharge
-        set user_id      = #{userId,jdbcType=INTEGER},
-            nick_name    = #{nickName,jdbcType=VARCHAR},
-            agent_id     = #{agentId,jdbcType=INTEGER},
-            order_sn     = #{orderSn,jdbcType=VARCHAR},
-            pay_sn       = #{paySn,jdbcType=VARCHAR},
-            pay_channel  = #{payChannel,jdbcType=VARCHAR},
-            pay_amt      = #{payAmt,jdbcType=DECIMAL},
-            order_status = #{orderStatus,jdbcType=INTEGER},
-            order_desc   = #{orderDesc,jdbcType=VARCHAR},
-            add_time     = #{addTime,jdbcType=TIMESTAMP},
-            pay_time     = #{payTime,jdbcType=TIMESTAMP}
-        where id = #{id,jdbcType=INTEGER}
-    </update>
+<mapper namespace="com.nq.dao.UserRechargeMapper" >
+  <resultMap id="BaseResultMap" type="com.nq.pojo.UserRecharge" >
+      <id column="id" property="id" />
+      <result column="user_id"  property="userId"/>
+      <result column="nick_name"  property="nickName"/>
+      <result column="agent_id"  property="agentId"/>
+      <result column="order_sn"  property="orderSn"/>
+      <result column="pay_sn"  property="paySn"/>
+      <result column="pay_channel" property="payChannel"/>
+      <result column="pay_amt" property="payAmt"/>
+      <result column="order_status"  property="orderStatus"/>
+      <result column="order_desc"  property="orderDesc"/>
+      <result column="add_time"   property="addTime"/>
+      <result column="pay_time"  property="payTime"/>
+      <result column="pay_id"  property="payId"/>
+      <result column="img" property="img"/>
+      <result column="assets_type" property="assetsType"/>
+  </resultMap>
+  <sql id="Base_Column_List" >
+    id, user_id, nick_name, agent_id, order_sn, pay_sn, pay_channel, pay_amt, order_status,
+    order_desc, add_time, pay_time, pay_id,img
+  </sql>
+  <insert id="insertSelective" parameterType="com.nq.pojo.UserRecharge" >
+    insert into user_recharge
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="userId != null" >
+        user_id,
+      </if>
+      <if test="nickName != null" >
+        nick_name,
+      </if>
+      <if test="agentId != null" >
+        agent_id,
+      </if>
+      <if test="orderSn != null" >
+        order_sn,
+      </if>
+      <if test="paySn != null" >
+        pay_sn,
+      </if>
+      <if test="payChannel != null" >
+        pay_channel,
+      </if>
+      <if test="payAmt != null" >
+        pay_amt,
+      </if>
+      <if test="orderStatus != null" >
+        order_status,
+      </if>
+      <if test="orderDesc != null" >
+        order_desc,
+      </if>
+      <if test="addTime != null" >
+        add_time,
+      </if>
+      <if test="payTime != null" >
+        pay_time,
+      </if>
+      <if test="payId != null" >
+        pay_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="userId != null" >
+        #{userId,jdbcType=INTEGER},
+      </if>
+      <if test="nickName != null" >
+        #{nickName,jdbcType=VARCHAR},
+      </if>
+      <if test="agentId != null" >
+        #{agentId,jdbcType=INTEGER},
+      </if>
+      <if test="orderSn != null" >
+        #{orderSn,jdbcType=VARCHAR},
+      </if>
+      <if test="paySn != null" >
+        #{paySn,jdbcType=VARCHAR},
+      </if>
+      <if test="payChannel != null" >
+        #{payChannel,jdbcType=VARCHAR},
+      </if>
+      <if test="payAmt != null" >
+        #{payAmt,jdbcType=DECIMAL},
+      </if>
+      <if test="orderStatus != null" >
+        #{orderStatus,jdbcType=INTEGER},
+      </if>
+      <if test="orderDesc != null" >
+        #{orderDesc,jdbcType=VARCHAR},
+      </if>
+      <if test="addTime != null" >
+        #{addTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="payTime != null" >
+        #{payTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="payId != null" >
+        #{payId,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.nq.pojo.UserRecharge" >
+    update user_recharge
+    <set >
+      <if test="userId != null" >
+        user_id = #{userId,jdbcType=INTEGER},
+      </if>
+      <if test="nickName != null" >
+        nick_name = #{nickName,jdbcType=VARCHAR},
+      </if>
+      <if test="agentId != null" >
+        agent_id = #{agentId,jdbcType=INTEGER},
+      </if>
+      <if test="orderSn != null" >
+        order_sn = #{orderSn,jdbcType=VARCHAR},
+      </if>
+      <if test="paySn != null" >
+        pay_sn = #{paySn,jdbcType=VARCHAR},
+      </if>
+      <if test="payChannel != null" >
+        pay_channel = #{payChannel,jdbcType=VARCHAR},
+      </if>
+      <if test="payAmt != null" >
+        pay_amt = #{payAmt,jdbcType=DECIMAL},
+      </if>
+      <if test="orderStatus != null" >
+        order_status = #{orderStatus,jdbcType=INTEGER},
+      </if>
+      <if test="orderDesc != null" >
+        order_desc = #{orderDesc,jdbcType=VARCHAR},
+      </if>
+      <if test="addTime != null" >
+        add_time = #{addTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="payTime != null" >
+        pay_time = #{payTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.nq.pojo.UserRecharge" >
+    update user_recharge
+    set user_id = #{userId,jdbcType=INTEGER},
+      nick_name = #{nickName,jdbcType=VARCHAR},
+      agent_id = #{agentId,jdbcType=INTEGER},
+      order_sn = #{orderSn,jdbcType=VARCHAR},
+      pay_sn = #{paySn,jdbcType=VARCHAR},
+      pay_channel = #{payChannel,jdbcType=VARCHAR},
+      pay_amt = #{payAmt,jdbcType=DECIMAL},
+      order_status = #{orderStatus,jdbcType=INTEGER},
+      order_desc = #{orderDesc,jdbcType=VARCHAR},
+      add_time = #{addTime,jdbcType=TIMESTAMP},
+      pay_time = #{payTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
 
 
-    <select id="checkInMoney" resultType="integer" parameterType="map">
-        SELECT COUNT(*)
-        FROM user_recharge
-        WHERE user_id = #{userId}
-          and order_status = #{status}
-          and add_time > date_sub(now(), interval 1 hour)
-    </select>
 
 
-    <select id="findUserRechargeByOrderSn" parameterType="string" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM user_recharge
-        WHERE order_sn = #{orderSn}
-    </select>
+
+  <select id="checkInMoney" resultType="integer" parameterType="map">
+    SELECT COUNT(*) FROM user_recharge
+    WHERE user_id = #{userId}
+    and order_status = #{status}
+    and add_time > date_sub(now(), interval 1 hour)
+  </select>
 
 
-    <select id="findUserChargeList" resultMap="BaseResultMap" parameterType="map">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM user_recharge
-        <where>
-            user_id = #{uid}
-            <if test="payChannel != null and payChannel != '' ">
-                and pay_channel = #{payChannel}
-            </if>
-            <if test="orderStatus != null and orderStatus != '' ">
-                and order_status = #{orderStatus}
-            </if>
-        </where>
-        ORDER BY id DESC
-    </select>
+  <select id="findUserRechargeByOrderSn" parameterType="string" resultMap="BaseResultMap">
+    SELECT
+    <include refid="Base_Column_List"/>
+    FROM user_recharge
+    WHERE order_sn = #{orderSn}
+  </select>
 
 
-    <select id="listByAdmin" parameterType="map" resultType="com.nq.pojo.UserRecharge">
-        SELECT
-        s.id, s.user_id, s.nick_name, s.agent_id, s.order_sn, s.pay_sn, s.pay_channel,s.user_phone,
-        s.pay_amt, s.order_status,s.order_desc,s.add_time,s.pay_time,s.pay_id,s.img ,s.channel_name,s.assets_type
-        FROM user_recharge s
-        left join site_pay p
-        on s.pay_id = p.id
-        where agent_id != 1
-        <if test="agentId != null">
-            and ( agent_id = #{agentId}
-            or agent_id in (
-            select agent_user.id
-            FROM agent_user
-            where parent_id = ${agentId}
-            )
-            )
-        </if>
-        <if test="userId != null">
-            and user_id = #{userId}
-        </if>
-        <if test="realName != null and realName != '' ">
-            and nick_name like CONCAT('%','${realName}','%')
-        </if>
-        <if test="state != null">
-            and order_status = #{state}
-        </if>
-
-        <if test="begin_time != null ">
-            and pay_time <![CDATA[>=]]> #{begin_time}
-        </if>
-        <if test="end_time != null ">
-            and pay_time <![CDATA[<=]]> #{end_time}
-        </if>
-        ORDER BY s.id DESC
-    </select>
+  <select id="findUserChargeList" resultMap="BaseResultMap" parameterType="map">
+    SELECT
+    <include refid="Base_Column_List"/>
+    FROM user_recharge
+    <where>
+      user_id = #{uid}
+      <if test="payChannel != null and payChannel != '' ">
+        and pay_channel = #{payChannel}
+      </if>
+      <if test="orderStatus != null and orderStatus != '' ">
+        and order_status = #{orderStatus}
+      </if>
+    </where>
+    ORDER BY id DESC
+  </select>
 
 
-    <delete id="deleteByUserId" parameterType="integer">
-        DELETE
-        FROM user_recharge
-        WHERE user_id = #{userId}
-    </delete>
+
+  <select id="listByAdmin" parameterType="map" resultType="com.nq.pojo.UserRecharge">
+    SELECT
+    s.id, s.user_id, s.nick_name, s.agent_id, s.order_sn, s.pay_sn, s.pay_channel,
+    s.pay_amt, s.order_status,s.order_desc,s.add_time,s.pay_time,s.pay_id,s.img ,p.channel_name,p.assets_type
+    FROM user_recharge s
+    join site_pay p
+    on s.pay_id = p.id
+    where  agent_id != 1
+    <if test="agentId != null">
+      and ( agent_id = #{agentId}
+      or agent_id in (
+      select agent_user.id
+      FROM agent_user
+      where parent_id = ${agentId}
+      )
+      )
+    </if>
+    <if test="userId != null">
+      and user_id = #{userId}
+    </if>
+    <if test="realName != null and realName != '' ">
+      and nick_name like CONCAT('%','${realName}','%')
+    </if>
+    <if test="state != null">
+      and order_status = #{state}
+    </if>
+
+    <if test="begin_time != null ">
+      and pay_time <![CDATA[>=]]> #{begin_time}
+    </if>
+    <if test="end_time != null ">
+      and pay_time <![CDATA[<=]]> #{end_time}
+    </if>
+    ORDER BY s.id DESC
+  </select>
 
 
-    <select id="listByAgent" parameterType="map" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM user_recharge
-        <where>
-            agent_id = #{searchId}
-            <if test="realName != null and realName != '' ">
-                and nick_name like CONCAT('%','${realName}','%')
-            </if>
-            <if test="payChannel != null and payChannel != '' ">
-                and pay_channel = #{payChannel}
-            </if>
-            <if test="state != null">
-                and order_status = #{state}
-            </if>
-        </where>
-        ORDER BY id DESC
-    </select>
-
-    <select id="queryDayFrist" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM user_recharge WHERE TO_DAYS(add_time) = TO_DAYS(NOW()) AND order_status = 1 GROUP BY user_id
-    </select>
+  <delete id="deleteByUserId" parameterType="integer" >
+    DELETE FROM user_recharge WHERE user_id = #{userId}
+  </delete>
 
 
-    <select id="queryDayFrist" resultMap="BaseResultMap" parameterType="integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM user_recharge WHERE TO_DAYS(add_time) = TO_DAYS(NOW()) AND order_status = 1 GROUP BY user_id AND agent_id =
-        #{id}
-    </select>
+  <select id="listByAgent" parameterType="map" resultMap="BaseResultMap">
+    SELECT
+    <include refid="Base_Column_List"/>
+    FROM user_recharge
+    <where>
+      agent_id = #{searchId}
+      <if test="realName != null and realName != '' ">
+        and nick_name like CONCAT('%','${realName}','%')
+      </if>
+      <if test="payChannel != null and payChannel != '' ">
+        and pay_channel = #{payChannel}
+      </if>
+      <if test="state != null">
+        and order_status = #{state}
+      </if>
+    </where>
+    ORDER BY id DESC
+  </select>
 
-    <!--累计充值金额-->
-    <select id="CountChargeSumAmt" resultType="decimal" parameterType="integer">
-        SELECT sum(pay_amt)
-        FROM user_recharge
-        WHERE order_status = #{chargeState}
-    </select>
+  <select id="queryDayFrist"  resultMap="BaseResultMap">
+    SELECT   <include refid="Base_Column_List"/>
+        FROM user_recharge WHERE TO_DAYS(add_time) = TO_DAYS(NOW())  AND  order_status = 1  GROUP BY  user_id
+  </select>
 
-    <!--累计充值金额-->
-    <select id="agentCountChargeSumAmt" resultType="decimal" parameterType="map">
-        SELECT sum(pay_amt)
-        FROM user_recharge
-        WHERE order_status = #{chargeState}
-          and agent_id = #{agentId}
-    </select>
 
-    <!--今日充值金额-->
-    <select id="CountTotalRechargeAmountByTime" parameterType="integer" resultType="decimal">
-        select sum(IFNULL(pay_amt, 0)) pay_amt
-        from user_recharge
-        where order_status = #{chargeState}
-          and TO_DAYS(pay_time) = TO_DAYS(NOW())
-    </select>
+  <select id="queryDayFrist"  resultMap="BaseResultMap" parameterType="integer">
+    SELECT   <include refid="Base_Column_List"/>
+    FROM user_recharge WHERE TO_DAYS(add_time) = TO_DAYS(NOW())  AND  order_status = 1  GROUP BY  user_id AND agent_id = #{id}
+  </select>
 
-    <!--今日充值金额-->
-    <select id="CountTotalRechargeAmountByTime" parameterType="map" resultType="decimal">
-        select sum(IFNULL(pay_amt, 0)) pay_amt
-        from user_recharge
-        where order_status = #{chargeState}
-          and TO_DAYS(pay_time) = TO_DAYS(NOW())
-          and agent_id = #{agentId}
-    </select>
+  <!--累计充值金额-->
+  <select id="CountChargeSumAmt" resultType="decimal" parameterType="integer">
+    SELECT sum(pay_amt) FROM user_recharge WHERE order_status = #{chargeState}
+  </select>
+
+  <!--累计充值金额-->
+  <select id="agentCountChargeSumAmt" resultType="decimal" parameterType="map">
+    SELECT sum(pay_amt) FROM user_recharge WHERE order_status = #{chargeState} and  agent_id = #{agentId}
+  </select>
+
+  <!--今日充值金额-->
+  <select id="CountTotalRechargeAmountByTime" parameterType="integer" resultType="decimal">
+    select sum(IFNULL(pay_amt,0)) pay_amt from user_recharge where order_status = #{chargeState} and TO_DAYS(pay_time) = TO_DAYS(NOW())
+  </select>
+
+  <!--今日充值金额-->
+  <select id="CountTotalRechargeAmountByTime" parameterType="map" resultType="decimal">
+    select sum(IFNULL(pay_amt,0)) pay_amt from user_recharge where order_status = #{chargeState} and TO_DAYS(pay_time) = TO_DAYS(NOW()) and  agent_id = #{agentId}
+  </select>
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserStockSubscribeMapper.xml b/src/main/resources/mapper/UserStockSubscribeMapper.xml
index de22da0..0713607 100644
--- a/src/main/resources/mapper/UserStockSubscribeMapper.xml
+++ b/src/main/resources/mapper/UserStockSubscribeMapper.xml
@@ -210,7 +210,7 @@
         FROM user_stock_subscribe
         where 1=1
         <if test="keyword != null and keyword != ''">
-            and (user_id = #{keyword} or real_name like CONCAT('%',#{keyword},'%') or phone like CONCAT('%',#{keyword},'%') and type = #{type})
+            and (user_id = #{keyword} or real_name like CONCAT('%',#{keyword},'%') or phone like CONCAT('%',#{keyword},'%'))
         </if>
         order by id desc
     </select>
diff --git a/src/main/resources/mapper/UserWithdrawMapper.xml b/src/main/resources/mapper/UserWithdrawMapper.xml
index ca3e24c..735bb74 100644
--- a/src/main/resources/mapper/UserWithdrawMapper.xml
+++ b/src/main/resources/mapper/UserWithdrawMapper.xml
@@ -17,13 +17,9 @@
       <result column="with_fee"  property="withFee"/>
       <result column="with_msg"  property="withMsg"/>
   </resultMap>
-  <sql id="Base_Column_List" >
-    id, user_id, nick_name, agent_id, with_amt, apply_time, trans_time, with_name, bank_no, 
-    bank_name, bank_address, with_status, with_fee, with_msg
-  </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
     select 
-    <include refid="Base_Column_List" />
+    *
     from user_withdraw
     where id = #{id,jdbcType=INTEGER}
   </select>
@@ -31,18 +27,7 @@
     delete from user_withdraw
     where id = #{id,jdbcType=INTEGER}
   </delete>
-  <insert id="insert" parameterType="com.nq.pojo.UserWithdraw" >
-    insert into user_withdraw (id, user_id, nick_name, 
-      agent_id, with_amt, apply_time, 
-      trans_time, with_name, bank_no, 
-      bank_name, bank_address, with_status, 
-      with_fee, with_msg,wallet_address,actual_withdrawal,coin_type)
-    values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER}, #{nickName,jdbcType=VARCHAR}, 
-      #{agentId,jdbcType=INTEGER}, #{withAmt,jdbcType=DECIMAL}, #{applyTime,jdbcType=TIMESTAMP}, 
-      #{transTime,jdbcType=TIMESTAMP}, #{withName,jdbcType=VARCHAR}, #{bankNo,jdbcType=VARCHAR}, 
-      #{bankName,jdbcType=VARCHAR}, #{bankAddress,jdbcType=VARCHAR}, #{withStatus,jdbcType=INTEGER}, 
-      #{withFee,jdbcType=DECIMAL}, #{withMsg,jdbcType=VARCHAR}, #{walletAddress,jdbcType=VARCHAR}, #{actualWithdrawal,jdbcType=VARCHAR},#{coinType,jdbcType=VARCHAR})
-  </insert>
+
   <insert id="insertSelective" parameterType="com.nq.pojo.UserWithdraw" >
     insert into user_withdraw
     <trim prefix="(" suffix=")" suffixOverrides="," >
@@ -201,7 +186,7 @@
 
   <select id="findUserWithList" parameterType="map" resultMap="BaseResultMap">
     SELECT
-    *
+*
     FROM user_withdraw
     <where>
       user_id = #{uid}
@@ -217,7 +202,7 @@
 
   <select id="listByAgent" resultMap="BaseResultMap" parameterType="map">
     SELECT
-    <include refid="Base_Column_List"/>
+   *
     FROM user_withdraw
     <where>
       agent_id = #{searchId}
@@ -233,7 +218,7 @@
 
   <select id="listByAdmin" resultMap="BaseResultMap" parameterType="map">
     SELECT
-    *
+   *
     FROM user_withdraw
     where agent_id != 1
       <if test="agentId != null">
diff --git a/src/main/webapp/upload/060cf2ad-ff52-492c-8b97-64cb88a0b335.jpeg b/src/main/webapp/upload/060cf2ad-ff52-492c-8b97-64cb88a0b335.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/060cf2ad-ff52-492c-8b97-64cb88a0b335.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/0e2894ce-f359-400f-8caf-2a19794820b5.jpg b/src/main/webapp/upload/0e2894ce-f359-400f-8caf-2a19794820b5.jpg
new file mode 100644
index 0000000..49b503a
--- /dev/null
+++ b/src/main/webapp/upload/0e2894ce-f359-400f-8caf-2a19794820b5.jpg
Binary files differ
diff --git a/src/main/webapp/upload/0ee7c9e8-a21a-40f0-b366-fa301a16abc2.jpg b/src/main/webapp/upload/0ee7c9e8-a21a-40f0-b366-fa301a16abc2.jpg
new file mode 100644
index 0000000..658cb8a
--- /dev/null
+++ b/src/main/webapp/upload/0ee7c9e8-a21a-40f0-b366-fa301a16abc2.jpg
Binary files differ
diff --git a/src/main/webapp/upload/0f29312a-b8c6-4c30-af38-d2d38bad3198.jpeg b/src/main/webapp/upload/0f29312a-b8c6-4c30-af38-d2d38bad3198.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/0f29312a-b8c6-4c30-af38-d2d38bad3198.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/1b0e72f9-b1f1-4d4b-9c2b-1fa655f8d87b.jpeg b/src/main/webapp/upload/1b0e72f9-b1f1-4d4b-9c2b-1fa655f8d87b.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/1b0e72f9-b1f1-4d4b-9c2b-1fa655f8d87b.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/26488e95-ea6d-4327-aa71-92f3bcc8466f.jpg b/src/main/webapp/upload/26488e95-ea6d-4327-aa71-92f3bcc8466f.jpg
new file mode 100644
index 0000000..658cb8a
--- /dev/null
+++ b/src/main/webapp/upload/26488e95-ea6d-4327-aa71-92f3bcc8466f.jpg
Binary files differ
diff --git a/src/main/webapp/upload/2844aca6-9ab3-4d9e-a6e1-dadef9db1241.jpeg b/src/main/webapp/upload/2844aca6-9ab3-4d9e-a6e1-dadef9db1241.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/2844aca6-9ab3-4d9e-a6e1-dadef9db1241.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/3223f1f6-ac4a-4ddb-ad35-675da3d9362c.jpg b/src/main/webapp/upload/3223f1f6-ac4a-4ddb-ad35-675da3d9362c.jpg
new file mode 100644
index 0000000..658cb8a
--- /dev/null
+++ b/src/main/webapp/upload/3223f1f6-ac4a-4ddb-ad35-675da3d9362c.jpg
Binary files differ
diff --git a/src/main/webapp/upload/3f064ff7-7f92-40cc-9bf1-1aa5f432da6b.jpg b/src/main/webapp/upload/3f064ff7-7f92-40cc-9bf1-1aa5f432da6b.jpg
new file mode 100644
index 0000000..731f8e9
--- /dev/null
+++ b/src/main/webapp/upload/3f064ff7-7f92-40cc-9bf1-1aa5f432da6b.jpg
Binary files differ
diff --git a/src/main/webapp/upload/98e3873c-c49a-40df-9935-4df7ade7f7b9.jpeg b/src/main/webapp/upload/98e3873c-c49a-40df-9935-4df7ade7f7b9.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/98e3873c-c49a-40df-9935-4df7ade7f7b9.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/aaa141d4-5ced-4723-8401-934f2838b784.jpeg b/src/main/webapp/upload/aaa141d4-5ced-4723-8401-934f2838b784.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/aaa141d4-5ced-4723-8401-934f2838b784.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/c336e0bb-23c1-4cce-b2cd-c9c04f2b26b1.jpeg b/src/main/webapp/upload/c336e0bb-23c1-4cce-b2cd-c9c04f2b26b1.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/c336e0bb-23c1-4cce-b2cd-c9c04f2b26b1.jpeg
Binary files differ
diff --git a/src/main/webapp/upload/dd0322f3-af72-40ac-ac07-22c8cd7f1b7d.jpg b/src/main/webapp/upload/dd0322f3-af72-40ac-ac07-22c8cd7f1b7d.jpg
new file mode 100644
index 0000000..731f8e9
--- /dev/null
+++ b/src/main/webapp/upload/dd0322f3-af72-40ac-ac07-22c8cd7f1b7d.jpg
Binary files differ
diff --git a/src/main/webapp/upload/fe22bca8-770a-47e5-90be-a58e251a421e.jpeg b/src/main/webapp/upload/fe22bca8-770a-47e5-90be-a58e251a421e.jpeg
new file mode 100644
index 0000000..ab147e4
--- /dev/null
+++ b/src/main/webapp/upload/fe22bca8-770a-47e5-90be-a58e251a421e.jpeg
Binary files differ

--
Gitblit v1.9.3