From 37670b2ff5379e8603d3b0eec6d493daf2d6cfcb Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 10 Jul 2025 19:26:55 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java |   14 
 src/main/java/com/nq/ws/WebsocketRunClient.java                      |    6 
 src/main/java/com/nq/controller/echo/EChoController.java             |    2 
 src/main/java/com/nq/utils/task/stock/StockTask.java                 |    2 
 src/main/java/com/nq/service/impl/EchoServices.java                  |    4 
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java       |   18 
 src/main/java/com/nq/controller/AdminApiController.java              |  119 +++++++++++
 pom.xml                                                              |   11 +
 src/main/java/com/nq/pojo/SiteAdmin.java                             |   11 +
 src/main/java/com/nq/service/impl/UserServiceImpl.java               |   15 
 src/main/resources/application.properties                            |   65 +++---
 src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java       |    6 
 src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java          |   68 ++++--
 src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java       |    6 
 src/main/java/com/nq/service/ISiteAdminService.java                  |    6 
 src/main/java/com/nq/service/impl/PriceServicesImpl.java             |    2 
 src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java           |   36 ---
 src/main/java/com/nq/controller/UserPositionCheckDzController.java   |    4 
 src/main/java/com/nq/service/impl/PayServiceImpl.java                |    4 
 src/main/java/com/nq/utils/task/stock/CarryPositionTask.java         |    2 
 src/main/java/com/nq/enums/EStockType.java                           |   36 ++-
 src/main/java/com/nq/pojo/UnbindingGoogleAuthModel.java              |   17 +
 src/main/java/com/nq/service/impl/TradingHourServiceImpl.java        |    2 
 src/main/java/com/nq/service/impl/StockServiceImpl.java              |    4 
 src/main/java/com/nq/utils/redis/RedisKeyUtil.java                   |    2 
 src/main/java/com/nq/controller/protol/UserController.java           |   80 ++++---
 src/main/java/com/nq/utils/task/news/NewsTask.java                   |    2 
 src/main/java/com/nq/ws/WebSocketClientBeanConfig.java               |    2 
 src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java           |    2 
 src/main/java/com/nq/service/impl/StockDzServiceImpl.java            |    4 
 src/main/java/com/nq/pojo/UpdateGoogleAuthDto.java                   |   21 ++
 src/main/java/com/nq/pojo/GoogleAuthDto.java                         |   14 +
 src/main/resources/application.yml                                   |   10 
 33 files changed, 384 insertions(+), 213 deletions(-)

diff --git a/pom.xml b/pom.xml
index 058a9cb..02463df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.4.1</version> <!-- 或最新版本 -->
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.4.1</version> <!-- 如果需要生成/解析二维码图片 -->
+        </dependency>
 
         <dependency>
             <groupId>org.flywaydb</groupId>
diff --git a/src/main/java/com/nq/controller/AdminApiController.java b/src/main/java/com/nq/controller/AdminApiController.java
index 3820b97..920ddc4 100644
--- a/src/main/java/com/nq/controller/AdminApiController.java
+++ b/src/main/java/com/nq/controller/AdminApiController.java
@@ -1,9 +1,13 @@
 package com.nq.controller;
 
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.google.common.collect.Maps;
 import com.nq.common.ServerResponse;
-import com.nq.pojo.SiteAdminIndex;
-import com.nq.pojo.SiteSpread;
+import com.nq.dao.SiteAdminMapper;
+import com.nq.pojo.*;
 import com.nq.service.*;
+import com.nq.service.impl.GoogleAuthenticator;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.redis.CookieUtils;
 import com.nq.utils.redis.JsonUtil;
@@ -13,14 +17,19 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.validation.Valid;
 
+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.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.Map;
 
 @Controller
 @RequestMapping({"/api/admin/"})
@@ -29,6 +38,9 @@
 
     @Autowired
     ISiteAdminService iSiteAdminService;
+
+    @Autowired
+    SiteAdminMapper siteAdminMapper;
 
     @Autowired
     ISiteSettingService iSiteSettingService;
@@ -51,8 +63,13 @@
     //管理系统登录
     @RequestMapping({"login.do"})
     @ResponseBody
-    public ServerResponse login(@RequestParam("adminPhone") String adminPhone, @RequestParam("adminPwd") String adminPwd, @RequestParam("verifyCode") String verifyCode, HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) {
-        ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, request);
+    public ServerResponse login(@RequestParam("adminPhone") String adminPhone,
+                                @RequestParam("adminPwd") String adminPwd,
+                                @RequestParam("verifyCode") String verifyCode,
+                                @RequestParam(value = "googleAuthCode", required = false) Integer googleAuthCode,
+                                HttpSession httpSession, HttpServletRequest request,
+                                HttpServletResponse response) {
+        ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, googleAuthCode,request);
 
         return serverResponse;
     }
@@ -125,8 +142,96 @@
     }
 
 
+    /**
+     * 获取当前登录用户
+     * @return
+     */
+    @GetMapping("getAdmin")
+    @ResponseBody
+    public ServerResponse getAdmin(HttpServletRequest request) {
+        String cookie_name = PropertiesUtil.getProperty("admin.cookie.name");
+        SiteAdmin siteAdmin = null;
+        if(StringUtils.isNotEmpty(cookie_name)){
+            String logintoken = CookieUtils.readLoginToken(request, cookie_name);
+            String adminJson = RedisShardedPoolUtils.get(logintoken);
+            siteAdmin = (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class);
+            siteAdmin = siteAdminMapper.selectById(siteAdmin.getId());
+        }
+        return ServerResponse.createBySuccess(siteAdmin);
+    }
 
 
+    /**
+     * 获取谷歌验证码密钥
+     * @return
+     */
+    @GetMapping("getLoginGoogleAuthSecret")
+    @ResponseBody
+    public ServerResponse getLoginGoogleAuthSecret(HttpServletRequest request) {
+        GoogleAuthDto dto = iSiteAdminService.getGoogleAuth(request);
+        return ServerResponse.createBySuccess(dto);
+    }
+
+    /**
+     * 绑定谷歌验证码
+     */
+    @PostMapping("bindGoogleAuth")
+    @ResponseBody
+    public ServerResponse updateGoogleAuth(@RequestParam("id") String id,
+                                           @RequestParam("googleAuthCode") String googleAuthCode,
+                                           @RequestParam("secret") String secret) {
+        SiteAdmin siteAdmin = siteAdminMapper.selectById(id);
+        if (siteAdmin == null) {
+            return ServerResponse.createByErrorMsg("当前用户未找到");
+        }
+        long t = System.currentTimeMillis();
+        GoogleAuthenticator ga = new GoogleAuthenticator();
+        ga.setWindowSize(5);
+        if (siteAdmin.getGoogleAuthBind()) {
+            return ServerResponse.createByErrorMsg("谷歌验证码已绑定");
+        }
+        boolean userFlag = ga.check_code(secret, Long.valueOf(googleAuthCode), t);
+        if (!userFlag) {
+            return ServerResponse.createByErrorMsg("谷歌验证码错误");
+        }
+        siteAdmin.setGoogleAuthBind(true);
+        siteAdmin.setGoogleAuthSecret(secret);
+        siteAdminMapper.updateById(siteAdmin);
+        return ServerResponse.createBySuccess();
+    }
+
+
+    /**
+     * 解绑谷歌验证码
+     * @param param
+     * @return
+     */
+    @PostMapping("/unbindingGoogleAuth")
+    @ResponseBody
+    public ServerResponse unbindingGoogleAuth(@RequestParam("id") String id,
+                                              @RequestParam("rootGoogleAuthCode") String rootGoogleAuthCode) {
+        SiteAdmin siteAdmin = siteAdminMapper.selectById(id);
+        if (siteAdmin == null) {
+            return ServerResponse.createByErrorMsg("当前用户未找到");
+        }
+        long t = System.currentTimeMillis();
+        GoogleAuthenticator ga = new GoogleAuthenticator();
+        ga.setWindowSize(5);
+        boolean flag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(rootGoogleAuthCode), t);
+        if (flag) {
+            if (!siteAdmin.getGoogleAuthBind()) {
+                return ServerResponse.createByErrorMsg("谷歌验证码未绑定,无需解绑!");
+
+            }
+            siteAdmin.setGoogleAuthBind(false);
+            siteAdmin.setGoogleAuthSecret("");
+            siteAdminMapper.updateById(siteAdmin);
+        } else {
+            return ServerResponse.createByErrorMsg("超级谷歌验证码错误");
+        }
+        return ServerResponse.createBySuccess();
+    }
+
 
 
 //    //页面样式设置
diff --git a/src/main/java/com/nq/controller/UserPositionCheckDzController.java b/src/main/java/com/nq/controller/UserPositionCheckDzController.java
index 4af1c30..eff0556 100644
--- a/src/main/java/com/nq/controller/UserPositionCheckDzController.java
+++ b/src/main/java/com/nq/controller/UserPositionCheckDzController.java
@@ -107,7 +107,7 @@
 
         StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", userPositionCheckDz.getDzId()));
 
-        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId());
+        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId());
         if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
             return ServerResponse.createByErrorMsg("用户账户有待补资金未补齐,审核失败");
         }
@@ -132,7 +132,7 @@
         userPosition.setId(null);
         userPosition.setDzId(stockDz.getId());
         userPositionMapper.insert(userPosition);
-        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
+        userAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
         return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓");
     }
 }
diff --git a/src/main/java/com/nq/controller/echo/EChoController.java b/src/main/java/com/nq/controller/echo/EChoController.java
index 6ab33d2..0049f54 100644
--- a/src/main/java/com/nq/controller/echo/EChoController.java
+++ b/src/main/java/com/nq/controller/echo/EChoController.java
@@ -62,7 +62,7 @@
             }
         }
         User user = this.iUserService.getCurrentRefreshUser(request);
-        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId());
+        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId());
         if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
             return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
         }
diff --git a/src/main/java/com/nq/controller/protol/UserController.java b/src/main/java/com/nq/controller/protol/UserController.java
index bfa4713..b01f91a 100644
--- a/src/main/java/com/nq/controller/protol/UserController.java
+++ b/src/main/java/com/nq/controller/protol/UserController.java
@@ -417,30 +417,32 @@
     @RequestMapping({"thirdPartyRecharge.do"})
     @ResponseBody
     public ServerResponse thirdPartyRecharge(@RequestParam("tradeAmoun") String tradeAmoun,@RequestParam("type") Integer type,HttpServletRequest request) {
-        payLock.lock();
-        try {
-            if (payCreated.get()) {
-                return ServerResponse.createByErrorMsg("当前充值人数过多,请稍后重试", request);
-            }
-            if (!isIntegerGreaterThan100(tradeAmoun)) {
-                return ServerResponse.createByErrorMsg("请输入整数!",request);
-            }
-            if(null == type){
-                return ServerResponse.createByErrorMsg("请选择支付通道!",request);
-            }
-            if(new BigDecimal(tradeAmoun).compareTo(new BigDecimal("1000")) < 0){
-                return ServerResponse.createByErrorMsg("请重新输入,最低充值金额:1000", request);
-            }
-
-            payCreated.set(true);
-            return payService.thirdPartyRecharge(request,tradeAmoun,type);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return ServerResponse.createByErrorMsg("获取充值链接异常,请稍后重试", request);
-        }  finally{
-            payLock.unlock();
-            payCreated.set(false);
-        }
+        return ServerResponse.createBySuccess("请联系客服充值");
+//        payLock.lock();
+//        try {
+//
+//            if (payCreated.get()) {
+//                return ServerResponse.createByErrorMsg("当前充值人数过多,请稍后重试", request);
+//            }
+//            if (!isIntegerGreaterThan100(tradeAmoun)) {
+//                return ServerResponse.createByErrorMsg("请输入整数!",request);
+//            }
+//            if(null == type){
+//                return ServerResponse.createByErrorMsg("请选择支付通道!",request);
+//            }
+//            if(new BigDecimal(tradeAmoun).compareTo(new BigDecimal("1000")) < 0){
+//                return ServerResponse.createByErrorMsg("请重新输入,最低充值金额:1000", request);
+//            }
+//
+//            payCreated.set(true);
+//            return payService.thirdPartyRecharge(request,tradeAmoun,type);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return ServerResponse.createByErrorMsg("获取充值链接异常,请稍后重试", request);
+//        }  finally{
+//            payLock.unlock();
+//            payCreated.set(false);
+//        }
     }
     // 判断字符串是否是整数且大于100
     public static boolean isIntegerGreaterThan100(String str) {
@@ -452,19 +454,19 @@
         }
     }
 
-    /**
-     * 充值1异步接收地址
-     */
-    @PostMapping({"rechargeCallback.do"})
-    public void rechargeCallback(PaymentResponse vo, HttpServletResponse response) throws IOException {
-        payService.rechargeCallback(vo,response);
-    }
-
-    /**
-     * 充值2异步接收地址
-     */
-    @PostMapping({"rechargeCallbackTwo.do"})
-    public void rechargeCallbackTwo(TransactionStatusVo vo, HttpServletResponse response) throws IOException {
-        payService.rechargeCallbackTwo(vo,response);
-    }
+//    /**
+//     * 充值1异步接收地址
+//     */
+//    @PostMapping({"rechargeCallback.do"})
+//    public void rechargeCallback(PaymentResponse vo, HttpServletResponse response) throws IOException {
+//        payService.rechargeCallback(vo,response);
+//    }
+//
+//    /**
+//     * 充值2异步接收地址
+//     */
+//    @PostMapping({"rechargeCallbackTwo.do"})
+//    public void rechargeCallbackTwo(TransactionStatusVo vo, HttpServletResponse response) throws IOException {
+//        payService.rechargeCallbackTwo(vo,response);
+//    }
 }
diff --git a/src/main/java/com/nq/enums/EStockType.java b/src/main/java/com/nq/enums/EStockType.java
index 373ee52..91ffe4b 100644
--- a/src/main/java/com/nq/enums/EStockType.java
+++ b/src/main/java/com/nq/enums/EStockType.java
@@ -10,12 +10,13 @@
 public enum EStockType {
 
 
-
-    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("JS_IN_HTTP_URL"),PropertiesUtil.getProperty("JS_IN_KEY"),"INR","₹");
+//
+//    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("JS_IN_HTTP_URL"),PropertiesUtil.getProperty("JS_IN_KEY"),"INR","₹");
+    JP("JP","日本股票","35", PropertiesUtil.getProperty("JP_HTTP_API"),PropertiesUtil.getProperty("JP_KEY"),"JPY","¥");
 //    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"));
@@ -42,18 +43,21 @@
     }
 
     public static EStockType getEStockTypeByCode(String code){
-        if(EStockType.US.getCode().equals(code)){
-            return US;
+        if(EStockType.JP.getCode().equals(code)){
+            return JP;
 
-        }else if(EStockType.HK.getCode().equals(code)){
-            return  HK;
-        }else if(EStockType.MAS.getCode().equals(code)){
-            return  MAS;
-        }else if(EStockType.IN.getCode().equals(code)){
-            return  IN;
-        }else{
-            return  MAS;
+        }else {
+            return null;
         }
+//        else if(EStockType.HK.getCode().equals(code)){
+//            return  HK;
+//        }else if(EStockType.MAS.getCode().equals(code)){
+//            return  MAS;
+//        }else if(EStockType.IN.getCode().equals(code)){
+//            return  IN;
+//        }else{
+//            return  MAS;
+//        }
     }
 
     public String getContryId() {
diff --git a/src/main/java/com/nq/pojo/GoogleAuthDto.java b/src/main/java/com/nq/pojo/GoogleAuthDto.java
new file mode 100644
index 0000000..caa37e7
--- /dev/null
+++ b/src/main/java/com/nq/pojo/GoogleAuthDto.java
@@ -0,0 +1,14 @@
+package com.nq.pojo;
+
+import lombok.Data;
+
+@Data
+public class GoogleAuthDto {
+
+
+    //密钥
+    private  String googleAuthSecret;
+
+    //密钥
+    private  String googleAuthImg;
+}
diff --git a/src/main/java/com/nq/pojo/SiteAdmin.java b/src/main/java/com/nq/pojo/SiteAdmin.java
index 3a5fa95..fea278a 100644
--- a/src/main/java/com/nq/pojo/SiteAdmin.java
+++ b/src/main/java/com/nq/pojo/SiteAdmin.java
@@ -1,6 +1,7 @@
 package com.nq.pojo;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
 import java.util.Date;
@@ -15,6 +16,14 @@
     private Date addTime;
     private String token;
 
-
+    /**
+     * 谷歌验证器
+     */
+    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
+    private String googleAuthSecret;
+    /**
+     * 谷歌验证器是否绑定
+     */
+    private Boolean googleAuthBind=false;
 }
 
diff --git a/src/main/java/com/nq/pojo/UnbindingGoogleAuthModel.java b/src/main/java/com/nq/pojo/UnbindingGoogleAuthModel.java
new file mode 100644
index 0000000..e808c12
--- /dev/null
+++ b/src/main/java/com/nq/pojo/UnbindingGoogleAuthModel.java
@@ -0,0 +1,17 @@
+package com.nq.pojo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class UnbindingGoogleAuthModel {
+
+
+    private  long id;
+
+
+    //谷歌验证码
+    @NotBlank
+    private String rootGoogleAuthCode;
+}
diff --git a/src/main/java/com/nq/pojo/UpdateGoogleAuthDto.java b/src/main/java/com/nq/pojo/UpdateGoogleAuthDto.java
new file mode 100644
index 0000000..f8b369b
--- /dev/null
+++ b/src/main/java/com/nq/pojo/UpdateGoogleAuthDto.java
@@ -0,0 +1,21 @@
+package com.nq.pojo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class UpdateGoogleAuthDto {
+
+
+    private  long id;
+
+    //谷歌密钥
+    @NotBlank
+    private String secret;
+
+
+    //验证码
+    private String googleAuthCode;
+
+}
diff --git a/src/main/java/com/nq/service/ISiteAdminService.java b/src/main/java/com/nq/service/ISiteAdminService.java
index 07329f9..fa6d977 100644
--- a/src/main/java/com/nq/service/ISiteAdminService.java
+++ b/src/main/java/com/nq/service/ISiteAdminService.java
@@ -3,12 +3,13 @@
 
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
+import com.nq.pojo.GoogleAuthDto;
 import com.nq.pojo.SiteAdmin;
 
 import javax.servlet.http.HttpServletRequest;
 
 public interface ISiteAdminService {
-  ServerResponse login(String paramString1, String paramString2, String paramString3, HttpServletRequest paramHttpServletRequest);
+  ServerResponse login(String paramString1, String paramString2, String paramString3, Integer googleAuthCode,HttpServletRequest paramHttpServletRequest);
   
   ServerResponse<PageInfo> listByAdmin(String paramString1, String paramString2, HttpServletRequest paramHttpServletRequest, int paramInt1, int paramInt2);
   
@@ -26,7 +27,10 @@
   
   ServerResponse count();
 
+
   ServerResponse deleteAdmin(Integer adminId);
 
   ServerResponse moneyCount(String agentId, String startTime, String entTime);
+
+  GoogleAuthDto getGoogleAuth(HttpServletRequest request);
 }
diff --git a/src/main/java/com/nq/service/impl/EchoServices.java b/src/main/java/com/nq/service/impl/EchoServices.java
index 972ddc6..07cf897 100644
--- a/src/main/java/com/nq/service/impl/EchoServices.java
+++ b/src/main/java/com/nq/service/impl/EchoServices.java
@@ -77,7 +77,7 @@
 
             UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
                     .eq(UserAssets::getUserId, orderEchoBean.getUserId())
-                    .eq(UserAssets::getAccectType, "IN")
+                    .eq(UserAssets::getAccectType, "JP")
             );
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(money));
             userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(money));
@@ -120,7 +120,7 @@
                     BigDecimal aml = incomeAmount.add(money);
                     UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
                             .eq(UserAssets::getUserId, orderEchoBean.getUserId())
-                            .eq(UserAssets::getAccectType, "IN")
+                            .eq(UserAssets::getAccectType, "JP")
                     );
                     if (userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0) {
                         continue;
diff --git a/src/main/java/com/nq/service/impl/PayServiceImpl.java b/src/main/java/com/nq/service/impl/PayServiceImpl.java
index 7b1c67a..eb53af3 100644
--- a/src/main/java/com/nq/service/impl/PayServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/PayServiceImpl.java
@@ -724,7 +724,7 @@
             }
             UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class)
                     .eq(UserAssets::getUserId, paymentRecharge.getUserId())
-                    .eq(UserAssets::getAccectType, "IN")
+                    .eq(UserAssets::getAccectType, "JP")
             );
             ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getOriAmount().toString(), "2");
             if(serverResponse.getStatus() == 0){
@@ -936,7 +936,7 @@
             }
             UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class)
                     .eq(UserAssets::getUserId, paymentRecharge.getUserId())
-                    .eq(UserAssets::getAccectType, "IN")
+                    .eq(UserAssets::getAccectType, "JP")
             );
             ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getAccount_fee().toString(), "2");
             if(serverResponse.getStatus() == 0){
diff --git a/src/main/java/com/nq/service/impl/PriceServicesImpl.java b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
index 05dd037..5ad56e6 100644
--- a/src/main/java/com/nq/service/impl/PriceServicesImpl.java
+++ b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -112,7 +112,7 @@
 
     public String doPost(String pid) {
         // 从配置中获取 API URL,并拼接 key
-        String apiUrl = PropertiesUtil.getProperty("JS_IN_HTTP_URL") + "stock?key=" + PropertiesUtil.getProperty("JS_IN_KEY");
+        String apiUrl = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?key=" + PropertiesUtil.getProperty("JP_KEY");
         String result = null;
         try {
             URL url = new URL(apiUrl);
diff --git a/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java b/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
index 863377c..a5ad4ff 100644
--- a/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
@@ -1,8 +1,10 @@
 package com.nq.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nq.dao.*;
 import com.github.pagehelper.PageHelper;
 
@@ -30,6 +32,7 @@
 import com.nq.utils.PropertiesUtil;
 
 import com.nq.utils.SymmetricCryptoUtil;
+import com.nq.utils.redis.CookieUtils;
 import com.nq.utils.redis.JsonUtil;
 import com.nq.utils.redis.RedisConst;
 import com.nq.utils.redis.RedisShardedPoolUtils;
@@ -109,53 +112,44 @@
     @Autowired
     AgentUserMapper agentUserMapper;
 
-    public ServerResponse login(String adminPhone, String adminPwd, String verifyCode, HttpServletRequest request) {
+    public ServerResponse login(String adminPhone, String adminPwd, String verifyCode,Integer googleAuthCode, HttpServletRequest request) {
 
         if (StringUtils.isBlank(verifyCode)) {
-
             return ServerResponse.createByErrorMsg("验证码不能为空");
-
         }
-//
-        String original = (String) request.getSession().getAttribute("KAPTCHA_SESSION_KEY");
 
-        /*if (!verifyCode.equalsIgnoreCase(original)) {
-
-            return ServerResponse.createByErrorMsg("验证码错误");
-
-        }*/
-
-
-        if (StringUtils.isBlank(adminPhone) || StringUtils.isBlank(adminPwd)) {
+        if (StringUtils.isBlank(adminPhone) || StringUtils.isBlank(adminPwd) ) {
 
             return ServerResponse.createByErrorMsg("参数不能为空");
 
         }
 
-        SymmetricCryptoUtil.decryptPassword("8OTlTNZ9EwQ29Pf0R8a37Q==");
         adminPwd = SymmetricCryptoUtil.encryptPassword(adminPwd);
         SiteAdmin siteAdmin = this.siteAdminMapper.login(adminPhone, adminPwd);
-//        SiteAdmin siteAdmin = (SiteAdmin) siteAdminMapper.selectOne(new QueryWrapper<SiteAdmin>().eq("admin_phone", adminPhone).eq("admin_pwd", adminPwd));
-
         if (siteAdmin == null) {
-
             return ServerResponse.createByErrorMsg("账号密码错误");
-
         }
-
-
         if (siteAdmin.getIsLock().intValue() == 1) {
-
             return ServerResponse.createByErrorMsg("账号已被锁定");
-
         }
-
+        if(siteAdmin.getGoogleAuthBind() && ObjectUtil.isEmpty(googleAuthCode)){
+            return ServerResponse.createByErrorMsg("谷歌验证码不能为空");
+        }
+        if(siteAdmin.getGoogleAuthBind()){
+            long t = System.currentTimeMillis();
+            GoogleAuthenticator ga = new GoogleAuthenticator();
+            ga.setWindowSize(5);
+            boolean userFlag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(googleAuthCode), t);
+            if (!userFlag) {
+                return ServerResponse.createByErrorMsg("谷歌验证码错误!");
+            }
+        }
 
         siteAdmin.setAdminPwd(null);
         HttpSession httpSession = request.getSession();
         String token = RedisConst.getAdminRedisKey(httpSession.getId());
 
-        String str = RedisShardedPoolUtils.setEx(token,
+        RedisShardedPoolUtils.setEx(token,
                 JsonUtil.obj2String(siteAdmin), 999999);
 
 
@@ -461,6 +455,30 @@
         return ServerResponse.createBySuccess(map);
     }
 
+    @Override
+    public GoogleAuthDto getGoogleAuth(HttpServletRequest request) {
+        String secretKey = GoogleAuthenticator.generateSecretKey();
+        QrConfig config = new QrConfig(345, 345);
+        config.setMargin(3);
+        String cookie_name = PropertiesUtil.getProperty("admin.cookie.name");
+        SiteAdmin siteAdmin = null;
+        if(StringUtils.isNotEmpty(cookie_name)){
+            siteAdmin = getAdmin(cookie_name,request);
+        }
+        String content = String.format("otpauth://totp/%s?secret=%s", siteAdmin.getAdminName(),secretKey);
+        String base64 = QrCodeUtil.generateAsBase64(content, config, "png");
+        GoogleAuthDto dto = new GoogleAuthDto();
+        dto.setGoogleAuthImg(base64);
+        dto.setGoogleAuthSecret(secretKey);
+        return dto;
+    }
+
+    public SiteAdmin getAdmin(String cookie_name,HttpServletRequest request){
+        String logintoken = CookieUtils.readLoginToken(request, cookie_name);
+        String adminJson = RedisShardedPoolUtils.get(logintoken);
+        return (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class);
+    }
+
     public  static  List<Integer>  getAllChildrenIds(AgentUserNodeVO  parent)  {
         List<Integer>  allChildrenIds  =  new ArrayList<>();
         getAllChildrenIdsHelper(parent,  allChildrenIds);
diff --git a/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java b/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java
index 325e82b..d14d73c 100644
--- a/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteInfoServiceImpl.java
@@ -100,42 +100,12 @@
             log.info("当前以后名");
             if(user != null ){
                 AgentUser agentUser = agentUserMapper.findAgentByAgentId(user.getAgentId());
-                if(agentUser != null){
+                if(agentUser != null) {
                     siteInfo.setAgentCode(agentUser.getAgentCode());
-                    if(!agentUser.getOnLineServices().isEmpty()){
-//                        siteInfo.setOnlineService(agentUser.getOnLineServices());
-                        if(agentUser.getId().equals(17)){
-                            siteInfo.setOnlineService("https://t.me/DuroCaspital035");
-                        }else if(agentUser.getId().equals(18)){
-                            siteInfo.setOnlineService("https://t.me/DC_1352");
-                        }else if(agentUser.getId().equals(19)){
-                            siteInfo.setOnlineService("https://t.me/DCBlocktrades");
-                        }else if(agentUser.getId().equals(20)){
-                            siteInfo.setOnlineService("https://t.me/JOP1090Q");
-                        }else if(agentUser.getId().equals(22)){
-                            siteInfo.setOnlineService("https://t.me/JOP1090Q");
-                        }else if(agentUser.getId().equals(23)){
-                            siteInfo.setOnlineService("https://t.me/DCcustomerservice");
-                        }else if(agentUser.getId().equals(24)){
-                            siteInfo.setOnlineService("https://t.me/Acc0880");
-                        }else if(agentUser.getId().equals(25)){
-                            siteInfo.setOnlineService("https://t.me/DCLisaService");
-                        }else if(agentUser.getId().equals(26)){
-                            siteInfo.setOnlineService("https://t.me/AliceKKQ");
-                        }else if(agentUser.getId().equals(27)){
-                            siteInfo.setOnlineService("https://t.me/Duro_Capital");
-                        }else if(agentUser.getId().equals(28)){
-                            siteInfo.setOnlineService("@https://t.me/DC11023");
-                        }else if(agentUser.getId().equals(29)){
-                            siteInfo.setOnlineService("https://t.me/Duro_Capital");
-                        }else if(agentUser.getId().equals(30)){
-                            siteInfo.setOnlineService("https://t.me/DL9855\t");
-                        }
+                    if (!agentUser.getOnLineServices().isEmpty()) {
+                        siteInfo.setOnlineService(agentUser.getOnLineServices());
                     }
-
                 }
-            }else{
-                siteInfo.setOnlineService("https://t.me/Duro_Capital");
             }
             return ServerResponse.createBySuccess(siteInfo);
         }
diff --git a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
index fb7a0d9..12a5a4c 100644
--- a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
@@ -132,7 +132,7 @@
 
     @Override
     public void grabNews() {
-        addNews(1, PropertiesUtil.getProperty("JS_IN_HTTP_URL") + "stock-markets?key=" + PropertiesUtil.getProperty("JS_IN_KEY") + "&type=6");
+        addNews(1, PropertiesUtil.getProperty("JP_HTTP_API") + "stock-markets?key=" + PropertiesUtil.getProperty("JP_KEY") + "&type=1&country_id=35");
     }
 
     private void addNews(Integer type, String url) {
diff --git a/src/main/java/com/nq/service/impl/StockDzServiceImpl.java b/src/main/java/com/nq/service/impl/StockDzServiceImpl.java
index e225249..3c8ce9d 100644
--- a/src/main/java/com/nq/service/impl/StockDzServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockDzServiceImpl.java
@@ -55,10 +55,6 @@
     @Override
     public ServerResponse getDzList(int pageNum, int pageSize, String orderBy, String keyWords,  HttpServletRequest request) {
         PageHelper.startPage(pageNum, pageSize);
-        if (keyWords == null || keyWords.trim().isEmpty()) {
-            // 如果 keyWords 为空,则直接返回空分页结果
-            return ServerResponse.createBySuccess(new RPageInfo());
-        }
         String formatDate = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN);
         List<StockDz> stockTypeDz = stockMapper.findStockTypeDz(orderBy, keyWords,formatDate);
         RPageInfo pageInfo = new RPageInfo();
diff --git a/src/main/java/com/nq/service/impl/StockServiceImpl.java b/src/main/java/com/nq/service/impl/StockServiceImpl.java
index 5aefa76..e645c0c 100644
--- a/src/main/java/com/nq/service/impl/StockServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -134,7 +134,7 @@
         List<Stock> stockList = new ArrayList<>();
         if (stockType.equals("99")) {
             PageHelper.startPage(pageNum, pageSize);
-            stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "IN", Integer.valueOf(0)));
+            stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "JP", Integer.valueOf(0)));
         } else if (stockType.equals("100")) {
             User user = iUserService.getCurrentRefreshUser(request);
             if (user == null) {
@@ -440,7 +440,7 @@
         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"));
+        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, pid).eq(Stock::getStockType, "JP"));
         BigDecimal nowPrice = iPriceServices.getNowPrice(stock.getStockCode());
         Map singleStock = getSingleStock(stock.getStockCode());
         StockVO stockVO = (StockVO)singleStock.get("stock");
diff --git a/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java b/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
index 0d35cf8..bef41b5 100644
--- a/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
@@ -48,7 +48,7 @@
     @Override
     public Boolean timeCheck(String  stockCode) {
         StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
-        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","IN"));
+        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","JP"));
         if(stockSetting!= null){
             // 说明进入盘前交易或者盘后交易时间
             Date newDate = new Date();
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 2ff418f..42a85fa 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -191,7 +191,7 @@
             BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever));
             BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt);
 
-            BigDecimal   fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
+            BigDecimal   fundratio = new BigDecimal(String.valueOf(user.getFundRatio().isEmpty() ? 100 : user.getFundRatio())).divide(new BigDecimal(100));
             BigDecimal availableBalance =  fundratio.multiply(userAssets.getAvailableBalance());
             if (availableBalance.compareTo(buyAmt.add(orderFree)) < 0) {
                 return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
@@ -344,7 +344,7 @@
 
         UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
                 .eq(UserAssets::getUserId, userPosition.getUserId())
-                .eq(UserAssets::getAccectType, "IN")
+                .eq(UserAssets::getAccectType, "JP")
         );
         if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
             return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
@@ -1330,7 +1330,7 @@
 //        StringBuffer gid = new StringBuffer();
 //        gid.append(stockSubscribe.getStockType()!=null?stockSubscribe.getStockType():"");
 //        gid.append(userStockSubscribe.getNewCode()!=null?userStockSubscribe.getNewCode():"stock code invaild");
-        userPosition.setStockGid("IN");
+        userPosition.setStockGid("JP");
         userPosition.setBuyOrderId(GeneratePosition.getPositionId());
         userPosition.setBuyOrderTime(new Date());
         userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice());
@@ -1384,12 +1384,12 @@
         userPosition.setNewId(stockSubscribe.getNewlistId());
         int ret = 0;
         ret = this.userPositionMapper.insert(userPosition);
-        UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userPosition.getUserId());
+        UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", userPosition.getUserId());
         if(null == userAssets){
             return ServerResponse.createByErrorMsg("新股转持仓失败");
         }
         userAssetsMapper.updateById(userAssets);
-        iUserAssetsServices.availablebalanceChange("IN", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
+        iUserAssetsServices.availablebalanceChange("JP", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
         if (ret > 0) {
             userStockSubscribe.setStatus(5);
             userStockSubscribeMapper.update1(userStockSubscribe);
@@ -1683,7 +1683,7 @@
         if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
             return ServerResponse.createByErrorMsg("Order failed, account has been locked");
         }
-        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId());
+        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId());
         if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
             return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
         }
@@ -1733,8 +1733,8 @@
         UserPosition userPosition = getUserPosition(dzId,num, user, stockDz, nowPrice, stock, buyAmt);
         userPositionMapper.insert(userPosition);
         BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(buyAmt);
-        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
-        iUserAssetsServices.availablebalanceChange("IN", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
+        userAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
+        iUserAssetsServices.availablebalanceChange("JP", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
         return ServerResponse.createBySuccess("购买成功", request);
     }
 
@@ -1792,7 +1792,7 @@
             for (UserPosition position : list) {
                 UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
                         .eq(UserAssets::getUserId, position.getUserId())
-                        .eq(UserAssets::getAccectType, "IN")
+                        .eq(UserAssets::getAccectType, "JP")
                 );
                 if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
                     continue;
diff --git a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
index ea2e2ff..1f3bc75 100644
--- a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
@@ -223,8 +223,8 @@
 
         for (int i = 0; i <userRecharges.size() ; i++) {
           SitePay s =   sitePayMapper.selectById(userRecharges.get(i).getPayId());
-            userRecharges.get(i).setAssetsType(EStockType.IN.getSymbol1());
-            userRecharges.get(i).setChannelName(EStockType.IN.getSymbol());
+            userRecharges.get(i).setAssetsType(EStockType.JP.getSymbol1());
+            userRecharges.get(i).setChannelName(EStockType.JP.getSymbol());
         }
 
         return ServerResponse.createBySuccess(pageInfo);
@@ -344,7 +344,7 @@
         userRecharge.setPayTime(new Date());
         userRecharge.setOrderStatus(Integer.valueOf(1));
         userRecharge.setPayId(1);
-        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(),
+        userAssetsServices.availablebalanceChange(EStockType.JP.getCode(),
                 userId,EUserAssets.TOP_UP,new BigDecimal(amt),"","");
         int insertCount = this.userRechargeMapper.insert(userRecharge);
         if (insertCount > 0) {
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index 922b26a..48f6ca5 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -189,7 +189,6 @@
         user.setRegAddress(uadd);
 
         user.setIsLogin(Integer.valueOf(0));
-
         int insertCount = this.userMapper.insert(user);
 
         if (insertCount > 0) {
@@ -210,7 +209,7 @@
             if (user.getIsLogin().intValue() == 1) {
                 return ServerResponse.createByErrorMsg("登录失败。账户锁定",request);
             }
-            userAssetsServices.assetsByTypeAndUserId(EStockType.IN.getCode(),user.getId());
+            userAssetsServices.assetsByTypeAndUserId(EStockType.JP.getCode(),user.getId());
             this.iSiteLoginLogService.saveLog(user, request);
             return ServerResponse.createBySuccess(user);
         }
@@ -527,7 +526,7 @@
             rUserAssets.setAmountToBeCovered((userAssets.getAmountToBeCovered().add(userAssets.getHandlingChargeWritten()).toString()));
             rUserAssets.setHandlingChargeWritten(userAssets.getHandlingChargeWritten());
             BigDecimal rate = rateServices.currencyRate(
-                    EStockType.getEStockTypeByCode(userAssets.getAccectType()),EStockType.US);
+                    EStockType.getEStockTypeByCode(userAssets.getAccectType()),EStockType.JP);
 
            BigDecimal  availableBalanceUSD = amt;
            if(amt.compareTo(BigDecimal.ZERO)>0){
@@ -613,7 +612,7 @@
         userPositions = userPositionMapper.
                 findMyPositionByCodeAndSpell(userId,
                         "","",
-                        0, "IN");
+                        0, "JP");
 
 
         List<UserPositionVO> userPositionVOS = Lists.newArrayList();
@@ -770,7 +769,7 @@
             ServerResponse money = iUserService.getMoney(user.getId());
             List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData();
             RUserAssets rUserAssets = rUserAssetsList.stream()
-                    .filter(stock -> "IN".equals(stock.getAccectType()))
+                    .filter(stock -> "JP".equals(stock.getAccectType()))
                     .findFirst()
                     .orElse(null);
 
@@ -828,8 +827,8 @@
 
         int insertCount = this.userMapper.insert(user);
          dbUser = userMapper.selectOne(queryWrapper);
-        userAssetsServices.getAvailableBalance(EStockType.IN.getCode(),dbUser.getId() );
-        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"","");
+        userAssetsServices.getAvailableBalance(EStockType.JP.getCode(),dbUser.getId() );
+        userAssetsServices.availablebalanceChange(EStockType.JP.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"","");
         if (insertCount > 0) {
             return ServerResponse.createBySuccessMsg("Success");
         }
@@ -854,7 +853,7 @@
             ServerResponse money = iUserService.getMoney(user.getId());
             List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData();
             RUserAssets rUserAssets = rUserAssetsList.stream()
-                    .filter(stock -> "IN".equals(stock.getAccectType()))
+                    .filter(stock -> "JP".equals(stock.getAccectType()))
                     .findFirst()
                     .orElse(null);
 
diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index f202434..deb6e13 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -86,7 +86,7 @@
         }
         User user = iUserService.getCurrentRefreshUser(request);
         synchronized (user.getId()){
-            UserAssets userAssets =   iUserAssetsServices.assetsByTypeAndUserId("IN",user.getId());
+            UserAssets userAssets =   iUserAssetsServices.assetsByTypeAndUserId("JP",user.getId());
             if (model.getNewCode() != null) {
                 StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>()
                         .eq("newlist_id", model.getNewlistId()));
@@ -191,7 +191,7 @@
 //                   bound =  new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
 //               }
 //
-                    BigDecimal useEnaAmount = iUserAssetsServices.getAvailableBalance(EStockType.IN.getCode(), user.getId());
+                    BigDecimal useEnaAmount = iUserAssetsServices.getAvailableBalance(EStockType.JP.getCode(), user.getId());
                     if(useEnaAmount.compareTo(bound)<0){
                         return ServerResponse.createByErrorMsg("余额不足,配售失败",request);
                     }
@@ -210,7 +210,7 @@
                     UserStockSubscribe userStockSubscribe = Convert.convert(UserStockSubscribe.class, model);
                     userStockSubscribe.setNewStockId(stockSubscribe.getNewlistId());
                     ret = userStockSubscribeMapper.insert(userStockSubscribe);
-                    iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(),EUserAssets.BUY,bound.negate(),"","");
+                    iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(),EUserAssets.BUY,bound.negate(),"","");
                     if (ret > 0) {
                         return ServerResponse.createBySuccessMsg("配售成功",request);
                     } else {
@@ -255,7 +255,7 @@
             }
 
             //客户中签直接扣除客户账户可用资金
-            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userStockSubscribe.getUserId());
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", userStockSubscribe.getUserId());
             if (model.getStatus() == 3 && model.getApplyNumber() != null){
                 if(stockSubscribe.getType() == 1){
                     model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())));
@@ -295,7 +295,7 @@
                     }
                     BigDecimal cCount = new BigDecimal(model.getApplyNums()-model.getApplyNumber());
                     BigDecimal tMoney = ((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice())).multiply(cCount);
-                    iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(),
+                    iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(),userStockSubscribe.getUserId(),
                             EUserAssets.TOP_UP,tMoney,"","");
                     model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())));
                     model.setDbMoney(BigDecimal.ZERO);
@@ -499,14 +499,14 @@
                     userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate());
                     userStockSubscribe.setStatus(4);
                     BigDecimal bigDecimal =  iUserAssetsServices.
-                            getAvailableBalance(EStockType.IN.getCode(),
+                            getAvailableBalance(EStockType.JP.getCode(),
                                     userStockSubscribe.getUserId());
 
                     BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber()));
                     if(bigDecimal.compareTo(multiply) <= 0){
                         return ServerResponse.createByErrorMsg("余额不足",request);
                     }
-                    iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(),
+                    iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(),userStockSubscribe.getUserId(),
                             EUserAssets.BUY,multiply.negate(),"","");
                     userStockSubscribe.setDbMoney(BigDecimal.ZERO);
                     userStockSubscribeMapper.update1(userStockSubscribe);
diff --git a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
index ded5e4a..4f0fedf 100644
--- a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
@@ -172,7 +172,7 @@
     }
 
     private boolean getServerResponse() {
-        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type", "IN"));
+        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type", "JP"));
         if (stockTimeSetting == null) {
             return false;
         }
@@ -240,7 +240,7 @@
             User user = this.userMapper.selectById(userWithdraw.getUserId());
 
 
-            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", user.getId());
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", user.getId());
             if (userAssets == null) {
                 return ServerResponse.createByErrorMsg("用户资金账户不存在");
             }
@@ -354,7 +354,7 @@
             if (user == null) {
                 return ServerResponse.createByErrorMsg("用户不存在");
             }
-            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", user.getId());
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", user.getId());
             if (userAssets == null) {
                 return ServerResponse.createByErrorMsg("用户资金账户不存在");
             }
diff --git a/src/main/java/com/nq/utils/redis/RedisKeyUtil.java b/src/main/java/com/nq/utils/redis/RedisKeyUtil.java
index 7e53315..22e7f74 100644
--- a/src/main/java/com/nq/utils/redis/RedisKeyUtil.java
+++ b/src/main/java/com/nq/utils/redis/RedisKeyUtil.java
@@ -91,7 +91,7 @@
 
     public static String doPost(String pid) {
         // 从配置中获取 API URL,并拼接 key
-        String apiUrl = PropertiesUtil.getProperty("JS_IN_HTTP_URL") + "stock?key=" + PropertiesUtil.getProperty("JS_IN_KEY");
+        String apiUrl = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?key=" + PropertiesUtil.getProperty("JP_KEY");
         String result = null;
         try {
             URL url = new URL(apiUrl);
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 cb0aa05..6838ebe 100644
--- a/src/main/java/com/nq/utils/task/news/NewsTask.java
+++ b/src/main/java/com/nq/utils/task/news/NewsTask.java
@@ -38,7 +38,7 @@
     /*
      * 新聞資訊抓取
      * */
-    @Scheduled(cron = "0 0/5 * * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void NewsInfoTask() {
         if (NewsInfoTask.get()) { // 判断任务是否在处理中
             return;
diff --git a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
index 9791e1a..84851b7 100644
--- a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
+++ b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -113,7 +113,7 @@
                 List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>()
                         .eq(UserStockSubscribe::getStatus, 3));
                 userStockSubscribes.forEach(f->{
-                    UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN",f.getUserId());
+                    UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP",f.getUserId());
                     if(null != userAssets && userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) == 0){
                         f.setStatus(4);
                         userStockSubscribeMapper.updateById(f);
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 635286c..a1fee8d 100644
--- a/src/main/java/com/nq/utils/task/stock/StockTask.java
+++ b/src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -69,7 +69,7 @@
         if (syncINStockDataLock.tryLock()) {
             try {
                 syncINStockData.set(true); // 设置处理中标识为true
-                loadAllStock(EStockType.IN);
+                loadAllStock(EStockType.JP);
             } finally {
                 syncINStockDataLock.unlock();
                 syncINStockData.set(false); // 设置处理中标识为false
diff --git a/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java b/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
index 3b8a3a0..d2b9ce2 100644
--- a/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
+++ b/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
@@ -22,7 +22,7 @@
 
         Map<String, WebSocketClient> retMap = new HashMap<>(2);
         try {
-            WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("JS_IN_WS_URL")),EStockType.IN);
+            WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("JS_IN_WS_URL")),EStockType.JP);
             websocketRunClient.connect();
             websocketRunClient.setConnectionLostTimeout(0);
             new Thread(() -> {
diff --git a/src/main/java/com/nq/ws/WebsocketRunClient.java b/src/main/java/com/nq/ws/WebsocketRunClient.java
index 9c2fd8a..471b111 100644
--- a/src/main/java/com/nq/ws/WebsocketRunClient.java
+++ b/src/main/java/com/nq/ws/WebsocketRunClient.java
@@ -74,7 +74,7 @@
             stockRealTimeBean.setPc(stringObjectMap.get("Chg").toString());
             stockRealTimeBean.setPcp(stringObjectMap.get("ChgPct").toString()+"%");
             stockRealTimeBean.setTime(stringObjectMap.get("Time").toString());
-            RedisKeyUtil.setCacheRealTimeStock(EStockType.IN,stockRealTimeBean);
+            RedisKeyUtil.setCacheRealTimeStock(EStockType.JP,stockRealTimeBean);
             ObjectMapper objectMapper = new ObjectMapper();
             try {
                 if(!stockRealTimeBean.getPcp().contains("-")){
@@ -83,7 +83,7 @@
                 String json = objectMapper.writeValueAsString(stockRealTimeBean);
                 sendLoca(json);
                 StockRealTimeBean stockDetailBean =  new Gson().fromJson(s, StockRealTimeBean.class);
-                RedisKeyUtil.setCacheRealTimeStock(EStockType.IN,stockDetailBean);
+                RedisKeyUtil.setCacheRealTimeStock(EStockType.JP,stockDetailBean);
             } catch (JsonProcessingException e) {
                 throw new RuntimeException(e);
             }
@@ -101,7 +101,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 5fbe190..8199de9 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -17,10 +17,10 @@
 ftp.user=ftp_stock
 ftp.pass=123456
 ftp.address =/www/wwwroot/ftp_stock/
-ftp.server.http.prefix=https://img.durocaspitall.com/
+ftp.server.http.prefix=https://img.yanshiz.com/
 
 redis1.ip=localhost
-redis1.port=6379
+redis1.port=6380
 redis1.pwd=
 redis1.timeout=10000
 redis.max.total=50
@@ -47,42 +47,45 @@
 #IN_NEW_HTTP_API = http://api-in-2.js-stock.top/
 #IN_NEW_KEY = eVKtHt7aG4m6ozwWL9qG
 
-JS_IN_HTTP_API = http://api-in-3-socket.js-stock.top
-JS_IN_HTTP_URL = http://api-in-pro.js-stock.top/
-JS_IN_WS_URL = ws://api-in-pro-ws.js-stock.top
-JS_IN_KEY = xKChgi47AP1NMwMeYI3c
-
-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://test-ws.js-stock.top
-HK_KEY = mG8QQDdjGuLjLnrryd0B
+#JS_IN_HTTP_API = http://api-in-3-socket.js-stock.top
+#JS_IN_HTTP_URL = http://api-in-pro.js-stock.top/
+#JS_IN_WS_URL = ws://api-in-pro-ws.js-stock.top
+#JS_IN_KEY = xKChgi47AP1NMwMeYI3c
+#
+#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://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
+JP_HTTP_API = http://api-jp.js-stock.top/
+JP_WS_URL = ws://api-jp-ws.js-stock.top
+JP_KEY = XBAhluTZJ9hNvRJ0hHmj
 
 
-HG_HTTP_API = http://test.js-stock.top/
-HG_WS_URL = ws://test-ws.js-stock.top
-HG_KEY = mG8QQDdjGuLjLnrryd0B
-
-
-
-TH_HTTP_API = http://test.js-stock.top/
-TH_WS_URL = ws://api-in-ws.js-stock.top
-TH_KEY = GBZAcUPLKZzDMDjvV9Ea
-
-MAS_HTTP_API = http://api-ms.js-stock.top/
-MAS_WS_URL = ws://api-ms-ws.js-stock.top
-MAS_KEY = PQWyZGrw7wRqdoWrvnY9
-
-SZHB_HTTP_API = https://api.huobi.pro/
-SZHB_WS_URL = ws://api-in-ws.js-stock.top
-SZHB_KEY = GBZAcUPLKZzDMDjvV9Ea
+#HG_HTTP_API = http://test.js-stock.top/
+#HG_WS_URL = ws://test-ws.js-stock.top
+#HG_KEY = mG8QQDdjGuLjLnrryd0B
+#
+#
+#
+#TH_HTTP_API = http://test.js-stock.top/
+#TH_WS_URL = ws://api-in-ws.js-stock.top
+#TH_KEY = GBZAcUPLKZzDMDjvV9Ea
+#
+#MAS_HTTP_API = http://api-ms.js-stock.top/
+#MAS_WS_URL = ws://api-ms-ws.js-stock.top
+#MAS_KEY = PQWyZGrw7wRqdoWrvnY9
+#
+#SZHB_HTTP_API = https://api.huobi.pro/
+#SZHB_WS_URL = ws://api-in-ws.js-stock.top
+#SZHB_KEY = GBZAcUPLKZzDMDjvV9Ea
 
 
 
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index fd47f7d..d058a45 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,7 +2,7 @@
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8090
-  port: 8091
+  port: 8092
   tomcat:
     # tomcat的URI编码
     uri-encoding: UTF-8
@@ -104,9 +104,9 @@
     # 地址
     host: localhost
     # 端口,默认为6379
-    port: 6379
+    port: 6380
     # 数据库索引
-    database: 0
+    database: 3
     # 密码
     password:
     # 连接超时时间
@@ -124,10 +124,10 @@
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driverClassName: com.mysql.cj.jdbc.Driver
-    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:6306/stock-rg?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: 123456
+    password: Err;2[eoGFUriwdgr
     druid:
       # 初始连接数
       initialSize: 5

--
Gitblit v1.9.3