Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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, "");
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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());
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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;
        }