155 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
| using IRaCIS.Core.Application.Helper;
 | ||
| using IRaCIS.Core.Domain;
 | ||
| using IRaCIS.Core.Domain.Share;
 | ||
| using MassTransit;
 | ||
| using MassTransit.Mediator;
 | ||
| using MassTransit.Scheduling;
 | ||
| using Medallion.Threading;
 | ||
| using Microsoft.AspNetCore.Mvc;
 | ||
| using Microsoft.AspNetCore.StaticFiles;
 | ||
| using Microsoft.Extensions.Options;
 | ||
| using RestSharp;
 | ||
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.Globalization;
 | ||
| using System.IO;
 | ||
| using System.Linq;
 | ||
| using System.Text;
 | ||
| using System.Threading.Tasks;
 | ||
| 
 | ||
| namespace IRaCIS.Core.Application.MassTransit.Consumer;
 | ||
| 
 | ||
| 
 | ||
| public class MasstransiTestCommand
 | ||
| {
 | ||
|     public string value { get; set; }
 | ||
| }
 | ||
| 
 | ||
| /// <summary>
 | ||
| /// meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
 | ||
| ///          publish  请求流不会先到消费者,发布后,直接执行后续代码
 | ||
| ///          
 | ||
| /// </summary>
 | ||
| /// <param name="_userRoleRepository"></param>
 | ||
| public class MasstransitTestConsumer(IRepository<UserRole> _userRoleRepository) : IConsumer<MasstransiTestCommand>
 | ||
| {
 | ||
|     public async Task Consume(ConsumeContext<MasstransiTestCommand> context)
 | ||
|     {
 | ||
| 
 | ||
|         Console.WriteLine(_userRoleRepository._dbContext.GetHashCode());
 | ||
|         Console.WriteLine("Now is " + DateTime.Now.ToString());
 | ||
|         Console.WriteLine($"MassTransit.Consumer :{context.Message.value}");
 | ||
| 
 | ||
|         await context.RespondAsync<IResponseOutput>(ResponseOutput.Ok());
 | ||
| 
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| [ApiExplorerSettings(GroupName = "Institution")]
 | ||
| public class TestMasstransitService : BaseService
 | ||
| {
 | ||
| 
 | ||
| 
 | ||
|     public async Task<IResponseOutput> TestMasstransitRequest([FromServices] IMessageScheduler _scheduler,
 | ||
|         [FromServices] IRecurringMessageScheduler _recurringMessageScheduler,
 | ||
|         [FromServices] IRepository<TestLength> _testLengthRepository,
 | ||
|         [FromServices] IRequestClient<MasstransiTestCommand> _requestClient,
 | ||
|         [FromServices] IScopedClientFactory _clientFactory,
 | ||
|         [FromServices] IScopedMediator _mediatorScoped,
 | ||
|         [FromServices] IMediator _mediator)
 | ||
|     {
 | ||
|         var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
 | ||
| 
 | ||
| 
 | ||
|         Console.WriteLine(_testLengthRepository._dbContext.GetHashCode());
 | ||
| 
 | ||
|         //IScopedMediator  上下文一致,  IMediator上下文不一致
 | ||
| 
 | ||
|         //通过命令不获取结果  进入消费者后再返回  数据库上下文   不同
 | ||
|         //await _mediator.Send(new MasstransiTestCommand { value = "message at " + DateTime.Now.ToString() });
 | ||
| 
 | ||
|         ////通过命令获取结果   进入消费者后再返回  数据库上下文  相同
 | ||
|         //var dd = await _mediatorScoped.CreateRequest(new MasstransiTestCommand() { value = "message at " + DateTime.Now.ToString() })
 | ||
|         //    .GetResponse<IResponseOutput>();
 | ||
| 
 | ||
|         ////发布后,不会立即进入消费者,消费者是另外的线程执行
 | ||
|         //await _mediatorScoped.Publish(new MasstransiTestCommand { value = "message at " + DateTime.Now.ToString() });
 | ||
| 
 | ||
|         await _recurringMessageScheduler.ScheduleRecurringPublish(new QCImageQuestionRecurringSchedule() { CronExpression = "0/3 * * * * ? " }, new MasstransiTestCommand { value = "message at " + DateTime.Now.ToString() });
 | ||
|         //await _scheduler.SchedulePublish(DateTime.Now.AddSeconds(10), new MasstransiTestCommand() { value = "message at " + DateTime.Now.ToString() });
 | ||
| 
 | ||
|         return ResponseOutput.Ok();
 | ||
|     }
 | ||
| 
 | ||
|     public async Task<IResponseOutput> TestWordToPdf()
 | ||
|     {
 | ||
| 
 | ||
|         var dd = await FileConvertHelper.ThirdStirling_PDFWordToPdfAsync(@"C:\Users\hang\Desktop\test.docx");
 | ||
| 
 | ||
|         string outputFilePath = @"C:\Users\hang\Desktop\test-byte4-output.pdf"; // 保存路径
 | ||
|         File.WriteAllBytes(outputFilePath, dd); // 将响应字节数组写入文件
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         //var envName = Environment.GetEnvironmentVariables()["ASPNETCORE_ENVIRONMENT"]?.ToString();
 | ||
| 
 | ||
|         //// API 地址
 | ||
|         //string apiUrl = "http://106.14.89.110:30088/api/v1/convert/file/pdf";
 | ||
| 
 | ||
|         //// 模拟文件路径,假设你有一个内存流的文件,不指定实际文件
 | ||
|         //string filePath = @"C:\Users\hang\Desktop\test.docx"; // 本地文件路径或者你可以直接使用流
 | ||
| 
 | ||
|         //var fileBytes = File.ReadAllBytes(@"C:\Users\hang\Desktop\test.docx");
 | ||
| 
 | ||
| 
 | ||
|         //try
 | ||
|         //{
 | ||
|         //    // 创建 RestClient
 | ||
|         //    var client = new RestClient(apiUrl);
 | ||
| 
 | ||
|         //    // 创建 RestRequest,使用 POST 方法
 | ||
|         //    var request = new RestRequest(apiUrl, Method.Post);
 | ||
|         //    request.AddHeader("accept", "*/*");
 | ||
| 
 | ||
|         //    //new FileExtensionContentTypeProvider().Mappings.TryGetValue(Path.GetExtension(filePath), out var contentType);
 | ||
| 
 | ||
|         //    // 直接上传文件,无需生成字节数组
 | ||
|         //    //request.AddFile("fileInput", filePath, contentType);
 | ||
| 
 | ||
|         //    // 添加文件流到请求
 | ||
|         //    request.AddFile("fileInput", fileBytes, "test-byte.docx");
 | ||
| 
 | ||
|         //    // 发送请求并获取响应
 | ||
|         //    var response = await client.ExecuteAsync(request);
 | ||
| 
 | ||
|         //    // 检查请求是否成功
 | ||
|         //    if (response.IsSuccessful)
 | ||
|         //    {
 | ||
|         //        // 保存接收到的文件到本地
 | ||
|         //        string outputFilePath = @"C:\Users\hang\Desktop\test-byte3-output.pdf"; // 保存路径
 | ||
|         //        File.WriteAllBytes(outputFilePath, response.RawBytes); // 将响应字节数组写入文件
 | ||
| 
 | ||
|         //        //如果要文件流,就这样
 | ||
|         //        //var stream = new MemoryStream(response.RawBytes);
 | ||
| 
 | ||
|         //    }
 | ||
|         //    else
 | ||
|         //    {
 | ||
|         //        Console.WriteLine($"上传失败,错误代码: {response.StatusCode}, 错误消息: {response.ErrorMessage}");
 | ||
|         //    }
 | ||
|         //}
 | ||
|         //catch (Exception ex)
 | ||
|         //{
 | ||
|         //    Console.WriteLine("发生异常: " + ex.Message);
 | ||
|         //}
 | ||
| 
 | ||
|         return ResponseOutput.Ok();
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 |