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); }
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); }