| | |
| | | return ServerResponse.createByErrorMsg("报价0,请稍后再试", request); |
| | | } |
| | | |
| | | |
| | | BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever)); |
| | | BigDecimal finalBuyAmt = buyAmt; |
| | | //如果不是墨西哥币需要转换金额 |
| | | if (!stock.getStockType().equals(EStockType.MX.getCode())) { |
| | | buyAmt = userAssetsServices.exchangeAmountByRate(stock.getStockType(), buyAmt); |
| | | } |
| | | //手续费 |
| | | BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt); |
| | | |
| | | BigDecimal needBuyAmt = buyAmt.add(orderFree); |
| | | //资金校验 |
| | | if (!stock.getStockType().equals(EStockType.getDefault().getCode())) { |
| | | needBuyAmt = userAssetsServices.exchangeAmountByRate(stock.getStockType(), buyAmt); |
| | | } |
| | | BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100)); |
| | | BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance()); |
| | | if (availableBalance.compareTo(buyAmt.add(orderFree)) < 0) { |
| | | if (availableBalance.compareTo(needBuyAmt) < 0) { |
| | | return ServerResponse.createByErrorMsg("订单失败,配资不足", request); |
| | | } |
| | | |
| | | UserPosition userPosition = new UserPosition(); |
| | | if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) { |
| | | userPosition.setProfitTargetPrice(profitTarget); |
| | |
| | | } |
| | | userPosition.setIsLock(Integer.valueOf(0)); |
| | | userPosition.setOrderLever(lever); |
| | | userPosition.setOrderTotalPrice(finalBuyAmt); |
| | | userPosition.setOrderTotalPrice(buyAmt); |
| | | // 手续费 |
| | | |
| | | userPosition.setOrderFee(orderFree); |
| | |
| | | } |
| | | |
| | | BigDecimal newBuyAmt = buyAmt; |
| | | //如果不是墨西哥币需要转换金额 |
| | | if (!stock.getStockType().equals(EStockType.MX.getCode())) { |
| | | //如果不是默认货币需要转换金额 |
| | | if (!stock.getStockType().equals(EStockType.getDefault().getCode())) { |
| | | newBuyAmt = userAssetsServices.exchangeAmountByRate(stock.getStockType(), buyAmt); |
| | | } |
| | | if(newBuyAmt.compareTo(userAssets.getAvailableBalance()) > 0){ |
| | |
| | | UserPosition userPosition = getUserPosition(dzId,num, user, stockDz, nowPrice, stock, buyAmt); |
| | | userPositionMapper.insert(userPosition); |
| | | BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(newBuyAmt); |
| | | //已经转化 直接穿MEX类型 |
| | | userAssetsServices.availablebalanceChange(EStockType.MX.getCode(), user.getId(), EUserAssets.BUY, newBuyAmt.negate(),"",""); |
| | | iUserAssetsServices.availablebalanceChange(EStockType.MX.getCode(), userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); |
| | | //已经转化 直接传默认类型 |
| | | userAssetsServices.availablebalanceChange(EStockType.getDefault().getCode(), user.getId(), EUserAssets.BUY, newBuyAmt.negate(),"",""); |
| | | iUserAssetsServices.availablebalanceChange(EStockType.getDefault().getCode(), userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); |
| | | return ServerResponse.createBySuccess("购买成功", request); |
| | | } catch (Exception e) { |
| | | log.error("大宗下单异常{}", e.getMessage()); |
| | |
| | | null, null, state, null); |
| | | |
| | | BigDecimal usMarketValue = BigDecimal.ZERO; //美股市值 |
| | | BigDecimal mxMarketValue = BigDecimal.ZERO; //墨西哥股市值 |
| | | BigDecimal hkMarketValue = BigDecimal.ZERO; //港股市值 |
| | | BigDecimal inMarketValue = BigDecimal.ZERO; //印股市值 |
| | | BigDecimal twMarketValue = BigDecimal.ZERO; //台股市值 |
| | | |
| | | BigDecimal usPositionEarnings = BigDecimal.ZERO; //美股持仓收益 |
| | | BigDecimal mxPositionEarnings = BigDecimal.ZERO; //墨西哥持仓收益 |
| | | BigDecimal hkPositionEarnings = BigDecimal.ZERO; //港股持仓收益 |
| | | BigDecimal inPositionEarnings = BigDecimal.ZERO; //印股持仓收益 |
| | | BigDecimal twPositionEarnings = BigDecimal.ZERO; //台股持仓收益 |
| | | |
| | | BigDecimal usPositionEarningsParent = BigDecimal.ZERO; //美股持仓收益百分比 |
| | | BigDecimal mxPositionEarningsParent = BigDecimal.ZERO; //墨西哥持仓收益百分比 |
| | | BigDecimal hkPositionEarningsParent = BigDecimal.ZERO; //港股持仓收益百分比 |
| | | BigDecimal inPositionEarningsParent = BigDecimal.ZERO; //印股持仓收益百分比 |
| | | BigDecimal twPositionEarningsParent = BigDecimal.ZERO; //台股持仓收益百分比 |
| | | |
| | | if (!userPositions.isEmpty()) { |
| | | for (UserPosition position : userPositions) { |
| | |
| | | usMarketValue = usMarketValue.add(nowPrice); |
| | | usPositionEarnings = usPositionEarnings.add(userPositionVO.getProfitAndLose()); |
| | | usPositionEarningsParent = usPositionEarningsParent.add(userPositionVO.getProfitAndLoseParent2()); |
| | | } else if(position.getStockGid().equals(EStockType.MX.getCode())) { |
| | | mxMarketValue = mxMarketValue.add(nowPrice); |
| | | mxPositionEarnings = mxPositionEarnings.add(userPositionVO.getProfitAndLose()); |
| | | mxPositionEarningsParent = mxPositionEarningsParent.add(userPositionVO.getProfitAndLoseParent2()); |
| | | } else if(position.getStockGid().equals(EStockType.HK.getCode())) { |
| | | hkMarketValue = hkMarketValue.add(nowPrice); |
| | | hkPositionEarnings = hkPositionEarnings.add(userPositionVO.getProfitAndLose()); |
| | | hkPositionEarningsParent = hkPositionEarningsParent.add(userPositionVO.getProfitAndLoseParent2()); |
| | | } else if(position.getStockGid().equals(EStockType.IN.getCode())) { |
| | | inMarketValue = inMarketValue.add(nowPrice); |
| | | inPositionEarnings = inPositionEarnings.add(userPositionVO.getProfitAndLose()); |
| | | inPositionEarningsParent = inPositionEarningsParent.add(userPositionVO.getProfitAndLoseParent2()); |
| | | } else if(position.getStockGid().equals(EStockType.TW.getCode())) { |
| | | twMarketValue = twMarketValue.add(nowPrice); |
| | | twPositionEarnings = twPositionEarnings.add(userPositionVO.getProfitAndLose()); |
| | | twPositionEarningsParent = twPositionEarningsParent.add(userPositionVO.getProfitAndLoseParent2()); |
| | | } |
| | | |
| | | } |
| | | usPositionEarnings = usPositionEarnings.setScale(2, RoundingMode.DOWN); |
| | | mxPositionEarnings = mxPositionEarnings.setScale(2, RoundingMode.DOWN); |
| | | hkPositionEarnings = hkPositionEarnings.setScale(2, RoundingMode.DOWN); |
| | | inPositionEarnings = inPositionEarnings.setScale(2, RoundingMode.DOWN); |
| | | twPositionEarnings = twPositionEarnings.setScale(2, RoundingMode.DOWN); |
| | | } |
| | | |
| | | Map<String, String> map = new HashMap<>(); |
| | |
| | | map.put("usPositionEarnings", String.valueOf(usPositionEarnings)); //美股持仓收益 |
| | | map.put("usPositionEarningsParent", usPositionEarningsParent + "%");//美股持仓收益率 |
| | | |
| | | map.put("mxMarketValue", String.valueOf(mxMarketValue)); //墨西哥股市值 |
| | | map.put("mxPositionEarnings", String.valueOf(mxPositionEarnings)); //墨西哥持仓收益 |
| | | map.put("mxPositionEarningsParent", mxPositionEarningsParent + "%");//墨西哥持仓收益率 |
| | | map.put("hkMarketValue", String.valueOf(hkMarketValue)); //港股市值 |
| | | map.put("hkPositionEarnings", String.valueOf(hkPositionEarnings)); //港股持仓收益 |
| | | map.put("hkPositionEarningsParent", hkPositionEarningsParent + "%");//港股持仓收益率 |
| | | |
| | | map.put("inMarketValue", String.valueOf(inMarketValue)); //印股市值 |
| | | map.put("inPositionEarnings", String.valueOf(inPositionEarnings)); //印股持仓收益 |
| | | map.put("inPositionEarningsParent", inPositionEarningsParent + "%");//印股持仓收益率 |
| | | |
| | | map.put("twMarketValue", String.valueOf(twMarketValue)); //台股市值 |
| | | map.put("twPositionEarnings", String.valueOf(twPositionEarnings)); //台股持仓收益 |
| | | map.put("twPositionEarningsParent", twPositionEarningsParent + "%");//台股持仓收益率 |
| | | |
| | | return ServerResponse.createBySuccess(map); |
| | | } catch (Exception e) { |
| | | log.error("IUserPositionService getMyPositionProfitAndLose error", e); |