1
zj
2024-07-12 43f6f6270ecd47542e6c64450d2e3d6b8526304e
1
11 files modified
258 ■■■■ changed files
src/main/java/com/nq/controller/echo/EChoController.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/EchoServices.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PriceServicesImpl.java 130 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockServiceImpl.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/task/stock/CarryPositionTask.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/task/stock/StockTask.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/ws/WebSocketClientBeanConfig.java 96 ●●●● patch | view | raw | blame | history
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);
        }
src/main/java/com/nq/service/impl/EchoServices.java
@@ -73,7 +73,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));
@@ -116,7 +116,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;
src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -11,6 +11,7 @@
import com.nq.pojo.*;
import com.nq.service.IPriceServices;
import com.nq.service.IStockConfigServices;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.http.HttpClientRequest;
import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.timeutil.TimeUtil;
@@ -18,21 +19,20 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.*;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import  java.io.BufferedReader;
import  java.io.InputStreamReader;
import  java.net.HttpURLConnection;
import  java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
@Service
public class PriceServicesImpl  implements IPriceServices {
public class PriceServicesImpl implements IPriceServices {
    @Resource
@@ -50,41 +50,40 @@
    @Override
    public BigDecimal getNowPrice(String stockCode) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
        if(stockSetting != null){
            if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
                if(stockSetting.getType().equals("0")){
                    return  new BigDecimal(stockSetting.getPrice());
                }else{
                    String s = doGet(stock.getStockCode());
                    if(null != s){
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code", stockCode));
        if (stockSetting != null) {
            if (TimeUtil.isTradingHour(stockSetting.getStartTime(), stockSetting.getEndTime())) {
                if (stockSetting.getType().equals("0")) {
                    return new BigDecimal(stockSetting.getPrice());
                } else {
                    String s = doPost(stock.getStockCode());
                    if (null != s) {
                        Map<String, Object> stringObjectMap = jsonToMap(s);
                        return   new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
                        return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
                    }
                }
            }
        }
        String s = doGet(stock.getStockCode());
        if(null != s) {
        String s = doPost(stock.getStockCode());
        if (null != s) {
            Map<String, Object> stringObjectMap = jsonToMap(s);
            return  new BigDecimal(stringObjectMap.get("last").toString());
            return new BigDecimal(stringObjectMap.get("last").toString());
        }
        return BigDecimal.ZERO;
    }
    @Override
    public Map<String, Object> getNewStock(String stockCode) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        String s = doGet(stock.getStockCode());
        if(null != s){
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
        String s = doPost(stock.getStockCode());
        if (null != s) {
            Map<String, Object> stringObjectMap = jsonToMap(s);
            return   stringObjectMap;
            return stringObjectMap;
        }
        return null;
    }
    public static Map<String, Object> jsonToMap(String json) {
@@ -100,23 +99,33 @@
        }
    }
    public String doGet(String pid){
        String  apiUrl  =  "http://api-in-2.js-stock.top/stock?pid="+pid+"&key=eVKtHt7aG4m6ozwWL9qG";
        try  {
            URL  url  =  new  URL(apiUrl);
            HttpURLConnection  connection  =  (HttpURLConnection)  url.openConnection();
            connection.setRequestMethod("GET");
    public String doPost(String pid) {
            BufferedReader in  =  new  BufferedReader(new InputStreamReader(connection.getInputStream()));
            String  inputLine;
            StringBuffer  response  =  new  StringBuffer();
        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();
            while  ((inputLine  =  in.readLine())  !=  null)  {
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            String body = "pid=" + pid;
            OutputStream os = con.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
            writer.write(body);
            writer.flush();
            writer.close();
            os.close();
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            return response.toString();
        }  catch  (Exception  e)  {
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
@@ -124,37 +133,38 @@
    @Override
    public BigDecimal getNowPrice(String stockCode, String stockType) {
      BigDecimal nowPrice =   getNowPrice(stockCode);
      if (!stockType.equals("DZ")){
          return  nowPrice;
      }
     QueryWrapper queryWrapper =    new QueryWrapper<>();
        queryWrapper.eq("stock_code",stockCode);
       StockDz stockDz =  stockDZMapper.selectOne(queryWrapper);
       if(stockDz == null){
           return  nowPrice;}
       return  nowPrice.multiply(stockDz.getDiscount());
        BigDecimal nowPrice = getNowPrice(stockCode);
        if (!stockType.equals("DZ")) {
            return nowPrice;
        }
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("stock_code", stockCode);
        StockDz stockDz = stockDZMapper.selectOne(queryWrapper);
        if (stockDz == null) {
            return nowPrice;
        }
        return nowPrice.multiply(stockDz.getDiscount());
    }
    @Override
    public boolean isLimitUpBuy(String stockCode) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        StockRealTimeBean stockRealTimeBean =  RedisKeyUtil.getCacheRealTimeStock(stock);
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
        StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock);
        BigDecimal pcp = new BigDecimal(stockRealTimeBean.getPcp());
        StockConfig stockConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_UP_POINT.getCode());
        if(stockConfig == null){
        if (stockConfig == null) {
            return true;
        }
        if(pcp.compareTo(new BigDecimal(0))<0){
            return  true;
        if (pcp.compareTo(new BigDecimal(0)) < 0) {
            return true;
        }
        if(new BigDecimal(stockConfig.getCValue()).compareTo(pcp)<=0){
        if (new BigDecimal(stockConfig.getCValue()).compareTo(pcp) <= 0) {
            StockConfig limitConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_UP_IS_BUY.getCode());
            if(limitConfig.getCValue().equals("1")){
                return  true;
            if (limitConfig.getCValue().equals("1")) {
                return true;
            }
            return false;
        }
@@ -163,16 +173,16 @@
    @Override
    public boolean isLimitDownSell(String stockCode) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        StockRealTimeBean stockRealTimeBean =  RedisKeyUtil.getCacheRealTimeStock(stock);
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
        StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock);
        BigDecimal pcp = new BigDecimal(stockRealTimeBean.getPcp());
        StockConfig stockConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_DOWN_POINT.getCode());
        if(stockConfig == null){
        if (stockConfig == null) {
            return true;
        }
        if(pcp.compareTo(new BigDecimal(stockConfig.getCValue()))<=0){
        if (pcp.compareTo(new BigDecimal(stockConfig.getCValue())) <= 0) {
            StockConfig limitConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_DOWN_IS_SELL.getCode());
            if(!limitConfig.getCValue().equals("1")){
            if (!limitConfig.getCValue().equals("1")) {
                return false;
            }
        }
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) {
@@ -460,11 +460,11 @@
    public Object getKData(String pid, String interval, String stockType) {
        EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
        if(eStockType == EStockType.JP){
            Object object = HttpUtil.get(eStockType.stockUrl + "api/all/getKData.do?pid=" + pid + "&interval=" + interval + "&stockType=in");
            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).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");
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -331,7 +331,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);
@@ -1557,7 +1557,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);
        }
@@ -1645,7 +1645,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;
src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -601,7 +601,7 @@
        userPositions = userPositionMapper.
                findMyPositionByCodeAndSpell(userId,
                        "","",
                        0, "IN");
                        0, "JP");
        List<UserPositionVO> userPositionVOS = Lists.newArrayList();
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -83,7 +83,7 @@
            return ServerResponse.createByErrorMsg("参数错误",request);
        }
        User user = iUserService.getCurrentRefreshUser(request);
        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("code", model.getNewCode()).eq("type",model.getType()));
@@ -196,7 +196,7 @@
                    model.setBond(stockSubscribe.getPrice().multiply(BigDecimal.valueOf(model.getApplyNumber())));
                    model.setDbMoney(model.getDbMoney());
                    //客户中签直接扣除客户账户可用资金
                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userStockSubscribe.getUserId());
                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", userStockSubscribe.getUserId());
                    if(null == userAssets){
                        return ServerResponse.createByErrorMsg("客户资金账户不存在");
                    }
src/main/java/com/nq/service/impl/UserWithdrawServiceImpl.java
@@ -221,7 +221,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("用户资金账户不存在");
            }
@@ -334,7 +334,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("用户资金账户不存在");
            }
src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -112,7 +112,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);
src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -61,7 +61,7 @@
    /**
     * 同步系统所需要的股票
     */
    @Scheduled(cron = "0/5 * * * * ?")
    @Scheduled(cron = "0 */10 * * * ?")
    public void syncINStockData() {
        if (syncINStockData.get()) { // 判断任务是否在处理中
            return;
src/main/java/com/nq/ws/WebSocketClientBeanConfig.java
@@ -1,48 +1,48 @@
package com.nq.ws;
import com.nq.enums.EStockType;
import com.nq.utils.PropertiesUtil;
import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Configuration
public class WebSocketClientBeanConfig {
    @Bean
    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) {
        }
        return retMap;
    }
}
//package com.nq.ws;
//
//
//import com.nq.enums.EStockType;
//import com.nq.utils.PropertiesUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.java_websocket.client.WebSocketClient;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.net.URI;
//import java.util.HashMap;
//import java.util.Map;
//
//@Slf4j
//@Configuration
//public class WebSocketClientBeanConfig {
//
//
//    @Bean
//    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) {
//        }
//
//
//
//        return retMap;
//    }
//
//
//}