|
@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.jiayue.ipfcst.common.core.util.DateMomentUtil;
|
|
|
import com.jiayue.ipp.common.data.entity.DqIntervene;
|
|
|
+import com.jiayue.ipp.common.data.entity.ElectricField;
|
|
|
import com.jiayue.ipp.common.data.entity.ForecastPowerShortTerm;
|
|
|
import com.jiayue.ipp.idp.dto.ForecastData;
|
|
|
import com.jiayue.ipp.idp.service.DqInterveneService;
|
|
|
+import com.jiayue.ipp.idp.service.ElectricFieldService;
|
|
|
import com.jiayue.ipp.idp.service.ForecastPowerShortTermService;
|
|
|
import com.jiayue.ipp.idp.service.SysParameterService;
|
|
|
import com.jiayue.ipp.idp.util.FileUtil;
|
|
@@ -45,6 +47,8 @@ public class SendJyDqDataServiceImpl{
|
|
|
DqInterveneService dqInterveneService;
|
|
|
@Autowired
|
|
|
VelocityEngine velocityEngine;
|
|
|
+ @Autowired
|
|
|
+ ElectricFieldService electricFieldService;
|
|
|
|
|
|
public void sendDqDownloadFile(String stationCode,String ftpAccount){
|
|
|
try{
|
|
@@ -60,59 +64,66 @@ public class SendJyDqDataServiceImpl{
|
|
|
Long startTime = DateMomentUtil.getDayStartTime(DateUtils.addDays(new Date(), 1).getTime());
|
|
|
// 结束时间(开始加24小时再减去1秒)
|
|
|
Long endTime = DateMomentUtil.getDayLastTime(DateUtils.addDays(new Date(), dqForecastDays).getTime());
|
|
|
+ ElectricField electricField = electricFieldService.findByStationCode(stationCode);
|
|
|
// 查询短期预测功率
|
|
|
LambdaQueryWrapper<ForecastPowerShortTerm> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
- queryWrapper.eq(ForecastPowerShortTerm::getForecastManufactor, "SYJY");
|
|
|
+ queryWrapper.eq(ForecastPowerShortTerm::getForecastManufactor, electricField.getBelongForecastManufactor());
|
|
|
queryWrapper.eq(ForecastPowerShortTerm::getStationCode, stationCode);
|
|
|
queryWrapper.between(ForecastPowerShortTerm::getForecastTime, new Date(startTime), new Date(endTime));
|
|
|
|
|
|
List<ForecastPowerShortTerm> forecastPowerShortTermList = this.forecastPowerShortTermService.list(queryWrapper);
|
|
|
- Map<Long, ForecastPowerShortTerm> forecastPowerShortMap = forecastPowerShortTermList.stream()
|
|
|
- .collect(Collectors.toMap(
|
|
|
- myObject -> myObject.getForecastTime().getTime(), // keyMapper,将Date转换为long
|
|
|
- myObject -> myObject, // valueMapper,保持原对象
|
|
|
- (existing, replacement) -> existing // mergeFunction,处理重复key的情况,这里简单地保留现有的value
|
|
|
- ));
|
|
|
+ // 判断短期实时总数是否满足未来10天的数据
|
|
|
+ if (forecastPowerShortTermList.size() >= dqForecastDays * 96) {
|
|
|
+ Map<Long, ForecastPowerShortTerm> forecastPowerShortMap = forecastPowerShortTermList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ myObject -> myObject.getForecastTime().getTime(), // keyMapper,将Date转换为long
|
|
|
+ myObject -> myObject, // valueMapper,保持原对象
|
|
|
+ (existing, replacement) -> existing // mergeFunction,处理重复key的情况,这里简单地保留现有的value
|
|
|
+ ));
|
|
|
|
|
|
- // 人工干预
|
|
|
- QueryWrapper<DqIntervene> dqInterveneQueryWrapper = new QueryWrapper<>();
|
|
|
- dqInterveneQueryWrapper.between("forecast_time", new Date(startTime), new Date(endTime));
|
|
|
- dqInterveneQueryWrapper.eq("station_code",stationCode);
|
|
|
- List<DqIntervene> dqInterveneList = dqInterveneService.list(dqInterveneQueryWrapper);
|
|
|
- Map<Long, DqIntervene> dqInterveneMap = dqInterveneList.stream()
|
|
|
- .collect(Collectors.toMap(
|
|
|
- myObject -> myObject.getForecastTime().getTime(), // keyMapper,将Date转换为long
|
|
|
- myObject -> myObject, // valueMapper,保持原对象
|
|
|
- (existing, replacement) -> existing // mergeFunction,处理重复key的情况,这里简单地保留现有的value
|
|
|
- ));
|
|
|
+ // 人工干预
|
|
|
+ QueryWrapper<DqIntervene> dqInterveneQueryWrapper = new QueryWrapper<>();
|
|
|
+ dqInterveneQueryWrapper.between("forecast_time", new Date(startTime), new Date(endTime));
|
|
|
+ dqInterveneQueryWrapper.eq("station_code",stationCode);
|
|
|
+ List<DqIntervene> dqInterveneList = dqInterveneService.list(dqInterveneQueryWrapper);
|
|
|
+ Map<Long, DqIntervene> dqInterveneMap = dqInterveneList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ myObject -> myObject.getForecastTime().getTime(), // keyMapper,将Date转换为long
|
|
|
+ myObject -> myObject, // valueMapper,保持原对象
|
|
|
+ (existing, replacement) -> existing // mergeFunction,处理重复key的情况,这里简单地保留现有的value
|
|
|
+ ));
|
|
|
|
|
|
- List<ForecastData> vList = new ArrayList<>();
|
|
|
+ List<ForecastData> vList = new ArrayList<>();
|
|
|
|
|
|
- for (Long tempTime = startTime.longValue(); tempTime <= endTime.longValue(); tempTime = tempTime + 15 * 60 * 1000L) {
|
|
|
- ForecastData forecastData = new ForecastData();
|
|
|
- forecastData.setTime(DateFormatUtils.format(tempTime, "yyyy-MM-dd HH:mm:ss"));
|
|
|
- if (dqInterveneMap.get(tempTime)!=null){
|
|
|
- forecastData.setPower(dqInterveneMap.get(tempTime).getActivePower().toString());
|
|
|
- }
|
|
|
- else if (forecastPowerShortMap.get(tempTime)!=null){
|
|
|
- forecastData.setPower(forecastPowerShortMap.get(tempTime).getFpValue().toString());
|
|
|
- }
|
|
|
- else{
|
|
|
- forecastData.setPower("");
|
|
|
+ for (Long tempTime = startTime.longValue(); tempTime <= endTime.longValue(); tempTime = tempTime + 15 * 60 * 1000L) {
|
|
|
+ ForecastData forecastData = new ForecastData();
|
|
|
+ forecastData.setTime(DateFormatUtils.format(tempTime, "yyyy-MM-dd HH:mm:ss"));
|
|
|
+ if (dqInterveneMap.get(tempTime)!=null){
|
|
|
+ forecastData.setPower(dqInterveneMap.get(tempTime).getActivePower().toString());
|
|
|
+ }
|
|
|
+ else if (forecastPowerShortMap.get(tempTime)!=null){
|
|
|
+ forecastData.setPower(forecastPowerShortMap.get(tempTime).getFpValue().toString());
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ forecastData.setPower("");
|
|
|
+ }
|
|
|
+ vList.add(forecastData);
|
|
|
}
|
|
|
- vList.add(forecastData);
|
|
|
- }
|
|
|
|
|
|
- VelocityContext velocityContext = new VelocityContext();
|
|
|
- velocityContext.put("vList", vList);
|
|
|
- // 系统当前日期
|
|
|
- velocityContext.put("currentTime", DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
|
|
|
- StringWriter writer = new StringWriter();
|
|
|
- org.apache.velocity.Template template = this.velocityEngine.getTemplate(FileUtil.getResourceBasePath() + "/templates/send_dq.vm");
|
|
|
- template.merge(velocityContext, writer);
|
|
|
- String dateDir = DateFormatUtils.format(new Date(startTime), "yyyyMMdd");
|
|
|
- String vmFileName = "download_"+ftpAccount+"_dq_"+dateDir+".WPD";
|
|
|
- createSendDqFile(writer,new File(distPath + File.separator+vmFileName));
|
|
|
+ VelocityContext velocityContext = new VelocityContext();
|
|
|
+ velocityContext.put("vList", vList);
|
|
|
+ // 系统当前日期
|
|
|
+ velocityContext.put("currentTime", DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
|
|
|
+ StringWriter writer = new StringWriter();
|
|
|
+ org.apache.velocity.Template template = this.velocityEngine.getTemplate(FileUtil.getResourceBasePath() + "/templates/send_dq.vm");
|
|
|
+ template.merge(velocityContext, writer);
|
|
|
+ String dateDir = DateFormatUtils.format(new Date(startTime), "yyyyMMdd");
|
|
|
+ String vmFileName = "download_"+ftpAccount+"_dq_"+dateDir+".WPD";
|
|
|
+ createSendDqFile(writer,new File(distPath + File.separator+vmFileName));
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ log.info(electricField.getName()+"短期数据不足10天,不能下发子站文件");
|
|
|
+ }
|
|
|
}
|
|
|
catch (Exception e){
|
|
|
e.printStackTrace();
|