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; } } }