Пример #1
0
 public void UpdateTask(ApiTask task)
 {
     repository.UpdateTask(mapper.Map <DtoTask>(task), task.BindedOpers);
     UpdateDtoEntitiesList(operations);
     UpdateTaskList();
     SendServiceInfo($"Changed task {task.Id}");
 }
        } //init vm

        private async Task Save()
        {
            if (!IsValid || !IsDirty)
            {
                return;
            }

            if (!await Shell.ShowWarningAffirmativeDialogAsync(Id > 0
                ? "Save these task settings?"
                : "Create this task?"))
            {
                return;
            }

            var opersToSave = BindedOpers.ToList();

            foreach (var oper in opersToSave)
            {
                oper.Number = opersToSave.IndexOf(oper) + 1;
            }

            var editedTask = new ApiTask();

            mapper.Map(this, editedTask);

            editedTask.BindedOpers =
                opersToSave.Select(oper => mapper.Map <ApiOperation>(oper)).ToArray();

            cachedService.CreateOrUpdateTask(editedTask);

            Close();
            cachedService.RefreshData();
        } //saving to base
Пример #3
0
        public ContentResult UpdateTask(int id, [FromBody] ApiTask task)
        {
            try
            {
                if (id != task.Id)
                {
                    return new ContentResult
                           {
                               Content    = "Request id does not match task id",
                               StatusCode = StatusCodes.Status400BadRequest
                           }
                }
                ;

                var dtoTask = mapper.Map <DtoTask>(task);
                dtoTask.UpdateDateTime = DateTime.Now;

                logic.UpdateTask(dtoTask, task.BindedOpers);

                return(new ContentResult {
                    StatusCode = StatusCodes.Status200OK
                });
            }
            catch
            {
                return(GetInternalErrorResult());
            }
        }
        private async Task Save()
        {
            if (!await CheckCanSave())
            {
                return;
            }

            var opersToSave = BindedOpers.ToList();

            foreach (var oper in opersToSave)
            {
                oper.Number = opersToSave.IndexOf(oper) + 1;
            }

            var editedTask = new ApiTask();

            mapper.Map(this, editedTask);

            editedTask.DependsOn = taskDependencies.Count == 0
                ? null
                : taskDependencies.Items.Select(dep => mapper.Map <ApiTaskDependence>(dep))
                                   .ToArray();

            editedTask.BindedOpers =
                opersToSave.Select(oper => mapper.Map <ApiOperation>(oper)).ToArray();

            cachedService.CreateOrUpdateTask(editedTask);

            Close();
            cachedService.RefreshData();
        } //saving to base
Пример #5
0
        /// <summary>
        /// 拦截方法的调用
        /// </summary>
        /// <param name="target">接口的实例</param>
        /// <param name="method">接口的方法</param>
        /// <param name="parameters">接口的参数集合</param>
        /// <returns></returns>
        public virtual object Intercept(object target, MethodInfo method, object[] parameters)
        {
            var apiActionDescripter = this.GetApiActionDescriptor(method, parameters);
            var apiTask             = ApiTask.CreateInstance(this.ApiConfig, apiActionDescripter);

            return(apiTask);
        }
 private static ApiTaskDTO ApiTaskToDTO(ApiTask apiTask) =>
 new ApiTaskDTO
 {
     Id     = apiTask.Id,
     TaskId = apiTask.TaskId,
     Name   = apiTask.Name,
     Status = apiTask.Status
 };
Пример #7
0
        public long?CreateOrUpdateTask(ApiTask task)
        {
            if (task.Id == 0)
            {
                return(client.Post("tasks/", task));
            }

            client.Put($"tasks/{task.Id}", task);
            return(task.Id);
        }
Пример #8
0
        public int CreateTask(ApiTask task)
        {
            var newTaskId = repository.CreateTask(mapper.Map <DtoTask>(task),
                                                  task.BindedOpers);

            UpdateDtoEntitiesList(operations);
            UpdateTaskList();
            SendServiceInfo($"Created task {newTaskId}");
            return(newTaskId);
        }
Пример #9
0
 public NewTaskViewModel(TaskQueueItemsService taskQueueItemsService, int maxOrder, Logger logger)
 {
     Logger                = logger;
     Task                  = new ApiTask();
     MixerVolume           = GetMixerVolume();
     Volume                = (decimal)0.2;
     MaxOrder              = maxOrder;
     TaskQueueItemsService = taskQueueItemsService;
     UpdateRecipes();
     UpdateCustomers();
 }
Пример #10
0
        /// <summary>
        /// 拦截方法的调用
        /// </summary>
        /// <param name="target">接口的实例</param>
        /// <param name="method">接口的方法</param>
        /// <param name="parameters">接口的参数集合</param>
        /// <returns></returns>
        public virtual object Intercept(object target, MethodInfo method, object[] parameters)
        {
            var apiActionDescripter = this.GetApiActionDescriptor(method, parameters);
            var apiTask             = ApiTask.CreateInstance(this.ApiConfig, apiActionDescripter);

            if (apiActionDescripter.Return.IsITaskDefinition == true)
            {
                return(apiTask);
            }
            else
            {
                return(apiTask.InvokeAsync());
            }
        }
        private ApiTask <T> ExecuteRequestAndMap <T>(IRestRequest request)
        {
            var tokenSource       = new CancellationTokenSource();
            var cancellationToken = tokenSource.Token;
            var tcs = new TaskCompletionSource <IRestResponse>();

            _restClient.ExecuteAsync(request, tcs.SetResult);
            var requestAndMapTask = tcs.Task.ContinueWith((previousTask) =>
            {
                cancellationToken.ThrowIfCancellationRequested();
                return(MapToEntity <T>(previousTask.Result));
            }, cancellationToken, TaskContinuationOptions.LongRunning, TaskScheduler.Default);

            return(ApiTask <T> .Create(requestAndMapTask, tokenSource));
        }
Пример #12
0
        public ContentResult CreateTask([FromBody] ApiTask newTask)
        {
            try
            {
                var dtoTask = mapper.Map <DtoTask>(newTask);
                dtoTask.UpdateDateTime = DateTime.Now;

                var id = logic.CreateTask(dtoTask, newTask.BindedOpers);

                return(GetSuccessfulResult(id.ToString()));
            }
            catch
            {
                return(GetInternalErrorResult());
            }
        }
Пример #13
0
        public async Task <ActionResult <ApiTaskDTO> > CreateApiTask(ApiTaskDTO apiTaskDTO)
        {
            var apiTask = new ApiTask
            {
                TaskId      = apiTaskDTO.TaskId,
                Name        = apiTaskDTO.Name,
                SubmittedAt = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()
            };

            await _tasksManager.StoreApiTaskAsync(apiTask);

            return(CreatedAtAction(
                       nameof(CreateApiTask),
                       new { id = apiTask.Id },
                       ApiTaskToDTO(apiTask)));
        }
Пример #14
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(this MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType   = method.ReturnType.GetGenericArguments().FirstOrDefault();
            var descriptor = new ApiReturnDescriptor();

            descriptor.Attribute         = returnAttribute;
            descriptor.ReturnType        = method.ReturnType;
            descriptor.DataType          = dataType;
            descriptor.IsITaskDefinition = method.ReturnType.GetGenericTypeDefinition() == typeof(ITask <>);
            descriptor.ITaskCtor         = ApiTask.GetITaskConstructor(dataType);

            return(descriptor);
        }
Пример #15
0
        private Dictionary <ApiOpcParameter, string> GetValues(ApiTask task, ApiRecipe recipe, Dictionary <long, ApiRecipeMaterial> containers)
        {
            var result   = new Dictionary <ApiOpcParameter, string>();
            var isOk     = true;
            var batchers = BatchersReader.ListBatchers();

            foreach (var batcher in batchers)
            {
                foreach (var dosingSource in batcher.DosingSources)
                {
                    containers.TryGetValue(dosingSource.Container.Id, out var recipeMaterial);
                    if (recipeMaterial != null)
                    {
                        var materialSetParameter = dosingSource.DosingSourceOpcParameters.FirstOrDefault(x =>
                                                                                                         x.Name == OpcHelper.GetTagName(OpcHelper.TagNames.MaterialSet));
                        if (materialSetParameter != null)
                        {
                            var volume = Math.Round(recipeMaterial.Volume * task.BatchVolume, 1);
                            result.Add(materialSetParameter, volume.ToString(CultureInfo.InvariantCulture));
                        }
                        else
                        {
                            isOk = false;
                            Logger.Error($"У дозатора {batcher.Name} - источник дозирования {dosingSource.Name} отсутствует параметр - MaterialSet.");
                        }
                        var materialIdParameter = dosingSource.DosingSourceOpcParameters.FirstOrDefault(x =>
                                                                                                        x.Name == OpcHelper.GetTagName(OpcHelper.TagNames.MaterialId));
                        if (materialIdParameter != null)
                        {
                            result.Add(materialIdParameter, recipeMaterial.Material.Id.ToString(CultureInfo.InvariantCulture));
                        }
                        else
                        {
                            isOk = false;
                            Logger.Error($"У дозатора {batcher.Name} - источник дозирования {dosingSource.Name} отсутствует параметр - MaterialId.");
                        }
                        var containerIdParameter = dosingSource.DosingSourceOpcParameters.FirstOrDefault(x =>
                                                                                                         x.Name == OpcHelper.GetTagName(OpcHelper.TagNames.ContainerId));
                        if (containerIdParameter != null)
                        {
                            result.Add(containerIdParameter, dosingSource.Container.Id.ToString(CultureInfo.InvariantCulture));
                        }
                        else
                        {
                            isOk = false;
                            Logger.Error($"У дозатора {batcher.Name} - источник дозирования {dosingSource.Name} отсутствует параметр - ContainerId.");
                        }
                    }
                }
            }
            var batchesAmount = GetCommonParameter(OpcHelper.TagNames.BatchesAmount);

            if (batchesAmount != null)
            {
                result.Add(batchesAmount, task.BatchesAmount.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                isOk = false;
                Logger.Error("Отсутствует параметр - BatchesAmount.");
            }
            var mixingTime = GetCommonParameter(OpcHelper.TagNames.MixingTime);

            if (mixingTime != null)
            {
                result.Add(mixingTime, recipe.MixingTime.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                isOk = false;
                Logger.Error("Отсутствует параметр - MixingTime.");
            }
            var percentOpenGate = GetCommonParameter(OpcHelper.TagNames.PercentOpenGate);

            if (percentOpenGate != null)
            {
                result.Add(percentOpenGate, recipe.PercentOpenGate.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                isOk = false;
                Logger.Error("Отсутствует параметр - PercentOpenGate.");
            }
            var timeFullUnload = GetCommonParameter(OpcHelper.TagNames.TimeFullUnload);

            if (timeFullUnload != null)
            {
                result.Add(timeFullUnload, recipe.TimeFullUnload.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                isOk = false;
                Logger.Error("Отсутствует параметр - TimeFullUnload.");
            }
            var timePartialUnload = GetCommonParameter(OpcHelper.TagNames.TimePartialUnload);

            if (timePartialUnload != null)
            {
                result.Add(timePartialUnload, recipe.TimePartialUnload.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                isOk = false;
                Logger.Error("Отсутствует параметр - TimePartialUnload.");
            }
            return(isOk ? result : null);
        }
Пример #16
0
 private ApiTaskStatus calculateStatus(long epochSeconds, ApiTask apiTask)
 {
     return(epochSeconds - apiTask.SubmittedAt > 8 ?
            ApiTaskStatus.COMPLETED :
            ApiTaskStatus.CREATED);
 }
Пример #17
0
 /// <summary>
 /// 返回的Task(Of T)的T类型描述
 /// </summary>
 /// <param name="dataType">数据类型</param>
 public DataTypeDescriptor(Type dataType)
 {
     this.Type                  = dataType;
     this.ITaskConstructor      = ApiTask.GetITaskConstructor(dataType);
     this.IsHttpResponseWrapper = dataType.IsInheritFrom <HttpResponseWrapper>();
 }
Пример #18
0
 public int CreateTaskByTemplate(ApiTask newTask)
 {
     throw new NotImplementedException();
 }
Пример #19
0
 public Task StoreApiTaskAsync(ApiTask apiTask)
 {
     apiTask.Id = Interlocked.Increment(ref id);
     return(Task.Run(() => _backgroundTaskQueue.Enqueue(apiTask)));
 }