迁移分支

main
windsdreamer 4 years ago
parent 42b94c1c7a
commit 1b21136467

@ -154,4 +154,86 @@ public class Constants
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework.jndi" };
public static final int EXPIRED_TIME = 60*60*24*3;
/**
*
*/
public static final String TRENDS = "trends:";
/**
* all,sh,sz,ge(),star()
*/
public static final String HOME_STOCKS_DISTRIBUTE = "home_stocks_distribute:";
/**
*
*/
public static final String STOCKINDEX_STOCKS_DISTRIBUTE = "stockindex_stocks_distribute:";
/**
*
*/
public static final String HOME_TRENDS = "home_trends:";
/**
*
*/
public static final String HOME_LIMIT_DISTRIBUTE = "home_limit_distribute:";
/**
*
*/
public static final String HOME_DROP_LIMIT_DISTRIBUTE = "home_drop_limit_distribute:";
/**
*
*/
public static final String HOME_HIGH_DISTRIBUTE = "home_high_distribute:";
/**
*
*/
public static final String HOME_LOW_DISTRIBUTE = "home_low_distribute:";
/**
* (10510-203)
*/
public static final String HOME_TRENDS_STOCKS = "home_trends_stocks:";
/**
*
*/
public static final String HOME_LIMIT_STOCKS = "home_limit_stocks:";
/**
*
*/
public static final String HOME_DROP_LIMIT_STOCKS = "home_drop_limit_stocks:";
/**
*
*/
public static final String HOME_STRONG_STOCKS = "home_strong_stocks:";
/**
*
*/
public static final String TRENDS_SECTION_BLEMIND = "trends_section_blemind:";
/**
*
*/
public static final String STOCK_CODE_QUERY = "stock_code_query:";
/**
*
*/
public static final String STOCK_NAME_QUERY = "stock_name_query:";
/**
*
*/
public static final String STOCKINDEX_NAME_QUERY = "stock_index_name_query:";
}

@ -116,6 +116,8 @@ public class RedisCache
*/
public <T> long setCacheList(final String key, final List<T> dataList)
{
if(dataList.isEmpty() || key.isEmpty())
return 0;
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count;
}
@ -213,7 +215,7 @@ public class RedisCache
* Hash
*
* @param key
* @param mapkey
* @param hkey
*/
public void delCacheMapValue(final String key, final String hkey)
{

@ -278,6 +278,23 @@ public class ExcelUtil<T>
{
fieldsMap.put(column, objects);
}
else
{
//再进行模糊匹配,模糊匹配再失败了,才是真的失败了
//或者在注解里添加模糊匹配规则
// attr 为java中的注解
for (Map.Entry<String, Integer> entry : cellMap.entrySet())
{
String name = entry.getKey();
String attrName = attr.name();
if(name.contains(attrName))
{
column = cellMap.get(name);
fieldsMap.put(column, objects);
break;
}
}
}
}
for (int i = titleNum + 1; i <= rows; i++)
{
@ -1282,6 +1299,10 @@ public class ExcelUtil<T>
else if (cell.getCellType() == CellType.STRING)
{
val = cell.getStringCellValue();
if("——".equals(val))
{
val = new BigDecimal("0");
}
}
else if (cell.getCellType() == CellType.BOOLEAN)
{

@ -45,7 +45,7 @@ export function listWarningStocks(query) {
})
}
// 查询警告个股列表
// 查询涨跌分布
export function listStocksDistribution(query) {
return request({
url: '/stocksystem/stocks/distribution',
@ -54,6 +54,15 @@ export function listStocksDistribution(query) {
})
}
// 查询板块涨跌分布
export function listStockIndexStocksDistribution(query) {
return request({
url: '/stocksystem/stocks/stockindestocksdistribution',
method: 'get',
params: query
})
}
// 查询菜单列表
export function getLatestTradeDay() {
return request({
@ -81,3 +90,64 @@ export function listGroupNewRecord(query) {
params: query
})
}
// 查询所有创新高新低
export function getAllNewRecords(query) {
return request({
url: '/stocksystem/newrecord/getAllNewRecords',
method: 'get',
params: query
})
}
//查询板块内强势个股
export function listStrongStocks(query) {
return request({
url: '/stocksystem/stocks/listStrongStocks',
method: 'get',
params: query
})
}
//查询板块内涨跌停个股
export function listLimitStocks(query) {
return request({
url: '/stocksystem/stocks/listLimitStocks',
method: 'get',
params: query
})
}
//查询板块内涨跌停个股
export function listDropStocks(query) {
return request({
url: '/stocksystem/stocks/listDropStocks',
method: 'get',
params: query
})
}
// 查询股票联想数据
export function listStocksQueryData(query) {
return request({
url: '/stocksystem/stocks/stockQueryData',
method: 'get',
params: query
})
}
// 查询股票联想数据
export function listStocksNameQueryData(query) {
return request({
url: '/stocksystem/stocks/stockNameQueryData',
method: 'get',
params: query
})
}
// 查询股票联想数据
export function listStockIndexsNameQueryData(query) {
return request({
url: '/stocksystem/stocks/stockIndexsNameQueryData',
method: 'get',
params: query
})
}

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询A股财务数据列表
export function listFinancial(query) {
return request({
url: '/stocksystem/financial/list',
method: 'get',
params: query
})
}
// 查询A股财务数据详细
export function getFinancial(id) {
return request({
url: '/stocksystem/financial/' + id,
method: 'get'
})
}
// 新增A股财务数据
export function addFinancial(data) {
return request({
url: '/stocksystem/financial',
method: 'post',
data: data
})
}
// 修改A股财务数据
export function updateFinancial(data) {
return request({
url: '/stocksystem/financial',
method: 'put',
data: data
})
}
// 删除A股财务数据
export function delFinancial(id) {
return request({
url: '/stocksystem/financial/' + id,
method: 'delete'
})
}

@ -18,6 +18,51 @@ export function listTrendsSection(query) {
})
}
// 查询时间段内动量结果列表
export function listTradeVolume(query) {
return request({
url: '/stocksystem/trends/listTradeVolume',
method: 'get',
params: query
})
}
// 查询指数内涨停板数量
export function listStockIndexLimitUp(query) {
return request({
url: '/stocksystem/trends/listStockIndexLimitUp',
method: 'get',
params: query
})
}
// 查询板块内跌停板数量
export function listStockIndexLimitDown(query) {
return request({
url: '/stocksystem/trends/listStockIndexLimitDown',
method: 'get',
params: query
})
}
// 查询创新高板块
export function listStockIndexHighRocord(query) {
return request({
url: '/stocksystem/trends/listStockIndexHighRocord',
method: 'get',
params: query
})
}
// 查询创新低板块
export function listStockIndexLowRocord(query) {
return request({
url: '/stocksystem/trends/listStockIndexLowRocord',
method: 'get',
params: query
})
}
// 查询时间段内动量结果列表
export function listSectionByBlemind(query) {
return request({
@ -27,7 +72,7 @@ export function listSectionByBlemind(query) {
})
}
// 查询动量个股列表
// 查询个股历史k线数据
export function listStockHistory(query) {
return request({
url: '/stocksystem/stocks/stockHistory',
@ -36,6 +81,15 @@ export function listStockHistory(query) {
})
}
// 板块历史k线数据
export function listStockIndexHistory(query) {
return request({
url: '/stocksystem/stocks/stockIndexHistory',
method: 'get',
params: query
})
}
// 查询动量结果详细
export function getTrends(id) {
return request({

@ -2,6 +2,119 @@
<el-dialog :title="title" :visible.sync="open" width="60%" heigh="60%" append-to-body>
<div class="body">
<div ref="stockK" style="height: 500px"></div>
<el-row :gutter="20">
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="交易日">
<span>{{ tradeDay }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="所属二级板块">
<span>{{ blemind2 }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="所属三级板块">
<span>{{ blemind3 }}</span>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="开盘价">
<span>{{ openPrice }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="收盘价">
<span>{{ closePrice }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="最高价">
<span>{{ highPrice }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="最低价">
<span>{{ lowPrice }}</span>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="成交量">
<span>{{ volumn }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="20日成交量">
<span>{{ volumn20 }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="20最高价日">
<span>{{ highDate }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="20日最低价日">
<span>{{ highDate }}</span>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="20日最大回撤">
<span>{{ highDate }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="10日最大回撤">
<span>{{ highDate }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="净利润(百万)">
<span>{{ jlr }}</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form label-position="left">
<el-form-item label="净利润增长(%)">
<span>{{ jlrtbzzl }}</span>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
@ -14,20 +127,33 @@ export default {
name: "Kdialog",
props: {
/* 标题 */
title: {
type: String,
default: "测试k对话框",
},
// title: {
// type: String,
// default: "k",
// },
/* 是否显示 */
open: {
type: Boolean,
default: false,
}
// open: {
// type: Boolean,
// default: false,
// }
},
data() {
return {
open:false,
title: ""
title: "",
tradeDay : null,
blemind2:null,
blemind3:null,
closePrice:"0.00",
openPrice:"0.00",
volumn:"0",
volumn20:"0",
highDate:"--",
highPrice:"0.00",
lowDate:"--",
lowPrice:"0.00",
jlr:"--",
jlrtbzzl:"--",
};
},
methods:{
@ -41,22 +167,63 @@ export default {
console.log('datas: ' ,datas);
const data = splitData(datas);
console.log('data0 : ', data);
this.tradeDay = data.categoryData[data.categoryData.length-1];
this.closePrice = data.values[data.values.length-1][1];
this.openPrice = data.values[data.values.length-1][0];
this.highPrice = data.values[data.values.length-1][3];
this.lowPrice = data.values[data.values.length-1][2];
this.volumn = data.volumes[data.volumes.length-1][1];
this.volumn20 = calculateVolumn(20);
this.blemind2 = data.blemind2[0];
this.blemind3 = data.blemind3[0];
this.jlr = data.jlr[0];
this.jlrtbzzl = Math.floor(data.jlrtbzz[0] * 100) / 100;
if(this.jlr < 0)
this.title = this.title + "(亏损)";
function splitData(rawData) {
let categoryData = [];
let values = [];
let volumes = [];
let tblemind2 = [];
let tblemind3 = [];
let tjlr = [];
let tjlrtbzz = [];
for (let i = 0; i < rawData.length; i++) {
categoryData.push(rawData[i].splice(0, 1)[0]);
values.push(rawData[i]);
volumes.push([i, rawData[i][4], rawData[i][0] > rawData[i][1] ? 1 : -1]);
tblemind2.push(rawData[i][6]);
tblemind3.push(rawData[i][7]);
tjlr.push(rawData[i][8]);
tjlrtbzz.push(rawData[i][9]);
}
return {
categoryData: categoryData,
values: values,
volumes: volumes
volumes: volumes,
blemind2: tblemind2,
blemind3: tblemind3,
jlr: tjlr,
jlrtbzz:tjlrtbzz
};
}
function calculateVolumn(dayCount){
console.log('calculateVolumn : dayCount : ', dayCount, data);
var result = 0;
var sum = 0;
var i = 0;
for (var j = data.volumes.length - 1 , len = data.volumes.length; i < len; i++ , j--) {
if(i >= dayCount)
break;
sum += +data.volumes[j][1];
// result.push(+(sum / dayCount).toFixed(3));
}
result = +(sum / dayCount).toFixed(3);
console.log('after calculateVolumn : result : ', result);
return result;
}
function calculateMA(dayCount) {
console.log('calculateMA : dayCount : ', dayCount, data);
var result = [];
@ -69,7 +236,7 @@ export default {
for (var j = 0; j < dayCount; j++) {
sum += +data.values[i - j][1];
}
result.push(+(sum / dayCount).toFixed(3));
result.push(+(sum / dayCount).toFixed(2));
}
console.log('after calculateMA : result : ', result);
return result;
@ -250,15 +417,16 @@ export default {
xAxisIndex: [0, 1],
start: 0,
end: 100
},
{
show: true,
xAxisIndex: [0, 1],
type: 'slider',
top: '90%',
start: 0,
end: 100
}
//
//, {
// show: true,
// xAxisIndex: [0, 1],
// type: 'slider',
// top: '90%',
// start: 0,
// end: 100
// }
],
series: [
{

@ -0,0 +1,321 @@
<template>
<div>
<el-dialog :title="title" :visible.sync="open" width="90%" heigh="90%" append-to-body>
<div class="body">
<div ref="stockNegative" style="height: 800px"></div>
<el-table v-loading="loading_trendStocks"
:data="trendsStocksList"
@cell-click="handleTrendStockClickTable"sortable
>
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
<el-table-column label="3级行业" align="center" prop="blemind3" sortable />
</el-table>
<pagination
v-show="stocktotal>0"
:total="stocktotal"
:page.sync="queryStockParams.pageNum"
:limit.sync="queryStockParams.pageSize"
@pagination="getStockList"
/>
</div>
</el-dialog>
<!-- <kdialog-->
<!-- :title="stocksDialog.title"-->
<!-- ref="stockK"-->
<!-- />-->
<kdialog
ref="stockK"
/>
</div>
</template>
<script>
import { constantRoutes } from "@/router";
import echarts from "echarts";
import {listSectionByBlemind, listStockHistory} from "@/api/stocksystem/trends";
import {listTrendStocks,getAllNewRecords} from "@/api";
export default {
name: "NegativeDialog",
props: {
/* 标题 */
// title: {
// type: String,
// default: "",
// },
/* 是否显示 */
// open: {
// type: Boolean,
// default: false,
// },
// loading_trendStocks:{
// type: Boolean,
// default: false
// },
// tradeDay:{
// type: Date,
// default:null
// }
},
data() {
return {
open:false,
title: "",
tradeDay:null,
loading_trendStocks:false,
trendsStocksList:null,
// k线
stocksDialog: {
//
open: false,
// k线
title: ""
},
queryStockHistoryParams: {
tradeDay: new Date(),
code: null,
},
queryStockParams: {
pageNum: 1,
pageSize: 10,
tradeDay: new Date(),
blemind2: null,
stocksCount: null,
trendValue: null,
trendValueChange: null,
sort: null,
sortChange: null,
type: "20"
},
//
queryBlemindParams: {
pageNum: 1,
pageSize: 10,
tradeDay: new Date(),
blemind2: null,
stocksCount: null,
trendValue: null,
trendValueChange: null,
sort: null,
sortChange: null,
type: "20"
},
queryParams: {
pageNum: 1,
pageSize: 10,
tradeDay: new Date(),
blemind2: null,
stocksCount: null,
trendValue: null,
trendValueChange: null,
sort: null,
sortChange: null,
type: null,
isdrop: null,
islimit: null,
isHigh:null,
isLow:null,
},
//
stocktotal: 0,
//
xAxisDataList:[],
seriesDataList:[],
//
positiveDataTitleList:[],
positiveDataList:[],
};
},
methods:{
handleTrendStockClickTable(row, column){
this.stocksDialog.open = true;
this.stocksDialog.title = row.name;
this.$refs.stockK.title = this.stocksDialog.title;
this.$refs.stockK.open = true;
console.log(row);
console.log('handleTrendStockClickTable code : ',row.code);
//K线
console.log('handleTrendStockClickTable');
// stockHistory
this.queryStockHistoryParams.tradeDay = this.tradeDay;
this.queryStockHistoryParams.code = row.code;
//K线
listStockHistory(this.queryStockHistoryParams).then(response => {
this.$refs.stockK.chartKV(response.rows);
});
},
getStockList() {
this.loading_trendStocks = true;
listTrendStocks(this.queryStockParams).then(response => {
this.trendsStocksList = response.rows;
this.stocktotal = response.total;
this.loading_trendStocks = false;
});
},
getTrendDatas(){
this.loading_trendStocks = true;
listSectionByBlemind(this.queryBlemindParams).then(response => {
// if(response.total == 2)
// {
// this.xAxisDataList = response.rows[0].sortDataList;
// this.seriesDataList = response.rows[1].sortDataList;
// this.chart();
// }
this.chart();
});
listTrendStocks(this.queryStockParams).then(response => {
this.trendsStocksList = response.rows;
this.stocktotal = response.total;
this.loading_trendStocks = false;
});
},
positiveData(){
this.queryParams.tradeDay = this.tradeDay;
console.log('positiveData ' + this.queryParams.tradeDay);
getAllNewRecords(this.queryParams).then(response => {
var dataList = response.rows;
// console.log('getAllNewRecords : ' + dataList);
var titleList = new Array();
var dataList1 = new Array();
const labelRight = {
position: 'right'
};
for(var i = 0 ; i < dataList.length;i++)
{
console.log(' ' + i + ' blemind2 : ' + dataList[i].blemind2 + ' blemindsCount : ' + dataList[i].blemindsCount + ' isHigh : ' + dataList[i].isHigh + ' isLow : ' + dataList[i].isLow);
if(dataList[i].isHigh == '是')
{
dataList1.push(dataList[i].blemindsCount);
}
else
{
// dataList1.push(dataList[i].blemindsCount*-1);
var data = { value: dataList[i].blemindsCount*-1, label: labelRight }
dataList1.push(data);
}
titleList.push(dataList[i].blemind2);
}
titleList.reverse();
dataList1.reverse();
this.positiveDataTitleList = titleList;
this.positiveDataList = dataList1;
console.log('title : ' + this.positiveDataTitleList);
console.log('data : ' + this.positiveDataList);
this.chart();
});
},
negativeData(){
this.loading_trendStocks = true;
listSectionByBlemind(this.queryBlemindParams).then(response => {
// if(response.total == 2)
// {
// this.xAxisDataList = response.rows[0].sortDataList;
// this.seriesDataList = response.rows[1].sortDataList;
// this.chart();
// }
this.chart();
});
listTrendStocks(this.queryStockParams).then(response => {
this.trendsStocksList = response.rows;
this.stocktotal = response.total;
this.loading_trendStocks = false;
});
},
chart()
{
const labelRight = {
position: 'right'
};
this.stockNegative = echarts.init(this.$refs.stockNegative);
this.stockNegative.setOption({
title: {
// text: this.title
text: '新高新低分布'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
top: 80,
bottom: 30
},
xAxis: {
type: 'value',
position: 'top',
splitLine: {
lineStyle: {
type: 'dashed'
}
}
},
yAxis: {
type: 'category',
axisLine: { show: false },
axisLabel: { show: false },
axisTick: { show: false },
splitLine: { show: false },
data: this.positiveDataTitleList
// data: [
// 'ten',
// 'nine',
// 'eight',
// 'seven',
// 'six',
// 'five',
// 'four',
// 'three',
// 'two',
// 'one'
// ]
},
series: [
{
name: 'Cost',
type: 'bar',
stack: 'Total',
label: {
show: true,
formatter: '{b}'
},
data: this.positiveDataList
// data: [
// { value: -0.07, label: labelRight },
// { value: -0.09, label: labelRight },
// 0.2,
// 0.44,
// { value: -0.23, label: labelRight },
// 0.08,
// { value: -0.17, label: labelRight },
// 0.47,
// { value: -0.36, label: labelRight },
// 0.18
// ]
}
]
});
},
}
};
</script>

File diff suppressed because it is too large Load Diff

@ -41,6 +41,8 @@ import DictData from '@/components/DictData'
import Kdialog from "@/components/Kdialog";
//板块对话框
import TrendStocksDialog from "@/components/TrendStocksDialog";
//涨跌停、新高新低对话框
import NegativeDialog from "@/components/NegativeDialog";
// 全局方法挂载
Vue.prototype.getDicts = getDicts
@ -63,6 +65,7 @@ Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview)
Vue.component('Kdialog', Kdialog)
Vue.component('TrendStocksDialog', TrendStocksDialog)
Vue.component('NegativeDialog', NegativeDialog)
Vue.use(directive)
Vue.use(plugins)

@ -14,7 +14,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 30000
timeout: 60000
})
// request拦截器

@ -1,32 +1,39 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="交易日期" prop="tradeDay">
<el-date-picker clearable size="small"
v-model="queryParams.tradeDay"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择交易日期">
</el-date-picker>
</el-form-item>
<el-form-item label="股票代码" prop="code">
<el-input
<!-- <el-input-->
<!-- v-model="queryParams.code"-->
<!-- placeholder="请输入股票代码"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<el-autocomplete
v-model="queryParams.code"
placeholder="请输入股票代码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
:fetch-suggestions="querySearchAsync"
@select="handleSelect"
></el-autocomplete>
</el-form-item>
<el-form-item label="股票名称" prop="name">
<el-input
<el-autocomplete
v-model="queryParams.name"
placeholder="请输入股票名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
:fetch-suggestions="queryNameSearchAsync"
@select="handleNameSelect"
/>
</el-form-item>
<el-form-item label="交易日期" prop="tradeDay">
<el-date-picker clearable size="small"
v-model="queryParams.tradeDay"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择交易日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -77,13 +84,13 @@
<el-table v-loading="loading" :data="bookList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="交易日期" align="center" prop="tradeDay" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="操作" align="center" prop="operate" />
<el-table-column label="成交价格" align="center" prop="dealPrice" />
<el-table-column label="成交量" align="center" prop="volumn" />
@ -121,46 +128,71 @@
/>
<!-- 添加或修改交易记账对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="股票代码" prop="code">
<el-input v-model="form.code" placeholder="请输入股票代码" />
</el-form-item>
<el-form-item label="股票名称" prop="name">
<el-input v-model="form.name" placeholder="请输入股票名称" />
</el-form-item>
<el-form-item label="交易日期" prop="tradeDay">
<el-date-picker clearable size="small"
v-model="form.tradeDay"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择交易日期">
</el-date-picker>
</el-form-item>
<el-form-item label="操作" prop="operate">
<el-input v-model="form.operate" placeholder="请输入操作" />
</el-form-item>
<el-form-item label="成交价格" prop="dealPrice">
<el-input v-model="form.dealPrice" placeholder="请输入成交价格" />
</el-form-item>
<el-form-item label="成交量" prop="volumn">
<el-input v-model="form.volumn" placeholder="请输入成交量" />
</el-form-item>
<el-form-item label="成交额" prop="amount">
<el-input v-model="form.amount" placeholder="请输入成交额" />
</el-form-item>
<el-form-item label="印花税" prop="tax">
<el-input v-model="form.tax" placeholder="请输入印花税" />
</el-form-item>
<el-form-item label="手续费" prop="fee">
<el-input v-model="form.fee" placeholder="请输入手续费" />
</el-form-item>
<el-form-item label="其他费用" prop="other">
<el-input v-model="form.other" placeholder="请输入其他费用" />
</el-form-item>
<el-form-item label="交易逻辑" prop="dealLogic">
<el-input type="textarea" v-model="form.dealLogic" placeholder="请输入其他费用" />
</el-form-item>
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="auto" label-position="left">
<el-row>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="交易日期" prop="tradeDay">
<el-date-picker clearable size="small"
v-model="form.tradeDay"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择交易日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="股票代码" prop="code">
<el-input v-model="form.code" placeholder="请输入股票代码" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="操作" prop="operate">
<el-input v-model="form.operate" placeholder="请输入操作" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="成交量" prop="volumn">
<el-input v-model="form.volumn" placeholder="请输入成交量" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="成交价格" prop="dealPrice">
<el-input v-model="form.dealPrice" placeholder="请输入成交价格" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="成交额" prop="amount">
<el-input v-model="form.amount" placeholder="请输入成交额" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="印花税" prop="tax">
<el-input v-model="form.tax" placeholder="请输入印花税" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="手续费" prop="fee">
<el-input v-model="form.fee" placeholder="请输入手续费" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="其他费用" prop="other">
<el-input v-model="form.other" placeholder="请输入其他费用" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :xs="24" :sm="24" :md="24" :lg="24">
<el-form-item label="交易逻辑" prop="dealLogic">
<el-input type="textarea" v-model="form.dealLogic" placeholder="请输入其他费用" autosize />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
@ -172,6 +204,7 @@
<script>
import { listBook, getBook, delBook, addBook, updateBook } from "@/api/booksystem/book";
import {listStocksQueryData,listStocksNameQueryData} from "@/api/index";
export default {
name: "Book",
@ -191,6 +224,10 @@ export default {
total: 0,
//
bookList: [],
// {code:"",name:""}
stocks_codes:[],
stocks_names:[],
//
title: "",
//
@ -210,7 +247,7 @@ export default {
fee: null,
other: null,
preId: null,
dealLogic: null
dealLogic: null,
},
//
form: {},
@ -237,6 +274,14 @@ export default {
this.total = response.total;
this.loading = false;
});
//
listStocksQueryData().then(response => {
this.stocks_codes = response.rows;
});
listStocksNameQueryData().then(response => {
this.stocks_names = response.rows;
});
},
//
cancel() {
@ -328,6 +373,50 @@ export default {
this.download('booksystem/book/export', {
...this.queryParams
}, `book_${new Date().getTime()}.xlsx`)
},
/** 搜索联想*/
querySearchAsync(queryString, cb) {
var codes = this.stocks_codes;
var results = queryString ? codes.filter(this.createCodeFilter(queryString)) : codes;
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
// console.log("result: " ,results);
cb(results);
}, 3000 * Math.random());
},
createCodeFilter(queryString) {
return (state) => {
// console.log(state.value);
return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
},
handleSelect(item) {
console.log("handleSelect: ",item);
this.queryParams.name = item.data;
},
/** 搜索联想*/
queryNameSearchAsync(queryString, cb) {
var names = this.stocks_names;
var results = queryString ? names.filter(this.createNameFilter(queryString)) : names;
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
// console.log("result: " ,results);
cb(results);
}, 3000 * Math.random());
},
createNameFilter(queryString) {
return (state) => {
// console.log(state.value);
return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
},
handleNameSelect(item) {
console.log("handleSelect: ",item);
this.queryParams.code = item.data;
}
}
};

@ -120,7 +120,9 @@
<span style="font-weight: bold;font-size: 14px;color: #333;">趋势板块</span>
</div>
<el-tabs type="border-card" @tab-click="handleTrendsTabClicked">
<el-tab-pane label="20日趋势">
<!-- <el-tab-pane label="20日趋势">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-date" style="border: 0px;" @click="trend20Clicked"></el-icon> 20日趋势</span>
<el-table v-loading="trends20Data.loading" :data="trends20Data.dataList" @cell-click="handleClickTable20" stripe>
<el-table-column label="交易日期" align="center" prop="tradeDay" width="100">
<template slot-scope="scope">
@ -132,7 +134,9 @@
<el-table-column label="板块排名" align="center" prop="sort" />
</el-table>
</el-tab-pane>
<el-tab-pane label="10日趋势">
<!-- <el-tab-pane label="10日趋势">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-date" style="border: 0px;" @click="trend10Clicked"></el-icon> 10日趋势</span>
<el-table v-loading="trends10Data.loading" :data="trends10Data.dataList" @cell-click="handleClickTable10" stripe>
<el-table-column label="交易日期" align="center" prop="tradeDay" width="100">
<template slot-scope="scope">
@ -144,7 +148,9 @@
<el-table-column label="板块排名" align="center" prop="sort" />
</el-table>
</el-tab-pane>
<el-tab-pane label="当日趋势">
<!-- <el-tab-pane label="当日趋势">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-date" style="border: 0px;" @click="trend1Clicked"></el-icon> 当日趋势</span>
<el-table v-loading="trends1Data.loading" :data="trends1Data.dataList" @cell-click="handleClickTable1" stripe>
<el-table-column label="交易日期" align="center" prop="tradeDay" width="100">
<template slot-scope="scope">
@ -162,28 +168,37 @@
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;">
<span style="font-weight: bold;font-size: 14px;color: #333;">涨跌停分布</span>
</div>
<el-tabs type="border-card" @tab-click="handleLimitTabClicked">
<el-tab-pane label="涨停">
<el-tabs type="border-card" @tab-click="handleLimitTabClicked" :before-leave="beforeLeave">
<!-- <el-tab-pane label="涨停">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<el-table v-loading="limitData.loading" :data="limitData.dataList" stripe>
<el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/>
<el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table>
</el-tab-pane>
<el-tab-pane label="跌停">
<!-- <el-tab-pane label="跌停">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal" style="border: 0px;"></el-icon> </span>
<el-table v-loading="dropData.loading" :data="dropData.dataList" stripe>
<el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/>
<el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table>
</el-tab-pane>
<el-tab-pane name="detailBtn">
<span slot="label"><el-button type="primary" circle plain style="border: 0px;" @click="limitClicked"></el-button></span>
</el-tab-pane>
</el-tabs>
</el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8">
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;">
<span style="font-weight: bold;font-size: 14px;color: #333;">新高新低板块</span>
</div>
<el-tabs type="border-card" @tab-click="handleNewRecordTabClicked">
<el-tab-pane label="新高">
<el-table v-loading="newReordHighData.loading" :data="newReordHighData.dataList" stripe>
<el-tabs type="border-card" @tab-click="handleNewRecordTabClicked" :before-leave="beforeLeave">
<!-- <el-tab-pane label="新高">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-s-data" style="border: 0px;"></el-icon> </span>
<el-table v-loading="newReordHighData.loading" :data="newReordHighData.dataList" @cell-click="handleClickTableHighRecord" stripe>
<!-- <el-table-column label="交易日期" align="center" prop="tradeDay" width="100">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span>-->
@ -193,40 +208,141 @@
<el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table>
</el-tab-pane>
<el-tab-pane label="新低">
<!-- <el-tab-pane label="新低">-->
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-s-data" style="border: 0px;"></el-icon> </span>
<el-table v-loading="newReordLowData.loading" :data="newReordLowData.dataList" stripe>
<el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/>
<el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table>
</el-tab-pane>
<el-tab-pane name="detailBtn">
<span slot="label"><el-button type="primary" circle plain style="border: 0px;" @click="newRecordClicked"></el-button></span>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :xs="24" :sm="24" :md="24" :lg="24">
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;">
<span style="font-weight: bold;font-size: 14px;color: #333;">趋势个股</span>
</div>
<el-table v-loading="trendStocksDataLoading" :data="trendStokcsDataList" stripe>
<el-table-column label="股票编码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
<el-table-column label="10日最高点回撤" align="center" width="140px" prop="backDifferrange10" sortable />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
<el-table-column label="20日最高点回撤" align="center" width="140px" prop="backDifferrange20" sortable />
<el-table-column label="2级行业" align="center" prop="blemind2" sortable />
<el-table-column label="3级行业" align="center" prop="blemind3" sortable />
</el-table>
<pagination
v-show="stocktotal>0"
:total="stocktotal"
:page.sync="queryStockParams.pageNum"
:limit.sync="queryStockParams.pageSize"
@pagination="getStockList"
/>
<el-tabs>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<el-table v-loading="trendStocksDataLoading"
:data="trendStocksDataList"
@cell-click="handleTrendStockClickTable"sortable
>
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="3日涨跌幅" align="center" prop="differrange3" sortable />
<el-table-column label="5日涨跌幅" align="center" prop="differrange5" sortable />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
<el-table-column label="15日涨跌幅" align="center" prop="differrange15" sortable />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
<el-table-column label="30日涨跌幅" align="center" prop="differrange30" sortable />
<!-- <el-table-column label="净利润" align="center" prop="blemind2" sortable />-->
<!-- <el-table-column label="净利润增长" align="center" width="120px" prop="blemind2" sortable />-->
<el-table-column label="3级行业" align="center" prop="blemind3" sortable />
</el-table>
<pagination
v-show="stocktotal>0"
:total="stocktotal"
:page.sync="queryStockParams.pageNum"
:limit.sync="queryStockParams.pageSize"
@pagination="getStockList"
/>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<el-table v-loading="loading_limitStocks"
:data="limitStocksList"
@cell-click="handleTrendStockClickTable"sortable
>
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="5日涨跌幅" align="center" prop="differrange5" sortable />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
<el-table-column label="3级行业" align="center" prop="blemind3" sortable />
<el-table-column label="几天几板" align="center" prop="open" sortable >
<template slot-scope="scope">
<span v-if="scope.row.calLimitTradeDates == 1"></span>
<span v-else>{{ scope.row.calLimitTradeDates + '' + scope.row.limitTradeDates + ''}}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<el-table v-loading="loading_strongStocks"
:data="strongStocksList"
@cell-click="handleTrendStockClickTable"sortable
>
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="5日涨跌幅" align="center" prop="differrange5" sortable />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
<el-table-column label="3级行业" align="center" prop="blemind3" sortable />
<el-table-column label="几天几板" align="center" prop="open" sortable >
<template slot-scope="scope">{{ scope.row.calLimitTradeDates + '天' + scope.row.limitTradeDates + '板'}}</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<el-table v-loading="loading_dropStocks"
:data="dropStocksList"
@cell-click="handleTrendStockClickTable"sortable
>
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="3日涨跌幅" align="center" prop="differrange3" sortable />
<el-table-column label="5日涨跌幅" align="center" prop="differrange5" sortable />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
<el-table-column label="15日涨跌幅" align="center" prop="differrange15" sortable />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
<el-table-column label="30日涨跌幅" align="center" prop="differrange30" sortable />
<el-table-column label="3级行业" align="center" prop="blemind3" sortable />
</el-table>
</el-tab-pane>
</el-tabs>
<!-- <div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;">-->
<!-- <span style="font-weight: bold;font-size: 14px;color: #333;">趋势个股</span>-->
<!-- </div>-->
<!-- <el-table v-loading="trendStocksDataLoading" :data="trendStocksDataList" @cell-click="handleTrendStockClickTable" stripe>-->
<!-- <el-table-column label="股票编码" align="center" width="100px" prop="code" />-->
<!-- <el-table-column label="股票名称" align="center" prop="name" />-->
<!-- <el-table-column label="涨跌幅" align="center" prop="differrange" sortable />-->
<!-- <el-table-column label="开盘价" align="center" prop="open" />-->
<!-- <el-table-column label="收盘价" align="center" prop="close" />-->
<!-- <el-table-column label="10日涨跌幅" align="center" width="120px" prop="differrange10" sortable />-->
<!-- <el-table-column label="10日回撤" align="center" width="100px" prop="backDifferrange10" sortable />-->
<!-- <el-table-column label="20日涨跌幅" align="center" width="120px" prop="differrange20" sortable />-->
<!-- <el-table-column label="20日回撤" align="center" width="100px" prop="backDifferrange20" sortable />-->
<!--&lt;!&ndash; <el-table-column label="净利润" align="center" prop="blemind2" sortable />&ndash;&gt;-->
<!--&lt;!&ndash; <el-table-column label="净利润增长" align="center" width="120px" prop="blemind2" sortable />&ndash;&gt;-->
<!-- <el-table-column label="2级行业" align="center" width="100px" prop="blemind2" sortable />-->
<!-- <el-table-column label="3级行业" align="center" width="100px" prop="blemind3" sortable />-->
<!-- </el-table>-->
<!-- <pagination-->
<!-- v-show="stocktotal>0"-->
<!-- :total="stocktotal"-->
<!-- :page.sync="queryStockParams.pageNum"-->
<!-- :limit.sync="queryStockParams.pageSize"-->
<!-- @pagination="getStockList"-->
<!-- />-->
</el-col>
</el-row>
@ -253,21 +369,32 @@
<!-- </div>-->
<!-- </el-dialog>-->
<!-- <TrendStocksDialog-->
<!-- :tradeDay = "this.queryParams.tradeDay"-->
<!-- ref="trendDialog"-->
<!-- />-->
<TrendStocksDialog
:tradeDay = "this.queryParams.tradeDay"
ref="trendDialog"
/>
<!--个股k线图对话框-->
<!-- <kdialog-->
<!-- :title="stocksDialog.title"-->
<!-- ref="stockK"-->
<!-- />-->
<kdialog
:title="stocksDialog.title"
ref="stockK"
/>
<NegativeDialog
:title="stocksDialog.title"
ref="stocksNegativeDialog"
/>
</div>
</template>
<script>
import { listTrends, listTrendStocks, listStocksDistribution,getLatestTradeDay,listGroupLimit,listGroupNewRecord ,listTrendsStocksList} from "@/api/index";
import { listTrends, listTrendStocks, listStocksDistribution,getLatestTradeDay,listGroupLimit,listGroupNewRecord ,listTrendsStocksList,listStrongStocks,listLimitStocks,listDropStocks} from "@/api/index";
import echarts from "echarts";
import {listTrendsStocks} from "@/api";
import {listStockHistory} from "@/api/stocksystem/trends";
@ -429,10 +556,16 @@ export default {
stocktotal: 0,
// 20
trendsStocksList: [],
loading_limitStocks:false,
limitStocksList:null,
loading_strongStocks:false,
strongStocksList:null,
loading_dropStocks:false,
dropStocksList:null,
//
warningStockList: [],
//
trendStokcsDataList:[],
trendStocksDataList:null,
trendStocksDataLoading:false,
//
title: "",
@ -497,7 +630,9 @@ export default {
trendValueChange: null,
sort: null,
sortChange: null,
type: "20"
type: "20",
islimit:null,
isdrop:null
},
//
form: {},
@ -517,6 +652,11 @@ export default {
});
},
methods: {
beforeLeave(visitName, currentName)
{
if(visitName == "detailBtn")
{return false;}
},
dateChanged(){
this.queryParams.blemind2 = null;
this.getRecentMomentumDataLists();
@ -849,7 +989,7 @@ export default {
this.queryTrendStocksParams.type = "20";
this.queryTrendStocksParams.tradeDay = this.queryParams.tradeDay;
listTrendsStocksList(this.queryTrendStocksParams).then(response => {
this.trendStokcsDataList = response.rows;
this.trendStocksDataList = response.rows;
this.trendStocksDataLoading = false;
});
},
@ -880,7 +1020,7 @@ export default {
this.echartsStarStocksData.xAxisData = new Array();
this.echartsStarStocksData.hasData = false;
}
this.getTrendsData();
// this.getTrendsData();//2022-10-11
this.getEchartsData();
// this.distribute_loading = true;
@ -966,6 +1106,33 @@ export default {
//
this.getTrendsStocksData();
//
this.queryStockParams.tradeDay = this.queryParams.tradeDay;
this.queryStockParams.islimit = '是';
this.queryStockParams.isdrop = '否';
this.loading_strongStocks = true;
listStrongStocks(this.queryStockParams).then(response => {
this.strongStocksList = response.rows;
this.loading_strongStocks = false;
});
console.log('blemind2: ' ,this.queryStockParams.blemind2);
this.queryStockParams.islimit = '是';
this.queryStockParams.isdrop = '否';
this.loading_limitStocks = true;
listLimitStocks(this.queryStockParams).then(response => {
this.limitStocksList = response.rows;
this.loading_limitStocks = false;
});
this.queryStockParams.islimit = '否';
this.queryStockParams.isdrop = '是';
this.loading_dropStocks = true;
listDropStocks(this.queryStockParams).then(response => {
this.dropStocksList = response.rows;
this.loading_dropStocks = false;
});
},
handleDistributeTabClicked(tab, event){
@ -1093,6 +1260,7 @@ export default {
// this.stocktotal = response.total;
// this.loading_trendStocks = false;
// });
this.$refs.trendDialog.tradeDay = this.queryParams.tradeDay;
this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "20日趋势个股";
this.$refs.trendDialog.open = true;
this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay;
@ -1128,6 +1296,7 @@ export default {
// this.loading_trendStocks = false;
// });
this.$refs.trendDialog.tradeDay = this.queryParams.tradeDay;
this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "10日趋势个股";
this.$refs.trendDialog.open = true;
this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay;
@ -1142,6 +1311,11 @@ export default {
this.$refs.trendDialog.getTrendDatas();
},
handleClickTableHighRecord(row, column){
// this.$refs.stocksNegativeDialog.open = true;
// this.$refs.stocksNegativeDialog.getTrendDatas();
},
handleClickTable1(row, column){
console.log(row.blemind2, column.label);
console.log(row,column);
@ -1162,6 +1336,7 @@ export default {
// this.loading_trendStocks = false;
// });
this.$refs.trendDialog.tradeDay = this.queryParams.tradeDay;
this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "1日趋势个股";
this.$refs.trendDialog.open = true;
this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay;
@ -1186,6 +1361,7 @@ export default {
handleTrendStockClickTable(row, column){
this.stocksDialog.open = true;
this.stocksDialog.title = row.name;
this.$refs.stockK.title = this.stocksDialog.title;
this.$refs.stockK.open = true;
console.log(row);
console.log('handleTrendStockClickTable code : ',row.code);
@ -1205,6 +1381,33 @@ export default {
},
// handle
trend20Clicked(){
console.log('trend20Clicked');
},
trend10Clicked(){
console.log('trend10Clicked');
},
trend1Clicked(){
console.log('trend1Clicked');
},
limitClicked(){
console.log('limitUpClicked');
},
newRecordClicked(){
console.log('highRecordClicked');
var titleDay = this.queryParams.tradeDay;
this.$refs.stocksNegativeDialog.title = titleDay + " " + "创新高";
this.$refs.stocksNegativeDialog.tradeDay = this.queryParams.tradeDay;
console.log('highRecordClicked ' + this.$refs.stocksNegativeDialog.title);
this.$refs.stocksNegativeDialog.open = true;
this.$refs.stocksNegativeDialog.positiveData();
},
},
};
</script>

@ -0,0 +1,449 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="股票代码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入股票代码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="报告期" prop="period">
<el-date-picker clearable size="small"
v-model="queryParams.period"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择报告期">
</el-date-picker>
</el-form-item>
<el-form-item label="净利润同比增长率" prop="jlrtbzzl">
<el-input
v-model="queryParams.jlrtbzzl"
placeholder="请输入净利润同比增长率"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="净利润环比增长率" prop="jlrhbzzl">
<el-input
v-model="queryParams.jlrhbzzl"
placeholder="请输入净利润环比增长率"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="净资产收益率ROE" prop="jzcsylroe">
<el-input
v-model="queryParams.jzcsylroe"
placeholder="请输入净资产收益率ROE"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="每股收益EPS" prop="epsbasic">
<el-input
v-model="queryParams.epsbasic"
placeholder="请输入每股收益EPS"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="净利润" prop="jlr">
<el-input
v-model="queryParams.jlr"
placeholder="请输入净利润"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="基本每股收益" prop="jbmgsy">
<el-input
v-model="queryParams.jbmgsy"
placeholder="请输入基本每股收益"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="每股净资产BPS" prop="mgjzc">
<el-input
v-model="queryParams.mgjzc"
placeholder="请输入每股净资产BPS"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['stocksystem:financial:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['stocksystem:financial:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['stocksystem:financial:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['stocksystem:financial:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['stocksystem:financial:import']"
>导入</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="financialList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="报告期" align="center" prop="period" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.period, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="净利润同比增长率" align="center" prop="jlrtbzzl" />
<el-table-column label="净利润环比增长率" align="center" prop="jlrhbzzl" />
<el-table-column label="净资产收益率ROE" align="center" prop="jzcsylroe" />
<el-table-column label="每股收益EPS" align="center" prop="epsbasic" />
<el-table-column label="净利润" align="center" prop="jlr" />
<el-table-column label="基本每股收益" align="center" prop="jbmgsy" />
<el-table-column label="每股净资产BPS" align="center" prop="mgjzc" />
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改A股财务数据对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="股票代码" prop="code">
<el-input v-model="form.code" placeholder="请输入股票代码" />
</el-form-item>
<el-form-item label="报告期" prop="period">
<el-date-picker clearable size="small"
v-model="form.period"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择报告期">
</el-date-picker>
</el-form-item>
<el-form-item label="净利润同比增长率" prop="jlrtbzzl">
<el-input v-model="form.jlrtbzzl" placeholder="请输入净利润同比增长率" />
</el-form-item>
<el-form-item label="净利润环比增长率" prop="jlrhbzzl">
<el-input v-model="form.jlrhbzzl" placeholder="请输入净利润环比增长率" />
</el-form-item>
<el-form-item label="净资产收益率ROE" prop="jzcsylroe">
<el-input v-model="form.jzcsylroe" placeholder="请输入净资产收益率ROE" />
</el-form-item>
<el-form-item label="每股收益EPS" prop="epsbasic">
<el-input v-model="form.epsbasic" placeholder="请输入每股收益EPS" />
</el-form-item>
<el-form-item label="净利润" prop="jlr">
<el-input v-model="form.jlr" placeholder="请输入净利润" />
</el-form-item>
<el-form-item label="基本每股收益" prop="jbmgsy">
<el-input v-model="form.jbmgsy" placeholder="请输入基本每股收益" />
</el-form-item>
<el-form-item label="每股净资产BPS" prop="mgjzc">
<el-input v-model="form.mgjzc" placeholder="请输入每股净资产BPS" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport + '&s=' + upload.tradeDay"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-date-picker clearable size="small"
v-model="upload.tradeDay"
type="date"
value-format="yyyy-MM-dd"
placeholder="交易日期">
</el-date-picker>
</div>
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate"></el-link>-->
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitUploadFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listFinancial, getFinancial, delFinancial, addFinancial, updateFinancial } from "@/api/stocksystem/financial";
import {getToken} from "@/utils/auth";
export default {
name: "Financial",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// A
financialList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
code: null,
period: null,
jlrtbzzl: null,
jlrhbzzl: null,
jzcsylroe: null,
epsbasic: null,
jlr: null,
jbmgsy: null,
mgjzc: null
},
//
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/stocksystem/financial/importData",
//
tradeDay: new Date(),
sTradeDay: null
},
//
form: {},
//
rules: {
code: [
{ required: true, message: "股票代码不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询A股财务数据列表 */
getList() {
this.loading = true;
listFinancial(this.queryParams).then(response => {
this.financialList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
code: null,
period: null,
jlrtbzzl: null,
jlrhbzzl: null,
jzcsylroe: null,
epsbasic: null,
jlr: null,
jbmgsy: null,
mgjzc: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加A股财务数据";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getFinancial(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改A股财务数据";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateFinancial(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addFinancial(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除A股财务数据编号为"' + ids + '"的数据项?').then(function() {
return delFinancial(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('stocksystem/financial/export', {
...this.queryParams
}, `financial_${new Date().getTime()}.xlsx`)
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "财报数据导入";
this.upload.open = true;
this.upload.updateSupport = true;
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
//
submitUploadFileForm() {
this.$refs.upload.submit();
}
}
};
</script>

@ -43,38 +43,38 @@
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['stocksystem:newrecord:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['stocksystem:newrecord:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['stocksystem:newrecord:remove']"
>删除</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['stocksystem:newrecord:add']"-->
<!-- >新增</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['stocksystem:newrecord:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['stocksystem:newrecord:remove']"-->
<!-- >删除</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="warning"
@ -95,6 +95,16 @@
v-hasPermi="['stocksystem:newrecord:import']"
>导入</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-upload2"-->
<!-- size="mini"-->
<!-- @click="handleImport"-->
<!-- v-has-role="['admin','normal_admin']"-->
<!-- >导入</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

@ -27,186 +27,186 @@
placeholder="选择交易日期">
</el-date-picker>
</el-form-item>
<el-form-item label="开盘价" prop="open">
<el-input
v-model="queryParams.open"
placeholder="请输入开盘价"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="收盘价" prop="close">
<el-input
v-model="queryParams.close"
placeholder="请输入收盘价"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="最高价" prop="high">
<el-input
v-model="queryParams.high"
placeholder="请输入最高价"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="最低价" prop="low">
<el-input
v-model="queryParams.low"
placeholder="请输入最低价"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="涨跌幅" prop="differrange">
<el-input
v-model="queryParams.differrange"
placeholder="请输入涨跌幅"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="成交量" prop="volume">
<el-input
v-model="queryParams.volume"
placeholder="请输入成交量"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="成交额" prop="amount">
<el-input
v-model="queryParams.amount"
placeholder="请输入成交额"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="涨停家数" prop="limitupnum">
<el-input
v-model="queryParams.limitupnum"
placeholder="请输入涨停家数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="跌停家数" prop="limitdownnum">
<el-input
v-model="queryParams.limitdownnum"
placeholder="请输入跌停家数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="停牌家数" prop="suspendnum">
<el-input
v-model="queryParams.suspendnum"
placeholder="请输入停牌家数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="上涨家数" prop="risenum">
<el-input
v-model="queryParams.risenum"
placeholder="请输入上涨家数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="下跌家数" prop="fallnum">
<el-input
v-model="queryParams.fallnum"
placeholder="请输入下跌家数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="平盘家数" prop="flatnum">
<el-input
v-model="queryParams.flatnum"
placeholder="请输入平盘家数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="成分个数" prop="componentnum">
<el-input
v-model="queryParams.componentnum"
placeholder="请输入成分个数"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="总市值" prop="mv">
<el-input
v-model="queryParams.mv"
placeholder="请输入总市值"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="市盈率PE" prop="pettm">
<el-input
v-model="queryParams.pettm"
placeholder="请输入市盈率PE"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="市盈率PE中位值" prop="pettmMid">
<el-input
v-model="queryParams.pettmMid"
placeholder="请输入市盈率PE中位值"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="自由流通市值" prop="liqmv">
<el-input
v-model="queryParams.liqmv"
placeholder="请输入自由流通市值"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="近期创历史新高" prop="rcnthigh">
<el-input
v-model="queryParams.rcnthigh"
placeholder="请输入近期创历史新高"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="近期创历史新低" prop="rcntlow">
<el-input
v-model="queryParams.rcntlow"
placeholder="请输入近期创历史新低"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="开盘价" prop="open">-->
<!-- <el-input-->
<!-- v-model="queryParams.open"-->
<!-- placeholder="请输入开盘价"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="收盘价" prop="close">-->
<!-- <el-input-->
<!-- v-model="queryParams.close"-->
<!-- placeholder="请输入收盘价"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="最高价" prop="high">-->
<!-- <el-input-->
<!-- v-model="queryParams.high"-->
<!-- placeholder="请输入最高价"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="最低价" prop="low">-->
<!-- <el-input-->
<!-- v-model="queryParams.low"-->
<!-- placeholder="请输入最低价"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="涨跌幅" prop="differrange">-->
<!-- <el-input-->
<!-- v-model="queryParams.differrange"-->
<!-- placeholder="请输入涨跌幅"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="成交量" prop="volume">-->
<!-- <el-input-->
<!-- v-model="queryParams.volume"-->
<!-- placeholder="请输入成交量"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="成交额" prop="amount">-->
<!-- <el-input-->
<!-- v-model="queryParams.amount"-->
<!-- placeholder="请输入成交额"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="涨停家数" prop="limitupnum">-->
<!-- <el-input-->
<!-- v-model="queryParams.limitupnum"-->
<!-- placeholder="请输入涨停家数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="跌停家数" prop="limitdownnum">-->
<!-- <el-input-->
<!-- v-model="queryParams.limitdownnum"-->
<!-- placeholder="请输入跌停家数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="停牌家数" prop="suspendnum">-->
<!-- <el-input-->
<!-- v-model="queryParams.suspendnum"-->
<!-- placeholder="请输入停牌家数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="上涨家数" prop="risenum">-->
<!-- <el-input-->
<!-- v-model="queryParams.risenum"-->
<!-- placeholder="请输入上涨家数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="下跌家数" prop="fallnum">-->
<!-- <el-input-->
<!-- v-model="queryParams.fallnum"-->
<!-- placeholder="请输入下跌家数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="平盘家数" prop="flatnum">-->
<!-- <el-input-->
<!-- v-model="queryParams.flatnum"-->
<!-- placeholder="请输入平盘家数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="成分个数" prop="componentnum">-->
<!-- <el-input-->
<!-- v-model="queryParams.componentnum"-->
<!-- placeholder="请输入成分个数"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="总市值" prop="mv">-->
<!-- <el-input-->
<!-- v-model="queryParams.mv"-->
<!-- placeholder="请输入总市值"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="市盈率PE" prop="pettm">-->
<!-- <el-input-->
<!-- v-model="queryParams.pettm"-->
<!-- placeholder="请输入市盈率PE"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="市盈率PE中位值" prop="pettmMid">-->
<!-- <el-input-->
<!-- v-model="queryParams.pettmMid"-->
<!-- placeholder="请输入市盈率PE中位值"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="自由流通市值" prop="liqmv">-->
<!-- <el-input-->
<!-- v-model="queryParams.liqmv"-->
<!-- placeholder="请输入自由流通市值"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="近期创历史新高" prop="rcnthigh">-->
<!-- <el-input-->
<!-- v-model="queryParams.rcnthigh"-->
<!-- placeholder="请输入近期创历史新高"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="近期创历史新低" prop="rcntlow">-->
<!-- <el-input-->
<!-- v-model="queryParams.rcntlow"-->
<!-- placeholder="请输入近期创历史新低"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -214,54 +214,62 @@
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['stocksystem:stockindex:add']"-->
<!-- >新增</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['stocksystem:stockindex:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['stocksystem:stockindex:remove']"-->
<!-- >删除</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['stocksystem:stockindex:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['stocksystem:stockindex:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
type="warning"
plain
icon="el-icon-delete"
icon="el-icon-download"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['stocksystem:stockindex:remove']"
>删除</el-button>
@click="handleExport"
v-hasPermi="['stocksystem:stockindex:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
icon="el-icon-upload2"
size="mini"
@click="handleExport"
v-hasPermi="['stocksystem:stockindex:export']"
></el-button>
@click="handleImport"
v-hasPermi="['stocksystem:stockindex:import']"
>导入</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="stockindexList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="id" />
<el-table-column label="指数代码" align="center" prop="code" />
<el-table-column label="指数名称" align="center" prop="name" />
<el-table-column label="交易日期" align="center" prop="tradeDay" width="180">
@ -289,26 +297,8 @@
<el-table-column label="自由流通市值" align="center" prop="liqmv" />
<el-table-column label="近期创历史新高" align="center" prop="rcnthigh" />
<el-table-column label="近期创历史新低" align="center" prop="rcntlow" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['stocksystem:stockindex:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['stocksystem:stockindex:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
@ -400,11 +390,49 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport + '&s=' + upload.tradeDay"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-date-picker clearable size="small"
v-model="upload.tradeDay"
type="date"
value-format="yyyy-MM-dd"
placeholder="交易日期">
</el-date-picker>
</div>
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate"></el-link>-->
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitUploadFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listStockindex, getStockindex, delStockindex, addStockindex, updateStockindex } from "@/api/stocksystem/stockindex";
import {getToken} from "@/utils/auth";
export default {
name: "Stockindex",
@ -456,6 +484,24 @@ export default {
rcnthigh: null,
rcntlow: null
},
//
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/stocksystem/stockindex/importData",
//
tradeDay: new Date(),
sTradeDay: null
},
//
form: {},
//
@ -584,6 +630,28 @@ export default {
this.download('stocksystem/stockindex/export', {
...this.queryParams
}, `stockindex_${new Date().getTime()}.xlsx`)
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "指数数据导入";
this.upload.open = true;
this.upload.updateSupport = true;
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
//
submitUploadFileForm() {
this.$refs.upload.submit();
}
}
};

@ -194,6 +194,26 @@
v-hasPermi="['stocksystem:stocks:import']"
>导入</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-refresh"-->
<!-- size="mini"-->
<!-- @click="handleAnalysis"-->
<!-- v-hasPermi="['stocksystem:stocks:analysis']"-->
<!-- >分析</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-upload2"-->
<!-- size="mini"-->
<!-- @click="handleImport"-->
<!-- v-has-role="['admin','normal_admin']"-->
<!-- >导入</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="primary"
@ -201,7 +221,7 @@
icon="el-icon-refresh"
size="mini"
@click="handleAnalysis"
v-hasPermi="['stocksystem:stocks:analysis']"
v-has-role="['admin','normal_admin']"
>分析</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>

@ -51,6 +51,9 @@
clearable
size="small"
style="width: 240px">
<el-option key="1" label="1" :value="1" />
<el-option key="3" label="3" :value="3" />
<el-option key="5" label="5" :value="5" />
<el-option key="10" label="10" :value="10" />
<el-option key="20" label="20" :value="20" />
<!-- <el-option key="60" label="60" :value="60" />-->
@ -236,7 +239,7 @@ export default {
],
type: [
{
pattern: 10|20|60,
pattern: 1|3|5|10|20|60,
message: "请输入正确的动量周期10、20、60",
trigger: "blur"
}

@ -24,19 +24,31 @@
:clearable="false"
>
<el-option key="1" label="1" :value="1" />
<el-option key="3" label="3" :value="3" />
<el-option key="5" label="5" :value="5" />
<el-option key="10" label="10" :value="10" />
<el-option key="15" label="15" :value="15" />
<el-option key="20" label="20" :value="20" />
<el-option key="30" label="30" :value="30" />
<!-- <el-option key="60" label="60" :value="60" />-->
</el-select>
</el-form-item>
<el-form-item label="板块名称" prop="blemind2">
<el-input
<!-- <el-input-->
<!-- v-model="queryParams.blemind2"-->
<!-- placeholder="请输入板块名称"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="dateChanged"-->
<!-- />-->
<el-autocomplete
v-model="queryParams.blemind2"
placeholder="请输入板块名称"
clearable
size="small"
@keyup.enter.native="dateChanged"
/>
:fetch-suggestions="querySearchAsync"
@select="handleSelect"
@change="dateChanged"
></el-autocomplete>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -46,183 +58,200 @@
<!-- </el-form-item>-->
</el-form>
<!-- <el-row :gutter="20">-->
<!-- <el-col :xs="24" :sm="24" :md="16" :lg="16">-->
<!-- <el-card class="update-log">-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span>20日趋势板块</span>-->
<!-- </div>-->
<!-- <div class="body">-->
<!-- <el-table v-loading="loading" :data="trendsList" @selection-change="handleSelectionChange" @cell-click="handleClickTable2">-->
<!-- &lt;!&ndash; <el-table-column type="selection" width="55" align="center" />&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column label="${comment}" align="center" prop="id" />&ndash;&gt;-->
<!-- <el-table-column label="交易日期" align="center" prop="tradeDay" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="所属东财行业指数2级" align="center" prop="blemind2"/>-->
<!-- <el-table-column label="动量个股数量" align="center" prop="stocksCount" />-->
<!-- <el-table-column label="动量值" align="center" prop="trendValue" />-->
<!-- <el-table-column label="动量值变化" align="center" prop="trendValueChange" />-->
<!-- <el-table-column label="板块排名" align="center" prop="sort" />-->
<!-- <el-table-column label="板块排名变化" align="center" prop="sortChange" />-->
<!-- <el-table-column label="动量数据类型" align="center" prop="type" />-->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">&ndash;&gt;-->
<!-- <template slot-scope="scope">&ndash;&gt;-->
<!-- <el-button&ndash;&gt;-->
<!-- size="mini"&ndash;&gt;-->
<!-- type="text"&ndash;&gt;-->
<!-- icon="el-icon-edit"&ndash;&gt;-->
<!-- @click="handleUpdate(scope.row)"&ndash;&gt;-->
<!-- v-hasPermi="['stocksystem:trends:edit']"&ndash;&gt;-->
<!-- >修改</el-button>&ndash;&gt;-->
<!-- <el-button&ndash;&gt;-->
<!-- size="mini"&ndash;&gt;-->
<!-- type="text"&ndash;&gt;-->
<!-- icon="el-icon-delete"&ndash;&gt;-->
<!-- @click="handleDelete(scope.row)"&ndash;&gt;-->
<!-- v-hasPermi="['stocksystem:trends:remove']"&ndash;&gt;-->
<!-- >删除</el-button>&ndash;&gt;-->
<!-- </template>&ndash;&gt;-->
<!-- </el-table-column>&ndash;&gt;-->
<!-- </el-table>-->
<!-- <pagination-->
<!-- v-show="total>0"-->
<!-- :total="total"-->
<!-- :page.sync="queryParams.pageNum"-->
<!-- :limit.sync="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-card>-->
<!-- </el-col>-->
<!-- <el-col :xs="8" :sm="8" :md="8" :lg="8">-->
<el-row :gutter="20">
<el-col :xs="24" :sm="24" :md="24" :lg="24">
<!-- <el-card class="update-log">-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span id="distribute"> 涨跌分布</span>-->
<!-- <span id="lotDistribute">20日趋势板块</span>-->
<!-- </div>-->
<!-- <div class="body">-->
<!-- <el-table v-loading="loading_trendStocks" :data="trendsStocksList">-->
<!-- <el-table-column label="股票名称" align="center" prop="name" />-->
<!-- <el-table-column label="涨跌幅" align="center" prop="differrange" />-->
<!-- <el-table-column label="10日涨跌幅" align="center" prop="differrange10" />-->
<!-- <el-table-column label="20日涨跌幅" align="center" prop="differrange20" />-->
<!-- <el-table-column label="3级行业" align="center" prop="blemind3" />-->
<!-- <el-table :data="this.lotTrendsList[0].sortDataList"-->
<!-- height='560'-->
<!-- border-->
<!-- style="width: 100%;"-->
<!-- empty-text="暂无数据"-->
<!-- tooltip-effect="dark"-->
<!-- @cell-click="handleClickTable"-->
<!-- :cell-style="trendCellStyle"-->
<!-- :key="itemKey"-->
<!-- v-loading="loading"-->
<!-- >-->
<!-- <template v-for="item in this.lotTrendsList">-->
<!-- <el-table-column-->
<!-- :label="item.title"-->
<!-- class="active"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </template>-->
<!-- </el-table>-->
<!-- <pagination-->
<!-- v-show="stocktotal>0"-->
<!-- :total="stocktotal"-->
<!-- :page.sync="queryStockParams.pageNum"-->
<!-- :limit.sync="queryStockParams.pageSize"-->
<!-- @pagination="getStockList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-card>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row :gutter="20">
<el-col :xs="24" :sm="24" :md="24" :lg="24">
<el-card class="update-log">
<div slot="header" class="clearfix">
<span id="lotDistribute">20日趋势板块</span>
<!-- <div style="float: right;">-->
<!-- <span style="padding-right: 8px;">交易日期</span>-->
<!-- <el-date-picker clearable size="small"-->
<!-- v-model="queryParams.tradeDay"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="选择交易日期"-->
<!-- @change="dateChanged"-->
<!-- style="width: 160px"-->
<!-- :editable="false"-->
<!-- :clearable="false"-->
<!-- >-->
<!-- </el-date-picker>-->
<!-- <span style="padding-right: 8px;padding-left: 12px;">趋势周期</span>-->
<!-- <el-select v-model="queryParams.type"-->
<!-- placeholder="动量周期"-->
<!-- clearable-->
<!-- size="small"-->
<!-- style="width: 100px"-->
<!-- @change="selectChanged"-->
<!-- :clearable="false"-->
<!-- >-->
<!-- <el-option key="1" label="1" :value="1" />-->
<!-- <el-option key="10" label="10" :value="10" />-->
<!-- <el-option key="20" label="20" :value="20" />-->
<!-- &lt;!&ndash; <el-option key="60" label="60" :value="60" />&ndash;&gt;-->
<!-- </el-select>-->
<!-- </div>-->
</div>
<div class="body">
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;">
<span id="lotDistribute">20日趋势板块</span>
</div>
<el-tabs type="border-card">
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<el-table :data="this.lotTrendsList[0].sortDataList"
height='560'
border
style="width: 100%;"
empty-text="暂无数据"
tooltip-effect="dark"
@cell-click="handleClickTable"
:cell-style="trendCellStyle"
:key="itemKey"
v-loading="loading"
>
<template v-for="item in this.lotTrendsList">
<el-table-column
:label="item.title"
class="active"
>
<template slot-scope="scope">
<span>{{ item.sortDataList[scope.$index] }}</span>
</template>
</el-table-column>
</template>
</el-table>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal" style="border: 0px;"></el-icon> ()</span>
<el-tabs>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal" style="border: 0px;"></el-icon> </span>
<el-table :data="this.lotTradesList[0].sortDataList"
height='560'
border
style="width: 100%;"
empty-text="暂无数据"
tooltip-effect="dark"
@cell-click="handleClickTable"
:cell-style="tradeVolumeCellStyle"
:key="itemKey"
v-loading="loading"
>
<template v-for="item in this.lotTradesList">
<el-table-column
:label="item.title"
class="active"
>
<template slot-scope="scope">
<span>{{ item.sortDataList[scope.$index] }}</span>
</template>
</el-table-column>
</template>
</el-table>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal" style="border: 0px;"></el-icon> </span>
<el-table :data="this.lotTradesList[0].rawDataList"
height='560'
border
style="width: 100%;"
empty-text="暂无数据"
tooltip-effect="dark"
@cell-click="handleClickTable"
:cell-style="rawTradeVolumeCellStyle"
:key="itemKey"
v-loading="loading"
>
<template v-for="item in this.lotTradesList">
<el-table-column
:label="item.title"
class="active"
>
<template slot-scope="scope">
<span>{{ item.rawDataList[scope.$index] }}</span>
</template>
</el-table-column>
</template>
</el-table>
</el-tab-pane>
</el-tabs>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> ()</span>
<el-table :data="this.lotLimitUpList[0].sortDataList"
height='560'
border
style="width: 100%;"
empty-text="暂无数据"
tooltip-effect="dark"
@cell-click="handleClickTable"
:cell-style="limitUpCellStyle"
:key="itemKey"
v-loading="loading"
>
<template v-for="item in this.lotLimitUpList">
<el-table-column
:label="item.title"
class="active"
>
<template slot-scope="scope">
<span>{{ item.sortDataList[scope.$index] }}</span>
</template>
</el-table-column>
</template>
</el-table>
</el-tab-pane>
<!-- 新高新低暂时存在问题-->
<!-- <el-tab-pane>-->
<!-- <span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>-->
<!-- <el-table :data="this.lotHigRecordList[0].sortDataList"-->
<!-- height='560'-->
<!-- border-->
<!-- style="width: 100%;"-->
<!-- empty-text="暂无数据"-->
<!-- tooltip-effect="dark"-->
<!-- @cell-click="handleClickTable"-->
<!-- :cell-style="highRecordCellStyle"-->
<!-- :key="itemKey"-->
<!-- v-loading="loading"-->
<!-- >-->
<!-- <template v-for="item in this.lotHigRecordList">-->
<!-- <el-table-column-->
<!-- :label="item.title"-->
<!-- class="active"-->
<!-- v-if="item.title === '2级行业'"-->
<!-- fixed-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </template>-->
<!-- </el-table>-->
<!-- </el-tab-pane>-->
<!-- <el-tab-pane>-->
<!-- <span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>-->
<!-- <el-table :data="this.lotLowRecordList[0].sortDataList"-->
<!-- height='560'-->
<!-- border-->
<!-- style="width: 100%;"-->
<!-- empty-text="暂无数据"-->
<!-- tooltip-effect="dark"-->
<!-- @cell-click="handleClickTable"-->
<!-- :cell-style="lowRecordCellStyle"-->
<!-- :key="itemKey"-->
<!-- v-loading="loading"-->
<!-- >-->
<!-- <template v-for="item in this.lotLowRecordList">-->
<!-- <el-table-column-->
<!-- :label="item.title"-->
<!-- class="active"-->
<!-- v-if="item.title != '2级行业'"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
:label="item.title"
class="active"
>
<template slot-scope="scope">
<span>{{ item.sortDataList[scope.$index] }}</span>
</template>
</el-table-column>
</template>
<!-- <el-table-column-->
<!-- v-for="item in this.lotTrendsList"-->
<!-- :label="item.title"-->
<!-- class="active"-->
<!-- v-if="item.title === '2级行业'"-->
<!-- fixed-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- v-for="item in this.lotTrendsList"-->
<!-- :label="item.title"-->
<!-- class="active"-->
<!-- v-if="item.title != '2级行业'"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</div>
</el-card>
<!-- </template>-->
<!-- </el-table>-->
<!-- </el-tab-pane>-->
</el-tabs>
</el-col>
</el-row>
@ -262,33 +291,6 @@
</div>
</el-dialog>
<!-- 批量动量个股 -->
<!-- <el-dialog :title="trendStocks.title" :visible.sync="trendStocks.open" width="90%" heigh="90%" append-to-body>-->
<!-- <div class="body">-->
<!-- <div ref="trend_diagram" style="height: 300px"></div>-->
<!-- <el-table v-loading="loading_trendStocks"-->
<!-- :data="trendsStocksList"-->
<!-- @cell-click="handleTrendStockClickTable"sortable-->
<!-- >-->
<!-- <el-table-column label="股票代码" align="center" prop="code" />-->
<!-- <el-table-column label="股票名称" align="center" prop="name" />-->
<!-- <el-table-column label="涨跌幅" align="center" prop="differrange" sortable />-->
<!-- <el-table-column label="开盘价" align="center" prop="open" />-->
<!-- <el-table-column label="收盘价" align="center" prop="close" />-->
<!-- <el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />-->
<!-- <el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />-->
<!-- <el-table-column label="3级行业" align="center" prop="blemind3" sortable />-->
<!-- </el-table>-->
<!-- <pagination-->
<!-- v-show="stocktotal>0"-->
<!-- :total="stocktotal"-->
<!-- :page.sync="queryStockParams.pageNum"-->
<!-- :limit.sync="queryStockParams.pageSize"-->
<!-- @pagination="getStockList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-dialog>-->
<TrendStocksDialog
:title = "trendStocks.title"
:tradeDay = "this.queryParams.tradeDay"
@ -301,8 +303,11 @@
<!-- <div ref="stockK" style="height: 500px"></div>-->
<!-- </div>-->
<!-- </el-dialog>-->
<!-- <kdialog-->
<!-- :title="stocksDialog.title"-->
<!-- ref="stockK"-->
<!-- />-->
<kdialog
:title="stocksDialog.title"
ref="stockK"
/>
</div>
@ -316,11 +321,17 @@ import {
addTrends,
updateTrends,
listTrendsSection,
listTradeVolume,
listStockIndexLimitUp,
listStockIndexLimitDown,
listStockIndexHighRocord,
listStockIndexLowRocord,
listSectionByBlemind,
listStockHistory
} from "@/api/stocksystem/trends";
import {listJob} from "@/api/monitor/job";
import {getLatestTradeDay, listTrendStocks} from "@/api";
import {getLatestTradeDay, listStocksQueryData, listTrendStocks} from "@/api";
import {listStockIndexsNameQueryData} from "@/api/index";
import {getToken} from "@/utils/auth";
// import echarts from "echarts";
import echarts from "echarts";
@ -347,8 +358,8 @@ export default {
],
data() {
return {
itemKey: '',//
//
itemKey: '',//
loading: true,
loading_trendStocks: false,
//
@ -362,12 +373,24 @@ export default {
//
total: 0,
stocktotal: 0,
stockIndexQuery:[],
//
trendsList: [],
// 20
trendsStocksList: [],
// ,
lotTrendsList: [{sortDataList:[]}],
//
lotRawTradesList: [{sortDataList:[]}],
// ,
lotLimitUpList: [{sortDataList:[]}],
// ,
lotLimitDownList: [{sortDataList:[]}],
// ,
lotHigRecordList: [{sortDataList:[]}],
// ,
lotLowRecordList: [{sortDataList:[]}],
//
xAxisDataList:[],
seriesDataList:[],
@ -452,6 +475,14 @@ export default {
console.log("getLatestTradeDay " , response.msg);
this.getList();
this.getListSection();
this.getListTradeVolume();//
this.getListStockIndexLimitUp();
// this.getListStockIndexHighRecord();
// this.getListStockIndexLowRecord();
//
listStockIndexsNameQueryData().then(response => {
this.stockIndexQuery = response.rows;
});
});
},
methods: {
@ -463,10 +494,19 @@ export default {
this.total = response.total;
this.loading = false;
});
listTradeVolume(this.queryParams).then(response => {
this.lotTradesList = response.rows;
this.itemKey = Math.random();
document.getElementById('lotDistribute').innerText = this.queryParams.type + "趋势板块";
// this.trendsList = response.rows;
// this.total = response.total;
this.loading = false;
});
},
/** 查询动量结果列表 */
getListSection() {
// this.loading = true;
this.loading = true;
listTrendsSection(this.queryParams).then(response => {
this.lotTrendsList = response.rows;
this.itemKey = Math.random();
@ -474,9 +514,70 @@ export default {
document.getElementById('lotDistribute').innerText = this.queryParams.type + "趋势板块";
// this.trendsList = response.rows;
// this.total = response.total;
// this.loading = false;
this.loading = false;
});
},
getListTradeVolume() {
this.loading = true;
listTradeVolume(this.queryParams).then(response => {
this.lotTradesList = response.rows;
this.itemKey = Math.random();
document.getElementById('lotDistribute').innerText = this.queryParams.type + "趋势板块";
// this.trendsList = response.rows;
// this.total = response.total;
this.loading = false;
});
},
getListStockIndexLimitUp() {
this.loading = true;
listStockIndexLimitUp(this.queryParams).then(response => {
this.lotLimitUpList = response.rows;
this.itemKey = Math.random();
document.getElementById('lotDistribute').innerText = this.queryParams.type + "趋势板块";
// this.trendsList = response.rows;
// this.total = response.total;
this.loading = false;
});
},
// getListStockIndexLimitDown() {
// this.loading = true;
// listStockIndexLimitDown(this.queryParams).then(response => {
// this.lotLimitDownList = response.rows;
// this.itemKey = Math.random();
//
// document.getElementById('lotDistribute').innerText = this.queryParams.type + "";
// // this.trendsList = response.rows;
// // this.total = response.total;
// this.loading = false;
// });
// },
// getListStockIndexHighRecord() {
// this.loading = true;
// listStockIndexHighRocord(this.queryParams).then(response => {
// this.lotHigRecordList = response.rows;
// this.itemKey = Math.random();
//
// document.getElementById('lotDistribute').innerText = this.queryParams.type + "";
// // this.trendsList = response.rows;
// // this.total = response.total;
// this.loading = false;
// });
// },
// getListStockIndexLowRecord() {
// this.loading = true;
// listStockIndexLowRocord(this.queryParams).then(response => {
// this.lotLowRecordList = response.rows;
// this.itemKey = Math.random();
//
// document.getElementById('lotDistribute').innerText = this.queryParams.type + "";
// // this.trendsList = response.rows;
// // this.total = response.total;
// this.loading = false;
// });
// },
getStockList() {
this.loading_trendStocks = true;
listTrendStocks(this.queryStockParams).then(response => {
@ -647,6 +748,7 @@ export default {
handleTrendStockClickTable(row, column){
this.stocksDialog.open = true;
this.stocksDialog.title = row.name;
this.$refs.stockK.title = this.stocksDialog.title;
this.$refs.stockK.open = true;
console.log(row);
console.log('handleTrendStockClickTable code : ',row.code);
@ -668,11 +770,32 @@ export default {
dateChanged(){
// this.getList();
this.getListSection();
this.getListTradeVolume();
this.getListStockIndexLimitUp();
},
selectChanged(){
// this.getList();
this.getListSection();
},
handleTabClicked(tab, event){
console.log(tab, event);
if(tab.index == 0) {
//
this.limitData.isCurrentTab = true;
this.dropData.isCurrentTab = false;
this.getLimitDropData();
}
else if(tab.index == 1){
//
this.dropData.isCurrentTab = true;
this.limitData.isCurrentTab = false;
this.getLimitDropData();
}
else if(tab.index == 2)
{
//
}
},
//
trendCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotTrendsList[columnIndex].sortDataList[rowIndex] <= 3 && this.lotTrendsList[columnIndex].sortDataList[rowIndex] > 0)
@ -684,6 +807,53 @@ export default {
else
return 'text-align:center;';
},
//
tradeVolumeCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotTradesList[columnIndex].sortDataList[rowIndex] <= 3 && this.lotTradesList[columnIndex].sortDataList[rowIndex] > 0)
return 'background:red;color:white;text-align:center;';
else if(this.lotTradesList[columnIndex].sortDataList[rowIndex] <= 6 && this.lotTradesList[columnIndex].sortDataList[rowIndex] > 3)
return 'background:#FF9D00;color:white;text-align:center;';
else if(this.lotTradesList[columnIndex].sortDataList[rowIndex] <= 10 && this.lotTradesList[columnIndex].sortDataList[rowIndex] > 6)
return 'background:#FFD000;color:white;text-align:center;';
else
return 'text-align:center;';
},
rawTradeVolumeCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotTradesList[columnIndex].rawDataList[rowIndex] <= 100 && this.lotTradesList[columnIndex].rawDataList[rowIndex] > 2)
return 'background:red;color:white;text-align:center;';
else if(this.lotTradesList[columnIndex].rawDataList[rowIndex] <= 2 && this.lotTradesList[columnIndex].rawDataList[rowIndex] > 1.5)
return 'background:#FF9D00;color:white;text-align:center;';
else if(this.lotTradesList[columnIndex].rawDataList[rowIndex] <= 1.5 && this.lotTradesList[columnIndex].rawDataList[rowIndex] > 1)
return 'background:#FFD000;color:white;text-align:center;';
else
return 'text-align:center;';
},
//
limitUpCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotLimitUpList[columnIndex].sortDataList[rowIndex] > 5 )
return 'background:red;color:white;text-align:center;';
else if(this.lotLimitUpList[columnIndex].sortDataList[rowIndex] <= 5 && this.lotLimitUpList[columnIndex].sortDataList[rowIndex] > 2)
return 'background:#FF9D00;color:white;text-align:center;';
else if(this.lotLimitUpList[columnIndex].sortDataList[rowIndex] <= 4 && this.lotLimitUpList[columnIndex].sortDataList[rowIndex] > 0)
return 'background:#FFD000;color:white;text-align:center;';
else
return 'text-align:center;';
},
//
highRecordCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotHigRecordList[columnIndex].sortDataList[rowIndex] >= 1 )
return 'background:red;color:white;text-align:center;';
else
return 'text-align:center;';
},
//
lowRecordCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotLowRecordList[columnIndex].sortDataList[rowIndex] >= 1 )
return 'background:red;color:white;text-align:center;';
else
return 'text-align:center;';
},
chart()
{
@ -1333,7 +1503,31 @@ export default {
}
]
});
}
},
/** 搜索联想*/
querySearchAsync(queryString, cb) {
var codes = this.stockIndexQuery;
var results = queryString ? codes.filter(this.createCodeFilter(queryString)) : codes;
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
// console.log("result: " ,results);
cb(results);
}, 3000 * Math.random());
},
createCodeFilter(queryString) {
return (state) => {
// console.log(state.value);
return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
},
handleSelect(item) {
console.log("handleSelect: ",item.value);
// this.queryParams.name = item.data;
this.queryParams.blemind2 = item.value;
this.dateChanged();
},
}
};
</script>

@ -0,0 +1,11 @@
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('行情数据导入', '2057', '6', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:stocks:import', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('每日创新高新低导入', '2094', '5', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:newrecord:import', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('指数交易行情导入', '2100', '5', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:stockindex:import', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据导入', '2107', '5', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:financial:import', '#', 'admin', sysdate(), '', null, '');

@ -0,0 +1,22 @@
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据', '2013', '1', 'financial', 'stocksystem/financial/index', 1, 0, 'C', '0', '0', 'stocksystem:financial:list', '#', 'admin', sysdate(), '', null, 'A股财务数据菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:financial:query', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:financial:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:financial:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:financial:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('A股财务数据导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', 'stocksystem:financial:export', '#', 'admin', sysdate(), '', null, '');

@ -0,0 +1,39 @@
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80022
Source Host : localhost:3306
Source Schema : nstocks
Target Server Type : MySQL
Target Server Version : 80022
File Encoding : 65001
Date: 29/12/2021 23:43:25
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for stock_basis
-- ----------------------------
DROP TABLE IF EXISTS `stock_financial`;
CREATE TABLE `stock_financial` (
`id` double NOT NULL AUTO_INCREMENT COMMENT 'idstock_basis',
`code` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '股票代码',
`period` date NULL DEFAULT NULL COMMENT '报告期',
`jlrtbzzl` decimal(50, 4) NULL DEFAULT NULL COMMENT '净利润同比增长率',
`jlrhbzzl` decimal(50, 4) NULL DEFAULT NULL COMMENT '净利润环比增长率',
`jzcsylroe` decimal(50, 4) NULL DEFAULT NULL COMMENT '净资产收益率ROE',
`epsbasic` decimal(50, 4) NULL DEFAULT NULL COMMENT '每股收益EPS',
`jlr` decimal(50, 4) NULL DEFAULT NULL COMMENT '净利润',
`jbmgsy` decimal(50, 4) NULL DEFAULT NULL COMMENT '基本每股收益',
`mgjzc` decimal(50, 4) NULL DEFAULT NULL COMMENT '每股净资产BPS',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 137032 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'A股财务数据' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,35 @@
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80022
Source Host : localhost:3306
Source Schema : nstocks
Target Server Type : MySQL
Target Server Version : 80022
File Encoding : 65001
Date: 29/12/2021 23:43:52
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for stocks
-- ----------------------------
DROP TABLE IF EXISTS `stocks_tmp`;
CREATE TABLE `stocks_tmp` (
`id` double NOT NULL AUTO_INCREMENT,
`code` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`trade_day` date NULL DEFAULT NULL COMMENT '交易日期',
`differrange3` decimal(50, 4) NULL DEFAULT NULL COMMENT '3日区间涨跌幅',
`differrange5` decimal(50, 4) NULL DEFAULT NULL COMMENT '5日区间涨跌幅',
`differrange15` decimal(50, 4) NULL DEFAULT NULL COMMENT '15日区间涨跌幅',
`differrange30` decimal(50, 4) NULL DEFAULT NULL COMMENT '30日区间涨跌幅',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 82694 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '全部A股每日交易数据辅助表' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,136 @@
package com.ruoyi.stocksystem.controller;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.stocksystem.domain.Stocks;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.stocksystem.domain.StockFinancial;
import com.ruoyi.stocksystem.service.IStockFinancialService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* AController
*
* @author lxy
* @date 2022-05-05
*/
@RestController
@RequestMapping("/stocksystem/financial")
public class StockFinancialController extends BaseController
{
@Autowired
private IStockFinancialService stockFinancialService;
/**
* A
*/
@PreAuthorize("@ss.hasPermi('stocksystem:financial:list')")
@GetMapping("/list")
public TableDataInfo list(StockFinancial stockFinancial)
{
startPage();
List<StockFinancial> list = stockFinancialService.selectStockFinancialList(stockFinancial);
return getDataTable(list);
}
/**
* A
*/
@PreAuthorize("@ss.hasPermi('stocksystem:financial:export')")
@Log(title = "A股财务数据", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, StockFinancial stockFinancial)
{
List<StockFinancial> list = stockFinancialService.selectStockFinancialList(stockFinancial);
ExcelUtil<StockFinancial> util = new ExcelUtil<StockFinancial>(StockFinancial.class);
util.exportExcel(response, list, "A股财务数据数据");
}
/**
* A
*/
@PreAuthorize("@ss.hasPermi('stocksystem:financial:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(stockFinancialService.selectStockFinancialById(id));
}
/**
* A
*/
@PreAuthorize("@ss.hasPermi('stocksystem:financial:add')")
@Log(title = "A股财务数据", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody StockFinancial stockFinancial)
{
return toAjax(stockFinancialService.insertStockFinancial(stockFinancial));
}
/**
* A
*/
@PreAuthorize("@ss.hasPermi('stocksystem:financial:edit')")
@Log(title = "A股财务数据", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody StockFinancial stockFinancial)
{
return toAjax(stockFinancialService.updateStockFinancial(stockFinancial));
}
/**
* A
*/
@PreAuthorize("@ss.hasPermi('stocksystem:financial:remove')")
@Log(title = "A股财务数据", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(stockFinancialService.deleteStockFinancialByIds(ids));
}
@Log(title = "财报数据导入", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('stocksystem:financial:import')")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport, String s) throws Exception
{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM
System.out.println(" tradeDay :" + s);
Date tradeDay1 = null;
try
{
tradeDay1 = simpleDateFormat.parse(s);
}catch (ParseException e) {
e.printStackTrace();
}
if(tradeDay1 == null)
{
return AjaxResult.success("failed");
}
ExcelUtil<StockFinancial> stockFinancial = new ExcelUtil<StockFinancial>(StockFinancial.class);
List<StockFinancial> stockFinancialList = stockFinancial.importExcel(file.getInputStream());
System.out.println("stockFinancialList count : " + stockFinancialList.size() + " tradeDay :" + s);
String operName = getUsername();
String message = stockFinancialService.importStock(stockFinancialList, updateSupport, operName, s);
return AjaxResult.success(message);
}
}

@ -1,7 +1,12 @@
package com.ruoyi.stocksystem.controller;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.stocksystem.domain.StocksNewRecord;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -20,6 +25,7 @@ import com.ruoyi.stocksystem.domain.StockIndex;
import com.ruoyi.stocksystem.service.IStockIndexService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* Controller
@ -59,6 +65,36 @@ public class StockIndexController extends BaseController
util.exportExcel(response, list, "指数交易行情数据");
}
@Log(title = "指数数据导入", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('stocksystem:stockindex:import')")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport, String s) throws Exception
{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM
System.out.println(" tradeDay :" + s);
Date tradeDay1 = null;
try
{
tradeDay1 = simpleDateFormat.parse(s);
}catch (ParseException e) {
e.printStackTrace();
}
if(tradeDay1 == null)
{
return AjaxResult.success("failed");
}
ExcelUtil<StockIndex> stocksIndexRecords = new ExcelUtil<StockIndex>(StockIndex.class);
List<StockIndex> stocksIndexList = stocksIndexRecords.importExcel(file.getInputStream());
System.out.println("stockIndexList count : " + stocksIndexList.size() + " tradeDay :" + s);
for (StockIndex stockIndex: stocksIndexList)
{
System.out.println(stockIndex.toString());
}
String operName = getUsername();
String message = stockIndexService.importStockIndexs(stocksIndexList, updateSupport, operName, s);
return AjaxResult.success(message);
}
/**
*
*/

@ -6,6 +6,8 @@ import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.stocksystem.domain.StocksLimit;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@ -27,6 +29,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import static com.ruoyi.common.constant.Constants.*;
/**
* Controller
*
@ -40,6 +44,9 @@ public class StocksNewRecordController extends BaseController
@Autowired
private IStocksNewRecordService stocksNewRecordService;
@Autowired
private RedisCache redisCache;
/**
*
*/
@ -72,12 +79,35 @@ public class StocksNewRecordController extends BaseController
public TableDataInfo grouplist(StocksNewRecord stocksNewRecord)
{
// startPage();
List<StocksNewRecord> list = stocksNewRecordService.selectGroupStocksNewRecord(stocksNewRecord);
// List<StocksNewRecord> list = stocksNewRecordService.selectGroupStocksNewRecord(stocksNewRecord);
String redisKey = getRecordReidsKey(stocksNewRecord);
List<StocksNewRecord> list = redisCache.getCacheList(redisKey);
if(list.isEmpty())
{
list = stocksNewRecordService.selectGroupStocksNewRecord(stocksNewRecord);
// String redisKey = getRecordReidsKey(stocksNewRecord);
if(!list.isEmpty()) {
redisCache.setCacheList(redisKey, list);
redisCache.expire(redisKey, EXPIRED_TIME);
}
}
return getDataTable(list);
}
/**
*
*/
@GetMapping("/getAllNewRecords")
public TableDataInfo getAllNewRecords(StocksNewRecord stocksNewRecord)
{
// startPage();
List<StocksNewRecord> list = stocksNewRecordService.selectGroupStocksNewRecordAll(stocksNewRecord);
return getDataTable(list);
}
@Log(title = "创新高新低数据导入", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('stocksystem:newrecord:import')")
// @PreAuthorize("@ss.hasRole('admin') || @ss.hasRole('normal_admin')")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport, String s) throws Exception
{
@ -144,4 +174,15 @@ public class StocksNewRecordController extends BaseController
{
return toAjax(stocksNewRecordService.deleteStocksNewRecordByIds(ids));
}
private String getRecordReidsKey(StocksNewRecord stocksNewRecord)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
if(StringUtils.isNull(stocksNewRecord.getIsHigh()))
return "";
if(stocksNewRecord.getIsHigh().equals("是"))
return HOME_HIGH_DISTRIBUTE + formatter.format(stocksNewRecord.getTradeDay());
else
return HOME_LOW_DISTRIBUTE + formatter.format(stocksNewRecord.getTradeDay());
}
}

@ -5,10 +5,13 @@ import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.stocksystem.domain.*;
import com.ruoyi.stocksystem.domain.service.IStocksInTrendService;
import com.ruoyi.stocksystem.domain.service.IStocksService;
import com.ruoyi.stocksystem.domain.service.ITradeDatesService;
import com.ruoyi.stocksystem.service.IStockIndexService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -27,6 +30,8 @@ import com.ruoyi.stocksystem.domain.service.ITrendsService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import static com.ruoyi.common.constant.Constants.*;
/**
* Controller
*
@ -49,6 +54,11 @@ public class TrendsController extends BaseController
@Autowired
private IStocksService stocksService;
@Autowired
private IStockIndexService stockIndexService;
@Autowired
private RedisCache redisCache;
/**
*
*/
@ -56,9 +66,18 @@ public class TrendsController extends BaseController
@GetMapping("/list")
public TableDataInfo list(Trends trends)
{
// List<Trends> list = redisCache.getCacheList(STOCK_TRENDS + trends.getTradeDay().toString() + "_" + trends.getType());
// System.out.println("redisKey: " + STOCK_TRENDS + trends.getTradeDay().toString() + "_" + trends.getType());
// if(list.isEmpty()) {
// System.out.println("redisKey is Empty.");
// startPage();
//// System.out.println("trendList tradeDay : " + trends.getTradeDay().toString());
//// List<Trends> list = trendsService.selectTrendsList(trends);
// list = trendsService.selectTrendsList(trends);
// redisCache.setCacheList(STOCK_TRENDS + trends.getTradeDay().toString() + "_" + trends.getType(), list);
// }
startPage();
// System.out.println("trendList tradeDay : " + trends.getTradeDay().toString());
List<Trends> list = trendsService.selectTrendsList(trends);
List<Trends> list = trendsService.selectTrendsList(trends);
return getDataTable(list);
}
@ -77,103 +96,101 @@ public class TrendsController extends BaseController
@GetMapping("/querytrendstockslist")
public TableDataInfo querytrendstockslist(Trends trends)
{
List<StocksInTrend> result = redisCache.getCacheList(getHomeTrendsStocks(trends));
if(result.isEmpty()) {
// startPage();
System.out.println("querytrendstockslist type : " + trends.getType());
System.out.println("querytrendstockslist tradeDay : " + trends.getTradeDay().toString());
List<Trends> list = trendsService.selectTrendsList(trends);
System.out.println("querytrendstockslist : get trends list size : " + list.size());
List<StocksInTrend> stocksInTrendList = new ArrayList<StocksInTrend>();
StocksInTrend stocksInTrend = new StocksInTrend();
//获取10日、20日、60日的日期
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(60l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
boolean has10 = tradeDatesList.size() >= 10;
boolean has20 = tradeDatesList.size() >= 10;
boolean has60 = tradeDatesList.size() >= 10;
Date tradeDay10;
if(has10)
tradeDay10 = tradeDatesList.get(9).getDate();
else
tradeDay10 = tradeDatesList.get(tradeDatesList.size()-1).getDate();
Date tradeDay20;
if(has20)
tradeDay20 = tradeDatesList.get(19).getDate();
else
tradeDay20 = tradeDatesList.get(tradeDatesList.size()-1).getDate();
Date tradeDay60;
if(has60)
tradeDay60 = tradeDatesList.get(59).getDate();
else
tradeDay60 = tradeDatesList.get(tradeDatesList.size()-1).getDate();
//获取动量板块内的个股
stocksInTrend.setType(trends.getType());
stocksInTrend.setTradeDay(trends.getTradeDay());
List<StocksInTrend> stocksInTrendList1 = stocksInTrendService.selectStocksInTrendList(stocksInTrend);
int trendCount = 0;
for(Trends trends1: list)
{
if(trendCount >= 20)
break;
int trendStockLimit = 5;
if(trendCount <= 9)
trendStockLimit = 5;
System.out.println("querytrendstockslist type : " + trends.getType());
System.out.println("querytrendstockslist tradeDay : " + trends.getTradeDay().toString());
List<Trends> list = trendsService.selectTrendsList(trends);
System.out.println("querytrendstockslist : get trends list size : " + list.size());
List<StocksInTrend> stocksInTrendList = new ArrayList<StocksInTrend>();
StocksInTrend stocksInTrend = new StocksInTrend();
//获取10日、20日、60日的日期
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(60l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
boolean has10 = tradeDatesList.size() >= 10;
boolean has20 = tradeDatesList.size() >= 10;
boolean has60 = tradeDatesList.size() >= 10;
Date tradeDay10;
if (has10)
tradeDay10 = tradeDatesList.get(9).getDate();
else
trendStockLimit = 3;
trendCount++;
for(StocksInTrend stocksInTrend1 : stocksInTrendList1)
{
if(trendStockLimit <= 0)
tradeDay10 = tradeDatesList.get(tradeDatesList.size() - 1).getDate();
Date tradeDay20;
if (has20)
tradeDay20 = tradeDatesList.get(19).getDate();
else
tradeDay20 = tradeDatesList.get(tradeDatesList.size() - 1).getDate();
Date tradeDay60;
if (has60)
tradeDay60 = tradeDatesList.get(59).getDate();
else
tradeDay60 = tradeDatesList.get(tradeDatesList.size() - 1).getDate();
//获取动量板块内的个股
stocksInTrend.setType(trends.getType());
stocksInTrend.setTradeDay(trends.getTradeDay());
List<StocksInTrend> stocksInTrendList1 = stocksInTrendService.selectStocksInTrendList(stocksInTrend);
int trendCount = 0;
for (Trends trends1 : list) {
if (trendCount >= 20)
break;
if(trends1.getBlemind2().equals(stocksInTrend1.getBlemind2()))
{
stocksInTrendList.add(stocksInTrend1);
trendStockLimit--;
int trendStockLimit = 5;
if (trendCount <= 9)
trendStockLimit = 5;
else
trendStockLimit = 3;
trendCount++;
for (StocksInTrend stocksInTrend1 : stocksInTrendList1) {
if (trendStockLimit <= 0)
break;
if (trends1.getBlemind2().equals(stocksInTrend1.getBlemind2())) {
stocksInTrendList.add(stocksInTrend1);
trendStockLimit--;
}
}
}
}
Stocks stocks = new Stocks();
stocks.setTradeDay(trends.getTradeDay());
stocks.setStradeDay(tradeDay20);
List<Stocks> stocksList = stocksService.selectStocksForHigh(stocks);
stocks.setStradeDay(tradeDay10);
List<Stocks> stocksList10 = stocksService.selectStocksForHigh(stocks);
List<StocksInTrend> result = new ArrayList<StocksInTrend>();
for(StocksInTrend stocksInTrend1 :stocksInTrendList)
{
for(Stocks stocks1 : stocksList)
{
if(stocks1.getCode().equals(stocksInTrend1.getCode()))
{
//计算
BigDecimal current = stocksInTrend1.getClose();
BigDecimal high = stocks1.getClose();
BigDecimal diff = current.subtract(high);
BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
System.out.println("20 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult);
stocksInTrend1.setBackDifferrange20(hresult);
Stocks stocks = new Stocks();
stocks.setTradeDay(trends.getTradeDay());
stocks.setStradeDay(tradeDay20);
List<Stocks> stocksList = stocksService.selectStocksForHigh(stocks);
stocks.setStradeDay(tradeDay10);
List<Stocks> stocksList10 = stocksService.selectStocksForHigh(stocks);
// List<StocksInTrend> result = new ArrayList<StocksInTrend>();
for (StocksInTrend stocksInTrend1 : stocksInTrendList) {
for (Stocks stocks1 : stocksList) {
if (stocks1.getCode().equals(stocksInTrend1.getCode())) {
//计算
BigDecimal current = stocksInTrend1.getClose();
BigDecimal high = stocks1.getClose();
BigDecimal diff = current.subtract(high);
BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
System.out.println("20 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult);
stocksInTrend1.setBackDifferrange20(hresult);
// result.add(stocksInTrend1);
break;
break;
}
}
}
for(Stocks stocks2 : stocksList10)
{
if(stocks2.getCode().equals(stocksInTrend1.getCode()))
{
//计算
BigDecimal current = stocksInTrend1.getClose();
BigDecimal high = stocks2.getClose();
BigDecimal diff = current.subtract(high);
BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
System.out.println("10 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult);
stocksInTrend1.setBackDifferrange10(hresult);
break;
for (Stocks stocks2 : stocksList10) {
if (stocks2.getCode().equals(stocksInTrend1.getCode())) {
//计算
BigDecimal current = stocksInTrend1.getClose();
BigDecimal high = stocks2.getClose();
BigDecimal diff = current.subtract(high);
BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
System.out.println("10 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult);
stocksInTrend1.setBackDifferrange10(hresult);
break;
}
}
result.add(stocksInTrend1);
}
if(!result.isEmpty()) {
redisCache.setCacheList(getHomeTrendsStocks(trends), result);
redisCache.expire(getHomeTrendsStocks(trends), EXPIRED_TIME);
}
result.add(stocksInTrend1);
}
// //遍历获取板块内个股
// int trendsCount = 0;
@ -232,6 +249,7 @@ public class TrendsController extends BaseController
// stocksInTrendList.add(sit);
// }
// }
}
System.out.println("querytrendstockslist count : " + result.size());
return getDataTable(result);
}
@ -242,137 +260,552 @@ public class TrendsController extends BaseController
@GetMapping("/listSection")
public TableDataInfo listSection(Trends trends)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// startPage();
List<TrendForVue> resultDataList;
//如果存在搜索条件时不走redis也不缓存
if(!StringUtils.isEmpty(trends.getBlemind2()))
resultDataList = new ArrayList<>();
else
resultDataList = redisCache.getCacheList(getTrendsRedisKey(trends));
System.out.println("redisKey: " + getTrendsRedisKey(trends));
//查询可交易日期
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
if(resultDataList.isEmpty()) {
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
trends.setTradeDay(tradeDatesList.get(0).getDate());
List<Trends> currentTradeDayTrendslist = trendsService.selectTrendsList(trends);
// List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>();
for (Trends ct : currentTradeDayTrendslist) {
blemind2List.add(ct.getBlemind2());
}
tfv.setDataList(currentTradeDayTrendslist);
tfv.setTitle("2级行业");
tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List);
resultDataList.add(tfv);
//初始化列表
for (TradeDates day : tradeDatesList) {
List<String> sortDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate()));
tf.setIsBlemind2(false);
;
tf.setSortDataList(sortDataList);
resultDataList.add(tf);
}
for (Trends trend : currentTradeDayTrendslist) {
Trends t = new Trends();
t.setType(trends.getType());
t.setBlemind2(trend.getBlemind2());
t.setTradeDay(trends.getTradeDay());
List<Trends> list = trendsService.selectTrendList(t);
for (int i = 1; i < resultDataList.size(); i++) {
boolean isHasSort = false;
for (Trends ttrend : list) {
if (formatter.format(ttrend.getTradeDay()).equals(resultDataList.get(i).getTitle())) {
resultDataList.get(i).getSortDataList().add(ttrend.getSort().toString());
isHasSort = true;
break;
}
}
if (!isHasSort) {
resultDataList.get(i).getSortDataList().add("-1");
}
}
}
if(StringUtils.isEmpty(trends.getBlemind2())) {
if(!resultDataList.isEmpty()) {
redisCache.setCacheList(getTrendsRedisKey(trends), resultDataList);
redisCache.expire(getTrendsRedisKey(trends), EXPIRED_TIME);//单位秒
}
}
System.out.println("redisKey: list is empty.");
}
return getDataTable(resultDataList);
// //当天的数据在第一列,后面都是以这个为顺序
// List<Trends> currentTradeDayTrendslist = trendsService.selectTrendsList(trends);
// List<List<Trends> > resultDataList = new ArrayList<List<Trends> >();
// resultDataList.add(currentTradeDayTrendslist);
//
// for(Trends trend : currentTradeDayTrendslist)
// {
// Trends t = new Trends();
// t.setType(trends.getType());
// t.setBlemind2(trend.getBlemind2());
// t.setTradeDay(trends.getTradeDay());
// List<Trends> list = trendsService.selectTrendList(t);
// resultDataList.add(list);
// }
//
// return getDataTable(resultDataList);
}
/**
*
*/
@GetMapping("/listTradeVolume")
public TableDataInfo listTradeVolume(StockIndex stockIndex)
{
//查询可交易日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// String dateString = formatter.format(currentTime);
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay());
tradeDates.setDate(stockIndex.getTradeDay());
tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
trends.setTradeDay(tradeDatesList.get(0).getDate());
stockIndex.setTradeDay(tradeDatesList.get(0).getDate());
List<Trends> currentTradeDayTrendslist = trendsService.selectTrendsList(trends);
List<StockIndex> currentTradeDayStockIndexlist = stockIndexService.selectStockIndexTradeVolumeList(stockIndex);
List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>();
for(Trends ct : currentTradeDayTrendslist)
for(StockIndex ct : currentTradeDayStockIndexlist)
{
blemind2List.add(ct.getBlemind2());
blemind2List.add(ct.getName());
}
tfv.setDataList(currentTradeDayTrendslist);
// tfv.setDataList(currentTradeDayTrendslist);
tfv.setTitle("2级行业");
tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List);
tfv.setRawDataList(blemind2List);
resultDataList.add(tfv);
//初始化列表
StockIndex stockIndex1 = new StockIndex();
for (TradeDates day : tradeDatesList)
{
stockIndex1.setTradeDay(day.getDate());
List<StockIndex> trradeDayStockIndexlist = stockIndexService.selectStockIndexTradeVolumeList(stockIndex1);
List<String> sortDataList = new ArrayList<String>();
List<String> amoutsDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate()));
tf.setIsBlemind2(false);;
tf.setIsBlemind2(false);
for(StockIndex stockIndexTmp : currentTradeDayStockIndexlist)
{
boolean isHasSort = false;
int currentSort = 1;
for(StockIndex stockIndex2 : trradeDayStockIndexlist)
{
if(stockIndex2.getCode().equals(stockIndexTmp.getCode()))
{
// sortDataList.add(stockIndex2.Amountliqmv().toString());
sortDataList.add(String.valueOf(currentSort));//传输的是排名
amoutsDataList.add(stockIndex2.getAmountliqmv().setScale(2, BigDecimal.ROUND_UP).toString());
currentSort++;
isHasSort = true;
break;
}
else
{
currentSort++;
}
}
if(!isHasSort)
{
sortDataList.add("-1");
amoutsDataList.add("-1");
}
}
tf.setSortDataList(sortDataList);
tf.setRawDataList(amoutsDataList);
resultDataList.add(tf);
}
return getDataTable(resultDataList);
}
for(Trends trend : currentTradeDayTrendslist)
/**
*
*/
@GetMapping("/listStockIndexLimitUp")
public TableDataInfo listStockIndexLimitUp(StockIndex stockIndex)
{
//查询可交易日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(stockIndex.getTradeDay());
tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
stockIndex.setTradeDay(tradeDatesList.get(0).getDate());
stockIndex.setOrderParam("limitupnum");
List<StockIndex> currentTradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex);
List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>();
for(StockIndex ct : currentTradeDayStockIndexlist)
{
Trends t = new Trends();
t.setType(trends.getType());
t.setBlemind2(trend.getBlemind2());
t.setTradeDay(trends.getTradeDay());
List<Trends> list = trendsService.selectTrendList(t);
for(int i = 1 ; i < resultDataList.size() ; i++)
blemind2List.add(ct.getName());
}
// tfv.setDataList(currentTradeDayTrendslist);
tfv.setTitle("2级行业");
tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List);
resultDataList.add(tfv);
//初始化列表
StockIndex stockIndex1 = new StockIndex();
for (TradeDates day : tradeDatesList)
{
stockIndex1.setTradeDay(day.getDate());
stockIndex1.setOrderParam("limitupnum");
List<StockIndex> trradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex1);
List<String> sortDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate()));
tf.setIsBlemind2(false);
for(StockIndex stockIndexTmp : currentTradeDayStockIndexlist)
{
boolean isHasSort = false;
for(Trends ttrend : list)
for(StockIndex stockIndex2 : trradeDayStockIndexlist)
{
if(formatter.format(ttrend.getTradeDay()).equals(resultDataList.get(i).getTitle()))
if(stockIndex2.getCode().equals(stockIndexTmp.getCode()))
{
resultDataList.get(i).getSortDataList().add(ttrend.getSort().toString());
sortDataList.add(stockIndex2.getLimitupnum().setScale(0,BigDecimal.ROUND_UP).toString());
isHasSort = true;
break;
}
}
if(!isHasSort)
{
resultDataList.get(i).getSortDataList().add("-1");
sortDataList.add("-1");
}
}
tf.setSortDataList(sortDataList);
resultDataList.add(tf);
}
return getDataTable(resultDataList);
}
// //当天的数据在第一列,后面都是以这个为顺序
// List<Trends> currentTradeDayTrendslist = trendsService.selectTrendsList(trends);
// List<List<Trends> > resultDataList = new ArrayList<List<Trends> >();
// resultDataList.add(currentTradeDayTrendslist);
/**
*
*/
@GetMapping("/listStockIndexLimitDown")
public TableDataInfo listStockIndexLimitDown(StockIndex stockIndex)
{
//查询可交易日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(stockIndex.getTradeDay());
tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
stockIndex.setTradeDay(tradeDatesList.get(0).getDate());
stockIndex.setOrderParam("limitdownnum");
List<StockIndex> currentTradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex);
List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>();
for(StockIndex ct : currentTradeDayStockIndexlist)
{
blemind2List.add(ct.getName());
}
// tfv.setDataList(currentTradeDayTrendslist);
tfv.setTitle("2级行业");
tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List);
resultDataList.add(tfv);
//初始化列表
StockIndex stockIndex1 = new StockIndex();
for (TradeDates day : tradeDatesList)
{
stockIndex1.setTradeDay(day.getDate());
stockIndex1.setOrderParam("limitdownnum");
List<StockIndex> trradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex1);
List<String> sortDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate()));
tf.setIsBlemind2(false);
for(StockIndex stockIndexTmp : currentTradeDayStockIndexlist)
{
boolean isHasSort = false;
for(StockIndex stockIndex2 : trradeDayStockIndexlist)
{
if(stockIndex2.getCode().equals(stockIndexTmp.getCode()))
{
sortDataList.add(stockIndex2.getLimitdownnum().toString());
isHasSort = true;
break;
}
}
if(!isHasSort)
{
sortDataList.add("-1");
}
}
tf.setSortDataList(sortDataList);
resultDataList.add(tf);
}
return getDataTable(resultDataList);
}
/**
*
*/
@GetMapping("/listStockIndexHighRocord")
public TableDataInfo listStockIndexHighRocord(StockIndex stockIndex)
{
//查询可交易日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(stockIndex.getTradeDay());
tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
stockIndex.setTradeDay(tradeDatesList.get(0).getDate());
stockIndex.setOrderParam("rcnthigh");
List<StockIndex> currentTradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex);
List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>();
for(StockIndex ct : currentTradeDayStockIndexlist)
{
blemind2List.add(ct.getName());
}
// tfv.setDataList(currentTradeDayTrendslist);
tfv.setTitle("2级行业");
tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List);
resultDataList.add(tfv);
//初始化列表
StockIndex stockIndex1 = new StockIndex();
for (TradeDates day : tradeDatesList)
{
stockIndex1.setTradeDay(day.getDate());
stockIndex1.setOrderParam("rcnthigh");
List<StockIndex> trradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex1);
List<String> sortDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate()));
tf.setIsBlemind2(false);
for(StockIndex stockIndexTmp : currentTradeDayStockIndexlist)
{
boolean isHasSort = false;
for(StockIndex stockIndex2 : trradeDayStockIndexlist)
{
if(stockIndex2.getCode().equals(stockIndexTmp.getCode()))
{
sortDataList.add(stockIndex2.getRcnthigh().equals("是") ? "1" : "-1");
isHasSort = true;
break;
}
}
if(!isHasSort)
{
sortDataList.add("-1");
}
}
tf.setSortDataList(sortDataList);
resultDataList.add(tf);
}
return getDataTable(resultDataList);
}
/**
*
*/
@GetMapping("/listStockIndexLowRocord")
public TableDataInfo listStockIndexLowRocord(StockIndex stockIndex)
{
//查询可交易日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(stockIndex.getTradeDay());
tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
stockIndex.setTradeDay(tradeDatesList.get(0).getDate());
stockIndex.setOrderParam("rcntlow");
List<StockIndex> currentTradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex);
List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>();
for(StockIndex ct : currentTradeDayStockIndexlist)
{
blemind2List.add(ct.getName());
}
// tfv.setDataList(currentTradeDayTrendslist);
tfv.setTitle("2级行业");
tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List);
resultDataList.add(tfv);
//初始化列表
StockIndex stockIndex1 = new StockIndex();
for (TradeDates day : tradeDatesList)
{
stockIndex1.setTradeDay(day.getDate());
stockIndex1.setOrderParam("rcntlow");
List<StockIndex> trradeDayStockIndexlist = stockIndexService.selectStockIndexRecordsList(stockIndex1);
List<String> sortDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate()));
tf.setIsBlemind2(false);
for(StockIndex stockIndexTmp : currentTradeDayStockIndexlist)
{
boolean isHasSort = false;
for(StockIndex stockIndex2 : trradeDayStockIndexlist)
{
if(stockIndex2.getCode().equals(stockIndexTmp.getCode()))
{
sortDataList.add(stockIndex2.getRcntlow().equals("是") ? "1" : "-1");
isHasSort = true;
break;
}
}
if(!isHasSort)
{
sortDataList.add("-1");
}
}
tf.setSortDataList(sortDataList);
resultDataList.add(tf);
}
return getDataTable(resultDataList);
}
// /**
// * 查询行情数据列表含基础数据 2022-08-13原实现
// */
// @GetMapping("/listSectionByBlemind")
// public TableDataInfo listSectionByBlemind(Trends trends)
// {
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
//
// for(Trends trend : currentTradeDayTrendslist)
// TradeDates tradeDates = new TradeDates();
// tradeDates.setDate(trends.getTradeDay());
// tradeDates.setLimitCount(90l);
// List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
//
// List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
// TrendForVue tfv = new TrendForVue();
// List<String> xAxisDataList = new ArrayList<String>();
// List<String> seriesDataList = new ArrayList<String>();
// for(TradeDates tradeDates1 : tradeDatesList)
// {
// xAxisDataList.add(formatter.format(tradeDates1.getDate()));
// Trends t = new Trends();
// t.setType(trends.getType());
// t.setBlemind2(trend.getBlemind2());
// t.setTradeDay(trends.getTradeDay());
// t.setBlemind2(trends.getBlemind2());
// t.setTradeDay(tradeDates1.getDate());
// t.setLimitCount(1l);
// List<Trends> list = trendsService.selectTrendList(t);
// resultDataList.add(list);
// if(list.size() <= 0)
// {
// seriesDataList.add("100");
// }
// else {
// for (Trends ttrend : list) {
// if (formatter.format(ttrend.getTradeDay()).equals(formatter.format(tradeDates1.getDate()))) {
// seriesDataList.add(ttrend.getSort().toString());
// } else {
// seriesDataList.add("100");
// }
// }
// }
//
// }
// tfv.setTitle("交易日期");
// tfv.setSortDataList(xAxisDataList);
// resultDataList.add(tfv);
//
// TrendForVue tfvSeries = new TrendForVue();
// tfvSeries.setTitle("Series");
// tfvSeries.setSortDataList(seriesDataList);
// resultDataList.add(tfvSeries);
// return getDataTable(resultDataList);
}
// }
/**
*
*
*/
@GetMapping("/listSectionByBlemind")
public TableDataInfo listSectionByBlemind(Trends trends)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String redisKey = getSectionByBlemindRedisKey(trends);
List<TrendForVue> resultDataList = redisCache.getCacheList(redisKey);
if(resultDataList.isEmpty()) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(90l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(90l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> xAxisDataList = new ArrayList<String>();
List<String> seriesDataList = new ArrayList<String>();
for(TradeDates tradeDates1 : tradeDatesList)
{
xAxisDataList.add(formatter.format(tradeDates1.getDate()));
Trends t = new Trends();
t.setType(trends.getType());
t.setBlemind2(trends.getBlemind2());
t.setTradeDay(tradeDates1.getDate());
t.setLimitCount(1l);
List<Trends> list = trendsService.selectTrendList(t);
if(list.size() <= 0)
{
seriesDataList.add("100");
}
else {
for (Trends ttrend : list) {
if (formatter.format(ttrend.getTradeDay()).equals(formatter.format(tradeDates1.getDate()))) {
seriesDataList.add(ttrend.getSort().toString());
} else {
t.setTradeDay(trends.getTradeDay());
t.setLimitCount(90l);
List<Trends> tradeDatesTrendsList = trendsService.selectTrendList(t);
// List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue();
List<String> xAxisDataList = new ArrayList<String>();
List<String> seriesDataList = new ArrayList<String>();
List<String> rawDataList = new ArrayList<String>();
int trendsCount = tradeDatesTrendsList.size();
int tradeDatesCount = tradeDatesList.size();
for (int i = 0; i < tradeDatesCount; i++) {
xAxisDataList.add(formatter.format(tradeDatesList.get(i).getDate()));
if (i < trendsCount) {
boolean isFound = false;
for (Trends ttrend : tradeDatesTrendsList) {
if (formatter.format(ttrend.getTradeDay()).equals(formatter.format(tradeDatesList.get(i).getDate()))) {
seriesDataList.add(ttrend.getSort().toString());
rawDataList.add(ttrend.getTrendValue().toString());
isFound = true;
break;
}
}
if (!isFound) {
seriesDataList.add("100");
rawDataList.add("0");
}
} else {
seriesDataList.add("100");
rawDataList.add("0");
}
}
}
tfv.setTitle("交易日期");
tfv.setSortDataList(xAxisDataList);
resultDataList.add(tfv);
tfv.setTitle("交易日期");
tfv.setSortDataList(xAxisDataList);
resultDataList.add(tfv);
TrendForVue tfvSeries = new TrendForVue();
tfvSeries.setTitle("Series");
tfvSeries.setSortDataList(seriesDataList);
tfvSeries.setRawDataList(rawDataList);
resultDataList.add(tfvSeries);
TrendForVue tfvSeries = new TrendForVue();
tfvSeries.setTitle("Series");
tfvSeries.setSortDataList(seriesDataList);
resultDataList.add(tfvSeries);
if(!resultDataList.isEmpty()) {
redisCache.setCacheList(redisKey, resultDataList);
redisCache.expire(redisKey, EXPIRED_TIME);
}
}
return getDataTable(resultDataList);
}
@ -431,4 +864,22 @@ public class TrendsController extends BaseController
{
return toAjax(trendsService.deleteTrendsByIds(ids));
}
private String getTrendsRedisKey(Trends trends)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return TRENDS + formatter.format(trends.getTradeDay()) + "_" + trends.getType();
}
private String getHomeTrendsStocks(Trends trends)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return HOME_TRENDS_STOCKS + formatter.format(trends.getTradeDay()) + "_" + trends.getType();
}
private String getSectionByBlemindRedisKey(Trends trends)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return TRENDS_SECTION_BLEMIND + formatter.format(trends.getTradeDay()) + "_" + trends.getBlemind2() + "_" + trends.getType();
}
}

@ -0,0 +1,42 @@
package com.ruoyi.stocksystem.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
public class QueryData extends BaseEntity {
private static final long serialVersionUID = 1L;
private String value;
private String data;
public void setValue(String value)
{
this.value = value;
}
public String getValue()
{
return this.value;
}
public void setData(String data)
{
this.data = data;
}
public String getData()
{
return this.data;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("value", getValue()).append("name",getData())
.toString();
}
}

@ -0,0 +1,167 @@
package com.ruoyi.stocksystem.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* A stock_financial
*
* @author lxy
* @date 2022-05-05
*/
public class StockFinancial extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** id */
private Long id;
/** 股票代码 */
@Excel(name = "股票代码")
private String code;
/** 报告期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "报告期", width = 30, dateFormat = "yyyy-MM-dd")
private Date period;
/** 净利润同比增长率 */
@Excel(name = "净利润同比增长率")
private BigDecimal jlrtbzzl;
/** 净利润环比增长率 */
@Excel(name = "净利润环比增长率")
private BigDecimal jlrhbzzl;
/** 净资产收益率ROE */
@Excel(name = "净资产收益率ROE")
private BigDecimal jzcsylroe;
/** 每股收益EPS */
@Excel(name = "每股收益EPS")
private BigDecimal epsbasic;
/** 净利润 */
@Excel(name = "净利润")
private BigDecimal jlr;
/** 基本每股收益 */
@Excel(name = "基本每股收益")
private BigDecimal jbmgsy;
/** 每股净资产BPS */
@Excel(name = "每股净资产BPS")
private BigDecimal mgjzc;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setCode(String code)
{
this.code = code;
}
public String getCode()
{
return code;
}
public void setPeriod(Date period)
{
this.period = period;
}
public Date getPeriod()
{
return period;
}
public void setJlrtbzzl(BigDecimal jlrtbzzl)
{
this.jlrtbzzl = jlrtbzzl;
}
public BigDecimal getJlrtbzzl()
{
return jlrtbzzl;
}
public void setJlrhbzzl(BigDecimal jlrhbzzl)
{
this.jlrhbzzl = jlrhbzzl;
}
public BigDecimal getJlrhbzzl()
{
return jlrhbzzl;
}
public void setJzcsylroe(BigDecimal jzcsylroe)
{
this.jzcsylroe = jzcsylroe;
}
public BigDecimal getJzcsylroe()
{
return jzcsylroe;
}
public void setEpsbasic(BigDecimal epsbasic)
{
this.epsbasic = epsbasic;
}
public BigDecimal getEpsbasic()
{
return epsbasic;
}
public void setJlr(BigDecimal jlr)
{
this.jlr = jlr;
}
public BigDecimal getJlr()
{
return jlr;
}
public void setJbmgsy(BigDecimal jbmgsy)
{
this.jbmgsy = jbmgsy;
}
public BigDecimal getJbmgsy()
{
return jbmgsy;
}
public void setMgjzc(BigDecimal mgjzc)
{
this.mgjzc = mgjzc;
}
public BigDecimal getMgjzc()
{
return mgjzc;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("code", getCode())
.append("period", getPeriod())
.append("jlrtbzzl", getJlrtbzzl())
.append("jlrhbzzl", getJlrhbzzl())
.append("jzcsylroe", getJzcsylroe())
.append("epsbasic", getEpsbasic())
.append("jlr", getJlr())
.append("jbmgsy", getJbmgsy())
.append("mgjzc", getMgjzc())
.toString();
}
}

@ -22,11 +22,11 @@ public class StockIndex extends BaseEntity
private Long id;
/** 指数代码 */
@Excel(name = "指数代码")
@Excel(name = "证券代码")
private String code;
/** 指数名称 */
@Excel(name = "指数名称")
@Excel(name = "证券名称")
private String name;
/** 交易日期 */
@ -87,7 +87,7 @@ public class StockIndex extends BaseEntity
private BigDecimal flatnum;
/** 成分个数 */
@Excel(name = "成个数")
@Excel(name = "成个数")
private BigDecimal componentnum;
/** 总市值 */
@ -108,11 +108,26 @@ public class StockIndex extends BaseEntity
/** 近期创历史新高 */
@Excel(name = "近期创历史新高")
private BigDecimal rcnthigh;
private String rcnthigh;
/** 近期创历史新低 */
@Excel(name = "近期创历史新低")
private BigDecimal rcntlow;
private String rcntlow;
private BigDecimal amountmv;
private BigDecimal amountliqmv;
//排序字段
private String orderParam;
public void setOrderParam(String orderParam)
{
this.orderParam = orderParam;
}
public String getOrderParam()
{
return orderParam;
}
public void setId(Long id)
{
@ -312,25 +327,43 @@ public class StockIndex extends BaseEntity
{
return liqmv;
}
public void setRcnthigh(BigDecimal rcnthigh)
public void setRcnthigh(String rcnthigh)
{
this.rcnthigh = rcnthigh;
}
public BigDecimal getRcnthigh()
public String getRcnthigh()
{
return rcnthigh;
}
public void setRcntlow(BigDecimal rcntlow)
public void setRcntlow(String rcntlow)
{
this.rcntlow = rcntlow;
}
public BigDecimal getRcntlow()
public String getRcntlow()
{
return rcntlow;
}
public void setAmountmv(BigDecimal amountmv)
{
this.amountmv = amountmv;
}
public BigDecimal getAmountmv()
{
return amountmv;
}
public void setAmountliqmv(BigDecimal amountliqmv)
{
this.amountliqmv = amountliqmv;
}
public BigDecimal getAmountliqmv()
{
return amountliqmv;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@ -357,7 +390,7 @@ public class StockIndex extends BaseEntity
.append("pettmMid", getPettmMid())
.append("liqmv", getLiqmv())
.append("rcnthigh", getRcnthigh())
.append("rcntlow", getRcntlow())
.append("rcntlow", getRcntlow()).append("amountliqmv", getAmountmv())
.toString();
}
}

@ -28,6 +28,8 @@ public class Stocks extends BaseEntity
@Excel(name = "证券代码")
private String code;
public String value;
/** 股票名称 */
@Excel(name = "证券名称")
private String name;
@ -130,9 +132,42 @@ public class Stocks extends BaseEntity
//查询使用,动量类型 1、10、20; 涨跌分布类型: all(全部), sh(上证), sz(深圳) ,ge(创业板),star(科创板)
private String type;
//财务数据
private StockFinancial stockFinancial;
/** 基础数据信息 */
private List<StockBasic> stockBasicList;
/** 3日区间涨跌幅 */
@Excel(name = "3日区间涨跌幅")
private BigDecimal differrange3;
/** 5日区间涨跌幅 */
@Excel(name = "5日区间涨跌幅")
private BigDecimal differrange5;
/** 15日区间涨跌幅 */
@Excel(name = "15日区间涨跌幅")
private BigDecimal differrange15;
/** 30日区间涨跌幅 */
@Excel(name = "30日区间涨跌幅")
private BigDecimal differrange30;
private BigDecimal calLimitTradeDates;
private BigDecimal limitTradeDates;
//排序字段
private String orderParam;
public void setOrderParam(String orderParam)
{
this.orderParam = orderParam;
}
public String getOrderParam()
{
return orderParam;
}
public void setType(String type)
{
this.type = type;
@ -395,6 +430,69 @@ public class Stocks extends BaseEntity
return blemindsCount;
}
public void setStockFinancial(StockFinancial stockFinancial)
{
this.stockFinancial = stockFinancial;
}
public StockFinancial getStockFinancial()
{
return this.stockFinancial;
}
public void setDifferrange3(BigDecimal differrange3)
{
this.differrange3 = differrange3;
}
public BigDecimal getDifferrange3()
{
return differrange3;
}
public void setDifferrange5(BigDecimal differrange5)
{
this.differrange5 = differrange5;
}
public BigDecimal getDifferrange5()
{
return differrange5;
}
public void setDifferrange15(BigDecimal differrange15)
{
this.differrange15 = differrange15;
}
public BigDecimal getDifferrange15()
{
return differrange15;
}
public void setDifferrange30(BigDecimal differrange30)
{
this.differrange30 = differrange30;
}
public BigDecimal getDifferrange30()
{
return differrange30;
}
public void setCalLimitTradeDates(BigDecimal calLimitTradeDates)
{
this.calLimitTradeDates = calLimitTradeDates;
}
public BigDecimal getCalLimitTradeDates()
{
return calLimitTradeDates;
}
public void setLimitTradeDates(BigDecimal limitTradeDates)
{
this.limitTradeDates = limitTradeDates;
}
public BigDecimal getLimitTradeDates()
{
return limitTradeDates;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@ -414,6 +512,10 @@ public class Stocks extends BaseEntity
.append("differrange10", getDifferrange10())
.append("differrange20", getDifferrange20())
.append("differrange60", getDifferrange60())
.append("differrange3", getDifferrange3())
.append("differrange5", getDifferrange5())
.append("differrange15", getDifferrange15())
.append("differrange30", getDifferrange30())
.append("avgVolume20", getAvgVolume20())
.append("freefloatMarketValue", getFreefloatMarketValue())
.append("totalMarketValue", getTotalMarketValue())

@ -87,6 +87,22 @@ public class StocksInTrend extends BaseEntity
@Excel(name = "60日区间最大回撤")
private BigDecimal backdifferrange60;
/** 3日区间涨跌幅 */
@Excel(name = "3日区间涨跌幅")
private BigDecimal differrange3;
/** 5日区间涨跌幅 */
@Excel(name = "5日区间涨跌幅")
private BigDecimal differrange5;
/** 15日区间涨跌幅 */
@Excel(name = "15日区间涨跌幅")
private BigDecimal differrange15;
/** 30日区间涨跌幅 */
@Excel(name = "30日区间涨跌幅")
private BigDecimal differrange30;
public void setId(Long id)
{
this.id = id;
@ -238,6 +254,42 @@ public class StocksInTrend extends BaseEntity
return backdifferrange60;
}
public void setDifferrange3(BigDecimal differrange3)
{
this.differrange3 = differrange3;
}
public BigDecimal getDifferrange3()
{
return differrange3;
}
public void setDifferrange5(BigDecimal differrange5)
{
this.differrange5 = differrange5;
}
public BigDecimal getDifferrange5()
{
return differrange5;
}
public void setDifferrange15(BigDecimal differrange15)
{
this.differrange15 = differrange15;
}
public BigDecimal getDifferrange15()
{
return differrange15;
}
public void setDifferrange30(BigDecimal differrange30)
{
this.differrange30 = differrange30;
}
public BigDecimal getDifferrange30()
{
return differrange30;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

@ -34,6 +34,7 @@ public class StocksNewRecord extends BaseEntity
private String isHigh;
/** 是否300天新低 */
// @Excel(name = "近期创阶段新低")
@Excel(name = "近期创阶段新低")
private String isLow;

@ -31,6 +31,9 @@ public class TrendForVue extends BaseEntity
private List<String> sortDataList;
//原始数据
private List<String> rawDataList;
public void setTitle(String title)
{
this.title = title;
@ -67,6 +70,15 @@ public class TrendForVue extends BaseEntity
this.sortDataList = sortdataList;
}
public List<String> getRawDataList()
{
return this.rawDataList;
}
public void setRawDataList(List<String> rawDataList)
{
this.rawDataList = rawDataList;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

@ -0,0 +1,80 @@
package com.ruoyi.stocksystem.service;
import java.util.List;
import com.ruoyi.stocksystem.domain.StockFinancial;
import com.ruoyi.stocksystem.domain.Stocks;
/**
* AService
*
* @author lxy
* @date 2022-05-05
*/
public interface IStockFinancialService
{
/**
* A
*
* @param id A
* @return A
*/
public StockFinancial selectStockFinancialById(Long id);
/**
* A
*
* @param stockFinancial A period code
* @return A
*/
public List<StockFinancial> selectStockFinancialByPeriod(StockFinancial stockFinancial);
/**
* A
*
* @param stockFinancial A
* @return A
*/
public List<StockFinancial> selectStockFinancialList(StockFinancial stockFinancial);
/**
* A
*
* @param stockFinancial A
* @return
*/
public int insertStockFinancial(StockFinancial stockFinancial);
/**
* A
*
* @param stockFinancial A
* @return
*/
public int updateStockFinancial(StockFinancial stockFinancial);
/**
* A
*
* @param ids A
* @return
*/
public int deleteStockFinancialByIds(Long[] ids);
/**
* A
*
* @param id A
* @return
*/
public int deleteStockFinancialById(Long id);
/**
*
*
* @param StockFinancialList
* @param isUpdateSupport
* @param operName
* @return
*/
public String importStock(List<StockFinancial> StockFinancialList, Boolean isUpdateSupport, String operName, String sTradeDay);
}

@ -2,6 +2,7 @@ package com.ruoyi.stocksystem.service;
import java.util.List;
import com.ruoyi.stocksystem.domain.StockIndex;
import com.ruoyi.stocksystem.domain.Stocks;
/**
* Service
@ -27,6 +28,33 @@ public interface IStockIndexService
*/
public List<StockIndex> selectStockIndexList(StockIndex stockIndex);
/**
*
*
* @param stockIndex
* @return
*/
public List<StockIndex> selectStockIndexTradeVolumeList(StockIndex stockIndex);
/**
*
*
* @param stockIndex
* @return
*/
public List<StockIndex> selectStockIndexRecordsList(StockIndex stockIndex);
/**
*
*
* @param stockIndexList
* @param isUpdateSupport
* @param operName
* @return
*/
public String importStockIndexs(List<StockIndex> stockIndexList, Boolean isUpdateSupport, String operName, String sTradeDay);
/**
*
*

@ -67,6 +67,14 @@ public interface IStocksNewRecordService
*/
public List<StocksNewRecord> selectGroupStocksNewRecord(StocksNewRecord stocksNewRecord);
/**
*
*
* @param stocksNewRecord
* @return
*/
public List<StocksNewRecord> selectGroupStocksNewRecordAll(StocksNewRecord stocksNewRecord);
/**
*
*

@ -38,6 +38,22 @@ public interface IStocksService
*/
public List<Stocks> selectStocksListB(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStrongStocksList(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectLimitStocksList(Stocks stocks);
/**
*
*
@ -46,6 +62,14 @@ public interface IStocksService
*/
public List<Stocks> selectStocksListSort(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStocksListSortA(Stocks stocks);
/**
* 2
*
@ -62,6 +86,14 @@ public interface IStocksService
*/
public int insertStocks(Stocks stocks);
/**
* ,
*
* @param stocks
* @return
*/
public int insertStocksTmp(Stocks stocks);
/**
*
*
@ -161,6 +193,14 @@ public interface IStocksService
*/
public List<Stocks> selectStockHistory(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStockIndexHistory(Stocks stocks);
/**
*
*
@ -168,4 +208,20 @@ public interface IStocksService
* @return
*/
public List<Stocks> selectStocksForHigh(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStocksDataForQuery(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStockIndexsDataForQuery(Stocks stocks);
}

@ -0,0 +1,208 @@
package com.ruoyi.stocksystem.service.impl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
import com.ruoyi.stocksystem.domain.StocksLimit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.stocksystem.mapper.StockFinancialMapper;
import com.ruoyi.stocksystem.domain.StockFinancial;
import com.ruoyi.stocksystem.service.IStockFinancialService;
import javax.validation.Validator;
/**
* AService
*
* @author lxy
* @date 2022-05-05
*/
@Service
public class StockFinancialServiceImpl implements IStockFinancialService
{
@Autowired
private StockFinancialMapper stockFinancialMapper;
@Autowired
protected Validator validator;
/**
* A
*
* @param id A
* @return A
*/
@Override
public StockFinancial selectStockFinancialById(Long id)
{
return stockFinancialMapper.selectStockFinancialById(id);
}
/**
* A
*
* @param stockFinancial A period code
* @return A
*/
@Override
public List<StockFinancial> selectStockFinancialByPeriod(StockFinancial stockFinancial)
{
return stockFinancialMapper.selectStockFinancialByPeriod(stockFinancial);
}
/**
* A
*
* @param stockFinancial A
* @return A
*/
@Override
public List<StockFinancial> selectStockFinancialList(StockFinancial stockFinancial)
{
return stockFinancialMapper.selectStockFinancialList(stockFinancial);
}
/**
* A
*
* @param stockFinancial A
* @return
*/
@Override
public int insertStockFinancial(StockFinancial stockFinancial)
{
return stockFinancialMapper.insertStockFinancial(stockFinancial);
}
/**
* A
*
* @param stockFinancial A
* @return
*/
@Override
public int updateStockFinancial(StockFinancial stockFinancial)
{
return stockFinancialMapper.updateStockFinancial(stockFinancial);
}
/**
* A
*
* @param ids A
* @return
*/
@Override
public int deleteStockFinancialByIds(Long[] ids)
{
return stockFinancialMapper.deleteStockFinancialByIds(ids);
}
/**
* A
*
* @param id A
* @return
*/
@Override
public int deleteStockFinancialById(Long id)
{
return stockFinancialMapper.deleteStockFinancialById(id);
}
/**
*
*
* @param StockFinancial
* @param isUpdateSupport
* @param operName
* @return
*/
@Override
public String importStock(List<StockFinancial> StockFinancialList, Boolean isUpdateSupport, String operName, String sTradeDay)
{
if(sTradeDay.isEmpty())
{
throw new ServiceException("导入行情数据时,交易日期不能为空!");
}
if (StringUtils.isNull(StockFinancialList) || StockFinancialList.size() == 0)
{
throw new ServiceException("导入行情数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM
Date tradeDay = null;
try
{
tradeDay = simpleDateFormat.parse(sTradeDay);
}catch (ParseException e) {
e.printStackTrace();
}
if(tradeDay == null)
{
throw new ServiceException("交易日期格式异常!");
}
for (StockFinancial stockFinancial : StockFinancialList)
{
try
{
if (!StringUtils.isNull(stockFinancial))
{
if(StringUtils.isNull(stockFinancial.getCode()))
continue;
//不存在,进行导入
BeanValidators.validateWithException(validator, stockFinancial);
stockFinancial.setPeriod(tradeDay);
this.insertStockFinancial(stockFinancial);
successNum++;
System.out.println("<br/>" + successNum + "、股票代码 " + stockFinancial.getCode() + " 导入成功");
successMsg.append("<br/>" + successNum + "、股票代码 " + stockFinancial.getCode() + " 导入成功");
}
else if (isUpdateSupport)
{
// //存在,进行更新
// BeanValidators.validateWithException(validator, user);
// user.setUpdateBy(operName);
// this.updateUser(user);
// successNum++;
// successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
failureNum++;
failureMsg.append("<br/>" + failureNum + "、股票代码 " + stockFinancial.getCode() + " 已存在");
}
else
{
//已存在,不进行操作
failureNum++;
failureMsg.append("<br/>" + failureNum + "、股票代码 " + stockFinancial.getCode() + " 已存在");
}
}
catch (Exception e)
{
failureNum++;
String msg = "<br/>" + failureNum + "、股票代码 " + stockFinancial.getCode() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
// log.error(msg, e);
}
}
if (failureNum > 0)
{
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
}

@ -1,12 +1,23 @@
package com.ruoyi.stocksystem.service.impl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
import com.ruoyi.stocksystem.domain.Stocks;
import com.ruoyi.stocksystem.domain.StocksLimit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.stocksystem.mapper.StockIndexMapper;
import com.ruoyi.stocksystem.domain.StockIndex;
import com.ruoyi.stocksystem.service.IStockIndexService;
import javax.validation.Validator;
/**
* Service
*
@ -19,6 +30,9 @@ public class StockIndexServiceImpl implements IStockIndexService
@Autowired
private StockIndexMapper stockIndexMapper;
@Autowired
protected Validator validator;
/**
*
*
@ -43,6 +57,30 @@ public class StockIndexServiceImpl implements IStockIndexService
return stockIndexMapper.selectStockIndexList(stockIndex);
}
/**
*
*
* @param stockIndex
* @return
*/
@Override
public List<StockIndex> selectStockIndexTradeVolumeList(StockIndex stockIndex)
{
return stockIndexMapper.selectStockIndexTradeVolumeList(stockIndex);
}
/**
*
*
* @param stockIndex
* @return
*/
@Override
public List<StockIndex> selectStockIndexRecordsList(StockIndex stockIndex)
{
return stockIndexMapper.selectStockIndexRecordsList(stockIndex);
}
/**
*
*
@ -90,4 +128,97 @@ public class StockIndexServiceImpl implements IStockIndexService
{
return stockIndexMapper.deleteStockIndexById(id);
}
/**
*
*
* @param stockIndexList
* @param isUpdateSupport
* @param operName
* @return
*/
@Override
public String importStockIndexs(List<StockIndex> stockIndexList, Boolean isUpdateSupport, String operName, String sTradeDay)
{
if(sTradeDay.isEmpty())
{
throw new ServiceException("导入行情数据时,交易日期不能为空!");
}
if (StringUtils.isNull(stockIndexList) || stockIndexList.size() == 0)
{
throw new ServiceException("导入行情数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//注意月份是MM
Date tradeDay = null;
try
{
tradeDay = simpleDateFormat.parse(sTradeDay);
}catch (ParseException e) {
e.printStackTrace();
}
if(tradeDay == null)
{
throw new ServiceException("交易日期格式异常!");
}
for (StockIndex stockIndex : stockIndexList)
{
try
{
if (!StringUtils.isNull(stockIndex))
{
if(StringUtils.isNull(stockIndex.getCode()))
continue;
if(StringUtils.isNull(stockIndex.getName()) || StringUtils.isNull(stockIndex.getOpen()) || StringUtils.isNull(stockIndex.getClose()))
continue;
//不存在,进行导入
BeanValidators.validateWithException(validator, stockIndex);
stockIndex.setTradeDay(tradeDay);
this.insertStockIndex(stockIndex);
successNum++;
System.out.println("<br/>" + successNum + "、指数代码 " + stockIndex.getCode() + " 导入成功");
successMsg.append("<br/>" + successNum + "、指数代码 " + stockIndex.getCode() + " 导入成功");
}
else if (isUpdateSupport)
{
// //存在,进行更新
// BeanValidators.validateWithException(validator, user);
// user.setUpdateBy(operName);
// this.updateUser(user);
// successNum++;
// successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
failureNum++;
failureMsg.append("<br/>" + failureNum + "、指数代码 " + stockIndex.getCode() + " 已存在");
}
else
{
//已存在,不进行操作
failureNum++;
failureMsg.append("<br/>" + failureNum + "、指数代码 " + stockIndex.getCode() + " 已存在");
}
}
catch (Exception e)
{
failureNum++;
String msg = "<br/>" + failureNum + "、指数代码 " + stockIndex.getCode() + " stockIndex: " + stockIndex.toString() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
// log.error(msg, e);
}
}
if (failureNum > 0)
{
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
}

@ -116,6 +116,18 @@ public class StocksNewRecordServiceImpl implements IStocksNewRecordService
return stocksNewRecordMapper.selectGroupStocksNewRecord(stocksNewRecord);
}
/**
*
*
* @param stocksNewRecord
* @return
*/
@Override
public List<StocksNewRecord> selectGroupStocksNewRecordAll(StocksNewRecord stocksNewRecord)
{
return stocksNewRecordMapper.selectGroupStocksNewRecordAll(stocksNewRecord);
}
/**
*

@ -87,6 +87,29 @@ public class StocksServiceImpl implements IStocksService
return stocksMapper.selectStocksListB(stocks);
}
/**
*
*
* @param stocks
* @return
*/
@Override
public List<Stocks> selectStrongStocksList(Stocks stocks)
{
return stocksMapper.selectStrongStocksList(stocks);
}
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectLimitStocksList(Stocks stocks)
{
return stocksMapper.selectLimitStocksList(stocks);
}
/**
*
*
@ -99,6 +122,18 @@ public class StocksServiceImpl implements IStocksService
return stocksMapper.selectStocksListSort(stocks);
}
/**
*
*
* @param stocks
* @return
*/
@Override
public List<Stocks> selectStocksListSortA(Stocks stocks)
{
return stocksMapper.selectStocksListSortA(stocks);
}
/**
*
*
@ -127,6 +162,22 @@ public class StocksServiceImpl implements IStocksService
return rows;
}
/**
* ,
*
* @param stocks
* @return
*/
@Transactional
@Override
public int insertStocksTmp(Stocks stocks)
{
int rows = stocksMapper.insertStocksTmp(stocks);
//todo 需要更新基础数据
// insertStockBasic(stocks);
return rows;
}
/**
*
*
@ -483,6 +534,18 @@ public class StocksServiceImpl implements IStocksService
return stocksMapper.selectStockHistory(stocks);
}
/**
*
*
* @param stocks
* @return
*/
@Override
public List<Stocks> selectStockIndexHistory(Stocks stocks)
{
return stocksMapper.selectStockIndexHistory(stocks);
}
/**
*
*
@ -494,4 +557,28 @@ public class StocksServiceImpl implements IStocksService
{
return stocksMapper.selectStocksForHigh(stocks);
}
/**
*
*
* @param stocks
* @return
*/
@Override
public List<Stocks> selectStocksDataForQuery(Stocks stocks)
{
return stocksMapper.selectStocksDataForQuery(stocks);
}
/**
*
*
* @param stocks
* @return
*/
@Override
public List<Stocks> selectStockIndexsDataForQuery(Stocks stocks)
{
return stocksMapper.selectStockIndexsDataForQuery(stocks);
}
}

@ -0,0 +1,70 @@
package com.ruoyi.stocksystem.mapper;
import java.util.List;
import com.ruoyi.stocksystem.domain.StockFinancial;
/**
* AMapper
*
* @author lxy
* @date 2022-05-05
*/
public interface StockFinancialMapper
{
/**
* A
*
* @param id A
* @return A
*/
public StockFinancial selectStockFinancialById(Long id);
/**
* A
*
* @param stockFinancial A period code
* @return A
*/
public List<StockFinancial> selectStockFinancialByPeriod(StockFinancial stockFinancial);
/**
* A
*
* @param stockFinancial A
* @return A
*/
public List<StockFinancial> selectStockFinancialList(StockFinancial stockFinancial);
/**
* A
*
* @param stockFinancial A
* @return
*/
public int insertStockFinancial(StockFinancial stockFinancial);
/**
* A
*
* @param stockFinancial A
* @return
*/
public int updateStockFinancial(StockFinancial stockFinancial);
/**
* A
*
* @param id A
* @return
*/
public int deleteStockFinancialById(Long id);
/**
* A
*
* @param ids
* @return
*/
public int deleteStockFinancialByIds(Long[] ids);
}

@ -27,6 +27,22 @@ public interface StockIndexMapper
*/
public List<StockIndex> selectStockIndexList(StockIndex stockIndex);
/**
*
*
* @param stockIndex
* @return
*/
public List<StockIndex> selectStockIndexTradeVolumeList(StockIndex stockIndex);
/**
*
*
* @param stockIndex
* @return
*/
public List<StockIndex> selectStockIndexRecordsList(StockIndex stockIndex);
/**
*
*

@ -45,6 +45,22 @@ public interface StocksMapper
*/
public List<Stocks> selectStocksListB(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStrongStocksList(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectLimitStocksList(Stocks stocks);
/**
*
*
@ -53,6 +69,15 @@ public interface StocksMapper
*/
public List<Stocks> selectStocksListSort(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStocksListSortA(Stocks stocks);
/**
* 2
*
@ -69,6 +94,14 @@ public interface StocksMapper
*/
public int insertStocks(Stocks stocks);
/**
* ,
*
* @param stocks
* @return
*/
public int insertStocksTmp(Stocks stocks);
/**
*
*
@ -182,6 +215,14 @@ public interface StocksMapper
*/
public List<Stocks> selectStockHistory(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStockIndexHistory(Stocks stocks);
/**
*
*
@ -190,4 +231,19 @@ public interface StocksMapper
*/
public List<Stocks> selectStocksForHigh(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStocksDataForQuery(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStockIndexsDataForQuery(Stocks stocks);
}

@ -66,4 +66,12 @@ public interface StocksNewRecordMapper
* @return
*/
public List<StocksNewRecord> selectGroupStocksNewRecord(StocksNewRecord stocksNewRecord);
/**
*
*
* @param stocksNewRecord
* @return
*/
public List<StocksNewRecord> selectGroupStocksNewRecordAll(StocksNewRecord stocksNewRecord);
}

@ -0,0 +1,101 @@
<?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.ruoyi.stocksystem.mapper.StockFinancialMapper">
<resultMap type="StockFinancial" id="StockFinancialResult">
<result property="id" column="id" />
<result property="code" column="code" />
<result property="period" column="period" />
<result property="jlrtbzzl" column="jlrtbzzl" />
<result property="jlrhbzzl" column="jlrhbzzl" />
<result property="jzcsylroe" column="jzcsylroe" />
<result property="epsbasic" column="epsbasic" />
<result property="jlr" column="jlr" />
<result property="jbmgsy" column="jbmgsy" />
<result property="mgjzc" column="mgjzc" />
</resultMap>
<sql id="selectStockFinancialVo">
select id, code, period, jlrtbzzl, jlrhbzzl, jzcsylroe, epsbasic, jlr, jbmgsy, mgjzc from stock_financial
</sql>
<select id="selectStockFinancialList" parameterType="StockFinancial" resultMap="StockFinancialResult">
<include refid="selectStockFinancialVo"/>
<where>
<if test="code != null and code != ''"> and code = #{code}</if>
<if test="period != null "> and period = #{period}</if>
<if test="jlrtbzzl != null "> and jlrtbzzl = #{jlrtbzzl}</if>
<if test="jlrhbzzl != null "> and jlrhbzzl = #{jlrhbzzl}</if>
<if test="jzcsylroe != null "> and jzcsylroe = #{jzcsylroe}</if>
<if test="epsbasic != null "> and epsbasic = #{epsbasic}</if>
<if test="jlr != null "> and jlr = #{jlr}</if>
<if test="jbmgsy != null "> and jbmgsy = #{jbmgsy}</if>
<if test="mgjzc != null "> and mgjzc = #{mgjzc}</if>
</where>
</select>
<select id="selectStockFinancialById" parameterType="Long" resultMap="StockFinancialResult">
<include refid="selectStockFinancialVo"/>
where id = #{id}
</select>
<insert id="insertStockFinancial" parameterType="StockFinancial" useGeneratedKeys="true" keyProperty="id">
insert into stock_financial
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="code != null and code != ''">code,</if>
<if test="period != null">period,</if>
<if test="jlrtbzzl != null">jlrtbzzl,</if>
<if test="jlrhbzzl != null">jlrhbzzl,</if>
<if test="jzcsylroe != null">jzcsylroe,</if>
<if test="epsbasic != null">epsbasic,</if>
<if test="jlr != null">jlr,</if>
<if test="jbmgsy != null">jbmgsy,</if>
<if test="mgjzc != null">mgjzc,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="code != null and code != ''">#{code},</if>
<if test="period != null">#{period},</if>
<if test="jlrtbzzl != null">#{jlrtbzzl},</if>
<if test="jlrhbzzl != null">#{jlrhbzzl},</if>
<if test="jzcsylroe != null">#{jzcsylroe},</if>
<if test="epsbasic != null">#{epsbasic},</if>
<if test="jlr != null">#{jlr},</if>
<if test="jbmgsy != null">#{jbmgsy},</if>
<if test="mgjzc != null">#{mgjzc},</if>
</trim>
</insert>
<update id="updateStockFinancial" parameterType="StockFinancial">
update stock_financial
<trim prefix="SET" suffixOverrides=",">
<if test="code != null and code != ''">code = #{code},</if>
<if test="period != null">period = #{period},</if>
<if test="jlrtbzzl != null">jlrtbzzl = #{jlrtbzzl},</if>
<if test="jlrhbzzl != null">jlrhbzzl = #{jlrhbzzl},</if>
<if test="jzcsylroe != null">jzcsylroe = #{jzcsylroe},</if>
<if test="epsbasic != null">epsbasic = #{epsbasic},</if>
<if test="jlr != null">jlr = #{jlr},</if>
<if test="jbmgsy != null">jbmgsy = #{jbmgsy},</if>
<if test="mgjzc != null">mgjzc = #{mgjzc},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteStockFinancialById" parameterType="Long">
delete from stock_financial where id = #{id}
</delete>
<delete id="deleteStockFinancialByIds" parameterType="String">
delete from stock_financial where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="selectStockFinancialByPeriod" parameterType="StockFinancial" resultMap="StockFinancialResult">
select id, code, period, jlrtbzzl, jlrhbzzl, jzcsylroe, epsbasic, jlr, jbmgsy, mgjzc from stock_financial
where code = #{code} and period &lt; #{period} ORDER BY period DESC
</select>
</mapper>

@ -29,6 +29,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="liqmv" column="liqmv" />
<result property="rcnthigh" column="rcnthigh" />
<result property="rcntlow" column="rcntlow" />
<result property="amountmv" column="amountmv" />
<result property="amountliqmv" column="amountliqmv" />
<result property="orderParam" column="orderParam" />
</resultMap>
<sql id="selectStockIndexVo">
@ -163,4 +166,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectStockIndexTradeVolumeList" parameterType="StockIndex" resultMap="StockIndexResult">
select code, name, trade_day,(amount/(select SUM(amount) as amounts from stock_index where trade_day = #{tradeDay}))/(liqmv/(select SUM(liqmv) as liqmv from stock_index where trade_day = #{tradeDay})) as amountliqmv,amount/mv as amountmv,amount,liqmv, mv,open, close, high, low, differRange, volume, limitupnum, limitdownnum, suspendnum, risenum, fallnum, flatnum, componentnum, pettm, pettm_mid, liqmv, rcnthigh, rcntlow
from stock_index where trade_day = #{tradeDay} and componentnum > 20 ORDER BY amountliqmv DESC
</select>
<select id="selectStockIndexRecordsList" parameterType="StockIndex" resultMap="StockIndexResult">
select code, name, trade_day, limitupnum, limitdownnum, suspendnum, risenum, fallnum, flatnum, componentnum, rcnthigh, rcntlow
from stock_index where trade_day = #{tradeDay} ORDER BY ${orderParam} DESC
</select>
</mapper>

@ -19,6 +19,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="differrange10" column="differrange10" />
<result property="differrange20" column="differrange20" />
<result property="differrange60" column="differrange60" />
<result property="differrange3" column="differrange3" />
<result property="differrange5" column="differrange5" />
<result property="differrange15" column="differrange15" />
<result property="differrange30" column="differrange30" />
</resultMap>
<resultMap type="Stocks" id="StocksResult">
@ -52,9 +56,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectStocksInTrendList" parameterType="StocksInTrend" resultMap="StocksInTrendResult">
<!-- <include refid="selectStocksInTrendVo"/>-->
select sit.id as id, sit.code as code , sit.trade_day as trade_day, sit.sort as sort, sit.type as type, s.blemind2 as blemind2 , s.blemind3 as blemind3, s.`name` as name,sks.open as open,sks.close as close, sks.differrange as differrange ,sks.differrange10 as differrange10 , sks.differrange20 as differrange20 ,sks.differrange60 as differrange60 from stocks_in_trend sit, stock_basis s,stocks sks
select sit.id as id, sit.code as code , sit.trade_day as trade_day, sit.sort as sort, sit.type as type, s.blemind2 as blemind2 , s.blemind3 as blemind3, s.`name` as name,sks.open as open,sks.close as close, sks.differrange as differrange ,sks.differrange10 as differrange10 , sks.differrange20 as differrange20 ,sks.differrange60 as differrange60,stm.differrange3 ,stm.differrange5,stm.differrange15,stm.differrange30 from stocks_in_trend sit, stock_basis s,stocks sks, stocks_tmp stm
<where>
sit.`code` = s.`code` and sit.`code` = sks.`code` and sks.trade_day = sit.trade_day
sit.`code` = s.`code` and sit.`code` = sks.`code` and sks.`code` = stm.`code` and stm.trade_day = sks.trade_day and sks.trade_day = sit.trade_day
<if test="code != null and code != ''"> and sks.code = #{code}</if>
<if test="name != null and name != ''"> and s.name = #{name}</if>
<if test="blemind2 != null and blemind2 != ''"> and s.blemind2 = #{blemind2}</if>

@ -26,6 +26,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="differrange10" column="differrange10" />
<result property="differrange20" column="differrange20" />
<result property="differrange60" column="differrange60" />
<result property="differrange3" column="differrange3" />
<result property="differrange5" column="differrange5" />
<result property="differrange15" column="differrange15" />
<result property="differrange30" column="differrange30" />
<result property="avgVolume20" column="avg_volume20" />
<result property="freefloatMarketValue" column="freefloat_market_value" />
<result property="totalMarketValue" column="total_market_value" />
@ -33,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="blemindCount" column="blemind_count" />
<result property="listdate" column="listdate" />
<result property="blemindsCount" column="blemindsCount" />
<result property="orderParam" column="orderParam" />
</resultMap>
<resultMap id="StocksStockBasicResult" type="Stocks" extends="StocksResult">
@ -65,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<!--
<select id="selectStocksListB" parameterType="Stocks" resultMap="StocksResult">
select a.code , a.trade_day , a.open, a.close, a.differrange, a.trade_days, a.volumn, a.amount, a.differrange10, a.differrange20, a.differrange60, a.avg_volume20, a.freefloat_market_value, a.total_market_value, a.agencies_hold,
b.name as name, b.blemind2 as blemind2, b.blemind3 as blemind3, b.listdate as listdate
@ -72,8 +78,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join stock_basis b on b.code = a.code
where a.trade_day = #{tradeDay}
</select>
-->
<select id="selectStocksListB" parameterType="Stocks" resultMap="StocksResult">
select a.code , a.trade_day , a.open, a.close, a.differrange, a.trade_days, a.volumn, a.amount, a.differrange10, a.differrange20, a.differrange60, a.differrange3, a.differrange5, a.differrange15, a.differrange30, a.avg_volume20, a.freefloat_market_value, a.total_market_value, a.agencies_hold,b.name as name, b.blemind2 as blemind2, b.blemind3 as blemind3, b.listdate as listdate from
(select s.code , s.trade_day , s.open, s.close, s.differrange, s.trade_days, s.volumn, s.amount, s.differrange10, s.differrange20, s.differrange60, st.differrange3, st.differrange5, st.differrange15, st.differrange30, s.avg_volume20, s.freefloat_market_value, s.total_market_value, s.agencies_hold
from stocks s,stocks_tmp st where s.`code` = st.`code` and s.trade_day = st.trade_day) a
left join stock_basis b on b.code = a.code
where a.trade_day = #{tradeDay}
</select>
<select id="selectStocksListSort" parameterType="Stocks" resultMap="StocksResult">
<select id="selectStrongStocksList" parameterType="Stocks" resultMap="StocksResult">
select trade_day , code,islimit, isdrop from stocks where trade_day BETWEEN #{stradeDay} and #{tradeDay} and islimit = #{islimit} and isdrop = #{isdrop} and trade_days > 30 ORDER BY code ,trade_day DESC;
</select>
<select id="selectLimitStocksList" parameterType="Stocks" resultMap="StocksResult">
select trade_day , code,islimit, isdrop from stocks where trade_day = #{tradeDay} and islimit = #{islimit} and isdrop = #{isdrop} ORDER BY code DESC;
</select>
<select id="selectStocksListSortA" parameterType="Stocks" resultMap="StocksResult">
select a.code , a.trade_day , a.open, a.close, a.differrange, a.trade_days, a.volumn, a.amount, a.differrange10, a.differrange20, a.differrange60, a.avg_volume20, a.freefloat_market_value, a.total_market_value, a.agencies_hold,
b.name as name, b.blemind2 as blemind2, b.blemind3 as blemind3, b.listdate as listdate
from stocks a
@ -88,10 +110,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<select id="selectStocksListSort" parameterType="Stocks" resultMap="StocksResult">
select a.code , a.trade_day , a.open, a.close, a.differrange, a.trade_days, a.volumn, a.amount, a.differrange10, a.differrange20, a.differrange60, a.differrange3, a.differrange5, a.differrange15, a.differrange30, a.avg_volume20, a.freefloat_market_value, a.total_market_value, a.agencies_hold,b.name as name, b.blemind2 as blemind2, b.blemind3 as blemind3, b.listdate as listdate from
(select s.code , s.trade_day , s.open, s.close, s.differrange, s.trade_days, s.volumn, s.amount, s.differrange10, s.differrange20, s.differrange60, st.differrange3, st.differrange5, st.differrange15, st.differrange30, s.avg_volume20, s.freefloat_market_value, s.total_market_value, s.agencies_hold
from stocks s,stocks_tmp st where s.`code` = st.`code` and s.trade_day = st.trade_day) a
left join stock_basis b on b.code = a.code
<where>
<if test="tradeDay != null "> and a.trade_day = #{tradeDay}</if>
<if test="tradeDays != null "> and a.trade_days >= #{tradeDays}</if>
<if test="differrange10 != null "> and a.differrange10 = #{differrange10}</if>
<if test="differrange20 != null "> and a.differrange20 = #{differrange20}</if>
<if test="differrange60 != null "> and a.differrange60 = #{differrange60}</if>
<if test="agenciesHold != null "> and a.agencies_hold >= #{agenciesHold}</if>
</where>
order by ${orderParam} desc
</select>
<select id="selectGroupStocksList" parameterType="Stocks" resultMap="StocksResult">
select blemind2 ,COUNT(blemind2) as blemind_count from (select s.code, sb.blemind2 as blemind2 from stocks s, stock_basis sb WHERE s.`code` = sb.`code` and s.trade_day = #{tradeDay}) temp GROUP BY blemind2 ORDER BY blemind_count DESC
</select>
<!--
<select id="selectStocksById" parameterType="Long" resultMap="StocksStockBasicResult">
select a.id, a.code, a.trade_day, a.open, a.close, a.differrange, a.trade_days, a.volumn, a.amount, a.differrange10, a.differrange20, a.differrange60, a.avg_volume20, a.freefloat_market_value, a.total_market_value, a.agencies_hold,
b.id as sub_id, b.code as sub_code, b.name as sub_name, b.blemind2 as sub_blemind2, b.blemind3 as sub_blemind3, b.listdate as sub_listdate
@ -99,6 +138,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join stock_basis b on b.code = a.id
where a.id = #{id}
</select>
-->
<select id="selectStocksById" parameterType="Long" resultMap="StocksStockBasicResult">
select a.code , a.trade_day , a.open, a.close, a.differrange, a.trade_days, a.volumn, a.amount, a.differrange10, a.differrange20, a.differrange60, a.differrange3, a.differrange5, a.differrange15, a.differrange30, a.avg_volume20, a.freefloat_market_value, a.total_market_value, a.agencies_hold,b.name as name, b.blemind2 as blemind2, b.blemind3 as blemind3, b.listdate as listdate from
(select s.code , s.trade_day , s.open, s.close, s.differrange, s.trade_days, s.volumn, s.amount, s.differrange10, s.differrange20, s.differrange60, st.differrange3, st.differrange5, st.differrange15, st.differrange30, s.avg_volume20, s.freefloat_market_value, s.total_market_value, s.agencies_hold
from stocks s,stocks_tmp st where s.`code` = st.`code` and s.trade_day = st.trade_day) a
left join stock_basis b on b.code = a.id
where a.id = #{id}
</select>
<select id="selectStocksByCode" parameterType="Stocks" resultMap="StocksResult">
select id, code, trade_day, open, close, differrange, trade_days, volumn, amount, differrange10, differrange20, differrange60, avg_volume20, freefloat_market_value, total_market_value, agencies_hold from stocks where code = #{code} and trade_day = #{tradeDay}
@ -264,11 +311,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where sl.`code` = sb.`code` and sl.trade_day = #{tradeDay} and sl.isdrop=#{isdrop} and sl.islimit=#{islimit} GROUP BY blemind2 ORDER BY blemindsCount DESC limit 10;
</select>
<!-- <select id="selectStockHistory" parameterType="Stocks" resultMap="StocksResult">-->
<!-- select trade_day,code,open,close,high,low, volumn,differrange from stocks where trade_day BETWEEN '2021-01-01' and #{tradeDay} and `code`=#{code} ORDER BY trade_day desc;-->
<!-- </select>-->
<select id="selectStockHistory" parameterType="Stocks" resultMap="StocksResult">
select trade_day,code,open,close,high,low, volumn,differrange from stocks where trade_day BETWEEN '2021-01-01' and #{tradeDay} and `code`=#{code} ORDER BY trade_day desc;
select s.trade_day as trade_day,s.code as code,s.open as open,s.close as close,s.high as high,s.low as low, s.volumn as volumn,s.differrange as differrange,sb.blemind2 as blemind2,sb.blemind3 as blemind3 from stocks s,stock_basis sb where s.code = sb.`code` and s.trade_day BETWEEN '2021-01-01' and #{tradeDay} and s.code=#{code} ORDER BY s.trade_day desc;
</select>
<!--获取指数历史数据-->
<select id="selectStockIndexHistory" parameterType="Stocks" resultMap="StocksResult">
SELECT
s.trade_day AS trade_day,
s.CODE AS CODE,
s.OPEN AS OPEN,
s.CLOSE AS CLOSE,
s.high AS high,
s.low AS low,
s.volume AS volumn,
s.differrange AS differrange
FROM
stock_index s
WHERE
s.trade_day BETWEEN '2021-01-01' and #{tradeDay} and s.name=#{blemind2} ORDER BY s.trade_day desc;
</select>
<select id="selectStocksForHigh" parameterType="Stocks" resultMap="StocksResult">
select trade_day,code,open,MAX(close) as close,high,low,differrange20 from stocks where trade_day BETWEEN #{stradeDay} and #{tradeDay} GROUP BY code ORDER BY differrange20 desc;
</select>
<!--插入到stocks_tmp表中的数据-->
<insert id="insertStocksTmp" parameterType="Stocks" useGeneratedKeys="true" keyProperty="id">
insert into stocks_tmp
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="code != null and code != ''">code,</if>
<if test="tradeDay != null">trade_day,</if>
<if test="differrange3 != null">differrange3,</if>
<if test="differrange5 != null">differrange5,</if>
<if test="differrange15 != null">differrange15,</if>
<if test="differrange30 != null">differrange30,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="code != null and code != ''">#{code},</if>
<if test="tradeDay != null">#{tradeDay},</if>
<if test="differrange3 != null">#{differrange3},</if>
<if test="differrange5 != null">#{differrange5},</if>
<if test="differrange15 != null">#{differrange15},</if>
<if test="differrange30 != null">#{differrange30},</if>
</trim>
</insert>
<select id="selectStocksDataForQuery" parameterType="Stocks" resultMap="StocksResult">
select code,name from stock_basis;
</select>
<select id="selectStockIndexsDataForQuery" parameterType="Stocks" resultMap="StocksResult">
select DISTINCT code,name from stock_index;
</select>
</mapper>

@ -75,4 +75,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select sb.blemind2 as blemind2 ,COUNT(blemind2) as blemindsCount from stocks_new_record sl,stock_basis sb
where sl.`code` = sb.`code` and sl.trade_day = #{tradeDay} and sl.isHigh=#{isHigh} and sl.isLow=#{isLow} GROUP BY blemind2 ORDER BY blemindsCount DESC limit 10;
</select>
<select id="selectGroupStocksNewRecordAll" parameterType="StocksNewRecord" resultMap="StocksNewRecordResult">
select sb.blemind2 as blemind2 ,COUNT(blemind2) as blemindsCount,sl.isHigh as isHigh,sl.isLow as isLow from stocks_new_record sl,stock_basis sb
where sl.`code` = sb.`code` and sl.trade_day = #{tradeDay} GROUP BY blemind2 ORDER BY blemindsCount DESC ;
</select>
</mapper>
Loading…
Cancel
Save