using HiTeachCE.Helpers;
using HiTeachCE.Models;
using HiTeachCE.Services;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using OpenXmlPowerTools;
using Org.BouncyCastle.Ocsp;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using TEAMModelOS.SDK.Context.Exception;
using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
namespace HiTeachCE.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ActivationCodeController : BaseController
{
public ActivationCodeService activationCodeService;
public OrganizationService organizationService;
public ActivationCodeController(ActivationCodeService activationCode, OrganizationService organization)
{
activationCodeService = activationCode;
organizationService = organization;
}
///
/// 获取组织列表
///
///
///
[HttpPost("list")]
[Authorize(Policy = Constant.Role_Root)]
public BaseJosnRPCResponse List(PaginationJosnRPCRequest> request)
{
JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
//string role = GetLoginUser(JwtClaimTypes.Role);
// string loginUnionid = GetLoginUser(JwtClaimTypes.Id);
bool flag = false;
return builder.build();
}
///
/// 添加
///
///
///
[HttpPost("Get")]
[Authorize(Policy = Constant.Role_Root)]
public BaseJosnRPCResponse Get(JosnRPCRequest request)
{
JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
Expression> oinq = null;
oinq = oinq => oinq.code == request.@params;
List organizations = organizationService.GetList(oinq);
if (organizations.IsNotEmpty())
{
Expression> linq = null;
linq = linq => linq.orgCode == request.@params;
List activationCodes = activationCodeService.GetList(linq);
if (activationCodes.IsNotEmpty())
{
return builder.Data(activationCodes[0]).build();
}
else {
throw new BizException("组织机构未被授权!", 2);
}
}
else {
throw new BizException("组织机构不存在!",2);
}
}
///
/// 添加
///
///
///
[HttpPost("saveOrUpdate")]
[Authorize(Policy = Constant.Role_Root)]
public BaseJosnRPCResponse SaveOrUpdate(JosnRPCRequest request)
{
JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
bool flag = false;
Expression> oinq = null;
oinq = oinq => oinq.code == request.@params.orgCode;
List organizations = organizationService.GetList(oinq);
if (organizations.IsNotEmpty())
{
//个人只能有一个成员
Organization organization = organizations[0];
if (organization.type == 2) {
request.@params.maximum = 1;
}
Expression> linq = null;
linq = linq => linq.orgCode == request.@params.orgCode;
List activationCodes = activationCodeService.GetList(linq);
if (activationCodes.IsNotEmpty())
{
ActivationCode activationCode = activationCodes[0];
if (request.@params.expires > 0)
{
///如果是时间已经过期 则从当前时间算
long time = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
if (time > activationCode.expires)
{
activationCode.expires = time + request.@params.expires * 60 * 60 * 24;
}
else {
activationCode.expires = activationCode.expires + request.@params.expires * 60 * 60 * 24;
}
}
activationCode.maximum = request.@params.maximum;
activationCode.status = request.@params.status;
flag = activationCodeService.Update(activationCode);
}
else
{
string cdkey = "";
Random rdid = new Random();
for (int i = 0; i < 25; i++)//从数组随机抽取字符组成新的字符生成机器三
{
cdkey += Constant.az09[rdid.Next(0, Constant.az09.Length)];
if (i != 24 && (i + 1) % 5 == 0)
{
cdkey += "-";
}
}
long time = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
long expires = time;
if (request.@params.expires > 0)
{
expires = time + request.@params.expires * 60 * 60 * 24;
}
ActivationCode activationCode = new ActivationCode
{
id = Guid.NewGuid().ToString(),
cdkey = cdkey.ToUpper(),
createTime = time,
clientId = Guid.NewGuid().ToString("N"),
secret = Guid.NewGuid().ToString("N"),
status = request.@params.status,
orgCode = request.@params.orgCode,
expires = expires,
maximum = request.@params.maximum
};
flag = activationCodeService.Insert(activationCode);
}
}
else {
throw new BizException("组织机构不存在!", 2);
}
return builder.Data(flag).build();
}
}
public class ActivationCodeDto {
[Required(ErrorMessage = "组织必须设置")]
public string orgCode { get; set; }
[Required(ErrorMessage = "授权上限必须填写")]
[Range(1, 1000, ErrorMessage = "请输入1~1000的整数")]
public int maximum { get; set; }
///
/// 时长-1 永久 ,大于0 按天计算
///
[Required(ErrorMessage = "授权时限必须填写")]
[Range(0, 3650, ErrorMessage = "请输入0~3650的整数")]
public int expires { get; set; }
public int status { get; set; }
}
}