| | |
| | | holdOrderListVo.setReturnRate(returnRate); |
| | | holdOrderListVo.setProfitOrLoss(rewardRatio); |
| | | if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) { |
| | | BigDecimal forcePrice = CalculateUtil.calForcePriceForWhole(memberEntity, holdOrderEntity); |
| | | contractHoldOrderDao.updateForcePriceBySymbolAndMemberId(forcePrice, memberEntity.getId(), holdOrderEntity.getSymbol()); |
| | | BigDecimal forcePrice = CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity); |
| | | // contractHoldOrderDao.updateForcePriceBySymbolAndMemberId(forcePrice, memberEntity.getId(), holdOrderEntity.getSymbol()); |
| | | holdOrderListVo.setForceClosingPrice(forcePrice); |
| | | } |
| | | resultList.add(holdOrderListVo); |
| | |
| | | for (FollowFollowerSettingEntity followerSetting : followerSettings) { |
| | | // 加redis锁,同一个用户不能同时触发两个跟单任务,否则会出现金额问题 |
| | | while (true) { |
| | | boolean flag = redisUtils.setNotExist(AppContants.MEMBER_HAS_FOLLOW + "_" + followerSetting.getMemberId(), "1", 1); |
| | | boolean flag = redisUtils.setNotExist(AppContants.MEMBER_HAS_FOLLOW + "_" + followerSetting.getMemberId(), "1", 5); |
| | | // List<Object> followerMemberId = redisUtils.lGet(AppContants.MEMBER_HAS_FOLLOW, 0, -1); |
| | | // log.info("#跟单用户任务已存在:{}, 当前:{}#", followerMemberId, followerSetting.getMemberId()); |
| | | // log.info("#------->{}#", followerMemberId.contains(followerSetting.getMemberId().intValue())); |
| | |
| | | continue; |
| | | } |
| | | |
| | | boolean flag = false; |
| | | while(true) { |
| | | MemberWalletContractEntity updateEntity = new MemberWalletContractEntity(); |
| | | updateEntity.setAvailableBalance(prePaymentAmount.negate()); |
| | | updateEntity.setTotalBalance(openFeePrice.negate()); |
| | | updateEntity.setId(walletContract.getId()); |
| | | updateEntity.setVersion(walletContract.getVersion()); |
| | | int i = memberWalletContractDao.updateWalletContractWithVersion(updateEntity); |
| | | if (i > 0) { |
| | | break; |
| | | } |
| | | |
| | | walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(followerSetting.getMemberId(), CoinTypeEnum.USDT.name()); |
| | | if (prePaymentAmount.compareTo(walletContract.getAvailableBalance()) > -1) { |
| | | log.info("可用金额不足"); |
| | | LogRecordUtils.insertFollowerNotice(followerSetting.getMemberId(), NoticeConstant.MONEY_NOT_ENOUGH_TITLE, StrUtil.format(NoticeConstant.MONEY_NOT_ENOUGH_CONTENT, followTraderInfoEntity.getNickname())); |
| | | flag = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (flag) { |
| | | continue; |
| | | } |
| | | |
| | | MemberEntity memberEntity = memberDao.selectById(followerSetting.getMemberId()); |
| | | // 强平价 |
| | | BigDecimal forceClosingPrice = CalculateUtil.getForceSetPrice(bondAmount, openPrice, symbolCnt, lotNumber, holdOrderEntity.getOpeningType(), memberEntity); |
| | |
| | | contractHoldOrderDao.insert(followHoldOrder); |
| | | int i = contractOrderDao.insert(contractOrderEntity); |
| | | if (i > 0) { |
| | | memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); |
| | | // memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); |
| | | |
| | | FollowFollowerOrderRelationEntity relationEntity = new FollowFollowerOrderRelationEntity(); |
| | | relationEntity.setIsShow(FollowFollowerOrderRelationEntity.IS_SHOW_Y); |
| | |
| | | void increaseWalletContractBalanceById(@Param("availableBalance") BigDecimal availableBalance,@Param("totalBalance") BigDecimal totalBalance,@Param("frozenBalance") BigDecimal frozenBalance,@Param("id") Long id);
|
| | |
|
| | | List<ContractSymbolListVo> findContractSymbolListBymemberId(@Param("memberId")Long memberId);
|
| | |
|
| | | public int updateWalletContractWithVersion(@Param("record") MemberWalletContractEntity memberWalletContractEntity);
|
| | | }
|
| | |
| | | return forcePrice;
|
| | | }
|
| | |
|
| | | public static BigDecimal calWholePriceTwo(MemberEntity memberEntity, ContractHoldOrderEntity contractHoldOrderEntity) {
|
| | | ContractHoldOrderDao holdOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
|
| | | MemberWalletContractDao walletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
|
| | | RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
|
| | | BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
|
| | |
|
| | | Long memberId = memberEntity.getId();
|
| | | MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
|
| | | List<ContractHoldOrderEntity> holdOrderEntities = holdOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberId, null);
|
| | | BigDecimal forcePrice = BigDecimal.ZERO;
|
| | | if (CollUtil.isNotEmpty(holdOrderEntities)) {
|
| | | BigDecimal totalBondAmount = BigDecimal.ZERO;
|
| | | BigDecimal totalProfitOrLoss = BigDecimal.ZERO;
|
| | | for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) {
|
| | | if (holdOrderEntity.getId().equals(contractHoldOrderEntity.getId())) {
|
| | | // totalBondAmount = totalBondAmount.add(holdOrderEntity.getHoldBond());
|
| | | } else {
|
| | | totalBondAmount = totalBondAmount.add(holdOrderEntity.getBondAmount());
|
| | | }
|
| | | totalProfitOrLoss = totalProfitOrLoss.add(calProfitOrLoss(holdOrderEntity, memberEntity));
|
| | | }
|
| | |
|
| | | BigDecimal holdBond = contractHoldOrderEntity.getHoldBond();
|
| | | BigDecimal cost = contractHoldOrderEntity.getSymbolSku().multiply(contractHoldOrderEntity.getOpeningPrice()).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCntSale()));
|
| | | BigDecimal divideChild = walletContract.getTotalBalance().subtract(holdBond).subtract(cost).add(newPrice.multiply(new BigDecimal("0.005")));
|
| | | BigDecimal divideParent = contractHoldOrderEntity.getSymbolSku().multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCntSale()));
|
| | |
|
| | | forcePrice = divideChild.divide(divideParent, 8, BigDecimal.ROUND_DOWN).negate();
|
| | | }
|
| | | return forcePrice;
|
| | | }
|
| | |
|
| | | public static BigDecimal calProfitOrLoss(ContractHoldOrderEntity holdOrderEntity, MemberEntity memberEntity) {
|
| | | CacheSettingUtils cacheSettingUtils = SpringContextHolder.getBean(CacheSettingUtils.class);
|
| | | RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
|
| | |
| | | where id =#{id}
|
| | | </update>
|
| | |
|
| | | <update id="updateWalletContractWithVersion">
|
| | | update member_wallet_contract
|
| | | <if test="record != null">
|
| | | <set>
|
| | | <if test="record.availableBalance!=null">
|
| | | available_balance = available_balance + #{record.availableBalance},
|
| | | </if>
|
| | | <if test="record.totalBalance!=null">
|
| | | total_balance =total_balance + #{record.totalBalance},
|
| | | </if>
|
| | | <if test="record.frozenBalance!=null">
|
| | | frozen_balance = frozen_balance + #{record.frozenBalance},
|
| | | </if>
|
| | | version = version + 1
|
| | | </set>
|
| | | where id=#{record.id} and version=#{record.version}
|
| | | </if>
|
| | | </update>
|
| | | </mapper> |