ArchiveRequestTaskRouteHandlers.cs 2.99 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Workflow;
using DirRX.Container.ArchiveRequestTask;
using Newtonsoft.Json.Linq;

namespace DirRX.Container.Server
{
  partial class ArchiveRequestTaskRouteHandlers
  {

    public virtual void Script9Execute()
    {
      var subTask = Sungero.Workflow.SimpleTasks.CreateAsSubtask(_obj);
      subTask.AssignmentType = Sungero.Workflow.SimpleTask.AssignmentType.Notice;
      subTask.Subject = ArchiveRequestTasks.Resources.InfoResultNoticeSubjectFormat(_obj.Subject);
      subTask.ActiveText = Functions.ArchiveRequestTask.GetArchiveRequestNoticeText(_obj);
      subTask.Author = Functions.Module.GetServiceUser();
      subTask.NeedsReview = false;
      var step = subTask.RouteSteps.AddNew();
      step.AssignmentType = subTask.AssignmentType;
      if (_obj.Initiator != null)
        step.Performer = _obj.Initiator;
      else
        step.Performer = Users.GetAll(x => x.IsSystem == true && x.Name == "Administrator").FirstOrDefault();
      step.Deadline = null;
      subTask.Save();
      subTask.Start();
    }
    
    public virtual bool Monitoring4Result()
    {
      // Проверить статус выполнения запроса.
      if (_obj.RequestState != RequestState.InProcess || !_obj.RequestTaskId.HasValue || _obj.RequestTaskId.Value == 0)
        return true;
      
      // Получить данные из архива.
      _obj.RequestResults = Functions.Module.GetArchiveRequestResult(_obj.RequestTaskId.Value);
      _obj.Save();
      
      if (!string.IsNullOrWhiteSpace(_obj.RequestResults))
      {
        var json = JObject.Parse(_obj.RequestResults);
        var status = json.Value<string>("Status");
        
        // Изменить статус выполнения запроса.
        if (!string.IsNullOrEmpty(status) && status != "InProcess")
        {
          _obj.RequestState = new Sungero.Core.Enumeration(status);
          _obj.Save();
          return true;
        }
      }
      
      return false;
    }

    public virtual void Script3Execute()
    {
      // Подготовить данные для передачи в виде json-строки.
      _obj.RequestData = Functions.ArchiveRequestTask.CreateRequestData(_obj);
      _obj.RequestState = RequestState.InQueue;
      _obj.Save();
      
      // Отправить запрос в архив.
      Logger.DebugFormat("LTA. Request text = {0}", _obj.RequestData);
      var taskId = Functions.Module.SendArchiveRequest(_obj.RequestData);
      
      if (taskId > 0)
      {
        _obj.RequestTaskId = taskId;
        _obj.RequestState = RequestState.InProcess;
      }
      else
      {
        _obj.RequestTaskId = null;
        _obj.RequestState = RequestState.Error;
        _obj.RequestResults = Functions.ArchiveRequestTask.CreateRequestResultsWithError(_obj, ArchiveRequestTasks.Resources.ErrorSendingRequest.ToString());
      }
      _obj.Save();
    }

  }
}