feat: 股票增加上市日期
This commit is contained in:
@@ -4,6 +4,7 @@ import com.lanyuanxiaoyao.leopard.server.entity.Stock;
|
|||||||
import com.lanyuanxiaoyao.leopard.server.service.StockService;
|
import com.lanyuanxiaoyao.leopard.server.service.StockService;
|
||||||
import com.lanyuanxiaoyao.service.template.controller.GlobalResponse;
|
import com.lanyuanxiaoyao.service.template.controller.GlobalResponse;
|
||||||
import com.lanyuanxiaoyao.service.template.controller.SimpleControllerSupport;
|
import com.lanyuanxiaoyao.service.template.controller.SimpleControllerSupport;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@@ -36,7 +37,8 @@ public class StockController extends SimpleControllerSupport<Stock, Void, StockC
|
|||||||
stock.getName(),
|
stock.getName(),
|
||||||
stock.getFullname(),
|
stock.getFullname(),
|
||||||
stock.getMarket(),
|
stock.getMarket(),
|
||||||
stock.getIndustry()
|
stock.getIndustry(),
|
||||||
|
stock.getListedDate()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +58,8 @@ public class StockController extends SimpleControllerSupport<Stock, Void, StockC
|
|||||||
String name,
|
String name,
|
||||||
String fullname,
|
String fullname,
|
||||||
Stock.Market market,
|
Stock.Market market,
|
||||||
String industry
|
String industry,
|
||||||
|
LocalDate listedDate
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import jakarta.persistence.EnumType;
|
|||||||
import jakarta.persistence.Enumerated;
|
import jakarta.persistence.Enumerated;
|
||||||
import jakarta.persistence.OneToMany;
|
import jakarta.persistence.OneToMany;
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -55,6 +56,8 @@ public class Stock extends SimpleEntity {
|
|||||||
private Market market;
|
private Market market;
|
||||||
@Comment("行业")
|
@Comment("行业")
|
||||||
private String industry;
|
private String industry;
|
||||||
|
@Comment("上市日期")
|
||||||
|
private LocalDate listedDate;
|
||||||
|
|
||||||
@OneToMany(mappedBy = "stock", cascade = CascadeType.REMOVE)
|
@OneToMany(mappedBy = "stock", cascade = CascadeType.REMOVE)
|
||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ public class TuShareService {
|
|||||||
public TuShareResponse stockList() {
|
public TuShareResponse stockList() {
|
||||||
var response = HttpUtil.post(API_URL, buildRequest(
|
var response = HttpUtil.post(API_URL, buildRequest(
|
||||||
"stock_basic",
|
"stock_basic",
|
||||||
Map.of("list_status", "L"),
|
Map.of("list_status", "L", "market", "主板", "exchange", "SSE,SZSE"),
|
||||||
List.of("ts_code", "name", "fullname", "exchange", "industry")
|
List.of("ts_code", "name", "fullname", "exchange", "industry", "list_date")
|
||||||
));
|
));
|
||||||
var tuShareResponse = mapper.readValue(response, TuShareResponse.class);
|
var tuShareResponse = mapper.readValue(response, TuShareResponse.class);
|
||||||
if (tuShareResponse.code != 0) {
|
if (tuShareResponse.code != 0) {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.lanyuanxiaoyao.leopard.server.service.TuShareService;
|
|||||||
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
||||||
import com.yomahub.liteflow.core.NodeComponent;
|
import com.yomahub.liteflow.core.NodeComponent;
|
||||||
import jakarta.transaction.Transactional;
|
import jakarta.transaction.Transactional;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -35,12 +36,14 @@ public class UpdateStockNode extends NodeComponent {
|
|||||||
var fullname = item.get(2);
|
var fullname = item.get(2);
|
||||||
var market = EnumUtil.fromString(Stock.Market.class, item.get(3));
|
var market = EnumUtil.fromString(Stock.Market.class, item.get(3));
|
||||||
var industry = item.get(4);
|
var industry = item.get(4);
|
||||||
|
var listedDate = LocalDate.parse(item.get(5), TuShareService.TRADE_FORMAT);
|
||||||
if (stocksMap.containsKey(code)) {
|
if (stocksMap.containsKey(code)) {
|
||||||
var stock = stocksMap.get(code);
|
var stock = stocksMap.get(code);
|
||||||
stock.setName(name);
|
stock.setName(name);
|
||||||
stock.setFullname(fullname);
|
stock.setFullname(fullname);
|
||||||
stock.setMarket(market);
|
stock.setMarket(market);
|
||||||
stock.setIndustry(industry);
|
stock.setIndustry(industry);
|
||||||
|
stock.setListedDate(listedDate);
|
||||||
} else {
|
} else {
|
||||||
var stock = new Stock();
|
var stock = new Stock();
|
||||||
stock.setCode(code);
|
stock.setCode(code);
|
||||||
@@ -48,6 +51,7 @@ public class UpdateStockNode extends NodeComponent {
|
|||||||
stock.setFullname(fullname);
|
stock.setFullname(fullname);
|
||||||
stock.setMarket(market);
|
stock.setMarket(market);
|
||||||
stock.setIndustry(industry);
|
stock.setIndustry(industry);
|
||||||
|
stock.setListedDate(listedDate);
|
||||||
stocks.add(stock);
|
stocks.add(stock);
|
||||||
}
|
}
|
||||||
targetCodes.add(code);
|
targetCodes.add(code);
|
||||||
|
|||||||
@@ -9,14 +9,18 @@ Content-Type: application/json
|
|||||||
"api_name": "stock_basic",
|
"api_name": "stock_basic",
|
||||||
"token": "{{api_key}}",
|
"token": "{{api_key}}",
|
||||||
"params": {
|
"params": {
|
||||||
"list_status": "D,P,L"
|
"list_status": "L",
|
||||||
|
"market": "主板",
|
||||||
|
"exchange": "SSE,SZSE"
|
||||||
},
|
},
|
||||||
"fields": [
|
"fields": [
|
||||||
"ts_code",
|
"ts_code",
|
||||||
"name",
|
"name",
|
||||||
"fullname",
|
"fullname",
|
||||||
"exchange",
|
"exchange",
|
||||||
"industry"
|
"industry",
|
||||||
|
"market",
|
||||||
|
"list_date"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import {
|
|||||||
amisRender,
|
amisRender,
|
||||||
commonInfo,
|
commonInfo,
|
||||||
crudCommonOptions,
|
crudCommonOptions,
|
||||||
|
date,
|
||||||
paginationTemplate,
|
paginationTemplate,
|
||||||
remoteMappings,
|
remoteMappings,
|
||||||
remoteOptions,
|
remoteOptions,
|
||||||
@@ -123,6 +124,12 @@ function StockList() {
|
|||||||
label: '行业',
|
label: '行业',
|
||||||
width: 150,
|
width: 150,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '上市日期',
|
||||||
|
width: 100,
|
||||||
|
align: 'center',
|
||||||
|
...date('listedDate'),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: 'operation',
|
type: 'operation',
|
||||||
label: '操作',
|
label: '操作',
|
||||||
|
|||||||
@@ -254,6 +254,13 @@ export function time(field: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function date(field: string) {
|
||||||
|
return {
|
||||||
|
type: 'tpl',
|
||||||
|
tpl: `\${IF(${field}, DATETOSTR(${field}, 'YYYY-MM-DD'), '/')}`,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function pictureFromIds(field: string) {
|
export function pictureFromIds(field: string) {
|
||||||
return `\${ARRAYMAP(${field},id => '${commonInfo.baseUrl}/upload/download/' + id)}`
|
return `\${ARRAYMAP(${field},id => '${commonInfo.baseUrl}/upload/download/' + id)}`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user