using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using New_College.Model; using New_College.Model.ViewModels; using New_College.IServices; using New_College.Model.Models; using System.Linq.Expressions; using New_College.IRepository.UnitOfWork; using SqlSugar; using New_College.Common; using Microsoft.AspNetCore.Authorization; using StackExchange.Profiling.Internal; using Newtonsoft.Json; using System.IO; using MiniExcelLibs; using PDFGenerateApi; namespace New_College.Api.Controllers.Front { /// /// PC志愿表管理 /// [Route("api/front/[controller]")] [ApiController] public class PcVolunteerController : ControllerBase { private readonly IU_VolunteerTableServices _VolunteerTableServices; private readonly IU_VolunteerTableDetailServices _VolunteerTableDetailServices; private readonly IUnitOfWork _unitOfWork; private readonly IT_TbSNeedDataInfoServices _TbSNeedDataInfoServices; public PcVolunteerController(IU_VolunteerTableServices volunteerTableServices, IU_VolunteerTableDetailServices volunteerTableDetailServices, IUnitOfWork unitOfWork, IT_TbSNeedDataInfoServices tbSNeedDataInfoServices) { _VolunteerTableServices = volunteerTableServices; _VolunteerTableDetailServices = volunteerTableDetailServices; _unitOfWork = unitOfWork; _TbSNeedDataInfoServices = tbSNeedDataInfoServices; } /// /// Pc端查询我的志愿列表 /// /// /// [HttpGet("GetPage")] public async Task>> GetPage([FromQuery] VolunteerTableRequestView view) { if (view.CustomerId <= 0) { return new MessageModel>() { msg = "CustomerId 为必传参数" }; } var response = new PageModel(); Expression> exp = Expressionable.Create() .And(c => c.IsDelete == false) .And(c => c.CustomerId == view.CustomerId) .ToExpression(); var pagemodel = await _VolunteerTableServices.QueryPage(exp, view.PageIndex, view.PageSize, " CreateTime desc"); response.data = pagemodel.data.Select(c => new VolunteerTableDtoView() { CustomerId = c.CustomerId, Score = c.Score, SubjectClaim = c.SubjectClaim, Type = c.Type, VId = c.Id, VolunteerTableName = c.VolunteerTableName, BatchName = c.BatchName, CreateTime = c.CreateTime, ModifyTime = c.ModifyTime, CP = "靠谱99%" }).ToList(); response.pageCount = pagemodel.pageCount; response.page = pagemodel.page; response.PageSize = view.PageSize; response.dataCount = pagemodel.dataCount; return new MessageModel>() { msg = "获取成功", success = true, response = response }; } /// /// Pc查询单个志愿表详情信息 /// /// 志愿表Id /// [HttpGet("Get")] public async Task> Get([FromQuery] int id = 0) { if (id <= 0) { return new MessageModel() { msg = "id 为必传参数" }; } var view = new VolunteerTableDetailDtoView(); var query = await _VolunteerTableServices.QueryById(id); var items = await _VolunteerTableDetailServices.Query(c => c.VolunteerTableId == id); var PlanMajorIds = new List(); foreach (var item in items) { var ids = item.PlanMajorIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(c => int.Parse(c)).ToList(); PlanMajorIds.AddRange(ids); } var planmajordesc = await _TbSNeedDataInfoServices.Query(c => SqlFunc.ContainsArray(PlanMajorIds, c.ID));// var location = planmajordesc.FirstOrDefault().Location; var majorlist = planmajordesc.Select(c => c.MajorName).ToList(); var universityname = planmajordesc.Select(c => c.UniversityName).Distinct().ToList(); var planmajorcomplist = await _TbSNeedDataInfoServices.Query(c => c.Location == location && SqlFunc.ContainsArray(majorlist, c.MajorName) && SqlFunc.ContainsArray(universityname, c.UniversityName));// view.VolunteerTableName = query.VolunteerTableName; view.SubjectClaim = query.SubjectClaim.Length > 2 ? "综合" : query.SubjectClaim; view.CustomerId = query.CustomerId; view.Score = query.Score; view.Type = query.Type; view.BatchName = query.BatchName; view.CreateTime = query.CreateTime; view.ModifyTime = query.ModifyTime; var tableDetailItemsViews = new List(); items.ForEach(s => { var planids = s.PlanMajorIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(ss => long.Parse(ss)).ToList(); var typeinfo = new List(); if (!string.IsNullOrWhiteSpace(s.VolunteerRemark)) { typeinfo = s.VolunteerRemark.FromJson>(); } var planstatus = planmajordesc.Any(e => e.UniversityName == s.UniversityName); var firstmodels = planmajordesc.Where(e => e.UniversityName == s.UniversityName).FirstOrDefault(); var uitem = new VolunteerTableDetailItemsView() { UniversityName = s.UniversityName, UniversityCode = s.UniversityCode, Sort = s.OrderSort, UniversityId = s.UniversityId, _211 = planstatus ? firstmodels.LnstitutionalLevel != null ? firstmodels.LnstitutionalLevel.Contains("211") ? "是" : "否" : "否" : "否", _985 = planstatus ? firstmodels.LnstitutionalLevel != null ? firstmodels.LnstitutionalLevel.Contains("985") ? "是" : "否" : "否" : "否", _SYL = planstatus ? firstmodels.LnstitutionalLevel != null ? firstmodels.LnstitutionalLevel.Contains("双一流") ? "是" : "否" : "否" : "否", Ownership = planstatus ? firstmodels.Ownership != null ? firstmodels.Ownership.Contains("省") ? "省属" : firstmodels.Ownership.Contains("市") ? "市属" : firstmodels.Ownership : "" : "", AreaName = planstatus ? firstmodels.Province != null ? firstmodels.Province + "|" + (planstatus ? firstmodels.City : "") : "" : "", Nature = planstatus ? firstmodels.Nature != null ? firstmodels.Nature : "" : "", Rank = planstatus ? ((string.IsNullOrEmpty(firstmodels.UniversityRank) || firstmodels.UniversityRank == "0") ? "--" : firstmodels.UniversityRank) : "--", planMajorItems = planmajordesc.Where(ww => planids.Contains(ww.ID)).Select(c => new VolunteerTablePlanMajorItem() { fee = string.IsNullOrEmpty(c.Fee) ? "--" : c.Fee, Major = c.MajorName, MajorCode = c.MajorCode, // MajorGroup = c.MajorGroup, MajorRemark = c.Remark, planCount = c._plancount, PlanId = c.ID, AcademicYear = c.AcademicYear, Sort = s.OrderSort, SubjectClam = c._23subject, Percentage = typeinfo.Any() && typeinfo.Count() > 0 ? typeinfo.FirstOrDefault(d => d.planId == c.ID).tage : 0, Type = typeinfo.Any() && typeinfo.Count() > 0 ? typeinfo.FirstOrDefault(d => d.planId == c.ID).type : 0, PlanItems = new List() { new PlanItem() { PlanCount=c._23Count=="0"?"--":c._23Count, RankLine=c._23ScoreLine==0?"--":c._23ScoreLine.ToString(), Scoreline=c._23Score == "0" ? "--" : c._23Score, Year="2023" }, new PlanItem() { PlanCount=c._22Count=="0"?"--":c._22Count, RankLine=c._22ScoreLine=="0"?"--":c._22ScoreLine, Scoreline=c._22Score == "0" ? "--" : c._22Score, Year="2022" }, new PlanItem() { PlanCount=c._21Count=="0"?"--":c._21Count, RankLine=c._21ScoreLine=="0"?"--":c._21ScoreLine, Scoreline=c._21Score == "0" ? "--" : c._21Score, Year="2021" } } }).ToList() }; tableDetailItemsViews.Add(uitem); }); view.tableDetailItemsViews = tableDetailItemsViews; return new MessageModel() { msg = "获取成功", success = true, response = view }; } /// /// /// /// /// [HttpGet("generate")] public IActionResult Generate([FromQuery] MinExcelAttrDto dto) { string[] unversityheaders = { "志愿", "概率", "院校代码", "院校名称", "24招生计划", "历年", "2023", "2022", "2021" }; var stream = PdfOptHelper.CreatePdf("test", unversityheaders.ToList(), new List() { new PdfOptHelper.dataModel() { id=1, history="录取人数\n计划人数\n最低分\n最低位次\n效位差", planName="A222", probability="90%", universityCode="A99", universityName="中科大大家四大石窟记得哈就开始大肆扩大数据库", years=new List(){"2023", "2022", "2021" } } }); // 返回 PDF 文件 return File(stream.ToArray(), "application/pdf", "table_example_with_logo_and_title.pdf"); } [HttpGet("Export")] public async Task Export([FromQuery] MinExcelAttrDto dto) { if (dto.id <= 0) { throw new Exception("id为空"); } var view = new VolunteerExcelAttrModel(); var query = await _VolunteerTableServices.QueryById(dto.id); var items = await _VolunteerTableDetailServices.Query(c => c.VolunteerTableId == dto.id); var PlanMajorIds = new List(); foreach (var item in items) { var ids = item.PlanMajorIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(c => int.Parse(c)).ToList(); PlanMajorIds.AddRange(ids); } var planmajordesc = await _TbSNeedDataInfoServices.Query(c => SqlFunc.ContainsArray(PlanMajorIds, c.ID));// var location = planmajordesc.FirstOrDefault().Location; var majorlist = planmajordesc.Select(c => c.MajorName).ToList(); var universityname = planmajordesc.Select(c => c.UniversityName).Distinct().ToList(); var planmajorcomplist = await _TbSNeedDataInfoServices.Query(c => c.Location == location && SqlFunc.ContainsArray(majorlist, c.MajorName) && SqlFunc.ContainsArray(universityname, c.UniversityName));// view.VolunteerTableName = query.VolunteerTableName; view.SubjectClaim = query.SubjectClaim; view.Score = query.Score; view.Type = query.Type; var tableDetailItemsViews = new List(); items.ForEach(s => { var planids = s.PlanMajorIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(ss => long.Parse(ss)).ToList(); var typeinfo = new List(); if (!string.IsNullOrWhiteSpace(s.VolunteerRemark)) { typeinfo = s.VolunteerRemark.FromJson>(); } var planstatus = planmajordesc.Any(e => e.UniversityName == s.UniversityName); var firstmodels = planmajordesc.Where(e => e.UniversityName == s.UniversityName).FirstOrDefault(); planmajordesc.Where(ww => planids.Contains(ww.ID)).ToList().ForEach(a => { tableDetailItemsViews.Add(new VolunteerItemsViewMinExcelAttr() { UniversityName = s.UniversityName, UniversityCode = s.UniversityCode, AreaName = planstatus ? firstmodels.Province != null ? firstmodels.Province + "|" + (planstatus ? firstmodels.City : "") : "" : "", Nature = planstatus ? firstmodels.Nature != null ? firstmodels.Nature : "" : "", fee = string.IsNullOrEmpty(a.Fee) ? "--" : a.Fee, Major = a.MajorName, MajorCode = a.MajorCode, // MajorGroup = a.MajorGroup, //// MajorRemark = a.Remark, planCount = a._plancount, AcademicYear = a.AcademicYear, Sort = s.OrderSort, MajorSubjectClam = a._23subject, MajorGroup = a.MajorGroup, Percentage = typeinfo.Where(e => e.planId == a.ID).FirstOrDefault().tage.ToString() + "%", _23PlanCount = a._23Count == "0" ? "--" : a._23Count, _22PlanCount = a._22Count == "0" ? "--" : a._22Count, _21PlanCount = a._21Count == "0" ? "--" : a._21Count, _21RankLine = a._21ScoreLine == "0" ? "--" : a._21ScoreLine, _21Scoreline = a._21Score == "0" ? "--" : a._21Score, _22RankLine = a._22ScoreLine == "0" ? "--" : a._22ScoreLine, _22Scoreline = a._22Score == "0" ? "--" : a._22Score, _23RankLine = a._23ScoreLine == 0 ? "--" : a._23ScoreLine.ToString(), _23Scoreline = a._23Score == "0" ? "--" : a._23Score, }); }); }); // view.viewMinExcelAttrs = tableDetailItemsViews; //在内存中当开辟空间 var memoryStream = new MemoryStream(); //将数据写到内存当中 memoryStream.SaveAs(tableDetailItemsViews, true, string.Format("模拟志愿表:_{0}_选科:{1}|_分数:{2}|_类型_{3}", view.VolunteerTableName, view.SubjectClaim, view.Score, view.Type)); //从0的位置开始写入 memoryStream.Seek(0, SeekOrigin.Begin); //返回文件流 //格式是Excel格式 return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("{0}.xlsx", DateTime.Now.ToString("yyyyMMddhhssfff_")) }; } /// /// PC志愿表新增 /// /// /// [HttpPost("Post")] public async Task> Post([FromBody] VolunteerTableDtoView request) { if (request.CustomerId <= 0) { return new MessageModel() { msg = "用户Id" }; } var data = new MessageModel(); int ordersort = 0; if (string.IsNullOrWhiteSpace(request.VolunteerTableName)) { var vol = (await _VolunteerTableServices.Query(c => c.CustomerId == request.CustomerId)); if (vol.Any()) { request.VolunteerTableName = "我的志愿表" + (vol.OrderByDescending(c => c.CreateTime).FirstOrDefault().OrderSort + 1); ordersort = (vol.OrderByDescending(c => c.CreateTime).FirstOrDefault().OrderSort + 1); } else { request.VolunteerTableName = "我的志愿表01"; ordersort = 1; } } _unitOfWork.BeginTran(); var id = await _VolunteerTableServices.Add(new U_VolunteerTable() { CreateTime = DateTime.Now, CustomerId = request.CustomerId, ModifyTime = DateTime.Now, OrderSort = ordersort, IsDelete = false, SubjectClaim = request.SubjectClaim, Type = request.Type, Score = request.Score, BatchName = request.BatchName, VolunteerTableName = request.VolunteerTableName, }); int itemIds = 0; if (id > 0) { var itemlist = request.volunteerTableDetailViews.Select(c => new U_VolunteerTableDetail() { CreateTime = DateTime.Now, IsDelete = false, ModifyTime = DateTime.Now, OrderSort = c.Sort, PlanMajorIds = c.PlanMajorIds, UniversityCode = c.UniversityCode, UniversityId = c.UniversityId, UniversityName = c.UniversityName, VolunteerTableId = id, VolunteerRemark = JsonConvert.SerializeObject(c.VolunteerRemark) }).ToList(); itemIds = await _VolunteerTableDetailServices.Add(itemlist); } if (id > 0 && itemIds == request.volunteerTableDetailViews.Count() && itemIds > 0) { _unitOfWork.CommitTran(); } else { _unitOfWork.RollbackTran(); } data.success = id > 0; if (data.success) { data.response = id.ObjToString(); data.msg = "添加成功"; } return data; } /// /// Pc修改志愿表 /// /// /// [HttpPut("Put")] public async Task> Put([FromBody] VolunteerTableDtoView request) { var data = new MessageModel(); if (request.VId > 0) { var model = await _VolunteerTableServices.QueryById(request.VId); _unitOfWork.BeginTran(); if (!string.IsNullOrWhiteSpace(request.BatchName)) { model.BatchName = request.BatchName; } if (!string.IsNullOrWhiteSpace(request.SubjectClaim)) { model.SubjectClaim = request.SubjectClaim; } if (!string.IsNullOrWhiteSpace(request.Type)) { model.Type = request.Type; } if (!string.IsNullOrWhiteSpace(request.VolunteerTableName)) { model.VolunteerTableName = request.VolunteerTableName; } if (request.CustomerId > 0) { model.CustomerId = request.CustomerId; } if (request.Score > 0) { model.Score = request.Score; } model.ModifyTime = DateTime.Now; data.success = await _VolunteerTableServices.Update(model); //删掉之前的志愿表,更新新的匹配进来 var itemids = (await _VolunteerTableDetailServices.Query(c => c.VolunteerTableId == request.VId)).Select(c => (object)c.Id).ToArray(); var status = await _VolunteerTableDetailServices.DeleteByIds(itemids); var itemlist = request.volunteerTableDetailViews.Select(c => new U_VolunteerTableDetail() { CreateTime = DateTime.Now, IsDelete = false, ModifyTime = DateTime.Now, OrderSort = c.Sort, PlanMajorIds = c.PlanMajorIds, UniversityCode = c.UniversityCode, UniversityId = c.UniversityId, UniversityName = c.UniversityName, VolunteerRemark = JsonConvert.SerializeObject(c.VolunteerRemark), VolunteerTableId = request.VId, }).ToList(); var itemIds = await _VolunteerTableDetailServices.Add(itemlist); if (itemIds > 0 && data.success) { _unitOfWork.CommitTran(); data.msg = "更新成功"; data.response = request?.VId.ObjToString(); } else { _unitOfWork.RollbackTran(); } } else { return new MessageModel() { msg = "VId 必传", success = false }; } return data; } /// /// Pc删除志愿表 /// /// /// [HttpDelete("Delete/{id}")] public async Task> Delete(int id = 0) { var data = new MessageModel(); if (id > 0) { var detail = await _VolunteerTableServices.QueryById(id); detail.IsDelete = true; if (detail != null) { _unitOfWork.BeginTran(); data.success = await _VolunteerTableServices.Update(detail); var itemids = (await _VolunteerTableDetailServices.Query(c => c.VolunteerTableId == id)).Select(c => (object)c.Id).ToArray(); var status = await _VolunteerTableDetailServices.DeleteByIds(itemids); if (status && data.success) { _unitOfWork.CommitTran(); } else { _unitOfWork.RollbackTran(); return new MessageModel() { msg = "删除失败" }; }; } if (data.success) { data.msg = "删除成功"; data.response = detail?.Id.ObjToString(); } } return data; } /// /// /// /// /// [AllowAnonymous] [HttpGet("downloadpdf")] public async Task DownloadPdf(string url) { var htmlContent = await HtmlHeplerFetcher.GetHtmlContentAsync(url); // 假设pdfBytes是已存在的PDF文件字节流 byte[] pdfBytes = new HtmlToPdfConverter().ConvertHtmlToPdf(htmlContent); // 设置响应头,指定Content-Type和文件名 Response.Headers.Add("Content-Disposition", string.Format("attachment; filename={0}.pdf", DateTime.Now.ToString("MMddHHmmssfff"))); Response.ContentType = "application/pdf"; return File(pdfBytes, "application/pdf"); } } }