From 16929a2ce0125b99d6ac20635a5015c06aa93506 Mon Sep 17 00:00:00 2001
From: lq1405 <2769838458@qq.com>
Date: Mon, 13 Jan 2025 23:13:46 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9laitool=E7=9A=84=E8=BD=AF?=
=?UTF-8?q?=E4=BB=B6=E6=8E=A7=E5=88=B6=E6=9D=83=E9=99=90=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
LMS.Common/Enum/MachineEnum.cs | 9 +-
LMS.service/Controllers/MachineController.cs | 2 +-
LMS.service/Service/MachineService.cs | 232 +++++--------------
3 files changed, 69 insertions(+), 174 deletions(-)
diff --git a/LMS.Common/Enum/MachineEnum.cs b/LMS.Common/Enum/MachineEnum.cs
index 72b0f17..9d830f6 100644
--- a/LMS.Common/Enum/MachineEnum.cs
+++ b/LMS.Common/Enum/MachineEnum.cs
@@ -21,11 +21,12 @@ namespace LMS.Common.Enums
///
public enum MachineStatus
{
- [Description("激活")]
- Active = 1,
-
[Description("冻结")]
- Frozen = 0
+ Frozen = 0,
+
+ [Description("激活")]
+ Active = 1
+
}
}
}
diff --git a/LMS.service/Controllers/MachineController.cs b/LMS.service/Controllers/MachineController.cs
index 07e0d78..7aa81a0 100644
--- a/LMS.service/Controllers/MachineController.cs
+++ b/LMS.service/Controllers/MachineController.cs
@@ -120,7 +120,7 @@ namespace LMS.service.Controllers
#endregion
- #region 将机器码升级为永久使用
+ #region 将机器码升级
[HttpPost("{Id}")]
[Authorize]
diff --git a/LMS.service/Service/MachineService.cs b/LMS.service/Service/MachineService.cs
index 074b1c6..685c7db 100644
--- a/LMS.service/Service/MachineService.cs
+++ b/LMS.service/Service/MachineService.cs
@@ -1,5 +1,6 @@
using AutoMapper;
using LMS.DAO;
+using LMS.Repository.DB;
using LMS.Repository.DTO;
using LMS.Repository.DTO.UserDto;
using LMS.Repository.Models.DB;
@@ -42,12 +43,6 @@ namespace LMS.service.Service
///
private async Task> CanAddPermanentMachine(User ownerUser, long userId, string? id, bool checkVip)
{
- // 判断是不是VIP
- if (checkVip && !await _userManager.IsInRoleAsync(ownerUser, "Vip User"))
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.UserNotVip);
- }
-
// 判断是不是已经有正在使用的机器码
List usingMachine = await _context.Machine.Where(x => x.UserID == userId && x.Status == MachineStatus.Active && (x.DeactivationTime == null || x.DeactivationTime >= BeijingTimeExtension.GetBeijingTime()) && (id == null || x.Id != id)).ToListAsync();
@@ -106,7 +101,7 @@ namespace LMS.service.Service
if (request.UserId == null)
{
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError);
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "所属用户ID不能为空");
}
// 判断OwnerUserId是不是还能添加
User? ownerUser = await _userManager.FindByIdAsync((request.UserId ?? reqId).ToString());
@@ -131,68 +126,47 @@ namespace LMS.service.Service
return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "机器码状态不正确");
}
- // 判断是不是VIP,不是VIP的话,判断之不是已经存在机器码
- if (!await _userManager.IsInRoleAsync(ownerUser, "VIP User"))
+ // 检测laitool软件是否存在
+ Software? software = await _context.Software.FirstOrDefaultAsync(x => x.SoftwareCode == "1002");
+ if (software == null)
{
- if (await _context.Machine.AnyAsync(x => x.UserID == ownerUser.Id))
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "软件不存在,请联系管理员");
+ }
+
+ // 判断是不是有开通软件控制权限,所属用户ID
+ SoftwareControl? softwareControl = await _context.SoftwareControl.FirstOrDefaultAsync(x => x.UserId == ownerUser.Id && x.SoftwareId == software.Id);
+ if (softwareControl == null)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前用户没有开通软件控制权限,请先申请软件控制权限并联系管理员开通服务");
+ }
+
+ // 判断是不是可以使用,检测到期时间和是不是永久
+ if (!softwareControl.IsForever)
+ {
+ if (softwareControl.ExpirationTime == null || softwareControl.ExpirationTime <= BeijingTimeExtension.GetBeijingTime())
{
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "普通用户只能添加一个机器码");
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前用户的软件控制权限已到期,请联系管理员");
}
}
- if (request.UseStatus == MachineUseStatus.Trial)
+ // 判断用户是不是还能不能添加机器码
+ var checkRes = await CanAddPermanentMachine(ownerUser, (long)(request.UserId ?? reqId), null, false);
+ if (checkRes.Code != 1)
{
- var checkRes = await CanAddPermanentMachine(ownerUser, (long)(request.UserId ?? reqId), null, false);
- if (checkRes.Code != 1)
- {
- return checkRes;
- }
- // 必传停用时间
- if (request.DeactivationTime == null)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "试用机器码必须传入停用时间");
- }
- request.DeactivationTime = request.DeactivationTime?.AddHours(8);
-
- // 判断停用时间是不是少于当前的
- if (request.DeactivationTime < BeijingTimeExtension.GetBeijingTime())
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "到期时间不能小于当前时间");
- }
- Console.WriteLine(BeijingTimeExtension.GetBeijingTime().ToString());
-
- int s = ((request.DeactivationTime ?? BeijingTimeExtension.GetBeijingTime().AddDays(1)) - BeijingTimeExtension.GetBeijingTime()).Days;
-
- var LaiToolTrialDays = await _context.Options.FirstOrDefaultAsync(x => x.Key == "LaiToolTrialDays");
- if (LaiToolTrialDays == null)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, "系统错误,未设置最大试用天数");
- }
- double maxTrialDays = LaiToolTrialDays.GetValueObject();
- // 判断当前时间和现在的时间差大于三天,报错
- if (s >= maxTrialDays)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, $"到期时间不能超过 {maxTrialDays}天");
- }
- // 先修改用户的免费更换次数
- ownerUser.FreeCount -= 1;
- _context.Users.Update(ownerUser);
- }
- else
- {
- var checkRes = await CanAddPermanentMachine(ownerUser, (long)(request.UserId ?? reqId), null, true);
- if (checkRes.Code != 1)
- {
- return checkRes;
- }
- // 先修改用户的免费更换次数
- ownerUser.FreeCount -= 1;
- _context.Users.Update(ownerUser);
- request.DeactivationTime = null;
+ return checkRes;
}
+ // // 先修改用户的免费更换次数
+ ownerUser.FreeCount -= 1;
+ _context.Users.Update(ownerUser);
+ request.DeactivationTime = null;
+
//开始新增
Machine machine = _mapper.Map(request);
+ // 使用软件控制的到期时间,要是永久的话,就是默认添加五年
+ machine.DeactivationTime = softwareControl.IsForever ? BeijingTimeExtension.GetBeijingTime().AddYears(5) : softwareControl.ExpirationTime;
+ machine.Status = MachineStatus.Active; // 所有的都是激活状态
+ machine.UseStatus = MachineUseStatus.Trial; // 所有的都是试用状态
machine.Id = Guid.NewGuid().ToString();
machine.CreateId = reqId;
machine.UpdateId = reqId;
@@ -256,11 +230,7 @@ namespace LMS.service.Service
try
{
// 获取对应的machine
- var machine = await _context.Machine.FirstOrDefaultAsync(x =>
- x.MachineId == machineId &&
- ((x.DeactivationTime == null && x.UseStatus == MachineUseStatus.Permanent && x.Status == MachineStatus.Active)
- || (x.DeactivationTime != null && x.UseStatus == MachineUseStatus.Trial && BeijingTimeExtension.GetBeijingTime() < x.DeactivationTime && x.Status == MachineStatus.Active)));
-
+ Machine? machine = await _context.Machine.FirstOrDefaultAsync(x => x.MachineId == machineId && x.Status == MachineStatus.Active && x.DeactivationTime > BeijingTimeExtension.GetBeijingTime());
if (machine == null)
{
return APIResponseModel.CreateErrorResponseModel(ResponseCode.MachineNotFound);
@@ -308,14 +278,7 @@ namespace LMS.service.Service
bool isAdminOrSuperAdmin = await _userManager.IsInRoleAsync(user, "Admin") || await _userManager.IsInRoleAsync(user, "Super Admin");
if (!isAdminOrSuperAdmin)
{
- if (reqId != machine.UserID || request.MachineId != machine.MachineId)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
- }
- if (machine.MachineId != request.MachineId)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "机器码不能修改");
- }
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction, "除管理员之外不可编辑");
}
// 判断当前修改后的机器码是否已经存在(不包含自己)
@@ -324,87 +287,10 @@ namespace LMS.service.Service
return APIResponseModel.CreateErrorResponseModel(ResponseCode.MachineAlreadyExist);
}
- // 将标准时间转换为北京时间
- request.DeactivationTime = request.DeactivationTime?.AddHours(8);
-
- // 判断是不是永久改试用
- if (machine.UseStatus == MachineUseStatus.Permanent && request.UseStatus == MachineUseStatus.Trial)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "机器码不能永久改试用");
- }
-
- if (!isAdminOrSuperAdmin)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
- }
-
- // 试用,除了管理员之外不能修改
- if (request.UseStatus == MachineUseStatus.Trial)
- {
- // 判断结束时间是不是少于当前的
- if (request.DeactivationTime != null && request.DeactivationTime < BeijingTimeExtension.GetBeijingTime())
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "到期时间不能小于当前时间");
- }
-
- // 判断当前时间和现在的时间差大于三天,报错
- if (request.DeactivationTime != null && (request.DeactivationTime - BeijingTimeExtension.GetBeijingTime()).Value.Days > 3)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "到期时间不能超过三天");
- }
- }
- else if (request.UseStatus == MachineUseStatus.Permanent)
- {
- request.DeactivationTime = null;
- User? ownerUser = await _userManager.FindByIdAsync(machine.UserID.ToString());
- if (ownerUser == null)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.FindUserByIdFail);
- }
- // 判断是不是充试用升级到永久,这边要添加一些判断
- if (machine.UseStatus == MachineUseStatus.Trial)
- {
- var checkRes = await CanAddPermanentMachine(ownerUser, machine.UserID, machine.Id, true);
- if (checkRes.Code != 1)
- {
- return checkRes;
- }
- // 先修改用户的免费更换次数
- ownerUser.FreeCount -= 1;
- await _userManager.UpdateAsync(ownerUser);
- }
-
- // 判断是不是重新激活
- if (request.Status == MachineStatus.Active && machine.Status == MachineStatus.Frozen)
- {
- var checkRes = await CanAddPermanentMachine(ownerUser, machine.UserID, machine.Id, true);
- if (checkRes.Code != 1)
- {
- return checkRes;
- }
- // 先修改用户的免费更换次数
- ownerUser.FreeCount -= 1;
- await _userManager.UpdateAsync(ownerUser);
- }
- }
-
- // 开始修改
+ //// 开始修改
machine.UpdateId = reqId;
machine.UpdateTime = BeijingTimeExtension.GetBeijingTime();
- if (request.DeactivationTime != null)
- {
- machine.DeactivationTime = request.DeactivationTime;
- }
- if (request.Status == MachineStatus.Active && request.UseStatus == MachineUseStatus.Permanent)
- {
- machine.DeactivationTime = null;
- }
- machine.UseStatus = request.UseStatus;
- if (isAdminOrSuperAdmin)
- {
- machine.MachineId = request.MachineId;
- }
- machine.Status = request.Status;
+ machine.MachineId = request.MachineId;
machine.Remark = request.Remark;
_context.Machine.Update(machine);
@@ -560,32 +446,40 @@ namespace LMS.service.Service
return APIResponseModel.CreateErrorResponseModel(ResponseCode.FindUserByIdFail);
}
- // 判断当前用户是不是可以升级永久
- // 判断用户是不是VIP
- if (!await _userManager.IsInRoleAsync(ownerUser, "Vip User"))
+ // 直接判断是不是有软件控制权限
+ Software? software = await _context.Software.FirstOrDefaultAsync(x => x.SoftwareCode == "1002");
+ if (software == null)
{
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.UserNotVip);
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "软件不存在,请联系管理员");
}
- // 判断是不是已经有正在使用的机器码
- List usingMachine = await _context.Machine.Where(x => x.UserID == machine.UserID && x.Status == MachineStatus.Active && (x.DeactivationTime == null || x.DeactivationTime >= BeijingTimeExtension.GetBeijingTime()) && x.Id != machine.Id).ToListAsync();
-
- // 判断是不是超过了用户允许的最大机器码数量
- if ((usingMachine.Count + 1) > ownerUser.AllDeviceCount)
+ SoftwareControl? softwareControl = await _context.SoftwareControl.FirstOrDefaultAsync(x => x.UserId == ownerUser.Id && x.SoftwareId == software.Id);
+ if (softwareControl == null)
{
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前用户正在绑定的机器码数量超过最大数量");
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前用户没有开通软件控制权限,请先申请软件控制权限并联系管理员开通服务");
}
- // 判断免费更换次数
- if (ownerUser.FreeCount <= 0)
+ // 直接同步就行,不用管之前的,直接同步时间就行,把状态修改了就行
+ // 判断是不是可以使用,检测到期时间和是不是永久
+ var checkRes = await CanAddPermanentMachine(ownerUser, machine.UserID, machine.Id, true);
+ if (checkRes.Code != 1)
{
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前用户更换机器码的次数已用完");
+ return checkRes;
}
- // 判断当前机器码是否已经是永久使用
- if (machine.Status == MachineStatus.Active && machine.UseStatus == MachineUseStatus.Permanent)
+ // 简单判断时间
+ if (!softwareControl.IsForever)
{
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前机器码已是永久");
+ if (softwareControl.ExpirationTime == null || softwareControl.ExpirationTime <= BeijingTimeExtension.GetBeijingTime())
+ {
+ machine.UpdateTime = BeijingTimeExtension.GetBeijingTime();
+ machine.Status = MachineStatus.Frozen;
+ machine.DeactivationTime = BeijingTimeExtension.GetBeijingTime();
+ _context.Machine.Update(machine);
+ await _context.SaveChangesAsync();
+ await transaction.CommitAsync();
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.InvalidOptions, "当前用户的软件控制权限已到期,请联系管理员");
+ }
}
// 先修改用户的免费更换次数
@@ -594,8 +488,8 @@ namespace LMS.service.Service
machine.UpdateTime = BeijingTimeExtension.GetBeijingTime();
machine.Status = MachineStatus.Active;
- machine.UseStatus = MachineUseStatus.Permanent;
- machine.DeactivationTime = null;
+ machine.DeactivationTime = softwareControl.IsForever ? BeijingTimeExtension.GetBeijingTime().AddYears(5) : softwareControl.ExpirationTime;
+ machine.UseStatus = MachineUseStatus.Trial;
_context.Machine.Update(machine);
await _context.SaveChangesAsync();
await transaction.CommitAsync();