1
zj
2025-07-20 8f47428a53105cc0926c295efaeb962665ca3eba
1
8 files modified
14 files added
802 ■■■■■ changed files
src/main/java/com/nq/common/ServerResponse.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/StockApiController.java 7 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/SmartIntradayController.java 300 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/protol/UserController.java 26 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/smart/IntradayOrderController.java 131 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/IntradayOrderMapper.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/SmartIntradayMapper.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/IntradayOrder.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/SmartIntraday.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/StockIndexData.java 57 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IStockService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IntradayOrderSerivce.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/SmartIntradaySerivce.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/IntradayOrderSerivceImpl.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/SmartIntradaySerivceImpl.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockServiceImpl.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserAssetsServices.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/stock/sina/StockApi.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/smart/IntradayOrderVo.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/smart/SmartIntradayVo.java 32 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/IntradayOrderMapper.xml 35 ●●●●● patch | view | raw | blame | history
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>