/// <summary> /// 创建一个延时任务 /// </summary> /// <param name="entity"></param> /// <param name="executors"></param> /// <returns></returns> public ServiceResponseMessage Add(ScheduleDelayedEntity entity, List <string> executors) { if (executors == null || !executors.Any()) { //没有指定worker就根据权重选择2个 executors = _nodeService.GetAvaliableWorkerByPriority(null, 2).Select(x => x.NodeName).ToList(); } if (!executors.Any()) { return(ServiceResult(ResultStatus.Failed, "没有可用节点!")); } entity.CreateTime = DateTime.Now; //保存主信息 _repositoryFactory.ScheduleDelayeds.Add(entity); //创建并保存任务锁 _repositoryFactory.ScheduleLocks.Add(new ScheduleLockEntity { ScheduleId = entity.Id, Status = 0 }); //保存执行节点 _repositoryFactory.ScheduleExecutors.AddRange(executors.Select(x => new ScheduleExecutorEntity { ScheduleId = entity.Id, WorkerName = x })); //事务提交 if (_unitOfWork.Commit() > 0) { //任务持久化成功后分发给worker,进入就绪状态 return(Start(entity.Id)); } return(ServiceResult(ResultStatus.Failed, "数据保存失败!")); }
public ServiceResponseMessage Create([FromForm] ScheduleDelayedInfo task) { if (!ModelState.IsValid) { return(ApiResponse(ResultStatus.ParamError, "非法提交参数")); } ScheduleDelayedEntity entity = ObjectMapper <ScheduleDelayedInfo, ScheduleDelayedEntity> .Convert(task); entity.Status = (int)ScheduleDelayStatus.Created; entity.CreateUserName = CurrentUserName; var result = _taskService.Add(entity, task.Executors); return(result); }
public ActionResult Create(ScheduleDelayedInfo task) { if (!ModelState.IsValid) { return(this.JsonNet(false, "数据验证失败!")); } ScheduleDelayedEntity entity = ObjectMapper <ScheduleDelayedInfo, ScheduleDelayedEntity> .Convert(task); entity.Status = (int)ScheduleDelayStatus.Created; entity.CreateUserName = CurrentAdmin.UserName; var result = _taskService.Add(entity, task.Executors); if (result.Status == ResultStatus.Success) { return(this.JsonNet(true, "任务创建成功!", Url.Action("Index"))); } return(this.JsonNet(false, "任务创建失败!")); }
/// <summary> /// 根据任务实体插入 /// </summary> /// <param name="entity"></param> /// <returns></returns> private static bool InsertByEntity(ScheduleDelayedEntity entity) { bool success = false; NotifyPlan plan = new NotifyPlan() { Key = entity.Id.ToString(), NotifyUrl = entity.NotifyUrl, NotifyDataType = entity.NotifyDataType, NotifyBody = entity.NotifyBody, Callback = NotifyExecutedEvent }; string pattern = ConfigurationCache.GetField <string>("DelayTask_DelayPattern"); if (pattern.ToLower() == "absolute") { success = Insert(plan, entity.DelayAbsoluteTime); } else { success = Insert(plan, entity.DelayTimeSpan); } return(success); }