public void EnqueueTest() { UnityConfig.RegisterComponents(container => { var svc = container.Resolve <QueueService>(); var factory = container.Resolve <ISessionFactory>(); container.RegisterType <IWmsEnvironmentInfoProvider, SvcWmsEnvironmentInfoProvider>(new ContainerControlledLifetimeManager()); container.RegisterType <ILocalData, ThreadStaticLocalData>(new ContainerControlledLifetimeManager()); WmsEnvironment.Init(container.Resolve <IWmsEnvironmentInfoProvider>(), container.Resolve <ILocalData>()); var request = new EnqueueListRequest(); request.PartnerCode = "TST"; request.MessageList = new[] { new QueueMessage { Data = "test data", QueueMessageTypeCode = "TST" } }; var response = svc.EnqueueListIn(request); response.MessageList.Should().HaveCount(1); response.MessageList[0].ID.Should().HaveValue(); response.MessageList[0].QueueMessageTypeCode.ShouldBeEquivalentTo(request.MessageList[0].QueueMessageTypeCode); response.MessageList[0].Data.ShouldBeEquivalentTo(request.MessageList[0].Data); using (var session = factory.OpenSession()) using (var transaction = session.BeginTransaction()) { foreach (var message in response.MessageList) { var item = session.Get <IoQueueIn>(message.ID); //TODO: проверка, что записалось правильно // удалеям лишнее session.Delete(item); } transaction.Commit(); } }); }
public EnqueueListResponse EnqueueListIn(EnqueueListRequest request) { Contract.Requires(request != null); try { if (request == null) { throw new InvalidOperationException("EnqueueListRequest is empty"); } if (string.IsNullOrEmpty(request.PartnerCode)) { throw new InvalidOperationException("EnqueueListRequest.PartnerCode is empty"); } if (request.MessageList == null || request.MessageList.Length == 0) { throw new InvalidOperationException("EnqueueListRequest.MessageList is empty"); } using (var session = _sessionFactory.OpenSession()) { // получим все типы сообщений var messageTypes = session.Query <IoQueueMessageType>().ToList(); // получаем партнера по коду var partner = session.Query <WmsMandant>().FirstOrDefault(p => p.PartnerCode == request.PartnerCode); if (partner == null) { throw new InvalidOperationException(string.Format("Unknown partner code '{0}'.", request.PartnerCode)); } Log.DebugFormat("EnqueueListIn for Partner='{0}' with MessagesCount={1}", request.PartnerCode, request.MessageList.Length); var queueInList = request.MessageList.Select(m => new IoQueueIn() { GroupCode = m.GroupCode, Message = m.Message, Mandant = partner, ProcessCode = m.ProcessCode, QueueMessageState = QueueMessageStates.Ready, QueueMessageType = ValidateMessageType(messageTypes, m.QueueMessageTypeCode), QueueOut = m.RelatedQueue != null ? session.Query <IoQueueOut>().FirstOrDefault(o => o.ID == m.RelatedQueue) : null, Data = Encoding.UTF8.GetBytes(m.Data) }).ToList(); using (var transaction = session.BeginTransaction()) { foreach (var q in queueInList) { session.Save(q); } transaction.Commit(); } var messageList = queueInList.Select(q => new QueueMessage { GroupCode = q.GroupCode, ID = q.ID, Message = q.Message, ProcessCode = q.ProcessCode, QueueMessageStateCode = q.QueueMessageState.ToString().ToUpper(), QueueMessageTypeCode = q.QueueMessageType.Code, RelatedQueue = q.QueueOut == null ? (Guid?)null : q.QueueOut.ID, Data = q.Data != null ? Encoding.UTF8.GetString(q.Data) : null }).ToList(); return(new EnqueueListResponse { MessageList = messageList.ToArray(), PartnerCode = partner.PartnerCode }); } } catch (Exception ex) { Log.Error("EnqueueListIn error:", ex); Log.Debug(request.DumpToXML()); throw; } }