迁移分支

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", public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework.jndi" }; "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) 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); Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count; return count == null ? 0 : count;
} }
@ -213,7 +215,7 @@ public class RedisCache
* Hash * Hash
* *
* @param key * @param key
* @param mapkey * @param hkey
*/ */
public void delCacheMapValue(final String key, final String hkey) public void delCacheMapValue(final String key, final String hkey)
{ {

@ -278,6 +278,23 @@ public class ExcelUtil<T>
{ {
fieldsMap.put(column, objects); 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++) for (int i = titleNum + 1; i <= rows; i++)
{ {
@ -1282,6 +1299,10 @@ public class ExcelUtil<T>
else if (cell.getCellType() == CellType.STRING) else if (cell.getCellType() == CellType.STRING)
{ {
val = cell.getStringCellValue(); val = cell.getStringCellValue();
if("——".equals(val))
{
val = new BigDecimal("0");
}
} }
else if (cell.getCellType() == CellType.BOOLEAN) else if (cell.getCellType() == CellType.BOOLEAN)
{ {

@ -45,7 +45,7 @@ export function listWarningStocks(query) {
}) })
} }
// 查询警告个股列表 // 查询涨跌分布
export function listStocksDistribution(query) { export function listStocksDistribution(query) {
return request({ return request({
url: '/stocksystem/stocks/distribution', 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() { export function getLatestTradeDay() {
return request({ return request({
@ -81,3 +90,64 @@ export function listGroupNewRecord(query) {
params: 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) { export function listSectionByBlemind(query) {
return request({ return request({
@ -27,7 +72,7 @@ export function listSectionByBlemind(query) {
}) })
} }
// 查询动量个股列表 // 查询个股历史k线数据
export function listStockHistory(query) { export function listStockHistory(query) {
return request({ return request({
url: '/stocksystem/stocks/stockHistory', 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) { export function getTrends(id) {
return request({ return request({

@ -2,6 +2,119 @@
<el-dialog :title="title" :visible.sync="open" width="60%" heigh="60%" append-to-body> <el-dialog :title="title" :visible.sync="open" width="60%" heigh="60%" append-to-body>
<div class="body"> <div class="body">
<div ref="stockK" style="height: 500px"></div> <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> </div>
</el-dialog> </el-dialog>
</template> </template>
@ -14,20 +127,33 @@ export default {
name: "Kdialog", name: "Kdialog",
props: { props: {
/* 标题 */ /* 标题 */
title: { // title: {
type: String, // type: String,
default: "测试k对话框", // default: "k",
}, // },
/* 是否显示 */ /* 是否显示 */
open: { // open: {
type: Boolean, // type: Boolean,
default: false, // default: false,
} // }
}, },
data() { data() {
return { return {
open:false, 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:{ methods:{
@ -41,22 +167,63 @@ export default {
console.log('datas: ' ,datas); console.log('datas: ' ,datas);
const data = splitData(datas); const data = splitData(datas);
console.log('data0 : ', data); 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) { function splitData(rawData) {
let categoryData = []; let categoryData = [];
let values = []; let values = [];
let volumes = []; let volumes = [];
let tblemind2 = [];
let tblemind3 = [];
let tjlr = [];
let tjlrtbzz = [];
for (let i = 0; i < rawData.length; i++) { for (let i = 0; i < rawData.length; i++) {
categoryData.push(rawData[i].splice(0, 1)[0]); categoryData.push(rawData[i].splice(0, 1)[0]);
values.push(rawData[i]); values.push(rawData[i]);
volumes.push([i, rawData[i][4], rawData[i][0] > rawData[i][1] ? 1 : -1]); 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 { return {
categoryData: categoryData, categoryData: categoryData,
values: values, 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) { function calculateMA(dayCount) {
console.log('calculateMA : dayCount : ', dayCount, data); console.log('calculateMA : dayCount : ', dayCount, data);
var result = []; var result = [];
@ -69,7 +236,7 @@ export default {
for (var j = 0; j < dayCount; j++) { for (var j = 0; j < dayCount; j++) {
sum += +data.values[i - j][1]; sum += +data.values[i - j][1];
} }
result.push(+(sum / dayCount).toFixed(3)); result.push(+(sum / dayCount).toFixed(2));
} }
console.log('after calculateMA : result : ', result); console.log('after calculateMA : result : ', result);
return result; return result;
@ -250,15 +417,16 @@ export default {
xAxisIndex: [0, 1], xAxisIndex: [0, 1],
start: 0, start: 0,
end: 100 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: [ 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 Kdialog from "@/components/Kdialog";
//板块对话框 //板块对话框
import TrendStocksDialog from "@/components/TrendStocksDialog"; import TrendStocksDialog from "@/components/TrendStocksDialog";
//涨跌停、新高新低对话框
import NegativeDialog from "@/components/NegativeDialog";
// 全局方法挂载 // 全局方法挂载
Vue.prototype.getDicts = getDicts Vue.prototype.getDicts = getDicts
@ -63,6 +65,7 @@ Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview) Vue.component('ImagePreview', ImagePreview)
Vue.component('Kdialog', Kdialog) Vue.component('Kdialog', Kdialog)
Vue.component('TrendStocksDialog', TrendStocksDialog) Vue.component('TrendStocksDialog', TrendStocksDialog)
Vue.component('NegativeDialog', NegativeDialog)
Vue.use(directive) Vue.use(directive)
Vue.use(plugins) Vue.use(plugins)

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

@ -1,32 +1,39 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> <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-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" v-model="queryParams.code"
placeholder="请输入股票代码" placeholder="请输入股票代码"
clearable
size="small" size="small"
@keyup.enter.native="handleQuery" :fetch-suggestions="querySearchAsync"
/> @select="handleSelect"
></el-autocomplete>
</el-form-item> </el-form-item>
<el-form-item label="股票名称" prop="name"> <el-form-item label="股票名称" prop="name">
<el-input <el-autocomplete
v-model="queryParams.name" v-model="queryParams.name"
placeholder="请输入股票名称" placeholder="请输入股票名称"
clearable
size="small" size="small"
@keyup.enter.native="handleQuery" :fetch-suggestions="queryNameSearchAsync"
@select="handleNameSelect"
/> />
</el-form-item> </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-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <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-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 v-loading="loading" :data="bookList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />--> <!-- <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"> <el-table-column label="交易日期" align="center" prop="tradeDay" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </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="operate" />
<el-table-column label="成交价格" align="center" prop="dealPrice" /> <el-table-column label="成交价格" align="center" prop="dealPrice" />
<el-table-column label="成交量" align="center" prop="volumn" /> <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-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="auto" label-position="left">
<el-form-item label="股票代码" prop="code"> <el-row>
<el-input v-model="form.code" placeholder="请输入股票代码" /> <el-col :xs="24" :sm="24" :md="12" :lg="8">
</el-form-item> <el-form-item label="交易日期" prop="tradeDay">
<el-form-item label="股票名称" prop="name"> <el-date-picker clearable size="small"
<el-input v-model="form.name" placeholder="请输入股票名称" /> v-model="form.tradeDay"
</el-form-item> type="date"
<el-form-item label="交易日期" prop="tradeDay"> value-format="yyyy-MM-dd"
<el-date-picker clearable size="small" placeholder="选择交易日期">
v-model="form.tradeDay" </el-date-picker>
type="date" </el-form-item>
value-format="yyyy-MM-dd" </el-col>
placeholder="选择交易日期"> <el-col :xs="24" :sm="24" :md="12" :lg="8">
</el-date-picker> <el-form-item label="股票代码" prop="code">
</el-form-item> <el-input v-model="form.code" placeholder="请输入股票代码" />
<el-form-item label="操作" prop="operate"> </el-form-item>
<el-input v-model="form.operate" placeholder="请输入操作" /> </el-col>
</el-form-item> <el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="成交价格" prop="dealPrice"> <el-form-item label="操作" prop="operate">
<el-input v-model="form.dealPrice" placeholder="请输入成交价格" /> <el-input v-model="form.operate" placeholder="请输入操作" />
</el-form-item> </el-form-item>
<el-form-item label="成交量" prop="volumn"> </el-col>
<el-input v-model="form.volumn" placeholder="请输入成交量" /> </el-row>
</el-form-item> <el-row>
<el-form-item label="成交额" prop="amount"> <el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-input v-model="form.amount" placeholder="请输入成交额" /> <el-form-item label="成交量" prop="volumn">
</el-form-item> <el-input v-model="form.volumn" placeholder="请输入成交量" />
<el-form-item label="印花税" prop="tax"> </el-form-item>
<el-input v-model="form.tax" placeholder="请输入印花税" /> </el-col>
</el-form-item> <el-col :xs="24" :sm="24" :md="12" :lg="8">
<el-form-item label="手续费" prop="fee"> <el-form-item label="成交价格" prop="dealPrice">
<el-input v-model="form.fee" placeholder="请输入手续费" /> <el-input v-model="form.dealPrice" placeholder="请输入成交价格" />
</el-form-item> </el-form-item>
<el-form-item label="其他费用" prop="other"> </el-col>
<el-input v-model="form.other" placeholder="请输入其他费用" /> <el-col :xs="24" :sm="24" :md="12" :lg="8">
</el-form-item> <el-form-item label="成交额" prop="amount">
<el-form-item label="交易逻辑" prop="dealLogic"> <el-input v-model="form.amount" placeholder="请输入成交额" />
<el-input type="textarea" v-model="form.dealLogic" placeholder="请输入其他费用" /> </el-form-item>
</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> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -172,6 +204,7 @@
<script> <script>
import { listBook, getBook, delBook, addBook, updateBook } from "@/api/booksystem/book"; import { listBook, getBook, delBook, addBook, updateBook } from "@/api/booksystem/book";
import {listStocksQueryData,listStocksNameQueryData} from "@/api/index";
export default { export default {
name: "Book", name: "Book",
@ -191,6 +224,10 @@ export default {
total: 0, total: 0,
// //
bookList: [], bookList: [],
// {code:"",name:""}
stocks_codes:[],
stocks_names:[],
// //
title: "", title: "",
// //
@ -210,7 +247,7 @@ export default {
fee: null, fee: null,
other: null, other: null,
preId: null, preId: null,
dealLogic: null dealLogic: null,
}, },
// //
form: {}, form: {},
@ -237,6 +274,14 @@ export default {
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
//
listStocksQueryData().then(response => {
this.stocks_codes = response.rows;
});
listStocksNameQueryData().then(response => {
this.stocks_names = response.rows;
});
}, },
// //
cancel() { cancel() {
@ -328,6 +373,50 @@ export default {
this.download('booksystem/book/export', { this.download('booksystem/book/export', {
...this.queryParams ...this.queryParams
}, `book_${new Date().getTime()}.xlsx`) }, `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> <span style="font-weight: bold;font-size: 14px;color: #333;">趋势板块</span>
</div> </div>
<el-tabs type="border-card" @tab-click="handleTrendsTabClicked"> <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 v-loading="trends20Data.loading" :data="trends20Data.dataList" @cell-click="handleClickTable20" stripe>
<el-table-column label="交易日期" align="center" prop="tradeDay" width="100"> <el-table-column label="交易日期" align="center" prop="tradeDay" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
@ -132,7 +134,9 @@
<el-table-column label="板块排名" align="center" prop="sort" /> <el-table-column label="板块排名" align="center" prop="sort" />
</el-table> </el-table>
</el-tab-pane> </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 v-loading="trends10Data.loading" :data="trends10Data.dataList" @cell-click="handleClickTable10" stripe>
<el-table-column label="交易日期" align="center" prop="tradeDay" width="100"> <el-table-column label="交易日期" align="center" prop="tradeDay" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
@ -144,7 +148,9 @@
<el-table-column label="板块排名" align="center" prop="sort" /> <el-table-column label="板块排名" align="center" prop="sort" />
</el-table> </el-table>
</el-tab-pane> </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 v-loading="trends1Data.loading" :data="trends1Data.dataList" @cell-click="handleClickTable1" stripe>
<el-table-column label="交易日期" align="center" prop="tradeDay" width="100"> <el-table-column label="交易日期" align="center" prop="tradeDay" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
@ -162,28 +168,37 @@
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;"> <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> <span style="font-weight: bold;font-size: 14px;color: #333;">涨跌停分布</span>
</div> </div>
<el-tabs type="border-card" @tab-click="handleLimitTabClicked"> <el-tabs type="border-card" @tab-click="handleLimitTabClicked" :before-leave="beforeLeave">
<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-1" style="border: 0px;"></el-icon> </span>
<el-table v-loading="limitData.loading" :data="limitData.dataList" stripe> <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="东财行业指数2级" align="center" prop="blemind2" width="120"/>
<el-table-column label="数量" align="center" prop="blemindsCount" /> <el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table> </el-table>
</el-tab-pane> </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 v-loading="dropData.loading" :data="dropData.dataList" stripe>
<el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/> <el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/>
<el-table-column label="数量" align="center" prop="blemindsCount" /> <el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table> </el-table>
</el-tab-pane> </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-tabs>
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="12" :lg="8"> <el-col :xs="24" :sm="24" :md="12" :lg="8">
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;"> <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> <span style="font-weight: bold;font-size: 14px;color: #333;">新高新低板块</span>
</div> </div>
<el-tabs type="border-card" @tab-click="handleNewRecordTabClicked"> <el-tabs type="border-card" @tab-click="handleNewRecordTabClicked" :before-leave="beforeLeave">
<el-tab-pane label="新高"> <!-- <el-tab-pane label="新高">-->
<el-table v-loading="newReordHighData.loading" :data="newReordHighData.dataList" stripe> <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">--> <!-- <el-table-column label="交易日期" align="center" prop="tradeDay" width="100">-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span>--> <!-- <span>{{ parseTime(scope.row.tradeDay, '{y}-{m}-{d}') }}</span>-->
@ -193,40 +208,141 @@
<el-table-column label="数量" align="center" prop="blemindsCount" /> <el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table> </el-table>
</el-tab-pane> </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 v-loading="newReordLowData.loading" :data="newReordLowData.dataList" stripe>
<el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/> <el-table-column label="东财行业指数2级" align="center" prop="blemind2" width="120"/>
<el-table-column label="数量" align="center" prop="blemindsCount" /> <el-table-column label="数量" align="center" prop="blemindsCount" />
</el-table> </el-table>
</el-tab-pane> </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-tabs>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :xs="24" :sm="24" :md="24" :lg="24"> <el-col :xs="24" :sm="24" :md="24" :lg="24">
<div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;"> <el-tabs>
<span style="font-weight: bold;font-size: 14px;color: #333;">趋势个股</span> <el-tab-pane>
</div> <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="trendStokcsDataList" stripe> <el-table v-loading="trendStocksDataLoading"
<el-table-column label="股票编码" align="center" prop="code" /> :data="trendStocksDataList"
<el-table-column label="股票名称" align="center" prop="name" /> @cell-click="handleTrendStockClickTable"sortable
<el-table-column label="涨跌幅" align="center" prop="differrange" sortable /> >
<el-table-column label="开盘价" align="center" prop="open" /> <el-table-column label="股票代码" align="center" prop="code" />
<el-table-column label="收盘价" align="center" prop="close" /> <el-table-column label="股票名称" align="center" prop="name" />
<el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable /> <el-table-column label="涨跌幅" align="center" prop="differrange" sortable />
<el-table-column label="10日最高点回撤" align="center" width="140px" prop="backDifferrange10" sortable /> <el-table-column label="开盘价" align="center" prop="open" />
<el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable /> <el-table-column label="收盘价" align="center" prop="close" />
<el-table-column label="20日最高点回撤" align="center" width="140px" prop="backDifferrange20" sortable /> <el-table-column label="3日涨跌幅" align="center" prop="differrange3" sortable />
<el-table-column label="2级行业" align="center" prop="blemind2" sortable /> <el-table-column label="5日涨跌幅" align="center" prop="differrange5" sortable />
<el-table-column label="3级行业" align="center" prop="blemind3" sortable /> <el-table-column label="10日涨跌幅" align="center" prop="differrange10" sortable />
</el-table> <el-table-column label="15日涨跌幅" align="center" prop="differrange15" sortable />
<pagination <el-table-column label="20日涨跌幅" align="center" prop="differrange20" sortable />
v-show="stocktotal>0" <el-table-column label="30日涨跌幅" align="center" prop="differrange30" sortable />
:total="stocktotal" <!-- <el-table-column label="净利润" align="center" prop="blemind2" sortable />-->
:page.sync="queryStockParams.pageNum" <!-- <el-table-column label="净利润增长" align="center" width="120px" prop="blemind2" sortable />-->
:limit.sync="queryStockParams.pageSize" <el-table-column label="3级行业" align="center" prop="blemind3" sortable />
@pagination="getStockList" </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-col>
</el-row> </el-row>
@ -253,21 +369,32 @@
<!-- </div>--> <!-- </div>-->
<!-- </el-dialog>--> <!-- </el-dialog>-->
<!-- <TrendStocksDialog-->
<!-- :tradeDay = "this.queryParams.tradeDay"-->
<!-- ref="trendDialog"-->
<!-- />-->
<TrendStocksDialog <TrendStocksDialog
:tradeDay = "this.queryParams.tradeDay"
ref="trendDialog" ref="trendDialog"
/> />
<!--个股k线图对话框--> <!--个股k线图对话框-->
<!-- <kdialog-->
<!-- :title="stocksDialog.title"-->
<!-- ref="stockK"-->
<!-- />-->
<kdialog <kdialog
:title="stocksDialog.title"
ref="stockK" ref="stockK"
/> />
<NegativeDialog
:title="stocksDialog.title"
ref="stocksNegativeDialog"
/>
</div> </div>
</template> </template>
<script> <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 echarts from "echarts";
import {listTrendsStocks} from "@/api"; import {listTrendsStocks} from "@/api";
import {listStockHistory} from "@/api/stocksystem/trends"; import {listStockHistory} from "@/api/stocksystem/trends";
@ -429,10 +556,16 @@ export default {
stocktotal: 0, stocktotal: 0,
// 20 // 20
trendsStocksList: [], trendsStocksList: [],
loading_limitStocks:false,
limitStocksList:null,
loading_strongStocks:false,
strongStocksList:null,
loading_dropStocks:false,
dropStocksList:null,
// //
warningStockList: [], warningStockList: [],
// //
trendStokcsDataList:[], trendStocksDataList:null,
trendStocksDataLoading:false, trendStocksDataLoading:false,
// //
title: "", title: "",
@ -497,7 +630,9 @@ export default {
trendValueChange: null, trendValueChange: null,
sort: null, sort: null,
sortChange: null, sortChange: null,
type: "20" type: "20",
islimit:null,
isdrop:null
}, },
// //
form: {}, form: {},
@ -517,6 +652,11 @@ export default {
}); });
}, },
methods: { methods: {
beforeLeave(visitName, currentName)
{
if(visitName == "detailBtn")
{return false;}
},
dateChanged(){ dateChanged(){
this.queryParams.blemind2 = null; this.queryParams.blemind2 = null;
this.getRecentMomentumDataLists(); this.getRecentMomentumDataLists();
@ -849,7 +989,7 @@ export default {
this.queryTrendStocksParams.type = "20"; this.queryTrendStocksParams.type = "20";
this.queryTrendStocksParams.tradeDay = this.queryParams.tradeDay; this.queryTrendStocksParams.tradeDay = this.queryParams.tradeDay;
listTrendsStocksList(this.queryTrendStocksParams).then(response => { listTrendsStocksList(this.queryTrendStocksParams).then(response => {
this.trendStokcsDataList = response.rows; this.trendStocksDataList = response.rows;
this.trendStocksDataLoading = false; this.trendStocksDataLoading = false;
}); });
}, },
@ -880,7 +1020,7 @@ export default {
this.echartsStarStocksData.xAxisData = new Array(); this.echartsStarStocksData.xAxisData = new Array();
this.echartsStarStocksData.hasData = false; this.echartsStarStocksData.hasData = false;
} }
this.getTrendsData(); // this.getTrendsData();//2022-10-11
this.getEchartsData(); this.getEchartsData();
// this.distribute_loading = true; // this.distribute_loading = true;
@ -966,6 +1106,33 @@ export default {
// //
this.getTrendsStocksData(); 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){ handleDistributeTabClicked(tab, event){
@ -1093,6 +1260,7 @@ export default {
// this.stocktotal = response.total; // this.stocktotal = response.total;
// this.loading_trendStocks = false; // this.loading_trendStocks = false;
// }); // });
this.$refs.trendDialog.tradeDay = this.queryParams.tradeDay;
this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "20日趋势个股"; this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "20日趋势个股";
this.$refs.trendDialog.open = true; this.$refs.trendDialog.open = true;
this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay; this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay;
@ -1128,6 +1296,7 @@ export default {
// this.loading_trendStocks = false; // this.loading_trendStocks = false;
// }); // });
this.$refs.trendDialog.tradeDay = this.queryParams.tradeDay;
this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "10日趋势个股"; this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "10日趋势个股";
this.$refs.trendDialog.open = true; this.$refs.trendDialog.open = true;
this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay; this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay;
@ -1142,6 +1311,11 @@ export default {
this.$refs.trendDialog.getTrendDatas(); this.$refs.trendDialog.getTrendDatas();
}, },
handleClickTableHighRecord(row, column){
// this.$refs.stocksNegativeDialog.open = true;
// this.$refs.stocksNegativeDialog.getTrendDatas();
},
handleClickTable1(row, column){ handleClickTable1(row, column){
console.log(row.blemind2, column.label); console.log(row.blemind2, column.label);
console.log(row,column); console.log(row,column);
@ -1162,6 +1336,7 @@ export default {
// this.loading_trendStocks = false; // this.loading_trendStocks = false;
// }); // });
this.$refs.trendDialog.tradeDay = this.queryParams.tradeDay;
this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "1日趋势个股"; this.$refs.trendDialog.title = titleDay + " " + row.blemind2 + " " + "1日趋势个股";
this.$refs.trendDialog.open = true; this.$refs.trendDialog.open = true;
this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay; this.$refs.trendDialog.queryStockParams.tradeDay = this.queryParams.tradeDay;
@ -1186,6 +1361,7 @@ export default {
handleTrendStockClickTable(row, column){ handleTrendStockClickTable(row, column){
this.stocksDialog.open = true; this.stocksDialog.open = true;
this.stocksDialog.title = row.name; this.stocksDialog.title = row.name;
this.$refs.stockK.title = this.stocksDialog.title;
this.$refs.stockK.open = true; this.$refs.stockK.open = true;
console.log(row); console.log(row);
console.log('handleTrendStockClickTable code : ',row.code); 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> </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-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
icon="el-icon-plus" <!-- icon="el-icon-plus"-->
size="mini" <!-- size="mini"-->
@click="handleAdd" <!-- @click="handleAdd"-->
v-hasPermi="['stocksystem:newrecord:add']" <!-- v-hasPermi="['stocksystem:newrecord:add']"-->
>新增</el-button> <!-- >新增</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="success" <!-- type="success"-->
plain <!-- plain-->
icon="el-icon-edit" <!-- icon="el-icon-edit"-->
size="mini" <!-- size="mini"-->
:disabled="single" <!-- :disabled="single"-->
@click="handleUpdate" <!-- @click="handleUpdate"-->
v-hasPermi="['stocksystem:newrecord:edit']" <!-- v-hasPermi="['stocksystem:newrecord:edit']"-->
>修改</el-button> <!-- >修改</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="danger" <!-- type="danger"-->
plain <!-- plain-->
icon="el-icon-delete" <!-- icon="el-icon-delete"-->
size="mini" <!-- size="mini"-->
:disabled="multiple" <!-- :disabled="multiple"-->
@click="handleDelete" <!-- @click="handleDelete"-->
v-hasPermi="['stocksystem:newrecord:remove']" <!-- v-hasPermi="['stocksystem:newrecord:remove']"-->
>删除</el-button> <!-- >删除</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
@ -95,6 +95,16 @@
v-hasPermi="['stocksystem:newrecord:import']" v-hasPermi="['stocksystem:newrecord:import']"
>导入</el-button> >导入</el-button>
</el-col> </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> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>

@ -27,186 +27,186 @@
placeholder="选择交易日期"> placeholder="选择交易日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="开盘价" prop="open"> <!-- <el-form-item label="开盘价" prop="open">-->
<el-input <!-- <el-input-->
v-model="queryParams.open" <!-- v-model="queryParams.open"-->
placeholder="请输入开盘价" <!-- placeholder="请输入开盘价"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="收盘价" prop="close"> <!-- <el-form-item label="收盘价" prop="close">-->
<el-input <!-- <el-input-->
v-model="queryParams.close" <!-- v-model="queryParams.close"-->
placeholder="请输入收盘价" <!-- placeholder="请输入收盘价"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="最高价" prop="high"> <!-- <el-form-item label="最高价" prop="high">-->
<el-input <!-- <el-input-->
v-model="queryParams.high" <!-- v-model="queryParams.high"-->
placeholder="请输入最高价" <!-- placeholder="请输入最高价"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="最低价" prop="low"> <!-- <el-form-item label="最低价" prop="low">-->
<el-input <!-- <el-input-->
v-model="queryParams.low" <!-- v-model="queryParams.low"-->
placeholder="请输入最低价" <!-- placeholder="请输入最低价"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="涨跌幅" prop="differrange"> <!-- <el-form-item label="涨跌幅" prop="differrange">-->
<el-input <!-- <el-input-->
v-model="queryParams.differrange" <!-- v-model="queryParams.differrange"-->
placeholder="请输入涨跌幅" <!-- placeholder="请输入涨跌幅"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="成交量" prop="volume"> <!-- <el-form-item label="成交量" prop="volume">-->
<el-input <!-- <el-input-->
v-model="queryParams.volume" <!-- v-model="queryParams.volume"-->
placeholder="请输入成交量" <!-- placeholder="请输入成交量"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="成交额" prop="amount"> <!-- <el-form-item label="成交额" prop="amount">-->
<el-input <!-- <el-input-->
v-model="queryParams.amount" <!-- v-model="queryParams.amount"-->
placeholder="请输入成交额" <!-- placeholder="请输入成交额"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="涨停家数" prop="limitupnum"> <!-- <el-form-item label="涨停家数" prop="limitupnum">-->
<el-input <!-- <el-input-->
v-model="queryParams.limitupnum" <!-- v-model="queryParams.limitupnum"-->
placeholder="请输入涨停家数" <!-- placeholder="请输入涨停家数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="跌停家数" prop="limitdownnum"> <!-- <el-form-item label="跌停家数" prop="limitdownnum">-->
<el-input <!-- <el-input-->
v-model="queryParams.limitdownnum" <!-- v-model="queryParams.limitdownnum"-->
placeholder="请输入跌停家数" <!-- placeholder="请输入跌停家数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="停牌家数" prop="suspendnum"> <!-- <el-form-item label="停牌家数" prop="suspendnum">-->
<el-input <!-- <el-input-->
v-model="queryParams.suspendnum" <!-- v-model="queryParams.suspendnum"-->
placeholder="请输入停牌家数" <!-- placeholder="请输入停牌家数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="上涨家数" prop="risenum"> <!-- <el-form-item label="上涨家数" prop="risenum">-->
<el-input <!-- <el-input-->
v-model="queryParams.risenum" <!-- v-model="queryParams.risenum"-->
placeholder="请输入上涨家数" <!-- placeholder="请输入上涨家数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="下跌家数" prop="fallnum"> <!-- <el-form-item label="下跌家数" prop="fallnum">-->
<el-input <!-- <el-input-->
v-model="queryParams.fallnum" <!-- v-model="queryParams.fallnum"-->
placeholder="请输入下跌家数" <!-- placeholder="请输入下跌家数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="平盘家数" prop="flatnum"> <!-- <el-form-item label="平盘家数" prop="flatnum">-->
<el-input <!-- <el-input-->
v-model="queryParams.flatnum" <!-- v-model="queryParams.flatnum"-->
placeholder="请输入平盘家数" <!-- placeholder="请输入平盘家数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="成分个数" prop="componentnum"> <!-- <el-form-item label="成分个数" prop="componentnum">-->
<el-input <!-- <el-input-->
v-model="queryParams.componentnum" <!-- v-model="queryParams.componentnum"-->
placeholder="请输入成分个数" <!-- placeholder="请输入成分个数"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="总市值" prop="mv"> <!-- <el-form-item label="总市值" prop="mv">-->
<el-input <!-- <el-input-->
v-model="queryParams.mv" <!-- v-model="queryParams.mv"-->
placeholder="请输入总市值" <!-- placeholder="请输入总市值"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="市盈率PE" prop="pettm"> <!-- <el-form-item label="市盈率PE" prop="pettm">-->
<el-input <!-- <el-input-->
v-model="queryParams.pettm" <!-- v-model="queryParams.pettm"-->
placeholder="请输入市盈率PE" <!-- placeholder="请输入市盈率PE"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="市盈率PE中位值" prop="pettmMid"> <!-- <el-form-item label="市盈率PE中位值" prop="pettmMid">-->
<el-input <!-- <el-input-->
v-model="queryParams.pettmMid" <!-- v-model="queryParams.pettmMid"-->
placeholder="请输入市盈率PE中位值" <!-- placeholder="请输入市盈率PE中位值"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="自由流通市值" prop="liqmv"> <!-- <el-form-item label="自由流通市值" prop="liqmv">-->
<el-input <!-- <el-input-->
v-model="queryParams.liqmv" <!-- v-model="queryParams.liqmv"-->
placeholder="请输入自由流通市值" <!-- placeholder="请输入自由流通市值"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="近期创历史新高" prop="rcnthigh"> <!-- <el-form-item label="近期创历史新高" prop="rcnthigh">-->
<el-input <!-- <el-input-->
v-model="queryParams.rcnthigh" <!-- v-model="queryParams.rcnthigh"-->
placeholder="请输入近期创历史新高" <!-- placeholder="请输入近期创历史新高"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="近期创历史新低" prop="rcntlow"> <!-- <el-form-item label="近期创历史新低" prop="rcntlow">-->
<el-input <!-- <el-input-->
v-model="queryParams.rcntlow" <!-- v-model="queryParams.rcntlow"-->
placeholder="请输入近期创历史新低" <!-- placeholder="请输入近期创历史新低"-->
clearable <!-- clearable-->
size="small" <!-- size="small"-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <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-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -214,54 +214,62 @@
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <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-col :span="1.5">
<el-button <el-button
type="primary" type="warning"
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 plain
icon="el-icon-delete" icon="el-icon-download"
size="mini" size="mini"
:disabled="multiple" @click="handleExport"
@click="handleDelete" v-hasPermi="['stocksystem:stockindex:export']"
v-hasPermi="['stocksystem:stockindex:remove']" >导出</el-button>
>删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-download" icon="el-icon-upload2"
size="mini" size="mini"
@click="handleExport" @click="handleImport"
v-hasPermi="['stocksystem:stockindex:export']" v-hasPermi="['stocksystem:stockindex:import']"
></el-button> >导入</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="stockindexList" @selection-change="handleSelectionChange"> <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="code" />
<el-table-column label="指数名称" align="center" prop="name" /> <el-table-column label="指数名称" align="center" prop="name" />
<el-table-column label="交易日期" align="center" prop="tradeDay" width="180"> <el-table-column label="交易日期" align="center" prop="tradeDay" width="180">
@ -289,24 +297,6 @@
<el-table-column label="自由流通市值" align="center" prop="liqmv" /> <el-table-column label="自由流通市值" align="center" prop="liqmv" />
<el-table-column label="近期创历史新高" align="center" prop="rcnthigh" /> <el-table-column label="近期创历史新高" align="center" prop="rcnthigh" />
<el-table-column label="近期创历史新低" align="center" prop="rcntlow" /> <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> </el-table>
<pagination <pagination
@ -400,11 +390,49 @@
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
</el-dialog> </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> </div>
</template> </template>
<script> <script>
import { listStockindex, getStockindex, delStockindex, addStockindex, updateStockindex } from "@/api/stocksystem/stockindex"; import { listStockindex, getStockindex, delStockindex, addStockindex, updateStockindex } from "@/api/stocksystem/stockindex";
import {getToken} from "@/utils/auth";
export default { export default {
name: "Stockindex", name: "Stockindex",
@ -456,6 +484,24 @@ export default {
rcnthigh: null, rcnthigh: null,
rcntlow: 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: {}, form: {},
// //
@ -584,6 +630,28 @@ export default {
this.download('stocksystem/stockindex/export', { this.download('stocksystem/stockindex/export', {
...this.queryParams ...this.queryParams
}, `stockindex_${new Date().getTime()}.xlsx`) }, `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']" v-hasPermi="['stocksystem:stocks:import']"
>导入</el-button> >导入</el-button>
</el-col> </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-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
@ -201,7 +221,7 @@
icon="el-icon-refresh" icon="el-icon-refresh"
size="mini" size="mini"
@click="handleAnalysis" @click="handleAnalysis"
v-hasPermi="['stocksystem:stocks:analysis']" v-has-role="['admin','normal_admin']"
>分析</el-button> >分析</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>

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

@ -24,19 +24,31 @@
:clearable="false" :clearable="false"
> >
<el-option key="1" label="1" :value="1" /> <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="10" label="10" :value="10" />
<el-option key="15" label="15" :value="15" />
<el-option key="20" label="20" :value="20" /> <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-option key="60" label="60" :value="60" />-->
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="板块名称" prop="blemind2"> <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" v-model="queryParams.blemind2"
placeholder="请输入板块名称" placeholder="请输入板块名称"
clearable
size="small" size="small"
@keyup.enter.native="dateChanged" :fetch-suggestions="querySearchAsync"
/> @select="handleSelect"
@change="dateChanged"
></el-autocomplete>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -46,183 +58,200 @@
<!-- </el-form-item>--> <!-- </el-form-item>-->
</el-form> </el-form>
<!-- <el-row :gutter="20">--> <el-row :gutter="20">
<!-- <el-col :xs="24" :sm="24" :md="16" :lg="16">--> <el-col :xs="24" :sm="24" :md="24" :lg="24">
<!-- <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-card class="update-log">--> <!-- <el-card class="update-log">-->
<!-- <div slot="header" class="clearfix">--> <!-- <div slot="header" class="clearfix">-->
<!-- <span id="distribute"> 涨跌分布</span>--> <!-- <span id="lotDistribute">20日趋势板块</span>-->
<!-- </div>--> <!-- </div>-->
<!-- <div class="body">--> <!-- <div class="body">-->
<!-- <el-table v-loading="loading_trendStocks" :data="trendsStocksList">--> <!-- <el-table :data="this.lotTrendsList[0].sortDataList"-->
<!-- <el-table-column label="股票名称" align="center" prop="name" />--> <!-- height='560'-->
<!-- <el-table-column label="涨跌幅" align="center" prop="differrange" />--> <!-- border-->
<!-- <el-table-column label="10日涨跌幅" align="center" prop="differrange10" />--> <!-- style="width: 100%;"-->
<!-- <el-table-column label="20日涨跌幅" align="center" prop="differrange20" />--> <!-- empty-text="暂无数据"-->
<!-- <el-table-column label="3级行业" align="center" prop="blemind3" />--> <!-- 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-table>-->
<!-- <pagination-->
<!-- v-show="stocktotal>0"-->
<!-- :total="stocktotal"-->
<!-- :page.sync="queryStockParams.pageNum"-->
<!-- :limit.sync="queryStockParams.pageSize"-->
<!-- @pagination="getStockList"-->
<!-- />-->
<!-- </div>--> <!-- </div>-->
<!-- </el-card>--> <!-- </el-card>-->
<!-- </el-col>--> <div style="border-bottom: solid 2px #A9A4A4;margin: 10px 0 10px 0;height: 30px;">
<!-- </el-row>--> <span id="lotDistribute">20日趋势板块</span>
</div>
<el-row :gutter="20"> <el-tabs type="border-card">
<el-col :xs="24" :sm="24" :md="24" :lg="24"> <el-tab-pane>
<el-card class="update-log"> <span slot="label"><el-icon type="primary" plain circle size = "mini" class="el-icon-medal-1" style="border: 0px;"></el-icon> </span>
<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">
<el-table :data="this.lotTrendsList[0].sortDataList" <el-table :data="this.lotTrendsList[0].sortDataList"
height='560' height='560'
border
style="width: 100%;" style="width: 100%;"
empty-text="暂无数据" empty-text="暂无数据"
tooltip-effect="dark" tooltip-effect="dark"
@cell-click="handleClickTable" @cell-click="handleClickTable"
:cell-style="trendCellStyle" :cell-style="trendCellStyle"
:key="itemKey" :key="itemKey"
v-loading="loading"
> >
<template v-for="item in this.lotTrendsList"> <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--> <!-- <el-table-column-->
<!-- :label="item.title"--> <!-- :label="item.title"-->
<!-- class="active"--> <!-- class="active"-->
<!-- v-if="item.title === '2级行业'"-->
<!-- fixed-->
<!-- >--> <!-- >-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>--> <!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </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--> <!-- <el-table-column-->
<!-- :label="item.title"--> <!-- :label="item.title"-->
<!-- class="active"--> <!-- class="active"-->
<!-- v-if="item.title != '2级行业'"-->
<!-- >--> <!-- >-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ item.sortDataList[scope.$index] }}</span>--> <!-- <span>{{ item.sortDataList[scope.$index] }}</span>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column <!-- </template>-->
:label="item.title" <!-- </el-table>-->
class="active" <!-- </el-tab-pane>-->
> </el-tabs>
<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>
</el-col> </el-col>
</el-row> </el-row>
@ -262,33 +291,6 @@
</div> </div>
</el-dialog> </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 <TrendStocksDialog
:title = "trendStocks.title" :title = "trendStocks.title"
:tradeDay = "this.queryParams.tradeDay" :tradeDay = "this.queryParams.tradeDay"
@ -301,8 +303,11 @@
<!-- <div ref="stockK" style="height: 500px"></div>--> <!-- <div ref="stockK" style="height: 500px"></div>-->
<!-- </div>--> <!-- </div>-->
<!-- </el-dialog>--> <!-- </el-dialog>-->
<!-- <kdialog-->
<!-- :title="stocksDialog.title"-->
<!-- ref="stockK"-->
<!-- />-->
<kdialog <kdialog
:title="stocksDialog.title"
ref="stockK" ref="stockK"
/> />
</div> </div>
@ -316,11 +321,17 @@ import {
addTrends, addTrends,
updateTrends, updateTrends,
listTrendsSection, listTrendsSection,
listTradeVolume,
listStockIndexLimitUp,
listStockIndexLimitDown,
listStockIndexHighRocord,
listStockIndexLowRocord,
listSectionByBlemind, listSectionByBlemind,
listStockHistory listStockHistory
} from "@/api/stocksystem/trends"; } from "@/api/stocksystem/trends";
import {listJob} from "@/api/monitor/job"; 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 {getToken} from "@/utils/auth";
// import echarts from "echarts"; // import echarts from "echarts";
import echarts from "echarts"; import echarts from "echarts";
@ -347,8 +358,8 @@ export default {
], ],
data() { data() {
return { return {
itemKey: '',//
// //
itemKey: '',//
loading: true, loading: true,
loading_trendStocks: false, loading_trendStocks: false,
// //
@ -362,12 +373,24 @@ export default {
// //
total: 0, total: 0,
stocktotal: 0, stocktotal: 0,
stockIndexQuery:[],
// //
trendsList: [], trendsList: [],
// 20 // 20
trendsStocksList: [], trendsStocksList: [],
// , // ,
lotTrendsList: [{sortDataList:[]}], lotTrendsList: [{sortDataList:[]}],
//
lotRawTradesList: [{sortDataList:[]}],
// ,
lotLimitUpList: [{sortDataList:[]}],
// ,
lotLimitDownList: [{sortDataList:[]}],
// ,
lotHigRecordList: [{sortDataList:[]}],
// ,
lotLowRecordList: [{sortDataList:[]}],
// //
xAxisDataList:[], xAxisDataList:[],
seriesDataList:[], seriesDataList:[],
@ -452,6 +475,14 @@ export default {
console.log("getLatestTradeDay " , response.msg); console.log("getLatestTradeDay " , response.msg);
this.getList(); this.getList();
this.getListSection(); this.getListSection();
this.getListTradeVolume();//
this.getListStockIndexLimitUp();
// this.getListStockIndexHighRecord();
// this.getListStockIndexLowRecord();
//
listStockIndexsNameQueryData().then(response => {
this.stockIndexQuery = response.rows;
});
}); });
}, },
methods: { methods: {
@ -463,10 +494,19 @@ export default {
this.total = response.total; this.total = response.total;
this.loading = false; 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() { getListSection() {
// this.loading = true; this.loading = true;
listTrendsSection(this.queryParams).then(response => { listTrendsSection(this.queryParams).then(response => {
this.lotTrendsList = response.rows; this.lotTrendsList = response.rows;
this.itemKey = Math.random(); this.itemKey = Math.random();
@ -474,9 +514,70 @@ export default {
document.getElementById('lotDistribute').innerText = this.queryParams.type + "趋势板块"; document.getElementById('lotDistribute').innerText = this.queryParams.type + "趋势板块";
// this.trendsList = response.rows; // this.trendsList = response.rows;
// this.total = response.total; // 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() { getStockList() {
this.loading_trendStocks = true; this.loading_trendStocks = true;
listTrendStocks(this.queryStockParams).then(response => { listTrendStocks(this.queryStockParams).then(response => {
@ -647,6 +748,7 @@ export default {
handleTrendStockClickTable(row, column){ handleTrendStockClickTable(row, column){
this.stocksDialog.open = true; this.stocksDialog.open = true;
this.stocksDialog.title = row.name; this.stocksDialog.title = row.name;
this.$refs.stockK.title = this.stocksDialog.title;
this.$refs.stockK.open = true; this.$refs.stockK.open = true;
console.log(row); console.log(row);
console.log('handleTrendStockClickTable code : ',row.code); console.log('handleTrendStockClickTable code : ',row.code);
@ -668,11 +770,32 @@ export default {
dateChanged(){ dateChanged(){
// this.getList(); // this.getList();
this.getListSection(); this.getListSection();
this.getListTradeVolume();
this.getListStockIndexLimitUp();
}, },
selectChanged(){ selectChanged(){
// this.getList(); // this.getList();
this.getListSection(); 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}){ trendCellStyle({row, column, rowIndex, columnIndex}){
if(this.lotTrendsList[columnIndex].sortDataList[rowIndex] <= 3 && this.lotTrendsList[columnIndex].sortDataList[rowIndex] > 0) if(this.lotTrendsList[columnIndex].sortDataList[rowIndex] <= 3 && this.lotTrendsList[columnIndex].sortDataList[rowIndex] > 0)
@ -684,6 +807,53 @@ export default {
else else
return 'text-align:center;'; 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() 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> </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; package com.ruoyi.stocksystem.controller;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.stocksystem.domain.StocksNewRecord;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; 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.stocksystem.service.IStockIndexService;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/** /**
* Controller * Controller
@ -59,6 +65,36 @@ public class StockIndexController extends BaseController
util.exportExcel(response, list, "指数交易行情数据"); 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 java.util.List;
import javax.servlet.http.HttpServletResponse; 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 com.ruoyi.stocksystem.domain.StocksLimit;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; 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 com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import static com.ruoyi.common.constant.Constants.*;
/** /**
* Controller * Controller
* *
@ -40,6 +44,9 @@ public class StocksNewRecordController extends BaseController
@Autowired @Autowired
private IStocksNewRecordService stocksNewRecordService; private IStocksNewRecordService stocksNewRecordService;
@Autowired
private RedisCache redisCache;
/** /**
* *
*/ */
@ -72,12 +79,35 @@ public class StocksNewRecordController extends BaseController
public TableDataInfo grouplist(StocksNewRecord stocksNewRecord) public TableDataInfo grouplist(StocksNewRecord stocksNewRecord)
{ {
// startPage(); // 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); return getDataTable(list);
} }
@Log(title = "创新高新低数据导入", businessType = BusinessType.IMPORT) @Log(title = "创新高新低数据导入", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('stocksystem:newrecord:import')") @PreAuthorize("@ss.hasPermi('stocksystem:newrecord:import')")
// @PreAuthorize("@ss.hasRole('admin') || @ss.hasRole('normal_admin')")
@PostMapping("/importData") @PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport, String s) throws Exception 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)); 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 java.util.*;
import javax.servlet.http.HttpServletResponse; 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.*;
import com.ruoyi.stocksystem.domain.service.IStocksInTrendService; import com.ruoyi.stocksystem.domain.service.IStocksInTrendService;
import com.ruoyi.stocksystem.domain.service.IStocksService; import com.ruoyi.stocksystem.domain.service.IStocksService;
import com.ruoyi.stocksystem.domain.service.ITradeDatesService; import com.ruoyi.stocksystem.domain.service.ITradeDatesService;
import com.ruoyi.stocksystem.service.IStockIndexService;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; 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.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import static com.ruoyi.common.constant.Constants.*;
/** /**
* Controller * Controller
* *
@ -49,6 +54,11 @@ public class TrendsController extends BaseController
@Autowired @Autowired
private IStocksService stocksService; private IStocksService stocksService;
@Autowired
private IStockIndexService stockIndexService;
@Autowired
private RedisCache redisCache;
/** /**
* *
*/ */
@ -56,9 +66,18 @@ public class TrendsController extends BaseController
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(Trends trends) 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(); startPage();
// System.out.println("trendList tradeDay : " + trends.getTradeDay().toString()); List<Trends> list = trendsService.selectTrendsList(trends);
List<Trends> list = trendsService.selectTrendsList(trends);
return getDataTable(list); return getDataTable(list);
} }
@ -77,103 +96,101 @@ public class TrendsController extends BaseController
@GetMapping("/querytrendstockslist") @GetMapping("/querytrendstockslist")
public TableDataInfo querytrendstockslist(Trends trends) public TableDataInfo querytrendstockslist(Trends trends)
{ {
List<StocksInTrend> result = redisCache.getCacheList(getHomeTrendsStocks(trends));
if(result.isEmpty()) {
// startPage(); // startPage();
System.out.println("querytrendstockslist type : " + trends.getType()); System.out.println("querytrendstockslist type : " + trends.getType());
System.out.println("querytrendstockslist tradeDay : " + trends.getTradeDay().toString()); System.out.println("querytrendstockslist tradeDay : " + trends.getTradeDay().toString());
List<Trends> list = trendsService.selectTrendsList(trends); List<Trends> list = trendsService.selectTrendsList(trends);
System.out.println("querytrendstockslist : get trends list size : " + list.size()); System.out.println("querytrendstockslist : get trends list size : " + list.size());
List<StocksInTrend> stocksInTrendList = new ArrayList<StocksInTrend>(); List<StocksInTrend> stocksInTrendList = new ArrayList<StocksInTrend>();
StocksInTrend stocksInTrend = new StocksInTrend(); StocksInTrend stocksInTrend = new StocksInTrend();
//获取10日、20日、60日的日期 //获取10日、20日、60日的日期
TradeDates tradeDates = new TradeDates(); TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay()); tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(60l); tradeDates.setLimitCount(60l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates); List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates);
boolean has10 = tradeDatesList.size() >= 10; boolean has10 = tradeDatesList.size() >= 10;
boolean has20 = tradeDatesList.size() >= 10; boolean has20 = tradeDatesList.size() >= 10;
boolean has60 = tradeDatesList.size() >= 10; boolean has60 = tradeDatesList.size() >= 10;
Date tradeDay10; Date tradeDay10;
if(has10) if (has10)
tradeDay10 = tradeDatesList.get(9).getDate(); 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;
else else
trendStockLimit = 3; tradeDay10 = tradeDatesList.get(tradeDatesList.size() - 1).getDate();
trendCount++; Date tradeDay20;
for(StocksInTrend stocksInTrend1 : stocksInTrendList1) if (has20)
{ tradeDay20 = tradeDatesList.get(19).getDate();
if(trendStockLimit <= 0) 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; break;
if(trends1.getBlemind2().equals(stocksInTrend1.getBlemind2())) int trendStockLimit = 5;
{ if (trendCount <= 9)
stocksInTrendList.add(stocksInTrend1); trendStockLimit = 5;
trendStockLimit--; 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 stocks = new Stocks(); stocks.setTradeDay(trends.getTradeDay());
stocks.setTradeDay(trends.getTradeDay()); stocks.setStradeDay(tradeDay20);
stocks.setStradeDay(tradeDay20); List<Stocks> stocksList = stocksService.selectStocksForHigh(stocks);
List<Stocks> stocksList = stocksService.selectStocksForHigh(stocks); stocks.setStradeDay(tradeDay10);
stocks.setStradeDay(tradeDay10); List<Stocks> stocksList10 = stocksService.selectStocksForHigh(stocks);
List<Stocks> stocksList10 = stocksService.selectStocksForHigh(stocks); // List<StocksInTrend> result = new ArrayList<StocksInTrend>();
List<StocksInTrend> result = new ArrayList<StocksInTrend>(); for (StocksInTrend stocksInTrend1 : stocksInTrendList) {
for(StocksInTrend stocksInTrend1 :stocksInTrendList) for (Stocks stocks1 : stocksList) {
{ if (stocks1.getCode().equals(stocksInTrend1.getCode())) {
for(Stocks stocks1 : stocksList) //计算
{ BigDecimal current = stocksInTrend1.getClose();
if(stocks1.getCode().equals(stocksInTrend1.getCode())) BigDecimal high = stocks1.getClose();
{ BigDecimal diff = current.subtract(high);
//计算 BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
BigDecimal current = stocksInTrend1.getClose(); System.out.println("20 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult);
BigDecimal high = stocks1.getClose(); stocksInTrend1.setBackDifferrange20(hresult);
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); // result.add(stocksInTrend1);
break; break;
}
} }
}
for(Stocks stocks2 : stocksList10) for (Stocks stocks2 : stocksList10) {
{ if (stocks2.getCode().equals(stocksInTrend1.getCode())) {
if(stocks2.getCode().equals(stocksInTrend1.getCode())) //计算
{ BigDecimal current = stocksInTrend1.getClose();
//计算 BigDecimal high = stocks2.getClose();
BigDecimal current = stocksInTrend1.getClose(); BigDecimal diff = current.subtract(high);
BigDecimal high = stocks2.getClose(); BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
BigDecimal diff = current.subtract(high); System.out.println("10 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult);
BigDecimal hresult = diff.divide(high, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); stocksInTrend1.setBackDifferrange10(hresult);
System.out.println("10 code : " + stocksInTrend1.getCode() + " currentClose: " + current + " highClose: " + high + " diff: " + diff + " res: " + hresult); break;
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; // int trendsCount = 0;
@ -232,6 +249,7 @@ public class TrendsController extends BaseController
// stocksInTrendList.add(sit); // stocksInTrendList.add(sit);
// } // }
// } // }
}
System.out.println("querytrendstockslist count : " + result.size()); System.out.println("querytrendstockslist count : " + result.size());
return getDataTable(result); return getDataTable(result);
} }
@ -242,137 +260,552 @@ public class TrendsController extends BaseController
@GetMapping("/listSection") @GetMapping("/listSection")
public TableDataInfo listSection(Trends trends) public TableDataInfo listSection(Trends trends)
{ {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// startPage(); // 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"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// String dateString = formatter.format(currentTime);
TradeDates tradeDates = new TradeDates(); TradeDates tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay()); tradeDates.setDate(stockIndex.getTradeDay());
tradeDates.setLimitCount(10l); tradeDates.setLimitCount(10l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates); 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>(); List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
TrendForVue tfv = new TrendForVue(); TrendForVue tfv = new TrendForVue();
List<String> blemind2List = new ArrayList<String>(); 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.setTitle("2级行业");
tfv.setIsBlemind2(true); tfv.setIsBlemind2(true);
tfv.setSortDataList(blemind2List); tfv.setSortDataList(blemind2List);
tfv.setRawDataList(blemind2List);
resultDataList.add(tfv); resultDataList.add(tfv);
//初始化列表 //初始化列表
StockIndex stockIndex1 = new StockIndex();
for (TradeDates day : tradeDatesList) for (TradeDates day : tradeDatesList)
{ {
stockIndex1.setTradeDay(day.getDate());
List<StockIndex> trradeDayStockIndexlist = stockIndexService.selectStockIndexTradeVolumeList(stockIndex1);
List<String> sortDataList = new ArrayList<String>(); List<String> sortDataList = new ArrayList<String>();
List<String> amoutsDataList = new ArrayList<String>();
TrendForVue tf = new TrendForVue(); TrendForVue tf = new TrendForVue();
tf.setTitle(formatter.format(day.getDate())); 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.setSortDataList(sortDataList);
tf.setRawDataList(amoutsDataList);
resultDataList.add(tf); 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(); blemind2List.add(ct.getName());
t.setType(trends.getType()); }
t.setBlemind2(trend.getBlemind2()); // tfv.setDataList(currentTradeDayTrendslist);
t.setTradeDay(trends.getTradeDay()); tfv.setTitle("2级行业");
List<Trends> list = trendsService.selectTrendList(t); tfv.setIsBlemind2(true);
for(int i = 1 ; i < resultDataList.size() ; i++) 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; 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; isHasSort = true;
break; break;
} }
} }
if(!isHasSort) if(!isHasSort)
{ {
resultDataList.get(i).getSortDataList().add("-1"); sortDataList.add("-1");
} }
} }
tf.setSortDataList(sortDataList);
resultDataList.add(tf);
} }
return getDataTable(resultDataList); 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(); // Trends t = new Trends();
// t.setType(trends.getType()); // t.setType(trends.getType());
// t.setBlemind2(trend.getBlemind2()); // t.setBlemind2(trends.getBlemind2());
// t.setTradeDay(trends.getTradeDay()); // t.setTradeDay(tradeDates1.getDate());
// t.setLimitCount(1l);
// List<Trends> list = trendsService.selectTrendList(t); // 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); // return getDataTable(resultDataList);
} // }
/** /**
* *
*/ */
@GetMapping("/listSectionByBlemind") @GetMapping("/listSectionByBlemind")
public TableDataInfo listSectionByBlemind(Trends trends) 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 tradeDates = new TradeDates();
tradeDates.setDate(trends.getTradeDay()); tradeDates.setDate(trends.getTradeDay());
tradeDates.setLimitCount(90l); tradeDates.setLimitCount(90l);
List<TradeDates> tradeDatesList = tradeDatesService.selectTradeDatesListB(tradeDates); 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(); Trends t = new Trends();
t.setType(trends.getType()); t.setType(trends.getType());
t.setBlemind2(trends.getBlemind2()); t.setBlemind2(trends.getBlemind2());
t.setTradeDay(tradeDates1.getDate()); t.setTradeDay(trends.getTradeDay());
t.setLimitCount(1l); t.setLimitCount(90l);
List<Trends> list = trendsService.selectTrendList(t); List<Trends> tradeDatesTrendsList = trendsService.selectTrendList(t);
if(list.size() <= 0)
{ // List<TrendForVue> resultDataList = new ArrayList<TrendForVue>();
seriesDataList.add("100"); TrendForVue tfv = new TrendForVue();
} List<String> xAxisDataList = new ArrayList<String>();
else { List<String> seriesDataList = new ArrayList<String>();
for (Trends ttrend : list) { List<String> rawDataList = new ArrayList<String>();
if (formatter.format(ttrend.getTradeDay()).equals(formatter.format(tradeDates1.getDate()))) { int trendsCount = tradeDatesTrendsList.size();
seriesDataList.add(ttrend.getSort().toString()); int tradeDatesCount = tradeDatesList.size();
} else { 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"); seriesDataList.add("100");
rawDataList.add("0");
} }
} else {
seriesDataList.add("100");
rawDataList.add("0");
} }
} }
} tfv.setTitle("交易日期");
tfv.setTitle("交易日期"); tfv.setSortDataList(xAxisDataList);
tfv.setSortDataList(xAxisDataList); resultDataList.add(tfv);
resultDataList.add(tfv);
TrendForVue tfvSeries = new TrendForVue();
tfvSeries.setTitle("Series");
tfvSeries.setSortDataList(seriesDataList);
tfvSeries.setRawDataList(rawDataList);
resultDataList.add(tfvSeries);
TrendForVue tfvSeries = new TrendForVue(); if(!resultDataList.isEmpty()) {
tfvSeries.setTitle("Series"); redisCache.setCacheList(redisKey, resultDataList);
tfvSeries.setSortDataList(seriesDataList); redisCache.expire(redisKey, EXPIRED_TIME);
resultDataList.add(tfvSeries); }
}
return getDataTable(resultDataList); return getDataTable(resultDataList);
} }
@ -431,4 +864,22 @@ public class TrendsController extends BaseController
{ {
return toAjax(trendsService.deleteTrendsByIds(ids)); 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; private Long id;
/** 指数代码 */ /** 指数代码 */
@Excel(name = "指数代码") @Excel(name = "证券代码")
private String code; private String code;
/** 指数名称 */ /** 指数名称 */
@Excel(name = "指数名称") @Excel(name = "证券名称")
private String name; private String name;
/** 交易日期 */ /** 交易日期 */
@ -87,7 +87,7 @@ public class StockIndex extends BaseEntity
private BigDecimal flatnum; private BigDecimal flatnum;
/** 成分个数 */ /** 成分个数 */
@Excel(name = "成个数") @Excel(name = "成个数")
private BigDecimal componentnum; private BigDecimal componentnum;
/** 总市值 */ /** 总市值 */
@ -108,11 +108,26 @@ public class StockIndex extends BaseEntity
/** 近期创历史新高 */ /** 近期创历史新高 */
@Excel(name = "近期创历史新高") @Excel(name = "近期创历史新高")
private BigDecimal rcnthigh; private String rcnthigh;
/** 近期创历史新低 */ /** 近期创历史新低 */
@Excel(name = "近期创历史新低") @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) public void setId(Long id)
{ {
@ -312,25 +327,43 @@ public class StockIndex extends BaseEntity
{ {
return liqmv; return liqmv;
} }
public void setRcnthigh(BigDecimal rcnthigh) public void setRcnthigh(String rcnthigh)
{ {
this.rcnthigh = rcnthigh; this.rcnthigh = rcnthigh;
} }
public BigDecimal getRcnthigh() public String getRcnthigh()
{ {
return rcnthigh; return rcnthigh;
} }
public void setRcntlow(BigDecimal rcntlow) public void setRcntlow(String rcntlow)
{ {
this.rcntlow = rcntlow; this.rcntlow = rcntlow;
} }
public BigDecimal getRcntlow() public String getRcntlow()
{ {
return rcntlow; 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 @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@ -357,7 +390,7 @@ public class StockIndex extends BaseEntity
.append("pettmMid", getPettmMid()) .append("pettmMid", getPettmMid())
.append("liqmv", getLiqmv()) .append("liqmv", getLiqmv())
.append("rcnthigh", getRcnthigh()) .append("rcnthigh", getRcnthigh())
.append("rcntlow", getRcntlow()) .append("rcntlow", getRcntlow()).append("amountliqmv", getAmountmv())
.toString(); .toString();
} }
} }

@ -28,6 +28,8 @@ public class Stocks extends BaseEntity
@Excel(name = "证券代码") @Excel(name = "证券代码")
private String code; private String code;
public String value;
/** 股票名称 */ /** 股票名称 */
@Excel(name = "证券名称") @Excel(name = "证券名称")
private String name; private String name;
@ -130,9 +132,42 @@ public class Stocks extends BaseEntity
//查询使用,动量类型 1、10、20; 涨跌分布类型: all(全部), sh(上证), sz(深圳) ,ge(创业板),star(科创板) //查询使用,动量类型 1、10、20; 涨跌分布类型: all(全部), sh(上证), sz(深圳) ,ge(创业板),star(科创板)
private String type; private String type;
//财务数据
private StockFinancial stockFinancial;
/** 基础数据信息 */ /** 基础数据信息 */
private List<StockBasic> stockBasicList; 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) public void setType(String type)
{ {
this.type = type; this.type = type;
@ -395,6 +430,69 @@ public class Stocks extends BaseEntity
return blemindsCount; 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 @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@ -414,6 +512,10 @@ public class Stocks extends BaseEntity
.append("differrange10", getDifferrange10()) .append("differrange10", getDifferrange10())
.append("differrange20", getDifferrange20()) .append("differrange20", getDifferrange20())
.append("differrange60", getDifferrange60()) .append("differrange60", getDifferrange60())
.append("differrange3", getDifferrange3())
.append("differrange5", getDifferrange5())
.append("differrange15", getDifferrange15())
.append("differrange30", getDifferrange30())
.append("avgVolume20", getAvgVolume20()) .append("avgVolume20", getAvgVolume20())
.append("freefloatMarketValue", getFreefloatMarketValue()) .append("freefloatMarketValue", getFreefloatMarketValue())
.append("totalMarketValue", getTotalMarketValue()) .append("totalMarketValue", getTotalMarketValue())

@ -87,6 +87,22 @@ public class StocksInTrend extends BaseEntity
@Excel(name = "60日区间最大回撤") @Excel(name = "60日区间最大回撤")
private BigDecimal backdifferrange60; 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) public void setId(Long id)
{ {
this.id = id; this.id = id;
@ -238,6 +254,42 @@ public class StocksInTrend extends BaseEntity
return backdifferrange60; 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 @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

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

@ -31,6 +31,9 @@ public class TrendForVue extends BaseEntity
private List<String> sortDataList; private List<String> sortDataList;
//原始数据
private List<String> rawDataList;
public void setTitle(String title) public void setTitle(String title)
{ {
this.title = title; this.title = title;
@ -67,6 +70,15 @@ public class TrendForVue extends BaseEntity
this.sortDataList = sortdataList; this.sortDataList = sortdataList;
} }
public List<String> getRawDataList()
{
return this.rawDataList;
}
public void setRawDataList(List<String> rawDataList)
{
this.rawDataList = rawDataList;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) 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 java.util.List;
import com.ruoyi.stocksystem.domain.StockIndex; import com.ruoyi.stocksystem.domain.StockIndex;
import com.ruoyi.stocksystem.domain.Stocks;
/** /**
* Service * Service
@ -27,6 +28,33 @@ public interface IStockIndexService
*/ */
public List<StockIndex> selectStockIndexList(StockIndex stockIndex); 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); 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); 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); public List<Stocks> selectStocksListSort(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStocksListSortA(Stocks stocks);
/** /**
* 2 * 2
* *
@ -62,6 +86,14 @@ public interface IStocksService
*/ */
public int insertStocks(Stocks stocks); 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); public List<Stocks> selectStockHistory(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStockIndexHistory(Stocks stocks);
/** /**
* *
* *
@ -168,4 +208,20 @@ public interface IStocksService
* @return * @return
*/ */
public List<Stocks> selectStocksForHigh(Stocks stocks); 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; package com.ruoyi.stocksystem.service.impl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.stocksystem.mapper.StockIndexMapper; import com.ruoyi.stocksystem.mapper.StockIndexMapper;
import com.ruoyi.stocksystem.domain.StockIndex; import com.ruoyi.stocksystem.domain.StockIndex;
import com.ruoyi.stocksystem.service.IStockIndexService; import com.ruoyi.stocksystem.service.IStockIndexService;
import javax.validation.Validator;
/** /**
* Service * Service
* *
@ -19,6 +30,9 @@ public class StockIndexServiceImpl implements IStockIndexService
@Autowired @Autowired
private StockIndexMapper stockIndexMapper; private StockIndexMapper stockIndexMapper;
@Autowired
protected Validator validator;
/** /**
* *
* *
@ -43,6 +57,30 @@ public class StockIndexServiceImpl implements IStockIndexService
return stockIndexMapper.selectStockIndexList(stockIndex); 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); 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); 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); 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); 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; 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); 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); 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); 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); 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); public List<Stocks> selectStocksListSort(Stocks stocks);
/**
*
*
* @param stocks
* @return
*/
public List<Stocks> selectStocksListSortA(Stocks stocks);
/** /**
* 2 * 2
* *
@ -69,6 +94,14 @@ public interface StocksMapper
*/ */
public int insertStocks(Stocks stocks); 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); 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); 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 * @return
*/ */
public List<StocksNewRecord> selectGroupStocksNewRecord(StocksNewRecord stocksNewRecord); 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="liqmv" column="liqmv" />
<result property="rcnthigh" column="rcnthigh" /> <result property="rcnthigh" column="rcnthigh" />
<result property="rcntlow" column="rcntlow" /> <result property="rcntlow" column="rcntlow" />
<result property="amountmv" column="amountmv" />
<result property="amountliqmv" column="amountliqmv" />
<result property="orderParam" column="orderParam" />
</resultMap> </resultMap>
<sql id="selectStockIndexVo"> <sql id="selectStockIndexVo">
@ -163,4 +166,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</delete> </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> </mapper>

@ -19,6 +19,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="differrange10" column="differrange10" /> <result property="differrange10" column="differrange10" />
<result property="differrange20" column="differrange20" /> <result property="differrange20" column="differrange20" />
<result property="differrange60" column="differrange60" /> <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>
<resultMap type="Stocks" id="StocksResult"> <resultMap type="Stocks" id="StocksResult">
@ -52,9 +56,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectStocksInTrendList" parameterType="StocksInTrend" resultMap="StocksInTrendResult"> <select id="selectStocksInTrendList" parameterType="StocksInTrend" resultMap="StocksInTrendResult">
<!-- <include refid="selectStocksInTrendVo"/>--> <!-- <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> <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="code != null and code != ''"> and sks.code = #{code}</if>
<if test="name != null and name != ''"> and s.name = #{name}</if> <if test="name != null and name != ''"> and s.name = #{name}</if>
<if test="blemind2 != null and blemind2 != ''"> and s.blemind2 = #{blemind2}</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="differrange10" column="differrange10" />
<result property="differrange20" column="differrange20" /> <result property="differrange20" column="differrange20" />
<result property="differrange60" column="differrange60" /> <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="avgVolume20" column="avg_volume20" />
<result property="freefloatMarketValue" column="freefloat_market_value" /> <result property="freefloatMarketValue" column="freefloat_market_value" />
<result property="totalMarketValue" column="total_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="blemindCount" column="blemind_count" />
<result property="listdate" column="listdate" /> <result property="listdate" column="listdate" />
<result property="blemindsCount" column="blemindsCount" /> <result property="blemindsCount" column="blemindsCount" />
<result property="orderParam" column="orderParam" />
</resultMap> </resultMap>
<resultMap id="StocksStockBasicResult" type="Stocks" extends="StocksResult"> <resultMap id="StocksStockBasicResult" type="Stocks" extends="StocksResult">
@ -65,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where> </where>
</select> </select>
<!--
<select id="selectStocksListB" parameterType="Stocks" resultMap="StocksResult"> <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, 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 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 left join stock_basis b on b.code = a.code
where a.trade_day = #{tradeDay} where a.trade_day = #{tradeDay}
</select> </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, 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 b.name as name, b.blemind2 as blemind2, b.blemind3 as blemind3, b.listdate as listdate
from stocks a from stocks a
@ -88,10 +110,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where> </where>
</select> </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 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 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>
<!--
<select id="selectStocksById" parameterType="Long" resultMap="StocksStockBasicResult"> <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, 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 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 left join stock_basis b on b.code = a.id
where a.id = #{id} where a.id = #{id}
</select> </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="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} 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; 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>
<!-- <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 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>
<select id="selectStocksForHigh" parameterType="Stocks" resultMap="StocksResult"> <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 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> </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> </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 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; 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>
<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> </mapper>
Loading…
Cancel
Save