//package com.xcong.excoin.modules.contract.service.impl;
|
//
|
//import cn.hutool.core.bean.BeanUtil;
|
//import com.alibaba.fastjson.JSONObject;
|
//import com.kebex.app.dao.member.AgentReturnMapper;
|
//import com.kebex.app.dao.member.MemberMapper;
|
//import com.kebex.app.dao.member.WalletDao;
|
//import com.kebex.app.dao.order.OrderMapper;
|
//import com.kebex.app.dao.trade.TradeMapper;
|
//import com.kebex.app.entity.member.*;
|
//import com.kebex.app.entity.order.CoinsCoinsOrder;
|
//import com.kebex.app.entity.trade.TradeSetting;
|
//import com.kebex.app.entity.trade.TradeSymbolSku;
|
//import com.kebex.app.service.member.MemberService;
|
//import com.kebex.common.cache.TradeSettingCache;
|
//import com.kebex.pricequeue.OrderModel;
|
//import com.kebex.rabbit.producer.ExampleProducer;
|
//import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
|
//import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
|
//import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
|
//import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper;
|
//import com.xcong.excoin.modules.contract.service.ContractEntrustOrderService;
|
//import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
|
//import com.xcong.excoin.modules.contract.service.ContractOrderService;
|
//import com.xcong.excoin.modules.member.entity.MemberEntity;
|
//import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
|
//import com.xcong.excoin.modules.member.service.MemberService;
|
//import com.xcong.excoin.modules.member.service.MemberWalletContractService;
|
//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 org.apache.commons.collections.CollectionUtils;
|
//import org.springframework.beans.factory.annotation.Autowired;
|
//import org.springframework.stereotype.Component;
|
//import org.springframework.stereotype.Service;
|
//
|
//import javax.annotation.Resource;
|
//import java.math.BigDecimal;
|
//import java.math.RoundingMode;
|
//import java.util.*;
|
//
|
//@Service
|
//public class OrderWebsocketServiceImpl {
|
//
|
// @Resource
|
// ContractHoldOrderService contractHoldOrderService;
|
//
|
//
|
// @Resource
|
// ContractOrderService contractOrderService;
|
//
|
// @Resource
|
// ContractEntrustOrderService contractEntrustOrderService;
|
//
|
//
|
// @Resource
|
// MemberWalletContractService memberWalletContractService;
|
//
|
//
|
// @Resource
|
// CacheSettingUtils cacheSettingUtils;
|
//
|
// @Resource
|
// OrderProducer producer;
|
//
|
// @Resource
|
// MemberService memberService;
|
//
|
//
|
//
|
// public void dealOrderFromMq(List<OrderModel> list, Integer type) {
|
// if (CollectionUtils.isNotEmpty(list)) {
|
// String batchno = UUID.randomUUID().toString();
|
// // 更新订单状态
|
// // 更新为不可平仓状态
|
// int count = contractHoldOrderService.updateContractHoldOrderCanNotClosingByIds(list, batchno);
|
// // 查询
|
// if (count > 0) {
|
// // 查询
|
// List<ContractHoldOrderEntity> coinsCoinsOrders = contractHoldOrderService.selectContractHoldOrderByBatchNo(batchno);
|
// // 根据状态调用不同的方法
|
// // 1:买入委托2:开多3:开空4:平多5:平空6:爆仓平多7:爆仓平空8:撤单9:止盈平多10:止盈平空11:止损平多12:止损平空
|
// // 6在这里是爆仓 包括爆空和暴多
|
// switch (type) {
|
// case 6:
|
// this.dealCoinOut(coinsCoinsOrders,list);
|
// break;
|
// case 9:
|
// this.dealForMoreStopPro(coinsCoinsOrders,list);
|
// break;
|
// case 10:
|
// this.dealForLessStopPro(coinsCoinsOrders,list);
|
// break;
|
// case 11:
|
// this.dealForMoreLoss(coinsCoinsOrders,list);
|
// break;
|
// case 12:
|
// this.dealForLessLoss(coinsCoinsOrders,list);
|
// break;
|
// }
|
//
|
// }
|
//
|
//
|
// }
|
// }
|
//
|
// public void dealForLimitMq(List<OrderModel> list){
|
// if(CollectionUtils.isNotEmpty(list)){
|
// //查询限价委托的单
|
// String batchno =UUID.randomUUID().toString();
|
// List<Long> ids = new ArrayList<>();
|
// list.forEach(model->ids.add(model.getOrderId()));
|
// List<ContractEntrustOrderEntity> contractEntrustOrderEntities = contractEntrustOrderService.selectEntrustOrderListByIds(ids);
|
//
|
// if(CollectionUtils.isNotEmpty(contractEntrustOrderEntities)){
|
// this.dealLimitBuyOrder(contractEntrustOrderEntities);
|
// }
|
//
|
// }
|
// }
|
//
|
// /**
|
// * 开多止盈
|
// */
|
// public void dealForMoreStopPro(List<ContractHoldOrderEntity> orderList,List<OrderModel> list) {
|
// if (CollectionUtils.isNotEmpty(orderList)) {
|
// Map<Long,BigDecimal> modelMap = new HashMap<Long,BigDecimal>();
|
// for(OrderModel model : list){
|
// modelMap.put(model.getOrderId(),new BigDecimal(model.getPrice()));
|
// }
|
// for (ContractHoldOrderEntity order : orderList) {
|
// Long orderId = order.getId();
|
// System.out.println("开多止盈订单号:" + order.getOrderNo());
|
// System.out.println("传来的止盈价格:"+modelMap.get(order.getId()));
|
// if (null != order.getStopProfitPrice()) {
|
// BigDecimal closePrice = order.getStopProfitPrice();
|
// BigDecimal queuePrice = modelMap.get(order.getId());
|
// System.out.println("订单的止盈价格:"+closePrice);
|
// // 判断 保留七位是为了忽略以为小数 防止不精确导致的不相等
|
// if(queuePrice.compareTo(closePrice)!=0){
|
//
|
// // 不能止盈
|
// System.out.println("数据库价格:"+queuePrice.toPlainString()+"--价格不能止盈:"+closePrice);
|
// //更新数据
|
// contractHoldOrderService.updateOrderIsCanClosingAndBatchNoById(orderId);
|
// continue;
|
// }
|
// System.out.println("执行操作");
|
// // 止盈价
|
// String symbol = order.getSymbol();
|
// // 本次需要退回的预付款
|
// BigDecimal prePrice = order.getPrePaymentAmount();
|
// Long memberId = order.getMemberId();
|
// MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT");
|
// if (wallet != null) {
|
// // 历史订单
|
// ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(order);
|
// contractOrderEntity.setClosingType(6);
|
// contractOrderEntity.setClosingTime(new Date());
|
// contractOrderEntity.setId(null);
|
//
|
// // 本次平仓数量
|
// int currentFlat = order.getSymbolCnt();
|
// BigDecimal symbolSku = cacheSettingUtils.getSymbolSku(order.getSymbol());
|
// // 盈亏额度= (当前的币种的平仓价-下单时的建仓价)*购买的手数/规格*倍率
|
// BigDecimal profitLossPrice = (closePrice
|
// .subtract(order.getOpeningPrice()))
|
// .multiply(new BigDecimal(currentFlat+""))
|
// .multiply(symbolSku).setScale(8, BigDecimal.ROUND_DOWN);
|
// MemberEntity memberEntity = memberService.getById(memberId);
|
//
|
// if(memberEntity.getIsProfit() == 1) {
|
// PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
|
// if(profitLossPrice.compareTo(BigDecimal.ZERO)>0) {
|
// profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.subtract(tradeSetting.getProfitParam()));
|
// }else {
|
// profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.add(tradeSetting.getProfitParam()));
|
// }
|
// }
|
// //回报率
|
// BigDecimal returnRate = profitLossPrice.divide((order.getPrePaymentAmount().subtract(contractOrderEntity.getClosingFeeAmount())), 8, BigDecimal.ROUND_DOWN);
|
// contractOrderEntity.setRewardAmount(profitLossPrice);
|
// contractOrderEntity.setRewardRatio(returnRate);
|
// contractOrderEntity.setClosingFeeAmount(order.getOpeningFeeAmount());
|
// contractOrderEntity.setClosingPrice(closePrice);
|
// contractOrderEntity.setClosingType(9);
|
// BigDecimal totalReturn = BigDecimal.ZERO;
|
// contractOrderService.save(contractOrderEntity);
|
// // 将需要退回的减去手续费
|
// BigDecimal needReturn = prePrice.add(profitLossPrice);
|
// //总退回金额=保证金+收益-手续费
|
// totalReturn = needReturn.subtract(contractOrderEntity.getClosingFeeAmount());
|
// // 更新钱包
|
// // 总的是收益-平仓手续费
|
// BigDecimal totalBalance = profitLossPrice.subtract(contractOrderEntity.getClosingFeeAmount());
|
// memberWalletContractService.increaseWalletContractBalanceById(totalBalance,totalReturn,null,wallet.getId());
|
//
|
// // 流水记录 TODO 531
|
//// MemberAccountFlowRecord record = new MemberAccountFlowRecord();
|
//// record.setCreateTime(new Date());
|
//// record.setDirectionSource("止盈平仓");
|
//// record.setRemark("止盈平仓");
|
//// record.setMemberBalance(wallet.getAvailableBalance());
|
//// record.setMemberid(order.getMemberId());
|
//// record.setSymbolName(order.getSymbol());
|
//// record.setMemberName(wallet.getMemberName());
|
//// record.setMemberPhone(order.getMemberPhone());
|
//// record.setPrice(profitLossPrice + order.getPrePrice());
|
//// memberService.addFlowRecord(record);
|
////
|
//// //返佣 TODO 531
|
//// calYj(order.getMemberId(), new BigDecimal(order.getClosingPrice()), order, 2);
|
// }
|
// }
|
// }
|
// }
|
//
|
// }
|
//
|
// /**
|
// * 开空止盈
|
// */
|
// public void dealForLessStopPro(List<ContractHoldOrderEntity> orderList,List<OrderModel> list) {
|
// //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
|
// //System.out.println("开空止盈订单batchno:" + batchno);
|
// if (CollectionUtils.isNotEmpty(orderList)) {
|
// Map<Long,BigDecimal> modelMap = new HashMap<Long,BigDecimal>();
|
// for(OrderModel model : list){
|
// modelMap.put(model.getOrderId(),new BigDecimal(model.getPrice()));
|
// }
|
// for (ContractHoldOrderEntity order : orderList) {
|
// System.out.println("开空止盈订单号:" + order.getOrderNo());
|
// System.out.println("传来的止盈价格:"+modelMap.get(order.getId()).toPlainString());
|
// BigDecimal closePrice = order.getStopProfitPrice();
|
// if (null != closePrice) {
|
//
|
// // 止盈价
|
// BigDecimal closePrice = new BigDecimal(order.getStopProfitPrice()).setScale(7, RoundingMode.HALF_UP);
|
// System.out.println("订单的止盈价格:"+closePrice);
|
// System.out.println(closePrice.compareTo(modelMap.get(order.getId())));
|
// BigDecimal queuePrice = modelMap.get(order.getId()).setScale(7, RoundingMode.HALF_UP);
|
// if(closePrice.compareTo(queuePrice)!=0){
|
// System.out.println("数据库价格:"+queuePrice.toPlainString()+"--价格不能开空止盈:"+closePrice);
|
// orderMapper.updateOrderIsExitAndBatchno(order.getId());
|
// continue;
|
// }
|
// System.out.println("执行操作");
|
// String symbol = order.getSymbol();
|
// // 本次需要退回的预付款
|
// BigDecimal prePrice = new BigDecimal(order.getPrePrice());
|
// Wallet wallet = memberService.findWalletByMemberIdAndSymbol(order.getMemberId(), "USDT");
|
//
|
// if (wallet != null) {
|
// // 更新订单
|
// order.setIsEixt(0);
|
// orderMapper.updateOrder(order);
|
// order.setExitPrice(order.getStopProfitPrice());// 平仓价格
|
// order.setExitType(2);// 平仓类型,1:表示手动平仓,2:止盈平仓,3:止损平仓,4:爆仓
|
// order.setExitTime(new Date());// 平仓时间
|
// order.setEntrustStatus(7);// 平仓状态
|
// // 本次平仓数量
|
// Long currentFlat = order.getSymbolSkuNumber();
|
// TradeSymbolSku symbolSku = tradeMapper.findSymbolSkubySymbol(symbol);
|
// // 盈亏额度= (当前的币种的平仓价-下单时的建仓价)*购买的手数/规格*倍率
|
// Double profitLossPrice = (new BigDecimal(order.getTradePrice()).subtract(closePrice))
|
// .multiply(new BigDecimal(currentFlat))
|
// .multiply(symbolSku.getLotNumber())
|
// .setScale(8, BigDecimal.ROUND_DOWN).doubleValue();
|
//
|
// Member member = memberService.selectMemberById(order.getMemberId());
|
// if(member.getIsProfit() == 1) {
|
// TradeSetting tradeSetting = tradeSettingCache.getTradeSetting();
|
// if(profitLossPrice>0) {
|
// profitLossPrice = profitLossPrice*(1-tradeSetting.getProfitParam());
|
// }else {
|
// profitLossPrice = profitLossPrice*(1+tradeSetting.getProfitParam());;
|
// }
|
// }
|
// //回报率
|
// double returnRate = new BigDecimal(profitLossPrice).divide((new BigDecimal(order.getPrePrice()).subtract(new BigDecimal(order.getClosingPrice()))), 8, BigDecimal.ROUND_DOWN)
|
// .doubleValue();
|
// order.setRewardRatio(profitLossPrice);// 盈亏
|
// order.setReturnRate(returnRate);
|
//
|
// BigDecimal totalReturn = BigDecimal.ZERO;
|
// // 查询交易设置
|
// //TradeSetting tradeSetting = tradeMapper.findTradeSetting();
|
// // 计算手续费
|
//// Double closingPrice = closePrice
|
//// .multiply(new BigDecimal(tradeSetting.getClosingRatio()).divide(new BigDecimal(100), 8, BigDecimal.ROUND_DOWN))
|
//// .multiply(symbolSku.getLotNumber())// 规格
|
//// .multiply(new BigDecimal(currentFlat)).setScale(8, BigDecimal.ROUND_DOWN)
|
//// .doubleValue();
|
// order.setSellClosingPrice(order.getClosingPrice());
|
//
|
// //添加止盈订单
|
// order.setId(null);
|
// //10:止盈平空
|
// order.setStatus(10);
|
// orderMapper.addCoinsCoinsOrder(order);
|
// // 将需要退回的减去手续费
|
// BigDecimal needReturn = prePrice.add(new BigDecimal(profitLossPrice));
|
// //总退回金额=保证金+收益-手续费
|
// totalReturn = needReturn.subtract(new BigDecimal(order.getClosingPrice()));
|
// // 更新钱包
|
// // Double availableBalance = totalReturn.add(new BigDecimal(wallet.getAvailableBalance()))
|
// // .doubleValue();
|
//
|
// Double availableBalance = totalReturn.doubleValue();
|
//
|
// Double totalBalance = - order.getClosingPrice() + profitLossPrice;
|
//// wallet.setAvailableBalance(availableBalance);
|
//// wallet.setTotalBalance(totalBalance);
|
//// int i = memberService.updateWallet(wallet);
|
// walletDao.updateWallet(wallet.getId(),totalBalance,availableBalance,null);
|
// // 流水记录
|
// MemberAccountFlowRecord record = new MemberAccountFlowRecord();
|
// record.setCreateTime(new Date());
|
// record.setDirectionSource("止盈平仓");
|
// record.setRemark("止盈平仓");
|
// record.setMemberBalance(wallet.getAvailableBalance());
|
// record.setMemberid(order.getMemberId());
|
// record.setSymbolName(order.getSymbol());
|
// record.setMemberName(wallet.getMemberName());
|
// record.setMemberPhone(order.getMemberPhone());
|
// record.setPrice(profitLossPrice + order.getPrePrice());
|
// memberService.addFlowRecord(record);
|
//
|
// //返佣 TODO
|
// calYj(order.getMemberId(), new BigDecimal(order.getClosingPrice()), order, 2);
|
// }
|
// }
|
// }
|
// }
|
//
|
// }
|
//
|
// /**
|
// * 开多止损
|
// *
|
// * @param
|
// */
|
// public void dealForMoreLoss(List<CoinsCoinsOrder> orderList,List<OrderModel> list) {
|
// //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
|
// //System.out.println("开多止损批次号batchno:" + batchno);
|
// if (CollectionUtils.isNotEmpty(orderList)) {
|
// Map<Long,BigDecimal> modelMap = new HashMap<Long,BigDecimal>();
|
// for(OrderModel model : list){
|
// modelMap.put(model.getOrderId(),new BigDecimal(model.getPrice()));
|
// }
|
// for (CoinsCoinsOrder order : orderList) {
|
// System.out.println("开多止损订单号:" + order.getSerialno());
|
// System.out.println("传来的止损价格:"+modelMap.get(order.getId()));
|
//
|
// if (null != order.getStopLossPrice()) {
|
// // 止损价
|
// BigDecimal closePrice = new BigDecimal(order.getStopLossPrice()).setScale(7,RoundingMode.HALF_UP);
|
// System.out.println("订单止损价格:"+closePrice.toPlainString());
|
// BigDecimal queuePrice = modelMap.get(order.getId()).setScale(7, RoundingMode.HALF_UP);
|
// if(closePrice.compareTo(queuePrice)!=0){
|
// System.out.println("数据库价格:"+queuePrice.toPlainString()+"--价格不能开多止损:"+closePrice);
|
// orderMapper.updateOrderIsExitAndBatchno(order.getId());
|
// continue;
|
// }
|
// System.out.println("执行操作");
|
// String symbol = order.getSymbol();
|
// // 本次需要退回的预付款
|
// BigDecimal prePrice = new BigDecimal(order.getPrePrice());
|
// Wallet wallet = memberService.findWalletByMemberIdAndSymbol(order.getMemberId(), "USDT");
|
//
|
// if (wallet != null) {
|
// // 更新订单
|
// order.setIsEixt(0);
|
// orderMapper.updateOrder(order);
|
// order.setExitPrice(order.getStopLossPrice());// 平仓价格
|
// order.setExitType(3);// 平仓类型,1:表示手动平仓,2:止盈平仓,3:止损平仓,4:爆仓
|
// order.setExitTime(new Date());// 平仓时间
|
// order.setEntrustStatus(8);// 平仓状态
|
//
|
// TradeSymbolSku symbolSku = tradeMapper.findSymbolSkubySymbol(symbol);
|
//
|
// Double profitLossPrice = (closePrice
|
// .subtract(new BigDecimal(order.getTradePrice())))
|
// .multiply(new BigDecimal(order.getSymbolSkuNumber()))
|
// .multiply(symbolSku.getLotNumber())
|
// .setScale(8, BigDecimal.ROUND_DOWN).doubleValue();
|
//
|
// Member member = memberService.selectMemberById(order.getMemberId());
|
// if(member.getIsProfit() == 1) {
|
// TradeSetting tradeSetting = tradeSettingCache.getTradeSetting();
|
// if(profitLossPrice>0) {
|
// profitLossPrice = profitLossPrice*(1-tradeSetting.getProfitParam());
|
// }else {
|
// profitLossPrice = profitLossPrice*(1+tradeSetting.getProfitParam());;
|
// }
|
// }
|
// //回报率
|
// double returnRate = new BigDecimal(profitLossPrice).divide((new BigDecimal(order.getPrePrice()).subtract(new BigDecimal(order.getClosingPrice()))), 8, BigDecimal.ROUND_DOWN)
|
// .doubleValue();
|
// // 查询交易设置
|
// TradeSetting tradeSetting = tradeSettingCache.getTradeSetting();
|
// // 计算手续费
|
//// Double closingPrice = closePrice
|
//// .multiply(new BigDecimal(tradeSetting.getClosingRatio()).divide(new BigDecimal(100), 8, BigDecimal.ROUND_DOWN))
|
//// .multiply(symbolSku.getLotNumber())// 规格
|
//// .multiply(new BigDecimal(currentFlat)).setScale(8, BigDecimal.ROUND_DOWN)
|
//// .doubleValue();
|
// order.setRewardRatio(profitLossPrice);// 盈亏
|
// order.setReturnRate(returnRate);
|
// order.setSellClosingPrice(order.getClosingPrice());
|
//
|
// //添加止损
|
// order.setId(null);
|
// order.setStatus(11);
|
// orderMapper.addCoinsCoinsOrder(order);
|
// BigDecimal totalReturn = BigDecimal.ZERO;
|
// // 将需要退回的减去手续费
|
// BigDecimal needReturn = prePrice.add(new BigDecimal(profitLossPrice));
|
// //总退回金额=保证金+收益-手续费
|
// totalReturn = needReturn.subtract(new BigDecimal(order.getClosingPrice()));
|
// // 更新钱包
|
// // Double availableBalance = totalReturn.add(new BigDecimal(wallet.getAvailableBalance()))
|
// // .doubleValue();
|
// Double availableBalance = totalReturn.doubleValue();
|
//
|
// //Double totalBalance = wallet.getTotalBalance() - order.getClosingPrice() + profitLossPrice;
|
// Double totalBalance = -order.getClosingPrice() + profitLossPrice;
|
//
|
//// wallet.setAvailableBalance(availableBalance);
|
//// wallet.setTotalBalance(totalBalance);
|
//// int i = memberService.updateWallet(wallet);
|
// walletDao.updateWallet(wallet.getId(),totalBalance,availableBalance,null);
|
// // 流水记录
|
// MemberAccountFlowRecord record = new MemberAccountFlowRecord();
|
// record.setCreateTime(new Date());
|
// record.setDirectionSource("开多止损平仓");
|
// record.setRemark("开多止损平仓");
|
// record.setMemberBalance(wallet.getAvailableBalance());
|
// record.setMemberid(order.getMemberId());
|
// record.setSymbolName(order.getSymbol());
|
// record.setMemberName(wallet.getMemberName());
|
// record.setMemberPhone(order.getMemberPhone());
|
// record.setPrice(profitLossPrice + order.getPrePrice());
|
// memberService.addFlowRecord(record);
|
//
|
// //返佣 TODO
|
// calYj(order.getMemberId(), new BigDecimal(order.getClosingPrice()), order, 2);
|
// }
|
// }
|
// }
|
// }
|
// }
|
//
|
// /**
|
// * 开空止损
|
// *
|
// * @param
|
// */
|
// public void dealForLessLoss(List<CoinsCoinsOrder> orderList,List<OrderModel> list) {
|
// // List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
|
// //System.out.println("开空止损批次号batchno:" + batchno);
|
// if (CollectionUtils.isNotEmpty(orderList)) {
|
// Map<Long,BigDecimal> modelMap = new HashMap<Long,BigDecimal>();
|
// for(OrderModel model : list){
|
// modelMap.put(model.getOrderId(),new BigDecimal(model.getPrice()));
|
// }
|
// for (CoinsCoinsOrder order : orderList) {
|
// System.out.println("传来的止损价格:"+modelMap.get(order.getId()).toPlainString());
|
// System.out.println("开空止损订单号:" + order.getSerialno());
|
// if (null != order.getStopLossPrice()) {
|
// // 止损价
|
// BigDecimal closePrice = new BigDecimal(order.getStopLossPrice()).setScale(7,RoundingMode.HALF_UP);
|
//
|
// System.out.println("订单止损价格:"+closePrice.toPlainString());
|
// BigDecimal queuePrice = modelMap.get(order.getId()).setScale(7, RoundingMode.HALF_UP);
|
// if(closePrice.compareTo(queuePrice)!=0){
|
// System.out.println("数据库价格:"+queuePrice.toPlainString()+"--价格不能开空止损:"+closePrice);
|
//
|
// orderMapper.updateOrderIsExitAndBatchno(order.getId());
|
// continue;
|
// }
|
// System.out.println("执行操作");
|
// String symbol = order.getSymbol();
|
// // 本次需要退回的预付款
|
// BigDecimal prePrice = new BigDecimal(order.getPrePrice());
|
// Wallet wallet = memberService.findWalletByMemberIdAndSymbol(order.getMemberId(), "USDT");
|
//
|
// if (wallet != null) {
|
// // 更新订单
|
// order.setIsEixt(0);
|
// orderMapper.updateOrder(order);
|
// order.setExitPrice(order.getStopLossPrice());// 平仓价格
|
// order.setExitType(3);// 平仓类型,1:表示手动平仓,2:止盈平仓,3:止损平仓,4:爆仓
|
// order.setExitTime(new Date());// 平仓时间
|
// order.setEntrustStatus(8);// 平仓状态
|
//
|
// TradeSymbolSku symbolSku = tradeMapper.findSymbolSkubySymbol(symbol);
|
// // 盈亏额度= (当前的币种的平仓价-下单时的建仓价)*购买的手数
|
// Double profitLossPrice = (new BigDecimal(order.getTradePrice()))
|
// .subtract(closePrice)
|
// .multiply(new BigDecimal(order.getSymbolSkuNumber()))
|
// .multiply(symbolSku.getLotNumber())
|
// .setScale(8, BigDecimal.ROUND_DOWN).doubleValue();
|
// Member member = memberService.selectMemberById(order.getMemberId());
|
// if(member.getIsProfit() == 1) {
|
// TradeSetting tradeSetting=tradeSettingCache.getTradeSetting();
|
// if(profitLossPrice>0) {
|
// profitLossPrice = profitLossPrice*(1-tradeSetting.getProfitParam());
|
// }else {
|
// profitLossPrice = profitLossPrice*(1+tradeSetting.getProfitParam());;
|
// }
|
// }
|
// //回报率
|
// double returnRate = new BigDecimal(profitLossPrice).divide((new BigDecimal(order.getPrePrice()).subtract(new BigDecimal(order.getClosingPrice()))), 8, BigDecimal.ROUND_DOWN)
|
// .doubleValue();
|
// order.setRewardRatio(profitLossPrice);// 盈亏
|
// order.setReturnRate(returnRate);
|
//
|
// BigDecimal totalReturn = BigDecimal.ZERO;
|
//// TradeSymbolSku symbolSku = tradeMapper.findSymbolSkubySymbol(symbol);
|
// // 本次平仓数量
|
// // Long currentFlat = order.getSymbolSkuNumber();
|
// // 查询交易设置
|
// // TradeSetting tradeSetting = tradeMapper.findTradeSetting();
|
// // 计算手续费
|
//// Double closingPrice = new BigDecimal(order.getStopLossPrice())
|
//// .multiply(new BigDecimal(tradeSetting.getClosingRatio()).divide(new BigDecimal(100), 8, BigDecimal.ROUND_DOWN))
|
//// .multiply(symbolSku.getLotNumber())// 规格
|
//// .multiply(new BigDecimal(currentFlat)).setScale(8, BigDecimal.ROUND_DOWN)
|
//// .doubleValue();
|
// order.setSellClosingPrice(order.getClosingPrice());
|
//
|
// //添加止盈订单
|
// order.setId(null);
|
// order.setStatus(12);
|
// orderMapper.addCoinsCoinsOrder(order);
|
// // 将需要退回的减去手续费
|
// BigDecimal needReturn = prePrice.add(new BigDecimal(profitLossPrice));
|
// //总退回金额=保证金+收益-手续费
|
// totalReturn = needReturn.subtract(new BigDecimal(order.getClosingPrice()));
|
// // 更新钱包
|
// // Double availableBalance = totalReturn.add(new BigDecimal(wallet.getAvailableBalance()))
|
// // .doubleValue();
|
//
|
// Double availableBalance = totalReturn.doubleValue();
|
//
|
// //Double totalBalance = wallet.getTotalBalance() - order.getClosingPrice() + profitLossPrice;
|
// Double totalBalance = profitLossPrice- order.getClosingPrice() ;
|
//
|
//// wallet.setAvailableBalance(availableBalance);
|
//// wallet.setTotalBalance(totalBalance);
|
//// int i = memberService.updateWallet(wallet);
|
// walletDao.updateWallet(wallet.getId(),totalBalance,availableBalance,null);
|
//
|
// // 流水记录
|
// MemberAccountFlowRecord record = new MemberAccountFlowRecord();
|
// record.setCreateTime(new Date());
|
// record.setDirectionSource("开空止损平仓");
|
// record.setRemark("开空止损平仓");
|
// record.setMemberBalance(wallet.getAvailableBalance());
|
// record.setMemberid(order.getMemberId());
|
// record.setSymbolName(order.getSymbol());
|
// record.setMemberName(wallet.getMemberName());
|
// record.setMemberPhone(order.getMemberPhone());
|
// record.setPrice(profitLossPrice + order.getPrePrice());
|
// memberService.addFlowRecord(record);
|
//
|
// //返佣 TODO
|
// calYj(order.getMemberId(), new BigDecimal(order.getClosingPrice()), order, 2);
|
// }
|
// }
|
// }
|
// }
|
// }
|
//
|
//
|
// /**
|
// * 限价委托
|
// *
|
// * @param
|
// */
|
// public void dealLimitBuyOrder(List<ContractEntrustOrderEntity> orderList) {
|
//
|
// //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno);
|
// if (CollectionUtils.isNotEmpty(orderList)) {
|
// ContractHoldOrderEntity contractHoldOrderEntity=null;
|
// for (ContractEntrustOrderEntity coinsCoinsOrder : orderList) {
|
// MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(coinsCoinsOrder.getMemberId(), "USDT");
|
// if (wallet == null) {
|
// continue;
|
// }
|
//
|
// contractHoldOrderEntity = new ContractHoldOrderEntity();
|
// Long memId = coinsCoinsOrder.getMemberId();
|
// MemberEntity memberEntity = memberService.getById(memId);
|
// BigDecimal entrustPrice = coinsCoinsOrder.getEntrustPrice();
|
// int symbolCnt = coinsCoinsOrder.getSymbolCnt();
|
// int type = coinsCoinsOrder.getEntrustType();
|
// //开仓价
|
// // Double openPrice = coinsCoinsOrder.getOpenPrice().doubleValue();
|
// //委托价
|
// // Double markPrice = coinsCoinsOrder.getMarkPrice();
|
// if (type == 1) {
|
// // 开多
|
// contractHoldOrderEntity.setOpeningType(ContractHoldOrderEntity.ORDER_OPENING_TYPE_MORE);
|
// } else {
|
// // 开空
|
// contractHoldOrderEntity.setOpeningType(ContractHoldOrderEntity.ORDER_OPENING_TYPE_LESS);
|
//
|
// }
|
//
|
// //持仓单赋值
|
// contractHoldOrderEntity.setMemberId(memId);
|
// contractHoldOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y);
|
// contractHoldOrderEntity.setMarkPrice(coinsCoinsOrder.getEntrustPrice());
|
// contractHoldOrderEntity.setBondPrice(coinsCoinsOrder.getBondAmount());
|
// // 开仓手续费 建仓价*规格*手数*手续费率
|
// BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(coinsCoinsOrder.getSymbol());
|
// PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
|
// BigDecimal openFeePrice = coinsCoinsOrder.getEntrustPrice().multiply(lotNumber)
|
// .multiply(new BigDecimal(coinsCoinsOrder.getSymbolCnt()))
|
// .multiply(tradeSettingEntity.getFeeRatio().divide(new BigDecimal(100)))
|
// .setScale(8, BigDecimal.ROUND_DOWN);
|
// contractHoldOrderEntity.setOpeningFeeAmount(openFeePrice);
|
// contractHoldOrderEntity.setVersion(1);
|
// BigDecimal forceSetPrice = CalculateUtil.getForceSetPrice(coinsCoinsOrder.getBondAmount(), entrustPrice, symbolCnt, lotNumber, type, memberEntity);
|
//
|
// contractHoldOrderEntity.setForceClosingPrice(forceSetPrice);
|
// contractHoldOrderEntity.setLeverRatio(coinsCoinsOrder.getLeverRatio());
|
// contractHoldOrderEntity.setOpeningPrice(entrustPrice);
|
// contractHoldOrderService.save(contractHoldOrderEntity);
|
//
|
// // 需要一个历史插入
|
// ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(contractHoldOrderEntity);
|
// contractOrderEntity.setId(null);
|
// contractOrderService.save(contractOrderEntity);
|
// // 发送爆仓的队列
|
// // 市价
|
// if (coinsCoinsOrder.getEntrustType() == 1) {
|
// // 开多
|
// OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().toPlainString(), coinsCoinsOrder.getSymbol(),1);
|
// producer.sendPriceOperate(JSONObject.toJSONString(model));
|
// } else {
|
// // 开空
|
// OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().toPlainString(), coinsCoinsOrder.getSymbol(),1);
|
// producer.sendPriceOperate(JSONObject.toJSONString(model));
|
// }
|
// // 扣除手续费
|
// //double totalBalance = wallet.getTotalBalance() - coinsCoinsOrder.getClosingPrice();
|
// BigDecimal totalBalance = openFeePrice.negate();
|
//
|
// /** TradeSetting tradeSetting = tradeSettingCache.getTradeSetting();
|
//
|
// Double totalPayPrice = new BigDecimal(coinsCoinsOrder.getPrePrice()).add(new BigDecimal(coinsCoinsOrder.getClosingPrice())).add(new BigDecimal(coinsCoinsOrder.getClosingPrice()))
|
// .setScale(8, BigDecimal.ROUND_HALF_UP).doubleValue();
|
// totalBalance = totalBalance+(-totalPayPrice*(Double.valueOf(tradeSetting.getSpread())/10000));*/
|
//
|
// memberWalletContractService.increaseWalletContractBalanceById(null,totalBalance,null,wallet.getId());
|
// // TODO 531 待写
|
// //calYj(memId, new BigDecimal(coinsCoinsOrder.getClosingPrice()), coinsCoinsOrder, 1);
|
// }
|
// }
|
// }
|
//
|
// /**
|
// * 爆仓
|
// *
|
// * @param
|
// */
|
// public void dealCoinOut(List<ContractHoldOrderEntity> orderList,List<OrderModel> orderModels) {
|
// // 需要比较查询到的和消息发来的单的爆仓操作次序号是否相同
|
// // 构建map
|
//
|
// if (CollectionUtils.isNotEmpty(orderList)) {
|
// Map<Long,Integer> modelMap = new HashMap<Long,Integer>();
|
// for(OrderModel model : orderModels){
|
// modelMap.put(model.getOrderId(),model.getOperateNo());
|
// }
|
// // TradeSetting tradeSetting = tradeMapper.findTradeSetting();
|
// for (ContractHoldOrderEntity coinsOrder : orderList) {
|
// Long orderId = coinsOrder.getId();
|
// Integer operateNo = coinsOrder.getOperateNo();
|
// //判断当前订单是否是最新的爆仓价 不相等时直接进入下一个订单
|
// if(!modelMap.get(orderId).equals(operateNo)){
|
// // 将订单更新为可平仓并删除批次号
|
// contractHoldOrderService.updateOrderIsCanClosingAndBatchNoById(orderId);
|
// continue;
|
// }
|
// boolean isDone = false;
|
// Long memId = coinsOrder.getMemberId();
|
// MemberEntity byId = memberService.getById(memId);
|
// String symbol = coinsOrder.getSymbol();
|
// //TradeSymbolSku symbolSku = tradeMapper.findSymbolSkubySymbol(symbol);
|
// BigDecimal nowPrice = coinsOrder.getForceClosingPrice();
|
// // 创建订单(加入历史表的订单)
|
// ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(coinsOrder);
|
//
|
// //查询是否满足爆仓条件
|
// if (coinsOrder.getOpeningType() == ContractHoldOrderEntity.ORDER_OPENING_TYPE_MORE) {
|
// //如果是开多,当前价小于预估强平价即为爆仓
|
// // 设置平仓类型 // 爆仓平多
|
// contractOrderEntity.setClosingType(4);
|
// //更新用户钱包数据
|
// isDone = true;
|
// } else {
|
// //如果是开空,当前价大于预估强平价即为爆仓
|
// contractOrderEntity.setClosingType(5);
|
// //更新主表订单状态位为“已平仓”
|
// isDone = true;
|
//
|
// }
|
// if (isDone) {
|
// //删除次仓订单
|
// contractHoldOrderService.removeById(orderId);
|
//
|
// //系统自动平仓(爆仓)
|
//// Double closingPrice = nowPrice
|
//// .multiply(new BigDecimal(tradeSetting.getClosingRatio()).divide(new BigDecimal(100), 8, BigDecimal.ROUND_DOWN))
|
//// .multiply(symbolSku.getLotNumber())// 规格
|
//// .multiply(new BigDecimal(coinsOrder.getSymbolSkuNumber()))
|
//// .setScale(8, BigDecimal.ROUND_DOWN).doubleValue();
|
// //更新主表订单状态位为“已平仓”
|
// contractOrderEntity.setId(null);
|
// contractOrderEntity.setClosingPrice(BigDecimal.ZERO);
|
// //order.setPayTotalPrice(coinsOrder.getPrePrice()+coinsOrder.getClosingPrice());// 总支付金额(预付款)
|
//
|
// contractOrderEntity.setClosingPrice(nowPrice);
|
// contractOrderEntity.setClosingTime(new Date());
|
// contractOrderEntity.setRewardAmount((coinsOrder.getOpeningFeeAmount().multiply(new BigDecimal("2")).subtract(coinsOrder.getPrePaymentAmount())));
|
// //order.setRewardRatio(-(coinsOrder.getPrePrice() - (2*coinsOrder.getClosingPrice())));
|
// contractOrderService.save(contractOrderEntity);
|
//
|
// //更新用户钱包数据
|
// MemberWalletContractEntity usdt = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, "USDT");
|
//
|
// // Double totalPrice = wallet.getTotalBalance() - coinsOrder.getPrePrice();
|
// // 减去的时候用负数
|
// BigDecimal totalPrice = coinsOrder.getPrePaymentAmount().negate();
|
// //Double totalPrice = - coinsOrder.getPrePrice();
|
// memberWalletContractService.increaseWalletContractBalanceById(null,totalPrice,null,usdt.getId());
|
//
|
// // 流水记录 TODO
|
//// MemberAccountFlowRecord record = new MemberAccountFlowRecord();
|
//// record.setCreateTime(new Date());
|
//// record.setDirectionSource("系统自动平仓");
|
//// record.setRemark("系统自动平仓");
|
//// record.setMemberBalance(coinsOrder.getPrePrice());
|
//// record.setMemberid(memId);
|
//// record.setSymbolName(null);
|
//// record.setMemberName(null);
|
//// record.setMemberPhone(null);
|
//// record.setPrice(coinsOrder.getPrePrice());
|
//// memberService.addFlowRecord(record);
|
//
|
// }
|
// }
|
// }
|
// }
|
//
|
//
|
// public void calYj(Long mid, BigDecimal money, CoinsCoinsOrder order, int type) {
|
// if(money!=null) {
|
// money = money.multiply(new BigDecimal(0.7868));
|
// }
|
// Member member = memberService.selectMemberById(mid);
|
// String[] referenceIds = member.getReferenceIds().split(",");
|
// List<String> ids = Arrays.asList(referenceIds);
|
//
|
// // 判断该用户是否为代理商
|
// NeedMoneyMember needMoneyMember = memberMapper.selectFriendRelationUserByMid(mid);
|
//
|
// // 查询该用户下所有需要返佣的代理商
|
// List<NeedMoneyMember> list = memberMapper.selectAllNeedMoneyMember(ids);
|
// TreeMap<String, NeedMoneyMember> treeMap = new TreeMap<>(new Comparator<String>() {
|
// @Override
|
// public int compare(String o1, String o2) {
|
// return o2.compareTo(o1);
|
// }
|
// });
|
// // 建立层级关系
|
// for (int i = 0; i < list.size(); i++) {
|
// treeMap.put(list.get(i).getLevelId(), list.get(i));
|
// }
|
//
|
// // 该用户为代理商则判断is_self字段,判断是否保留其手续费
|
// // 该用户为代理商则判断is_self字段,判断是否保留其手续费
|
// if (needMoneyMember != null && needMoneyMember.getIsSelf() == 1) {
|
// treeMap.put(needMoneyMember.getLevelId(), needMoneyMember);
|
// }
|
//
|
//
|
// // 存放uid以及对应uid用户的佣金
|
// Map<String, BigDecimal> map = new HashMap<>();
|
// Iterator<Map.Entry<String, NeedMoneyMember>> it = treeMap.entrySet().iterator();
|
// BigDecimal lastRate = BigDecimal.ZERO;
|
// BigDecimal lastYj = BigDecimal.ZERO;
|
// while (it.hasNext()) {
|
// Map.Entry<String, NeedMoneyMember> entry = it.next();
|
// NeedMoneyMember member1 = entry.getValue();
|
// // 上下级佣金比率相减后乘以手续费 -- 即用户所得佣金
|
// lastYj = (member1.getReturnRate().subtract(lastRate)).multiply(money);
|
// lastRate = member1.getReturnRate();
|
// map.put(member1.getUid(), lastYj);
|
// }
|
//
|
// // 输出对应佣金是否正确
|
// Iterator<Map.Entry<String, BigDecimal>> it1 = map.entrySet().iterator();
|
// List<AgentReturn> agentList = new ArrayList<AgentReturn>();
|
// while (it1.hasNext()) {
|
// Map.Entry<String, BigDecimal> entry = it1.next();
|
// // System.out.println(entry.getKey() + "-----" + entry.getValue());
|
// Member agentMember = memberMapper.findMemberByUID(entry.getKey());
|
// AgentReturn agent = new AgentReturn();
|
// agent.setMemId(mid);
|
// agent.setOrderId(order.getId());
|
// agent.setOrderNo(order.getSerialno());
|
// agent.setAgentId(agentMember.getmId());
|
// agent.setReturnType(order.getStatus());
|
// agent.setReturnTime(new Date());
|
// agent.setReturnSymbol(order.getSymbol());
|
// agent.setIsReturn(0);
|
// agent.setReturnMoney(entry.getValue());
|
// if (type == 1) {//开仓
|
// agent.setOpenPrice(new BigDecimal(order.getClosingPrice()));
|
// } else if (type == 2) {//平仓
|
// agent.setClosePrice(new BigDecimal(order.getClosingPrice()));
|
// } else {//持仓费
|
// agent.setDoingPrice(order.getDoingPrice());
|
// }
|
// agent.setReturnMenId(agentMember.getmId());
|
// agent.setUid(entry.getKey());
|
// agent.setOrderType(order.getStatus());
|
// agentReturnMapper.insert(agent);
|
// }
|
//
|
//
|
// }
|
//
|
//}
|