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 data = scheduler.GetModel();
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;
}
@@ -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)
.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);
}
@@ -60,8 +68,8 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
//jobBuilder
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobTypeFullName).SetJobId(input.JobId).SetGroupName(input.GroupName);
//.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties));
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobType).SetJobId(input.JobId).SetGroupName(input.GroupName)
.SetConcurrent(input.Concurrent).SetDescription(input.Description);
//triggerBuilder
//毫秒
@@ -133,8 +141,8 @@ namespace Yi.Furion.Application.Rbac.Services.Impl
public ScheduleResult Update(string jobId, TaskUpdateInput input)
{
//jobBuilder
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobTypeFullName).SetJobId(jobId).SetGroupName(input.GroupName)
.SetConcurrent(input.Concurrent).SetDescription(input.Description).SetProperties(Newtonsoft.Json.JsonConvert.SerializeObject(input.Properties));
var jobBuilder = JobBuilder.Create(input.AssemblyName, input.JobType).SetJobId(jobId).SetGroupName(input.GroupName)
.SetConcurrent(input.Concurrent).SetDescription(input.Description);
//triggerBuilder
//毫秒

View File

@@ -11,11 +11,11 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
{
public string AssemblyName { get; set; }
public string JobTypeFullName { get; set; }
public string JobType { get; set; }
public string JobId { get; set; }
public string GroupName { get; set; }
public string? GroupName { get; set; }
public JobTypeEnum Type { get; set; }
@@ -25,8 +25,8 @@ namespace Yi.Furion.Core.Rbac.Dtos.Task
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>
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>
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 JobTypeFullName { get; set; }
public string JobType { get; set; }
public string GroupName { get; set; }
public string? GroupName { get; set; }
public JobTypeEnum Type { get; set; }
public string Cron { get; set; }
public string? Cron { get; set; }
public int Millisecond { 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>
</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">
<summary>
作业 Id

View File

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

View File

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