完善 学生流程
This commit is contained in:
parent
a414aecac3
commit
6b310cb4d4
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -37,6 +37,7 @@ builder.Services.AddRedisExpand();
|
|||
builder.Services.AddCorsExpand();
|
||||
builder.Services.AddMapster();
|
||||
builder.Services.AddLiveUserInfoExpand();
|
||||
builder.Services.AddUserCenterServiceExpand();
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddHttpContextAccessor();
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@
|
|||
"SqlType": "MySql",
|
||||
"UpdateTable": false
|
||||
},
|
||||
"UserCenterService": {
|
||||
"API": "https://dcb.23544.com/api"
|
||||
},
|
||||
"OtherDBArr": [
|
||||
{
|
||||
"ConfigId": 1001, //用户中心
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
},
|
||||
"AllowedHosts": "*",
|
||||
"AppConfig": {
|
||||
"ID": 1, //程序唯一值
|
||||
"ID": 2, //程序唯一值
|
||||
"Redis": {
|
||||
"ConnectionString": "127.0.0.1:6379,password=Woshiren123,defaultDatabase=10"
|
||||
},
|
||||
"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;",
|
||||
"SqlType": "MySql",
|
||||
"UpdateTable": true
|
||||
"UpdateTable": false
|
||||
},
|
||||
"AuthKey": {
|
||||
"Secret": "9FAB7AC7-F1DB-4C56-B84F-044055A34AF2",
|
||||
|
|
@ -22,6 +22,9 @@
|
|||
"Audience": "Admin",
|
||||
"Expires": 120 // 过期时间120小时
|
||||
},
|
||||
"UserCenterService": {
|
||||
"API": "https://dca.w.23544.com:8843/api"
|
||||
},
|
||||
"OtherDBArr": [
|
||||
{
|
||||
"ConfigId": 1001, //用户中心
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -28,6 +28,6 @@
|
|||
<PackageReference Include="SqlSugar.IOC" Version="2.0.0" />
|
||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.170" />
|
||||
<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>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ namespace Learn.Archives.Core.Model.Dto
|
|||
}
|
||||
public class BaseReturn<T>
|
||||
{
|
||||
public required T? Data { get; set; }
|
||||
public T? Data { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 消息码
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ namespace Learn.Archives.Core.Model.Enum
|
|||
{
|
||||
public enum UserStatusEnum
|
||||
{
|
||||
未录入=0,
|
||||
就读=1,
|
||||
退出=10,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 System.ComponentModel.DataAnnotations;
|
||||
using System.Net;
|
||||
|
|
@ -30,26 +31,26 @@ namespace Learn.Archives.Core.Model
|
|||
/// <summary>
|
||||
/// 学生状态
|
||||
/// </summary>
|
||||
public UserSourceEnum Status { get; set; }
|
||||
public UserStatusEnum Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// <para></para>
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
[SugarColumn(IsNullable = true,Length = 500)]
|
||||
public string? Remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 退出时间
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public DateTime ExitTime { get; set; } = DateTime.Now;
|
||||
public DateTime? ExitTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 退出时间
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public DateTime JoinTime { get; set; } = DateTime.Now;
|
||||
public DateTime? JoinTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
|
|
|
|||
Loading…
Reference in New Issue