using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using LinqKit; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using New_College.IServices; using New_College.Model; using New_College.Model.Models; using New_College.Model.Request; using New_College.Model.ViewModels; using Newtonsoft.Json; using SqlSugar; namespace New_College.Api.Controllers.Front { /// /// 新高考选科 /// [Route("api/[controller]")] [ApiController] //[Authorize] public class FrontSelectionController : ControllerBase { private readonly ISubjectSelectionServices _selectionServices; private readonly ID_MajorClassServices _MajorClassServices; private readonly ID_MajorCategoryServices _MajorCategoryServices; private readonly ID_MajorServices _MajorServices; public FrontSelectionController(ISubjectSelectionServices subjectSelection, ID_MajorClassServices majorClassServices, ID_MajorCategoryServices majorCategoryServices, ID_MajorServices majorServices) { this._selectionServices = subjectSelection; _MajorClassServices = majorClassServices; _MajorCategoryServices = majorCategoryServices; _MajorServices = majorServices; } /// /// 获取专业类别 /// /// [HttpGet] [Route("GetMajorClassList")] public async Task>> GetMajorClassList() { var roottrees = new List(); var categoryids = (await _MajorCategoryServices.Query(c => c.Type == 1)).Select(c => c.Id); var majorlist = await _MajorClassServices.Query(c => SqlFunc.ContainsArray(categoryids.ToList(), c.TradeId)); roottrees = majorlist.Select(c => new uniMajorInfoResult() { FirstName = c.Name, RootId = c.Id }).ToList(); var majoritems = await _MajorServices.Query(c => c.IsDelete == false && SqlFunc.ContainsArray(roottrees.Select(c => c.RootId).ToList(), c.CategoryClass_Id)); roottrees.ForEach(a => { a.SecondInfo = majoritems.Where(c => c.CategoryClass_Id == a.RootId).Select(t => new uniMajorSecond() { MajorName = t.MajorName, SecondId = t.Id }).ToList(); }); return new MessageModel>() { response = roottrees, success = true, msg = "ok" }; } /// /// 根据院校和专业名称查询选科组合情况 /// /// /// [HttpGet] public async Task>> GetSubjectSelects([FromQuery] SelectionServiceRequest request) { try { request.PageSize = 50; Expression> exp = Expressionable.Create() //创建表达式 .AndIF(!string.IsNullOrEmpty(request.UniversityName), w => SqlFunc.ContainsArray(JsonConvert.DeserializeObject>(request.UniversityName), w.UniversityName)) .AndIF(!string.IsNullOrEmpty(request.MajorName), w => SqlFunc.ContainsArray(JsonConvert.DeserializeObject>(request.MajorName), w.MajorName)) .AndIF(!string.IsNullOrWhiteSpace(request.Location), w => w.Province == request.Location) .AndIF(request.Years > 0, w => w.AcademicYear == request.Years.ToString()) .ToExpression();//注意 这一句 不能少 var subjectlist = await _selectionServices.QueryPage(exp, request.PageIndex, request.PageSize); return new MessageModel>() { msg = "success", response = subjectlist, success = true }; } catch (Exception ex) { return new MessageModel>() { msg = ex.Message }; } } /// /// 获取选科数据结果 /// /// /// [HttpPost] [Route("GetSelect")] public async Task>> GetSelect([FromBody] SelectionRequest request) { var response = new List(); Expression> exp = Expressionable.Create() //创建表达式 .AndIF(request.UniversityName != null && request.UniversityName.Count() > 0, w => SqlFunc.ContainsArray(request.UniversityName, w.UniversityName)) .AndIF(request.MajorName != null && request.MajorName.Count() > 0, w => SqlFunc.ContainsArray(request.MajorName, w.MajorName)) .AndIF(!string.IsNullOrWhiteSpace(request.LocationCode), w => w.Province == request.LocationCode) .And(w => w.AcademicYear == DateTime.Now.Year.ToString()) .ToExpression();//注意 这一句 不能少 var subjectlist = await _selectionServices.Query(exp); var rplist = subjectlist.Select(c => new SelectionMajorDto() { MajorName = c.MajorName.Contains("(") ? c.MajorName.Split('(')[0].ToString() : c.MajorName }).DistinctBy(c => c.MajorName).ToList(); rplist.ForEach(a => { var selectlist = subjectlist.Where(e => e.MajorName.Contains(a.MajorName)).Select(c => new SelectResponseDto() { Selection = c.Selection.ToString(), UniversityName = c.UniversityName.ToString() }).Distinct().ToList(); response.Add(new SelectionResponseDto() { selects = selectlist, MajorName = a.MajorName }); }); return new MessageModel>() { response = response, success = true, msg = "ok" }; } } }