zyy
2025-07-11 96530cce25ae17962293da17a8c1c162f9a196a9
后台AI产品交易
4 files modified
4 files added
1 files deleted
274 ■■■■ changed files
src/main/java/com/nq/controller/ExchangeRateController.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminExchangeRateController.java 55 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminStockAiController.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/dao/StockAiMapper.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IStockAiService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/ExchangeRateServiceImpl.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockAiServiceImpl.java 67 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/stock/StockAiVO.java 15 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/StockAiMapper.xml 26 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/ExchangeRateController.java
File was deleted
src/main/java/com/nq/controller/backend/AdminExchangeRateController.java
New file
@@ -0,0 +1,55 @@
package com.nq.controller.backend;
import com.nq.common.ServerResponse;
import com.nq.enums.EStockType;
import com.nq.pojo.ExchangeRate;
import com.nq.service.ExchangeRateService;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
 * 汇率管理
 */
@Controller
@RequestMapping({"/admin/rate"})
public class AdminExchangeRateController {
    @Autowired
    ExchangeRateService exchangeRateService;
    //查询汇率列表
    @RequestMapping({"getInfo.do"})
    @ResponseBody
    public ServerResponse getInfo(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                  @RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
        return exchangeRateService.getInfo(pageNum, pageSize);
    }
    //修改汇率
    @RequestMapping({"editRate.do"})
    @ResponseBody
    public ServerResponse editRate(ExchangeRate model, HttpServletRequest request) {
        if (model == null) {
            return ServerResponse.createByErrorMsg("editRate model is null");
        }
        if (model.getRata() == null || model.getCurrency().isEmpty() || model.getConversionCurrency().isEmpty()) {
            return ServerResponse.createByErrorMsg("请输入货币和汇率参数不能为空");
        }
        if (model.getCurrency().equals(model.getConversionCurrency())) {
            return ServerResponse.createByErrorMsg("原始货币和转换货币不能相同");
        }
        //货币只能为US或MX
        if (!model.getCurrency().equals(EStockType.US.getSymbol()) && !model.getCurrency().equals(EStockType.MX.getSymbol())) {
            return ServerResponse.createByErrorMsg("货币只能为:" + EStockType.US.getSymbol() + " 或 " +  EStockType.MX.getSymbol());
        }
        if (!model.getConversionCurrency().equals(EStockType.US.getSymbol()) && !model.getConversionCurrency().equals(EStockType.MX.getSymbol())) {
            return ServerResponse.createByErrorMsg("转换货币只能为:" + EStockType.US.getSymbol() + " 或 " +  EStockType.MX.getSymbol());
        }
        return exchangeRateService.updateRate(model, request);
    }
}
src/main/java/com/nq/controller/backend/AdminStockAiController.java
New file
@@ -0,0 +1,47 @@
 package com.nq.controller.backend;
 import com.nq.common.ServerResponse;
 import com.nq.pojo.Stock;
 import com.nq.pojo.StockAI;
 import com.nq.service.IStockAiService;
 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.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import javax.servlet.http.HttpServletRequest;
 /**
  * 后台AI产品api
  */
 @Controller
 @RequestMapping({"/admin/stockAi/"})
 public class AdminStockAiController {
     @Autowired
     IStockAiService stockAiService;
     /**
      * 获取ai交易产品列表
      * @return
      */
     @RequestMapping("getStockAiList.do")
     @ResponseBody
     public ServerResponse getStockAiList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                          @RequestParam(value = "pageSize", defaultValue = "5") int pageSize,
                                          @RequestParam(value = "stockType") String stockType,
                                          @RequestParam(value = "status") String status,
                                          @RequestParam(value = "name") String name)   {
         return stockAiService.getAdminStockAiList(pageNum, pageSize, stockType, status, name);
     }
     //修改票信息
     @RequestMapping({"editStockAi.do"})
     @ResponseBody
     public ServerResponse editStockAi(StockAI model) {
         return stockAiService.editStockAi(model);
     }
 }
src/main/java/com/nq/dao/StockAiMapper.java
@@ -2,9 +2,15 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nq.pojo.StockAI;
import com.nq.vo.stock.StockAiVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface StockAiMapper extends BaseMapper<StockAI> {
    List<StockAiVO> getStockAiList(@Param("stockType") String stockType, @Param("status") String status, @Param("name") String name);
}
src/main/java/com/nq/service/IStockAiService.java
@@ -1,6 +1,7 @@
package com.nq.service;
import com.nq.common.ServerResponse;
import com.nq.pojo.StockAI;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
@@ -14,4 +15,7 @@
  ServerResponse getStockAiOrderList(Integer pageNum, Integer pageSize, String status, HttpServletRequest request);
  ServerResponse getAdminStockAiList(Integer pageNum, Integer pageSize, String stockType, String status, String name);
  ServerResponse editStockAi(StockAI model);
}
src/main/java/com/nq/service/impl/ExchangeRateServiceImpl.java
@@ -45,22 +45,6 @@
    @Override
    public ServerResponse updateRate(ExchangeRate model, HttpServletRequest request) {
        try {
            if (model == null) {
                return ServerResponse.createByErrorMsg("model is null");
            }
            if (model.getRata() == null || model.getCurrency().isEmpty() || model.getConversionCurrency().isEmpty()) {
                return ServerResponse.createByErrorMsg("请输入货币和汇率参数不能为空");
            }
            if (model.getCurrency().equals(model.getConversionCurrency())) {
                return ServerResponse.createByErrorMsg("原始货币和转换货币不能相同");
            }
            //货币只能为US或MX
            if (!model.getCurrency().equals(EStockType.US.getSymbol()) && !model.getCurrency().equals(EStockType.MX.getSymbol())) {
                return ServerResponse.createByErrorMsg("货币只能为:" + EStockType.US.getSymbol() + " 或 " +  EStockType.MX.getSymbol());
            }
            if (!model.getConversionCurrency().equals(EStockType.US.getSymbol()) && !model.getConversionCurrency().equals(EStockType.MX.getSymbol())) {
                return ServerResponse.createByErrorMsg("转换货币只能为:" + EStockType.US.getSymbol() + " 或 " +  EStockType.MX.getSymbol());
            }
            //新增
            if (model.getId() == null) {
                //查询该货币汇率是否存在
src/main/java/com/nq/service/impl/StockAiServiceImpl.java
@@ -10,6 +10,7 @@
import com.nq.enums.*;
import com.nq.pojo.*;
import com.nq.service.*;
import com.nq.vo.stock.StockAiVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -48,7 +49,8 @@
    public ServerResponse getStockAiList(Integer pageNum, Integer pageSize) {
        try {
            PageHelper.startPage(pageNum, pageSize);
            List<StockAI> stockAiList = stockAiMapper.selectList(new QueryWrapper<StockAI>().eq("status", EStockAIStatus.online.getValue()));
            List<StockAI> stockAiList = stockAiMapper.selectList(new QueryWrapper<StockAI>()
                    .eq("status", EStockAIStatus.online.getValue()));
            // 获取分页信息
            PageInfo<StockAI> pageInfo = new PageInfo<>(stockAiList);
            return ServerResponse.createBySuccess(pageInfo);
@@ -158,4 +160,67 @@
        }
        return ServerResponse.createByError();
    }
    @Override
    public ServerResponse getAdminStockAiList(Integer pageNum, Integer pageSize, String stockType, String status, String name) {
        try {
            PageHelper.startPage(pageNum, pageSize);
            List<StockAiVO> stockAiList = stockAiMapper.getStockAiList(stockType, status, name);
            // 获取分页信息
            PageInfo<StockAiVO> pageInfo = new PageInfo<>(stockAiList);
            if (!pageInfo.getList().isEmpty()) {
                List<StockAiVO> newStockAiList = pageInfo.getList();
                newStockAiList.forEach(stockAiVO -> {
                    EStockType eStockType = EStockType.getEStockTypeByCode(stockAiVO.getStockType());
                    stockAiVO.setStockTypeName(eStockType.getSymbol1());
                    stockAiVO.setSymbol(stockType);
                });
                pageInfo.setList(newStockAiList);
            }
            return ServerResponse.createBySuccess(pageInfo);
        } catch (Exception ex) {
            log.error("StockAiService getAdminStockAiList error", ex);
        }
        return ServerResponse.createByError();
    }
    /**
     * 新增或修改
     * @param model
     * @return
     */
    @Override
    public ServerResponse editStockAi(StockAI model) {
        try {
            if (model == null) {
                return ServerResponse.createByErrorMsg("editStockAi model is null");
            }
            if (model.getStockType().isEmpty() || model.getStockName().isEmpty() || model.getMinPrice() == null
                || model.getSuccessRate() == null || model.getExpectedEarning() == null || model.getStatus().isEmpty()) {
                return ServerResponse.createByErrorMsg("请完善必填信息");
            }
            if (!model.getStockType().equals(EStockType.US.getCode()) && !model.getStockType().equals(EStockType.MX.getCode())) {
                return ServerResponse.createByErrorMsg("只能选择美股或墨西哥股");
            }
            //新增
            if (model.getId() == null) {
                //查询是否存在
                StockAI stockAI = stockAiMapper.selectOne(new QueryWrapper<StockAI>().eq("stock_name", model.getStockName()));
                if (stockAI != null) {
                    return ServerResponse.createByErrorMsg("当前股票已添加");
                }
                model.setCreateDate(new Date());
                stockAiMapper.insert(model);
            } else {    //修改
                stockAiMapper.updateById(model);
            }
            return ServerResponse.createBySuccess("操作成功");
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return ServerResponse.createByError();
    }
}
src/main/java/com/nq/vo/stock/StockAiVO.java
New file
@@ -0,0 +1,15 @@
package com.nq.vo.stock;
import com.nq.pojo.StockAI;
import lombok.Data;
@Data
public class StockAiVO extends StockAI {
    //股票类型名
    private String stockTypeName;
    //货币符号
    private String symbol;
}
src/main/resources/mapper/StockAiMapper.xml
New file
@@ -0,0 +1,26 @@
<?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.StockAiMapper" >
  <sql id="Base_Column_List" >
    id, stock_type, stock_name, min_price, success_rate, expected_earning, cycle, status, create_date
  </sql>
  <select id="getStockAiList" resultType="com.nq.vo.stock.StockAiVO">
    SELECT
    <include refid="Base_Column_List" />
    from stock_ai
    <where>
      <if test="stockType != null and stockType != ''">
        and stock_type = #{stockType}
      </if>
      <if test="status != null and status != ''">
        and status = #{status}
      </if>
      <if test="name != null and name != ''">
        and stock_name like concat('%',#{name},'%')
      </if>
    </where>
    ORDER BY create_date DESC
  </select>
</mapper>