fix(通用功能): 任务中心停止全部,没有根据过滤条件停止

--bug=1043678 --user=陈建星 【任务中心】github#31896,测试计划是admin执行,使用其他用户lijx,点击全部停止,admin的任务也停止了。应只停止当前用户的测试任务。 https://www.tapd.cn/55049933/s/1545276
This commit is contained in:
AgAngle 2024-07-08 18:17:24 +08:00 committed by 刘瑞斌
parent f1aad6bc36
commit 4fd265573f
9 changed files with 76 additions and 17 deletions

View File

@ -281,6 +281,15 @@
<foreach collection="request.projects" item="id" separator="," open="(" close=")">
#{id}
</foreach>
<if test="request.userId != null and request.userId != ''">
and user_id = #{request.userId}
</if>
<if test="request.triggerMode != null and request.triggerMode != ''">
and trigger_mode = #{request.triggerMode}
</if>
<if test="request.executionStatus != null and request.executionStatus != ''">
and status = #{request.executionStatus}
</if>
</select>
<select id="selectResourceId" resultType="java.lang.String">
SELECT resource_id

View File

@ -476,6 +476,15 @@
<foreach collection="request.projects" item="id" separator="," open="(" close=")">
#{id}
</foreach>
<if test="request.userId != null and request.userId != ''">
and user_id = #{request.userId}
</if>
<if test="request.triggerMode != null and request.triggerMode != ''">
and trigger_mode = #{request.triggerMode}
</if>
<if test="request.executionStatus != null and request.executionStatus != ''">
and status = #{request.executionStatus}
</if>
</select>
<select id="selectByProjectIdAndLessThanTime" resultType="java.lang.String">
select id

View File

@ -139,8 +139,12 @@ public class ExtApiTaskService extends TaskService {
Map<String, TaskRequestDTO> taskRequestMap = taskRequests.stream().collect(Collectors.toMap(TaskRequestDTO::getType, taskRequest -> taskRequest));
// 获取工作空间项目
LoggerUtil.info("获取工作空间对应的项目");
TaskRequestDTO taskRequest = taskRequestMap.get(ElementConstants.SCENARIO_UPPER);
TaskCenterRequest taskCenterRequest = new TaskCenterRequest();
taskCenterRequest.setProjects(this.getOwnerProjectIds(taskRequestMap.get(ElementConstants.SCENARIO_UPPER).getUserId()));
taskCenterRequest.setProjects(this.getOwnerProjectIds(taskRequest.getUserId()));
taskCenterRequest.setUserId(taskRequest.getUserId());
taskCenterRequest.setTriggerMode(taskRequest.getTriggerMode());
taskCenterRequest.setExecutionStatus(taskRequest.getExecutionStatus());
// 结束掉未分发完成的任务
LoggerUtil.info("结束正在进行中的计划任务队列");

View File

@ -341,22 +341,26 @@ export default {
array.push({
type: "API",
projectId: getCurrentProjectID(),
userId: getCurrentUser().id,
userId: this.condition.executor,
});
array.push({
type: "SCENARIO",
projectId: getCurrentProjectID(),
userId: getCurrentUser().id,
userId: this.condition.executor,
});
array.push({
type: "PERFORMANCE",
projectId: getCurrentProjectID(),
userId: getCurrentUser().id,
userId: this.condition.executor,
});
array.push({
type: "UI_SCENARIO",
projectId: getCurrentProjectID(),
userId: getCurrentUser().id,
userId: this.condition.executor,
});
array.forEach(item => {
item.triggerMode = this.condition.triggerMode;
item.executionStatus = this.condition.executionStatus;
});
stopBatchTask(array).then((response) => {
this.$success(this.$t("report.test_stop_success"));
@ -365,9 +369,12 @@ export default {
}
},
getMaintainerOptions() {
getProjectUsers().then((response) => {
this.maintainerOptions = response.data;
this.condition.executor = getCurrentUser().id;
return new Promise(resolve => {
getProjectUsers().then((response) => {
this.maintainerOptions = response.data;
this.condition.executor = getCurrentUser().id;
resolve();
});
});
},
initWebSocket() {
@ -398,7 +405,6 @@ export default {
},
showTaskCenter() {
this.getTaskRunning();
this.getMaintainerOptions();
window.addEventListener("resize", this.listenScreenChange, false);
this.taskVisible = true;
},
@ -411,10 +417,11 @@ export default {
this.websocket.close();
}
},
open(activeName) {
async open(activeName) {
if (activeName) {
this.activeName = activeName;
}
await this.getMaintainerOptions();
this.init(true);
this.taskVisible = true;
setTimeout(this.showTaskCenter, 2000);
@ -529,7 +536,9 @@ export default {
return mode;
},
getTaskRunning() {
this.initWebSocket();
if (this.condition.executor) {
this.initWebSocket();
}
},
nextPage(currentPage, pageSize) {
this.currentPage = currentPage;

View File

@ -301,6 +301,15 @@
<foreach collection="request.projects" item="id" separator="," open="(" close=")">
#{id}
</foreach>
<if test="request.userId != null and request.userId != ''">
and user_id = #{request.userId}
</if>
<if test="request.triggerMode != null and request.triggerMode != ''">
and trigger_mode = #{request.triggerMode}
</if>
<if test="request.executionStatus != null and request.executionStatus != ''">
and status = #{request.executionStatus}
</if>
</update>
@ -310,5 +319,14 @@
<foreach collection="request.projects" item="id" separator="," open="(" close=")">
#{id}
</foreach>
<if test="request.userId != null and request.userId != ''">
and user_id = #{request.userId}
</if>
<if test="request.triggerMode != null and request.triggerMode != ''">
and trigger_mode = #{request.triggerMode}
</if>
<if test="request.executionStatus != null and request.executionStatus != ''">
and status = #{request.executionStatus}
</if>
</update>
</mapper>

View File

@ -8,5 +8,7 @@ public class TaskRequestDTO {
private String reportId;
private String projectId;
private String userId;
private String triggerMode;
private String executionStatus;
}

View File

@ -4,9 +4,9 @@ import io.metersphere.base.domain.FileMetadata;
import io.metersphere.base.domain.LoadTestReport;
import io.metersphere.base.domain.LoadTestReportWithBLOBs;
import io.metersphere.dto.DashboardTestDTO;
import io.metersphere.dto.PlanReportCaseDTO;
import io.metersphere.dto.ReportDTO;
import io.metersphere.request.ReportRequest;
import io.metersphere.task.dto.TaskRequestDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -23,7 +23,7 @@ public interface ExtLoadTestReportMapper {
void updateJmxContentIfAbsent(LoadTestReportWithBLOBs record);
List<LoadTestReport> selectReportByProjectId(String projectId);
List<LoadTestReport> selectReportByProjectId(@Param("request") TaskRequestDTO request);
int updateReportVumStatus(String reportId, String reportKey, String nextStatus, String preStatus);

View File

@ -227,9 +227,17 @@
left join `user` t1 ON t.user_id = t1.id
left join test_resource_pool t2 on t.test_resource_pool_id = t2.id
where to_days(FROM_UNIXTIME(t.create_time / 1000)) = to_days(now())
and t.project_id = #{projectId}
and t.status = 'running'
and t.project_id = #{request.projectId}
and t.status in ("Running","Starting","Pending")
<if test="request.userId != null and request.userId != ''">
and t.user_id = #{request.userId}
</if>
<if test="request.triggerMode != null and request.triggerMode != ''">
and t.trigger_mode = #{request.triggerMode}
</if>
<if test="request.executionStatus != null and request.executionStatus != ''">
and t.status = #{request.executionStatus}
</if>
</select>
<update id="updateJmxContentIfAbsent">

View File

@ -973,7 +973,7 @@ public class PerformanceTestService {
if (StringUtils.isNotEmpty(taskRequestDTO.getReportId())) {
this.stopTest(taskRequestDTO.getReportId(), false);
} else {
List<LoadTestReport> loadTestReports = extLoadTestReportMapper.selectReportByProjectId(taskRequestDTO.getProjectId());
List<LoadTestReport> loadTestReports = extLoadTestReportMapper.selectReportByProjectId(taskRequestDTO);
loadTestReports.forEach(loadTestReport -> {
this.stopTest(loadTestReport.getId(), false);
});