public async Task <IActionResult> Create([FromBody] Job value) { if (ModelState.IsValid) { var apiResult = ValidateProperties(value); if (apiResult != null) { return(apiResult); } if (await _store.IsJobExists(value.Name, value.Group)) { return(new JsonResult(new ApiResult(ApiResult.Error, $"Job [{value.Name}, {value.Group}] exists"))); } await _store.AddJob(value); if (string.IsNullOrWhiteSpace(value.Id)) { return(new JsonResult(new ApiResult(ApiResult.DbError, "Save job failed"))); } var qzJob = value.ToQuartzJob(); var trigger = TriggerFactory.Create(value.Trigger, value.Id, value.Properties); await _scheduler.ScheduleJob(qzJob, trigger); _logger.LogInformation( $"Create job {JsonConvert.SerializeObject(value)} success"); return(new JsonResult(new ApiResult(ApiResult.SuccessCode, null, value.Id))); } return(new JsonResult(new ApiResult(ApiResult.ModelNotValid, GetModelStateErrorMsg()))); }
public async Task <ApiResult> Create(Job job) { // 参数验证 var apiResult = ValidateProperties(job); if (apiResult != null) { return(apiResult); } if (await _store.GetJob(job.Name, job.Group) != null) { return(new ApiResult(ApiResult.Error, $"Job [{job.Name}, {job.Group}] exists")); } var node = await _sharding.GetShardingNode(); if (node == null) { return(new ApiResult(ApiResult.Error, "Swarm cluster has no available node")); } var sched = _schedCache.GetOrCreate(node.SchedName, node.SchedInstanceId, node.Provider, node.ConnectionString); var qzJob = job.ToQuartzJob(); var trigger = TriggerFactory.Create(job.Trigger, job.Id, job.Properties); await sched.ScheduleJob(qzJob, trigger); job.SchedInstanceId = node.SchedInstanceId; job.SchedName = node.SchedName; await _store.AddJob(job); if (string.IsNullOrWhiteSpace(job.Id)) { await sched.DeleteJob(qzJob.Key); await sched.UnscheduleJob(trigger.Key); return(new ApiResult(ApiResult.DbError, "Save job failed")); } _logger.LogInformation( $"Create job {JsonConvert.SerializeObject(job)} success"); return(new ApiResult(ApiResult.SuccessCode, null, job.Id)); }