102 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
using IRaCIS.Application.Contracts;
 | 
						|
using IRaCIS.Core.Infrastructure.Encryption;
 | 
						|
using Microsoft.AspNetCore.Authorization;
 | 
						|
using Microsoft.AspNetCore.Builder;
 | 
						|
using Microsoft.AspNetCore.Mvc;
 | 
						|
using Microsoft.Extensions.Options;
 | 
						|
using Newtonsoft.Json;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Security.Cryptography;
 | 
						|
using System.Text;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace IRaCIS.Core.Application.Service;
 | 
						|
 | 
						|
public class HIRActivateService : ServiceBase
 | 
						|
{
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// 获取授权码明文信息
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="authorizationCode"></param>
 | 
						|
    /// <param name="_hospitalOption"></param>
 | 
						|
    /// <returns></returns>
 | 
						|
    [AllowAnonymous]
 | 
						|
    public async Task<IResponseOutput> GetAuthorizationCodeInfo(string authorizationCode, [FromServices] IOptionsMonitor<SystemHospitalOption> _hospitalOption)
 | 
						|
    {
 | 
						|
        // 解密 Base64 编码后的数据
 | 
						|
        byte[] base64DecodedBytes = Convert.FromBase64String(authorizationCode);
 | 
						|
        string decodedText = System.Text.Encoding.UTF8.GetString(base64DecodedBytes);
 | 
						|
 | 
						|
 | 
						|
        var authInfo = JsonConvert.DeserializeObject<TrialAuthorizationInfo>(decodedText);
 | 
						|
 | 
						|
        if (authInfo == null)
 | 
						|
        {
 | 
						|
            return ResponseOutput.NotOk("不能解析该项目授权码");
 | 
						|
        }
 | 
						|
 | 
						|
        return ResponseOutput.Ok(decodedText);
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// 获取项目激活码
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="_basicSystemConfigConfig"></param>
 | 
						|
    /// <returns></returns>
 | 
						|
    [AllowAnonymous]
 | 
						|
    [RoutePattern(HttpMethod = "get")]
 | 
						|
    public async Task<IResponseOutput> GetTrialActivationCode(TrialAuthorizationInfo authorizationInfo, [FromServices] IOptionsMonitor<ServiceVerifyConfigOption> _basicSystemConfigConfig)
 | 
						|
    {
 | 
						|
 | 
						|
 | 
						|
        if (authorizationInfo != null)
 | 
						|
        {
 | 
						|
            //一周内激活
 | 
						|
            authorizationInfo.ActiveDeadLineDate = DateTime.Now.Date.AddDays(8).AddSeconds(-1);
 | 
						|
 | 
						|
            var info = AesEncryption.Encrypt($"{JsonConvert.SerializeObject(authorizationInfo)}", "HIR_System_AES_Key_Info", "Trial_AuthorizationEncrypt");
 | 
						|
 | 
						|
            Console.WriteLine("HIR_System_AES_Key_Info".PadRight(32, '0').Substring(0, 32) + "    " + "Trial_AuthorizationEncrypt".PadRight(16, '0').Substring(0, 16));
 | 
						|
 | 
						|
            //var dd = AesEncryption.Decrypt(info, "HIR_System_AES_Key_Info", "Trial_AuthorizationEncrypt");
 | 
						|
 | 
						|
            return ResponseOutput.Ok(info);
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            return ResponseOutput.NotOk("激活码解密文本信息有误");
 | 
						|
        }
 | 
						|
 | 
						|
       
 | 
						|
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
public class TrialAuthorizationInfo
 | 
						|
{
 | 
						|
    public Guid TrialId { get; set; }
 | 
						|
    public Guid CreateUserId { get; set; }
 | 
						|
    public string TrialCode { get; set; }
 | 
						|
 | 
						|
    public string HospitalName { get; set; }
 | 
						|
 | 
						|
    public string HospitalCode { get; set; }
 | 
						|
 | 
						|
    public int PurchaseDuration { get; set; }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    public List<CriterionType> CriterionTypeList { get; set; }
 | 
						|
 | 
						|
    public DateTime? AuthorizationDeadLineDate { get; set; }
 | 
						|
 | 
						|
    public DateTime? ActiveDeadLineDate { get; set; }
 | 
						|
 | 
						|
    public DateTime? ActiveTime { get; set; }
 | 
						|
 | 
						|
}
 | 
						|
 |