|
@@ -1,12 +1,23 @@
|
|
|
package com.slibra.business.service.impl;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.slibra.common.exception.ServiceException;
|
|
|
import com.slibra.common.utils.DateUtils;
|
|
|
+import com.slibra.common.utils.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.slibra.business.mapper.TXinyiForecastComparisonMapper;
|
|
|
import com.slibra.business.domain.TXinyiForecastComparison;
|
|
|
import com.slibra.business.service.ITXinyiForecastComparisonService;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import static com.slibra.common.constant.MyConstants.*;
|
|
|
|
|
|
/**
|
|
|
* 信义预测对比Service业务层处理
|
|
@@ -15,7 +26,7 @@ import com.slibra.business.service.ITXinyiForecastComparisonService;
|
|
|
* @date 2024-06-18
|
|
|
*/
|
|
|
@Service
|
|
|
-public class TXinyiForecastComparisonServiceImpl implements ITXinyiForecastComparisonService
|
|
|
+public class TXinyiForecastComparisonServiceImpl implements ITXinyiForecastComparisonService
|
|
|
{
|
|
|
@Autowired
|
|
|
private TXinyiForecastComparisonMapper tXinyiForecastComparisonMapper;
|
|
@@ -93,4 +104,88 @@ public class TXinyiForecastComparisonServiceImpl implements ITXinyiForecastCompa
|
|
|
{
|
|
|
return tXinyiForecastComparisonMapper.deleteTXinyiForecastComparisonById(id);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public JSONObject echartsList(TXinyiForecastComparison tXinyiForecastComparison) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ //获取最新N天的所有数据
|
|
|
+ List<TXinyiForecastComparison> tXinyiForecastComparisons = this.getRecentDates(tXinyiForecastComparison);
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiForecastComparisons))
|
|
|
+ throw new ServiceException("未查询到数据");
|
|
|
+ //数据集合
|
|
|
+ List<String> timeList = tXinyiForecastComparisons.stream().map(TXinyiForecastComparison::getForecastTimeOne).collect(Collectors.toList());
|
|
|
+ //处理真实值的数据
|
|
|
+ jsonObject.put("real", this.getRealByTXinyiForecastComparison(tXinyiForecastComparisons, timeList));
|
|
|
+ jsonObject.put("hs", this.getHSByTXinyiForecastComparison(tXinyiForecastComparisons, timeList));
|
|
|
+ jsonObject.put("yy", this.getYYByTXinyiForecastComparison(tXinyiForecastComparisons, timeList));
|
|
|
+ return jsonObject;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private JSONObject getYYByTXinyiForecastComparison(List<TXinyiForecastComparison> list, List<String> timeList) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ //获取日期集合
|
|
|
+ //把最新的一条数据的最后两个点的预测值补上
|
|
|
+ TXinyiForecastComparison tXinyiForecastComparison = list.get(0);
|
|
|
+ timeList.add(tXinyiForecastComparison.getForecastTimeTwo());
|
|
|
+ timeList.add(tXinyiForecastComparison.getForecastTimeThree());
|
|
|
+ jsonObject.put("time", timeList);
|
|
|
+ //获取数据集合
|
|
|
+ //把最新的一条数据的最后两个点的预测值补上
|
|
|
+ List<BigDecimal> dataList = list.stream().map(TXinyiForecastComparison::getYyForecastOne).collect(Collectors.toList());
|
|
|
+ dataList.add(tXinyiForecastComparison.getYyForecastTwo());
|
|
|
+ dataList.add(tXinyiForecastComparison.getYyForecastThree());
|
|
|
+ jsonObject.put("data", dataList);
|
|
|
+ return jsonObject;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private JSONObject getHSByTXinyiForecastComparison(List<TXinyiForecastComparison> list, List<String> timeList) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ //获取日期集合
|
|
|
+ //把最新的一条数据的最后两个点的预测值补上
|
|
|
+ TXinyiForecastComparison tXinyiForecastComparison = list.get(0);
|
|
|
+ timeList.add(tXinyiForecastComparison.getForecastTimeTwo());
|
|
|
+ timeList.add(tXinyiForecastComparison.getForecastTimeThree());
|
|
|
+ jsonObject.put("time", timeList);
|
|
|
+ //获取数据集合
|
|
|
+ //把最新的一条数据的最后两个点的预测值补上
|
|
|
+ List<BigDecimal> dataList = list.stream().map(TXinyiForecastComparison::getHsForecastOne).collect(Collectors.toList());
|
|
|
+ dataList.add(tXinyiForecastComparison.getHsForecastTwo());
|
|
|
+ dataList.add(tXinyiForecastComparison.getHsForecastThree());
|
|
|
+ jsonObject.put("data", dataList);
|
|
|
+ return jsonObject;
|
|
|
+ }
|
|
|
+
|
|
|
+ private JSONObject getRealByTXinyiForecastComparison(List<TXinyiForecastComparison> list, List<String> timeList) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ //获取日期集合
|
|
|
+ jsonObject.put("time", timeList);
|
|
|
+ //获取数据集合
|
|
|
+ jsonObject.put("data", list.stream().map(TXinyiForecastComparison::getRealOne).collect(Collectors.toList()));
|
|
|
+ return jsonObject;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<TXinyiForecastComparison> getRecentDates(TXinyiForecastComparison tXinyiForecastComparison) {
|
|
|
+ //请求参数
|
|
|
+ String timeBegin = tXinyiForecastComparison.getTimeBegin();
|
|
|
+ String timeEnd = tXinyiForecastComparison.getTimeEnd();
|
|
|
+
|
|
|
+ //日期兜底处理
|
|
|
+ Date nowDate = DateUtils.getNowDate();
|
|
|
+ Date dayBefore7 = DateUtils.plusDate(-7, nowDate);
|
|
|
+ //先用日期获取当天和前一天的数据,如果获取不到,则提示错误信息
|
|
|
+ String nowDateStr = DateUtils.parseDateToStr(DateUtils.YYYYMMDD_TS, nowDate) + TIME_END_23;
|
|
|
+ String dayBefore7Str = DateUtils.parseDateToStr(DateUtils.YYYYMMDD_TS, dayBefore7) + TIME_BEGIN_00;
|
|
|
+ if(StringUtils.isBlank(timeBegin))
|
|
|
+ tXinyiForecastComparison.setTimeBegin(dayBefore7Str);
|
|
|
+ if(StringUtils.isBlank(timeEnd))
|
|
|
+ tXinyiForecastComparison.setTimeEnd(nowDateStr);
|
|
|
+ // this.addListExtra(list);//处理误差率 乘以100,取绝对值 保留2位小数
|
|
|
+ //2024年08月16日14:37:52 同一个SQL,不同排序
|
|
|
+ tXinyiForecastComparison.setSort(SORT_ASC);
|
|
|
+ return this.tXinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(tXinyiForecastComparison);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|