110 lines
3.8 KiB
Java
110 lines
3.8 KiB
Java
|
|
package com.diagnose.service;
|
||
|
|
|
||
|
|
import com.diagnose.mapper.DiagnoseMapper;
|
||
|
|
import com.diagnose.mapper.FinanceMapper;
|
||
|
|
import com.diagnose.mapper.StockMapper;
|
||
|
|
import com.diagnose.vo.*;
|
||
|
|
import org.springframework.stereotype.Service;
|
||
|
|
|
||
|
|
import javax.annotation.Resource;
|
||
|
|
import java.math.BigDecimal;
|
||
|
|
import java.util.List;
|
||
|
|
import java.util.Map;
|
||
|
|
import java.util.function.Function;
|
||
|
|
import java.util.stream.Collectors;
|
||
|
|
|
||
|
|
@Service
|
||
|
|
public class StockService {
|
||
|
|
|
||
|
|
private static final long cacheExpires = 60 * 60 * 1000;
|
||
|
|
|
||
|
|
private static long cacheTime = 0;
|
||
|
|
|
||
|
|
private List<StockVO> stockListCache = null;
|
||
|
|
|
||
|
|
private Map<Long, StockVO> stockMapCache = null; // <stkUniCode, StockVO>
|
||
|
|
|
||
|
|
@Resource
|
||
|
|
private StockMapper stockMapper;
|
||
|
|
|
||
|
|
@Resource
|
||
|
|
private FinanceMapper financeMapper;
|
||
|
|
|
||
|
|
@Resource
|
||
|
|
private DiagnoseMapper diagnoseMapper;
|
||
|
|
|
||
|
|
public List<StockVO> selectAllStock() {
|
||
|
|
return stockMapper.selectAllStock();
|
||
|
|
}
|
||
|
|
|
||
|
|
public synchronized List<StockVO> selectALlStockCache () {
|
||
|
|
long now = System.currentTimeMillis();
|
||
|
|
if (stockListCache == null || now - cacheTime > cacheExpires) {
|
||
|
|
stockListCache = selectAllStock();
|
||
|
|
cacheTime = now;
|
||
|
|
}
|
||
|
|
return stockListCache;
|
||
|
|
}
|
||
|
|
|
||
|
|
public StockVO getStock(Long stkUniCode) {
|
||
|
|
if (stockMapCache == null) {
|
||
|
|
stockMapCache = selectALlStockCache().stream().collect(Collectors.toMap(StockVO::getSecUniCode, Function.identity()));
|
||
|
|
}
|
||
|
|
return stockMapCache.get(stkUniCode);
|
||
|
|
}
|
||
|
|
|
||
|
|
public DiagnoseRankVO rank(StockVO stock) {
|
||
|
|
DiagnoseRankVO diagnoseRankVO = diagnoseMapper.selectRank(stock.getSecUniCode());
|
||
|
|
Integer totalInduCount = diagnoseMapper.selectTotalInduCount(stock.getPlateUniCode());
|
||
|
|
Integer totalMktCount = diagnoseMapper.selectTotalMktCount();
|
||
|
|
diagnoseRankVO.setTotalInduCount(totalInduCount);
|
||
|
|
diagnoseRankVO.setTotalMktCount(totalMktCount);
|
||
|
|
return diagnoseRankVO;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ComprehensiveEvaluationVO comprehensiveEvaluation(Long stkUniCode) {
|
||
|
|
StockVO stock = getStock(stkUniCode);
|
||
|
|
if (stock == null) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
DiagnoseRankVO diagnoseRankVO = rank(stock);
|
||
|
|
BigDecimal star = diagnoseRankVO.getTotalStar();
|
||
|
|
if (star == null) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
List<DiagnoseBackTestVO> backTestList = diagnoseMapper.selectBackTest(star);
|
||
|
|
ComprehensiveEvaluationVO vo = new ComprehensiveEvaluationVO();
|
||
|
|
vo.setStock(stock);
|
||
|
|
vo.setRank(diagnoseRankVO);
|
||
|
|
vo.setBackTestList(backTestList);
|
||
|
|
return vo;
|
||
|
|
}
|
||
|
|
|
||
|
|
public FinancialValuationVO financialValuation(Long stkUniCode) {
|
||
|
|
StockVO stock = getStock(stkUniCode);
|
||
|
|
if (stock == null) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
String secCode = stock.getSecCode();
|
||
|
|
Integer mktNum = stock.getMktNum();
|
||
|
|
FinancialValuationVO vo = financeMapper.selectFinancialValuation(secCode, mktNum);
|
||
|
|
Integer secMarPar = stock.getSecMarPar();
|
||
|
|
List<FinanceIndexAnalysisVO> financeIndexAnalysisList = financeMapper.selectFinanceIndexAnalysis(secCode, secMarPar);
|
||
|
|
financeIndexAnalysisList.forEach(fiaVO -> {
|
||
|
|
if (fiaVO.getEndDate() != null && fiaVO.getEndDate().length() > 10) {
|
||
|
|
fiaVO.setEndDate(fiaVO.getEndDate().substring(0, 10));
|
||
|
|
}
|
||
|
|
});
|
||
|
|
vo.setFinanceIndexAnalysisList(financeIndexAnalysisList);
|
||
|
|
List<FinanceCashShortVO> financeCashShortList = financeMapper.selectFinanceCashShort(secCode, secMarPar);
|
||
|
|
financeCashShortList.forEach(fcsVO -> {
|
||
|
|
if (fcsVO.getEndDate() != null && fcsVO.getEndDate().length() > 10) {
|
||
|
|
fcsVO.setEndDate(fcsVO.getEndDate().substring(0, 10));
|
||
|
|
}
|
||
|
|
});
|
||
|
|
vo.setFinanceCashShortList(financeCashShortList);
|
||
|
|
return vo;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|