This commit is contained in:
duwenyuan 2026-02-04 13:48:39 +08:00
commit d14192014f
12 changed files with 77 additions and 47 deletions

View File

@ -22,7 +22,7 @@ public class EventConstants {
public static final String METCRO3D_VNAMES = "TA,PRES"; public static final String METCRO3D_VNAMES = "TA,PRES";
public static final String EMIS_VNAMES = "CO,PSI"; public static final String EMIS_VNAMES = "CO,PSI";
public static final String WRF_PATTERN = "wrfout_d03_{YYYY-MM-DD}_00_00_00"; public static final String WRF_PATTERN = "wrfout_d03_{YYYY-MM-DD}_00:00:00";
public static final String CONC_PATTERN = "CCTM.CONC.d03.{YYYYMMDD}"; public static final String CONC_PATTERN = "CCTM.CONC.d03.{YYYYMMDD}";
public static final String METCRO3D_PATTERN = "METCRO3D_d03_{YYYYMMDD}"; public static final String METCRO3D_PATTERN = "METCRO3D_d03_{YYYYMMDD}";
public static final String EMIS_PATTERN = "emis_{YYYYMMDD}"; public static final String EMIS_PATTERN = "emis_{YYYYMMDD}";

View File

@ -18,13 +18,13 @@ public enum EnginStatusEnum {
*/ */
PAUSED(2), PAUSED(2),
/** /**
* 继续运行 * 运行异常
*/ */
RESUMED(3), ABNORMAL(3),
/** /**
* 结束运行 * 运行完成
*/ */
FINISHED(4); COMPLETED(4);
private Integer key; private Integer key;

View File

@ -40,8 +40,13 @@ public class EventServerProperties {
private String resultFilePrefix; private String resultFilePrefix;
/** /**
* 剂量py存放目录 * 外部py目录
*/ */
private String pythonPath; private String pythonPath;
/**
* 容器py目录
*/
private String dockerPyPath;
} }

View File

@ -109,9 +109,9 @@ public class Cmaq implements Serializable {
private String szpath; private String szpath;
private String emisShour; private Integer emisShour;
private String emisEhour; private Integer emisEhour;
private String fileName; private String fileName;

View File

@ -28,7 +28,7 @@ public class Engineering {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime; private Date updateTime;
/** /**
* 工程状态(0:未运行1:正在运行2:暂停3:继续运行4:结束运行) * 工程状态(0:未运行1:正在运行2:暂停3:运行异常4:运行完成)
* */ * */
private Integer enginStatus; private Integer enginStatus;
/**工程名称*/ /**工程名称*/

View File

@ -48,7 +48,7 @@ public class Wrf implements Serializable {
/**事件结束时间*/ /**事件结束时间*/
private String endTime; private String endTime;
/**事件模拟小时数*/ /**事件模拟小时数*/
private String analogTime; private Integer analogTime;
/**事件模拟天数*/ /**事件模拟天数*/
private String runDays; private String runDays;
/**事件类型*/ /**事件类型*/

View File

@ -65,7 +65,6 @@ public class EngineeringServiceImpl extends ServiceImpl<EngineeringMapper, Engin
@Override @Override
public void initDir(Engineering engineering){ public void initDir(Engineering engineering){
String baseHome = eventServerProperties.getBaseHome() + File.separator; String baseHome = eventServerProperties.getBaseHome() + File.separator;
// String baseHome = eventServerProperties.getBaseHome() + "/";
String ip = eventServerProperties.getIp(); String ip = eventServerProperties.getIp();
String username = eventServerProperties.getUsername(); String username = eventServerProperties.getUsername();
String password = eventServerProperties.getPassword(); String password = eventServerProperties.getPassword();

View File

@ -5,19 +5,22 @@ import lombok.Data;
@Data @Data
public class RunProcessParamVO { public class RunProcessParamVO {
private String enginId; private String enginId;
//气象数据来源
private Integer weatherDataType; private Integer weatherDataType;
//场景类型
private Integer sceneType; private Integer sceneType;
//事故类型
private Integer eventType; private Integer eventType;
//事件时间
private String eventTime; private String eventTime;
//运行时间
private Integer analogTime; private Integer analogTime;
/**经度*/ /**经度*/
private Double refLon; private Double refLon;
/**纬度*/ /**纬度*/
private Double refLat; private Double refLat;
//开始排放时间
//cmaq参数
private Integer emisShour; private Integer emisShour;
//结束排放时间
private Integer emisEhour; private Integer emisEhour;
} }

View File

@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.cmaq.service.CmaqService; import org.jeecg.cmaq.service.CmaqService;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.constant.enums.EnginStatusEnum;
import org.jeecg.engineering.service.EngineeringService; import org.jeecg.engineering.service.EngineeringService;
import org.jeecg.modules.base.entity.Engineering; import org.jeecg.modules.base.entity.Engineering;
import org.jeecg.runProcess.VO.RunProcessParamVO; import org.jeecg.runProcess.VO.RunProcessParamVO;
@ -46,12 +47,12 @@ public class RunProcessController {
if(bizEngineering == null) { if(bizEngineering == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
// if(bizEngineering.getEnginStatus() == 2){ // if(bizEngineering.getEnginStatus() == 1){
// return Result.error("程序正在运行中..."); // return Result.error("程序正在运行中...");
// } // }
bizEngineering.setSceneType(sceneType); bizEngineering.setSceneType(sceneType);
bizEngineering.setEventType(paramVO.getEventType()); bizEngineering.setEventType(paramVO.getEventType());
bizEngineering.setEnginStatus(2); bizEngineering.setEnginStatus(EnginStatusEnum.IN_OPERATION.getKey());
engineeringService.updateById(bizEngineering); engineeringService.updateById(bizEngineering);
engineeringService.initDir(bizEngineering); engineeringService.initDir(bizEngineering);
wrfService.updateWrfInfo(paramVO); wrfService.updateWrfInfo(paramVO);

View File

@ -6,6 +6,7 @@ import org.jeecg.baseAPI.service.BaseAPIService;
import org.jeecg.cmaq.service.CmaqService; import org.jeecg.cmaq.service.CmaqService;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.EventConstants; import org.jeecg.common.constant.EventConstants;
import org.jeecg.common.constant.enums.EnginStatusEnum;
import org.jeecg.common.properties.EventServerProperties; import org.jeecg.common.properties.EventServerProperties;
import org.jeecg.common.util.ExecutePyUtils; import org.jeecg.common.util.ExecutePyUtils;
import org.jeecg.engineering.service.EngineeringService; import org.jeecg.engineering.service.EngineeringService;
@ -38,9 +39,9 @@ public class RunProcessServiceImpl implements RunProcessService {
@Override @Override
public Result<String> runAllExe(RunProcessParamVO paramVO){ public Result<String> runAllExe(RunProcessParamVO paramVO){
String engineeringId = paramVO.getEnginId();
Engineering engineering = engineeringService.getById(engineeringId);
try{ try{
String engineeringId = paramVO.getEnginId();
Engineering engineering = engineeringService.getById(engineeringId);
Wrf wrf = wrfService.getOne(new LambdaQueryWrapper<Wrf>().eq(Wrf::getEnginId,engineeringId)); Wrf wrf = wrfService.getOne(new LambdaQueryWrapper<Wrf>().eq(Wrf::getEnginId,engineeringId));
//各种路径前缀 //各种路径前缀
@ -68,35 +69,38 @@ public class RunProcessServiceImpl implements RunProcessService {
String eDate = LocalDateTime.parse( wrf.getEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).minusDays(1).format(DateTimeFormatter.ofPattern("yyyyMMdd")); String eDate = LocalDateTime.parse( wrf.getEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).minusDays(1).format(DateTimeFormatter.ofPattern("yyyyMMdd"));
exeDepPy(sDate, eDate, EventConstants.DEP_VNAMES, exeDepPy(sDate, eDate, EventConstants.DEP_VNAMES,
workDirPath + EventConstants.CONC_DIR, resultFilePath, workDirPath + EventConstants.CONC_DIR, resultFilePath, scriptsPath,
EventConstants.DEP_OUT_PREFIX, "相加DEP结果数据"); EventConstants.DEP_OUT_PREFIX, "相加DEP结果数据");
exePyScript(sDate, eDate, EventConstants.WRF_VNAMES, exePyScript(sDate, eDate, EventConstants.WRF_VNAMES,
workDirPath + EventConstants.WRF_DIR, resultFilePath, workDirPath + EventConstants.WRF_DIR, resultFilePath, scriptsPath,
EventConstants.WRF_OUT_PREFIX, EventConstants.WRF_PATTERN, "合并WRF结果数据"); EventConstants.WRF_OUT_PREFIX, EventConstants.WRF_PATTERN, "合并WRF结果数据");
exePyScript(sDate, eDate, EventConstants.CONC_VNAMES, exePyScript(sDate, eDate, EventConstants.CONC_VNAMES,
workDirPath + EventConstants.CONC_DIR, resultFilePath, workDirPath + EventConstants.CONC_DIR, resultFilePath, scriptsPath,
EventConstants.CONC_OUT_PREFIX, EventConstants.CONC_PATTERN, "合并CONC结果数据"); EventConstants.CONC_OUT_PREFIX, EventConstants.CONC_PATTERN, "合并CONC结果数据");
exePyScript(sDate, eDate, EventConstants.METCRO3D_VNAMES, exePyScript(sDate, eDate, EventConstants.METCRO3D_VNAMES,
workDirPath + EventConstants.METCRO3D_DIR, resultFilePath, workDirPath + EventConstants.METCRO3D_DIR, resultFilePath, scriptsPath,
EventConstants.METCRO3D_OUT_PREFIX, EventConstants.METCRO3D_PATTERN, "合并METCRO3D结果数据"); EventConstants.METCRO3D_OUT_PREFIX, EventConstants.METCRO3D_PATTERN, "合并METCRO3D结果数据");
exePyScript(sDate, eDate, EventConstants.EMIS_VNAMES, exePyScript(sDate, eDate, EventConstants.EMIS_VNAMES,
allRunPath + EventConstants.EMIS_DIR, resultFilePath, allRunPath + EventConstants.EMIS_DIR, resultFilePath, scriptsPath,
EventConstants.EMIS_OUT_PREFIX, EventConstants.EMIS_PATTERN, "合并EMIS结果数据"); EventConstants.EMIS_OUT_PREFIX, EventConstants.EMIS_PATTERN, "合并EMIS结果数据");
//生成计算剂量转换系数入参文件 //生成计算剂量转换系数入参文件
eventTypeService.genSourceItemFile(engineering.getEventType(), resultFilePath); eventTypeService.genSourceItemFile(engineering.getEventType(), resultFilePath);
exeDoseCalculator(wrf.getAnalogTime(), resultFilePath, "计算剂量转换系数"); exeDoseCalculator(wrf.getAnalogTime(), resultFilePath, scriptsPath, "计算剂量转换系数");
exeDosePy(sDate, eDate, resultFilePath,"执行剂量转换");
exeDosePy(sDate, eDate, resultFilePath, scriptsPath, "执行剂量转换");
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
engineering.setEnginStatus(EnginStatusEnum.ABNORMAL.getKey());
engineeringService.updateById(engineering);
return Result.error(e.getMessage()); return Result.error(e.getMessage());
} }
engineering.setEnginStatus(EnginStatusEnum.COMPLETED.getKey());
engineeringService.updateById(engineering);
return Result.OK("运行成功!"); return Result.OK("运行成功!");
} }
@ -145,11 +149,10 @@ public class RunProcessServiceImpl implements RunProcessService {
* 执行Python脚本 * 执行Python脚本
*/ */
private void exePyScript(String sDate, String eDate, String vNames, String inputPath, private void exePyScript(String sDate, String eDate, String vNames, String inputPath,
String outputPath, String outFileName, String pattern, String desc) { String outputPath, String scriptsPath, String outFileName, String pattern, String desc) {
String[] command = { String[] command = {
"python", eventServerProperties.getDockerPyPath() + File.separator + "python",
eventServerProperties.getBaseHome() + File.separator + scriptsPath + EventConstants.MERGE_RESULTS,
eventServerProperties.getPythonPath() + File.separator + EventConstants.MERGE_RESULTS,
vNames, vNames,
inputPath, inputPath,
outputPath, outputPath,
@ -166,11 +169,10 @@ public class RunProcessServiceImpl implements RunProcessService {
* 执行沉降Python脚本 * 执行沉降Python脚本
*/ */
private void exeDepPy(String sDate, String eDate, String vNames, String inputPath, private void exeDepPy(String sDate, String eDate, String vNames, String inputPath,
String outputPath, String outFileName, String desc) { String outputPath, String scriptsPath, String outFileName, String desc) {
String[] command = { String[] command = {
"python", eventServerProperties.getDockerPyPath() + File.separator + "python",
eventServerProperties.getBaseHome() + File.separator + scriptsPath + EventConstants.SUM_DRY_WET,
eventServerProperties.getPythonPath() + File.separator + EventConstants.SUM_DRY_WET,
vNames, vNames,
inputPath, inputPath,
outputPath, outputPath,
@ -185,12 +187,11 @@ public class RunProcessServiceImpl implements RunProcessService {
/** /**
* 计算剂量转换系数 * 计算剂量转换系数
*/ */
private void exeDoseCalculator(String analogTime, String resultFilePath, String desc) { private void exeDoseCalculator(Integer analogTime, String resultFilePath, String scriptsPath, String desc) {
String[] command = { String[] command = {
"python", eventServerProperties.getDockerPyPath() + File.separator + "python",
eventServerProperties.getBaseHome() + File.separator + scriptsPath + EventConstants.DOSE_CALCULATOR,
eventServerProperties.getPythonPath() + File.separator + EventConstants.DOSE_CALCULATOR, analogTime + "",
analogTime,
resultFilePath, resultFilePath,
resultFilePath, resultFilePath,
EventConstants.DOSE_FACTOR_NAME, EventConstants.DOSE_FACTOR_NAME,
@ -204,11 +205,10 @@ public class RunProcessServiceImpl implements RunProcessService {
/** /**
* 执行浓度转剂量Python脚本 * 执行浓度转剂量Python脚本
*/ */
private void exeDosePy(String sDate, String eDate, String resultFilePath, String desc) { private void exeDosePy(String sDate, String eDate, String resultFilePath, String scriptsPath, String desc) {
String[] command = { String[] command = {
"python", eventServerProperties.getDockerPyPath() + File.separator + "python",
eventServerProperties.getBaseHome() + File.separator + scriptsPath + EventConstants.CONVERT_CONC_TO_DOSE,
eventServerProperties.getPythonPath() + File.separator + EventConstants.CONVERT_CONC_TO_DOSE,
sDate, sDate,
eDate, eDate,
resultFilePath, resultFilePath,

View File

@ -3,11 +3,15 @@ package org.jeecg.wrf.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.cmaq.service.CmaqService;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.engineering.service.EngineeringService;
import org.jeecg.modules.base.entity.Cmaq; import org.jeecg.modules.base.entity.Cmaq;
import org.jeecg.modules.base.entity.Engineering;
import org.jeecg.modules.base.entity.Wrf; import org.jeecg.modules.base.entity.Wrf;
import org.jeecg.runProcess.VO.RunProcessParamVO;
import org.jeecg.wrf.service.WrfService; import org.jeecg.wrf.service.WrfService;
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.*;
@ -24,6 +28,10 @@ import org.springframework.web.bind.annotation.*;
public class WrfController extends JeecgController<Wrf, WrfService> { public class WrfController extends JeecgController<Wrf, WrfService> {
@Autowired @Autowired
private WrfService wrfService; private WrfService wrfService;
@Autowired
private CmaqService cmaqService;
@Autowired
private EngineeringService engineeringService;
/** /**
* 编辑 * 编辑
@ -48,8 +56,22 @@ public class WrfController extends JeecgController<Wrf, WrfService> {
@AutoLog(value = "查询wrf参数信息") @AutoLog(value = "查询wrf参数信息")
@Operation(summary = "查询wrf参数信息") @Operation(summary = "查询wrf参数信息")
@RequestMapping(value = "/getByEnginId", method = {RequestMethod.GET}) @RequestMapping(value = "/getByEnginId", method = {RequestMethod.GET})
public Result<Wrf> getByEnginId(String enginId) { public Result<RunProcessParamVO> getByEnginId(String enginId) {
return Result.OK(wrfService.getOne(new LambdaQueryWrapper<Wrf>().eq(Wrf::getEnginId,enginId))); Wrf wrf = wrfService.getOne(new LambdaQueryWrapper<Wrf>().eq(Wrf::getEnginId, enginId));
Cmaq cmaq = cmaqService.getOne(new LambdaQueryWrapper<Cmaq>().eq(Cmaq::getEnginId, enginId));
Engineering engin = engineeringService.getOne(new LambdaQueryWrapper<Engineering>().eq(Engineering::getId, enginId));
RunProcessParamVO paramVO = new RunProcessParamVO();
paramVO.setEmisShour(cmaq.getEmisShour());
paramVO.setEmisEhour(cmaq.getEmisEhour());
paramVO.setEnginId(enginId);
paramVO.setRefLon(wrf.getRefLon());
paramVO.setRefLat(wrf.getRefLat());
paramVO.setEventTime(wrf.getStartTime());
paramVO.setAnalogTime(wrf.getAnalogTime());
paramVO.setSceneType(wrf.getSceneType());
paramVO.setEventType(engin.getEventType());
paramVO.setWeatherDataType(wrf.getWeatherDataType());
return Result.OK(paramVO);
} }
} }

View File

@ -1,5 +1,5 @@
server: server:
port: 9999 port: 6668
knife4j: knife4j:
gateway: gateway: