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(); } } }