//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 list, Integer type) { // if (CollectionUtils.isNotEmpty(list)) { // String batchno = UUID.randomUUID().toString(); // // 更新订单状态 // // 更新为不可平仓状态 // int count = contractHoldOrderService.updateContractHoldOrderCanNotClosingByIds(list, batchno); // // 查询 // if (count > 0) { // // 查询 // List 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 list){ // if(CollectionUtils.isNotEmpty(list)){ // //查询限价委托的单 // String batchno =UUID.randomUUID().toString(); // List ids = new ArrayList<>(); // list.forEach(model->ids.add(model.getOrderId())); // List contractEntrustOrderEntities = contractEntrustOrderService.selectEntrustOrderListByIds(ids); // // if(CollectionUtils.isNotEmpty(contractEntrustOrderEntities)){ // this.dealLimitBuyOrder(contractEntrustOrderEntities); // } // // } // } // // /** // * 开多止盈 // */ // public void dealForMoreStopPro(List orderList,List list) { // if (CollectionUtils.isNotEmpty(orderList)) { // Map modelMap = new HashMap(); // 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 orderList,List list) { // //List orderList = orderMapper.selectOrderByBatchNo(batchno); // //System.out.println("开空止盈订单batchno:" + batchno); // if (CollectionUtils.isNotEmpty(orderList)) { // Map modelMap = new HashMap(); // 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 orderList,List list) { // //List orderList = orderMapper.selectOrderByBatchNo(batchno); // //System.out.println("开多止损批次号batchno:" + batchno); // if (CollectionUtils.isNotEmpty(orderList)) { // Map modelMap = new HashMap(); // 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 orderList,List list) { // // List orderList = orderMapper.selectOrderByBatchNo(batchno); // //System.out.println("开空止损批次号batchno:" + batchno); // if (CollectionUtils.isNotEmpty(orderList)) { // Map modelMap = new HashMap(); // 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 orderList) { // // //List 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 orderList,List orderModels) { // // 需要比较查询到的和消息发来的单的爆仓操作次序号是否相同 // // 构建map // // if (CollectionUtils.isNotEmpty(orderList)) { // Map modelMap = new HashMap(); // 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 ids = Arrays.asList(referenceIds); // // // 判断该用户是否为代理商 // NeedMoneyMember needMoneyMember = memberMapper.selectFriendRelationUserByMid(mid); // // // 查询该用户下所有需要返佣的代理商 // List list = memberMapper.selectAllNeedMoneyMember(ids); // TreeMap treeMap = new TreeMap<>(new Comparator() { // @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 map = new HashMap<>(); // Iterator> it = treeMap.entrySet().iterator(); // BigDecimal lastRate = BigDecimal.ZERO; // BigDecimal lastYj = BigDecimal.ZERO; // while (it.hasNext()) { // Map.Entry entry = it.next(); // NeedMoneyMember member1 = entry.getValue(); // // 上下级佣金比率相减后乘以手续费 -- 即用户所得佣金 // lastYj = (member1.getReturnRate().subtract(lastRate)).multiply(money); // lastRate = member1.getReturnRate(); // map.put(member1.getUid(), lastYj); // } // // // 输出对应佣金是否正确 // Iterator> it1 = map.entrySet().iterator(); // List agentList = new ArrayList(); // while (it1.hasNext()) { // Map.Entry 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); // } // // // } // //}