Browse Source

修改下发干预文件

xusl 9 months ago
parent
commit
22d1e29d7d

+ 1 - 1
ipp-ap/src/views/an/parsingChannel/parsingUrl/index.vue

@@ -22,7 +22,7 @@
         :header-cell-style="{background:'#ECF1FE'}"
         :header-cell-style="{background:'#ECF1FE'}"
         border
         border
         style="width: 100%">
         style="width: 100%">
-        <el-table-column prop="stationCode" label="场站编码" align="center"
+        <el-table-column prop="stationCode" label="场站名称" align="center"
                          :formatter="formatStationCode"></el-table-column>
                          :formatter="formatStationCode"></el-table-column>
         <el-table-column align="center" prop="cid" label="通道名称" :formatter="formatCid"></el-table-column>
         <el-table-column align="center" prop="cid" label="通道名称" :formatter="formatCid"></el-table-column>
         <el-table-column align="center" prop="urlStatus" label="使用状态" :formatter="formatStatus"></el-table-column>
         <el-table-column align="center" prop="urlStatus" label="使用状态" :formatter="formatStatus"></el-table-column>

+ 1 - 1
ipp-ap/src/views/idp/control/dqIntervene/index.vue

@@ -23,7 +23,7 @@
         </el-form-item>
         </el-form-item>
         <el-form-item>
         <el-form-item>
           <el-button size="small" :loading="loading" @click="getDqData">查询</el-button>
           <el-button size="small" :loading="loading" @click="getDqData">查询</el-button>
-          <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-s-tools" @click="saveDqPresets">保存短期预值</el-button>
+          <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-s-tools" @click="saveDqPresets">保存并下发短期预值</el-button>
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
       </el-header>
       </el-header>

+ 98 - 6
ipp-idp/src/main/java/com/jiayue/ipp/idp/controller/DqInterveneController.java

@@ -1,18 +1,34 @@
 package com.jiayue.ipp.idp.controller;
 package com.jiayue.ipp.idp.controller;
 
 
+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.DqIntervene;
+import com.jiayue.ipp.common.data.entity.ForecastPowerShortTerm;
+import com.jiayue.ipp.common.data.entity.an.ParsingChannel;
+import com.jiayue.ipp.common.data.entity.an.ParsingUrl;
 import com.jiayue.ipp.idp.dto.DqInterveneDto;
 import com.jiayue.ipp.idp.dto.DqInterveneDto;
 import com.jiayue.ipp.idp.dto.DqTempDto;
 import com.jiayue.ipp.idp.dto.DqTempDto;
+import com.jiayue.ipp.idp.dto.ForecastData;
 import com.jiayue.ipp.idp.service.DqInterveneService;
 import com.jiayue.ipp.idp.service.DqInterveneService;
+import com.jiayue.ipp.idp.service.an.ParsingChannelService;
+import com.jiayue.ipp.idp.service.an.ParsingUrlService;
+import com.jiayue.ipp.idp.util.FileUtil;
 import com.jiayue.ipp.idp.util.R;
 import com.jiayue.ipp.idp.util.R;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+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.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 
 
 /**
 /**
@@ -24,6 +40,12 @@ import java.util.List;
 public class DqInterveneController {
 public class DqInterveneController {
     @Autowired
     @Autowired
     DqInterveneService dqInterveneService;
     DqInterveneService dqInterveneService;
+    @Autowired
+    ParsingChannelService parsingChannelService;
+    @Autowired
+    VelocityEngine velocityEngine;
+    @Autowired
+    ParsingUrlService parsingUrlService;
 
 
     /**
     /**
      * 获取短期干预
      * 获取短期干预
@@ -40,12 +62,15 @@ public class DqInterveneController {
      */
      */
     @PostMapping(value = "/saveIntervene")
     @PostMapping(value = "/saveIntervene")
     public R savePresets(@RequestBody DqTempDto dqTempDto) {
     public R savePresets(@RequestBody DqTempDto dqTempDto) {
+        String stationCode = dqTempDto.getStationCode();
         List<DqInterveneDto> list = dqTempDto.getList();
         List<DqInterveneDto> list = dqTempDto.getList();
         // 先删除干预表的数据记录
         // 先删除干预表的数据记录
         list.sort(Comparator.comparing(DqInterveneDto::getForecastTime));
         list.sort(Comparator.comparing(DqInterveneDto::getForecastTime));
+        // 干预日期
+        String gyrq = DateFormatUtils.format(list.get(0).getForecastTime(), "yyyyMMdd");
         Date startTime = list.get(0).getForecastTime();
         Date startTime = list.get(0).getForecastTime();
         Date endTime = list.get(list.size() - 1).getForecastTime();
         Date endTime = list.get(list.size() - 1).getForecastTime();
-        dqInterveneService.deleteShort(startTime, endTime,dqTempDto.getStationCode());
+        dqInterveneService.deleteShort(startTime, endTime,stationCode);
         // 封装干预实体,保存数据
         // 封装干预实体,保存数据
         List<DqIntervene> presetsShortList = new ArrayList<>();
         List<DqIntervene> presetsShortList = new ArrayList<>();
         for (DqInterveneDto dqInterveneDto : list) {
         for (DqInterveneDto dqInterveneDto : list) {
@@ -53,12 +78,79 @@ public class DqInterveneController {
                 DqIntervene dqIntervene = new DqIntervene();
                 DqIntervene dqIntervene = new DqIntervene();
                 dqIntervene.setForecastTime(dqInterveneDto.getForecastTime());
                 dqIntervene.setForecastTime(dqInterveneDto.getForecastTime());
                 dqIntervene.setActivePower(dqInterveneDto.getPresetsPower());
                 dqIntervene.setActivePower(dqInterveneDto.getPresetsPower());
-                dqIntervene.setStationCode(dqTempDto.getStationCode());
+                dqIntervene.setStationCode(stationCode);
                 presetsShortList.add(dqIntervene);
                 presetsShortList.add(dqIntervene);
             }
             }
         }
         }
         dqInterveneService.saveBatch(presetsShortList);
         dqInterveneService.saveBatch(presetsShortList);
+        // 下发短期干预
+        log.info(stationCode+"下发嘉越DQ数据开始:"+gyrq);
+
+        LambdaQueryWrapper<ParsingUrl> urlWrapper = new LambdaQueryWrapper<>();
+        urlWrapper.eq(ParsingUrl::getUrlStatus, "1");
+        urlWrapper.eq(ParsingUrl::getStationCode, stationCode);
+        List<ParsingUrl> parsingUrlList = parsingUrlService.list(urlWrapper);
+        if (parsingUrlList.size()>0){
+            // 获取ftp通道
+            LambdaQueryWrapper<ParsingChannel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+            lambdaQueryWrapper.eq(ParsingChannel::getAnChannelType, "E1");
+            lambdaQueryWrapper.eq(ParsingChannel::getUseStatus, "E1");
+            lambdaQueryWrapper.eq(ParsingChannel::getId, parsingUrlList.get(0).getCId());
+            ParsingChannel parsingChannel = parsingChannelService.getOne(lambdaQueryWrapper);
+
+            String distPath = "/home"+ File.separator+parsingChannel.getUsername()+File.separator+"download";
+            File dirFile = new File(distPath);
+            if (!dirFile.exists()) {
+                dirFile.mkdirs();
+            }
+            VelocityContext velocityContext = new VelocityContext();
+            List<ForecastData> vList = new ArrayList<>();
+
+            for (DqIntervene d1:presetsShortList) {
+                ForecastData forecastData = new ForecastData();
+                forecastData.setTime(DateFormatUtils.format(d1.getForecastTime(), "yyyy-MM-dd HH:mm:ss"));
+                forecastData.setPower(d1.getActivePower().toString());
+                vList.add(forecastData);
+            }
+
+            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_"+gyrq+".WPD";
+            createSendDqFile(writer,new File(distPath + File.separator+vmFileName));
+            log.info(stationCode+"下发嘉越DQ数据成功:"+gyrq);
+        }
         return R.ok();
         return R.ok();
 
 
     }
     }
+    /**
+     * 生成上报文件
+     *
+     * @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);
+                }
+            }
+        }
+    }
 }
 }

+ 1 - 1
ipp-idp/src/main/java/com/jiayue/ipp/idp/dto/DqInterveneDto.java

@@ -28,7 +28,7 @@ public class DqInterveneDto {
     @Digits(integer = 10, fraction = 2)
     @Digits(integer = 10, fraction = 2)
     private BigDecimal activePower;
     private BigDecimal activePower;
     /**
     /**
-     * 预测功率(MW)
+     * 干预值(MW)
      */
      */
     @Digits(integer = 10, fraction = 2)
     @Digits(integer = 10, fraction = 2)
     private BigDecimal presetsPower;
     private BigDecimal presetsPower;

+ 190 - 190
ipp-idp/src/main/java/com/jiayue/ipp/idp/job/SendJyDqData.java

@@ -1,190 +1,190 @@
-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.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.ForecastPowerShortTerm;
-import com.jiayue.ipp.common.data.entity.an.ParsingChannel;
-import com.jiayue.ipp.idp.dto.ForecastData;
-import com.jiayue.ipp.idp.service.DqInterveneService;
-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.*;
-import java.util.stream.Collectors;
-
-/**
- * 下发嘉越短期数据
- *
- * @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;
-    @Autowired
-    DqInterveneService dqInterveneService;
-
-    @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);
-                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
-                        ));
-
-                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("");
-                    }
-                    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);
-                }
-            }
-        }
-    }
-}
+//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.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.ForecastPowerShortTerm;
+//import com.jiayue.ipp.common.data.entity.an.ParsingChannel;
+//import com.jiayue.ipp.idp.dto.ForecastData;
+//import com.jiayue.ipp.idp.service.DqInterveneService;
+//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.*;
+//import java.util.stream.Collectors;
+//
+///**
+// * 下发嘉越短期数据
+// *
+// * @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;
+//    @Autowired
+//    DqInterveneService dqInterveneService;
+//
+//    @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);
+//                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
+//                        ));
+//
+//                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("");
+//                    }
+//                    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);
+//                }
+//            }
+//        }
+//    }
+//}

+ 3 - 3
ipp-idp/src/main/java/com/jiayue/ipp/idp/util/FileUtil.java

@@ -74,9 +74,9 @@ public class FileUtil {
         return createParsingDir("parsing");
         return createParsingDir("parsing");
     }
     }
 
 
-    public static String getSendJyDataPath() {
-        return createParsingDir("ftp");
-    }
+//    public static String getSendJyDataPath() {
+//        return createParsingDir("ftp");
+//    }
 
 
     private static String createParsingDir(String dir) {
     private static String createParsingDir(String dir) {
         String path = "/home/syjy/ipp/" + dir;
         String path = "/home/syjy/ipp/" + dir;

+ 3 - 3
ipp-idp/src/main/resources/templates/send_dq.vm

@@ -1,7 +1,7 @@
 //${currentTime}
 //${currentTime}
 <forecastdata>
 <forecastdata>
-@id	预测时间 预测值
+@id	预测时间	预测值
 #foreach( $dq in $vList )
 #foreach( $dq in $vList )
-#${velocityCount}	${dq.time} 	${dq.power}
+#${velocityCount}	${dq.time}	${dq.power}
 #end
 #end
-</forecastdata>
+</forecastdata>