ModuleInitializer.cs 5.97 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Domain.Initialization;

namespace DirRX.DciCore.Server
{
  public partial class ModuleInitializer
  {

    public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
    {
      CreateDatabookRecords();
    }
    
    /// <summary>
    /// Создание записей справочника.
    /// </summary>
    public static void CreateDatabookRecords()
    {
      var processKind = DciProcessKinds.Null;
      
      #region Процесс DCICheckLink.
      
      processKind = CreateProcessKind(Constants.DciProcessKind.DCICheckLinkProcess.RecordGUID,
                                      Constants.DciProcessKind.DCICheckLinkProcess.Name,
                                      Constants.DciProcessKind.DCICheckLinkProcess.Note,
                                      Constants.DciProcessKind.DCICheckLinkProcess.Description,
                                      DciCore.DciProcessKind.ProcessType.Process,
                                      Guid.Empty,
                                      Calendar.SqlMinValue);
      AddProcessMessage(processKind,
                        Constants.DciProcessKind.DCICheckLinkProcess.PingMessage.RowGUID,
                        Constants.DciProcessKind.DCICheckLinkProcess.PingMessage.Name,
                        Constants.DciProcessKind.DCICheckLinkProcess.PingMessage.Note);
      AddProcessMessage(processKind,
                        Constants.DciProcessKind.DCICheckLinkProcess.PongMessage.RowGUID,
                        Constants.DciProcessKind.DCICheckLinkProcess.PongMessage.Name,
                        Constants.DciProcessKind.DCICheckLinkProcess.PongMessage.Note);
      
      #endregion
    }
    
    /// <summary>
    /// Создание записи в справочнике Виды межсистемных процессов.
    /// </summary>
    /// <param name="guid">Случайный GUID, ключевое поле записи - позволяет не привязываться к имени процесса и менять его.</param>
    /// <param name="processName">Имя процесса.</param>
    /// <param name="note">Примечания (заполняется один раз - при создании записи).</param>
    /// <param name="description">Описание межсистемного процесса.</param>
    /// <param name="processType">Тип процесса - синхронизация или сквозной бизнес-процесс.</param>
    /// <param name="entityTypeGuid">GUID типа сущности.</param>
    /// <param name="startSyncDate">Дата и время, от которой выполняется поиск измененных сущностей.</param>
    /// <returns>Запись справочника Виды межсистемных процессов.</returns>
    [Public]
    public static IDciProcessKind CreateProcessKind(Guid guid, string processName, string note, string description, Enumeration processType, Guid entityTypeGuid, DateTime startSyncDate)
    {
      var record = DciProcessKinds.GetAll(x => x.GUID == guid.ToString()).FirstOrDefault();
      if (record == null)
      {
        InitializationLogger.Debug(string.Format("Виды межсистемных процессов. Создание записи для процесса {0}.", processName));
        record = DciProcessKinds.Create();
        record.GUID = guid.ToString();
        record.Note = note;
      }

      if (processName != record.Name)
        record.Name = processName;
      if (description != record.Description)
        record.Description = description;
      if (processType != record.ProcessType)
        record.ProcessType = processType;
      if (entityTypeGuid.ToString() != record.EntityTypeGUID)
        record.EntityTypeGUID = entityTypeGuid.ToString();
      if (startSyncDate != record.LastOutSyncDate)
        record.LastOutSyncDate = startSyncDate;
      
      if (record.State.IsChanged)
      {
        InitializationLogger.Debug(string.Format("Виды межсистемных процессов. Сохранение записи для процесса {0}.", processName));
        record.Save();
      }
      
      return record;
    }
    
    /// <summary>
    /// Заполнение таблицы Сообщения в записи в справочника Виды межсистемных процессов.
    /// </summary>
    /// <param name="processKind">Запись справочника Виды межсистемных процессов.</param>
    /// <param name="rowGUID">Случайный GUID, ключевое поле в таблице - позволяет не привязываться к имени сообщения и менять его.</param>
    /// <param name="messageName">Имя сообщения.</param>
    /// <param name="messageNote">Примечание.</param>
    [Public]
    public static void AddProcessMessage(IDciProcessKind processKind, Guid rowGUID, string messageName, string messageNote)
    {
      var row = processKind.Messages.Where(x => x.RowGUID == rowGUID.ToString()).FirstOrDefault();
      if (row == null)
      {
        InitializationLogger.Debug(string.Format("Виды межсистемных процессов. Добавление сообщения {0} для процесса {1}.", messageName, processKind.Name));
        row = processKind.Messages.AddNew();
        row.RowGUID = rowGUID.ToString();
      }
      
      if (messageName != row.Name)
        row.Name = messageName;
      if (messageNote != row.Note)
        row.Note = messageNote;
      
      if (processKind.State.IsChanged)
      {
        InitializationLogger.Debug(string.Format("Виды межсистемных процессов. Сохранение сообщения {0} для процесса {1}.", messageName, processKind.Name));
        processKind.Save();
      }
    }
  }
}