修改bug

This commit is contained in:
hekaiyu 2026-01-24 21:22:21 +08:00
parent 165dce6786
commit 02d94d6d36
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 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 METCRO3D_PATTERN = "METCRO3D_d03_{YYYYMMDD}";
public static final String EMIS_PATTERN = "emis_{YYYYMMDD}";

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,6 +6,7 @@ import org.jeecg.baseAPI.service.BaseAPIService;
import org.jeecg.cmaq.service.CmaqService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.EventConstants;
import org.jeecg.common.constant.enums.EnginStatusEnum;
import org.jeecg.common.properties.EventServerProperties;
import org.jeecg.common.util.ExecutePyUtils;
import org.jeecg.engineering.service.EngineeringService;
@ -38,9 +39,9 @@ public class RunProcessServiceImpl implements RunProcessService {
@Override
public Result<String> runAllExe(RunProcessParamVO paramVO){
String engineeringId = paramVO.getEnginId();
Engineering engineering = engineeringService.getById(engineeringId);
try{
String engineeringId = paramVO.getEnginId();
Engineering engineering = engineeringService.getById(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"));
exeDepPy(sDate, eDate, EventConstants.DEP_VNAMES,
workDirPath + EventConstants.CONC_DIR, resultFilePath,
workDirPath + EventConstants.CONC_DIR, resultFilePath, scriptsPath,
EventConstants.DEP_OUT_PREFIX, "相加DEP结果数据");
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结果数据");
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结果数据");
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结果数据");
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结果数据");
//生成计算剂量转换系数入参文件
eventTypeService.genSourceItemFile(engineering.getEventType(), resultFilePath);
exeDoseCalculator(wrf.getAnalogTime(), resultFilePath, "计算剂量转换系数");
exeDosePy(sDate, eDate, resultFilePath,"执行剂量转换");
exeDoseCalculator(wrf.getAnalogTime(), resultFilePath, scriptsPath, "计算剂量转换系数");
exeDosePy(sDate, eDate, resultFilePath, scriptsPath, "执行剂量转换");
}catch (Exception e){
e.printStackTrace();
engineering.setEnginStatus(EnginStatusEnum.ABNORMAL.getKey());
engineeringService.updateById(engineering);
return Result.error(e.getMessage());
}
engineering.setEnginStatus(EnginStatusEnum.COMPLETED.getKey());
engineeringService.updateById(engineering);
return Result.OK("运行成功!");
}
@ -145,11 +149,10 @@ public class RunProcessServiceImpl implements RunProcessService {
* 执行Python脚本
*/
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 = {
"python",
eventServerProperties.getBaseHome() + File.separator +
eventServerProperties.getPythonPath() + File.separator + EventConstants.MERGE_RESULTS,
eventServerProperties.getDockerPyPath() + File.separator + "python",
scriptsPath + EventConstants.MERGE_RESULTS,
vNames,
inputPath,
outputPath,
@ -166,11 +169,10 @@ public class RunProcessServiceImpl implements RunProcessService {
* 执行沉降Python脚本
*/
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 = {
"python",
eventServerProperties.getBaseHome() + File.separator +
eventServerProperties.getPythonPath() + File.separator + EventConstants.SUM_DRY_WET,
eventServerProperties.getDockerPyPath() + File.separator + "python",
scriptsPath + EventConstants.SUM_DRY_WET,
vNames,
inputPath,
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 = {
"python",
eventServerProperties.getBaseHome() + File.separator +
eventServerProperties.getPythonPath() + File.separator + EventConstants.DOSE_CALCULATOR,
analogTime,
eventServerProperties.getDockerPyPath() + File.separator + "python",
scriptsPath + EventConstants.DOSE_CALCULATOR,
analogTime + "",
resultFilePath,
resultFilePath,
EventConstants.DOSE_FACTOR_NAME,
@ -204,11 +205,10 @@ public class RunProcessServiceImpl implements RunProcessService {
/**
* 执行浓度转剂量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 = {
"python",
eventServerProperties.getBaseHome() + File.separator +
eventServerProperties.getPythonPath() + File.separator + EventConstants.CONVERT_CONC_TO_DOSE,
eventServerProperties.getDockerPyPath() + File.separator + "python",
scriptsPath + EventConstants.CONVERT_CONC_TO_DOSE,
sDate,
eDate,
resultFilePath,

View File

@ -3,11 +3,15 @@ package org.jeecg.wrf.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.cmaq.service.CmaqService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
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.Engineering;
import org.jeecg.modules.base.entity.Wrf;
import org.jeecg.runProcess.VO.RunProcessParamVO;
import org.jeecg.wrf.service.WrfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -24,6 +28,10 @@ import org.springframework.web.bind.annotation.*;
public class WrfController extends JeecgController<Wrf, WrfService> {
@Autowired
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参数信息")
@Operation(summary = "查询wrf参数信息")
@RequestMapping(value = "/getByEnginId", method = {RequestMethod.GET})
public Result<Wrf> getByEnginId(String enginId) {
return Result.OK(wrfService.getOne(new LambdaQueryWrapper<Wrf>().eq(Wrf::getEnginId,enginId)));
public Result<RunProcessParamVO> getByEnginId(String 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:
port: 9999
port: 6668
knife4j:
gateway: