Helius
2020-08-31 5ea4b4d2477c425efd18b9b9428f707ec1ccc634
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -1,8 +1,11 @@
package com.xcong.excoin.modules.contract.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.modules.coin.dao.MemberAccountFlowEntityDao;
import com.xcong.excoin.modules.coin.entity.MemberAccountFlowEntity;
import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
@@ -24,10 +27,7 @@
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.rabbit.pricequeue.OrderModel;
import com.xcong.excoin.rabbit.producer.OrderProducer;
import com.xcong.excoin.utils.CacheSettingUtils;
import com.xcong.excoin.utils.CalculateUtil;
import com.xcong.excoin.utils.CoinTypeConvert;
import com.xcong.excoin.utils.ThreadPoolUtils;
import com.xcong.excoin.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
@@ -75,6 +75,10 @@
    private MemberSettingDao memberSettingDao;
    @Resource
    private ContractHoldOrderDao contractHoldOrderDao;
    @Resource
    private ContractEntrustOrderDao contractEntrustOrderDao;
    @Resource
    private RedisUtils redisUtils;
    public void dealOrderFromMq(List<OrderModel> list, Integer type) {
@@ -130,6 +134,23 @@
        }
    }
    /**
     * 止盈/止损后删除全仓委托平仓单
     *
     * @param orderNo
     */
    private void deleteEntrustCloseOrder(String orderNo) {
        // 若平掉所有张数,若存在委托平仓,则删除委托平仓记录
        List<ContractEntrustOrderEntity> entrustOrders = contractEntrustOrderDao.selectEntrustOrderByOrderNo(orderNo);
        if (CollUtil.isNotEmpty(entrustOrders)) {
            for (ContractEntrustOrderEntity entrustOrder : entrustOrders) {
                contractEntrustOrderDao.deleteById(entrustOrder.getId());
            }
        }
    }
    /**
     * 开多止盈
@@ -224,6 +245,11 @@
                        //返佣
                        ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
                        // 全仓模式,止盈/止损 删除委托平仓
                        if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) {
                            deleteEntrustCloseOrder(order.getOrderNo());
                        }
                    }
                }
            }
@@ -234,6 +260,7 @@
    /**
     * 开空止盈
     */
    @Transactional(rollbackFor = Exception.class)
    public void dealForLessStopPro(List<ContractHoldOrderEntity> orderList, List<OrderModel> list) {
        //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
        //System.out.println("开空止盈订单batchno:" + batchno);
@@ -322,6 +349,11 @@
                        //返佣
                        ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
                        // 全仓模式,止盈/止损 删除委托平仓
                        if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) {
                            deleteEntrustCloseOrder(order.getOrderNo());
                        }
                    }
                }
            }
@@ -334,6 +366,7 @@
     *
     * @param
     */
    @Transactional(rollbackFor = Exception.class)
    public void dealForMoreLoss(List<ContractHoldOrderEntity> orderList, List<OrderModel> list) {
        //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
        //System.out.println("开多止损批次号batchno:" + batchno);
@@ -419,6 +452,11 @@
                        //返佣
                        ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
                        // 全仓模式,止盈/止损 删除委托平仓
                        if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) {
                            deleteEntrustCloseOrder(order.getOrderNo());
                        }
                    }
                }
            }
@@ -430,6 +468,7 @@
     *
     * @param
     */
    @Transactional(rollbackFor = Exception.class)
    public void dealForLessLoss(List<ContractHoldOrderEntity> orderList, List<OrderModel> list) {
        // List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
        //System.out.println("开空止损批次号batchno:" + batchno);
@@ -515,6 +554,11 @@
                        //返佣
                        ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
                        // 全仓模式,止盈/止损 删除委托平仓
                        if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) {
                            deleteEntrustCloseOrder(order.getOrderNo());
                        }
                    }
                }
            }
@@ -730,6 +774,11 @@
                modelMap.put(model.getOrderId(), model.getOperateNo());
            }
            for (ContractHoldOrderEntity coinsOrder : orderList) {
                List<Object> types = redisUtils.lGet(AppContants.RABBIT_TYPE + coinsOrder.getId(), 0, -1);
                if(types.contains(9) || types.contains(10) || types.contains(11) || types.contains(12)) {
                    log.info("存在止盈/止损 orderId : {}, types : {}", coinsOrder.getId(), JSONObject.toJSONString(types));
                    continue;
                }
                Long orderId = coinsOrder.getId();
                Integer operateNo = coinsOrder.getOperateNo();
                //判断当前订单是否是最新的爆仓价 不相等时直接进入下一个订单