예제 #1
0
        public async Task IndoorPriceCommandHandler_When_Success()
        {
            IndoorPriceAndSaveCommand request = new IndoorPriceAndSaveCommand
            {
                GlobalKey   = Guid.NewGuid().ToString(),
                IndoorPrice = new IndoorPriceInput
                {
                    BatchId   = BatchInfoDatas.TestQuotePriceBatchInfo.Id,
                    CarNumber = BatchCarDatas.TestQuotePriceBatchCarDatas.CarNumber,
                    UserId    = UserSysSettingDatas.SuperWebSiteLowerAgentSysSetting.Id
                }
            };

            var mockResult = new ApiResult <List <PriceResultOutput> >
            {
                Code = 1,
                Data = new List <PriceResultOutput>
                {
                    new PriceResultOutput
                    {
                        UserId        = UserSysSettingDatas.SuperWebSiteLowerAgentSysSetting.Id,
                        ViolationType = 1,
                        CanProcess    = 1,
                        fcQuery       = new List <FcQuery>
                        {
                            new FcQuery
                            {
                                ID            = Guid.NewGuid().ToString(),
                                FC            = 1.0m,
                                FCTYPE        = "下级分成",
                                WebSiteId     = UserSysSettingDatas.SuperWebSiteLowerAgentSysSetting.WebSiteId,
                                ProfitType    = 1,
                                ViolationType = 1
                            }
                        }
                    }
                }
            };

            var mockPriceAppService = new Mock <IPriceAppService>();

            mockPriceAppService.Setup(i => i.IndoorPriceBatch(request.IndoorPrice))
            .Returns(Task.FromResult(mockResult));


            var service = new IndoorPriceCommandHandler(
                mockPriceAppService.Object,
                _testBase.Ioc.Resolve <ICacheManager>(),
                _testBase.Ioc.Resolve <ILogger>(),
                _testBase.Ioc.Resolve <IBatchAskPriceViolationAgentRepository>(),
                _testBase.Ioc.Resolve <IBatchCarRepository>(),
                _testBase.Ioc.Resolve <ICarViolationDivisionRepository>(),
                _testBase.Ioc.Resolve <IUserSysSettingRepository>());

            var testResult = await service.Handle(request, default(CancellationToken));

            Assert.Equal(mockResult.Data, testResult);
        }
예제 #2
0
        public virtual async Task <List <PriceResultOutput> > Handle(IndoorPriceAndSaveCommand request, CancellationToken cancellationToken)
        {
            // 获取报价结果
            var result = await _priceAppService.IndoorPriceBatch(request.IndoorPrice);

            if (result.IsSuccess)
            {
                // 获取用户分成配置
                var rateInfo = _settingRepository.GetAll().Where(i => i.Id == request.IndoorPrice.UserId).Select(i => new
                {
                    i.Rate,
                    i.RateType
                }).FirstOrDefault();
                if (rateInfo != null)
                {
                    // 处理返回报价信息,写分成
                    await UpdateAskPriceViolationInfo(request.IndoorPrice.CarNumber, request.IndoorPrice.BatchId, rateInfo.Rate, rateInfo.RateType, result.Data);

                    // 更新报价缓存的状态
                    if (!request.GlobalKey.IsNullOrWhiteSpace())
                    {
                        try
                        {
                            //等待3分钟
                            _mut.WaitOne(TimeSpan.FromMinutes(3));
                            var globalKey   = request.GlobalKey;
                            var cacheObject = await _cacheManager.GetCache(globalKey).GetOrDefaultAsync(globalKey);

                            if (cacheObject != null)
                            {
                                QuotePriceStation station = (QuotePriceStation)cacheObject;
                                station.CompleteCount = station.CompleteCount + 1;
                                await _cacheManager.GetCache(globalKey).SetAsync(globalKey, station);
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.ErrorFormat("Action:IndoorPriceAndSaveCommand-UpdateCacheObject,Request:{0},Exception{1}", request, ex);
                        }
                        finally
                        {
                            _mut.ReleaseMutex();
                        }
                    }
                }
                return(result.Data);
            }
            return(null);
        }