2
peternameyakj
2024-08-14 9bcf85f8d8f9b503e386a67924f5943cd77bd813
2
1 files modified
39 ■■■■ changed files
src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java 39 ●●●● patch | view | raw | blame | history
src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
@@ -10,7 +10,10 @@
import kernel.util.Arith;
import kernel.util.ThreadUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.util.ObjectUtils;
import project.contract.ContractLock;
import project.contract.ContractOrder;
@@ -26,12 +29,14 @@
import project.wallet.WalletService;
import project.wallet.consumer.WalletMessage;
public class ContractOrderCalculationServiceImpl implements ContractOrderCalculationService {
public class ContractOrderCalculationServiceImpl implements ContractOrderCalculationService, ApplicationContextAware {
    private ApplicationContext applicationContext;
    private static final Logger logger = LoggerFactory.getLogger(ContractOrderCalculationServiceImpl.class);
    private ContractOrderService contractOrderService;
    private DataService dataService;
    private WalletService walletService;
    private RedisHandler redisHandler;
//    private RedisHandler redisHandler;
    private AssetService assetService;
    public final static String STATE_SUBMITTED = "submitted";
    public final static String STATE_CREATED = "created";
@@ -106,11 +111,13 @@
        double amount = Arith.mul(div, Arith.sub(currentPrice, order.getTrade_avg_price()));
        logger.info("---------盈亏金额:"+amount);
        logger.info("---------盈亏:"+profit_loss);
        RedisHandler redisHandler = getRedisHandler();
        if ("profit".equals(profit_loss)) {
            /**
             * 盈 正数
             */
            order.setProfit(Arith.add(0.0D, Math.abs(amount)));
            redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), 0);
        } else if ("loss".equals(profit_loss)) {
            order.setProfit(Arith.sub(0.0D,Math.abs(amount) ));
@@ -118,12 +125,22 @@
            //定义一个 总浮动亏损的值
            logger.info("----------fffffffffffffff-------"+redisHandler);
            logger.info("----------ssssssssssss-------"+order.getPartyId().toString());
            Double contractAssetsProfit = (Double) this.redisHandler.get(ContractRedisKeys.CONTRACT_ASSETS_PROFIT_PARTY_ID + 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);
            if(contractProfit <= 0){
                redisHandler.setSync("MONEY_CONTRACT_PROFIT_"+order.getPartyId().toString(), contractProfit);
            List<ContractOrder> list = contractOrderService.findSubmitted(order.getPartyId().toString(), null, null);
            double deposit = 0;
            for (int i = 0; i < list.size(); i++) {
                ContractOrder close_line = list.get(i);
                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-------");
            //修改余额,每次修改取平仓前余额减去浮动亏损
@@ -134,7 +151,7 @@
            logger.info("----------money-------"+money);
            logger.info("----------profit-------"+profit);
            if(!ObjectUtils.isEmpty(money) && !ObjectUtils.isEmpty(profit)){
                wallet.setMoney(Arith.sub(Double.parseDouble(money.toString()),Double.parseDouble(profit.toString())));
                wallet.setMoney(Arith.add(Double.parseDouble(money.toString()),Double.parseDouble(profit.toString())));
            }
            logger.info("----------2222222222222-------");
            redisHandler.setSync(WalletRedisKeys.WALLET_PARTY_ID + wallet.getPartyId().toString(), wallet);
@@ -291,13 +308,19 @@
        this.order_close_line_type = order_close_line_type;
    }
    public void setRedisHandler(RedisHandler redisHandler) {
        this.redisHandler = redisHandler;
    public RedisHandler getRedisHandler() {
        return applicationContext.getBean(RedisHandler.class);
    }
    public void setAssetService(AssetService assetService) {
        this.assetService = assetService;
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}