完善 学生流程
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.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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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, //用户中心
|
||||||
|
|
|
||||||
|
|
@ -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, //用户中心
|
||||||
|
|
|
||||||
|
|
@ -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="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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
/// 消息码
|
/// 消息码
|
||||||
|
|
|
||||||
|
|
@ -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
|
public enum UserStatusEnum
|
||||||
{
|
{
|
||||||
|
未录入=0,
|
||||||
就读=1,
|
就读=1,
|
||||||
退出=10,
|
退出=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 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>
|
||||||
/// 创建时间
|
/// 创建时间
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue