1 files added
13 files modified
| | |
| | | </parent> |
| | | <groupId>com.xcong</groupId> |
| | | <artifactId>excoin</artifactId> |
| | | <version>roc</version> |
| | | <version>cpv</version> |
| | | <name>excoin</name> |
| | | <description>Demo project for Spring Boot</description> |
| | | |
| | |
| | | * @author wzy |
| | | */ |
| | | public enum CoinTypeEnum { |
| | | USDT, BTC, ETH, LTC, EOS, XRP, BCH, ETC,ROC |
| | | USDT, BTC, ETH, LTC, EOS, XRP, BCH, ETC,CPV |
| | | } |
| | |
| | | ,EOS("EOS", "EOS/USDT") |
| | | ,XRP("XRP", "XRP/USDT") |
| | | ,ETC("ETC", "ETC/USDT") |
| | | ,ROC("ROC", "ROC/USDT"); |
| | | ,CPV("CPV", "CPV/USDT"); |
| | | |
| | | private String name; |
| | | |
| | |
| | | }
|
| | | }
|
| | | break;
|
| | | case "ROC":
|
| | | case "CPV":
|
| | | address = RocService.createWallet();
|
| | | map.put("address", address);
|
| | | break;
|
| | |
| | | */ |
| | | public class RocService { |
| | | |
| | | private final static String URL = "http://api.rocwallet.cc"; |
| | | private final static String URL = "121.196.181.91:9005"; |
| | | |
| | | private final static String CREATE_WALLET= "/init/createaccount"; |
| | | public static String createWallet(){ |
| | |
| | | } |
| | | Long memberId = memberCoinAddress.getMemberId(); |
| | | // 查询钱包 并更新 |
| | | MemberWalletCoinEntity walletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.ROC.name()); |
| | | MemberWalletCoinEntity walletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.CPV.name()); |
| | | if (walletCoinEntity == null) { |
| | | // 创建一个钱包 |
| | | // 创建这个钱包 |
| | |
| | | |
| | | memberWalletCoinDao.updateBlockBalance(walletCoinEntity.getId(), balance, BigDecimal.ZERO, 0); |
| | | |
| | | String orderNo = insertCoinCharge(address, memberId, balance, CoinTypeEnum.ROC.name(), "", BigDecimal.ZERO,null); |
| | | String orderNo = insertCoinCharge(address, memberId, balance, CoinTypeEnum.CPV.name(), "", BigDecimal.ZERO,null); |
| | | // 插入财务记录 |
| | | LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", balance, CoinTypeEnum.ROC.name(), 1, 1); |
| | | LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", balance, CoinTypeEnum.CPV.name(), 1, 1); |
| | | |
| | | try{ |
| | | ThreadPoolUtils.sendDingTalk(5); |
| | | MemberEntity member = memberDao.selectById(memberId); |
| | | if (StrUtil.isNotBlank(member.getPhone())) { |
| | | String amount = balance.toPlainString() + "ROC"; |
| | | String amount = balance.toPlainString() + CoinTypeEnum.CPV.name(); |
| | | Sms106Send.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo); |
| | | } else { |
| | | SubMailSend.sendRechargeMail(member.getEmail(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo); |
| | |
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void dealEntrustCoinOrder() {
|
| | | List<String> ignoreTypes = new ArrayList<>();
|
| | | ignoreTypes.add(SymbolsConstats.ROC);
|
| | | ignoreTypes.add(SymbolsConstats.CPV);
|
| | | List<OrderCoinsEntity> list = orderCoinsDao.selectAllEntrustingCoinOrderList(ignoreTypes);
|
| | | if (CollUtil.isNotEmpty(list)) {
|
| | | for (OrderCoinsEntity orderCoinsEntity : list) {
|
| | |
| | | |
| | | public class SymbolsConstats { |
| | | public final static List<String> EXCHANGE_SYMBOLS = new ArrayList<>(); |
| | | public final static String ROC = "ROC"; |
| | | public final static String CPV = "CPV"; |
| | | static { |
| | | EXCHANGE_SYMBOLS.add("ROC"); |
| | | EXCHANGE_SYMBOLS.add("CPV"); |
| | | } |
| | | } |
| | |
| | | @PostConstruct |
| | | public void initCoinTrade() { |
| | | log.info("#=======撮合交易器开启=======#"); |
| | | String symbol = SymbolsConstats.ROC; |
| | | String symbol = SymbolsConstats.CPV; |
| | | CoinTrader newTrader = new CoinTrader(symbol); |
| | | newTrader.setExchangeProducer(exchangeProducer); |
| | | //newTrader.setKafkaTemplate(kafkaTemplate); |
| | |
| | | processor.initializeThumb(); |
| | | //processor.initializeUsdRate(); |
| | | processor.setIsHalt(false); |
| | | List<ExchangeTrade> nekk = orderCoinDealDao.selectOrderCoinDealByTime(SymbolsConstats.ROC, null, null); |
| | | List<ExchangeTrade> nekk = orderCoinDealDao.selectOrderCoinDealByTime(SymbolsConstats.CPV, null, null); |
| | | processor.process(nekk); |
| | | String symbolUsdt = symbol; |
| | | if(!symbol.contains("USDT")){ |
| | |
| | | */ |
| | | @RabbitListener(queues = RabbitMqConfig.QUEUE_TRADE_PLATE) |
| | | public void tradePlate(String content) { |
| | | tradePlateSendWebSocket.sendMessagePlate("ROC/USDT",content,null); |
| | | tradePlateSendWebSocket.sendMessagePlate("CPV/USDT",content,null); |
| | | } |
| | | |
| | | /** |
| | |
| | | return "EOS/USDT"; |
| | | case "etcusdt": |
| | | return "ETC/USDT"; |
| | | case "rocusdt": |
| | | return "ROC/USDT"; |
| | | case "cpvusdt": |
| | | return "CPV/USDT"; |
| | | default: |
| | | return null; |
| | | } |
| | |
| | | switch (symbol) { |
| | | case "BTC/USDT": |
| | | return "btcusdt"; |
| | | case "ROC/USDT": |
| | | return "rocusdt"; |
| | | case "CPV/USDT": |
| | | return "cpvusdt"; |
| | | default: |
| | | return null; |
| | | } |
| | |
| | | return "EOS_NEW_PRICE"; |
| | | case "ETC/USDT": |
| | | return "ETC_NEW_PRICE"; |
| | | case "ROC/USDT": |
| | | return "ROC_NEW_PRICE"; |
| | | case "CPV/USDT": |
| | | return "CPV_NEW_PRICE"; |
| | | default: |
| | | return null; |
| | | } |
| | |
| | | // 发送一次盘口 |
| | | CoinTraderFactory factory = SpringContextHolder.getBean(CoinTraderFactory.class); |
| | | // 发送订阅消息 |
| | | String nekk = factory.getTrader(SymbolsConstats.ROC).sendTradePlateMessage(); |
| | | String nekk = factory.getTrader(SymbolsConstats.CPV).sendTradePlateMessage(); |
| | | SubResultModel subResultModel = new SubResultModel(); |
| | | subResultModel.setId("rocusdt"); |
| | | subResultModel.setId("cpvusdt"); |
| | | subResultModel.setSubbed(sub); |
| | | synchronized (session) { |
| | | try { |
| | |
| | | String key = "KINE_{}_{}"; |
| | | // 币币k线数据 |
| | | //key = StrUtil.format(key, symbol, period); |
| | | key = StrUtil.format(key, "ROC/USDT", period); |
| | | key = StrUtil.format(key, "CPV/USDT", period); |
| | | RedisUtils bean = SpringContextHolder.getBean(RedisUtils.class); |
| | | Object o = bean.get(key); |
| | | List<CandlestickModel> candlestickModels = new ArrayList<>(); |
New file |
| | |
| | | server: |
| | | port: 8888 |
| | | servlet: |
| | | context-path: / |
| | | |
| | | spring: |
| | | profiles: |
| | | active: dev |
| | | datasource: |
| | | url: jdbc:mysql://121.196.181.91:3306/db_cpv?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8 |
| | | username: cpv_user |
| | | password: cpv123456 |
| | | driver-class-name: com.mysql.jdbc.Driver |
| | | type: com.alibaba.druid.pool.DruidDataSource |
| | | druid: |
| | | initial-size: ${spring_datasource_druid_initial_size:10} |
| | | max-active: ${spring_datasource_druid_max_active:20} |
| | | min-idle: ${spring_datasource_druid_min_idle:3} |
| | | #配置获取连接等待超时的时间 |
| | | max-wait: 60000 |
| | | pool-prepared-statements: true |
| | | max-pool-prepared-statement-per-connection-size: 20 |
| | | validation-query: SELECT 'x' |
| | | test-on-borrow: true |
| | | test-on-return: true |
| | | test-while-idle: true |
| | | #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 |
| | | time-between-eviction-runs-millis: 60000 |
| | | #配置一个连接在池中最小生存的时间,单位是毫秒 |
| | | min-evictable-idle-time-millis: 300000 |
| | | #spring.datasource.druid.max-evguide.ftlictable-idle-time-millis= |
| | | filters: stat,wall |
| | | stat-view-servlet: |
| | | # 默认true 内置监控页面首页/druid/index.html |
| | | enabled: true |
| | | url-pattern: /druid/* |
| | | # 允许清空统计数据 |
| | | reset-enable: true |
| | | login-username: root |
| | | login-password: 123456 |
| | | # IP白名单 多个逗号分隔 |
| | | allow: ${spring_datasource_stat_view_servlet_allow:} |
| | | # IP黑名单 |
| | | deny: ${spring_datasource_stat_view_servlet_deny:} |
| | | ## 国际化配置 |
| | | messages: |
| | | basename: i18n/messages |
| | | ## redis配置 |
| | | redis: |
| | | ## Redis数据库索引(默认为0) |
| | | database: 1 |
| | | ## Redis服务器地址 |
| | | host: 121.196.181.91 |
| | | ## Redis服务器连接端口 |
| | | port: 6379 |
| | | ## Redis服务器连接密码(默认为空) |
| | | password: cpv1qaz!@# |
| | | jedis: |
| | | pool: |
| | | ## 连接池最大连接数(使用负值表示没有限制) |
| | | #spring.redis.pool.max-active=8 |
| | | max-active: 300 |
| | | ## 连接池最大阻塞等待时间(使用负值表示没有限制) |
| | | #spring.redis.pool.max-wait=-1 |
| | | max-wait: -1 |
| | | ## 连接池中的最大空闲连接 |
| | | #spring.redis.pool.max-idle=8 |
| | | max-idle: 100 |
| | | ## 连接池中的最小空闲连接 |
| | | #spring.redis.pool.min-idle=0 |
| | | min-idle: 8 |
| | | ## 连接超时时间(毫秒) |
| | | timeout: 30000 |
| | | rabbitmq: |
| | | host: 121.196.181.91 |
| | | port: 5672 |
| | | username: cpv_user |
| | | password: cpv123456 |
| | | publisher-confirm-type: correlated |
| | | |
| | | |
| | | #custom: |
| | | # rabbitmq: |
| | | # host: 120.27.238.55 |
| | | # port: 5672 |
| | | # username: ct_rabbit |
| | | # password: 123456 |
| | | |
| | | mybatis-plus: |
| | | mapper-locations: classpath:mapper/**/*.xml |
| | | |
| | | |
| | | app: |
| | | debug: false |
| | | redis_expire: 3000 |
| | | kline-update-job: false |
| | | newest-price-update-job: true |
| | | #日线 该任务不能与最新价处于同一个服务器 |
| | | trade: true |
| | | day-line: false |
| | | other-job: true |
| | | loop-job: true |
| | | rabbit-consumer: false |
| | | block-job: true |
| | | |
| | | aliyun: |
| | | oss: |
| | | end-point: https://oss-cn-hangzhou.aliyuncs.com |
| | | bucket-name: https://excoin.oss-cn-hangzhou.aliyuncs.com |
| | | access-key-id: LTAI4GBuydqbJ5bTsDP97Lpd |
| | | access-key-secret: vbCjQtPxABWjqtUlQfzjlA0qAY96fh |
| | | |
| | | rsa: |
| | | public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCf8UFZK54AiK4PRu7tNd+Z8qZ77o/QXCnk25DRmygVpOEu5mGNSAvfnWmKp2pEV2RljeXq3Rid/+LQkonaebMJeXKSF0yxL/VgyeT8JaQ5gNbOrdfdlc+mFkXJyzyJt8YkvApEdPRNSU2ENBn7mgRfD0BYPM4vZ6/rv+de38FJwIDAQAB |
| | | private_key: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIJ/xQVkrngCIrg9G7u0135nypnvuj9BcKeTbkNGbKBWk4S7mYY1IC9+daYqnakRXZGWN5erdGJ3/4tCSidp5swl5cpIXTLEv9WDJ5PwlpDmA1s6t192Vz6YWRcnLPIm3xiS8CkR09E1JTYQ0GfuaBF8PQFg8zi9nr+u/517fwUnAgMBAAECgYBhPt9NvpI4wbanvnndLczr2GJkxfzvSE+vwLCJF4C5FusFHVsxZINggQcg1V75bwRgCiXRMyYefreCSdrCditS43PzTOmE4RRrpxLlm8oubJc0C98LQ2qlN9AsUqL5IHpVGgbHDyWAwjc1GBID6nwXKpxq1/VodFqhahG9D5EZsQJBALnkb+5VTxQbiyQI4Uc9NIvAyVcNY1OisbvY6tvNgdBbJkADgAb78M1HWxxYjUqsvzggNHc7cWqWBHMgpnJaqm8CQQCztze4D7uAk7OC9MJHY5eE980J8Kk+GEZKxz4LahzU6V6dcb9GFac3wEtgilj/tOAn9y0/Q8sm9vvCIbMDzgzJAkEAqRYcqhF26LdVDOX25DHMBgLKISDQZFbsjA13M4/usHL4i+mjHrc0BcUOHu59NpuDI65HitzLAUSLr5zXSdUmiQJAW77wOg4GCejdXsB3IhzMsHwU97sdm26nC+vVV9xvJZ6Rx8zW+f9543NOx9U5BCmhuaVtOvvwDU9PTVcI3atmSQJAXAIJ5gGdtXx0DXiX4VvzNFHqgaqHMGvXyjNVkU2FYQbSAd2A6app4uRO+BkZu9dSjh14m+oXMnV2HzAN2rRnjA== |
| | |
| | | |
| | | @Test |
| | | public void buy(){ |
| | | redisUtils.set("ROC_NEW_PRICE",new BigDecimal("12.33")); |
| | | } |
| | | } |