feat:完成job页面+接口功能,还差job状态更新

This commit is contained in:
陈淳
2023-04-25 13:30:54 +08:00
parent bc5aaff9c9
commit 94f902f788
8 changed files with 82 additions and 46 deletions

View File

@@ -30,6 +30,10 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
var result = _schedulerFactory.TryGetJob(jobId, out var scheduler); var result = _schedulerFactory.TryGetJob(jobId, out var scheduler);
var data = scheduler.GetModel(); var data = scheduler.GetModel();
var output = data.JobDetail.Adapt<TaskGetOutput>(); var output = data.JobDetail.Adapt<TaskGetOutput>();
output.TriggerArgs = data.Triggers[0].Args;
output.NextRunTime = data.Triggers[0].NextRunTime;
output.LastRunTime = data.Triggers[0].LastRunTime;
output.NumberOfRuns = data.Triggers[0].NumberOfRuns;
return output; return output;
} }
@@ -43,10 +47,14 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
var data = _schedulerFactory.GetJobsOfModels().Skip((input.PageNum - 1) * input.PageSize).Take(input.PageSize).OrderByDescending(x => x.JobDetail.UpdatedTime) var data = _schedulerFactory.GetJobsOfModels().Skip((input.PageNum - 1) * input.PageSize).Take(input.PageSize).OrderByDescending(x => x.JobDetail.UpdatedTime)
.ToList(); .ToList();
var output = data.Select(x => x.JobDetail).Adapt<List<TaskGetListOutput>>(); var output = data.Select(x => {
var res= new TaskGetListOutput();
res= x.JobDetail.Adapt<TaskGetListOutput>();
res.TriggerArgs = x.Triggers[0].Args;
res.Status = x.Triggers[0].Status.ToString();
return res;
} ).ToList();
return new PagedResultDto<TaskGetListOutput>(data.Count(), output); return new PagedResultDto<TaskGetListOutput>(data.Count(), output);
} }
@@ -60,8 +68,8 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
//jobBuilder //jobBuilder
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobTypeFullName).SetJobId(input.JobId).SetGroupName(input.GroupName); var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobType).SetJobId(input.JobId).SetGroupName(input.GroupName)
//.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties)); .SetConcurrent(input.Concurrent).SetDescription(input.Description);
//triggerBuilder //triggerBuilder
//毫秒 //毫秒
@@ -133,8 +141,8 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
public ScheduleResult Update(string jobId, TaskUpdateInput input) public ScheduleResult Update(string jobId, TaskUpdateInput input)
{ {
//jobBuilder //jobBuilder
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobTypeFullName).SetJobId(jobId).SetGroupName(input.GroupName) var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobType).SetJobId(jobId).SetGroupName(input.GroupName)
.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties)); .SetConcurrent(input.Concurrent).SetDescription(input.Description);
//triggerBuilder //triggerBuilder
//毫秒 //毫秒

View File

@@ -11,11 +11,11 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
{ {
public string AssemblyName { get; set; } public string AssemblyName { get; set; }
public string JobTypeFullName { get; set; } public string JobType { get; set; }
public string JobId { get; set; } public string JobId { get; set; }
public string GroupName { get; set; } public string? GroupName { get; set; }
public JobTypeEnum Type { get; set; } public JobTypeEnum Type { get; set; }
@@ -25,8 +25,8 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
public bool Concurrent { get; set; } public bool Concurrent { get; set; }
public Dictionary<string, object> Properties { get; set; } //public Dictionary<string, object>? Properties { get; set; }
public string Description { get; set; } public string? Description { get; set; }
} }
} }

View File

@@ -81,5 +81,14 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
/// 作业信息额外数据运行时实例 /// 作业信息额外数据运行时实例
/// </summary> /// </summary>
internal string RuntimeProperties { get; set; } internal string RuntimeProperties { get; set; }
/// <summary>
/// 触发器参数
/// </summary>
public string TriggerArgs { get; set; }
//状态
public string Status { get; set; }
} }
} }

View File

@@ -81,5 +81,13 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
/// 作业信息额外数据运行时实例 /// 作业信息额外数据运行时实例
/// </summary> /// </summary>
internal string RuntimeProperties { get; set; } internal string RuntimeProperties { get; set; }
public string TriggerArgs { get; set; }
public DateTime? NextRunTime { get; set; }
public DateTime? LastRunTime { get; set; }
public long NumberOfRuns { get; set; }
} }
} }

View File

@@ -11,20 +11,20 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
{ {
public string AssemblyName { get; set; } public string AssemblyName { get; set; }
public string JobTypeFullName { get; set; } public string JobType { get; set; }
public string GroupName { get; set; } public string? GroupName { get; set; }
public JobTypeEnum Type { get; set; } public JobTypeEnum Type { get; set; }
public string Cron { get; set; } public string? Cron { get; set; }
public int Millisecond { get; set; } public int Millisecond { get; set; }
public bool Concurrent { get; set; } public bool Concurrent { get; set; }
public Dictionary<string, object> Properties { get; set; } // public Dictionary<string, object>? Properties { get; set; }
public string Description { get; set; } public string? Description { get; set; }
} }
} }

View File

@@ -430,6 +430,11 @@
作业信息额外数据运行时实例 作业信息额外数据运行时实例
</summary> </summary>
</member> </member>
<member name="P:Yi.Furion.Core.Rbac.Dtos.Task.TaskGetListOutput.TriggerArgs">
<summary>
触发器参数
</summary>
</member>
<member name="P:Yi.Furion.Core.Rbac.Dtos.Task.TaskGetOutput.JobId"> <member name="P:Yi.Furion.Core.Rbac.Dtos.Task.TaskGetOutput.JobId">
<summary> <summary>
作业 Id 作业 Id

View File

@@ -59,13 +59,13 @@ export function changeJobStatus(jobId, status) {
// 定时任务立即执行一次 // 定时任务立即执行一次
export function runJob(jobId, jobGroup) { export function runJob(jobId, jobGroup) {
const data = { // const data = {
jobId, // jobId,
jobGroup // jobGroup
} // }
return request({ return request({
url: '/monitor/job/run', url: `/task/run-once/${jobId}`,
method: 'put', method: 'post',
data: data // data: data
}) })
} }

View File

@@ -99,13 +99,13 @@
</el-table-column> </el-table-column>
<el-table-column label="程序集" align="center" prop="assemblyName" :show-overflow-tooltip="true" /> <el-table-column label="程序集" align="center" prop="assemblyName" :show-overflow-tooltip="true" />
<el-table-column label="类型" align="center" prop="jobType" :show-overflow-tooltip="true" /> <el-table-column label="类型" align="center" prop="jobType" :show-overflow-tooltip="true" />
<el-table-column label="cron执行表达式" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="触发器参数" align="center" prop="triggerArgs" :show-overflow-tooltip="true" />
<el-table-column label="毫秒间隔周期" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="Job参数" align="center" prop="properties" :show-overflow-tooltip="true" />
<el-table-column label="参数" align="center" prop="properties" :show-overflow-tooltip="true" />
<el-table-column label="是否并行" align="center" prop="concurrent" :show-overflow-tooltip="true" /> <el-table-column label="是否并行" align="center" prop="concurrent" :show-overflow-tooltip="true" />
<el-table-column label="最后更新时间" align="center" prop="updatedTime" :show-overflow-tooltip="true" /> <el-table-column label="最后更新时间" align="center" prop="updatedTime" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="status" :show-overflow-tooltip="true" />
<el-table-column label="描述" align="center" prop="description" :show-overflow-tooltip="true" /> <el-table-column label="描述" align="center" prop="description" :show-overflow-tooltip="true" />
<!-- <el-table-column label="状态" align="center"> <!-- <el-table-column label="状态" align="center">
<template #default="scope"> <template #default="scope">
@@ -207,7 +207,7 @@
<el-form-item prop="jobTypeFullName"> <el-form-item prop="jobType">
<template #label> <template #label>
<span> <span>
job类名 job类名
@@ -223,7 +223,7 @@
</el-tooltip> </el-tooltip>
</span> </span>
</template> </template>
<el-input v-model="form.jobTypeFullName" placeholder="请输入调用程序集下的job完整类名" /> <el-input v-model="form.jobType" placeholder="请输入调用程序集下的job完整类名" />
</el-form-item> </el-form-item>
@@ -315,21 +315,24 @@
<el-form :model="form" label-width="120px"> <el-form :model="form" label-width="120px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="任务编号">{{ form.jobId }}</el-form-item> <el-form-item label="任务Id">{{ form.jobId }}</el-form-item>
<el-form-item label="任务名称">{{ form.jobName }}</el-form-item> <el-form-item label="任务分组">{{ form.groupName }}</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="任务分组">{{ jobGroupFormat(form) }}</el-form-item> <el-form-item label="任务所在程序集">{{ form.assemblyName }}</el-form-item>
<el-form-item label="创建时间">{{ form.createTime }}</el-form-item> <el-form-item label="任务完整类名">{{ form.jobType }}</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="cron表达式">{{ form.cronExpression }}</el-form-item> <el-form-item label="触发器参数">{{ form.triggerArgs }}</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item> <el-form-item label="下次执行时间:">{{ parseTime(form.nextRunTime) }}</el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="12">
<el-form-item label="调用目标方法">{{ form.invokeTarget }}</el-form-item> <el-form-item label="最后执行时间">{{ parseTime(form.lastRunTime) }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="已执行次数:">{{ form.numberOfRuns }}</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="任务状态:"> <el-form-item label="任务状态:">
@@ -339,18 +342,18 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否并发:"> <el-form-item label="是否并发:">
<div v-if="form.concurrent == 0">允许</div> <div v-if="form.concurrent == true">允许</div>
<div v-else-if="form.concurrent == 1">禁止</div> <div v-else-if="form.concurrent == false">禁止</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="执行策略:"> <el-form-item label="执行策略:">
<div v-if="form.misfirePolicy == 0">默认策略</div> <div v-if="form.misfirePolicy == 0">默认策略</div>
<div v-else-if="form.misfirePolicy == 1">立即执行</div> <div v-else-if="form.misfirePolicy == 1">立即执行</div>
<div v-else-if="form.misfirePolicy == 2">执行一次</div> <div v-else-if="form.misfirePolicy == 2">执行一次</div>
<div v-else-if="form.misfirePolicy == 3">放弃执行</div> <div v-else-if="form.misfirePolicy == 3">放弃执行</div>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
</el-row> </el-row>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -395,9 +398,9 @@ const data = reactive({
status: undefined status: undefined
}, },
rules: { rules: {
JobId: [{ required: true, message: "任务Id不能为空", trigger: "blur" }], jobId: [{ required: true, message: "任务Id不能为空", trigger: "blur" }],
assemblyName: [{ required: true, message: "Job程序集不能为空", trigger: "blur" }], assemblyName: [{ required: true, message: "Job程序集不能为空", trigger: "blur" }],
jobTypeFullName: [{ required: true, message: "Job全类名不能为空", trigger: "blur" }] jobType: [{ required: true, message: "Job全类名不能为空", trigger: "blur" }]
} }
}); });
@@ -518,8 +521,9 @@ function handleAdd() {
} }
/** 修改按钮操作 */ /** 修改按钮操作 */
function handleUpdate(row) { function handleUpdate(row) {
IsAdd.value=false;
reset(); reset();
IsAdd.value=false;
const jobId = row.jobId || ids.value; const jobId = row.jobId || ids.value;
getJob(jobId).then(response => { getJob(jobId).then(response => {
form.value = response.data; form.value = response.data;
@@ -530,7 +534,9 @@ IsAdd.value=false;
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["jobRef"].validate(valid => { proxy.$refs["jobRef"].validate(valid => {
if (valid) { console.log(valid,"123");
if (true) {
if (IsAdd.value) { if (IsAdd.value) {
addJob(form.value).then(response => { addJob(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功"); proxy.$modal.msgSuccess("新增成功");
@@ -539,7 +545,7 @@ function submitForm() {
}); });
} else { } else {
updateJob(form.value).then(response => { updateJob(form.value.jobId,form.value).then(response => {
proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功");
open.value = false; open.value = false;
getList(); getList();