| | |
| | | JSONArray argsArray = new JSONArray(); |
| | | JSONObject args = new JSONObject(); |
| | | args.put("channel", ACCOUNTWS_CHANNEL); |
| | | args.put(CCY_KEY, CoinEnums.USDT.getCode()); |
| | | // args.put(CCY_KEY, CoinEnums.USDT.getCode()); |
| | | JSONObject updateInterval = new JSONObject(); |
| | | updateInterval.put("updateInterval",CoinEnums.UPDATEINTERVAL.getCode()); |
| | | args.put("extraParams", updateInterval); |
| | | argsArray.add(args); |
| | | |
| | | String connId = MallUtils.getOrderNum(ACCOUNTWS_CHANNEL); |
| | |
| | | * @param redisUtils Redis 工具类实例,用于存储账户相关信息 |
| | | */ |
| | | public static void handleEvent(JSONObject response, RedisUtils redisUtils) { |
| | | |
| | | |
| | | log.info("开始执行AccountWs......"); |
| | | try { |
| | | JSONArray dataArray = response.getJSONArray(DATA_KEY); |
| | | if (dataArray == null || dataArray.isEmpty()) { |
| | |
| | | JSONObject accountData = dataArray.getJSONObject(i); |
| | | JSONArray detailsArray = accountData.getJSONArray(DETAILS_KEY); |
| | | if (detailsArray == null || detailsArray.isEmpty()) { |
| | | log.warn("账户频道{}数据为空",CoinEnums.USDT.getCode()); |
| | | continue; |
| | | } |
| | | |
| | |
| | | JSONObject detail = detailsArray.getJSONObject(j); |
| | | |
| | | String ccy = detail.getString(CCY_KEY); |
| | | if (!CoinEnums.USDT.getCode().equals(ccy)) { |
| | | log.warn("账户频道币种不匹配,跳过处理"); |
| | | continue; |
| | | } |
| | | |
| | | String availBalStr = detail.getString(AVAIL_BAL_KEY); |
| | | String cashBalStr = detail.getString(CASH_BAL_KEY); |
| | | String eq = detail.getString(EQ_KEY); |
| | | |
| | | if (StrUtil.isBlank(ccy) || StrUtil.isBlank(availBalStr) || StrUtil.isBlank(cashBalStr)) { |
| | | log.warn("账户详情缺失必要字段,跳过处理"); |
| | | log.warn("账户频道缺失必要字段,跳过处理"); |
| | | continue; |
| | | } |
| | | |
| | |
| | | BigDecimal cashBal = parseBigDecimalSafe(cashBalStr); |
| | | |
| | | if (availBal == null || cashBal == null || cashBal.compareTo(BigDecimal.ZERO) == 0) { |
| | | log.warn("无效的账户余额数据,跳过处理"); |
| | | log.warn("账户频道无效的账户余额数据,跳过处理"); |
| | | continue; |
| | | } |
| | | |
| | | // 可用余额 / 现金余额 比例判断是否允许开仓 |
| | | BigDecimal divide = availBal.divide(cashBal, 4, RoundingMode.DOWN); |
| | | |
| | | String state; |
| | | if (divide.compareTo(KANG_CANG_THRESHOLD) > 0) { |
| | | log.info(OrderParamEnums.STATE_1.getName()); |
| | | state = OrderParamEnums.STATE_1.getValue(); |
| | | } else if (divide.compareTo(ZHI_SUN_THRESHOLD) > 0) { |
| | | log.warn(OrderParamEnums.STATE_2.getName()); |
| | | state = OrderParamEnums.STATE_2.getValue(); |
| | | } else { |
| | | log.error(OrderParamEnums.STATE_3.getName()); |
| | | String state = (String) redisUtils.get(InstrumentsWs.INSTRUMENTSWS_CHANNEL + ":" + CoinEnums.HE_YUE.getCode() + ":state"); |
| | | String out = (String) redisUtils.get(InstrumentsWs.INSTRUMENTSWS_CHANNEL + ":" + CoinEnums.HE_YUE.getCode() + ":out"); |
| | | if (OrderParamEnums.STATE_4.getValue().equals(state)){ |
| | | log.info(OrderParamEnums.STATE_4.getName()); |
| | | state = OrderParamEnums.STATE_4.getValue(); |
| | | }else if(OrderParamEnums.STATE_3.getValue().equals(state) && OrderParamEnums.OUT_YES.getValue().equals(out)){ |
| | | log.info(OrderParamEnums.STATE_3.getName()); |
| | | state = OrderParamEnums.STATE_3.getValue(); |
| | | }else{ |
| | | if (divide.compareTo(KANG_CANG_THRESHOLD) > 0) { |
| | | log.info(OrderParamEnums.STATE_1.getName()); |
| | | state = OrderParamEnums.STATE_1.getValue(); |
| | | } else if (divide.compareTo(ZHI_SUN_THRESHOLD) > 0) { |
| | | log.warn(OrderParamEnums.STATE_2.getName()); |
| | | state = OrderParamEnums.STATE_2.getValue(); |
| | | } else { |
| | | log.error(OrderParamEnums.STATE_0.getName()); |
| | | state = OrderParamEnums.STATE_0.getValue(); |
| | | } |
| | | } |
| | | |
| | | // 根据可用余额计算下单总保证金与每次下单金额 |