コード例 #1
0
        public async Task <TransactionCoordinator> CreateAsync(CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            cancellationToken.Register(() => _tcs.TrySetCanceled());

            var attach = new Attach
            {
                Target = new Coordinator
                {
                    Capabilities = new[] { TxnCapabilities.LocalTransactions }
                },
                Source        = new Source(),
                SndSettleMode = SenderSettleMode.Unsettled,
                RcvSettleMode = ReceiverSettleMode.First
            };
            var senderLink = new SenderLink(_session, GetName(), attach, OnAttached);

            senderLink.AddClosedCallback(OnClosed);
            await _tcs.Task.ConfigureAwait(false);

            var transactionCoordinator = new TransactionCoordinator(senderLink);

            senderLink.Closed -= OnClosed;
            return(transactionCoordinator);
        }
コード例 #2
0
        public void AddVerification(VerificationDTO verificationDTO)
        {
            using (ITransactionCoordinator coordinator = new TransactionCoordinator(_dbUnitOfWork, _eventBus))
            {
                var verifications = _verificationRepository.GetFiltered(o => o.IsSuspend == false && o.To == verificationDTO.To && o.BizCode == verificationDTO.BizCode).ToList();
                _verificationService.SetVerificationsSuspend(verifications);

                var verification = VerificationFactory.CreateVerification(verificationDTO.BizCode, verificationDTO.To);
                verification.CreatedConfirm();
                _verificationRepository.Add(verification);

                coordinator.Commit();
            }
        }
コード例 #3
0
 public void ShelveGoods(string id, string operatorId)
 {
     using (ITransactionCoordinator coordinator = new TransactionCoordinator(_dbUnitOfWork, _eventBus))
     {
         var goods = _goodsRepository.Get(id);
         if (goods != null)
         {
             goods.GoodsImages       = _goodsImageRepository.GetFiltered(o => o.GoodsId == goods.Id).ToList();
             goods.GrouponConditions = _grouponConditionRepository.GetFiltered(o => o.GoodsId == goods.Id).ToList();
             goods.ResolveAddress();
             goods.SetShelved();
             _goodsRepository.Update(goods);
             goods.ShelvedConfirm();
             coordinator.Commit();
         }
     }
 }
コード例 #4
0
        public void OrderShipped(string orderId, string operatorId)
        {
            using (ITransactionCoordinator coordinator = new TransactionCoordinator(_dbUnitOfWork, _eventBus))
            {
                var order = _orderRepository.Get(orderId);

                if (order == null)
                {
                    throw new Exception("找不到指定的订单.");
                }

                order.SetShipped();
                order.ConfirmShipped();

                coordinator.Commit();
            }
        }
コード例 #5
0
        public OrderDTO SubmitOrder(OrderDTO model, string operatorId)
        {
            using (ITransactionCoordinator coordinator = new TransactionCoordinator(_dbUnitOfWork, _eventBus))
            {
                var orderItems = model.OrderItems?.Select(item => new OrderItem {
                    Count = item.Count, ObjectId = item.ObjectId, ObjectNo = item.ObjectNo, OrderId = item.OrderId, PreviewPictureUrl = item.PreviewPictureUrl, SelectedProperties = item.SelectedProperties, Title = item.Title, TradeUnitPrice = item.TradeUnitPrice
                })?.ToList();

                var obj = OrderFactory.CreateOrder(
                    model.TotalAmount,
                    model.ShippingCost,
                    model.PreferentialAmount,
                    model.Tax, model.PayAmount,
                    model.CustomerName,
                    model.CustomerMobile,
                    model.InvoiceType,
                    model.CustomerAddress,
                    orderItems,
                    operatorId,
                    model.Mark,
                    model.OrganizationId,
                    model.InvoiceRemark,
                    model.Remark,
                    model.ActivityId,
                    model.Title);

                _orderRepository.Add(obj);

                orderItems.ForEach(oi =>
                {
                    oi.OrderId = obj.Id;
                    _orderItemRepository.Add(oi);
                });

                obj.ConfirmSubmited();

                coordinator.Commit();

                model.Id = obj.Id;

                return(model);
            }
        }
コード例 #6
0
        public Settings2(string databaseName, Connection connection, ILogger logger = null)
        {
            Logger = logger ?? new NullLogger();

            //global
            IdAccessor       = new IdAccessor();
            IdManager        = new ShortGuidIdManager();
            RevisionAccessor = new RevisionAccessor();
            TypeManager      = new TypeManager();

            Serializer = new Serializer(IdAccessor, RevisionAccessor);

            //query serializer
            var settings = new JsonSerializerSettings()
            {
                TypeNameHandling  = TypeNameHandling.None,
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver  =
                    new CamelCasePropertyNamesContractResolver()
                {
                    NamingStrategy = new LocalCamelCaseNamingStrategy(true)
                }
            };

            settings.Converters.Add(new OrderEnumConverter());
            QuerySerializer = new Serializer(settings);

            CouchDb                = new CouchDb(databaseName, connection, Serializer, QuerySerializer, Logger);
            QueryFactory           = new QueryFactory(TypeManager, IdAccessor);
            TransactionCoordinator = new TransactionCoordinator(CouchDb, IdAccessor, RevisionAccessor);

            LoadPipeline   = new LoadPipeline(CouchDb, IdManager, IdAccessor, RevisionAccessor);
            CommitPipeline = new CommitPipeline(CouchDb, IdManager, RevisionAccessor, TransactionCoordinator);
            QueryPipeline  = new QueryPipeline(CouchDb, IdManager, IdAccessor, RevisionAccessor);

            Hash = new ToLowerPassThroughHash();
        }
コード例 #7
0
        public void AddVerification(VerificationDTO verificationDTO)
        {
            using (ITransactionCoordinator coordinator = new TransactionCoordinator(_dbUnitOfWork, _eventBus))
            {
                var verifications = _verificationRepository.GetFiltered(o => o.IsSuspend == false && o.To == verificationDTO.To && o.BizCode == verificationDTO.BizCode).ToList();

                var lastRecord = verifications.OrderByDescending(o => o.CreatedOn).FirstOrDefault();
                if (lastRecord != null)
                {
                    if (lastRecord.CreatedOn.AddSeconds(60) > DateTime.Now)
                    {
                        return;
                    }
                }

                _verificationService.SetVerificationsSuspend(verifications);

                var verification = VerificationFactory.CreateVerification(verificationDTO.BizCode, verificationDTO.To);
                verification.CreatedConfirm();
                _verificationRepository.Add(verification);

                coordinator.Commit();
            }
        }