public async Task <ImportStatistics> Import(string tmxPath) { var importer = new TranslationMemoryImporter(_tm.LanguageDirection); importer.BatchImported += importer_BatchImported; GetImportSettings(importer.ImportSettings); var t = new Task(() => importer.Import(tmxPath)); #pragma warning disable 4014 t.ContinueWith(task => #pragma warning restore 4014 { if (task.IsFaulted) { throw new Exception(ProcessorUtil.ExceptionToMsg(task.Exception)); } }, TaskScheduler.FromCurrentSynchronizationContext()); t.Start(); await t; Results = importer.Statistics; return(Results); }
public async Task BuildTranslationModel() { var lastProgressNumber = 0; NotifySubscribers(0, 0, StringResources.FragmentAlignment_ProgressPreparingMessage); _tm.TranslationModelProgress += (o, args) => { if (args.ProgressNumber > lastProgressNumber) { var text = string.Empty; if (args.ProgressLimit > 0) { text = string.Format( StringResources .FragmentAlignment_ProgressProcessedOfTranslationUnitsMessage , ProcessorUtil.GetProgresssStageText(args.ProgressStage), args.ProgressNumber, args.ProgressLimit); } NotifySubscribers(args.ProgressLimit, args.ProgressNumber, text); lastProgressNumber = args.ProgressNumber; } }; var t = new Task(() => _tm.BuildModel()); t.ContinueWith(task => { throw new Exception(ProcessorUtil.ExceptionToMsg(task.Exception)); }, TaskContinuationOptions.OnlyOnFaulted); t.ContinueWith(task => { if (task.IsFaulted) { throw new Exception(ProcessorUtil.ExceptionToMsg(task.Exception)); } if (!task.IsCompleted) { return; } ProcessorUtil.UpdateTranslationMemory(_tm); }, TaskScheduler.FromCurrentSynchronizationContext()); t.Start(); await t; }
public void Uplift(TranslationMemoryInfo tm, BackgroundWorker bw) { var originalTmFilePath = ProcessorUtil.RenameOriginalTm(tm.Name, tm.FilePath); var upliftTmFilePath = ProcessorUtil.GetOutputTmFullPath(tm.Name, tm.FilePath); _reindexStatus.AppendLine(string.Format("Start uplift {0} translation memory", tm.Name)); bw.ReportProgress(0, _reindexStatus.ToString()); File.Copy(originalTmFilePath, upliftTmFilePath, true); var tmOut = new FileBasedTranslationMemory(upliftTmFilePath); tmOut.FGASupport = FGASupport.Automatic; tmOut.Save(); var tmExporter = new TmExporter(tmOut); var tmIn = new FileBasedTranslationMemory(tm.FilePath); var tmImporter = new TmImporter(tmIn); var modelBuilder = new ModelBuilder(tmOut); var fragmentAligner = new FragmentAligner(tmOut); if (tmIn.FGASupport != FGASupport.NonAutomatic) { Process(modelBuilder, fragmentAligner, bw); } else { Process(tmExporter, tmImporter, modelBuilder, fragmentAligner, bw); } if (!bw.CancellationPending) { ProcessorUtil.UpdateTranslationMemory(tmOut); _reindexStatus.AppendLine(string.Format("Finish uplift {0} translation memory", tm.Name)); bw.ReportProgress(0, _reindexStatus.ToString()); } else { bw.ReportProgress(100, ""); } }
public async Task <string> Export() { TotalExported = 0; var exporter = new TranslationMemoryExporter(_tm.LanguageDirection); TotalUnits = exporter.TranslationMemoryLanguageDirection.GetTranslationUnitCount(); exporter.BatchExported += exporter_BatchExported; var exportName = string.Format( CultureInfo.CurrentCulture, "{0}_{1}_{2}.tmx", _tm.Name, _tm.LanguageDirection.SourceLanguage, _tm.LanguageDirection.TargetLanguage); var exportFullPath = Path.Combine(Path.GetDirectoryName(_tm.FilePath), exportName); if (File.Exists(exportFullPath)) { File.Delete(exportFullPath); } var t = new Task(() => exporter.Export(exportFullPath, true)); t.ContinueWith(task => { if (task.IsFaulted) { throw new Exception(ProcessorUtil.ExceptionToMsg(task.Exception)); } }, TaskScheduler.FromCurrentSynchronizationContext()); t.Start(); await t; return(exportFullPath); }
public static void Register() { var builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); builder.RegisterFilterProvider(); foreach (var con in ConfigUtil.GetConnStrings()) { builder.Register(c => new SqlConnection(con.Value)) .Named <IDbConnection>(con.Key) .InstancePerRequest(); } builder.RegisterType <UnitOfWork>().As <IUnitOfWork>().InstancePerRequest(); builder.Register <Func <string, IDbConnection> >(c => { var ic = c.Resolve <IComponentContext>(); return(named => ic.ResolveNamed <IDbConnection>(named)); }); builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>)).InstancePerRequest(); RedisProxy.Initialize(); var redis = new RedisProxy(); var memcache = new MemcacheProxy(); builder.Register(c => redis).As <ICache>().SingleInstance(); builder.Register(c => redis).As <IRedisProxy>().SingleInstance(); builder.Register(c => memcache).As <IMemcacheProxy>().SingleInstance(); builder.RegisterType <MongoProxy>().As <IMongoProxy>().SingleInstance(); builder.RegisterType <Logger>().As <ILog>().SingleInstance(); builder.RegisterType <ServiceBus>().As <IServiceBus>().SingleInstance(); builder.RegisterType <ExcelClient>().As <IExcelClient>().InstancePerRequest(); var assemblies = BuildManager.GetReferencedAssemblies() .Cast <Assembly>() .Where(a => a.GetTypes().FirstOrDefault(t => t.GetInterfaces().Contains(typeof(IService))) != null) .ToArray(); builder.RegisterAssemblyTypes(assemblies)//查找程序集中以Svc结尾的类型 .Where(t => t.GetInterfaces().Contains(typeof(IService)) && t.Name.EndsWith("Svc")) .AsImplementedInterfaces().InstancePerRequest(); builder.RegisterAssemblyTypes(assemblies) .Where(t => t.GetInterfaces().Contains(typeof(IService))) .AsSelf() .InstancePerLifetimeScope(); #region API Processor Register builder.RegisterType <ProcessorFactory>().As <IProcessorFactory>().InstancePerRequest(); foreach (var type in ProcessorUtil.GetProcessors()) { builder.RegisterType(type) .Named <IProcessor>(ProcessorUtil.GetBizCode(type)) .InstancePerRequest(); } builder.Register <Func <string, IProcessor> >(c => { var ic = c.Resolve <IComponentContext>(); return(name => ic.ResolveNamed <IProcessor>(name)); }); #endregion var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
public ActionResult Index(string orderId) { var response = new BaseResponse(); BaseRequest baseRequest = new BaseRequest(); ServiceResult result = new ServiceResult(); var bizCode = string.Empty; string errMsg = ""; PayOrder order = null; PayChannel payChannel = null; if (orderId.IsNullOrWhiteSpace()) { return(Json(result.IsFailed("参数错误,orderid"))); } //订单校验 if (!OrderVerify(orderId, out order, out payChannel, out errMsg)) { return(Json(result.IsFailed(errMsg))); } baseRequest.Order = order; baseRequest.PayChannel = payChannel; bizCode = payChannel.ChannelCode; if (bizCode.IsNullOrWhiteSpace()) { return(Json(result.IsFailed("无效交易类型,ChannelCode为空"))); } if (!ProcessorUtil.BizCodeValid(bizCode)) { return(Json(result.IsFailed("支付标识和DescriptionAttribute不一致"))); } var processor = this.factory.Create(bizCode); //构建请求参数 var payParams = processor.CreatePayRequest(baseRequest); //如果是浏览器表单提交 if (processor.IsPostForm) { ViewData["url"] = processor.PayUrl; ViewData["method"] = processor.RequestMethod; return(View(payParams)); } //异步请求 PayResponse payResponse = processor.Process(payParams); if (!payResponse.Success) { return(Json(result.IsFailed(payResponse.Message))); } switch (processor.PayModel) { case PayModelEnum.无: break; case PayModelEnum.URL跳转: return(Redirect(payResponse.Data)); case PayModelEnum.扫码: break; case PayModelEnum.二维码生成: return(QRCode(payResponse.Data)); case PayModelEnum.HTML输出: return(Content(payResponse.Data, "text/html")); default: break; } return(View()); }
public BaseResponse Index([FromUri] RequestData model) { var watcher = new Stopwatch(); watcher.Start(); var response = new BaseResponse(); BaseResponse exResponse = null; var requestId = string.Empty; var requestDataJson = string.Empty; var userDataJson = string.Empty; var logMsg = new ApiLogMessage(); var bizCode = string.Empty; var urlEncodedUserData = string.Empty; var urlEncodedRequestData = string.Empty; var parmUserData = string.Empty; var parmRequestData = string.Empty; BaseRequest baseRequest = null; Merchant merchant = null; try { if (model.IsNull() || model.Cmd.IsNullOrWhiteSpace()) { return(BaseResponse.Create(ApiEnum.ResponseCode.处理失败, "无效请求", null, 0)); } bizCode = ProcessorUtil.GetBizCode(model.Cmd); if (bizCode.IsNullOrWhiteSpace()) { return(BaseResponse.Create(ApiEnum.ResponseCode.无效交易类型, "无效交易类型", null, 0)); } baseRequest = ProcessorUtil.GetRequest(bizCode, model.ToJson()); if (baseRequest == null) { return(BaseResponse.Create(ApiEnum.ResponseCode.处理失败, "无效请求", null, 0)); } //验证参数 var errMsg = ""; if (!ModelVerify(baseRequest, out errMsg)) { response = BaseResponse.Create(ApiEnum.ResponseCode.参数不正确, errMsg, null, 0); return(response); } //商户校验 if (!MerchantVerify(baseRequest, out merchant, out errMsg)) { response = BaseResponse.Create(ApiEnum.ResponseCode.处理失败, errMsg, null, 0); return(response); } //验证签名 if (!VerifySign(baseRequest, merchant)) { response = BaseResponse.Create(ApiEnum.ResponseCode.无效调用凭证, "签名不正确", null, 0); return(response); } var processor = this.factory.Create(bizCode); response = processor.Process(baseRequest); } catch (Exception ex) { log.Error(ex); response = BaseResponse.Create(ApiEnum.ResponseCode.系统内部错误, "不好意思,程序开小差,正在重启" + ex.ToString(), 0); exResponse = BaseResponse.Create(ApiEnum.ResponseCode.系统内部错误, ex.ToString(), 0); logMsg.IsError = true; } finally { //WriteRequestInfo(userData, requestData, requestId, bizCode); watcher.Stop(); var duration = watcher.Elapsed.TotalMilliseconds; var logStr = string.Empty; logStr += string.Format("【请求报文】RequestId:{0}", requestId) + Environment.NewLine; logStr += string.Format("UserData:{0}", urlEncodedUserData) + Environment.NewLine; logStr += string.Format("RequestData:{0}", urlEncodedRequestData) + Environment.NewLine; logStr += string.Format("【响应报文】{0}", response.ToJson()); logStr += string.Format("【耗时】{0}毫秒", duration); log.Info(logStr.ToString()); logMsg.UserDataStr = urlEncodedUserData; logMsg.RequestDataStr = urlEncodedRequestData; logMsg.RequestId = requestId; logMsg.LogTime = DateTime.Now; logMsg.RequestJson = requestDataJson; logMsg.Response = exResponse.IsNull() ? response.ToJson() : exResponse.ToJson(); logMsg.Duration = duration; if (AppConfig.LogType == LogType.MQ) { try { this.bus.Publish(logMsg); } catch (Exception ex) { log.Error("写入MQ失败,RequestId:{0}\r\n{1}".Fmt("", ex.ToString())); } } } return(response); }
public async Task AlignTranslationUnits() { var iter = new RegularIterator(); var translationUnitCount = _tm.GetTranslationUnitCount(); var totalUnitsToProcess = _quickAlign ? _tm.UnalignedTranslationUnitCount : translationUnitCount; var lastProgressNumber = 0; NotifySubscribers(0, 0, StringResources.FragmentAlignment_ProgressPreparingMessage); var t = new Task(() => { while (_tm.AlignTranslationUnits(false, _quickAlign, ref iter)) { if (iter.ProcessedTranslationUnits <= lastProgressNumber) { continue; } var text = string.Empty; if (totalUnitsToProcess > 0) { text = string.Format( StringResources .FragmentAlignment_ProgressAlignedOfTranslationUnitsMessage , iter.ProcessedTranslationUnits, totalUnitsToProcess); } NotifySubscribers(totalUnitsToProcess, iter.ProcessedTranslationUnits, text); lastProgressNumber = iter.ProcessedTranslationUnits; } }); t.ContinueWith(task => { throw new Exception(ProcessorUtil.ExceptionToMsg(task.Exception)); }, TaskContinuationOptions.OnlyOnFaulted); t.ContinueWith(task => { if (task.IsFaulted) { throw new Exception(ProcessorUtil.ExceptionToMsg(task.Exception)); } if (!task.IsCompleted) { return; } ProcessorUtil.UpdateTranslationMemory(_tm); NotifySubscribers(translationUnitCount, translationUnitCount, "Complete"); }, TaskScheduler.FromCurrentSynchronizationContext()); t.Start(); await t; }