src/main/java/com/nq/common/ServerResponse.java
@@ -82,8 +82,8 @@ } public static <T> ServerResponse<T> createBySuccess(String data,HttpServletRequest request) { return new ServerResponse(ResponseCode.SUCCESS.getCode(), new GoogleTranslateUtil().translate(data,request.getHeader(LANG))); public static <T> ServerResponse<T> createBySuccess(String data, HttpServletRequest request) { return new ServerResponse(ResponseCode.SUCCESS.getCode(), new GoogleTranslateUtil().translate(data, request.getHeader(LANG))); } public static <T> ServerResponse<T> createBySuccess(String msg, T data) { src/main/java/com/nq/controller/StockApiController.java
@@ -81,7 +81,12 @@ } /*查询股票指数*/ @RequestMapping({"getIndexData.do"}) @ResponseBody public ServerResponse getIndexData() { return this.iStockService.getIndexData(); } /** *大宗交易 列表 src/main/java/com/nq/controller/backend/SmartIntradayController.java
New file @@ -0,0 +1,300 @@ package com.nq.controller.backend; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.nq.common.ServerResponse; import com.nq.dao.*; import com.nq.enums.EConfigKey; import com.nq.enums.EStockType; import com.nq.pojo.*; import com.nq.service.*; import com.nq.service.impl.IntradayOrderSerivceImpl; import com.nq.service.impl.SmartIntradaySerivceImpl; import com.nq.service.impl.UserPositionServiceImpl; import com.nq.utils.ConverterUtil; import com.nq.utils.KeyUtils; import com.nq.utils.stock.GeneratePosition; import com.nq.vo.smart.IntradayOrderVo; import com.nq.vo.smart.SmartIntradayVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @program: dabaogp * @description: 智能日内 * @create: 2025-07-15 10:20 **/ @Controller @RequestMapping({"/admin/smart/"}) public class SmartIntradayController { @Autowired private SmartIntradaySerivceImpl smartIntradaySerivce; @Autowired private IntradayOrderSerivceImpl intradayOrderSerivce; @Autowired private IntradayOrderMapper intradayOrderMapper; @Autowired private UserMapper userMapper; @Autowired private IUserAssetsServices iUserAssetsServices; @Autowired private UserAssetsMapper userAssetsMapper; @Autowired private StockMapper stockMapper; @Autowired private UserPositionMapper userPositionMapper; /** * 添加智能日内 * @param vo * @return */ @RequestMapping(value = {"addSmart.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse addSmart(@Valid SmartIntradayVo vo) { long count = smartIntradaySerivce.count(new LambdaQueryWrapper<>(SmartIntraday.class) .eq(SmartIntraday::getDepositName, vo.getDepositName()) .eq(SmartIntraday::getAccountType, vo.getAccountType()) .eq(SmartIntraday::getStockType, vo.getStockType()) ); if(count > 0){ return ServerResponse.createByErrorMsg("已存在同名产品"); } SmartIntraday smartIntraday = ConverterUtil.convert(vo, SmartIntraday.class); smartIntraday.setStockType(EStockType.JP.getCode()); smartIntraday.setAccountType(EStockType.JP.getCode()); smartIntradaySerivce.save(smartIntraday); return ServerResponse.createBySuccessMsg("添加成功"); } /** * 修改智能日内 * @param vo * @return */ @RequestMapping(value = {"updateSmart.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse updateSmart(@Valid SmartIntradayVo vo) { long count = smartIntradaySerivce.count(new LambdaQueryWrapper<>(SmartIntraday.class) .eq(SmartIntraday::getDepositName, vo.getDepositName()) .eq(SmartIntraday::getAccountType, vo.getAccountType()) .eq(SmartIntraday::getStockType, vo.getStockType()) .ne(SmartIntraday::getId,vo.getId()) ); if(count > 0){ return ServerResponse.createByErrorMsg("已存在同名产品"); } SmartIntraday smartIntraday = ConverterUtil.convert(vo, SmartIntraday.class); smartIntradaySerivce.updateById(smartIntraday); return ServerResponse.createBySuccessMsg("修改成功"); } /** * 智能日内列表 */ @RequestMapping(value = {"listSmart.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse listSmart(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize, @RequestParam(value = "status" , required = false) Integer status) { // 创建分页对象 Page<SmartIntraday> page = Page.of(pageNum, pageSize); // 创建查询条件 LambdaQueryWrapper<SmartIntraday> wrapper = new LambdaQueryWrapper<>(); // 状态查询 if (status != null) { wrapper.eq(SmartIntraday::getStatus, status); } // 按创建时间倒序 wrapper.orderByDesc(SmartIntraday::getCreatedAt); // 执行分页查询 Page<SmartIntraday> intradayPage = smartIntradaySerivce.page(page, wrapper); return ServerResponse.createBySuccess(intradayPage); } /** * 删除智能日内 * @return */ @RequestMapping(value = {"deleteSmart.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse deleteSmart( @RequestParam("id") Integer id) { smartIntradaySerivce.removeById(id); return ServerResponse.createBySuccessMsg("删除成功"); } /** * 审核日内订单 * @param vo * @return */ @RequestMapping(value = {"updateIntraday.do"}, method = {RequestMethod.POST}) @ResponseBody @Transactional(rollbackFor = Exception.class) // 异常时回滚 public ServerResponse updateIntraday(@Valid IntradayOrderVo vo) { IntradayOrder intradayOrder = intradayOrderSerivce.getById(vo.getId()); if(intradayOrder.getAuditStatus() != 0){ return ServerResponse.createByErrorMsg("订单已操作"); } Stock stock = stockMapper.findStockByCode(vo.getStockCode()); if(ObjectUtil.isEmpty(stock)){ return ServerResponse.createByErrorMsg("选择的股票不存在!"); } intradayOrder.setStockType(vo.getStockType()); intradayOrder.setStockCode(vo.getStockCode()); intradayOrder.setStockName(stock.getStockName()); intradayOrder.setStockGid(stock.getStockGid()); intradayOrder.setStockQuantity(vo.getStockQuantity()); intradayOrder.setPriceType(vo.getPriceType()); intradayOrder.setStockPrice(new BigDecimal(vo.getStockPrice())); intradayOrder.setAuditStatus(vo.getAuditStatus()); intradayOrder.setOrderTime(DateUtil.parse(vo.getOrderTime(),"yyyy-MM-dd HH:mm:ss")); intradayOrder.setIsLocked(vo.getIsLocked()); intradayOrder.setStockId(stock.getId()); if(vo.getAuditStatus() == 2){ UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.JP.getCode(), intradayOrder.getUserId()); BigDecimal orderAmount = vo.getOrderAmount(); userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(orderAmount)); userAssetsMapper.updateById(userAssets); return ServerResponse.createBySuccessMsg("操作成功"); } BigDecimal stockQuantity = new BigDecimal(intradayOrder.getStockQuantity());//股票数量 BigDecimal totalPrice = intradayOrder.getStockPrice().multiply(stockQuantity);//订单总价 if(intradayOrder.getOrderAmount().compareTo(totalPrice) < 0){ return ServerResponse.createByErrorMsg("股票总价超过订单金额!"); } User user = userMapper.selectById(intradayOrder.getUserId()); //结余资金返还账户 BigDecimal surplusAmount = intradayOrder.getOrderAmount().subtract(totalPrice);//结余 UserPosition userPosition = new UserPosition(); userPosition.setProfitTargetPrice(BigDecimal.ZERO); userPosition.setStopTargetPrice(BigDecimal.ZERO); userPosition.setPositionType(user.getAccountType()); userPosition.setPositionSn(KeyUtils.getUniqueKey()); userPosition.setUserId(intradayOrder.getUserId()); userPosition.setNickName(user.getRealName()); userPosition.setAgentId(user.getAgentId()); userPosition.setStockCode(stock.getStockCode()); userPosition.setStockName(stock.getStockName()); userPosition.setStockGid(stock.getStockType()); userPosition.setStockSpell(stock.getStockSpell()); userPosition.setBuyOrderId(GeneratePosition.getPositionId()); userPosition.setBuyOrderTime(new Date()); userPosition.setBuyOrderPrice(intradayOrder.getStockPrice()); userPosition.setOrderDirection((intradayOrder.getPriceType() == 0) ? "买涨" : "买跌"); userPosition.setOrderNum(intradayOrder.getStockQuantity()); if (stock.getStockPlate() != null) { userPosition.setStockPlate(stock.getStockPlate()); } userPosition.setIsLock(intradayOrder.getIsLocked()); userPosition.setOrderLever(1); userPosition.setOrderTotalPrice(totalPrice); // 手续费 userPosition.setOrderFee(BigDecimal.ZERO); userPosition.setOrderSpread(BigDecimal.ZERO); userPosition.setSpreadRatePrice(BigDecimal.ZERO); BigDecimal profit_and_lose = new BigDecimal("0"); userPosition.setProfitAndLose(profit_and_lose); userPosition.setAllProfitAndLose(profit_and_lose.add(BigDecimal.ZERO)); userPosition.setOrderStayDays(Integer.valueOf(0)); userPosition.setOrderStayFee(BigDecimal.ZERO); userPositionMapper.insert(userPosition); //结余资金返还账户 UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.JP.getCode(), intradayOrder.getUserId()); userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(surplusAmount)); userAssetsMapper.updateById(userAssets); intradayOrder.setPositionOrder(userPosition.getId()); intradayOrder.setPurchaseAmount(totalPrice); intradayOrderMapper.updateById(intradayOrder); return ServerResponse.createBySuccessMsg("操作成功"); } /** * 智能日内订单列表 */ @RequestMapping(value = {"listIntraday.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse listIntraday(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize, @RequestParam(value = "userId" , required = false) Integer userId, @RequestParam(value = "phone" , required = false) String phone, @RequestParam(value = "stockName" , required = false) String stockName, @RequestParam(value = "stockGid" , required = false) String stockGid, @RequestParam(value = "status" , required = false) Integer status ) { // 执行分页查询 PageHelper.startPage(pageNum, pageSize); List<IntradayOrder> intradayOrderList = intradayOrderMapper.conditionQuery(userId,phone,stockName,stockGid,status); PageInfo<IntradayOrder> pageInfo = new PageInfo<>(intradayOrderList); return ServerResponse.createBySuccess(pageInfo); } /** * 删除日内订单 * @return */ @RequestMapping(value = {"deleteIntraday.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse deleteIntraday( @RequestParam("id") Integer id) { intradayOrderSerivce.removeById(id); return ServerResponse.createBySuccessMsg("删除成功"); } /** * 根据条件查询所有股票 */ @RequestMapping(value = {"getStockByKeyWords.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse updateIntraday(@RequestParam("keyWords") String keyWords) { Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<>(Stock.class) .eq(Stock::getStockCode, keyWords).last(" limit 1")); if(ObjectUtil.isEmpty(stock)){ return ServerResponse.createBySuccessMsg("股票不存在"); } return ServerResponse.createBySuccess(stock); } } src/main/java/com/nq/controller/protol/UserController.java
@@ -418,31 +418,7 @@ @ResponseBody public ServerResponse thirdPartyRecharge(@RequestParam("tradeAmoun") String tradeAmoun,@RequestParam("type") Integer type,HttpServletRequest request) { return ServerResponse.createBySuccess("请联系客服充值"); // payLock.lock(); // try { // // if (payCreated.get()) { // return ServerResponse.createByErrorMsg("当前充值人数过多,请稍后重试", request); // } // if (!isIntegerGreaterThan100(tradeAmoun)) { // return ServerResponse.createByErrorMsg("请输入整数!",request); // } // if(null == type){ // return ServerResponse.createByErrorMsg("请选择支付通道!",request); // } // if(new BigDecimal(tradeAmoun).compareTo(new BigDecimal("1000")) < 0){ // return ServerResponse.createByErrorMsg("请重新输入,最低充值金额:1000", request); // } // // payCreated.set(true); // return payService.thirdPartyRecharge(request,tradeAmoun,type); // } catch (Exception e) { // e.printStackTrace(); // return ServerResponse.createByErrorMsg("获取充值链接异常,请稍后重试", request); // } finally{ // payLock.unlock(); // payCreated.set(false); // } } // 判断字符串是否是整数且大于100 public static boolean isIntegerGreaterThan100(String str) { src/main/java/com/nq/controller/smart/IntradayOrderController.java
New file @@ -0,0 +1,131 @@ package com.nq.controller.smart; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.nq.common.ServerResponse; import com.nq.dao.IntradayOrderMapper; import com.nq.dao.StockMapper; import com.nq.dao.UserAssetsMapper; import com.nq.enums.EStockType; import com.nq.enums.EUserAssets; import com.nq.pojo.*; import com.nq.service.IUserAssetsServices; import com.nq.service.IUserService; import com.nq.service.impl.IntradayOrderSerivceImpl; import com.nq.service.impl.SmartIntradaySerivceImpl; import com.nq.service.impl.StockServiceImpl; import com.nq.utils.ConverterUtil; import com.nq.vo.smart.IntradayOrderVo; import com.nq.vo.smart.SmartIntradayVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.math.BigDecimal; import java.util.Collections; import java.util.List; /** * @program: dabaogp * @description: * @create: 2025-07-15 14:27 **/ @Controller @RequestMapping({"/api/intraday/"}) public class IntradayOrderController { @Autowired private IntradayOrderSerivceImpl intradayOrderSerivce; @Autowired private SmartIntradaySerivceImpl smartIntradaySerivce; @Autowired private StockMapper stockMapper; @Autowired private IUserService userService; @Autowired private IUserAssetsServices iUserAssetsServices; @Autowired private UserAssetsMapper userAssetsMapper; @Autowired private IntradayOrderMapper intradayOrderMapper; /** * 智能日内列表 */ @RequestMapping(value = {"listSmart.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse listSmart() { // 创建查询条件 LambdaQueryWrapper<SmartIntraday> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SmartIntraday::getStatus,1); // 按创建时间倒序 wrapper.orderByDesc(SmartIntraday::getCreatedAt); // 执行分页查询 List<SmartIntraday>list = smartIntradaySerivce.list( wrapper); return ServerResponse.createBySuccess(list); } /** * 下单智能日内 * @param vo * @return */ @RequestMapping(value = {"addIntraday.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse addIntraday(@Valid IntradayOrderVo vo,HttpServletRequest request) { SmartIntraday smartIntraday = smartIntradaySerivce.getById(vo.getSmartId()); if(ObjectUtil.isEmpty(smartIntraday)){ return ServerResponse.createBySuccess("产品已下架!",request); } User user = userService.getCurrentRefreshUser(request); UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.JP.getCode(), user.getId()); BigDecimal orderAmount = vo.getOrderAmount(); if(userAssets.getAvailableBalance().compareTo(orderAmount)<0){ return ServerResponse.createByErrorMsg("余额不足",request); } userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(orderAmount)); userAssetsMapper.updateById(userAssets); IntradayOrder intradayOrder = ConverterUtil.convert(vo, IntradayOrder.class); intradayOrder.setUserId(user.getId()); intradayOrder.setSmartId(smartIntraday.getId()); intradayOrder.setStockType(EStockType.JP.getCode()); intradayOrderSerivce.save(intradayOrder); return ServerResponse.createBySuccess("下单成功",request); } /** * 智能日内订单列表 */ @RequestMapping(value = {"listIntraday.do"}, method = {RequestMethod.POST}) @ResponseBody public ServerResponse listIntraday(@RequestParam(value = "status" , required = false) Integer status,HttpServletRequest request) { User user = userService.getCurrentRefreshUser(request); List<IntradayOrder> intradayOrderList = intradayOrderMapper.selectList(new LambdaQueryWrapper<>(IntradayOrder.class) .eq(IntradayOrder::getAuditStatus,status) .eq(IntradayOrder::getUserId,user.getId()) ); return ServerResponse.createBySuccess(intradayOrderList); } } src/main/java/com/nq/dao/IntradayOrderMapper.java
New file @@ -0,0 +1,12 @@ package com.nq.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nq.pojo.IntradayOrder; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface IntradayOrderMapper extends BaseMapper<IntradayOrder> { List<IntradayOrder> conditionQuery(Integer userId, String phone, String stockName, String stockGid, Integer status); } src/main/java/com/nq/dao/SmartIntradayMapper.java
New file @@ -0,0 +1,11 @@ package com.nq.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nq.pojo.SmartIntraday; import com.nq.pojo.StockDz; import org.apache.ibatis.annotations.Mapper; @Mapper public interface SmartIntradayMapper extends BaseMapper<SmartIntraday> { } src/main/java/com/nq/pojo/IntradayOrder.java
New file @@ -0,0 +1,39 @@ package com.nq.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.math.BigDecimal; import java.sql.Date; /** * @program: dabaogp * @description: 日内交易订单表 * @create: 2025-07-15 10:41 **/ @Data public class IntradayOrder { @TableId(value = "id",type = IdType.AUTO) private Integer id; // 订单ID private Integer userId; // 用户ID private Integer smartId; //日内产品id private BigDecimal orderAmount; // 订单金额 private String stockType; // 股票类型: 日股/美股/港股等 private String stockCode; // 股票编码 private String stockName; // 股票名称 private String stockGid; // 股票GID private Integer stockQuantity; // 股票数量 private Integer priceType; // 涨跌类型: 0-买涨,1-买跌 private Integer positionOrder; // 持仓订单 private BigDecimal stockPrice; // 股票价格 private Integer auditStatus; // 审核状态: 0-未审核,1-审核通过,2-审核拒绝 private java.util.Date orderTime; // 下单时间 private Integer isLocked; // 是否锁仓: 0-开仓,1-锁仓 private java.util.Date createdAt; // 创建时间 private java.util.Date updatedAt; // 更新时间 private Integer stockId; //股票id private BigDecimal purchaseAmount; //实际买入金额 } src/main/java/com/nq/pojo/SmartIntraday.java
New file @@ -0,0 +1,30 @@ package com.nq.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.math.BigDecimal; import java.sql.Date; /** * @program: dabaogp * @description: 日内交易产品表 * @create: 2025-07-15 10:44 **/ @Data public class SmartIntraday { @TableId(type = IdType.AUTO,value = "id") private Integer id; // 主键ID private String depositName; // 定存名称 private String stockType; // 股票类型 private String accountType; // 账户类型 private String profit; // 盈利 private Integer status = 1; // 状态: 0-关闭, 1-开启 private BigDecimal minAmount; // 最小金额 private BigDecimal maxAmount; // 最大金额 private java.util.Date createdAt; // 创建时间 private java.util.Date updatedAt; // 更新时间 } src/main/java/com/nq/pojo/StockIndexData.java
New file @@ -0,0 +1,57 @@ package com.nq.pojo; import lombok.Data; import java.math.BigDecimal; /** * @program: dabaogp * @description: 股票指数 * @create: 2025-07-15 17:48 **/ @Data public class StockIndexData { /** 指数ID(也是指数的PID) */ private Long id; /** 股票/指数名称 */ private String name; /** 股票/指数代码 */ private String symbol; /** 最新价格 */ private BigDecimal last; /** 当日最高价 */ private BigDecimal high; /** 当日最低价 */ private BigDecimal low; /** 今日开盘价 */ private BigDecimal open; /** 昨日收盘价 */ private BigDecimal prevClose; /** 价格更新时间(Unix时间戳) */ private Long time; /** 交易量 */ private Long volume; /** 涨跌额 */ private BigDecimal chg; /** 涨跌幅百分比 */ private BigDecimal chgPct; /** 所属国家ID */ private Integer countryId; /** 交易所类型(如NSE) */ private String type; } src/main/java/com/nq/service/IStockService.java
@@ -105,4 +105,6 @@ ServerResponse getOptionStock(HttpServletRequest request); ServerResponse getIndexData(); } src/main/java/com/nq/service/IntradayOrderSerivce.java
New file @@ -0,0 +1,8 @@ package com.nq.service; import com.baomidou.mybatisplus.extension.service.IService; import com.nq.pojo.IntradayOrder; import com.nq.pojo.SmartIntraday; public interface IntradayOrderSerivce extends IService<IntradayOrder> { } src/main/java/com/nq/service/SmartIntradaySerivce.java
New file @@ -0,0 +1,10 @@ package com.nq.service; import com.baomidou.mybatisplus.extension.service.IService; import com.nq.pojo.SmartIntraday; import com.nq.pojo.StockDz; public interface SmartIntradaySerivce extends IService<SmartIntraday> { } src/main/java/com/nq/service/impl/IntradayOrderSerivceImpl.java
New file @@ -0,0 +1,17 @@ package com.nq.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nq.dao.IntradayOrderMapper; import com.nq.dao.SmartIntradayMapper; import com.nq.pojo.IntradayOrder; import com.nq.pojo.SmartIntraday; import org.springframework.stereotype.Service; /** * @program: dabaogp * @description: * @create: 2025-07-15 10:50 **/ @Service public class IntradayOrderSerivceImpl extends ServiceImpl<IntradayOrderMapper, IntradayOrder> { } src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
@@ -123,7 +123,6 @@ return ServerResponse.createByErrorMsg("参数不能为空"); } adminPwd = SymmetricCryptoUtil.encryptPassword(adminPwd); SiteAdmin siteAdmin = this.siteAdminMapper.login(adminPhone, adminPwd); if (siteAdmin == null) { src/main/java/com/nq/service/impl/SmartIntradaySerivceImpl.java
New file @@ -0,0 +1,17 @@ package com.nq.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nq.dao.SmartIntradayMapper; import com.nq.dao.StockDzMapper; import com.nq.pojo.SmartIntraday; import com.nq.pojo.StockDz; import org.springframework.stereotype.Service; /** * @program: dabaogp * @description: * @create: 2025-07-15 10:48 **/ @Service public class SmartIntradaySerivceImpl extends ServiceImpl<SmartIntradayMapper, SmartIntraday> { } src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -462,6 +462,14 @@ return ServerResponse.createBySuccess(); } @Override public ServerResponse getIndexData() { Object object = HttpUtil.get(EStockType.JP.stockUrl + "/indices?country_id="+EStockType.JP.contryId+"&key="+EStockType.JP.getStockKey()); Gson gson = new Gson(); List<StockIndexData> dataList = gson.fromJson(object.toString(), new TypeToken<List<StockIndexData>>(){}.getType()); return ServerResponse.createBySuccess(dataList); } public ServerResponse<Stock> findStockByName(String name) { return ServerResponse.createBySuccess(this.stockMapper.findStockByName(name)); } src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -51,9 +51,6 @@ @Override public UserAssets assetsByTypeAndUserId(String accetType, Integer userId) { if(accetType.equals("SZHB")){ accetType = "US"; } QueryWrapper<UserAssets> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("accect_type",accetType); queryWrapper.eq("user_id",userId); @@ -159,9 +156,6 @@ @Override public BigDecimal getAvailableBalance(String accetType, Integer userId) { if(accetType.equals("SZHB")){ accetType = "US"; } return assetsByTypeAndUserId(accetType,userId).getAvailableBalance(); } src/main/java/com/nq/utils/stock/sina/StockApi.java
@@ -38,7 +38,7 @@ Stock stock = stocks.get(i); StockRealTimeBean realTimeStock = RedisKeyUtil.getCacheRealTimeStock(stock); StockListVO stockListVO = new StockListVO(); stockListVO.setHcrate(new BigDecimal(realTimeStock.getPcp())); stockListVO.setHcrate(new BigDecimal(realTimeStock.getPc())); stockListVO.setHcrateP(realTimeStock.getPcp()+"%"); if(realTimeStock.getPcp().contains("-")){ stockListVO.setColor(0); src/main/java/com/nq/vo/smart/IntradayOrderVo.java
New file @@ -0,0 +1,47 @@ package com.nq.vo.smart; import lombok.Data; import javax.validation.constraints.*; import java.math.BigDecimal; import java.util.Date; /** * @program: dabaogp * @description: * @create: 2025-07-15 10:52 **/ @Data public class IntradayOrderVo { private Integer id; // 订单ID private Integer smartId; @NotNull(message = "订单金额不能为空") @DecimalMin(value = "1", message = "订单金额必须大于0") private BigDecimal orderAmount; // 订单金额 private String stockType; // 股票类型: 日股/美股/港股等 private String stockCode; // 股票编码 private String stockName; // 股票名称 private String stockGid; // 股票GID private Integer stockQuantity; // 股票数量 private Integer priceType; // 涨跌类型: 1-买涨,2-买跌 private String positionOrder; // 持仓订单 private String stockPrice; // 股票价格 private Integer auditStatus = 0; // 审核状态: 0-未审核,1-审核通过,2-审核拒绝 private String orderTime; // 下单时间 private Integer isLocked; // 是否锁仓: 0-开仓,1-锁仓 } src/main/java/com/nq/vo/smart/SmartIntradayVo.java
New file @@ -0,0 +1,32 @@ package com.nq.vo.smart; import lombok.Data; import javax.validation.constraints.*; import java.math.BigDecimal; /** * @program: dabaogp * @description: * @create: 2025-07-15 10:52 **/ @Data public class SmartIntradayVo { private Integer id; // 主键ID private String depositName; // 定存名称 private String stockType; // 股票类型 private String accountType; // 账户类型 private String profit; // 盈利百分比 private Integer status = 1; // 状态: 0-关闭, 1-开启 private BigDecimal minAmount; // 最小金额 private BigDecimal maxAmount; // 最大金额 } src/main/resources/mapper/IntradayOrderMapper.xml
New file @@ -0,0 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.nq.dao.IntradayOrderMapper"> <select id="conditionQuery" resultType="com.nq.pojo.IntradayOrder"> SELECT o.* FROM intraday_order o LEFT JOIN user u ON o.user_id = u.id LEFT JOIN stock s ON s.id = o.stock_id <where> 1=1 <if test="userId != null and userId != ''"> AND u.id = #{userId} </if> <if test="phone != null and phone != ''"> AND u.phone = #{phone} </if> <if test="stockName != null and stockName != ''"> AND s.stock_name LIKE CONCAT('%', #{stockName}, '%') </if> <if test="stockGid != null and stockGid != ''"> AND s.stock_gid = #{stockGid} </if> <if test="status != null and status != '' "> AND o.audit_status = #{auditStatus} </if> </where> GROUP BY o.id ORDER BY o.order_time DESC </select> </mapper>