src/main/java/com/xcong/excoin/common/LoginUserUtils.java
@@ -34,6 +34,10 @@ * @return MemberEntity */ public static MemberEntity getUser() { if (SecurityContextHolder.getContext().getAuthentication() == null) { return null; } if (SecurityContextHolder.getContext().getAuthentication().getPrincipal().equals(ANON)) { return null; } else { src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
@@ -40,7 +40,7 @@ public static final String QUEUE_LESSLOSS = "QUEUE_LESSLOSS"; // 限价委托 public static final String QUEUE_LIMIT = "QUEUE_LIMIT"; public static final String QUEUE_LIMIT = "QUEUE_LIMIT_NEW"; // 爆仓队列 public static final String QUEUE_COINOUT = "QUEUE_COINOUT"; src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
@@ -4,6 +4,7 @@ import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto; import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto; import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; import com.xcong.excoin.modules.contract.parameter.vo.ContractMoneyInfoVo; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo; import com.xcong.excoin.modules.contract.service.ContractHoldOrderService; import com.xcong.excoin.modules.contract.service.ContractOrderService; @@ -82,4 +83,13 @@ return null; } @ApiOperation(value = "获取合约页面资产信息") @ApiResponses({ @ApiResponse(code = 0, message = "success", response = ContractMoneyInfoVo.class) }) @GetMapping(value = "/findContractMoneyInfo") public Result findContractMoneyInfo(@ApiParam(name = "symbol", value = "币种", required = true, example = "BTC/USDT") @RequestParam(value = "symbol") String symbol) { return contractHoldOrderService.findContractMoneyInfo(symbol); } } src/main/java/com/xcong/excoin/modules/contract/dao/ContractEntrustOrderDao.java
@@ -16,4 +16,6 @@ public List<ContractEntrustOrderEntity> selectEntrustOrderListByMemberId(@Param("memberId") Long memberId); public List<ContractEntrustOrderEntity> selectEntrustOrderListByIds(@Param("list") List<Long> list); public List<ContractEntrustOrderEntity> selectAllEntrustOrder(); } src/main/java/com/xcong/excoin/modules/contract/dao/ContractHoldOrderDao.java
@@ -40,4 +40,6 @@ public int updateHoldOrderIsCanClosingById(@Param("isCanClosing") int isCanClosing, @Param("id") Long id); public List<ContractHoldOrderEntity> selectAllHoldOrder(); } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/ContractMoneyInfoVo.java
New file @@ -0,0 +1,43 @@ package com.xcong.excoin.modules.contract.parameter.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @Author wzy * @Date 2020/6/2 **/ @Data @ApiModel(value = "ContractMoneyInfoVo", description = "合约资产信息接口返回参数类") public class ContractMoneyInfoVo { @ApiModelProperty(value = "占用保证金") private BigDecimal beUsedBondAmount; @ApiModelProperty(value = "冻结保证金") private BigDecimal frozenBondAmount; @ApiModelProperty(value = "手续费率") private BigDecimal feeRatio; @ApiModelProperty(value = "权益") private BigDecimal equity; @ApiModelProperty(value = "合约杠杆") private Integer leverRate; @ApiModelProperty(value = "倍率") private BigDecimal leverAgeRatio; @ApiModelProperty(value = "可用余额") private BigDecimal availableBalance; @ApiModelProperty(value = "最新价") private BigDecimal newPrice; @ApiModelProperty(value = "规格") private BigDecimal symbolSku; } src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java
@@ -34,4 +34,6 @@ public Result changeBond(ChangeBondDto changeBondDto); public Result findContractMoneyInfo(String symbol); } src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -128,10 +128,10 @@ // 发送委托单队列消息 if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) { OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().toPlainString(), submitEntrustDto.getSymbol()); OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } else { OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().toPlainString(), submitEntrustDto.getSymbol()); OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } return Result.ok("委托成功"); src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -9,6 +9,7 @@ import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.common.system.service.CommonService; import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao; import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao; import com.xcong.excoin.modules.contract.dao.ContractOrderDao; import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity; @@ -18,6 +19,7 @@ import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto; import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto; import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; import com.xcong.excoin.modules.contract.parameter.vo.ContractMoneyInfoVo; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo; import com.xcong.excoin.modules.contract.service.ContractHoldOrderService; import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; @@ -56,6 +58,9 @@ @Resource private ContractOrderDao contractOrderDao; @Resource private ContractEntrustOrderDao contractEntrustOrderDao; @Resource private CommonService commonService; @@ -367,10 +372,10 @@ } else { // 开空止盈 if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) { model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), price.toPlainString(), holdOrderEntity.getSymbol()); model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); // 开空止损 } else { model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), price.toPlainString(), holdOrderEntity.getSymbol()); model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); } } producer.sendPriceOperate(JSONObject.toJSONString(model)); @@ -419,10 +424,10 @@ OrderModel model = null; // 开多 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.toPlainString(), holdOrderEntity.getSymbol()); model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); // 开空 } else { model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.toPlainString(), holdOrderEntity.getSymbol()); model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); } producer.sendPriceOperate(JSONObject.toJSONString(model)); @@ -431,4 +436,74 @@ } return Result.fail("调整失败"); } @Override public Result findContractMoneyInfo(String symbol) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting(); // 获取最新价 BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol))); // 当前合约委托单 List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId()); // 当前持仓列表 List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId()); // 冻结保证金 -- 即委托单中的保证金之和 BigDecimal frozenBondAmount = BigDecimal.ZERO; if (CollUtil.isNotEmpty(entrustOrderEntities)) { for (ContractEntrustOrderEntity entrustOrderEntity : entrustOrderEntities) { frozenBondAmount = frozenBondAmount.add(entrustOrderEntity.getBondAmount()); } } // 占用保证金 -- 即持仓单中的保证金之和 BigDecimal beUsedBondAmount = BigDecimal.ZERO; // 总盈利 BigDecimal totalProfitOrLess = BigDecimal.ZERO; if (CollUtil.isNotEmpty(holdOrderEntities)) { BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(symbol); for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { beUsedBondAmount = beUsedBondAmount.add(holdOrderEntity.getBondAmount()); // 单个订单盈利 BigDecimal profitOrLess = BigDecimal.ZERO; // 开多 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber).multiply(holdOrderEntity.getSymbolSku()); // 开空 } else { profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber).multiply(holdOrderEntity.getSymbolSku()); } if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) { if (profitOrLess.compareTo(BigDecimal.ZERO) > 0) { profitOrLess = profitOrLess.multiply(BigDecimal.ONE.subtract(tradeSetting.getForceParam())); } else { profitOrLess = profitOrLess.multiply(BigDecimal.ONE.add(tradeSetting.getForceParam())); } } totalProfitOrLess = totalProfitOrLess.add(profitOrLess); } } MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); // 权益 BigDecimal equity = walletContractEntity.getTotalBalance().add(totalProfitOrLess); ContractMoneyInfoVo contractMoneyInfoVo = new ContractMoneyInfoVo(); contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance()); contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount); contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount); contractMoneyInfoVo.setEquity(equity); contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio()); contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio()); contractMoneyInfoVo.setNewPrice(newPrice); contractMoneyInfoVo.setSymbolSku(cacheSettingUtils.getSymbolSku(symbol)); return Result.ok(contractMoneyInfoVo); } } src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -544,11 +544,11 @@ // 市价 if (coinsCoinsOrder.getEntrustType() == 1) { // 开多 OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().toPlainString(), coinsCoinsOrder.getSymbol(), 1); OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1); producer.sendPriceOperate(JSONObject.toJSONString(model)); } else { // 开空 OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().toPlainString(), coinsCoinsOrder.getSymbol(), 1); OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1); producer.sendPriceOperate(JSONObject.toJSONString(model)); } // 扣除手续费 src/main/java/com/xcong/excoin/quartz/job/NewestPriceUpdateJob.java
@@ -52,8 +52,8 @@ // TODO 测试环境关闭这个插入redis redisUtils.set(CoinTypeConvert.convertToKey(symbol), price); // 比较 websocketPriceService.comparePriceAsc(symbol, price); websocketPriceService.comparePriceDesc(symbol, price); websocketPriceService.comparePriceAsc(symbol, price); websocketPriceService.comparePriceDesc(symbol, price); //System.out.println("比较完毕:"+symbol+"-"+price); } src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
New file @@ -0,0 +1,135 @@ package com.xcong.excoin.rabbit.init; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; 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; import com.xcong.excoin.rabbit.pricequeue.OrderModel; import com.xcong.excoin.rabbit.producer.OrderProducer; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; /** * 后台开启 APP不开启 * * @author helius */ @Slf4j @Component @ConditionalOnProperty(prefix = "app", name = "newest-price-update-job", havingValue = "true") public class OrderProducerInit { @Resource private ContractEntrustOrderDao contractEntrustOrderDao; @Resource private ContractHoldOrderDao contractHoldOrderDao; @Resource private OrderProducer producer; @PostConstruct public void initOrder() { log.info("=======初始化未完成订单信息======="); // 查询所有未平仓的单 List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectAllHoldOrder(); // 查询所有未完成的委托单 List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectAllEntrustOrder(); if (CollectionUtils.isNotEmpty(holdOrderEntities)) { for (ContractHoldOrderEntity order : holdOrderEntities) { // 开多1,开空 2 int openingType = order.getOpeningType(); // 1:买入委托2:开多3:开空4:平多5:平空6:爆仓平多7:爆仓平空 // 9:止盈平多10:止盈平空11:止损平多12:止损平空 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == openingType) { // 开多 发送开多止损 止盈 爆仓 // 爆仓价 BigDecimal forceSetPrice = order.getForceClosingPrice(); if (forceSetPrice != null) { OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceSetPrice.toPlainString(), order.getSymbol(), order.getOperateNo()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } // 止损 BigDecimal stopLossPrice = order.getStopLossPrice(); if (stopLossPrice != null && stopLossPrice.compareTo(BigDecimal.ZERO) > 0) { OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(), stopLossPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } // 止盈 BigDecimal stopProfitPrice = order.getStopProfitPrice(); if (stopProfitPrice != null && stopProfitPrice.compareTo(BigDecimal.ZERO) > 0) { OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } } else { // 开空 发送开空止损 止盈 爆仓 // 爆仓价 BigDecimal forceSetPrice = order.getForceClosingPrice(); if (forceSetPrice != null) { OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceSetPrice.toPlainString(), order.getSymbol(), order.getOperateNo()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } // 止损 BigDecimal stopLossPrice = order.getStopLossPrice(); if (stopLossPrice != null && stopLossPrice.compareTo(BigDecimal.ZERO) > 0) { OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), stopLossPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } // 止盈 BigDecimal stopProfitPrice = order.getStopProfitPrice(); if (stopProfitPrice != null && stopProfitPrice.compareTo(BigDecimal.ZERO) > 0) { OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); producer.sendPriceOperate(JSONObject.toJSONString(model)); } } } } if (CollectionUtils.isNotEmpty(entrustOrderEntities)) { for (ContractEntrustOrderEntity order : entrustOrderEntities) { // 开多1,开空 2 int entrustType = order.getEntrustType(); // 开多 BigDecimal entrustPrice = order.getEntrustPrice(); OrderModel model; if (ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE == entrustType) { // 开多委托 model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); } else { model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); } producer.sendPriceOperate(JSONObject.toJSONString(model)); } } } } src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.rabbit.producer.OrderProducer; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -12,6 +13,7 @@ import java.util.Map; import java.util.concurrent.PriorityBlockingQueue; @Slf4j @Component public class WebsocketPriceService { @@ -22,7 +24,7 @@ * @param symbol * @param price */ public void comparePriceAsc(String symbol, String price) { public void comparePriceAsc(String symbol, String price) { // 比较价格 正序的 最小元素在头部 开多止盈 开空止损等 PriorityBlockingQueue<AscBigDecimal> queue = PricePriorityQueue.getQueueAsc(symbol); // 最小的 @@ -33,20 +35,20 @@ // 找到所有比当前价格大的 是需要操作的 if (b != null && b.compareTo(now) <= 0) { // 可以操作 System.out.println("当前价格:" + price + "---正序---" + "队列价格:" + b.getValue().toPlainString()+" time:"+new Date()); System.out.println("当前价格:" + price + "---正序---" + "队列价格:" + b.getValue().toPlainString() + " time:" + new Date()); while (queue.peek() != null && queue.peek().compareTo(now) <= 0) { // 可以发送消息操作 list.add(queue.remove()); } } if(CollectionUtils.isNotEmpty(list)){ dealAscPriceOrderAndSenMq(list,symbol); if (CollectionUtils.isNotEmpty(list)) { dealAscPriceOrderAndSenMq(list, symbol); } } public void comparePriceDesc(String symbol, String price) { public void comparePriceDesc(String symbol, String price) { // 比较价格 倒叙的 开多止损 开空止盈 PriorityBlockingQueue<DescBigDecimal> queue = PricePriorityQueue.getQueueDesc(symbol); // 最大价格 @@ -58,15 +60,16 @@ // 即最大的币当前价大 那么需要开多止损 if (b != null && b.compareTo(now) <= 0) { // 可以操作 System.out.println("当前价格:" + price + "---倒序操作---" + "队列:" + b.getValue().toPlainString()+" time:"+new Date()); System.out.println("当前价格:" + price + "---倒序操作---" + "队列:" + b.getValue().toPlainString() + " time:" + new Date()); while (queue.peek() != null && queue.peek().compareTo(now) <= 0) { // 可以发送消息操作 list.add(queue.remove()); log.info("#{}#", JSONObject.toJSONString(list)); } } if(CollectionUtils.isNotEmpty(list)){ dealDescPriceOrderAndSenMq(list,symbol); if (CollectionUtils.isNotEmpty(list)) { dealDescPriceOrderAndSenMq(list, symbol); } } @@ -82,14 +85,14 @@ // 根据价格查询到对应的订单 for (AscBigDecimal asc : list) { String key = asc.getValue().toPlainString(); if(orderMap.containsKey(key)){ assert orderMap != null; if (orderMap.containsKey(key)) { orderModelList.addAll(orderMap.get(key)); orderMap.remove(key); } } if(CollectionUtils.isEmpty(orderModelList)){ if (CollectionUtils.isEmpty(orderModelList)) { return; } System.out.println("本次执行的列表ASC"); @@ -98,52 +101,46 @@ // 3:开空 7:爆仓平空 // 9:止盈平多 12:止损平空 for (OrderModel model : orderModelList) { List<OrderModel> kkzsList = null; List<OrderModel> kdzyList = null; List<OrderModel> bcList = null; List<OrderModel> wtkkList = null; // 止损平空 List<OrderModel> kkzsList = new ArrayList<OrderModel>(); // 止盈平多 List<OrderModel> kdzyList = new ArrayList<OrderModel>(); // 爆仓平空 List<OrderModel> bcList = new ArrayList<OrderModel>(); // 开空 List<OrderModel> wtkkList = new ArrayList<OrderModel>(); switch (model.getType()) { case 3: if (wtkkList == null) { wtkkList = new ArrayList<OrderModel>(); } wtkkList.add(model); break; case 7: if (bcList == null) { bcList = new ArrayList<OrderModel>(); } bcList.add(model); break; case 9: if (kdzyList == null) { kdzyList = new ArrayList<OrderModel>(); } kdzyList.add(model); break; case 12: if (kkzsList == null) { kkzsList = new ArrayList<OrderModel>(); } kkzsList.add(model); break; default: log.info("#price-service unknown type#"); break; } // 发送消息 if(CollectionUtils.isNotEmpty(kkzsList)){ String kkzs= JSONObject.toJSONString(kkzsList); if (CollectionUtils.isNotEmpty(kkzsList)) { String kkzs = JSONObject.toJSONString(kkzsList); orderProducer.sendLessLoss(kkzs); } if(CollectionUtils.isNotEmpty(kdzyList)){ String kdzy = JSONObject.toJSONString(kdzyList); if (CollectionUtils.isNotEmpty(kdzyList)) { String kdzy = JSONObject.toJSONString(kdzyList); orderProducer.sendMorePro(kdzy); } if(CollectionUtils.isNotEmpty(bcList)){ if (CollectionUtils.isNotEmpty(bcList)) { orderProducer.sendCoinout(JSONObject.toJSONString(bcList)); } if(CollectionUtils.isNotEmpty(wtkkList)){ if (CollectionUtils.isNotEmpty(wtkkList)) { orderProducer.sendLimit(JSONObject.toJSONString(wtkkList)); } } } @@ -159,14 +156,15 @@ // 根据价格查询到对应的订单 for (DescBigDecimal desc : list) { String key = desc.getValue().toPlainString(); if(orderMap.containsKey(key)){ assert orderMap != null; if (orderMap.containsKey(key)) { orderModelList.addAll(orderMap.get(key)); orderMap.remove(key); } } if(CollectionUtils.isEmpty(orderModelList)){ if (CollectionUtils.isEmpty(orderModelList)) { return; } System.out.println("本次执行的列表Desc"); @@ -175,50 +173,44 @@ // 2:开多6:爆仓平多 // 10:止盈平空11:止损平多 for (OrderModel model : orderModelList) { List<OrderModel> kkzyList = null; List<OrderModel> kdzsList = null; List<OrderModel> bcList = null; List<OrderModel> wtkdList = null; // 开空止盈 List<OrderModel> kkzyList = new ArrayList<OrderModel>(); // 开多止损 List<OrderModel> kdzsList = new ArrayList<OrderModel>(); // 爆仓 List<OrderModel> bcList = new ArrayList<OrderModel>(); // 开多委托 List<OrderModel> wtkdList = new ArrayList<OrderModel>(); switch (model.getType()) { case 2: if (wtkdList == null) { wtkdList = new ArrayList<OrderModel>(); } wtkdList.add(model); break; case 6: if (bcList == null) { bcList = new ArrayList<OrderModel>(); } bcList.add(model); break; case 10: if (kkzyList == null) { kkzyList = new ArrayList<OrderModel>(); } kkzyList.add(model); break; case 11: if (kdzsList == null) { kdzsList = new ArrayList<OrderModel>(); } kdzsList.add(model); break; default: break; } // 发送消息 if(CollectionUtils.isNotEmpty(kkzyList)){ String kkzy= JSONObject.toJSONString(kkzyList); if (CollectionUtils.isNotEmpty(kkzyList)) { String kkzy = JSONObject.toJSONString(kkzyList); orderProducer.sendLessPro(kkzy); } if(CollectionUtils.isNotEmpty(kdzsList)){ String kdzs = JSONObject.toJSONString(kdzsList); if (CollectionUtils.isNotEmpty(kdzsList)) { String kdzs = JSONObject.toJSONString(kdzsList); orderProducer.sendMoreLoss(kdzs); } if(CollectionUtils.isNotEmpty(bcList)){ if (CollectionUtils.isNotEmpty(bcList)) { orderProducer.sendCoinout(JSONObject.toJSONString(bcList)); } if(CollectionUtils.isNotEmpty(wtkdList)){ if (CollectionUtils.isNotEmpty(wtkdList)) { orderProducer.sendLimit(JSONObject.toJSONString(wtkdList)); } src/main/resources/logback-spring.xml
@@ -2,7 +2,7 @@ <configuration> <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> <property name="log.path" value="/home/javaweb/log/new-excoin" /> <property name="log.path" value="logs" /> <!-- <springProperty scope="context" name="log.path" source="logging.file.path"/>--> <!-- 彩色日志 --> src/main/resources/mapper/contract/ContractEntrustOrderDao.xml
@@ -18,4 +18,8 @@ #{item} </foreach> </select> <select id="selectAllEntrustOrder" resultType="com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity"> select * from contract_entrust_order </select> </mapper> src/main/resources/mapper/contract/ContractHoldOrderDao.xml
@@ -32,4 +32,8 @@ update contract_hold_order set is_can_closing=#{isCanClosing} where id=#{id} </update> <select id="selectAllHoldOrder" resultType="com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity"> select * from contract_hold_order </select> </mapper>