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
{
///
/// 年级控制器
///
public class StudentController : BackController
{
private readonly IHttpContextAccessor _httpContextAccessor;
readonly Repository baseService;
readonly UserCenterService _userCenterService;
readonly LiveUserInfo userInfo;
public StudentController(Repository baseService, LiveUserInfo userInfo, IHttpContextAccessor httpContextAccessor, UserCenterService userCenterService) : base(baseService)
{
this.baseService = baseService;
this.userInfo = userInfo;
_httpContextAccessor = httpContextAccessor;
_userCenterService = userCenterService;
}
[NonAction]
public override Task PageList([FromBody] QueryRequestBase model)
{
return base.PageList(model);
}
///
/// 用户信息
///
///
[HttpGet]
public async Task Info(long uid)
{
if (uid == 0)
Oh.ModelError("无效数据");
return await baseService.AsQueryable().FirstAsync(s => s.UserCenterId == uid);
}
///
/// 修改用户信息
/// 调用流程 用户中心->档案系统
///
///
[HttpPost]
public async Task 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;
}
///
/// 设置角色菜单
///
///
[HttpPost]
public new async Task> PageList()
{
var apiRes =await _userCenterService.CallAPI_GetPageUserList(_httpContextAccessor.HttpContext);
var res= new PageResult() { Data = new List() };
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()))
{
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;
}
///
/// 导入考试信息
///
///
[HttpPost, ResultIgnore]
[HttpLogEnable]
public async Task 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 dataList;
using var stream = new MemoryStream();
{
await fl.CopyToAsync(stream);
dataList = stream.Query()
.Where(s => !string.IsNullOrEmpty(s.School));
}
if (dataList == null || dataList.Count() == 0)
Oh.ModelError("导入失败:无有效数据");
var insertInfo = new List();
var userCenterImp = new List();
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()??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());
//如果有错误数据则返回excel
if (errorExcelInfo.Count() != 0)
return File(errorExcelInfo.ExportExcel(), "application/ms-excel");
return Ok();
}
}
}