From 57c2b6875b5f026a1432f3209471d6b4503f43fc Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 29 Oct 2024 13:35:05 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java |   19 +-
 src/main/resources/mapper/UserWithdrawMapper.xml                     |    2 
 src/main/java/com/nq/utils/task/stock/StockTask.java                 |   21 ++
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java       |   10 
 src/main/java/com/nq/pojo/UserPendingorder.java                      |    2 
 src/main/java/com/nq/ws/USWebsocketRunClient.java                    |  108 +++++++++++++
 src/main/java/com/nq/service/impl/UserServiceImpl.java               |   22 +-
 src/main/resources/application.properties                            |    6 
 src/main/java/com/nq/config/ScheduleConfig.java                      |    1 
 src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java       |   14 +
 src/main/java/com/nq/service/IUserAssetsServices.java                |    2 
 src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java       |    4 
 src/main/java/com/nq/service/impl/PriceServicesImpl.java             |   28 ++-
 src/main/java/com/nq/service/impl/UserPendingorderServiceImpl.java   |   18 +
 src/main/resources/mapper/UserRechargeMapper.xml                     |   24 +-
 src/main/java/com/nq/utils/task/stock/CarryPositionTask.java         |   18 +-
 src/main/resources/mapper/StockMapper.xml                            |    7 
 src/main/java/com/nq/service/impl/UserAssetsServices.java            |    6 
 src/main/java/com/nq/service/impl/StockServiceImpl.java              |   36 +++
 src/main/resources/mapper/UserPositionMapper.xml                     |   19 +-
 src/main/java/com/nq/controller/protol/UserController.java           |    4 
 src/main/java/com/nq/dao/StockMapper.java                            |    2 
 src/main/java/com/nq/service/UserPendingorderService.java            |    2 
 src/main/java/com/nq/utils/task/news/NewsTask.java                   |   30 +++
 src/main/java/com/nq/ws/WebSocketClientBeanConfig.java               |   22 ++
 src/main/java/com/nq/controller/RechargeAddressController.java       |    3 
 src/main/java/com/nq/controller/backend/AdminController.java         |    5 
 src/main/java/com/nq/controller/PayApiController.java                |    6 
 src/main/java/com/nq/controller/backend/AdminRechargeController.java |   15 +
 src/main/java/com/nq/service/IUserRechargeService.java               |    4 
 src/main/java/com/nq/dao/UserRechargeMapper.java                     |    2 
 31 files changed, 343 insertions(+), 119 deletions(-)

diff --git a/src/main/java/com/nq/config/ScheduleConfig.java b/src/main/java/com/nq/config/ScheduleConfig.java
index ad56ac1..b476818 100644
--- a/src/main/java/com/nq/config/ScheduleConfig.java
+++ b/src/main/java/com/nq/config/ScheduleConfig.java
@@ -15,7 +15,6 @@
 // * @author leon
 // * @createDate	2018年10月15日 下午4:02:38
 // * @version	v1.0
-// * @classRemarks TODO
 // */
 //@Configuration
 //public class ScheduleConfig implements SchedulingConfigurer {
diff --git a/src/main/java/com/nq/controller/PayApiController.java b/src/main/java/com/nq/controller/PayApiController.java
index a1a947a..bd8bd1c 100644
--- a/src/main/java/com/nq/controller/PayApiController.java
+++ b/src/main/java/com/nq/controller/PayApiController.java
@@ -80,7 +80,6 @@
 
         if ("1".equals((String) request.getParameter("status"))) {
             // 这里编写用户业务逻辑代码,如存储订单状态,自动发货等
-            //TODO
             if (amount != null & !StringUtils.isEmpty(amount)) {
                 System.out.println("============更新用户金额===============");
                 Double aDouble = Double.valueOf(amount);
@@ -89,7 +88,7 @@
                 UserRecharge userRecharge = this.userRechargeMapper.findUserRechargeByOrderSn(orderno);
                 if(userRecharge == null){
                     System.out.println("============充值完成===============");
-                    iUserRechargeService.createOrder(Integer.valueOf(arr[0]), 1, aDouble.intValue(), orderno);
+//                    iUserRechargeService.createOrder(Integer.valueOf(arr[0]), 1, aDouble.intValue(), orderno);
                     jsonObj.put("reason", "success");
                 } else {
                     System.out.println("============充值失败,已回调成功无需重复回调===============");
@@ -127,7 +126,6 @@
 
         //if ("200".equals((String) request.getParameter("status"))) {
             // 这里编写用户业务逻辑代码,如存储订单状态,自动发货等
-            //TODO
             if (amount != null & !StringUtils.isEmpty(amount)) {
                 System.out.println("============更新用户金额===============");
                 Double aDouble = Double.valueOf(amount);
@@ -136,7 +134,7 @@
                 UserRecharge userRecharge = this.userRechargeMapper.findUserRechargeByOrderSn(orderno);
                 if(userRecharge == null){
                     System.out.println("============充值完成===============");
-                    iUserRechargeService.createOrder(Integer.valueOf(arr[0]), 1, aDouble.intValue(), orderno);
+//                    iUserRechargeService.createOrder(Integer.valueOf(arr[0]), 1, aDouble.intValue(), orderno);
                 } else {
                     System.out.println("============充值失败,已回调成功无需重复回调===============");
                 }
diff --git a/src/main/java/com/nq/controller/RechargeAddressController.java b/src/main/java/com/nq/controller/RechargeAddressController.java
index b8b8538..a1197a9 100644
--- a/src/main/java/com/nq/controller/RechargeAddressController.java
+++ b/src/main/java/com/nq/controller/RechargeAddressController.java
@@ -41,7 +41,8 @@
     public ServerResponse createUSDTOrder(@RequestParam("userId") Integer userId,
                                           @RequestParam("amt") Integer amt,
                                           @RequestParam("img") String img,
+                                          @RequestParam("accectType") String accectType,
                                           HttpServletRequest request) {
-        return ServerResponse.createBySuccess(iUserRechargeService.createUSDTOrder(userId,amt,img,request));
+        return ServerResponse.createBySuccess(iUserRechargeService.createUSDTOrder(userId,amt,img,accectType,request));
     }
 }
diff --git a/src/main/java/com/nq/controller/backend/AdminController.java b/src/main/java/com/nq/controller/backend/AdminController.java
index fbfd3ba..1656996 100644
--- a/src/main/java/com/nq/controller/backend/AdminController.java
+++ b/src/main/java/com/nq/controller/backend/AdminController.java
@@ -373,10 +373,11 @@
     public  ServerResponse updateayChnnel(
             @RequestParam("id") Integer id,
             @RequestParam("amt") String amt,
-            @RequestParam("type") String type
+            @RequestParam("type") String type,
+            @RequestParam("accectType") String accectType
 
     ){
-        return  iUserAssetsServices.updateUserAssets(id,amt,type);
+        return  iUserAssetsServices.updateUserAssets(id,amt,type,accectType);
     }
 
     //查询首页充值,提现,注册统计
diff --git a/src/main/java/com/nq/controller/backend/AdminRechargeController.java b/src/main/java/com/nq/controller/backend/AdminRechargeController.java
index 9fd6e03..4b9ae18 100644
--- a/src/main/java/com/nq/controller/backend/AdminRechargeController.java
+++ b/src/main/java/com/nq/controller/backend/AdminRechargeController.java
@@ -91,12 +91,15 @@
         return serverResponse;
     }
 
-    //创建资金管理 充值订单
-    @RequestMapping({"createOrder.do"})
-    @ResponseBody
-    public ServerResponse createOrder(@RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "state", required = false) Integer state, @RequestParam(value = "amt", required = false) Integer amt, @RequestParam(value = "payChannel", required = false) String payChannel) {
-        return this.iUserRechargeService.createOrder(userId, state, amt, payChannel);
-    }
+//    //创建资金管理 充值订单
+//    @RequestMapping({"createOrder.do"})
+//    @ResponseBody
+//    public ServerResponse createOrder(@RequestParam(value = "userId", required = false) Integer userId,
+//                                      @RequestParam(value = "state", required = false) Integer state,
+//                                      @RequestParam(value = "amt", required = false) Integer amt,
+//                                      @RequestParam(value = "payChannel", required = false) String payChannel) {
+//        return this.iUserRechargeService.createOrder(userId, state, amt, payChannel);
+//    }
 
     //删除资金管理 充值列表订单信息
     @RequestMapping({"del.do"})
diff --git a/src/main/java/com/nq/controller/protol/UserController.java b/src/main/java/com/nq/controller/protol/UserController.java
index 6c4315c..81a0983 100644
--- a/src/main/java/com/nq/controller/protol/UserController.java
+++ b/src/main/java/com/nq/controller/protol/UserController.java
@@ -185,11 +185,11 @@
     //挂单操作-列表
     @RequestMapping({"orderList.do"})
     @ResponseBody
-    public ServerResponse orderList(HttpServletRequest request) {
+    public ServerResponse orderList(@RequestParam("stockType") String stockType,HttpServletRequest request) {
         ServerResponse serverResponse = null;
         try {
 
-            serverResponse = this.userPendingorderService.orderList(request);
+            serverResponse = this.userPendingorderService.orderList(stockType,request);
         } catch (Exception e) {
             log.error("挂单操作-列表 = {}", e);
         }
diff --git a/src/main/java/com/nq/dao/StockMapper.java b/src/main/java/com/nq/dao/StockMapper.java
index 7081167..4f775ea 100644
--- a/src/main/java/com/nq/dao/StockMapper.java
+++ b/src/main/java/com/nq/dao/StockMapper.java
@@ -56,5 +56,5 @@
   List findStockByType(@Param("orderBy") String orderBy, @Param("stockType") String stockType,@Param("keyWords") String keyWords);
 
 
-  List findStockTypeDz(@Param("orderBy") String orderBy, @Param("stockType") String stockType,@Param("keyWords") String keyWords);
+  List findStockTypeDz(@Param("orderBy") String orderBy, @Param("keyWords") String keyWords);
 }
\ No newline at end of file
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/pojo/UserPendingorder.java b/src/main/java/com/nq/pojo/UserPendingorder.java
index 0066796..681fe80 100644
--- a/src/main/java/com/nq/pojo/UserPendingorder.java
+++ b/src/main/java/com/nq/pojo/UserPendingorder.java
@@ -38,6 +38,8 @@
 
     private Date addTime;
 
+
+    private String assetsType;
     private Integer status;
 
     private static final long serialVersionUID = 1L;
diff --git a/src/main/java/com/nq/service/IUserAssetsServices.java b/src/main/java/com/nq/service/IUserAssetsServices.java
index ae7475a..e075b35 100644
--- a/src/main/java/com/nq/service/IUserAssetsServices.java
+++ b/src/main/java/com/nq/service/IUserAssetsServices.java
@@ -21,7 +21,7 @@
 
 
 
-    ServerResponse updateUserAssets(Integer id, String amt,String type);
+    ServerResponse updateUserAssets(Integer id, String amt,String type,String accectType);
 
 
     List<UserAssets>  assetsByUserId(Integer userId);
diff --git a/src/main/java/com/nq/service/IUserRechargeService.java b/src/main/java/com/nq/service/IUserRechargeService.java
index 3532bc8..6fd65ad 100644
--- a/src/main/java/com/nq/service/IUserRechargeService.java
+++ b/src/main/java/com/nq/service/IUserRechargeService.java
@@ -30,7 +30,7 @@
   
   ServerResponse updateState(Integer paramInteger1, Integer paramInteger2) throws Exception;
   
-  ServerResponse createOrder(Integer paramInteger1, Integer paramInteger2, Integer paramInteger3, String paramString);
+  ServerResponse createOrder(Integer paramInteger1, Integer paramInteger2, Integer paramInteger3, String paramString,String accectType);
   
   ServerResponse del(Integer paramInteger);
   
@@ -42,5 +42,5 @@
 
   List<UserRecharge> exportByAdmin( Integer agentId, Integer userId, String realName, Integer state, String beginTime, String endTime, HttpServletRequest request);
 
-  public ServerResponse createUSDTOrder(Integer userId,Integer amt,String currency,HttpServletRequest request);
+  public ServerResponse createUSDTOrder(Integer userId,Integer amt,String currency,String accectType,HttpServletRequest request);
 }
diff --git a/src/main/java/com/nq/service/UserPendingorderService.java b/src/main/java/com/nq/service/UserPendingorderService.java
index 72511a3..31172ac 100644
--- a/src/main/java/com/nq/service/UserPendingorderService.java
+++ b/src/main/java/com/nq/service/UserPendingorderService.java
@@ -17,7 +17,7 @@
 
     ServerResponse addOrder(String stockId, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, BigDecimal targetPrice, HttpServletRequest request);
 
-    ServerResponse orderList( HttpServletRequest request);
+    ServerResponse orderList(String stockType, HttpServletRequest request);
 
     void orderTask();
 
diff --git a/src/main/java/com/nq/service/impl/PriceServicesImpl.java b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
index 5226333..4a64986 100644
--- a/src/main/java/com/nq/service/impl/PriceServicesImpl.java
+++ b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -57,19 +57,27 @@
                 if (stockSetting.getType().equals("0")) {
                     return new BigDecimal(stockSetting.getPrice());
                 } else {
-                    String s = doPost(stock.getStockCode());
+                    String s = doPost(stock.getStockCode(),stock.getStockType());
                     if (null != s) {
                         Map<String, Object> stringObjectMap = jsonToMap(s);
-                        return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
+                        if(stock.getStockType().equals("US")){
+                            return new BigDecimal(stringObjectMap.get("Last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
+                        }else{
+                            return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
+                        }
                     }
                 }
             }
         }
 
-        String s = doPost(stock.getStockCode());
+        String s = doPost(stock.getStockCode(),stock.getStockType());
         if (null != s) {
             Map<String, Object> stringObjectMap = jsonToMap(s);
-            return new BigDecimal(stringObjectMap.get("last").toString());
+            if(stock.getStockType().equals("US")){
+                return new BigDecimal(stringObjectMap.get("Last").toString());
+            }else{
+                return new BigDecimal(stringObjectMap.get("last").toString());
+            }
         }
         return BigDecimal.ZERO;
     }
@@ -77,7 +85,7 @@
     @Override
     public Map<String, Object> getNewStock(String stockCode) {
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
-        String s = doPost(stock.getStockCode());
+        String s = doPost(stock.getStockCode(),stock.getStockType());
         if (null != s) {
             Map<String, Object> stringObjectMap = jsonToMap(s);
             return stringObjectMap;
@@ -99,10 +107,14 @@
         }
     }
 
-    public String doPost(String pid) {
-
+    public String doPost(String pid,String stockType) {
+        String url;
+        if(stockType.equals("JP")){
+            url = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?version=v1&key=" + PropertiesUtil.getProperty("JP_KEY");
+        }else{
+            url = PropertiesUtil.getProperty("US_HTTP_API") + "stock?version=v1&key=" + PropertiesUtil.getProperty("US_KEY");
+        }
         try {
-            String url = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?version=v1&key=" + PropertiesUtil.getProperty("JP_KEY");
             URL obj = new URL(url);
             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
 
diff --git a/src/main/java/com/nq/service/impl/StockServiceImpl.java b/src/main/java/com/nq/service/impl/StockServiceImpl.java
index d3a6f6a..e0c08f0 100644
--- a/src/main/java/com/nq/service/impl/StockServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -172,12 +172,13 @@
     @Override
     public ServerResponse getStockByType(int pageNum, int pageSize, String orderBy, String keyWords, String stockType, HttpServletRequest request) {
         List<Stock> stockList = new ArrayList<>();
-        if(stockType.equals(EStockType.JP.getCode())){
+        PageHelper.startPage(pageNum, pageSize);
+        if(!stockType.equals("DZ")){
             PageHelper.startPage(pageNum, pageSize);
             stockList.addAll(stockMapper.findStockByType(orderBy,stockType,keyWords));
         }else{
             PageHelper.startPage(pageNum, pageSize);
-            stockList.addAll(stockMapper.findStockTypeDz(orderBy,EStockType.JP.getCode(), keyWords));
+            stockList.addAll(stockMapper.findStockTypeDz(orderBy, keyWords));
         }
 
         List<StockListVO> stockListVOS = Lists.newArrayList();
@@ -222,10 +223,17 @@
         stockVO.setName(stock.getStockName());
         stockVO.setSpell(stock.getStockSpell());
         stockVO.setGid(stock.getStockGid().toUpperCase());
+
         Map<String, Object> newStock = iPriceServices.getNewStock(stock.getStockCode());
-        stockVO.setHcrate(newStock.get("pcp").toString().replaceAll("%", ""));
-        stockVO.setToday_max(newStock.get("high").toString());
-        stockVO.setToday_min(newStock.get("low").toString());
+        if(stock.getStockType().equals("US")){
+            stockVO.setHcrate(newStock.get("ChgPct").toString().replaceAll("%", ""));
+            stockVO.setToday_max(newStock.get("High").toString());
+            stockVO.setToday_min(newStock.get("Low").toString());
+        }else{
+            stockVO.setHcrate(newStock.get("pcp").toString().replaceAll("%", ""));
+            stockVO.setToday_max(newStock.get("high").toString());
+            stockVO.setToday_min(newStock.get("low").toString());
+        }
         if(null != cacheBaseStock){
             stockVO.setOpen_px(cacheBaseStock.getOpen());
             stockVO.setPreclose_px(cacheBaseStock.getPrevClose());
@@ -492,8 +500,24 @@
             lastData.setL(stockVO.getToday_min());
             return gson.toJson(dataList);
 
+        }else{
+            Object object = HttpUtil.get(eStockType.stockUrl + "kline?pid=" + pid + "&interval=" + interval + "&key=" + eStockType.stockKey);
+            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));
+            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);
         }
-        return  HttpUtil.get(eStockType.stockUrl + "kline?pid=" + pid + "&interval=" + interval + "&key=" + eStockType.stockKey);
+//        return  HttpUtil.get(eStockType.stockUrl + "kline?pid=" + pid + "&interval=" + interval + "&key=" + eStockType.stockKey);
     }
 
     @Override
diff --git a/src/main/java/com/nq/service/impl/UserAssetsServices.java b/src/main/java/com/nq/service/impl/UserAssetsServices.java
index bc730c5..a7f3319 100644
--- a/src/main/java/com/nq/service/impl/UserAssetsServices.java
+++ b/src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -62,8 +62,8 @@
     }
 
     @Override
-    public ServerResponse updateUserAssets(Integer id, String amt,String type) {
-        UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class).eq(UserAssets::getUserId,id));
+    public ServerResponse updateUserAssets(Integer id, String amt,String type,String accectType) {
+        UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class).eq(UserAssets::getUserId,id).eq(UserAssets::getAccectType,accectType));
         //  0 入款  1是扣钱  2 是充值  3 是提币
         BigDecimal bigAmt = new BigDecimal(amt);
         if(type.equals("0") || type.equals("1")){
@@ -105,7 +105,7 @@
             }
         }else{
             if(type.equals("2")){
-                return  userRechargeService.createOrder(id,1,bigAmt.intValue(),"1");
+                return  userRechargeService.createOrder(id,1,bigAmt.intValue(),"1",accectType);
             }else{
 
 
diff --git a/src/main/java/com/nq/service/impl/UserPendingorderServiceImpl.java b/src/main/java/com/nq/service/impl/UserPendingorderServiceImpl.java
index 347b70d..452d5b9 100644
--- a/src/main/java/com/nq/service/impl/UserPendingorderServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPendingorderServiceImpl.java
@@ -72,7 +72,7 @@
     UserAssetsMapper userAssetsMapper;
 
     @Override
-    public ServerResponse addOrder(String stockId, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, BigDecimal targetPrice, HttpServletRequest request) {
+    public ServerResponse addOrder(String stockId, Integer buyNum, Integer buyType, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, BigDecimal targetPrice,HttpServletRequest request) {
         User user = this.iUserService.getCurrentRefreshUser(request);
 
         if (user == null) {
@@ -87,17 +87,17 @@
             return ServerResponse.createByErrorMsg("The pending order failed because the purchased quantity was greater than" + siteSetting
                     .getBuyMaxNum() + "stocks",request);
         }
-
+        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<>(Stock.class).eq(Stock::getStockCode, stockId));
         UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
                 .eq(UserAssets::getUserId, user.getId())
-                .eq(UserAssets::getAccectType, "JP")
+                .eq(UserAssets::getAccectType, stock.getStockType())
         );
 
         BigDecimal amount = new BigDecimal(buyNum).multiply(targetPrice).setScale(5, RoundingMode.DOWN);
         if (userAssets.getAvailableBalance().compareTo(amount) < 0) {
             return ServerResponse.createByErrorMsg("订单失败,余额不足", request);
         }
-        if(buyNum<100){
+        if(buyNum<siteSetting.getBuyMinNum()){
             return ServerResponse.createByErrorMsg("最低购买数量"+siteSetting.getBuyMinNum(), request);
         }
 
@@ -118,6 +118,7 @@
         userPendingorder.setTargetPrice(targetPrice);
         userPendingorder.setAddTime(new Date());
         userPendingorder.setStatus(0);
+        userPendingorder.setAssetsType(stock.getStockType());
         int ret = userPendingorderMapper.insert(userPendingorder);
         if (ret > 0) {
             String lang = request.getHeader("lang");
@@ -133,7 +134,7 @@
     }
 
     @Override
-    public ServerResponse orderList(HttpServletRequest request) {
+    public ServerResponse orderList(String stockType,HttpServletRequest request) {
 
         String property = PropertiesUtil.getProperty("user.cookie.name");
         String header = request.getHeader(property);
@@ -143,7 +144,10 @@
             User user = (User) JsonUtil.string2Obj(userJson, User.class);
 //            log.info("user:{}",user);
             if (user != null) {
-                List<UserPendingorder> userPendingorders = userPendingorderMapper.selectList(new QueryWrapper<UserPendingorder>().eq("user_id", user.getId()).ne("status",1));
+                List<UserPendingorder> userPendingorders = userPendingorderMapper.selectList(new QueryWrapper<UserPendingorder>()
+                        .eq("user_id", user.getId())
+                        .eq("assets_type",stockType)
+                        .ne("status",1));
 
                 List UserPendingorderList = new ArrayList();
 
@@ -330,7 +334,7 @@
             if (delCount > 0) {
                 UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
                         .eq(UserAssets::getUserId, user.getId())
-                        .eq(UserAssets::getAccectType, "JP")
+                        .eq(UserAssets::getAccectType, userPendingorder.getAssetsType())
                 );
                 BigDecimal amount = new BigDecimal(userPendingorder.getBuyNum()).multiply(userPendingorder.getTargetPrice()).setScale(5, RoundingMode.DOWN);
                 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index a4af636..5baa652 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1555,19 +1555,19 @@
         if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
             return ServerResponse.createByErrorMsg("Order failed, account has been locked");
         }
-        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId());
+        //价格处理
+        StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("stock_code", stockCode));
+        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockDz.getStockCode()));
+        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId(stock.getStockType(), user.getId());
         if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
             return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
         }
-        StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("stock_code", stockCode));
         if (!Objects.equals(stockDz.getPassword(), password)) {
             return ServerResponse.createByErrorMsg("密码错误", request);
         }
         if (stockDz.getIsLock() != 0) {
             return ServerResponse.createByErrorMsg("股票被锁定,不能购买", request);
         }
-        //价格处理
-        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockDz.getStockCode()));
 
         if(stockDz.getStartTime().getTime() > new Date().getTime() || stockDz.getEndTime().getTime() < new Date().getTime()){
             return ServerResponse.createByErrorMsg("不在内幕交易时间之内", request);
@@ -1619,7 +1619,7 @@
 
         userPosition.setOrderSpread(BigDecimal.ZERO);
         userPositionMapper.insert(userPosition);
-        userAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
+        userAssetsServices.availablebalanceChange(userAssets.getAccectType(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
         return ServerResponse.createBySuccess("购买成功", request);
     }
 
diff --git a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
index 09ecbaf..2e5d314 100644
--- a/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserRechargeServiceImpl.java
@@ -222,8 +222,8 @@
 
         for (int i = 0; i <userRecharges.size() ; i++) {
           SitePay s =   sitePayMapper.selectById(userRecharges.get(i).getPayId());
-            userRecharges.get(i).setAssetsType(EStockType.JP.getSymbol1());
-            userRecharges.get(i).setChannelName(EStockType.JP.getSymbol());
+            userRecharges.get(i).setAssetsType(EStockType.getEStockTypeByCode(userRecharges.get(i).getAssetsType()).getSymbol1());
+            userRecharges.get(i).setChannelName(EStockType.getEStockTypeByCode(userRecharges.get(i).getAssetsType()).getSymbol());
         }
 
         return ServerResponse.createBySuccess(pageInfo);
@@ -306,7 +306,7 @@
                 return ServerResponse.createByErrorMsg("用户不存在");
             }
 //            SitePay payChnnel = sitePayMapper.selectById(userRecharge.getPayId());
-            userAssetsServices.availablebalanceChange(EStockType.JP.getCode(),user.getId(), EUserAssets.TOP_UP,userRecharge.getPayAmt(),"","");
+            userAssetsServices.availablebalanceChange(userRecharge.getAssetsType(),user.getId(), EUserAssets.TOP_UP,userRecharge.getPayAmt(),"","");
         }
         userRecharge.setOrderStatus(Integer.valueOf((state.intValue() == 1) ? 1 : 2));
         userRecharge.setPayTime(new Date());
@@ -318,7 +318,7 @@
     }
 
 
-    public ServerResponse createOrder(Integer userId, Integer state, Integer amt, String payChannel) {
+    public ServerResponse createOrder(Integer userId, Integer state, Integer amt, String payChannel,String accectType) {
         if (userId == null || state == null || amt == null) {
             return ServerResponse.createByErrorMsg("参数不能为空");
         }
@@ -342,7 +342,8 @@
         userRecharge.setPayTime(new Date());
         userRecharge.setOrderStatus(Integer.valueOf(1));
         userRecharge.setPayId(1);
-        userAssetsServices.availablebalanceChange(EStockType.JP.getCode(),
+        userRecharge.setAssetsType(accectType);
+        userAssetsServices.availablebalanceChange(userRecharge.getAssetsType(),
                 userId,EUserAssets.TOP_UP,new BigDecimal(amt),"","");
         int insertCount = this.userRechargeMapper.insert(userRecharge);
         if (insertCount > 0) {
@@ -352,7 +353,7 @@
     }
 
     @Override
-    public ServerResponse createUSDTOrder(Integer userId, Integer amt,String currency, HttpServletRequest request) {
+    public ServerResponse createUSDTOrder(Integer userId, Integer amt,String currency,String accectType, HttpServletRequest request) {
         if (userId == null || amt == null) {
             return ServerResponse.createByErrorMsg("参数不能为空");
         }
@@ -378,6 +379,7 @@
         userRecharge.setPayId(1);
         userRecharge.setRechargeType(1);
         userRecharge.setImg(currency);
+        userRecharge.setAssetsType(accectType);
         int insertCount = this.userRechargeMapper.insert(userRecharge);
         if (insertCount > 0) {
             return ServerResponse.createBySuccessMsg("提交成功",request);
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index d2364f6..0528ff2 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -202,6 +202,7 @@
                 return ServerResponse.createByErrorMsg("登录失败。账户锁定",request);
             }
             userAssetsServices.assetsByTypeAndUserId(EStockType.JP.getCode(),user.getId());
+            userAssetsServices.assetsByTypeAndUserId(EStockType.US.getCode(),user.getId());
             this.iSiteLoginLogService.saveLog(user, request);
             return ServerResponse.createBySuccess(user);
         }
@@ -495,6 +496,13 @@
          *  总手续费
          * */
         BigDecimal allHMoney = BigDecimal.ZERO;
+
+        /**
+         *  总手续费
+         * */
+        BigDecimal amountToBeCovered = BigDecimal.ZERO;
+
+
         for (int i = 0; i <userAssetsList.size() ; i++) {
             RUserAssets rUserAssets  = new RUserAssets();
             UserAssets userAssets = userAssetsList.get(i);
@@ -557,7 +565,7 @@
             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).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);
@@ -566,10 +574,7 @@
             AllHProfitAndLose = AllHProfitAndLose.add(handlingChargeUSD);
             allFreeMoney = allFreeMoney.add(freezeMoneyUSD);
             allHMoney = allHMoney.add(handlingChargeUSD);
-
-
-
-
+            amountToBeCovered = amountToBeCovered.add(new BigDecimal(rUserAssets.getAmountToBeCovered()));
 
             rUserAssetsList.add(rUserAssets);
         }
@@ -593,17 +598,18 @@
         rUserAssets.setFreezeMoneyUSD(allFreeMoney.setScale(s,BigDecimal.ROUND_DOWN).toString());
         rUserAssets.setSymbol("$");
         rUserAssets.setSymbolCode("USD");
+        rUserAssets.setAmountToBeCovered(amountToBeCovered.setScale(s,BigDecimal.ROUND_DOWN).toString());
         rUserAssetsList.add(rUserAssets);
 
         return ServerResponse.createBySuccess(rUserAssetsList);
     }
 
-    public BigDecimal getProfitAndLose(Integer userId){
+    public BigDecimal getProfitAndLose(Integer userId,String  accectType){
         List<UserPosition> userPositions;
         userPositions = userPositionMapper.
                 findMyPositionByCodeAndSpell(userId,
                         "","",
-                        0, "JP");
+                        0, accectType);
 
 
         List<UserPositionVO> userPositionVOS = Lists.newArrayList();
@@ -812,7 +818,7 @@
             ServerResponse money = iUserService.getMoney(user.getId());
             List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData();
             RUserAssets rUserAssets = rUserAssetsList.stream()
-                    .filter(stock -> "JP".equals(stock.getAccectType()))
+                    .filter(stock -> "ALL".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 91e7c44..0d7333b 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -1,14 +1,12 @@
 package com.nq.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.*;
@@ -70,6 +68,9 @@
     @Autowired
     UserAssetsMapper userAssetsMapper;
 
+    @Autowired
+    StockMapper stockMapper;
+
     /**
      * 用户新股申购
      * @param model
@@ -82,8 +83,9 @@
         if (model == null) {
             return ServerResponse.createByErrorMsg("参数错误",request);
         }
+        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<>(Stock.class).eq(Stock::getStockCode, model.getNewCode()));
         User user = iUserService.getCurrentRefreshUser(request);
-        UserAssets userAssets =   iUserAssetsServices.assetsByTypeAndUserId("JP",user.getId());
+        UserAssets userAssets =   iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(),user.getId());
         if (model.getNewCode() != null) {
             StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>()
                     .eq("code", model.getNewCode()).eq("type",model.getType()));
@@ -152,7 +154,7 @@
                 model.setType(stockSubscribe.getType());
                 model.setDbMoney(BigDecimal.ZERO);
                 ret = userStockSubscribeMapper.insert(model);
-                iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(),EUserAssets.BUY,bound.negate(),"","");
+                iUserAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(),EUserAssets.BUY,bound.negate(),"","");
                 if (ret > 0) {
                     return ServerResponse.createBySuccessMsg("配售成功",request);
                 } else {
@@ -191,12 +193,13 @@
             if((model.getStatus() == 3 && model.getApplyNumber() == null) || (model.getStatus() == 3 && model.getApplyNumber() == 0) ){
                 return ServerResponse.createByErrorMsg("中签数量不能小于0");
             }
+            Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<>(Stock.class).eq(Stock::getStockCode, stockSubscribe.getCode()));
             if (model.getStatus() == 3 && model.getApplyNumber() != null){
                 if(stockSubscribe.getType() == 1){
                     model.setBond(stockSubscribe.getPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
                     model.setDbMoney(model.getDbMoney());
                     //客户中签直接扣除客户账户可用资金
-                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", userStockSubscribe.getUserId());
+                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(), userStockSubscribe.getUserId());
                     if(null == userAssets){
                         return ServerResponse.createByErrorMsg("客户资金账户不存在");
                     }
@@ -217,7 +220,7 @@
                     }
                     BigDecimal cCount = new BigDecimal(model.getApplyNums()-model.getApplyNumber());
                     BigDecimal tMoney = stockSubscribe.getPrice().multiply(cCount);
-                    iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(),userStockSubscribe.getUserId(),
+                    iUserAssetsServices.availablebalanceChange(stock.getStockType(),userStockSubscribe.getUserId(),
                             EUserAssets.TOP_UP,tMoney,"","");
                     model.setBond(stockSubscribe.getPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
                     model.setDbMoney(BigDecimal.ZERO);
diff --git a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
index 51714c2..1383e9c 100644
--- a/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
@@ -240,7 +240,7 @@
             User user = this.userMapper.selectById(userWithdraw.getUserId());
 
 
-            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", user.getId());
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(userWithdraw.getAssetsType(), user.getId());
             if (userAssets == null) {
                 return ServerResponse.createByErrorMsg("用户资金账户不存在");
             }
@@ -353,7 +353,7 @@
             if (user == null) {
                 return ServerResponse.createByErrorMsg("用户不存在");
             }
-            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", user.getId());
+            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(userWithdraw.getAssetsType(), user.getId());
             if (userAssets == null) {
                 return ServerResponse.createByErrorMsg("用户资金账户不存在");
             }
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..87e9f78 100644
--- a/src/main/java/com/nq/utils/task/news/NewsTask.java
+++ b/src/main/java/com/nq/utils/task/news/NewsTask.java
@@ -35,6 +35,13 @@
 
 
     private final Lock NewsInfoTaskLock = new ReentrantLock();
+
+    private final AtomicBoolean USNewsInfoTask = new AtomicBoolean(false);
+
+
+    private final Lock USNewsInfoTaskLock = new ReentrantLock();
+
+
     /*
      * 新聞資訊抓取
      * */
@@ -58,6 +65,29 @@
         }
     }
 
+    /*
+     * 新聞資訊抓取
+     * */
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public void USNewsInfoTask() {
+        if (USNewsInfoTask.get()) { // 判断任务是否在处理中
+            return;
+        }
+        if (USNewsInfoTaskLock.tryLock()) { // 加锁
+            try {
+                USNewsInfoTask.set(true); // 设置处理中标识为true
+                System.out.println("美国新闻定时任务---->开始");
+                iSiteNewsService.grabNews();
+            } catch (Exception e) {
+                System.err.println("美国新闻抓取出现异常: " + e.getMessage()); // 打印具体的异常信息
+            } finally {
+                USNewsInfoTaskLock.unlock(); // 释放锁
+                USNewsInfoTask.set(false); // 设置处理中标识为false
+                System.out.println("美国新闻定时任务---->结束");
+            }
+        }
+    }
+
 
 
     /*
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 5599abd..f32e7c4 100644
--- a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
+++ b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -5,14 +5,8 @@
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 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.pojo.StockSubscribe;
-import com.nq.pojo.User;
-import com.nq.pojo.UserAssets;
-import com.nq.pojo.UserStockSubscribe;
+import com.nq.dao.*;
+import com.nq.pojo.*;
 import com.nq.service.IUserAssetsServices;
 import com.nq.service.IUserPositionService;
 import lombok.extern.slf4j.Slf4j;
@@ -53,6 +47,9 @@
     @Autowired
     IUserAssetsServices userAssetsServices;
 
+    @Autowired
+    StockMapper stockMapper;
+
     private final Lock ballotLock = new ReentrantLock();
 
     private final Lock subscriptionLock = new ReentrantLock();
@@ -60,7 +57,7 @@
     private final AtomicBoolean ballot = new AtomicBoolean(false);
 
 
-    @Scheduled(cron = "0 0/10 * * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void ballot() {
         if (ballot.get()) { // 判断任务是否在处理中
             return;
@@ -112,7 +109,8 @@
                 List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>()
                         .eq(UserStockSubscribe::getStatus, 3));
                 userStockSubscribes.forEach(f->{
-                    UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP",f.getUserId());
+                    Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<>(Stock.class).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);
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 90fba2e..4d9b175 100644
--- a/src/main/java/com/nq/utils/task/stock/StockTask.java
+++ b/src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -58,10 +58,14 @@
 
     private final Lock syncINStockDataLock = new ReentrantLock();
 
+    private final AtomicBoolean syncUSStockData = new AtomicBoolean(false);
+
+    private final Lock syncUSStockDataLock = new ReentrantLock();
+
     /**
      * 同步系统所需要的股票
      */
-    @Scheduled(cron = "0 */1 * * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void syncINStockData() {
         if (syncINStockData.get()) { // 判断任务是否在处理中
             return;
@@ -81,9 +85,20 @@
     /**
      * 同步美国股票
      */
-//    @Scheduled(cron = "0 0/30 * * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void loadStockCompanies() {
-        loadAllCompanies();
+        if (syncUSStockData.get()) { // 判断任务是否在处理中
+            return;
+        }
+        if (syncUSStockDataLock.tryLock()) {
+            try {
+                syncUSStockData.set(true); // 设置处理中标识为true
+                loadAllStock(EStockType.US);
+            } finally {
+                syncUSStockDataLock.unlock();
+                syncUSStockData.set(false); // 设置处理中标识为false
+            }
+        }
     }
 
 
diff --git a/src/main/java/com/nq/ws/USWebsocketRunClient.java b/src/main/java/com/nq/ws/USWebsocketRunClient.java
new file mode 100644
index 0000000..302d897
--- /dev/null
+++ b/src/main/java/com/nq/ws/USWebsocketRunClient.java
@@ -0,0 +1,108 @@
+package com.nq.ws;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.nq.enums.EStockType;
+import com.nq.pojo.StockRealTimeBean;
+import com.nq.utils.redis.RedisKeyUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.java_websocket.client.WebSocketClient;
+import org.java_websocket.handshake.ServerHandshake;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @program: dabaogp
+ * @description:
+ * @create: 2024-10-25 14:44
+ **/
+@Slf4j
+public class USWebsocketRunClient  extends WebSocketClient {
+
+    private EStockType eStockType;
+    public USWebsocketRunClient(URI serverUri,
+                              EStockType eStockType
+    ) {
+        super(serverUri);
+        this.eStockType = eStockType;
+    }
+
+    @Override
+    public void onOpen(ServerHandshake serverHandshake) {
+        send(("key:"+ eStockType.getStockKey()+":"+eStockType.getContryId()+":v1").getBytes());
+    }
+
+    @Override
+    public void onMessage(String s) {
+        try {
+            if(!s.equals("pong") && !s.equals("身份验证成功")){
+                StockRealTimeBean stockDetailBean =  new Gson().fromJson(s, StockRealTimeBean.class);
+                RedisKeyUtil.setCacheRealTimeStock(eStockType,stockDetailBean);
+                send(s);
+            }
+        }catch (Exception e){
+            log.error("ws 消息接收错误:"+s);
+        }
+    }
+
+    public static Map<String, Object> jsonToMap(String json) {
+        Gson gson = new Gson();
+        Type type = new TypeToken<Map<String, Object>>(){}.getType();
+        return gson.fromJson(json, type);
+    }
+
+    @Override
+    public void onClose(int i, String s, boolean b) {
+        log.info("websocket  美股  关闭"+1);
+    }
+
+    @Override
+    public void onError(Exception e) {
+        log.info("websocket 错误");
+    }
+
+
+    private HttpClient httpClient;  //  声明一个成员变量
+
+    private HttpPost httpPost = new HttpPost("http://127.0.0.1:8002/api/sendNotification");  //  创建一个HttpPost对象
+
+    @Override
+    public void send(String message) {
+
+        try {
+
+            if (httpClient == null) {
+                httpClient = HttpClients.createDefault();  //  使用单例模式创建HttpClient对象
+            }
+
+            //  准备  form-data  参数
+            List<BasicNameValuePair> params = new ArrayList<>();
+            params.add(new BasicNameValuePair("message", message));
+
+            //  设置编码格式为  UTF-8
+            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, StandardCharsets.UTF_8);
+            httpPost.setEntity(entity);  //  设置HttpPost对象的参数
+
+            //  发送请求
+            HttpResponse response = httpClient.execute(httpPost);
+
+            //  处理响应
+            int statusCode = response.getStatusLine().getStatusCode();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java b/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
index fc5d349..cf4e4db 100644
--- a/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
+++ b/src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
@@ -21,8 +21,26 @@
     public Map<String, WebSocketClient> websocketRunClientMap() {
 
         Map<String, WebSocketClient> retMap = new HashMap<>(2);
+//        try {
+//            WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("JP_WS_URL")),EStockType.JP);
+//            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();
+//        } catch (Exception e) {
+//        }
+
         try {
-            WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("JP_WS_URL")),EStockType.JP);
+            USWebsocketRunClient websocketRunClient = new USWebsocketRunClient(new URI(PropertiesUtil.getProperty("US_WS_URL")),EStockType.US);
             websocketRunClient.connect();
             websocketRunClient.setConnectionLostTimeout(0);
             new Thread(() -> {
@@ -40,9 +58,9 @@
         }
 
 
-
         return retMap;
     }
 
 
+
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index ed71712..ca92950 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -42,9 +42,9 @@
 #JS_IN_WS_URL =ws://api-in-2-ws.js-stock.top
 #JS_IN_KEY = eVKtHt7aG4m6ozwWL9qG
 #
-#US_HTTP_API = http://api-us.js-stock.top/
-#US_WS_URL = ws://ws-us.js-stock.top
-#US_KEY = jZFrku4RGQjP87Hmq5tm
+US_HTTP_API = http://api-us-v2.js-stock.top/
+US_WS_URL = ws://api-us-v2-ws.js-stock.top
+US_KEY = bP1PkxkXyzV2mfb3miun
 #
 #HK_HTTP_API = http://test.js-stock.top/
 #HK_WS_URL = ws://test-ws.js-stock.top
diff --git a/src/main/resources/mapper/StockMapper.xml b/src/main/resources/mapper/StockMapper.xml
index 1f6f71f..2d7d916 100644
--- a/src/main/resources/mapper/StockMapper.xml
+++ b/src/main/resources/mapper/StockMapper.xml
@@ -262,7 +262,7 @@
     <include refid="Base_Column_List" />
     from stock
     <where>
-       stock_gid = 'TSE'
+        1=1
       <if test="showState != null  ">
         and is_show = #{showState}
       </if>
@@ -316,7 +316,8 @@
         <include refid="Base_Column_List"/>
          FROM stock
 
-    where stock_type = #{stockType} and stock_gid = 'TSE'
+    where stock_type = #{stockType}
+--       and stock_gid = 'TSE'
 
     <if test="keyWords != null and keyWords != '' ">
       and (stock_spell like concat('%',#{keyWords},'%')  or stock_name like concat('%',#{keyWords},'%')  )
@@ -335,7 +336,7 @@
     <include refid="Base_Column_List"/>
     FROM stock
 
-    where stock_type = #{stockType}
+    where 1 = 1
 
     <if test="keyWords != null and keyWords != '' ">
       and (stock_spell like concat('%',#{keyWords},'%')  or stock_name like concat('%',#{keyWords},'%')  )
diff --git a/src/main/resources/mapper/UserPositionMapper.xml b/src/main/resources/mapper/UserPositionMapper.xml
index 7ea7077..a50f9bb 100644
--- a/src/main/resources/mapper/UserPositionMapper.xml
+++ b/src/main/resources/mapper/UserPositionMapper.xml
@@ -436,27 +436,26 @@
 
   <select id="findMyPositionByCodeAndSpell" parameterType="map" resultMap="BaseResultMap">
     SELECT
-    <include refid="Base_Column_List"/>
-    FROM user_position
+    u.*
+    FROM user_position u  left join stock s on u.stock_code = s.stock_code
     <where>
-      user_id = #{uid}
+      u.user_id = #{uid}
+    and s.stock_type = #{stockType}
       <if test="state != null ">
         <if test="state == 0">
-          and sell_order_id is null
+          and u.sell_order_id is null
         </if>
         <if test="state == 1">
-          and sell_order_id is not null
+          and u.sell_order_id is not null
         </if>
       </if>
       <if test="stockCode != null and stockCode != '' ">
-        and stock_code like CONCAT('%','${stockCode}','%')
+        and u.stock_code like CONCAT('%','${stockCode}','%')
       </if>
       <if test="stockSpell != null and stockSpell != '' ">
-        and stock_spell like CONCAT('%','${stockSpell}','%')
+        and u.stock_spell like CONCAT('%','${stockSpell}','%')
       </if>
-<!--      <if test="stockType != null and stockType!= ''">-->
-<!--        and stock_gid = #{stockType}-->
-<!--      </if>-->
+
 
 
     </where>
diff --git a/src/main/resources/mapper/UserRechargeMapper.xml b/src/main/resources/mapper/UserRechargeMapper.xml
index 2f36d6c..bd21b92 100644
--- a/src/main/resources/mapper/UserRechargeMapper.xml
+++ b/src/main/resources/mapper/UserRechargeMapper.xml
@@ -22,18 +22,18 @@
     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="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
-      )
-    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}
-      )
-  </insert>
+<!--  <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-->
+<!--      )-->
+<!--    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}-->
+<!--      )-->
+<!--  </insert>-->
   <insert id="insertSelective" parameterType="com.nq.pojo.UserRecharge" >
     insert into user_recharge
     <trim prefix="(" suffix=")" suffixOverrides="," >
diff --git a/src/main/resources/mapper/UserWithdrawMapper.xml b/src/main/resources/mapper/UserWithdrawMapper.xml
index e8e5e9b..3082694 100644
--- a/src/main/resources/mapper/UserWithdrawMapper.xml
+++ b/src/main/resources/mapper/UserWithdrawMapper.xml
@@ -23,7 +23,7 @@
   </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>

--
Gitblit v1.9.3