| | |
| | | } |
| | | |
| | | /** |
| | | * 修改持仓订单方向(买涨/买跌) |
| | | */ |
| | | public String saveOrderDirection(String orderNo, String direction, String operaName) { |
| | | if (!FuturesOrder.DIRECTION_BUY.equals(direction) && !FuturesOrder.DIRECTION_SELL.equals(direction)) { |
| | | return "方向参数错误"; |
| | | } |
| | | String message = ""; |
| | | boolean lock = false; |
| | | while (true) { |
| | | try { |
| | | if (!FuturesLock.add(orderNo)) { |
| | | continue; |
| | | } |
| | | lock = true; |
| | | |
| | | FuturesOrder futuresOrder = (FuturesOrder) RedisUtil.get(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + orderNo); |
| | | if (futuresOrder == null) { |
| | | futuresOrder = getOne(new LambdaQueryWrapper<FuturesOrder>() |
| | | .eq(FuturesOrder::getOrderNo, orderNo) |
| | | .eq(FuturesOrder::getState, FuturesOrder.STATE_SUBMITTED)); |
| | | } |
| | | if (futuresOrder == null) { |
| | | message = "订单已结算或不存在"; |
| | | break; |
| | | } |
| | | if (direction.equals(futuresOrder.getDirection())) { |
| | | message = "方向未变化"; |
| | | break; |
| | | } |
| | | |
| | | Map<String, Double> futuresAssetsOld = this.walletService.getMoneyFuturesByOrder(futuresOrder); |
| | | String oldDirection = futuresOrder.getDirection(); |
| | | futuresOrder.setDirection(direction); |
| | | |
| | | List<Realtime> realtimeList = this.dataService.realtime(futuresOrder.getSymbol()); |
| | | if (CollectionUtil.isNotEmpty(realtimeList) && realtimeList.get(0).getClose() != null) { |
| | | refreshCache(futuresOrder, realtimeList.get(0).getClose().doubleValue()); |
| | | } else { |
| | | RedisUtil.set(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + futuresOrder.getOrderNo(), futuresOrder); |
| | | cache.put(futuresOrder.getOrderNo(), futuresOrder); |
| | | updateById(futuresOrder); |
| | | } |
| | | |
| | | Map<String, Double> futuresAssetsOrder = this.walletService.getMoneyFuturesByOrder(futuresOrder); |
| | | Double futuresAssets = (Double) RedisUtil.get(FuturesRedisKeys.FUTURES_ASSETS_PARTY_ID + futuresOrder.getPartyId()); |
| | | Double futuresAssetsProfit = (Double) RedisUtil.get(FuturesRedisKeys.FUTURES_ASSETS_PROFIT_PARTY_ID + futuresOrder.getPartyId()); |
| | | RedisUtil.set(FuturesRedisKeys.FUTURES_ASSETS_PARTY_ID + futuresOrder.getPartyId(), |
| | | Arith.add(null == futuresAssets ? 0.000D : futuresAssets, futuresAssetsOrder.get("money_futures") - futuresAssetsOld.get("money_futures"))); |
| | | RedisUtil.set(FuturesRedisKeys.FUTURES_ASSETS_PROFIT_PARTY_ID + futuresOrder.getPartyId(), |
| | | Arith.add(null == futuresAssetsProfit ? 0.000D : futuresAssetsProfit, futuresAssetsOrder.get("money_futures_profit") - futuresAssetsOld.get("money_futures_profit"))); |
| | | |
| | | User party = userService.getById(futuresOrder.getPartyId()); |
| | | String oldDirLabel = FuturesOrder.DIRECTION_BUY.equals(oldDirection) ? "买涨" : "买跌"; |
| | | String newDirLabel = FuturesOrder.DIRECTION_BUY.equals(direction) ? "买涨" : "买跌"; |
| | | Log log = new Log(); |
| | | log.setCategory(Constants.LOG_CATEGORY_OPERATION); |
| | | log.setOperator(operaName); |
| | | log.setUsername(party.getUserName()); |
| | | log.setUserId(party.getUserId()); |
| | | log.setCreateTime(new Date()); |
| | | log.setLog("管理员手动修改交割订单方向。订单号[" + futuresOrder.getOrderNo() + "],原方向[" + oldDirLabel + "],修改后方向[" + newDirLabel + "]."); |
| | | this.logService.save(log); |
| | | updateById(futuresOrder); |
| | | ThreadUtils.sleep(100); |
| | | } catch (Throwable e) { |
| | | log.error("saveOrderDirection error:", e); |
| | | message = "修改错误"; |
| | | } finally { |
| | | if (lock) { |
| | | FuturesLock.remove(orderNo); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return message; |
| | | } |
| | | |
| | | /** |
| | | * 业绩交易奖励 |
| | | */ |
| | | public void saveRecomProfit(String partyId, BigDecimal volume) { |