Esempio n. 1
0
        public async Task <ValueTuple <string, string> > ExportAsync(IServiceProvider serviceProvider, Guid id, Guid templateId, TemplateType type)
        {
            var fileTemplate = await GetAsync(templateId);

            if (fileTemplate == null)
            {
                throw new BussinessException("无法找到指定的文档模板");
            }

            object data = null;

            switch (type)
            {
            case TemplateType.PurchaseOrder:
                var purchaseOrderContract = serviceProvider.GetService <IPurchaseOrderContract>();
                data = await purchaseOrderContract.GetAsync(id);

                break;

            case TemplateType.InboundReceipt:
                var inboundReceiptContract = serviceProvider.GetService <IInboundReceiptContract>();
                data = await inboundReceiptContract.GetAsync(id);

                break;

            case TemplateType.OutboundReceipt:
                var outboundReceiptContract = serviceProvider.GetService <IOutboundReceiptContract>();
                data = await outboundReceiptContract.GetAsync(id);

                break;

            case TemplateType.TransferOrder:
                var transferOrderContract = serviceProvider.GetService <ITransferOrderContract>();
                data = await transferOrderContract.GetAsync(id);

                break;

            case TemplateType.SaleOrder:
                var saleOrderContract = serviceProvider.GetService <ISaleOrderContract>();
                data = await saleOrderContract.GetAsync(id);

                break;

            default:
                throw new BussinessException("模板类型不正确");
            }

            if (data == null)
            {
                throw new BussinessException("找不到指定表单数据");
            }

            var fullPath = Path.Combine(_templatesPath, fileTemplate.Path);
            var word     = new ExportWord(fullPath);

            word.OnExport = () =>
            {
                SetBookMark(word, data, "");
            };

            var tempDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "temp");
            var directory     = new DirectoryInfo(tempDirectory);

            if (!directory.Exists)
            {
                directory.Create();
            }
            try
            {
                foreach (var file in directory.GetFiles())
                {
                    file.Delete();
                }
            }
            catch
            {
            }

            var fileName   = Guid.NewGuid().ToString();
            var tragetPath = Path.Combine(tempDirectory, fileName + ".docx");

            word.Export(tragetPath);
            return(type.GetDisplayName(), fileName);
        }