1.修改天气预报功能

2.编写输运模拟基本功能
3.修改所有服务打包策略
4.修改源项重建接口
This commit is contained in:
panbaolin 2025-10-24 18:04:18 +08:00
parent d5fabebe84
commit faddfbd223
37 changed files with 1063 additions and 119 deletions

View File

@ -0,0 +1,34 @@
package org.jeecg.common.constant.enums;
/**
* 输运任务状态说明枚举
*/
public enum TransportTaskStatusEnum {
/**
* 失败
*/
FAILURE(-1),
/**
* 未开始
*/
NOT_START(1),
/**
* 运行中
*/
RUNNING(2),
/**
* 已完成
*/
COMPLETED(3);
private Integer key;
TransportTaskStatusEnum(Integer key) {
this.key = key;
}
public Integer getKey(){
return this.key;
}
}

View File

@ -0,0 +1,26 @@
package org.jeecg.common.constant.enums;
/**
* 输运任务类型说明枚举
*/
public enum TransportTaskTypeEnum {
/**
* 手动创建
*/
MANUALLY(1),
/**
* 自动触发
*/
AUTO(2);
private Integer key;
TransportTaskTypeEnum(Integer key) {
this.key = key;
}
public Integer getKey(){
return this.key;
}
}

View File

@ -6,21 +6,21 @@ package org.jeecg.common.constant.enums;
public enum WeatherVariableNameEnum {
PANGU_T(0, 0, "Temperature_height_above_ground"),
PANGU_P(0, 1, "Pressure_msl"),
PANGU_H(0, 2, "Specific_humidity_isobaric"),
PANGU_U(0, 3, "u-component_of_wind_height_above_ground"),
PANGU_V(0, 4, "v-component_of_wind_height_above_ground"),
CRA40_T(1, 0, "Temperature_isobaric"),
CRA40_P(1, 1, "Vertical_velocity_pressure_isobaric"),
CRA40_H(1, 2, "Relative_humidity_isobaric"),
CRA40_U(1, 3, "u-component_of_wind_isobaric"),
CRA40_V(1, 4, "v-component_of_wind_isobaric"),
NCEP_T(2, 0, "Temperature_height_above_ground"),
NCEP_P(2, 1, "Pressure_msl"),
NCEP_H(2, 2, "Relative_humidity_height_above_ground"),
NCEP_U(2, 3, "u-component_of_wind_height_above_ground"),
NCEP_V(2, 4, "v-component_of_wind_height_above_ground");
PANGU_T(1, 0, "Temperature_height_above_ground"),
PANGU_P(1, 1, "Pressure_msl"),
PANGU_H(1, 2, "Specific_humidity_isobaric"),
PANGU_U(1, 3, "u-component_of_wind_height_above_ground"),
PANGU_V(1, 4, "v-component_of_wind_height_above_ground"),
CRA40_T(3, 0, "Temperature_isobaric"),
CRA40_P(3, 1, "Vertical_velocity_pressure_isobaric"),
CRA40_H(3, 2, "Relative_humidity_isobaric"),
CRA40_U(3, 3, "u-component_of_wind_isobaric"),
CRA40_V(3, 4, "v-component_of_wind_isobaric"),
NCEP_T(4, 0, "Temperature_height_above_ground"),
NCEP_P(4, 1, "Pressure_msl"),
NCEP_H(4, 2, "Relative_humidity_height_above_ground"),
NCEP_U(4, 3, "u-component_of_wind_height_above_ground"),
NCEP_V(4, 4, "v-component_of_wind_height_above_ground");
private Integer type;

View File

@ -1,37 +0,0 @@
package org.jeecg.common.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "source-rebuild")
public class SourceRebuildParams {
/**
* Rserve 服务地址
*/
private String serverAddr;
/**
* Rserve端口
*/
private Integer port;
/**
* Rserve 用户名称
*/
private String username;
/**
* Rserve密码
*/
private String password;
/**
* R项目工作空间
*/
private String workSpace;
}

View File

@ -0,0 +1,87 @@
package org.jeecg.common.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "source-rebuild")
public class SourceRebuildProperties {
/**
* Rserve 服务地址
*/
private String serverAddr;
/**
* Rserve端口
*/
private Integer port;
/**
* Rserve 用户名称
*/
private String username;
/**
* Rserve密码
*/
private String password;
/**
* R项目工作空间
*/
private String workSpace;
/**
* pg数据库ip
*/
private String dbHost;
/**
* pg数据库端口
*/
private Integer dbPort;
/**
* pg数据库名称
*/
private String dbName;
/**
* pg数据库用户名称
*/
private String dbUsername;
/**
* pg数据库密码
*/
private String dbPassword;
/**
* srs 文件路径
*/
private String srsFilePath;
/**
* xe文件srs文件所在的目录
*/
private String xeGZFileDirSign;
/**
* R项目所在路径
*/
private String rProject;
/**
* R项目输入目录
*/
private String rInput;
/**
* R项目输出目录
*/
private String rOutput;
}

View File

@ -303,10 +303,11 @@ public final class NcUtil {
*/
public static String getReftime(String filePath){
try (NetcdfFile ncFile = NetcdfFile.open(filePath)) {
Variable variable = ncFile.findVariable("reftime_ISO");
Variable variable = ncFile.findVariable("reftime");
if (variable != null) {
Array data = variable.read();
return data.getObject(0).toString();
String units = variable.findAttribute("units").getStringValue();
units = units.replace("Hour since ","");
return units;
}
}catch (Exception e){
return null;

View File

@ -0,0 +1,100 @@
package org.jeecg.modules.base.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Null;
import lombok.Data;
import org.jeecg.common.validgroup.InsertGroup;
import org.jeecg.common.validgroup.UpdateGroup;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
* 输运模拟任务表
*/
@Data
@TableName("stas_transport_task")
public class TransportTask{
/**
* ID
*/
@Null(message = "ID必须为空",groups = { InsertGroup.class})
@NotNull(message = "ID不能为空",groups = { UpdateGroup.class})
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 任务名称
*/
@NotBlank(message = "任务名称不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "task_name")
private String taskName;
/**
* 任务模式1-正向-1-反向
*/
@NotNull(message = "任务模式不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "task_mode")
private Integer taskMode;
/**
* 任务类型(1-手动创建2自动触发)
*/
@Null(message = "任务类型必须为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "task_type")
private Integer taskType;
/**
* 任务进度
*/
@Null(message = "任务进度必须为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "task_progress")
private Integer taskPprogress;
/**
* 任务状态-1执行失败1未开始2运行中3已完成
*/
@Null(message = "任务状态必须为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "task_status")
private Integer taskStatus;
/**
* 创建人
*/
@TableField(value = "create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新人
*/
@TableField(value = "update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@Valid
@TableField(exist = false)
List<TransportTaskChild> childList;
}

View File

@ -0,0 +1,92 @@
package org.jeecg.modules.base.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Null;
import lombok.Data;
import org.jeecg.common.validgroup.InsertGroup;
import org.jeecg.common.validgroup.UpdateGroup;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 输运模拟任务子表
*/
@Data
@TableName("stas_transport_task_child")
public class TransportTaskChild{
/**
* ID
*/
@Null(message = "ID必须为空",groups = { InsertGroup.class})
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 任务ID
*/
@Null(message = "任务id必须为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "task_id")
private Integer taskId;
/**
* 模拟开始时间
*/
@NotNull(message = "模拟开始时间不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "start_time")
private Date startTime;
/**
* 模拟结束时间
*/
@NotNull(message = "模拟结束时间不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "end_time")
private Date endTime;
/**
* 释放下部高度
*/
@NotNull(message = "释放下部高度不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "z1")
private Double z1;
/**
* 释放上部高度
*/
@NotNull(message = "释放上部高度不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "z2")
private Double z2;
/**
* 粒子数量
*/
@NotNull(message = "粒子数量不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "particle_count")
private Integer particleCount;
/**
* 物种编号
*/
@NotNull(message = "物种编号不能为空",groups = {InsertGroup.class, UpdateGroup.class})
@TableField(value = "specnum_rel")
private Integer specnumRel;
/**
* 创建人
*/
@TableField(value = "create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}

View File

@ -0,0 +1,45 @@
package org.jeecg.modules.base.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 输运模拟任务日志表
*/
@Data
@TableName("stas_transport_task_log")
public class TransportTaskLog implements Serializable {
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "ID")
private String id;
/**
* 任务表主键
*/
@TableField(value = "task_id")
private String taskId;
/**
* 任务运行过程日志
*/
@TableField(value = "log_content")
private String logContent;
/**
* 创建时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@ -51,7 +51,7 @@ public class WeatherData implements Serializable {
private LocalDateTime dataStartTime;
/**
* 数据来源1-盘古模型2-graphcast3-再分析数据
* 数据来源1-盘古模型2-graphcast3-cra404-ncep
*/
@TableField(value = "data_source")
private Integer dataSource;

View File

@ -0,0 +1,7 @@
package org.jeecg.modules.base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.base.entity.TransportTaskChild;
public interface TransportTaskChildMapper extends BaseMapper<TransportTaskChild> {
}

View File

@ -0,0 +1,8 @@
package org.jeecg.modules.base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.base.entity.TransportTaskLog;
public interface TransportTaskLogMapper extends BaseMapper<TransportTaskLog> {
}

View File

@ -0,0 +1,7 @@
package org.jeecg.modules.base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.base.entity.TransportTask;
public interface TransportTaskMapper extends BaseMapper<TransportTask> {
}

View File

@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.constant.enums.SourceRebuildTaskStatusEnum;
import org.jeecg.common.properties.SourceRebuildParams;
import org.jeecg.common.properties.SourceRebuildProperties;
import org.jeecg.common.properties.SystemStorageProperties;
import org.jeecg.common.system.query.PageRequest;
import org.jeecg.modules.base.entity.SourceRebuildMonitoringData;
@ -39,7 +39,7 @@ public class SourceRebuildTaskServiceImpl extends ServiceImpl<SourceRebuildTaskM
private final SourceRebuildMonitoringDataService monitoringDataService;
private final SourceRebuildTaskLogService sourceRebuildTaskLogService;
private final SystemStorageProperties systemStorageProperties;
private final SourceRebuildParams sourceRebuildParams;
private final SourceRebuildProperties sourceRebuildProperties;
/**
* 分页查询任务列表
@ -148,9 +148,7 @@ public class SourceRebuildTaskServiceImpl extends ServiceImpl<SourceRebuildTaskM
}
//删除结果文件
StringBuilder outputPath = new StringBuilder();
outputPath.append(systemStorageProperties.getRootPath());
outputPath.append("/");
outputPath.append(systemStorageProperties.getROutput());
outputPath.append(sourceRebuildProperties.getROutput());
outputPath.append("/");
outputPath.append(sourceRebuildTask.getTaskName());
if(FileUtil.exist(outputPath.toString())){
@ -179,15 +177,15 @@ public class SourceRebuildTaskServiceImpl extends ServiceImpl<SourceRebuildTaskM
throw new RuntimeException("监测数据为空,请补充监测数据");
}
// SourceRebuildTaskExec sourceRebuildTaskExec = new SourceRebuildTaskExec();
// sourceRebuildTaskExec.init(
// systemStorageProperties,
// taskMonitoringDatas,
// sourceRebuildTask,
// sourceRebuildTaskLogService,
// sourceRebuildParams,this);
// sourceRebuildTaskExec.setName(sourceRebuildTask.getId()+"_任务执行线程");
// sourceRebuildTaskExec.start();
SourceRebuildTaskExec sourceRebuildTaskExec = new SourceRebuildTaskExec();
sourceRebuildTaskExec.init(
taskMonitoringDatas,
sourceRebuildTask,
sourceRebuildTaskLogService,
sourceRebuildProperties,
this);
sourceRebuildTaskExec.setName(sourceRebuildTask.getId()+"_任务执行线程");
sourceRebuildTaskExec.start();
}
/**

View File

@ -3,7 +3,7 @@ package org.jeecg.service.impl;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.properties.SourceRebuildParams;
import org.jeecg.common.properties.SourceRebuildProperties;
import org.jeecg.common.util.DownloadUtils;
import org.jeecg.modules.base.entity.SourceRebuildTask;
import org.jeecg.service.SourceRebuildTaskService;
@ -15,7 +15,6 @@ import org.rosuda.REngine.RList;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
@ -27,7 +26,7 @@ import java.util.*;
public class TaskResultDataServiceImpl implements TaskResultDataService {
private final SourceRebuildTaskService sourceRebuildTaskService;
private final SourceRebuildParams sourceRebuildParams;
private final SourceRebuildProperties sourceRebuildProperties;
/**
* 获取Rserve连接
@ -36,8 +35,8 @@ public class TaskResultDataServiceImpl implements TaskResultDataService {
private RConnection getRConnection(){
RConnection conn = null;
try {
conn = new RConnection(sourceRebuildParams.getServerAddr(),sourceRebuildParams.getPort());
conn.login(sourceRebuildParams.getUsername(), sourceRebuildParams.getPassword());
conn = new RConnection(sourceRebuildProperties.getServerAddr(),sourceRebuildProperties.getPort());
conn.login(sourceRebuildProperties.getUsername(), sourceRebuildProperties.getPassword());
} catch (RserveException e) {
throw new RuntimeException("Rserve连接失败");
}

View File

@ -6,8 +6,7 @@ import cn.hutool.core.util.ArrayUtil;
import org.apache.commons.lang3.time.StopWatch;
import org.jeecg.common.constant.enums.SourceRebuildReleaseSourceEnum;
import org.jeecg.common.constant.enums.SourceRebuildTaskStatusEnum;
import org.jeecg.common.properties.SourceRebuildParams;
import org.jeecg.common.properties.SystemStorageProperties;
import org.jeecg.common.properties.SourceRebuildProperties;
import org.jeecg.modules.base.entity.SourceRebuildMonitoringData;
import org.jeecg.modules.base.entity.SourceRebuildTask;
import org.jeecg.modules.base.entity.SourceRebuildTaskLog;
@ -33,27 +32,24 @@ import java.util.stream.Stream;
public class SourceRebuildTaskExec extends Thread{
private SystemStorageProperties systemStorageProperties;
private List<SourceRebuildMonitoringData> taskMonitoringDatas;
private SourceRebuildTaskLogService sourceRebuildTaskLogService;
private SourceRebuildTask sourceRebuildTask;
private SourceRebuildParams sourceRebuildParams;
private SourceRebuildProperties sourceRebuildProperties;
private SourceRebuildTaskService sourceRebuildTaskService;
/**
* 初始化
*/
public void init(SystemStorageProperties systemStorageProperties,
List<SourceRebuildMonitoringData> taskMonitoringDatas,
public void init(List<SourceRebuildMonitoringData> taskMonitoringDatas,
SourceRebuildTask sourceRebuildTask,
SourceRebuildTaskLogService sourceRebuildTaskLogService,
SourceRebuildParams sourceRebuildParams,
SourceRebuildProperties sourceRebuildProperties,
SourceRebuildTaskService sourceRebuildTaskService){
this.systemStorageProperties = systemStorageProperties;
this.taskMonitoringDatas = taskMonitoringDatas;
this.sourceRebuildTask = sourceRebuildTask;
this.sourceRebuildTaskLogService = sourceRebuildTaskLogService;
this.sourceRebuildParams = sourceRebuildParams;
this.sourceRebuildProperties = sourceRebuildProperties;
this.sourceRebuildTaskService = sourceRebuildTaskService;
}
@ -129,7 +125,6 @@ public class SourceRebuildTaskExec extends Thread{
lines.add(formattedLine);
//把监测数据详情保存到日志
this.generateLog(formattedLine);
}
FileUtil.writeLines(lines,inputSubexp1,"UTF-8");
}
@ -146,7 +141,7 @@ public class SourceRebuildTaskExec extends Thread{
Path dirpath = Paths.get(srsFilePath);
try(Stream<Path> walk = Files.walk(dirpath)) {
walk.filter(Files::isRegularFile)
.filter(path -> path.toAbsolutePath().toString().contains(systemStorageProperties.getXeGZFileDirSign()))
.filter(path -> path.toAbsolutePath().toString().contains(sourceRebuildProperties.getXeGZFileDirSign()))
.forEach(filePath -> {
//USX77.fp.2024112115.f9.srm
String[] nameArr = filePath.getFileName().toString().split("\\.");
@ -212,8 +207,8 @@ public class SourceRebuildTaskExec extends Thread{
private void execSourceRebuild(){
RConnection conn = null;
try {
conn = new RConnection(this.sourceRebuildParams.getServerAddr(), this.sourceRebuildParams.getPort());
conn.login(this.sourceRebuildParams.getUsername(), this.sourceRebuildParams.getPassword());
conn = new RConnection(this.sourceRebuildProperties.getServerAddr(), this.sourceRebuildProperties.getPort());
conn.login(this.sourceRebuildProperties.getUsername(), this.sourceRebuildProperties.getPassword());
if(conn.isConnected()){
String log = "Rserve 连接成功,设置运行参数";
this.generateLog(log);
@ -225,11 +220,11 @@ public class SourceRebuildTaskExec extends Thread{
//重建任务输出数据目录
conn.assign("outbasedir", this.getOutputPath());
//数据库相关
conn.assign("dbHost", "192.168.42.54");
conn.assign("dbPort", new REXPInteger(5432));
conn.assign("dbName", "stas");
conn.assign("dbUser", "stas");
conn.assign("dbPassword", "123456");
conn.assign("dbHost", this.sourceRebuildProperties.getDbHost());
conn.assign("dbPort", new REXPInteger(this.sourceRebuildProperties.getDbPort()));
conn.assign("dbName", this.sourceRebuildProperties.getDbName());
conn.assign("dbUser", this.sourceRebuildProperties.getUsername());
conn.assign("dbPassword", this.sourceRebuildProperties.getPassword());
//任务关联ID
conn.assign("taskId", this.sourceRebuildTask.getId().toString());
//半衰期
@ -270,10 +265,10 @@ public class SourceRebuildTaskExec extends Thread{
conn.eval("trueValues <- c(NA,NA,NA,NA,NA)");
}
//设置工作目录
conn.eval("setwd(\""+this.sourceRebuildParams.getWorkSpace()+"\")");
conn.eval("setwd(\""+this.sourceRebuildProperties.getWorkSpace()+"\")");
//执行脚本
conn.eval("source(\"test_case/expdir/set_up.R\")");
REXP outputREXP = conn.eval("capture.output({source(\"test_case/expdir/main.R\")})");
conn.eval("source(\"R_scripts/set_up.R\")");
REXP outputREXP = conn.eval("capture.output({source(\"R_scripts/main.R\")})");
// 将输出作为字符串数组获取
String[] outputLines = outputREXP.asStrings();
if(ArrayUtil.isNotEmpty(outputLines)){
@ -322,9 +317,7 @@ public class SourceRebuildTaskExec extends Thread{
*/
private String getInputPath(){
StringBuilder inputPath = new StringBuilder();
inputPath.append(systemStorageProperties.getRootPath());
inputPath.append("/");
inputPath.append(systemStorageProperties.getRInput());
inputPath.append(sourceRebuildProperties.getRInput());
if(!FileUtil.exist(inputPath.toString())){
FileUtil.mkdir(inputPath.toString());
}
@ -337,9 +330,7 @@ public class SourceRebuildTaskExec extends Thread{
*/
private String getSRSFilePath(){
StringBuilder srsFilePath = new StringBuilder();
srsFilePath.append(systemStorageProperties.getRootPath());
srsFilePath.append("/");
srsFilePath.append(systemStorageProperties.getSrsFilePath());
srsFilePath.append(sourceRebuildProperties.getSrsFilePath());
// if(!FileUtil.exist(srsFilePath.toString())){
// String srsNotExistLog = "SRS 文件存储目录不存在";
// throw new RuntimeException(srsNotExistLog);
@ -353,9 +344,7 @@ public class SourceRebuildTaskExec extends Thread{
*/
private String getOutputPath(){
StringBuilder outputPath = new StringBuilder();
outputPath.append(systemStorageProperties.getRootPath());
outputPath.append("/");
outputPath.append(systemStorageProperties.getROutput());
outputPath.append(sourceRebuildProperties.getROutput());
outputPath.append("/");
outputPath.append(sourceRebuildTask.getTaskName());
if(!FileUtil.exist(outputPath.toString())){

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-parent</artifactId>
<version>3.8.1</version>
</parent>
<artifactId>jeecg-module-transport</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,87 @@
package org.jeecg.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.query.PageRequest;
import org.jeecg.common.validgroup.InsertGroup;
import org.jeecg.common.validgroup.UpdateGroup;
import org.jeecg.modules.base.entity.TransportTask;
import org.jeecg.service.TransportTaskService;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
@Validated
@RestController
@RequestMapping("transportTask")
@RequiredArgsConstructor
public class TransportTaskController {
private final TransportTaskService transportTaskService;
@AutoLog(value = "分页查询输运任务数据")
@Operation(summary = "分页查询输运任务数据")
@GetMapping("page")
public Result<?> page(PageRequest pageRequest, String taskName, Integer taskMode,Integer taskStatus,
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {
IPage<TransportTask> page = transportTaskService.page(pageRequest,taskName,taskMode,taskStatus,startDate,endDate);
Map<String, Object> rspData = new HashMap<>();
rspData.put("rows", page.getRecords());
rspData.put("total", page.getTotal());
return Result.OK(rspData);
}
@AutoLog(value = "新增输运任务")
@Operation(summary = "新增输运任务")
@PostMapping("create")
public Result<?> create(@RequestBody @Validated(value = InsertGroup.class) TransportTask transportTask){
transportTaskService.cteate(transportTask);
return Result.OK();
}
@AutoLog(value = "获取单条输运任务记录")
@Operation(summary = "获取单条输运任务记录")
@GetMapping("getById")
public Result<?> getTransportTaskById(@NotNull(message = "ID不能为空") Integer id){
return Result.OK(transportTaskService.getTransportTaskById(id));
}
@AutoLog(value = "修改输运任务")
@Operation(summary = "修改输运任务")
@PutMapping("update")
public Result<?> update(@RequestBody @Validated(value = UpdateGroup.class) TransportTask transportTask){
transportTaskService.update(transportTask);
return Result.OK();
}
@AutoLog(value = "删除输运任务")
@Operation(summary = "删除输运任务")
@DeleteMapping("delete")
public Result<?> delete(@NotNull(message = "id不能为空") Integer id){
transportTaskService.delete(id);
return Result.OK();
}
@AutoLog(value = "获取输运任务日志")
@Operation(summary = "获取输运任务日志")
@GetMapping("getTaskLog")
public Result<?> getTaskLog(@NotNull(message = "任务ID不能为空") Integer taskId){
return Result.OK(transportTaskService.getTaskLog(taskId));
}
@AutoLog(value = "启动任务")
@Operation(summary = "启动任务")
@PutMapping("runTask")
public Result<?> runTask(@NotNull(message = "任务ID不能为空") Integer taskId){
transportTaskService.runTask(taskId);
return Result.OK();
}
}

View File

@ -0,0 +1,10 @@
package org.jeecg.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.entity.TransportTask;
/**
* 传输任务结果数据
*/
public interface TransportTaskResultService extends IService<TransportTask> {
}

View File

@ -0,0 +1,65 @@
package org.jeecg.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.system.query.PageRequest;
import org.jeecg.modules.base.entity.TransportTask;
import org.jeecg.modules.base.entity.TransportTaskLog;
import java.time.LocalDate;
import java.util.List;
/**
* 输运模拟任务管理
*/
public interface TransportTaskService extends IService<TransportTask> {
/**
* 分页查询任务列表
* @param pageRequest
* @param taskName
* @param taskMode
* @param taskStatus
* @param startDate
* @param endDate
* @return
*/
IPage<TransportTask> page(PageRequest pageRequest,String taskName,Integer taskMode,Integer taskStatus,LocalDate startDate,LocalDate endDate);
/**
* 创建输运模拟任务
* @param transportTask
*/
void cteate(TransportTask transportTask);
/**
* 获取单条任务数据
* @param id
* @return
*/
TransportTask getTransportTaskById(Integer id);
/**
* 修改输运模拟任务
* @param transportTask
*/
void update(TransportTask transportTask);
/**
* 删除输运模拟任务
* @param id
*/
void delete(Integer id);
/**
* 运行任务
* @param id
*/
void runTask(Integer id);
/**
* 获取任务运行日志
* @param taskId
* @return
*/
List<TransportTaskLog> getTaskLog(Integer taskId);
}

View File

@ -0,0 +1,181 @@
package org.jeecg.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.constant.enums.TransportTaskStatusEnum;
import org.jeecg.common.constant.enums.TransportTaskTypeEnum;
import org.jeecg.common.system.query.PageRequest;
import org.jeecg.modules.base.entity.TransportTask;
import org.jeecg.modules.base.entity.TransportTaskChild;
import org.jeecg.modules.base.entity.TransportTaskLog;
import org.jeecg.modules.base.mapper.TransportTaskChildMapper;
import org.jeecg.modules.base.mapper.TransportTaskLogMapper;
import org.jeecg.modules.base.mapper.TransportTaskMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* 输运模拟任务管理
*/
@RequiredArgsConstructor
@Service
public class TransportTaskServiceImpl extends ServiceImpl<TransportTaskMapper,TransportTask> implements TransportTaskService{
private final TransportTaskChildMapper transportTaskChildMapper;
private final TransportTaskLogMapper transportTaskLogMapper;
/**
* 分页查询任务列表
*
* @param pageRequest
* @param taskName
* @param taskMode
* @param taskStatus
* @param startDate
* @param endDate
* @return
*/
@Override
public IPage<TransportTask> page(PageRequest pageRequest, String taskName, Integer taskMode,Integer taskStatus, LocalDate startDate, LocalDate endDate) {
LambdaQueryWrapper<TransportTask> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Objects.nonNull(taskMode),TransportTask::getTaskMode, taskMode);
queryWrapper.eq(Objects.nonNull(taskStatus),TransportTask::getTaskStatus, taskStatus);
if(Objects.nonNull(startDate) && Objects.nonNull(endDate)){
LocalDateTime startDateTime = startDate.atTime(0, 0, 0);
LocalDateTime endDateTime = endDate.atTime(23, 59, 59);
queryWrapper.between(TransportTask::getCreateTime,startDateTime,endDateTime);
}
queryWrapper.like(StringUtils.isNotBlank(taskName),TransportTask::getTaskName,taskName);
queryWrapper.orderByDesc(TransportTask::getCreateTime);
queryWrapper.orderByAsc(TransportTask::getTaskStatus);
IPage<TransportTask> iPage = new Page<>(pageRequest.getPageNum(), pageRequest.getPageSize());
return this.page(iPage, queryWrapper);
}
/**
* 创建输运模拟任务
*
* @param transportTask
*/
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void cteate(TransportTask transportTask) {
LambdaQueryWrapper<TransportTask> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TransportTask::getTaskName,transportTask.getTaskName());
TransportTask checkNameResult = this.baseMapper.selectOne(queryWrapper);
if(Objects.nonNull(checkNameResult)){
throw new RuntimeException("此任务已存在,请核对任务名称信息");
}
transportTask.setTaskPprogress(0);
transportTask.setTaskStatus(TransportTaskStatusEnum.NOT_START.getKey());
transportTask.setTaskType(TransportTaskTypeEnum.MANUALLY.getKey());
this.baseMapper.insert(transportTask);
if(CollUtil.isNotEmpty(transportTask.getChildList())){
transportTask.getChildList().forEach(transportTaskChild -> {
transportTaskChild.setTaskId(transportTask.getId());
});
transportTaskChildMapper.insert(transportTask.getChildList());
}
}
/**
* 获取单条任务数据
*
* @param id
* @return
*/
@Override
public TransportTask getTransportTaskById(Integer id) {
TransportTask transportTask = this.baseMapper.selectById(id);
if(Objects.isNull(transportTask)){
throw new RuntimeException("此任务不存在");
}
LambdaQueryWrapper<TransportTaskChild> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TransportTaskChild::getTaskId,transportTask.getId());
List<TransportTaskChild> transportTaskChildren = transportTaskChildMapper.selectList(queryWrapper);
if(CollUtil.isNotEmpty(transportTaskChildren)){
transportTask.setChildList(transportTaskChildren);
}
return transportTask;
}
/**
* 修改输运模拟任务
*
* @param transportTask
*/
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void update(TransportTask transportTask) {
TransportTask checkIdResult = this.baseMapper.selectById(transportTask.getId());
if(Objects.isNull(checkIdResult)){
throw new RuntimeException("此任务不存在");
}
LambdaQueryWrapper<TransportTask> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TransportTask::getTaskName,transportTask.getTaskName());
TransportTask checkNameResult = this.baseMapper.selectOne(queryWrapper);
if(Objects.nonNull(checkNameResult) && !checkNameResult.getId().equals(checkIdResult.getId())){
throw new RuntimeException("此任务已存在,请核对任务名称信息");
}
checkIdResult.setTaskName(transportTask.getTaskName());
checkIdResult.setTaskMode(transportTask.getTaskMode());
this.baseMapper.updateById(checkIdResult);
//先删除再保存
LambdaQueryWrapper<TransportTaskChild> delQueryWrapper = new LambdaQueryWrapper<>();
delQueryWrapper.eq(TransportTaskChild::getTaskId,checkIdResult.getId());
transportTaskChildMapper.delete(delQueryWrapper);
if(CollUtil.isNotEmpty(transportTask.getChildList())){
transportTask.getChildList().forEach(transportTaskChild -> {
transportTaskChild.setTaskId(transportTask.getId());
});
transportTaskChildMapper.insert(transportTask.getChildList());
}
}
/**
* 删除输运模拟任务
*
* @param id
*/
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void delete(Integer id) {
LambdaQueryWrapper<TransportTaskChild> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TransportTaskChild::getTaskId,id);
transportTaskChildMapper.delete(queryWrapper);
this.baseMapper.deleteById(id);
}
/**
* 运行任务
*
* @param id
*/
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void runTask(Integer id) {
}
/**
* 获取任务运行日志
*
* @param taskId
* @return
*/
@Override
public List<TransportTaskLog> getTaskLog(Integer taskId) {
LambdaQueryWrapper<TransportTaskLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TransportTaskLog::getTaskId,taskId);
return transportTaskLogMapper.selectList(queryWrapper);
}
}

View File

@ -82,7 +82,7 @@ public class WeatherDataController {
@GetMapping(value = "getWeatherData")
public Result<?> getWeatherData(Integer dataType,
Integer weatherType,
LocalDateTime startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
int hour) {
return Result.OK(weatherDataService.getWeatherData(dataType, weatherType, startTime, hour));
}
@ -93,9 +93,8 @@ public class WeatherDataController {
*/
@AutoLog(value = "气象预测-气象预览")
@Operation(summary = "气象预测-气象预览")
@GetMapping(value = "getWeatherData")
public Result<?> getWeatherDataPreview(String weatherId,
@RequestParam(required = false, defaultValue = "0")Integer weatherType) {
@GetMapping(value = "getWeatherDataPreview")
public Result<?> getWeatherDataPreview(String weatherId,Integer weatherType) {
return Result.OK(weatherDataService.getWeatherDataPreview(weatherId, weatherType));
}
@ -106,7 +105,7 @@ public class WeatherDataController {
@AutoLog(value = "气象预测-气象折线图")
@Operation(summary = "气象预测-气象折线图")
@GetMapping(value = "getDataLine")
public Result<?> getDataLine(Integer dataType,LocalDateTime startTime, LocalDateTime endTime, double longitude, double latitude) {
public Result<?> getDataLine(Integer dataType,@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime, double longitude, double latitude) {
return Result.OK(weatherDataService.getDataLine(dataType,startTime,endTime,longitude,latitude));
}
@ -126,7 +125,7 @@ public class WeatherDataController {
public static void main(String[] args) {
//reftime_ISO
String filePath = "F:\\工作\\五木\\放射性核素监测数据综合分析及氙本底源解析系统\\其他资料\\气象数据\\盘古模型预测数据\\panguweather_2025073118.grib";
String filePath = "E:\\runtimeEnv\\fileSystem\\weather\\pangu1\\panguweather_2025073118.grib";
try {
String md5 = calculateMD5(filePath);
System.out.println("MD5: " + md5);

View File

@ -310,13 +310,12 @@ public class WeatherDataServiceImpl extends ServiceImpl<WeatherDataMapper, Weath
File dataFile = new File(storagePath);
if(dataFile.exists() && dataFile.length()>0){
//获取文件数据开始日期
// String reftime = "2025-10-16 00:00:00";//NcUtil.getReftime(dataFile.getAbsolutePath());
// if(StringUtils.isBlank(reftime)) {
// throw new JeecgFileUploadException("解析气象文件起始时间数据异常,此文件可能损坏");
// }
// Instant instant = Instant.parse(reftime);
// LocalDateTime utcDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("UTC"));
LocalDateTime utcDateTime = LocalDateTime.now();
String reftime = NcUtil.getReftime(dataFile.getAbsolutePath());
if(StringUtils.isBlank(reftime)) {
throw new JeecgFileUploadException("解析气象文件起始时间数据异常,此文件可能损坏");
}
Instant instant = Instant.parse(reftime);
LocalDateTime utcDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("UTC"));
queryResult.setDataStartTime(utcDateTime);
//计算文件大小M
BigDecimal divideVal = new BigDecimal("1024");
@ -347,6 +346,7 @@ public class WeatherDataServiceImpl extends ServiceImpl<WeatherDataMapper, Weath
}
}catch (Exception e){
flag = false;
e.printStackTrace();
}
}
//如果单文件上传失败或者分片上传失败则删除数据

View File

@ -83,6 +83,7 @@
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-gateway</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>

View File

@ -94,6 +94,7 @@
</dependencies>
<build>
<finalName>stas-cloud-nacos</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>

View File

@ -33,4 +33,13 @@
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-data-analyze</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -33,4 +33,13 @@
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-event-simulation</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -33,4 +33,13 @@
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-source-rebuild</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -33,4 +33,13 @@
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-data-sync</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -65,6 +65,7 @@
</dependencies>
<build>
<finalName>stas-cloud-system</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-server-cloud</artifactId>
<version>3.8.1</version>
</parent>
<artifactId>jeecg-transport-start</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-starter3-cloud</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<version>${jeecgboot.version}</version>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-module-transport</artifactId>
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-transport-simulation</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,56 @@
package org.jeecg;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.base.BaseMap;
import org.jeecg.common.constant.GlobalConstants;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.RedisTemplate;
import java.net.InetAddress;
import java.net.UnknownHostException;
@Slf4j
@SpringBootApplication
@RequiredArgsConstructor
@EnableFeignClients
public class JeecgTransportCloudApplication extends SpringBootServletInitializer implements CommandLineRunner {
private final RedisTemplate<String, Object> redisTemplate;
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(JeecgTransportCloudApplication.class);
}
public static void main(String[] args) throws UnknownHostException {
ConfigurableApplicationContext application = SpringApplication.run(JeecgTransportCloudApplication.class, args);
Environment env = application.getEnvironment();
String ip = InetAddress.getLocalHost().getHostAddress();
String port = env.getProperty("server.port");
String path = oConvertUtils.getString(env.getProperty("server.servlet.context-path"));
log.info("\n----------------------------------------------------------\n\t" +
"Application STAS-Transport is running! Access URLs:\n\t" +
"Local: \t\thttp://localhost:" + port + path + "/doc.html\n" +
"External: \thttp://" + ip + ":" + port + path + "/doc.html\n" +
"Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" +
"----------------------------------------------------------");
}
@Override
public void run(String... args) {
BaseMap params = new BaseMap();
params.put(GlobalConstants.HANDLER_NAME, GlobalConstants.LODER_ROUDER_HANDLER);
//刷新网关
redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params);
}
}

View File

@ -0,0 +1,24 @@
server:
port: 8006
spring:
application:
name: jeecg-transport
cloud:
nacos:
config:
server-addr: @config.server-addr@
group: @config.group@
namespace: @config.namespace@
username: @config.username@
password: @config.password@
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
group: @config.group@
namespace: @config.namespace@
username: @config.username@
password: @config.password@
config:
import:
- optional:nacos:jeecg.yaml
- optional:nacos:jeecg-@profile.name@.yaml

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="logs" />
<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/stas-transport-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
</appender>
<!--myibatis log configure -->
<logger name="com.apache.ibatis" level="TRACE" />
<logger name="java.sql.Connection" level="DEBUG" />
<logger name="java.sql.Statement" level="DEBUG" />
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>

View File

@ -33,4 +33,13 @@
<version>${jeecgboot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>stas-cloud-weather</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -25,6 +25,7 @@
<module>jeecg-sync-start</module>
<module>jeecg-data-analyze-start</module>
<module>jeecg-source-rebuild-start</module>
<module>jeecg-transport-start</module>
</modules>
</project>

View File

@ -89,7 +89,8 @@
<module>jeecg-module-sync</module>
<module>jeecg-module-data-analyze</module>
<module>jeecg-module-source-rebuild</module>
</modules>
<module>jeecg-module-transport</module>
</modules>
<repositories>
<repository>