src/main/java/com/nq/service/impl/StockAiServiceImpl.java
@@ -44,6 +44,8 @@ IUserService iUserService; @Autowired IUserAssetsServices iUserAssetsServices; @Autowired private UserAssetsServices userAssetsServices; /** * 获取上架ai产品 @@ -103,19 +105,11 @@ } //获取用户账户 UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), user.getId()); /*BigDecimal finalBuyNum = buyNum; //购买金额 BigDecimal finalBuyNum = buyNum; //如果不是墨西哥币需要转换金额 if (!stockAI.getStockType().equals(EStockType.MX.getCode())) { EStockType stockType = EStockType.getEStockTypeByCode(stockAI.getStockType()); ExchangeRate exchangeRate = exchangeRateRepository.findExchangeRateByCurrencyAndConversionCurrency(stockType.getSymbol(), EStockType.MX.getSymbol()) .orElse(null); if (exchangeRate == null) { return ServerResponse.createByErrorMsg("当前货币汇率无法转换"); buyNum = userAssetsServices.exchangeAmountByRate(stockAI.getStockType(), buyNum); } //转换为墨西哥币 buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata()); }*/ if(buyNum.compareTo(userAssets.getAvailableBalance()) > 0){ return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance(), request); } @@ -123,13 +117,14 @@ if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ return ServerResponse.createByErrorMsg("请先缴清待补资金", request); } iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), user.getId(), EUserAssets.BUY_AI, buyNum); //已经转化 直接穿MEX类型 iUserAssetsServices.aiAvailableBalanceChange(EStockType.MX.getCode(), user.getId(), EUserAssets.BUY_AI, buyNum); StockAIOrder stockAIOrder = new StockAIOrder(); stockAIOrder.setUserId(user.getId()); stockAIOrder.setStockAiId(id.intValue()); stockAIOrder.setBuyDate(new Date()); stockAIOrder.setBuyAmount(buyNum); stockAIOrder.setRemainAmount(buyNum); stockAIOrder.setBuyAmount(finalBuyNum); stockAIOrder.setRemainAmount(finalBuyNum); stockAIOrder.setRealEarning(BigDecimal.valueOf(0)); stockAIOrder.setStatus(EStockAIOrderStatus.wait.getStatus()); //等待审核 stockAiOrderMapper.insert(stockAIOrder); @@ -364,13 +359,12 @@ return ServerResponse.createBySuccess("操作成功"); } } catch (Exception e) { log.error("StockAiService openPosition error", e); log.error("StockAiService orderOperation error", e); } return ServerResponse.createByError(); } /** * 建仓列表 * 建仓列表 * @param pageNum * @param pageSize src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -316,15 +316,16 @@ //冻结金额 userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount)); //扣除可用金额 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate())); userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(amount)); amount = amount.negate(); } else if (eUserAssets.getCode().equals(EUserAssets.BUY_AI_REJECT.getCode())) { //解除冻结金额 userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount.negate())); userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount)); //归还可用金额 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount)); } else if (eUserAssets.getCode().equals(EUserAssets.AI_SETTLEMENT.getCode())) { //解除购买冻结金额 userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount.negate())); userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount)); //归还购买金额 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount)); } else if (eUserAssets.getCode().equals(EUserAssets.AI_SETTLEMENT_INT.getCode())) { @@ -335,13 +336,16 @@ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount)); } else if(eUserAssets.getCode().equals(EUserAssets.RT_DK.getCode())) { //归还贷款 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate())); userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(amount)); amount = amount.negate(); } else if(eUserAssets.getCode().equals(EUserAssets.RT_DK_INT.getCode())) { //贷款利息 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate())); userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(amount)); amount = amount.negate(); } String after = userAssets.getAvailableBalance().toString(); //资金明细 MoneyLog moneyLog = new MoneyLog(); moneyLog.setDescs(eUserAssets.getDesc()); moneyLog.setBeFore(before); src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -187,7 +187,13 @@ 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 fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100)); @@ -221,7 +227,7 @@ } userPosition.setIsLock(Integer.valueOf(0)); userPosition.setOrderLever(lever); userPosition.setOrderTotalPrice(buyAmt); userPosition.setOrderTotalPrice(finalBuyAmt); // 手续费 userPosition.setOrderFee(orderFree); @@ -1810,6 +1816,15 @@ return ServerResponse.createByErrorMsg("订单失败,配资不足", request); } BigDecimal newBuyAmt = buyAmt; //如果不是墨西哥币需要转换金额 if (!stock.getStockType().equals(EStockType.MX.getCode())) { newBuyAmt = userAssetsServices.exchangeAmountByRate(stock.getStockType(), buyAmt); } if(newBuyAmt.compareTo(userAssets.getAvailableBalance()) > 0){ return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance(), request); } //判断审核开关 if(stockDz.getSwitchType() == 1) { UserPosition userPosition = getUserPosition(dzId,num, user, stockDz, nowPrice, stock, buyAmt); @@ -1822,9 +1837,10 @@ // 创建UserPosition对象 UserPosition userPosition = getUserPosition(dzId,num, user, stockDz, nowPrice, stock, buyAmt); userPositionMapper.insert(userPosition); BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(buyAmt); userAssetsServices.availablebalanceChange(stock.getStockType(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"",""); iUserAssetsServices.availablebalanceChange(stock.getStockType(), userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); 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, "", ""); return ServerResponse.createBySuccess("购买成功", request); } @@ -2177,6 +2193,9 @@ userPositionCheckDzService.updateById(userPositionCheckDz); return ServerResponse.createBySuccess("审核成功", request); } if (orderNum > userPositionCheckDz.getOrderNum()) { return ServerResponse.createByErrorMsg("输入数量大于用户买入数量", request); } User user = userMapper.selectById(userPositionCheckDz.getUserId()); StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", userPositionCheckDz.getDzId())); @@ -2206,7 +2225,7 @@ userPosition.setId(null); userPosition.setDzId(stockDz.getId()); userPositionMapper.insert(userPosition); userAssetsServices.availablebalanceChange(userAssets.getAccectType(), user.getId(), EUserAssets.BUY, buyAmt.negate(), "", ""); userAssetsServices.availablebalanceChange(stockDz.getStockType(), user.getId(), EUserAssets.BUY, buyAmt.negate(), "", ""); return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓", request); } catch (Exception e) { return ServerResponse.createByErrorMsg(e.getMessage()); src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -5,13 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.nq.Repository.ExchangeRateRepository; import com.nq.common.ResponseCode; import com.nq.common.ServerResponse; import com.nq.dao.StockSubscribeMapper; import com.nq.dao.UserAssetsMapper; import com.nq.dao.UserMapper; import com.nq.dao.UserStockSubscribeMapper; import com.nq.dao.*; import com.nq.enums.EStockType; import com.nq.enums.EUserAssets; import com.nq.pojo.*; @@ -60,10 +56,6 @@ ISiteProductService iSiteProductService; @Autowired IUserService iUserService; @Autowired ISiteSettingService iSiteSettingService; @Autowired TradingHourServiceImpl tradingHourService; @Resource IUserAssetsServices iUserAssetsServices; @@ -72,7 +64,7 @@ UserAssetsMapper userAssetsMapper; @Autowired ExchangeRateRepository exchangeRateRepository; MoneyLogMapper moneyLogMapper; /** * 用户新股申购 @@ -92,6 +84,9 @@ if (model.getNewCode() != null) { StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>() .eq("newlist_id", model.getNewlistId())); if (stockSubscribe == null) { return ServerResponse.createByErrorMsg("新的股票代码不存在",request); } //判断购买新股需不需要密钥 if(StringUtils.isNotEmpty(stockSubscribe.getPassword()) && !stockSubscribe.getPassword().equals(model.getPassword())){ return ServerResponse.createByErrorMsg("密钥输入错误",request); @@ -117,10 +112,10 @@ return ServerResponse.createByErrorMsg("最多可申购:" + stockSubscribe.getOrderNumber(), request); } BigDecimal sumPrice = stockSubscribe.getPrice().multiply(new BigDecimal(model.getApplyNums())); /*BigDecimal sumPrice = stockSubscribe.getPrice().multiply(new BigDecimal(model.getApplyNums())); if(userAssets.getAvailableBalance().compareTo(sumPrice) < 0){ return ServerResponse.createByErrorMsg("账户余额不足", request); } }*/ Date currentDate = new Date(); if(currentDate.before(stockSubscribe.getSubscriptionTime())){ @@ -139,9 +134,6 @@ if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) { return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定",request); } if (stockSubscribe == null) { return ServerResponse.createByErrorMsg("新的股票代码不存在",request); } model.setApplyNums((int) (model.getApplyNums()*stockSubscribe.getLever())); @@ -152,6 +144,15 @@ }else{ bound = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice()); } //如果不是墨西哥币需要转换金额 if (!stockSubscribe.getStockType().equals(EStockType.MX.getCode())) { bound = iUserAssetsServices.exchangeAmountByRate(stockSubscribe.getStockType(), bound); } if(userAssets.getAvailableBalance().compareTo(bound) < 0){ return ServerResponse.createByErrorMsg("账户余额不足", request); } String before = userAssets.getAvailableBalance().toString(); if(stockSubscribe.getType() == 1){ model.setUserId(user.getId()); model.setNewName(stockSubscribe.getName()); @@ -168,10 +169,6 @@ userStockSubscribe.setNewStockId(stockSubscribe.getNewlistId()); ret = userStockSubscribeMapper.insert(userStockSubscribe); //如果不是墨西哥币需要转换金额 if (!stockSubscribe.getStockType().equals(EStockType.MX.getCode())) { bound = iUserAssetsServices.exchangeAmountByRate(stockSubscribe.getStockType(), bound); } BigDecimal subtract = userAssets.getAvailableBalance().subtract(bound); if(subtract.compareTo(BigDecimal.ZERO) >= 0){ userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(bound)); @@ -182,7 +179,19 @@ userAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().add(subtract.abs())); } userAssetsMapper.updateById(userAssets); //交易记录MEX MoneyLog moneyLog = new MoneyLog(); EUserAssets eUserAssets = EUserAssets.BUY; moneyLog.setDescs(eUserAssets.getDesc()); moneyLog.setBeFore(before); moneyLog.setAfter(userAssets.getAvailableBalance().toString()); moneyLog.setAmount(bound.negate().toString()); moneyLog.setAccectType(EStockType.MX.getCode()); moneyLog.setType(eUserAssets.getCode()); moneyLog.setUserId(user.getId()+""); moneyLog.setSymbol(EStockType.MX.getSymbol()); moneyLog.setCreateTime(new Date()); moneyLogMapper.insert(moneyLog); if (ret > 0) { return ServerResponse.createBySuccessMsg("申购成功",request); } else {