LanYinLoginHostedService.cs 2.32 KB
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Rcs.Cyaninetech.Models;
using Rcs.Cyaninetech.Services;
using Rcs.Domain.Settings;

namespace Rcs.Cyaninetech.BackgroundServices;

/// <summary>
/// LanYin启动登录服务 - 在应用启动时自动执行登录
/// </summary>
public class LanYinLoginHostedService : IHostedService
{
    private readonly ILanYinService _lanYinService;
    private readonly ILogger<LanYinLoginHostedService> _logger;
    private readonly LanYinSettings _settings;

    public LanYinLoginHostedService(
        ILanYinService lanYinService,
        ILogger<LanYinLoginHostedService> logger,
        IOptions<LanYinSettings> settings)
    {
        _lanYinService = lanYinService;
        _logger = logger;
        _settings = settings.Value;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("LanYin登录服务启动中...");

        // 检查是否启用并且配置了账号密码
        if (!_settings.Enabled)
        {
            _logger.LogWarning("LanYin服务未启用,跳过自动登录");
            return;
        }

        if (string.IsNullOrWhiteSpace(_settings.Account) || 
            string.IsNullOrWhiteSpace(_settings.Password))
        {
            _logger.LogWarning("未配置LanYin账号或密码,跳过自动登录");
            return;
        }

        try
        {
            _logger.LogInformation("开始自动登录LanYin系统...");

            var loginRequest = new LanYinLoginRequest
            {
                account = _settings.Account,
                password = _settings.Password
            };

            var success = await _lanYinService.LoginAsync(loginRequest, cancellationToken);

            if (success)
            {
                _logger.LogInformation("✓ LanYin系统自动登录成功");
            }
            else
            {
                _logger.LogError("✗ LanYin系统自动登录失败");
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "LanYin系统自动登录时发生异常");
        }
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("LanYin登录服务停止");
        return Task.CompletedTask;
    }
}