|
|
@@ -26,6 +26,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
import java.io.BufferedInputStream;
|
|
|
import java.io.InputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.nio.charset.Charset;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.ArrayList;
|
|
|
@@ -363,6 +364,8 @@ public class StockPoolHistoryServiceImpl implements IStockPoolHistoryService {
|
|
|
existing.setDayLowestPrice(vo.getDayLowestPrice());
|
|
|
existing.setDayAvgPrice(vo.getDayAvgPrice());
|
|
|
existing.setDayClosePrice(vo.getDayClosePrice());
|
|
|
+ // 计算行情涨跌(最高涨幅)
|
|
|
+ existing.setHighTrend(calculateHighTrend(vo.getStockCode(), parsedRecordDate, vo.getDayHighestPrice()));
|
|
|
baseMapper.updateById(existing);
|
|
|
updateNum++;
|
|
|
successNum++;
|
|
|
@@ -377,6 +380,8 @@ public class StockPoolHistoryServiceImpl implements IStockPoolHistoryService {
|
|
|
StockPoolHistory entity = BeanUtil.toBean(vo, StockPoolHistory.class);
|
|
|
entity.setRecordDate(parsedRecordDate);
|
|
|
entity.setAdminId(LoginHelper.getUserId());
|
|
|
+ // 计算行情涨跌(最高涨幅)
|
|
|
+ entity.setHighTrend(calculateHighTrend(vo.getStockCode(), parsedRecordDate, vo.getDayHighestPrice()));
|
|
|
baseMapper.insert(entity);
|
|
|
successNum++;
|
|
|
}
|
|
|
@@ -493,6 +498,36 @@ public class StockPoolHistoryServiceImpl implements IStockPoolHistoryService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 计算行情涨跌(最高涨幅)
|
|
|
+ * 公式:(当日最高价 - 昨日收盘价) / 昨日收盘价 * 100
|
|
|
+ * 如果找不到昨日数据则返回0
|
|
|
+ *
|
|
|
+ * @param stockCode 股票代码
|
|
|
+ * @param recordDate 当前记录日期
|
|
|
+ * @param dayHighestPrice 当日最高价
|
|
|
+ * @return 最高涨幅百分比,保留2位小数
|
|
|
+ */
|
|
|
+ private BigDecimal calculateHighTrend(String stockCode, LocalDate recordDate, BigDecimal dayHighestPrice) {
|
|
|
+ if (dayHighestPrice == null) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询昨日收盘价
|
|
|
+ BigDecimal previousClosePrice = baseMapper.selectPreviousClosePrice(stockCode, recordDate);
|
|
|
+
|
|
|
+ if (previousClosePrice == null || previousClosePrice.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ // 找不到昨日数据或昨日收盘价为0,返回0
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算最高涨幅:(当日最高价 - 昨日收盘价) / 昨日收盘价 * 100
|
|
|
+ return dayHighestPrice.subtract(previousClosePrice)
|
|
|
+ .divide(previousClosePrice, 4, RoundingMode.HALF_UP)
|
|
|
+ .multiply(new BigDecimal("100"))
|
|
|
+ .setScale(2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 构建查询条件
|
|
|
*/
|