新增软件授权和数据信息
This commit is contained in:
2025-03-28 22:13:41 +08:00
parent a37c40a2ef
commit 61c4e0f977
17 changed files with 914 additions and 5 deletions
@@ -46,7 +46,7 @@ namespace LMS.service.Configuration
q.AddTrigger(opts => opts
.ForJob(jobKey)
.WithIdentity("MonthlyTaskTrigger", "DefaultGroup")
.WithCronSchedule("0 0 18 24 * ?")); // 每月1号凌晨0点
.WithCronSchedule("0 0 0 1 * ?")); // 每月1号凌晨0点
});
// 添加 Quartz 托管服务
@@ -5,6 +5,7 @@ using LMS.DAO.UserDAO;
using LMS.service.Configuration.InitConfiguration;
using LMS.service.Extensions.Mail;
using LMS.service.Service;
using LMS.service.Service.Other;
using LMS.service.Service.PermissionService;
using LMS.service.Service.PromptService;
using LMS.service.Service.RoleService;
@@ -35,8 +36,8 @@ namespace Lai_server.Configuration
services.AddScoped<ForwardWordService>();
services.AddScoped<SoftwareControlService>();
services.AddScoped<SoftwareService>();
services.AddScoped<MachineAuthorizationService>();
services.AddScoped<DataInfoService>();
// 注入 DAO
services.AddScoped<UserBasicDao>();
+132
View File
@@ -0,0 +1,132 @@
using LMS.Common.Extensions;
using LMS.Repository.DB;
using LMS.Repository.DTO;
using LMS.Repository.DTO.OtherDto;
using LMS.Repository.Other;
using LMS.service.Service.Other;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;
using static LMS.Common.Enums.ResponseCodeEnum;
namespace LMS.service.Controllers
{
[Route("lms/[controller]/[action]")]
[ApiController]
public class OtherController(MachineAuthorizationService machineAuthorizationService, DataInfoService dataInfoService) : Controller
{
private readonly MachineAuthorizationService _machineAuthorizationService = machineAuthorizationService;
private readonly DataInfoService _dataInfoService = dataInfoService;
#region /
/// <summary>
/// 新增机器码/指定授权码
/// </summary>
/// <param name="addMachineAuthorization"></param>
/// <returns></returns>
[HttpPost]
[Authorize]
public async Task<ActionResult<APIResponseModel<object>>> AddMachineAuthorization(AddMachineAuthorization addMachineAuthorization)
{
if (!ModelState.IsValid)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError);
}
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _machineAuthorizationService.AddMachineAuthorization(addMachineAuthorization, userId);
}
#endregion
#region /
[HttpPost("{id}")]
[Authorize]
public async Task<ActionResult<APIResponseModel<object>>> ModifyMachineAuthorization(string id, AddMachineAuthorization addMachineAuthorization)
{
if (!ModelState.IsValid)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError);
}
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _machineAuthorizationService.ModifyMachineAuthorization(id, addMachineAuthorization, userId);
}
#endregion
#region
[HttpGet("{id}")]
[Authorize]
public async Task<ActionResult<APIResponseModel<MachineAuthorizationDto>>> GetMachineAuthorization(string id)
{
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _machineAuthorizationService.GetMachineAuthorization(id, userId);
}
#endregion
#region
[HttpGet]
[Authorize]
public async Task<ActionResult<APIResponseModel<CollectionResponse<MachineAuthorizationDto>>>> QueryMachineAuthorizationCollection([Required] int page, [Required] int pageSize, string? machineId, string? AuthorizationCode, int? type)
{
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _machineAuthorizationService.QueryMachineAuthorizationCollection(page, pageSize, machineId, AuthorizationCode, type, userId);
}
#endregion
#region
[HttpDelete("{id}")]
[Authorize]
public async Task<ActionResult<APIResponseModel<object>>> DeleteMachineAuthorization(string id)
{
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _machineAuthorizationService.DeleteMachineAuthorization(id, userId);
}
#endregion
#region
[HttpPost]
public async Task<ActionResult<APIResponseModel<object>>> AddDataInfo(AddDataInfo addDataInfo)
{
if (!ModelState.IsValid)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError);
}
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _dataInfoService.AddDataInfo(addDataInfo);
}
#endregion
#region
[HttpGet]
[Authorize]
public async Task<ActionResult<APIResponseModel<CollectionResponse<DataInfo>>>> QueryDataInfoCollection([Required] int page, [Required] int pageSize, int? type)
{
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _dataInfoService.QueryDataInfoCollection(page, pageSize, type, userId);
}
#endregion
#region
[HttpDelete("{id}")]
[Authorize]
public async Task<ActionResult<APIResponseModel<object>>> DeleteDataInfo(string id)
{
long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _dataInfoService.DeleteDataInfo(id, userId);
}
#endregion
}
}
@@ -0,0 +1,141 @@
using LMS.Common.Enums;
using LMS.Common.Extensions;
using LMS.DAO;
using LMS.DAO.UserDAO;
using LMS.Repository.DB;
using LMS.Repository.DTO;
using LMS.Repository.DTO.UserDto;
using LMS.Repository.Other;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using static LMS.Common.Enums.ResponseCodeEnum;
namespace LMS.service.Service.Other
{
public class DataInfoService(ApplicationDbContext dbContext, UserBasicDao userBasicDao)
{
private readonly ApplicationDbContext _context = dbContext;
private readonly UserBasicDao _userBasicDao = userBasicDao;
#region
/// <summary>
/// 新增数据信息
/// </summary>
/// <param name="addDataInfo"></param>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<ActionResult<APIResponseModel<object>>> AddDataInfo(AddDataInfo addDataInfo)
{
try
{
// 判断类型是不是存在
if (!Enum.IsDefined(typeof(DataInfoTypeEnum), addDataInfo.Type))
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError, "授权类型不存在");
}
// 直接开始添加
DataInfo dataInfo = new DataInfo
{
ID = Guid.NewGuid().ToString(),
Type = addDataInfo.Type,
DataString = addDataInfo.DataString,
CreatedTime = BeijingTimeExtension.GetBeijingTime()
};
await _context.DataInfo.AddAsync(dataInfo);
await _context.SaveChangesAsync();
return APIResponseModel<object>.CreateSuccessResponseModel("数据新增成功");
}
catch (Exception ex)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
#region
/// <summary>
/// 获取数据信息
/// </summary>
/// <param name="page"></param>
/// <param name="pageSize"></param>
/// <param name="type"></param>
/// <param name="requestUserId"></param>
/// <returns></returns>
public async Task<ActionResult<APIResponseModel<CollectionResponse<DataInfo>>>> QueryDataInfoCollection(int page, int pageSize, int? type, long requestUserId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(requestUserId);
if (!isSuperAdmin)
{
return APIResponseModel<CollectionResponse<DataInfo>>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
IQueryable<DataInfo> query = _context.DataInfo;
if (type.HasValue)
{
query = query.Where(x => x.Type == (DataInfoTypeEnum)type);
}
// 总数
int total = await query.CountAsync();
// 分页
query = query.OrderByDescending(x => x.CreatedTime).Skip((page - 1) * pageSize).Take(pageSize);
List<DataInfo> dataInfos = await query.ToListAsync();
CollectionResponse<DataInfo> collectionResponse = new CollectionResponse<DataInfo>
{
Total = total,
Collection = dataInfos,
Current = page,
};
return APIResponseModel<CollectionResponse<DataInfo>>.CreateSuccessResponseModel(collectionResponse);
}
catch (Exception ex)
{
return APIResponseModel<CollectionResponse<DataInfo>>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
#region
/// <summary>
/// 删除指定的数据信息
/// </summary>
/// <param name="id"></param>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<ActionResult<APIResponseModel<object>>> DeleteDataInfo(string id, long userId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(userId);
if (!isSuperAdmin)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
DataInfo? dataInfo = await _context.DataInfo.FirstOrDefaultAsync(x => x.ID == id);
if (dataInfo == null)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.IdDateNotFound);
}
_context.DataInfo.Remove(dataInfo);
await _context.SaveChangesAsync();
return APIResponseModel<object>.CreateSuccessResponseModel("删除成功");
}
catch (Exception ex)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
}
}
@@ -0,0 +1,323 @@
using AutoMapper;
using LMS.Common.Enums;
using LMS.Common.Extensions;
using LMS.DAO;
using LMS.DAO.UserDAO;
using LMS.Repository.DB;
using LMS.Repository.DTO;
using LMS.Repository.DTO.OtherDto;
using LMS.Repository.DTO.UserDto;
using LMS.Repository.Models.DB;
using LMS.Repository.Other;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using static LMS.Common.Enums.ResponseCodeEnum;
namespace LMS.service.Service.Other
{
public class MachineAuthorizationService(UserBasicDao userBasicDao, ApplicationDbContext dbContext, IMapper mapper)
{
private readonly UserBasicDao _userBasicDao = userBasicDao;
private readonly ApplicationDbContext _dbContext = dbContext;
private readonly IMapper _mapper = mapper;
#region /
/// <summary>
/// 新增机器码/指定授权码
/// </summary>
/// <param name="addMachineAuthorization"></param>
/// <param name="requestUserId"></param>
/// <returns></returns>
public async Task<ActionResult<APIResponseModel<object>>> AddMachineAuthorization(AddMachineAuthorization addMachineAuthorization, long requestUserId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(requestUserId);
if (!isSuperAdmin)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
// 判断类型是不是存在
if (!Enum.IsDefined(typeof(MachineAuthorizationEnum), addMachineAuthorization.Type))
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError, "授权类型不存在");
}
// 判断相同的机器码和对应的类型的授权的是不是存在
MachineAuthorization? machineAuthorizationExist = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.MachineID == addMachineAuthorization.MachineID && x.Type == addMachineAuthorization.Type);
if (machineAuthorizationExist != null)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError, "相同的机器码和对应的类型的授权已经存在");
}
// 业务逻辑
MachineAuthorization machineAuthorization = new MachineAuthorization
{
ID = Guid.NewGuid().ToString(),
MachineID = addMachineAuthorization.MachineID,
AuthorizationCode = addMachineAuthorization.AuthorizationCode,
AuthorizedDate = addMachineAuthorization.AuthorizedDate,
ExpiryDate = addMachineAuthorization.ExpiryDate,
Type = addMachineAuthorization.Type,
CreatedUserID = requestUserId,
CreatedDate = BeijingTimeExtension.GetBeijingTime(),
UpdatedUserID = requestUserId,
UpdatedDate = BeijingTimeExtension.GetBeijingTime()
};
await _dbContext.MachineAuthorization.AddAsync(machineAuthorization);
await _dbContext.SaveChangesAsync();
return APIResponseModel<object>.CreateSuccessResponseModel("新增成功");
}
catch (Exception ex)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
#region /
/// <summary>
/// 修改机器码/指定授权码
/// </summary>
/// <param name="id"></param>
/// <param name="addMachineAuthorization"></param>
/// <param name="userId"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<ActionResult<APIResponseModel<object>>> ModifyMachineAuthorization(string id, AddMachineAuthorization addMachineAuthorization, long userId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(userId);
if (!isSuperAdmin)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
// 判断类型是不是存在
if (!Enum.IsDefined(typeof(MachineAuthorizationEnum), addMachineAuthorization.Type))
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError, "授权类型不存在");
}
MachineAuthorization? machineAuthorization = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.ID == id);
if (machineAuthorization == null)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.IdDateNotFound);
}
// 排除对应的机器码和类型,排除自己
MachineAuthorization? machineAuthorizationExist = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.MachineID == addMachineAuthorization.MachineID && x.Type == addMachineAuthorization.Type && x.ID != id);
if (machineAuthorizationExist != null)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError, "相同的机器码和对应的类型的授权已经存在");
}
// 开始修改
machineAuthorization.MachineID = addMachineAuthorization.MachineID;
machineAuthorization.AuthorizationCode = addMachineAuthorization.AuthorizationCode;
machineAuthorization.Type = addMachineAuthorization.Type;
machineAuthorization.UpdatedUserID = userId;
machineAuthorization.UpdatedDate = BeijingTimeExtension.GetBeijingTime();
machineAuthorization.AuthorizedDate = addMachineAuthorization.AuthorizedDate;
machineAuthorization.ExpiryDate = addMachineAuthorization.ExpiryDate;
_dbContext.MachineAuthorization.Update(machineAuthorization);
await _dbContext.SaveChangesAsync();
return APIResponseModel<object>.CreateSuccessResponseModel("修改成功");
}
catch (Exception ex)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
#region
/// <summary>
/// 获取指定的机器授权码
/// </summary>
/// <param name="id"></param>
/// <param name="userId"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<ActionResult<APIResponseModel<MachineAuthorizationDto>>> GetMachineAuthorization(string id, long userId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(userId);
if (!isSuperAdmin)
{
return APIResponseModel<MachineAuthorizationDto>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
MachineAuthorization? machineAuthorization = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.ID == id);
if (machineAuthorization == null)
{
return APIResponseModel<MachineAuthorizationDto>.CreateErrorResponseModel(ResponseCode.IdDateNotFound);
}
User? createdUser = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == machineAuthorization.CreatedUserID);
User? updatedUser = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == machineAuthorization.UpdatedUserID);
UserBaseDto createdUserBasic = _mapper.Map<UserBaseDto>(createdUser);
UserBaseDto updatedUserBasic = _mapper.Map<UserBaseDto>(updatedUser);
if (!isSuperAdmin)
{
createdUserBasic.HideContactInfo();
updatedUserBasic.HideContactInfo();
}
MachineAuthorizationDto machineAuthorizationDto = new MachineAuthorizationDto
{
ID = machineAuthorization.ID,
MachineID = machineAuthorization.MachineID,
AuthorizationCode = machineAuthorization.AuthorizationCode,
AuthorizedDate = machineAuthorization.AuthorizedDate,
ExpiryDate = machineAuthorization.ExpiryDate,
Type = machineAuthorization.Type,
CreatedUser = createdUserBasic,
CreatedDate = machineAuthorization.CreatedDate,
UpdatedUser = updatedUserBasic,
UpdatedDate = machineAuthorization.UpdatedDate
};
return APIResponseModel<MachineAuthorizationDto>.CreateSuccessResponseModel(ResponseCode.Success, machineAuthorizationDto);
}
catch (Exception ex)
{
return APIResponseModel<MachineAuthorizationDto>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
#region
/// <summary>
/// 获取指定的机器码授权码列表
/// </summary>
/// <param name="page"></param>
/// <param name="pageSize"></param>
/// <param name="machineId"></param>
/// <param name="authorizationCode"></param>
/// <param name="requestUserId"></param>
/// <returns></returns>
public async Task<ActionResult<APIResponseModel<CollectionResponse<MachineAuthorizationDto>>>> QueryMachineAuthorizationCollection(int page, int pageSize, string? machineId, string? authorizationCode, int? type, long requestUserId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(requestUserId);
if (!isSuperAdmin)
{
return APIResponseModel<CollectionResponse<MachineAuthorizationDto>>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
IQueryable<MachineAuthorization> query = _dbContext.MachineAuthorization;
if (!string.IsNullOrWhiteSpace(machineId))
{
query = query.Where(x => x.MachineID.Contains(machineId));
}
if (!string.IsNullOrWhiteSpace(authorizationCode))
{
query = query.Where(x => x.AuthorizationCode.Contains(authorizationCode));
}
if (type != null)
{
query = query.Where(x => x.Type == (MachineAuthorizationEnum)type);
}
// 总数
int total = await query.CountAsync();
// 降序/分页
List<MachineAuthorization> machineAuthorizations = await query.OrderByDescending(x => x.CreatedDate).Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();
List<MachineAuthorizationDto> machineAuthorizationDtos = new List<MachineAuthorizationDto>();
for (int i = 0; i < machineAuthorizations.Count; i++)
{
var machineAuthorization = machineAuthorizations[i];
User? createdUser = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == machineAuthorization.CreatedUserID);
User? updatedUser = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == machineAuthorization.UpdatedUserID);
UserBaseDto createdUserBasic = _mapper.Map<UserBaseDto>(createdUser);
UserBaseDto updatedUserBasic = _mapper.Map<UserBaseDto>(updatedUser);
if (!isSuperAdmin)
{
createdUserBasic.HideContactInfo();
updatedUserBasic.HideContactInfo();
}
MachineAuthorizationDto machineAuthorizationDto = new MachineAuthorizationDto
{
ID = machineAuthorization.ID,
MachineID = machineAuthorization.MachineID,
AuthorizationCode = machineAuthorization.AuthorizationCode,
AuthorizedDate = machineAuthorization.AuthorizedDate,
ExpiryDate = machineAuthorization.ExpiryDate,
Type = machineAuthorization.Type,
CreatedUser = createdUserBasic,
CreatedDate = machineAuthorization.CreatedDate,
UpdatedUser = updatedUserBasic,
UpdatedDate = machineAuthorization.UpdatedDate
};
machineAuthorizationDtos.Add(machineAuthorizationDto);
}
CollectionResponse<MachineAuthorizationDto> collectionResponse = new CollectionResponse<MachineAuthorizationDto>
{
Total = total,
Collection = machineAuthorizationDtos,
Current = page,
};
return APIResponseModel<CollectionResponse<MachineAuthorizationDto>>.CreateSuccessResponseModel(ResponseCode.Success, collectionResponse);
}
catch (Exception ex)
{
return APIResponseModel<CollectionResponse<MachineAuthorizationDto>>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
#region
/// <summary>
/// 删除指定的机器码授权码
/// </summary>
/// <param name="id"></param>
/// <param name="requestUserId"></param>
/// <returns></returns>
public async Task<ActionResult<APIResponseModel<object>>> DeleteMachineAuthorization(string id, long requestUserId)
{
try
{
bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(requestUserId);
if (!isSuperAdmin)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
}
MachineAuthorization? machineAuthorization = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.ID == id);
if (machineAuthorization == null)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.IdDateNotFound);
}
_dbContext.MachineAuthorization.Remove(machineAuthorization);
await _dbContext.SaveChangesAsync();
return APIResponseModel<object>.CreateSuccessResponseModel("删除成功");
}
catch (Exception ex)
{
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
}
}
#endregion
}
}
+1 -1
View File
@@ -26,6 +26,6 @@
],
"Enrich": [ "FromLogContext" ]
},
"Version": "1.0.6",
"Version": "1.0.7",
"AllowedHosts": "*"
}