|
@@ -0,0 +1,157 @@
|
|
|
+package com.jiayue.ipp.idp.job;
|
|
|
+
|
|
|
+import cn.hutool.core.io.IoUtil;
|
|
|
+import cn.hutool.core.io.resource.ResourceUtil;
|
|
|
+import cn.hutool.core.util.CharsetUtil;
|
|
|
+import cn.hutool.extra.template.Template;
|
|
|
+import cn.hutool.extra.template.TemplateConfig;
|
|
|
+import cn.hutool.extra.template.TemplateEngine;
|
|
|
+import cn.hutool.extra.template.TemplateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.jiayue.ipfcst.common.core.util.DateMomentUtil;
|
|
|
+import com.jiayue.ipp.common.data.entity.ForecastPowerShortTerm;
|
|
|
+import com.jiayue.ipp.common.data.entity.an.ParsingChannel;
|
|
|
+import com.jiayue.ipp.idp.dto.ForecastData;
|
|
|
+import com.jiayue.ipp.idp.service.ForecastPowerShortTermService;
|
|
|
+import com.jiayue.ipp.idp.service.an.ParsingChannelService;
|
|
|
+import com.jiayue.ipp.idp.util.FileUtil;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.io.FileUtils;
|
|
|
+import org.apache.commons.lang.time.DateFormatUtils;
|
|
|
+import org.apache.commons.lang.time.DateUtils;
|
|
|
+import org.apache.velocity.VelocityContext;
|
|
|
+import org.apache.velocity.app.VelocityEngine;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.StringWriter;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 下发嘉越短期数据
|
|
|
+ *
|
|
|
+ * @author jy
|
|
|
+ * @since 2024/07/01
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class SendJyDqData {
|
|
|
+
|
|
|
+ @Value("${dqForecastDays}")
|
|
|
+ private Integer dqForecastDays;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ParsingChannelService parsingChannelService;
|
|
|
+ @Autowired
|
|
|
+ ForecastPowerShortTermService forecastPowerShortTermService;
|
|
|
+ @Autowired
|
|
|
+ VelocityEngine velocityEngine;
|
|
|
+
|
|
|
+ @Scheduled(cron = "0 0/1 * * * *")
|
|
|
+ public void sendJyDqData() {
|
|
|
+ log.info("下发嘉越DQ数据开始");
|
|
|
+ // 获取ftp通道
|
|
|
+ LambdaQueryWrapper<ParsingChannel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(ParsingChannel::getAnChannelType, "E1");
|
|
|
+ lambdaQueryWrapper.eq(ParsingChannel::getUseStatus, "E1");
|
|
|
+ List<ParsingChannel> parsingChannels = parsingChannelService.list(lambdaQueryWrapper);
|
|
|
+ String dateDir = DateFormatUtils.format(new Date(), "yyyyMMdd");
|
|
|
+ //遍历解析路径,对文件进行解析
|
|
|
+ for (ParsingChannel parsingChannel : parsingChannels) {
|
|
|
+ try{
|
|
|
+ String distPath = FileUtil.getSendJyDataPath()+File.separator+parsingChannel.getUsername()+File.separator+"download"+File.separator+dateDir;
|
|
|
+ File dirFile = new File(distPath);
|
|
|
+ if (!dirFile.exists()) {
|
|
|
+ dirFile.mkdirs();
|
|
|
+ }
|
|
|
+ // 生成短期文件
|
|
|
+ String stationCode = parsingChannel.getUsername().split("-")[0];
|
|
|
+ // 获取短期实时数据,开始时间
|
|
|
+ Long startTime = DateMomentUtil.getDayStartTime(DateUtils.addDays(new Date(), 1).getTime());
|
|
|
+ // 结束时间(开始加24小时再减去1秒)
|
|
|
+ Long endTime = DateMomentUtil.getDayLastTime(DateUtils.addDays(new Date(), dqForecastDays).getTime());
|
|
|
+
|
|
|
+ // 查询短期预测功率
|
|
|
+ LambdaQueryWrapper<ForecastPowerShortTerm> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(ForecastPowerShortTerm::getForecastManufactor, "SYJY");
|
|
|
+ queryWrapper.eq(ForecastPowerShortTerm::getStationCode, stationCode);
|
|
|
+ queryWrapper.between(ForecastPowerShortTerm::getForecastTime, new Date(startTime), new Date(endTime));
|
|
|
+
|
|
|
+ List<ForecastPowerShortTerm> forecastPowerShortTermList = this.forecastPowerShortTermService.list(queryWrapper);
|
|
|
+ System.out.println(stationCode+"获取实时短期数据多少条:"+forecastPowerShortTermList.size());
|
|
|
+ List<ForecastData> vList = new ArrayList<>();
|
|
|
+ for (ForecastPowerShortTerm forecastPowerShortTerm:forecastPowerShortTermList){
|
|
|
+ ForecastData forecastData = new ForecastData();
|
|
|
+ forecastData.setTime(DateFormatUtils.format(forecastPowerShortTerm.getForecastTime(), "yyyy-MM-dd HH:mm:ss"));
|
|
|
+ forecastData.setPower(forecastPowerShortTerm.getFpValue().toString());
|
|
|
+ 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 vmFileName = "send_"+stationCode+"_dq_"+dateDir+".WPD";
|
|
|
+ createSendDqFile(writer,new File(distPath + File.separator+vmFileName));
|
|
|
+
|
|
|
+
|
|
|
+// Map bindingMap = new HashMap();
|
|
|
+// bindingMap.put("vList", forecastPowerShortTermHisList);
|
|
|
+// String content = IoUtil.readUtf8(ResourceUtil.getStream("templates"+File.separator +"send_dq.vm"));
|
|
|
+// Template templateDq = getTemplate(content);
|
|
|
+// //渲染模型数据
|
|
|
+// String vmStr = templateDq.render(bindingMap);
|
|
|
+//
|
|
|
+// cn.hutool.core.io.FileUtil.writeString(vmStr, distPath + File.separator+vmFileName, CharsetUtil.UTF_8);
|
|
|
+ log.info(stationCode+"下发嘉越DQ数据成功!");
|
|
|
+ }
|
|
|
+ catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("下发嘉越DQ数据结束");
|
|
|
+
|
|
|
+ }
|
|
|
+ public static Template getTemplate(String templateStr) {
|
|
|
+ //构造模板引擎
|
|
|
+ TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
|
|
|
+ Template template = engine.getTemplate(templateStr);
|
|
|
+ return template;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成上报文件
|
|
|
+ *
|
|
|
+ * @param writer
|
|
|
+ * @param file
|
|
|
+ */
|
|
|
+ protected void createSendDqFile(StringWriter writer, File file) {
|
|
|
+ FileOutputStream os = null;
|
|
|
+ try {
|
|
|
+ os = new FileOutputStream(file);
|
|
|
+ // 采用UTF-8字符集
|
|
|
+ os.write(writer.toString().getBytes("UTF-8"));
|
|
|
+ os.flush();
|
|
|
+
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ if (os != null) {
|
|
|
+ try {
|
|
|
+ os.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("文件生成关闭流失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|