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; // } // // //}