完善 学生流程

This commit is contained in:
小肥羊 2025-08-22 19:14:48 +08:00
parent a414aecac3
commit 6b310cb4d4
10 changed files with 798 additions and 9 deletions

View File

@ -0,0 +1,190 @@
using Aliyun.OSS;
using Learn.Archives.API.Controllers.Dto;
using Learn.Archives.API.Expand;
using Learn.Archives.Core.Common;
using Learn.Archives.Core.Model;
using Learn.Archives.Core.Model.Dto;
using Learn.Archives.Core.Model.Enum;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using System.Diagnostics;
using System.Security.Claims;
using System.Text.RegularExpressions;
using UserCenter.Model;
using UserCenter.Model.Common;
namespace Learn.Archives.API.Controllers
{
/// <summary>
/// 年级控制器
/// </summary>
public class StudentController : BackController<Student>
{
private readonly IHttpContextAccessor _httpContextAccessor;
readonly Repository<Student> baseService;
readonly UserCenterService _userCenterService;
readonly LiveUserInfo userInfo;
public StudentController(Repository<Student> baseService, LiveUserInfo userInfo, IHttpContextAccessor httpContextAccessor, UserCenterService userCenterService) : base(baseService)
{
this.baseService = baseService;
this.userInfo = userInfo;
_httpContextAccessor = httpContextAccessor;
_userCenterService = userCenterService;
}
[NonAction]
public override Task<dynamic> PageList([FromBody] QueryRequestBase model)
{
return base.PageList(model);
}
/// <summary>
/// 用户信息
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<Student> Info(long uid)
{
if (uid == 0)
Oh.ModelError("无效数据");
return await baseService.AsQueryable().FirstAsync(s => s.UserCenterId == uid);
}
/// <summary>
/// 修改用户信息
/// <para> 调用流程 用户中心->档案系统</para>
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<long> EditInfo(Student e)
{
if (e == null || e.UserCenterId == 0)
Oh.ModelError("无效数据");
var has = await baseService.AsQueryable().FirstAsync(s => s.UserCenterId == e.UserCenterId);
if (has == null)
await baseService.InsertAsync(e);
else
{
e.Id = has.Id;
e.UserCenterId = has.UserCenterId;
await baseService.UpdateAsync(e);
}
return e.Id;
}
/// <summary>
/// 设置角色菜单
/// </summary>
/// <returns></returns>
[HttpPost]
public new async Task<PageResult<StudentInfoRes>> PageList()
{
var apiRes =await _userCenterService.CallAPI_GetPageUserList(_httpContextAccessor.HttpContext);
var res= new PageResult<StudentInfoRes>() { Data = new List<StudentInfoRes>() };
if (apiRes == null|| apiRes.Data.Count == 0) return res;
res.Total = apiRes.Total;
var uids = apiRes.Data.Select(s => s.Id).ToArray();
var exData = await baseService.AsQueryable()
.Where(s => uids.Contains(s.UserCenterId))
.ToArrayAsync();
var exDataDic = exData.GroupBy(s => s.UserCenterId).ToDictionary(s => s.Key);
foreach (var item in apiRes.Data.Select(s => s.Adapt<StudentInfoRes>()))
{
res.Data.Add(item);
if (!exDataDic.ContainsKey(item.Id)) continue;
var ex = exDataDic[item.Id].First();
item.AmountRelief = ex.AmountRelief;
item.Status = ex.Status;
item.ExitTime = ex.ExitTime?.ToString("yyyy-MM-dd")??string.Empty;
item.JoinTime = ex.JoinTime?.ToString("yyyy-MM-dd") ?? string.Empty;
item.Remark = ex.Remark;
}
return res;
}
/// <summary>
/// 导入考试信息
/// </summary>
/// <returns></returns>
[HttpPost, ResultIgnore]
[HttpLogEnable]
public async Task<IActionResult> Import(IFormFile? file)
{
var fl = file != null ? file : _httpContextAccessor.HttpContext?.Request.Form.Files[0];
if (fl == null) Oh.ModelError("传入无效的数据");
if (!Path.GetExtension(fl.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
Oh.ModelError("请选择导入文件为.xlsx的后缀名!");
//分析excel
IEnumerable<StudentInfoImportError> dataList;
using var stream = new MemoryStream();
{
await fl.CopyToAsync(stream);
dataList = stream.Query<StudentInfoImportError>()
.Where(s => !string.IsNullOrEmpty(s.School));
}
if (dataList == null || dataList.Count() == 0)
Oh.ModelError("导入失败:无有效数据");
var insertInfo = new List<Student>();
var userCenterImp = new List<UserExcelExportData>();
foreach (var s in dataList)
{
insertInfo.Add(new Student()
{
AmountRelief = s.AmountRelief,
ExitTime = s.ExitTime,
Remark = s.Remark,
JoinTime = s.JoinTime,
Status = s.Status.ToEnum<UserStatusEnum>()??default,
UserCenterId = s.Id,
});
userCenterImp.Add(new UserExcelExportData()
{
UserType = "学生",
Account = s.Id.ToString(),
School = s.School,
Grade = s.Grade,
Class = s.Class,
ClassType = s.ClassType,
ExamNo = s.Id.ToString(),
Phone = s.Phone,
RealName = s.RealName,
Stages = s.Stages
});
}
//调用 用户中心 导入接口
var importRes = await _userCenterService.CallAPI_ImportJsonData(_httpContextAccessor.HttpContext, userCenterImp);
var hUAccount = importRes.InsertUsers.Select(s => s.Account).ToHashSet();
//基于结果判断添加成功`
insertInfo = insertInfo.Where(s => hUAccount.Contains(s.Id.ToString())).ToList();
//部分成功的数据写入数据库
await baseService.InsertRangeAsync(insertInfo);
//处理数据
var errorExcelInfo = importRes.ErrorExcelExport.Select(s => s.Adapt<StudentInfoImportError>());
//如果有错误数据则返回excel
if (errorExcelInfo.Count() != 0)
return File(errorExcelInfo.ExportExcel(), "application/ms-excel");
return Ok();
}
}
}

View File

@ -37,6 +37,7 @@ builder.Services.AddRedisExpand();
builder.Services.AddCorsExpand(); builder.Services.AddCorsExpand();
builder.Services.AddMapster(); builder.Services.AddMapster();
builder.Services.AddLiveUserInfoExpand(); builder.Services.AddLiveUserInfoExpand();
builder.Services.AddUserCenterServiceExpand();
builder.Services.AddHttpClient(); builder.Services.AddHttpClient();
builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpContextAccessor();

View File

@ -14,6 +14,9 @@
"SqlType": "MySql", "SqlType": "MySql",
"UpdateTable": false "UpdateTable": false
}, },
"UserCenterService": {
"API": "https://dcb.23544.com/api"
},
"OtherDBArr": [ "OtherDBArr": [
{ {
"ConfigId": 1001, // "ConfigId": 1001, //

View File

@ -7,14 +7,14 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"AppConfig": { "AppConfig": {
"ID": 1, // "ID": 2, //
"Redis": { "Redis": {
"ConnectionString": "127.0.0.1:6379,password=Woshiren123,defaultDatabase=10" "ConnectionString": "127.0.0.1:6379,password=Woshiren123,defaultDatabase=10"
}, },
"DB": { "DB": {
"ConnectionString": "AllowLoadLocalInfile=true;Server=192.168.2.9;User ID=root;Password=qwe123!@#;Port=3306;Database=learn.archives;CharSet=utf8mb4;pooling=true;SslMode=None;", "ConnectionString": "AllowLoadLocalInfile=true;Server=192.168.2.9;User ID=root;Password=qwe123!@#;Port=3306;Database=learn.archives;CharSet=utf8mb4;pooling=true;SslMode=None;",
"SqlType": "MySql", "SqlType": "MySql",
"UpdateTable": true "UpdateTable": false
}, },
"AuthKey": { "AuthKey": {
"Secret": "9FAB7AC7-F1DB-4C56-B84F-044055A34AF2", "Secret": "9FAB7AC7-F1DB-4C56-B84F-044055A34AF2",
@ -22,6 +22,9 @@
"Audience": "Admin", "Audience": "Admin",
"Expires": 120 // 120 "Expires": 120 // 120
}, },
"UserCenterService": {
"API": "https://dca.w.23544.com:8843/api"
},
"OtherDBArr": [ "OtherDBArr": [
{ {
"ConfigId": 1001, // "ConfigId": 1001, //

View File

@ -0,0 +1,126 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Security.Policy;
using System.Text.Json;
using Learn.Archives.Core.Model.Dto;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Learn.Archives.Core.Common
{
public static class UserCenterServiceExpand
{
/// <summary>
/// 添加 当前作用域登录用户信息
/// </summary>
/// <param name="services"></param>
public static void AddUserCenterServiceExpand(this IServiceCollection services)
{
services.AddScoped<UserCenterService>();
}
}
/// <summary>
/// 调用 UserCenter服务的接口
/// </summary>
public class UserCenterService
{
private readonly IHttpClientFactory _httpClientFactory;
public UserCenterService(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
const string API_getpageuserlist = "back/users/getpageuserlist";
const string API_ImportJsonData = "back/users/importjsondata";
/// <summary>
/// 请求用户中心 接口
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task<PageResult<UserInfoResponceDto>> CallAPI_GetPageUserList(HttpContext context)
{
var res = await ForwardRequestAsync<BaseReturn<PageResult<UserInfoResponceDto>>>(API_getpageuserlist, context);
if (res==null || res.Code != 200)
Oh.Error(res.Message, res.Code);
return res.Data;
}
/// <summary>
/// 请求用户中心 接口
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task<UserImportRes> CallAPI_ImportJsonData(HttpContext context,object data)
{
var httpClient = _httpClientFactory.CreateClient();
var targetUri = new Uri(AppCommon.Config.UserCenterService.API + API_ImportJsonData);
var requestMessage = new HttpRequestMessage(new HttpMethod("POST"), targetUri);
if (context.Request.Headers.TryGetValue("Authorization", out var authValues))
requestMessage.Headers.Authorization = AuthenticationHeaderValue.Parse(authValues.FirstOrDefault());
requestMessage.Content = new StringContent(data.ToJson(), Encoding.UTF8, "application/json");
var responseMessage = await httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
var resStr = await requestMessage.Content?.ReadAsStringAsync();
var res = JsonSerializer.Deserialize<BaseReturn<UserImportRes>>(resStr);
if (res == null || res.Code != 200)
Oh.Error(res.Message, res.Code);
return res.Data;
}
/// <summary>
/// 转发请求
/// </summary>
/// <param name="url">用户中心API</param>
/// <param name="context">上下文</param>
/// <returns></returns>
public async Task<T> ForwardRequestAsync<T>(string url, HttpContext context) where T : class, new()
{
var httpClient = _httpClientFactory.CreateClient();
var Request = context.Request;
try
{
// ========== 1. 准备目标请求 ==========
var targetUri = new Uri(AppCommon.Config.UserCenterService.API+"/"+ url);
// 创建 HttpRequestMessage使用与当前请求相同的 HttpMethod
var requestMessage = new HttpRequestMessage(new HttpMethod(Request.Method), targetUri);
// ========== 2. 复制请求头 ==========
// ========== 3. 处理请求体Body==========
if (Request.Body != null && (Request.Method == "POST" || Request.Method == "PUT" || Request.Method == "PATCH"))
{
// 由于 Request.Body 只能读取一次我们需要缓存它ASP.NET Core 默认不缓存)
// 如果你希望多次读取 Body可以使用 EnableBuffering() 中间件,或者在这里直接读取并重新赋值
Request.EnableBuffering(); // 允许重新读取请求流
Request.Body.Position = 0; // 重置 Stream 位置,以便后续中间件或框架再次读取(如有必要)
using var reader = new System.IO.StreamReader(Request.Body);
var body = await reader.ReadToEndAsync();
if (!string.IsNullOrEmpty(body))
requestMessage.Content = new StringContent(body, Encoding.UTF8, Request.ContentType);
}
// ========== 4. 添加 Authorization 等自定义 Header可选==========
if (Request.Headers.TryGetValue("Authorization", out var authValues))
requestMessage.Headers.Authorization = AuthenticationHeaderValue.Parse(authValues.FirstOrDefault());
// ========== 5. 发送请求到目标服务器 ==========
var responseMessage = await httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
var resStr = await responseMessage.Content?.ReadAsStringAsync();
return JsonSerializer.Deserialize<T>(resStr);
}
catch
{
throw;
}
}
}
}

View File

@ -28,6 +28,6 @@
<PackageReference Include="SqlSugar.IOC" Version="2.0.0" /> <PackageReference Include="SqlSugar.IOC" Version="2.0.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.170" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.170" />
<PackageReference Include="System.Net.Http" Version="4.3.4" /> <PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="UserCenter.Model" Version="1.4.1" /> <PackageReference Include="UserCenter.Model" Version="1.4.3" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -20,7 +20,7 @@ namespace Learn.Archives.Core.Model.Dto
} }
public class BaseReturn<T> public class BaseReturn<T>
{ {
public required T? Data { get; set; } public T? Data { get; set; }
/// <summary> /// <summary>
/// 消息码 /// 消息码

View File

@ -0,0 +1,464 @@
using Learn.Archives.Core.Model.Enum;
using MiniExcelLibs.Attributes;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UserCenter.Model;
namespace Learn.Archives.Core.Model.Dto
{
public class UserImportInsertUser
{
//
// 摘要:
// 账号
public string Account { get; set; }
}
public class UserImportRes
{
/// <summary>
/// 错误数据
/// </summary>
public IEnumerable<UserExcelExportData> ErrorExcelExport { get; set; }
/// <summary>
/// 入库的用户
/// </summary>
public IEnumerable<UserImportInsertUser> InsertUsers { get; set; }
}
public class StudentInfoImportError : StudentInfoImport
{
/// <summary>
/// 导入失败原因
/// </summary>
[ExcelColumn(Name = "导入失败原因", Width = 50)]
public string ErrorMsg { get; set; }
}
public class StudentInfoImport
{
/// <summary>
/// 姓名
/// </summary>
[ExcelColumn(Name="姓名", Width = 20)]
public string RealName { get; set; }
/// <summary>
/// 家长电话
/// </summary>
[ExcelColumn(Name="家长电话", Width = 20)]
public string Phone { get; set; }
/// <summary>
/// 学校
/// </summary>
[ExcelColumn(Name="学校", Width = 20)]
public string School { get; set; }
/// <summary>
/// 年级
/// </summary>
[ExcelColumn(Name="年级")]
public string Grade { get; set; }
/// <summary>
/// 班级
/// </summary>
[ExcelColumn(Name="班级")]
public string Class { get; set; }
/// <summary>
/// 班级
/// </summary>
[ExcelColumn(Name="班级类型")]
public string ClassType { get; set; }
/// <summary>
/// 学段
/// </summary>
[ExcelColumn(Name="学段")]
public string? Stages { get; set; }
/// <summary>
/// 减免金额
/// </summary>
[ExcelColumn(Name = "减免金额")]
public decimal AmountRelief { get; set; }
/// <summary>
/// 学生状态[就读/退出]
/// </summary>
[ExcelColumn(Name = "学生状态")]
public string Status { get; set; }
/// <summary>
/// 入班时间
/// </summary>
[ExcelColumn(Name = "入班时间")]
public DateTime? JoinTime { get; set; }
/// <summary>
/// 退出时间
/// </summary>
[ExcelColumn(Name = "退出时间")]
public DateTime? ExitTime { get; set; }
/// <summary>
/// 备注
/// <para></para>
/// </summary>
[ExcelColumn(Name = "备注",Width =50)]
public string? Remark { get; set; }
/// <summary>
/// id
/// </summary>
public long Id { get; set; } = Yitter.IdGenerator.YitIdHelper.NextId();
}
/// <summary>
/// 用户中心 Excel用户导入
/// </summary>
public class UserExcelExportData
{
/// <summary>
/// 用户类型 (校长、年级主任、班主任、教师、学生)
/// </summary>
[ExcelColumn(Name="用户类型")]
public string UserType { get; set; }
/// <summary>
/// 第三方id
/// </summary>
[ExcelColumn(Name="第三方id")]
public string ThirdPartyId { get; set; }
/// <summary>
/// 点阵笔SN
/// </summary>
[ExcelColumn(Name="点阵笔SN")]
public string PointPenSN { get; set; }
/// <summary>
/// 姓名
/// </summary>
[ExcelColumn(Name="姓名")]
public string RealName { get; set; }
/// <summary>
/// 学籍号/账号
/// </summary>
[ExcelColumn(Name="账号")]
public string Account { get; set; }
/// <summary>
/// 电话号码
/// </summary>
[ExcelColumn(Name="手机号")]
public string Phone { get; set; }
/// <summary>
/// 学籍号/账号
/// </summary>
[ExcelColumn(Name="考号")]
public string ExamNo { get; set; }
/// <summary>
/// 身份证
/// </summary>
[ExcelColumn(Name="身份证")]
public string IdCard { get; set; }
/// <summary>
/// 学校
/// </summary>
[ExcelColumn(Name="学校")]
public string School { get; set; }
/// <summary>
/// 年级
/// </summary>
[ExcelColumn(Name="年级")]
public string Grade { get; set; }
/// <summary>
/// 班级
/// </summary>
[ExcelColumn(Name="班级")]
public string Class { get; set; }
/// <summary>
/// 班级
/// </summary>
[ExcelColumn(Name="班级类型")]
public string ClassType { get; set; }
/// <summary>
/// 科目
/// </summary>
[ExcelColumn(Name="科目")]
public string Subject { get; set; }
/// <summary>
/// 所属云校
/// </summary>
[ExcelColumn(Name="所属云校")]
public string? CloudSchool { get; set; }
/// <summary>
/// 导入失败原因
/// </summary>
[ExcelColumn(Name = "导入失败原因", Width = 50)]
public string ErrorMsg { get; set; }
/// <summary>
/// 账号密码
/// </summary>
[ExcelColumn(Name="账号密码")]
public string Password { get; set; }
/// <summary>
/// 学段
/// </summary>
[ExcelColumn(Name="学段")]
public string? Stages { get; set; }
}
public class StudentInfoRes :UserInfoResponceDto
{
/// <summary>
/// 减免金额
/// </summary>
[SugarColumn(DecimalDigits = 2)]
public decimal AmountRelief { get; set; }
/// <summary>
/// 学生状态
/// </summary>
public UserStatusEnum Status { get; set; }
/// <summary>
/// 备注
/// <para></para>
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 退出时间
/// </summary>
public string? ExitTime { get; set; }
/// <summary>
/// 退出时间
/// </summary>
public string? JoinTime { get; set; }
}
/// <summary>
/// 用户信息
/// </summary>
public class UserInfoResponceDto
{
/// <summary>
///
/// <summary>
public long Id { get; set; }
/// <summary>
/// 模板编号
/// </summary>
public long TemplateId { get; set; }
/// <summary>
/// 电话号码
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 信息模板是否编辑过
/// </summary>
public bool Edited { get; set; }
/// <summary>
/// 用户类型 1学生 2校职工
/// <summary>
public int UserType { get; set; }
/// <summary>
/// 云校id
/// </summary>
public long CloudSchoolId { get; set; }
/// <summary>
/// 账号
/// <summary>
public string Account { get; set; }
/// <summary>
/// 学号
/// <summary>
public string StudentId { get; set; }
/// <summary>
/// 姓名
/// <summary>
public string RealName { get; set; }
/// <summary>
/// 性别 0=男 1=女
/// <summary>
public int Sex { get; set; }
/// <summary>
/// 学科级别
/// </summary>
public UserSubjectLevel SubjectLevel { get; set; }
/// <summary>
/// 出生日期
/// <summary>
public string? BirthDate { get; set; }
/// <summary>
/// 家庭户口
/// <summary>
public string Residence { get; set; }
/// <summary>
/// 民族
/// <summary>
public string National { get; set; }
/// <summary>
/// 头像
/// <summary>
public string HeadImage { get; set; }
public string IdCard { get; set; }
/// <summary>
/// 省Id
/// <summary>
public int Pid { get; set; }
/// <summary>
///
/// <summary>
public string Pname { get; set; }
/// <summary>
/// 市Id
/// <summary>
public int Cid { get; set; }
/// <summary>
///
/// <summary>
public string Cname { get; set; }
/// <summary>
/// 区Id
/// <summary>
public int Rid { get; set; }
/// <summary>
///
/// <summary>
public string Rname { get; set; }
/// <summary>
/// 微信号
/// <summary>
public string Wx { get; set; }
/// <summary>
/// 是否完善信息 0:否 1:是
/// <summary>
public int IsPerfectInfo { get; set; }
/// <summary>
/// 用户层次
/// <summary>
public int Level { get; set; }
/// <summary>
/// 账户状态 0禁用 1正常
/// <summary>
public int State { get; set; }
/// <summary>
/// 会议系统账号
/// <summary>
public string MeetingAccount { get; set; }
public string GKSubject { get; set; }
public int? GLSubject { get; set; }
public int? GSubject1 { get; set; }
public int? GSubject2 { get; set; }
/// <summary>
/// 第三方id
/// </summary>
public string ThirdPartyId { get; set; }
/// <summary>
/// 点阵笔SN
/// </summary>
public string PointPenSN { get; set; }
/// <summary>
/// 职位
/// </summary>
public List<PositionsResponeDto> Positions { get; set; }
}
public class PositionsResponeDto
{
/// <summary>
/// 用户Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 职位编号
/// </summary>
public long Id { get; set; }
/// <summary>
/// 职位名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public long SchoolId { get; set; }
public bool Enable { get; set; }
public DateTime? EndTime { get; set; }
/// <summary>
/// 学校名称
/// </summary>
public string SchoolName { get; set; }
/// <summary>
/// 级别(初/高)
/// </summary>
[Newtonsoft.Json.JsonIgnore]
public string GradeLevel { get; set; }
/// <summary>
/// 所属届
/// </summary>
public int GraduationYear { get; set; }
/// <summary>
/// 年级
/// </summary>
public string Grade { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public long ClassId { get; set; }
/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 科目编号
/// </summary>
public int SubjectId { get; set; }
/// <summary>
/// 科目名称
/// </summary>
public string SubjectName { get; set; }
/// <summary>
/// 职位类型1学生 2校职工
/// </summary>
public int PositionType { get; set; }
/// <summary>
/// 职级1校级 2年级 3班级
/// </summary>
public int PositionLevel { get; set; }
/// <summary>
/// 职位状态
/// </summary>
public bool Status { get; set; }
}
}

View File

@ -8,6 +8,7 @@ namespace Learn.Archives.Core.Model.Enum
{ {
public enum UserStatusEnum public enum UserStatusEnum
{ {
=0,
=1, =1,
退=10, 退=10,
} }

View File

@ -1,4 +1,5 @@
using Learn.Archives.Core.Model.Interface; using Learn.Archives.Core.Model.Enum;
using Learn.Archives.Core.Model.Interface;
using SqlSugar; using SqlSugar;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Net; using System.Net;
@ -30,26 +31,26 @@ namespace Learn.Archives.Core.Model
/// <summary> /// <summary>
/// 学生状态 /// 学生状态
/// </summary> /// </summary>
public UserSourceEnum Status { get; set; } public UserStatusEnum Status { get; set; }
/// <summary> /// <summary>
/// 备注 /// 备注
/// <para></para> /// <para></para>
/// </summary> /// </summary>
[SugarColumn(IsNullable = true)] [SugarColumn(IsNullable = true,Length = 500)]
public string? Remark { get; set; } public string? Remark { get; set; }
/// <summary> /// <summary>
/// 退出时间 /// 退出时间
/// </summary> /// </summary>
[SugarColumn(IsNullable = true)] [SugarColumn(IsNullable = true)]
public DateTime ExitTime { get; set; } = DateTime.Now; public DateTime? ExitTime { get; set; } = DateTime.Now;
/// <summary> /// <summary>
/// 退出时间 /// 退出时间
/// </summary> /// </summary>
[SugarColumn(IsNullable = true)] [SugarColumn(IsNullable = true)]
public DateTime JoinTime { get; set; } = DateTime.Now; public DateTime? JoinTime { get; set; } = DateTime.Now;
/// <summary> /// <summary>
/// 创建时间 /// 创建时间