package com.nq.service.impl; 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.ServerResponse; import com.nq.dao.StockAiMapper; import com.nq.dao.StockAiOrderMapper; import com.nq.enums.*; import com.nq.pojo.*; import com.nq.service.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.Date; import java.util.List; @Service("iStockAiService") public class StockAiServiceImpl implements IStockAiService { private static final Logger log = LoggerFactory.getLogger(StockAiServiceImpl.class); @Autowired StockAiMapper stockAiMapper; @Autowired StockAiOrderMapper stockAiOrderMapper; @Autowired ISiteProductService iSiteProductService; @Autowired IUserService iUserService; @Autowired IUserAssetsServices iUserAssetsServices; @Autowired ExchangeRateRepository exchangeRateRepository; /** * 获取上架ai产品 * @param pageNum * @param pageSize * @return */ @Override public ServerResponse getStockAiList(Integer pageNum, Integer pageSize) { try { PageHelper.startPage(pageNum, pageSize); List stockAiList = stockAiMapper.selectList(new QueryWrapper().eq("status", EStockAIStatus.online.getValue())); // 获取分页信息 PageInfo pageInfo = new PageInfo<>(stockAiList); return ServerResponse.createBySuccess(pageInfo); } catch (Exception ex) { log.error("StockAiService getStockAiList error", ex); } return ServerResponse.createByError(); } /** * 购买ai产品 * @param id * @param buyNum * @return */ @Override @Transactional public ServerResponse buyStockAi(Long id, BigDecimal buyNum, HttpServletRequest request) { try { User user = iUserService.getCurrentUser(request); if (user == null ){ return ServerResponse.createBySuccessMsg("請先登錄"); } synchronized (user.getId()){ SiteProduct siteProduct = iSiteProductService.getProductSetting(); if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) { return ServerResponse.createByErrorMsg("订单失败,请先实名认证", request); } if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) { return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定", request); } StockAI stockAI = stockAiMapper.selectById(id); if (stockAI == null) { return ServerResponse.createByErrorMsg("订单失败,AI股票不存在", request); } if(buyNum.compareTo(stockAI.getMinPrice()) < 0){ return ServerResponse.createByErrorMsg("最低购买数量" + stockAI.getMinPrice(), request); } //获取用户账户 UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), user.getId()); BigDecimal finalBuyNum = buyNum; //购买金额 //如果不是墨西哥币需要转换金额 if (!stockAI.getStockType().equals(EStockType.US.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 = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata()); } if(buyNum.compareTo(userAssets.getAvailableBalance()) > 0){ return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance(), request); } if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ return ServerResponse.createByErrorMsg("请先缴清待补资金", request); } StockAIOrder stockAIOrder = new StockAIOrder(); stockAIOrder.setUserId(user.getId()); stockAIOrder.setStockAiId(id); stockAIOrder.setBuyDate(new Date()); stockAIOrder.setBuyAmount(finalBuyNum); stockAIOrder.setRemainAmount(finalBuyNum); stockAIOrder.setRealEarning(BigDecimal.valueOf(0)); stockAIOrder.setStatus(EStockAIOrderStatus.wait.getStatus()); //等待审核 stockAiOrderMapper.insert(stockAIOrder); iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.BUY_AI, buyNum); return ServerResponse.createBySuccessMsg("下单成功", request); } } catch (Exception e) { log.error("StockAiService buyStockAiList error", e); } return ServerResponse.createByError(); } /** * 获取ai产品订单 * @param pageNum * @param pageSize * @param status * @param request * @return */ @Override public ServerResponse getStockAiOrderList(Integer pageNum, Integer pageSize, String status, HttpServletRequest request) { try { User user = iUserService.getCurrentUser(request); if (user == null ){ return ServerResponse.createBySuccessMsg("請先登錄"); } PageHelper.startPage(pageNum, pageSize); List stockAIOrders = stockAiOrderMapper.selectList(new QueryWrapper() .eq("user_id", user.getId()) .eq(status != null && !status.isEmpty(), "status", status)); // 获取分页信息 PageInfo pageInfo = new PageInfo<>(stockAIOrders); return ServerResponse.createBySuccess(pageInfo); } catch (Exception e) { log.error("StockAiService getStockAiOrderList error", e); } return ServerResponse.createByError(); } }