feat(aima): 更新任务实例和测试日志的数据结构

- 将AimaTestLog实体中的logMessage字段改为logContent,并调整数据库表结构
- 在AimaTaskInstance表中新增create_by、update_time、update_by和remark字段
- 添加AimaTaskInstanceQuery查询DTO类支持多条件查询
- 修改控制器和业务层方法参数类型从AimaTaskInstance到AimaTaskInstanceQuery
- 更新MyBatis映射文件中的参数类型和字段引用
- 在监听器中更新日志记录的字段名和状态设置
- 移除测试日志服务中自动设置创建者和更新者的逻辑
This commit is contained in:
lixiaolong 2026-06-24 09:55:51 +08:00
parent 08099e2eda
commit 5ea88ddb99
11 changed files with 68 additions and 21 deletions

View File

@ -12,6 +12,7 @@ import com.cmvr.common.core.controller.BaseController;
import com.cmvr.common.core.domain.AjaxResult; import com.cmvr.common.core.domain.AjaxResult;
import com.cmvr.common.enums.BusinessType; import com.cmvr.common.enums.BusinessType;
import com.cmvr.aima.domain.AimaTaskInstance; import com.cmvr.aima.domain.AimaTaskInstance;
import com.cmvr.aima.domain.dto.AimaTaskInstanceQuery;
import com.cmvr.aima.domain.vo.AimaTaskInstanceVo; import com.cmvr.aima.domain.vo.AimaTaskInstanceVo;
import com.cmvr.aima.service.IAimaTaskInstanceService; import com.cmvr.aima.service.IAimaTaskInstanceService;
import com.cmvr.common.utils.poi.ExcelUtil; import com.cmvr.common.utils.poi.ExcelUtil;
@ -27,9 +28,9 @@ public class AimaTaskInstanceController extends BaseController {
@ApiOperation("查询任务实例列表") @ApiOperation("查询任务实例列表")
@PreAuthorize("@ss.hasPermi('aima:taskinstance:list')") @PreAuthorize("@ss.hasPermi('aima:taskinstance:list')")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(AimaTaskInstance aimaTaskInstance) { public TableDataInfo list(AimaTaskInstanceQuery query) {
startPage(); startPage();
List<AimaTaskInstanceVo> list = aimaTaskInstanceService.selectAimaTaskInstanceVoList(aimaTaskInstance); List<AimaTaskInstanceVo> list = aimaTaskInstanceService.selectAimaTaskInstanceVoList(query);
return getDataTable(list); return getDataTable(list);
} }
@ -37,8 +38,8 @@ public class AimaTaskInstanceController extends BaseController {
@PreAuthorize("@ss.hasPermi('aima:taskinstance:export')") @PreAuthorize("@ss.hasPermi('aima:taskinstance:export')")
@Log(title = "任务执行实例", businessType = BusinessType.EXPORT) @Log(title = "任务执行实例", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(HttpServletResponse response, AimaTaskInstance aimaTaskInstance) { public void export(HttpServletResponse response, AimaTaskInstanceQuery query) {
List<AimaTaskInstanceVo> list = aimaTaskInstanceService.selectAimaTaskInstanceVoList(aimaTaskInstance); List<AimaTaskInstanceVo> list = aimaTaskInstanceService.selectAimaTaskInstanceVoList(query);
ExcelUtil<AimaTaskInstanceVo> util = new ExcelUtil<>(AimaTaskInstanceVo.class); ExcelUtil<AimaTaskInstanceVo> util = new ExcelUtil<>(AimaTaskInstanceVo.class);
util.exportExcel(response, list, "任务实例数据"); util.exportExcel(response, list, "任务实例数据");
} }

View File

@ -60,7 +60,7 @@ public class AimaTestLog extends BaseEntity
@Excel(name = "日志内容") @Excel(name = "日志内容")
@ApiModelProperty("日志内容") @ApiModelProperty("日志内容")
private String logMessage; private String logContent;
@Excel(name = "日志时间") @Excel(name = "日志时间")
@ApiModelProperty("日志时间") @ApiModelProperty("日志时间")

View File

@ -0,0 +1,34 @@
package com.cmvr.aima.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 爱玛任务实例查询入参DTO
*
* @author cmvr-iot
* @since 2026-06-22
*/
@Data
@ApiModel("爱玛任务实例查询条件")
public class AimaTaskInstanceQuery {
@ApiModelProperty("任务ID")
private String taskId;
@ApiModelProperty("手机ID")
private String phoneId;
@ApiModelProperty("车辆ID")
private String vehicleId;
@ApiModelProperty("单个状态(兼容原有精确查询)")
private Integer status;
@ApiModelProperty("多状态集合in查询用0待执行 1执行中 2已完成 3已取消 4执行失败 5已暂停")
private List<Integer> statusList;
}

View File

@ -137,8 +137,9 @@ public class AimaFlowExecutionListener implements FlowExecutionListener {
.testCaseId(itemId) .testCaseId(itemId)
.logLevel("INFO") .logLevel("INFO")
.logType("执行日志") .logType("执行日志")
.logMessage("节点【" + event.getNodeName() + "" + info) .logContent("节点【" + event.getNodeName() + "" + info)
.logTime(now) .logTime(now)
.status(targetStatus)
.executionStep(event.getNodeName()) .executionStep(event.getNodeName())
.testStatus("0") // 0未执行 .testStatus("0") // 0未执行
.durationMs(0L) .durationMs(0L)
@ -179,7 +180,7 @@ public class AimaFlowExecutionListener implements FlowExecutionListener {
.taskInstanceId(dbInsId) .taskInstanceId(dbInsId)
.logLevel("INFO") .logLevel("INFO")
.logType("系统日志") .logType("系统日志")
.logMessage("任务执行完成") .logContent("任务执行完成")
.logTime(now) .logTime(now)
.status(targetStatus) .status(targetStatus)
.build(); .build();

View File

@ -3,6 +3,7 @@ package com.cmvr.aima.mapper;
import java.util.List; import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmvr.aima.domain.AimaTaskInstance; import com.cmvr.aima.domain.AimaTaskInstance;
import com.cmvr.aima.domain.dto.AimaTaskInstanceQuery;
import com.cmvr.aima.domain.vo.AimaTaskInstanceVo; import com.cmvr.aima.domain.vo.AimaTaskInstanceVo;
/** /**
@ -31,10 +32,10 @@ public interface AimaTaskInstanceMapper extends BaseMapper<AimaTaskInstance> {
/** /**
* 查询爱玛任务执行实例视图列表包含关联信息 * 查询爱玛任务执行实例视图列表包含关联信息
* *
* @param aimaTaskInstance 爱玛任务执行实例 * @param query 查询条件
* @return 爱玛任务执行实例视图集合 * @return 爱玛任务执行实例视图集合
*/ */
List<AimaTaskInstanceVo> selectAimaTaskInstanceVoList(AimaTaskInstance aimaTaskInstance); List<AimaTaskInstanceVo> selectAimaTaskInstanceVoList(AimaTaskInstanceQuery query);
/** /**
* 新增爱玛任务执行实例 * 新增爱玛任务执行实例

View File

@ -4,6 +4,7 @@ import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.cmvr.aima.domain.AimaTaskInstance; import com.cmvr.aima.domain.AimaTaskInstance;
import com.cmvr.aima.domain.dto.AimaTaskInstanceQuery;
import com.cmvr.aima.domain.vo.AimaTaskInstanceVo; import com.cmvr.aima.domain.vo.AimaTaskInstanceVo;
/** /**
@ -15,7 +16,7 @@ import com.cmvr.aima.domain.vo.AimaTaskInstanceVo;
public interface IAimaTaskInstanceService extends IService<AimaTaskInstance> { public interface IAimaTaskInstanceService extends IService<AimaTaskInstance> {
AimaTaskInstance selectAimaTaskInstanceById(String id); AimaTaskInstance selectAimaTaskInstanceById(String id);
List<AimaTaskInstance> selectAimaTaskInstanceList(AimaTaskInstance aimaTaskInstance); List<AimaTaskInstance> selectAimaTaskInstanceList(AimaTaskInstance aimaTaskInstance);
List<AimaTaskInstanceVo> selectAimaTaskInstanceVoList(AimaTaskInstance aimaTaskInstance); List<AimaTaskInstanceVo> selectAimaTaskInstanceVoList(AimaTaskInstanceQuery query);
int insertAimaTaskInstance(AimaTaskInstance aimaTaskInstance); int insertAimaTaskInstance(AimaTaskInstance aimaTaskInstance);
int updateAimaTaskInstance(AimaTaskInstance aimaTaskInstance); int updateAimaTaskInstance(AimaTaskInstance aimaTaskInstance);
int deleteAimaTaskInstanceByIds(String[] ids); int deleteAimaTaskInstanceByIds(String[] ids);

View File

@ -4,6 +4,7 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmvr.aima.domain.dto.AimaTaskInstanceQuery;
import com.cmvr.aima.domain.vo.AimaTaskInstanceVo; import com.cmvr.aima.domain.vo.AimaTaskInstanceVo;
import com.cmvr.common.exception.ServiceException; import com.cmvr.common.exception.ServiceException;
import com.cmvr.common.utils.SecurityUtils; import com.cmvr.common.utils.SecurityUtils;
@ -60,8 +61,8 @@ public class AimaTaskInstanceServiceImpl extends ServiceImpl<AimaTaskInstanceMap
} }
@Override @Override
public List<AimaTaskInstanceVo> selectAimaTaskInstanceVoList(AimaTaskInstance aimaTaskInstance) { public List<AimaTaskInstanceVo> selectAimaTaskInstanceVoList(AimaTaskInstanceQuery query) {
return aimaTaskInstanceMapper.selectAimaTaskInstanceVoList(aimaTaskInstance); return aimaTaskInstanceMapper.selectAimaTaskInstanceVoList(query);
} }
@Override @Override

View File

@ -40,14 +40,12 @@ public class AimaTestLogServiceImpl extends ServiceImpl<AimaTestLogMapper, AimaT
aimaTestLog.setId(UUID.randomUUID().toString().replace("-", "")); aimaTestLog.setId(UUID.randomUUID().toString().replace("-", ""));
} }
aimaTestLog.setCreateTime(DateUtils.getNowDate()); aimaTestLog.setCreateTime(DateUtils.getNowDate());
aimaTestLog.setCreateBy(SecurityUtils.getUsername());
return aimaTestLogMapper.insertAimaTestLog(aimaTestLog); return aimaTestLogMapper.insertAimaTestLog(aimaTestLog);
} }
@Override @Override
public int updateAimaTestLog(AimaTestLog aimaTestLog) { public int updateAimaTestLog(AimaTestLog aimaTestLog) {
aimaTestLog.setUpdateTime(DateUtils.getNowDate()); aimaTestLog.setUpdateTime(DateUtils.getNowDate());
aimaTestLog.setUpdateBy(SecurityUtils.getUsername());
return aimaTestLogMapper.updateAimaTestLog(aimaTestLog); return aimaTestLogMapper.updateAimaTestLog(aimaTestLog);
} }

View File

@ -46,7 +46,7 @@
<include refid="selectAimaTaskInstanceVo"/> where id = #{id} <include refid="selectAimaTaskInstanceVo"/> where id = #{id}
</select> </select>
<select id="selectAimaTaskInstanceVoList" parameterType="AimaTaskInstance" resultMap="AimaTaskInstanceVoResult"> <select id="selectAimaTaskInstanceVoList" parameterType="com.cmvr.aima.domain.dto.AimaTaskInstanceQuery" resultMap="AimaTaskInstanceVoResult">
select ti.id, ti.create_by, ti.create_time, ti.update_by, ti.update_time, ti.remark, select ti.id, ti.create_by, ti.create_time, ti.update_by, ti.update_time, ti.remark,
ti.task_id, t.task_code, t.task_name, ti.task_id, t.task_code, t.task_name,
ti.phone_id, p.phone_name, ti.vehicle_id, v.vehicle_name, v.vin, ti.phone_id, p.phone_name, ti.vehicle_id, v.vehicle_name, v.vin,
@ -65,6 +65,12 @@
<if test="phoneId != null and phoneId != ''"> and ti.phone_id = #{phoneId}</if> <if test="phoneId != null and phoneId != ''"> and ti.phone_id = #{phoneId}</if>
<if test="vehicleId != null and vehicleId != ''"> and ti.vehicle_id = #{vehicleId}</if> <if test="vehicleId != null and vehicleId != ''"> and ti.vehicle_id = #{vehicleId}</if>
<if test="status != null"> and ti.status = #{status}</if> <if test="status != null"> and ti.status = #{status}</if>
<if test="statusList != null and statusList.size() > 0">
and ti.status in
<foreach item="statusItem" collection="statusList" open="(" separator="," close=")">
#{statusItem}
</foreach>
</if>
</where> </where>
order by ti.create_time desc order by ti.create_time desc
</select> </select>

View File

@ -6,7 +6,7 @@
<result property="updateBy" column="update_by"/><result property="updateTime" column="update_time"/><result property="remark" column="remark"/> <result property="updateBy" column="update_by"/><result property="updateTime" column="update_time"/><result property="remark" column="remark"/>
<result property="taskInstanceId" column="task_instance_id"/><result property="taskId" column="task_id"/><result property="taskName" column="task_name"/> <result property="taskInstanceId" column="task_instance_id"/><result property="taskId" column="task_id"/><result property="taskName" column="task_name"/>
<result property="testCaseId" column="test_case_id"/><result property="caseName" column="case_name"/><result property="logLevel" column="log_level"/> <result property="testCaseId" column="test_case_id"/><result property="caseName" column="case_name"/><result property="logLevel" column="log_level"/>
<result property="logType" column="log_type"/><result property="logMessage" column="log_message"/><result property="logTime" column="log_time"/> <result property="logType" column="log_type"/><result property="logContent" column="log_content"/><result property="logTime" column="log_time"/>
<result property="executionStep" column="execution_step"/><result property="actualResult" column="actual_result"/><result property="testStatus" column="test_status"/> <result property="executionStep" column="execution_step"/><result property="actualResult" column="actual_result"/><result property="testStatus" column="test_status"/>
<result property="screenshotUrl" column="screenshot_url"/><result property="videoUrl" column="video_url"/><result property="errorStack" column="error_stack"/> <result property="screenshotUrl" column="screenshot_url"/><result property="videoUrl" column="video_url"/><result property="errorStack" column="error_stack"/>
<result property="durationMs" column="duration_ms"/> <result property="durationMs" column="duration_ms"/>
@ -15,7 +15,7 @@
</resultMap> </resultMap>
<sql id="selectAimaTestLogVo"> <sql id="selectAimaTestLogVo">
select id, create_by, create_time, update_by, update_time, remark, task_instance_id, task_id, task_name, test_case_id, case_name, log_level, log_type, log_message, log_time, execution_step, actual_result, test_status, screenshot_url, video_url, error_stack, duration_ms,progress,status from aima_test_log select id, create_by, create_time, update_by, update_time, remark, task_instance_id, task_id, task_name, test_case_id, case_name, log_level, log_type, log_content, log_time, execution_step, actual_result, test_status, screenshot_url, video_url, error_stack, duration_ms,progress,status from aima_test_log
</sql> </sql>
<select id="selectAimaTestLogList" parameterType="AimaTestLog" resultMap="AimaTestLogResult"> <select id="selectAimaTestLogList" parameterType="AimaTestLog" resultMap="AimaTestLogResult">
@ -40,7 +40,7 @@
<if test="updateBy != null">update_by,</if><if test="updateTime != null">update_time,</if><if test="remark != null">remark,</if> <if test="updateBy != null">update_by,</if><if test="updateTime != null">update_time,</if><if test="remark != null">remark,</if>
<if test="taskInstanceId != null">task_instance_id,</if><if test="taskId != null">task_id,</if><if test="taskName != null">task_name,</if> <if test="taskInstanceId != null">task_instance_id,</if><if test="taskId != null">task_id,</if><if test="taskName != null">task_name,</if>
<if test="testCaseId != null">test_case_id,</if><if test="caseName != null">case_name,</if><if test="logLevel != null">log_level,</if> <if test="testCaseId != null">test_case_id,</if><if test="caseName != null">case_name,</if><if test="logLevel != null">log_level,</if>
<if test="logType != null">log_type,</if><if test="logMessage != null">log_message,</if><if test="logTime != null">log_time,</if> <if test="logType != null">log_type,</if><if test="logContent != null">log_content,</if><if test="logTime != null">log_time,</if>
<if test="executionStep != null">execution_step,</if><if test="actualResult != null">actual_result,</if><if test="testStatus != null">test_status,</if> <if test="executionStep != null">execution_step,</if><if test="actualResult != null">actual_result,</if><if test="testStatus != null">test_status,</if>
<if test="screenshotUrl != null">screenshot_url,</if><if test="videoUrl != null">video_url,</if><if test="errorStack != null">error_stack,</if> <if test="screenshotUrl != null">screenshot_url,</if><if test="videoUrl != null">video_url,</if><if test="errorStack != null">error_stack,</if>
<if test="durationMs != null">duration_ms,</if> <if test="durationMs != null">duration_ms,</if>
@ -52,7 +52,7 @@
<if test="updateBy != null">#{updateBy},</if><if test="updateTime != null">#{updateTime},</if><if test="remark != null">#{remark},</if> <if test="updateBy != null">#{updateBy},</if><if test="updateTime != null">#{updateTime},</if><if test="remark != null">#{remark},</if>
<if test="taskInstanceId != null">#{taskInstanceId},</if><if test="taskId != null">#{taskId},</if><if test="taskName != null">#{taskName},</if> <if test="taskInstanceId != null">#{taskInstanceId},</if><if test="taskId != null">#{taskId},</if><if test="taskName != null">#{taskName},</if>
<if test="testCaseId != null">#{testCaseId},</if><if test="caseName != null">#{caseName},</if><if test="logLevel != null">#{logLevel},</if> <if test="testCaseId != null">#{testCaseId},</if><if test="caseName != null">#{caseName},</if><if test="logLevel != null">#{logLevel},</if>
<if test="logType != null">#{logType},</if><if test="logMessage != null">#{logMessage},</if><if test="logTime != null">#{logTime},</if> <if test="logType != null">#{logType},</if><if test="logContent != null">#{logContent},</if><if test="logTime != null">#{logTime},</if>
<if test="executionStep != null">#{executionStep},</if><if test="actualResult != null">#{actualResult},</if><if test="testStatus != null">#{testStatus},</if> <if test="executionStep != null">#{executionStep},</if><if test="actualResult != null">#{actualResult},</if><if test="testStatus != null">#{testStatus},</if>
<if test="screenshotUrl != null">#{screenshotUrl},</if><if test="videoUrl != null">#{videoUrl},</if><if test="errorStack != null">#{errorStack},</if> <if test="screenshotUrl != null">#{screenshotUrl},</if><if test="videoUrl != null">#{videoUrl},</if><if test="errorStack != null">#{errorStack},</if>
<if test="durationMs != null">#{durationMs},</if> <if test="durationMs != null">#{durationMs},</if>
@ -69,7 +69,7 @@
<if test="taskId != null">task_id = #{taskId},</if><if test="taskName != null">task_name = #{taskName},</if> <if test="taskId != null">task_id = #{taskId},</if><if test="taskName != null">task_name = #{taskName},</if>
<if test="testCaseId != null">test_case_id = #{testCaseId},</if><if test="caseName != null">case_name = #{caseName},</if> <if test="testCaseId != null">test_case_id = #{testCaseId},</if><if test="caseName != null">case_name = #{caseName},</if>
<if test="logLevel != null">log_level = #{logLevel},</if><if test="logType != null">log_type = #{logType},</if> <if test="logLevel != null">log_level = #{logLevel},</if><if test="logType != null">log_type = #{logType},</if>
<if test="logMessage != null">log_message = #{logMessage},</if><if test="logTime != null">log_time = #{logTime},</if> <if test="logContent != null"> log_content = #{logContent},</if><if test="logTime != null">log_time = #{logTime},</if>
<if test="executionStep != null">execution_step = #{executionStep},</if><if test="actualResult != null">actual_result = #{actualResult},</if> <if test="executionStep != null">execution_step = #{executionStep},</if><if test="actualResult != null">actual_result = #{actualResult},</if>
<if test="testStatus != null">test_status = #{testStatus},</if><if test="screenshotUrl != null">screenshot_url = #{screenshotUrl},</if> <if test="testStatus != null">test_status = #{testStatus},</if><if test="screenshotUrl != null">screenshot_url = #{screenshotUrl},</if>
<if test="videoUrl != null">video_url = #{videoUrl},</if><if test="errorStack != null">error_stack = #{errorStack},</if> <if test="videoUrl != null">video_url = #{videoUrl},</if><if test="errorStack != null">error_stack = #{errorStack},</if>

View File

@ -151,7 +151,7 @@ CREATE TABLE `aima_test_log` (
`case_name` varchar(100) DEFAULT NULL COMMENT '用例名称', `case_name` varchar(100) DEFAULT NULL COMMENT '用例名称',
`log_level` varchar(20) DEFAULT 'INFO' COMMENT '日志级别(DEBUG/INFO/WARN/ERROR)', `log_level` varchar(20) DEFAULT 'INFO' COMMENT '日志级别(DEBUG/INFO/WARN/ERROR)',
`log_type` varchar(50) DEFAULT NULL COMMENT '日志类型(执行日志/系统日志/异常日志)', `log_type` varchar(50) DEFAULT NULL COMMENT '日志类型(执行日志/系统日志/异常日志)',
`log_message` text COMMENT '日志内容', `log_content` varchar(255) COMMENT '日志内容',
`log_time` datetime DEFAULT NULL COMMENT '日志时间', `log_time` datetime DEFAULT NULL COMMENT '日志时间',
`execution_step` varchar(100) DEFAULT NULL COMMENT '执行步骤', `execution_step` varchar(100) DEFAULT NULL COMMENT '执行步骤',
`actual_result` text COMMENT '实际结果', `actual_result` text COMMENT '实际结果',
@ -161,8 +161,12 @@ CREATE TABLE `aima_test_log` (
`error_stack` text COMMENT '错误堆栈', `error_stack` text COMMENT '错误堆栈',
`duration_ms` bigint DEFAULT NULL COMMENT '执行耗时(毫秒)', `duration_ms` bigint DEFAULT NULL COMMENT '执行耗时(毫秒)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`progress` decimal(5,2) DEFAULT '0.00' COMMENT '执行进度(百分比保留2位小数)', `progress` decimal(5,2) DEFAULT '0.00' COMMENT '执行进度(百分比保留2位小数)',
`status` char(1) DEFAULT '0' COMMENT '执行状态(0进行中 1已完成 2已暂停 3已取消 4已失败)', `status` char(1) DEFAULT '0' COMMENT '执行状态(0进行中 1已完成 2已暂停 3已取消 4已失败)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `idx_task_instance_id` (`task_instance_id`), KEY `idx_task_instance_id` (`task_instance_id`),
KEY `idx_task_id` (`task_id`), KEY `idx_task_id` (`task_id`),