1
zj
2024-08-15 171628f9a463f5af3ce55d897fa37b1b80ea4e8b
src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
@@ -117,18 +117,28 @@
          * 盈 正数
          */
         order.setProfit(Arith.add(0.0D, Math.abs(amount)));
         redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), 0);
         Object profit = redisHandler.get("MONEY_CONTRACT_PROFIT_" + order.getPartyId().toString());
         if(!ObjectUtils.isEmpty(profit)){
            if(Double.parseDouble(profit.toString()) < 0 ){
               redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), 0);
               Object money = redisHandler.get("PARTY_ID_MONEY_" + order.getPartyId().toString());
               if(!ObjectUtils.isEmpty(money)){
                  Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
                  wallet.setMoney(Double.parseDouble(money.toString()));
                  redisHandler.setSync(WalletRedisKeys.WALLET_PARTY_ID + wallet.getPartyId().toString(), wallet);
                  redisHandler.pushAsyn(WalletRedisKeys.WALLET_QUEUE_UPDATE, new WalletMessage(order.getPartyId().toString(), amount));
               }
            }
         }
      } else if ("loss".equals(profit_loss)) {
         order.setProfit(Arith.sub(0.0D,Math.abs(amount) ));
         //---------------------------------------------  这一段代码是新加的,服务器上面现在是注释的
         //定义一个 总浮动亏损的值
         logger.info("----------fffffffffffffff-------"+redisHandler);
         logger.info("----------ssssssssssss-------"+order.getPartyId().toString());
         Double contractAssetsProfit = (Double) redisHandler.get(ContractRedisKeys.CONTRACT_ASSETS_PROFIT_PARTY_ID + order.getPartyId().toString());
         logger.info("----------bbbbbbbbbbbbbbbbbb-------"+contractAssetsProfit);
         double contractProfit = null == contractAssetsProfit ? 0.000D : contractAssetsProfit;
         logger.info("----------contractProfit-------"+contractProfit);
         List<ContractOrder> list = contractOrderService.findSubmitted(order.getPartyId().toString(), null, null);
         double deposit = 0;
         for (int i = 0; i < list.size(); i++) {
@@ -136,29 +146,23 @@
            deposit = Arith.add(deposit, close_line.getDeposit());
         }
         double profitt = Arith.add(contractProfit,deposit);
         logger.info("----------盈亏除去保证金之后的值-------"+profitt);
         if(profitt <= 0){
            redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), profitt);
         }else{
            redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), 0);
         }
         logger.info("----------1111111111111-------");
         //修改余额,每次修改取平仓前余额减去浮动亏损
         Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
         logger.info("----------wallet-------"+wallet);
         Object money = redisHandler.get("PARTY_ID_MONEY_" + order.getPartyId().toString());
         Object profit = redisHandler.get("MONEY_CONTRACT_PROFIT_" + order.getPartyId().toString());
         logger.info("----------money-------"+money);
         logger.info("----------profit-------"+profit);
         if(!ObjectUtils.isEmpty(money) && !ObjectUtils.isEmpty(profit)){
            wallet.setMoney(Arith.add(Double.parseDouble(money.toString()),Double.parseDouble(profit.toString())));
            double residueMoney = Arith.add(Double.parseDouble(money.toString()), Double.parseDouble(profit.toString()));
            //如果当前余额减去浮动亏损小于0,将进入强平,这里不再进行余额更新
            if(residueMoney > 0){
               wallet.setMoney(residueMoney);
               redisHandler.setSync(WalletRedisKeys.WALLET_PARTY_ID + wallet.getPartyId().toString(), wallet);
            }
         }
         logger.info("----------2222222222222-------");
         redisHandler.setSync(WalletRedisKeys.WALLET_PARTY_ID + wallet.getPartyId().toString(), wallet);
         logger.info("----------3333333333333333------");
         redisHandler.pushAsyn(WalletRedisKeys.WALLET_QUEUE_UPDATE, new WalletMessage(order.getPartyId().toString(), amount));
         logger.info("----------4444444444444-------");
         //------------------------------------------
      }
      double changeRatio;
@@ -231,8 +235,15 @@
            profit = Arith.add(profit, Arith.add(close_line.getProfit(), close_line.getDeposit()));
         }
         Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
         double totleMoney = wallet.getMoney();
         Object money = redisHandler.get("PARTY_ID_MONEY_" + order.getPartyId().toString());
         double totleMoney = 0;
         if(ObjectUtils.isEmpty(money)){
            totleMoney = wallet.getMoney();
         }else{
            totleMoney = Double.parseDouble(money.toString());
         }
         if (Arith.add(profit,totleMoney) <= 0) {
            redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), 0);
            /**
             * 触发全仓强平
             */