From 96530cce25ae17962293da17a8c1c162f9a196a9 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Fri, 11 Jul 2025 18:26:47 +0800
Subject: [PATCH] 后台AI产品交易
---
/dev/null | 38 -------
src/main/java/com/nq/controller/backend/AdminStockAiController.java | 47 +++++++++
src/main/java/com/nq/controller/backend/AdminExchangeRateController.java | 55 +++++++++++
src/main/java/com/nq/service/impl/ExchangeRateServiceImpl.java | 16 ---
src/main/java/com/nq/service/IStockAiService.java | 4
src/main/java/com/nq/dao/StockAiMapper.java | 6 +
src/main/java/com/nq/vo/stock/StockAiVO.java | 15 +++
src/main/java/com/nq/service/impl/StockAiServiceImpl.java | 67 +++++++++++++
src/main/resources/mapper/StockAiMapper.xml | 26 +++++
9 files changed, 219 insertions(+), 55 deletions(-)
diff --git a/src/main/java/com/nq/controller/ExchangeRateController.java b/src/main/java/com/nq/controller/ExchangeRateController.java
deleted file mode 100644
index 54bdb4c..0000000
--- a/src/main/java/com/nq/controller/ExchangeRateController.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.nq.controller;
-
-import com.nq.common.ServerResponse;
-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({"/stock/rate"})
-public class ExchangeRateController {
-
- @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({"updateRate.do"})
- @ResponseBody
- public ServerResponse updateRate(ExchangeRate model, HttpServletRequest request) {
- return exchangeRateService.updateRate(model, request);
- }
-}
diff --git a/src/main/java/com/nq/controller/backend/AdminExchangeRateController.java b/src/main/java/com/nq/controller/backend/AdminExchangeRateController.java
new file mode 100644
index 0000000..e4f0407
--- /dev/null
+++ b/src/main/java/com/nq/controller/backend/AdminExchangeRateController.java
@@ -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);
+ }
+}
diff --git a/src/main/java/com/nq/controller/backend/AdminStockAiController.java b/src/main/java/com/nq/controller/backend/AdminStockAiController.java
new file mode 100644
index 0000000..1c20e77
--- /dev/null
+++ b/src/main/java/com/nq/controller/backend/AdminStockAiController.java
@@ -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);
+ }
+
+
+ }
\ No newline at end of file
diff --git a/src/main/java/com/nq/dao/StockAiMapper.java b/src/main/java/com/nq/dao/StockAiMapper.java
index 0d4429c..fdf3659 100644
--- a/src/main/java/com/nq/dao/StockAiMapper.java
+++ b/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);
+
}
\ No newline at end of file
diff --git a/src/main/java/com/nq/service/IStockAiService.java b/src/main/java/com/nq/service/IStockAiService.java
index ae18d6a..0ab1052 100644
--- a/src/main/java/com/nq/service/IStockAiService.java
+++ b/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);
}
diff --git a/src/main/java/com/nq/service/impl/ExchangeRateServiceImpl.java b/src/main/java/com/nq/service/impl/ExchangeRateServiceImpl.java
index 4c6412d..d703145 100644
--- a/src/main/java/com/nq/service/impl/ExchangeRateServiceImpl.java
+++ b/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) {
//查询该货币汇率是否存在
diff --git a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
index b671859..ae549fa 100644
--- a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
+++ b/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();
+ }
}
diff --git a/src/main/java/com/nq/vo/stock/StockAiVO.java b/src/main/java/com/nq/vo/stock/StockAiVO.java
new file mode 100644
index 0000000..12eeed3
--- /dev/null
+++ b/src/main/java/com/nq/vo/stock/StockAiVO.java
@@ -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;
+
+}
+
diff --git a/src/main/resources/mapper/StockAiMapper.xml b/src/main/resources/mapper/StockAiMapper.xml
new file mode 100644
index 0000000..4c41451
--- /dev/null
+++ b/src/main/resources/mapper/StockAiMapper.xml
@@ -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>
--
Gitblit v1.9.3