| | |
| | | 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.RabbitOrderService; |
| | | import com.xcong.excoin.modules.documentary.common.NoticeConstant; |
| | | import com.xcong.excoin.modules.documentary.dao.FollowFollowerOrderRelationDao; |
| | | import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao; |
| | |
| | | import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; |
| | | import com.xcong.excoin.modules.documentary.service.FollowOrderOperationService; |
| | | import com.xcong.excoin.modules.member.dao.MemberDao; |
| | | import com.xcong.excoin.modules.member.dao.MemberLevelRateDao; |
| | | import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; |
| | | import com.xcong.excoin.modules.member.entity.AgentReturnEntity; |
| | | import com.xcong.excoin.modules.member.entity.MemberEntity; |
| | | import com.xcong.excoin.modules.member.entity.MemberLevelRateEntity; |
| | | import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; |
| | | import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; |
| | | import com.xcong.excoin.rabbit.pricequeue.OrderModel; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | |
| | | private OrderProducer producer; |
| | | @Resource |
| | | private FollowTraderInfoDao followTraderInfoDao; |
| | | @Resource |
| | | private RabbitOrderService rabbitOrderService; |
| | | @Resource |
| | | private MemberLevelRateDao memberLevelRateDao; |
| | | |
| | | |
| | | @Override |
| | |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(id); |
| | | |
| | | List<FollowFollowerSettingEntity> followerSettings = followFollowerSettingDao.selectAllFollowerSettingByTradeMemberId(holdOrderEntity.getMemberId()); |
| | | log.info("---->{}, {}", followerSettings.size(), holdOrderEntity.getMemberId()); |
| | | // 开仓价 |
| | | BigDecimal openPrice = holdOrderEntity.getOpeningPrice(); |
| | | PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); |
| | |
| | | Long tradeMemberId = holdOrderEntity.getMemberId(); |
| | | if (CollUtil.isNotEmpty(followerSettings)) { |
| | | for (FollowFollowerSettingEntity followerSetting : followerSettings) { |
| | | log.info("循环开始"); |
| | | |
| | | if (!followerSetting.getSymbols().contains(holdOrderEntity.getSymbol().replace("/USDT", ""))) { |
| | | log.info("不在跟单币种内,不跟单:{},{}", followerSetting.getSymbols(), holdOrderEntity.getSymbol()); |
| | | continue; |
| | | } |
| | | |
| | | // 当前持仓张数 |
| | | Integer holdingCnt = followFollowerOrderRelationDao.selectFollowerHoldingSymbolCnt(tradeMemberId, followerSetting.getMemberId()); |
| | | |
| | |
| | | symbolCnt = followerSetting.getFollowCnt() * holdOrderEntity.getSymbolCnt(); |
| | | } |
| | | |
| | | log.info("--->>>{}, {}", symbolCnt, followerSetting.getMaxFollowCnt()); |
| | | if (followerSetting.getMaxFollowCnt() != null && followerSetting.getMaxFollowCnt() !=0) { |
| | | // 若张数+当前持仓张数大于最大持仓张数,则取最大持仓减去当前持仓,若差值小于等于0,则不下单 |
| | | if (symbolCnt + holdingCnt > followerSetting.getMaxFollowCnt()) { |
| | | symbolCnt = followerSetting.getMaxFollowCnt() - holdingCnt; |
| | | } |
| | | |
| | | log.info("--->{}, {}, {}", symbolCnt, followerSetting.getMaxFollowCnt(), holdingCnt); |
| | | if (symbolCnt <= 0) { |
| | | // LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.OPEN_ORDER_TITLE, StrUtil.format(NoticeConstant.OPEN_ORDER_CONTENT, holdOrderEntity.getSymbol() + "开空", openPrice, followTraderInfoEntity.getNickname())); |
| | | LogRecordUtils.insertFollowerNotice(followerSetting.getMemberId(), NoticeConstant.OPEN_ORDER_FOLLOW_FAIL_TITLE, StrUtil.format(NoticeConstant.OPEN_ORDER_FOLLOW_FAIL_CONTENT, followTraderInfoEntity.getNickname())); |
| | | continue; |
| | | } |
| | | } |
| | |
| | | MemberEntity memberEntity = memberDao.selectById(followerSetting.getMemberId()); |
| | | // 强平价 |
| | | BigDecimal forceClosingPrice = CalculateUtil.getForceSetPrice(bondAmount, openPrice, symbolCnt, lotNumber, holdOrderEntity.getOpeningType(), memberEntity); |
| | | |
| | | MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), holdOrderEntity.getSymbol()); |
| | | ContractHoldOrderEntity followHoldOrder = new ContractHoldOrderEntity(); |
| | | followHoldOrder.setMemberId(memberEntity.getId()); |
| | | followHoldOrder.setOrderNo(commonService.generateOrderNo(memberEntity.getId())); |
| | |
| | | followHoldOrder.setSymbol(holdOrderEntity.getSymbol()); |
| | | followHoldOrder.setSymbolCnt(symbolCnt); |
| | | followHoldOrder.setSymbolSku(lotNumber); |
| | | followHoldOrder.setLeverRatio(holdOrderEntity.getLeverRatio()); |
| | | followHoldOrder.setLeverRatio(levelRateEntity.getLevelRateUp()); |
| | | followHoldOrder.setForceClosingPrice(forceClosingPrice); |
| | | followHoldOrder.setOpeningFeeAmount(openFeePrice); |
| | | followHoldOrder.setOpeningPrice(openPrice); |
| | |
| | | contractOrderEntity.setOpeningTime(new Date()); |
| | | contractHoldOrderDao.insert(followHoldOrder); |
| | | int i = contractOrderDao.insert(contractOrderEntity); |
| | | log.info("----->{}", i); |
| | | if (i > 0) { |
| | | memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); |
| | | |
| | |
| | | relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD); |
| | | relationEntity.setTradeId(followTraderInfoEntity.getId()); |
| | | relationEntity.setTradeMemberId(followTraderInfoEntity.getMemberId()); |
| | | relationEntity.setTradeOrderId(id); |
| | | relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo()); |
| | | followFollowerOrderRelationDao.insert(relationEntity); |
| | | |
| | | // 发送爆仓消息 |
| | |
| | | } |
| | | producer.sendPriceOperate(JSONObject.toJSONString(model)); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void closingFollowOrders(String orderNo) { |
| | | List<FollowFollowerOrderRelationEntity> orderRelations = followFollowerOrderRelationDao.selectFollowHoldOrderByTradeOrderNo(orderNo); |
| | | if (CollUtil.isNotEmpty(orderRelations)) { |
| | | for (FollowFollowerOrderRelationEntity orderRelation : orderRelations) { |
| | | List<Long> ids= new ArrayList<>(); |
| | | ids.add(orderRelation.getOrderId()); |
| | | rabbitOrderService.cancelHoldOrder(ids); |
| | | } |
| | | } |
| | | } |
| | | } |