using New_College.IServices; using New_College.Model.Models; using New_College.Services.BASE; using New_College.IRepository.Base; using System.Collections.Generic; using New_College.Model.ViewModels; using System.Linq; using Newtonsoft.Json; using System.Threading.Tasks; using New_College.Common.Helper; using New_College.IRepository; using System.Reflection; using System; using System.Text; using New_College.Model; namespace New_College.Services { public class Test_PsychMeasurementInfoServices : BaseServices, ITest_PsychMeasurementInfoServices { private readonly IBaseRepository _dal; private readonly ITest_QuestionTypeInfoRepository _QuestionTypeInfoRepository; private readonly ITest_MBTIMapResultRepository test_MBTIMapResultRepository; private readonly ITest_CycleTimeInfoRepository test_CycleTimeInfoRepository; private readonly IV_SubjectSelectRepository v_SubjectSelectRepository; private readonly IT_PlanMapTagRepository t_PlanMapTagRepository; private readonly IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository; private readonly IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository; public Test_PsychMeasurementInfoServices(IBaseRepository dal , ITest_QuestionTypeInfoRepository ITest_QuestionTypeInfoRepository , ITest_MBTIMapResultRepository ITest_MBTIMapResultRepository , ITest_CycleTimeInfoRepository ITest_CycleTimeInfoRepository , IV_SubjectSelectRepository IV_SubjectSelectRepository , IT_PlanMapTagRepository IT_PlanMapTagRepository , IT_EnrollmentPlaneRepository IT_EnrollmentPlaneRepository , IT_EnrollmentPlanedescRepository IT_EnrollmentPlanedescRepository) { this._dal = dal; _QuestionTypeInfoRepository = ITest_QuestionTypeInfoRepository; test_MBTIMapResultRepository = ITest_MBTIMapResultRepository; test_CycleTimeInfoRepository = ITest_CycleTimeInfoRepository; v_SubjectSelectRepository = IV_SubjectSelectRepository; t_PlanMapTagRepository = IT_PlanMapTagRepository; t_EnrollmentPlaneRepository = IT_EnrollmentPlaneRepository; t_EnrollmentPlanedescRepository = IT_EnrollmentPlanedescRepository; base.BaseDal = dal; } public List permut = new List(); /// /// 获取个人某个维度测评结果 /// /// /// public async Task> GetPsychListByCateAndCustomerId(PsychMeasurementQuery query) { var info = await _dal.Query(x => x.IsDelete == false && x.CategoryId == query.CategoryId && x.StudentId == query.StudentId); if (info.Count <= 0) return new List() { }; var cycids = info.Select(x => x.CycleTimeId).ToList(); var cycinfo = await test_CycleTimeInfoRepository.Query(x => x.IsDelete == false && cycids.Contains(x.Id)); List list = new List() { }; foreach (var item in info) { var cycname = cycinfo.Where(x => x.Id == item.CycleTimeId).Select(x => x.CycleName)?.FirstOrDefault(); if (!string.IsNullOrWhiteSpace(cycname)) list.Add(new PsychMeasurementListResult() { Id = item.Id, CreateTime = item.CreateTime, CycleTimeId = item.CycleTimeId, CycleName = cycname, IsOpen = item.IsOpen }); } return list; } /// /// 提交 /// /// public async Task SavePsych(SavePsychQuery query) { var IsOpen = 1; var result = ""; //if (query.Type == 2) //{ // result = JsonConvert.SerializeObject(query.CareerResult); //} //else if (query.Type == 1) { if (query.CategoryId == 11) { var item = DirectionChangeXXFG(query); result = JsonConvert.SerializeObject(item); } else { var ListType = (await _QuestionTypeInfoRepository.Query(x => x.IsDelete == false)).Select(x => x.Name).ToList(); var item = DirectionChange(query, ListType); result = JsonConvert.SerializeObject(item); } } else if (query.Type == 3) { IsOpen = 0; if (query.CategoryId == 15) { var item = DirectionChangeMENTAL(query); result = JsonConvert.SerializeObject(item); } else { var item = PshchDirectionChange(query); result = JsonConvert.SerializeObject(item); } } else if (query.CategoryId == 20) { result = JsonConvert.SerializeObject(query.Result); } var info = await _dal.Add(new Test_PsychMeasurementInfo() { StudentId = query.StudentId, CategoryId = query.CategoryId, CycleTimeId = 109, //ClassName = query.ClassName, //GradeName = query.GradeName, IsOpen = IsOpen, Result = result }); if (info > 0) { ////生涯能力数据处理 //if (query.Type == 2) //{ // #region 能力评估 // UpdateEval(query.CareerResult, query.CategoryId, query.StudentId); // #endregion // #region 变化反馈 // UpdateGrow(query.CareerResult, query.CycleTimeId, query.CategoryId, query.StudentId); // #endregion //} return true; } else { return false; } } #region 提交 数据处理 /// /// 普通 学生发展用 /// /// /// public List DirectionChange(SavePsychQuery query, List ListType) { var Result = new List(); var QuestionType = query.second.Select(p => p.Tag).Distinct().ToList(); foreach (var item in QuestionType) { if (item != "null" && ListType.Contains(item)) { var seconddto = new IntellectJson(); seconddto.value = query.second.Where(m => m.Tag == item).Sum(p => p.Status); seconddto.name = item; Result.Add(seconddto); } } return Result; } /// /// 普通 心理测量用 /// /// /// public List PshchDirectionChange(SavePsychQuery query) { var Result = new List(); var QuestionType = query.second.Select(p => p.Tag).Distinct().ToList(); foreach (var item in QuestionType) { if (item != "null") { var seconddto = new IntellectJson(); seconddto.value = query.second.Where(m => m.Tag == item).Sum(p => p.Status); seconddto.name = item; Result.Add(seconddto); } } return Result; } /// /// 学习风格专用 /// /// /// /// private List DirectionChangeXXFG(SavePsychQuery requestDTO) { List list = new List() { }; var json = new IntellectJson(); var A = 0; var P = 0; var R = 0; var T = 0; int[] styleA = { 2, 5, 8, 15, 19, 23, 26, 35, 36, 40 }; int[] styleP = { 4, 7, 9, 14, 20, 24, 27, 31, 34, 37 }; int[] styleR = { 11, 12, 16, 18, 21, 25, 29, 30, 32, 33 }; int[] styleT = { 1, 3, 6, 10, 13, 17, 22, 28, 38, 39 }; foreach (var item in requestDTO.second) { if (styleA.Contains(item.Id)) { A += item.Status; } else if (styleP.Contains(item.Id)) { P += item.Status; } else if (styleR.Contains(item.Id)) { R += item.Status; } else if (styleT.Contains(item.Id)) { T += item.Status; } } list.AddRange(new List{new IntellectJson { name = "冲动型", value = A }, new IntellectJson { name = "务实型", value = P }, new IntellectJson { name = "反思型", value = R }, new IntellectJson { name = "理论型", value = T } }); return list;//JsonConvert.SerializeObject(list); // return "[{\"name\":\"冲动型\",\"value\":" + A + "},{\"name\":\"务实型\",\"value\":" + P + "},{\"name\":\"反思型\",\"value\":" + R + "},{\"name\":\"理论型\",\"value\":" + T + "}]"; } /// /// mht专用 /// /// /// /// /// private List DirectionChangeMENTAL(SavePsychQuery requestDTO) { List list = new List() { }; var xxjl = 0; var drjl = 0; var gdqx = 0; var zzqx = 0; var gmqx = 0; var stzz = 0; var kbqx = 0; var cdqx = 0; int[] xuexijiaolv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };//学习焦虑 int[] duirenjiaolv = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };//对人焦虑 int[] guduqingxiang = { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 };//孤独倾向 int[] zizeqingxiang = { 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 };//自责倾向 int[] guomingqingxiang = { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 };//过敏倾向 int[] shentizhengzhuang = { 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 };//身体症状 int[] kongbuqingxiang = { 71, 72, 73, 74, 75, 76, 77, 78, 79, 80 };//恐怖倾向 int[] chongdongqingxiang = { 81, 83, 85, 87, 89, 91, 93, 95, 97, 99 };//冲动倾向 int[] valids = { 82, 84, 86, 88, 90, 92, 94, 96, 98, 100 }; //测谎题 foreach (var item in requestDTO.second) { if (xuexijiaolv.Contains(item.Id)) { xxjl += item.Status; } else if (duirenjiaolv.Contains(item.Id)) { drjl += item.Status; } else if (guduqingxiang.Contains(item.Id)) { gdqx += item.Status; } else if (zizeqingxiang.Contains(item.Id)) { zzqx += item.Status; } else if (guomingqingxiang.Contains(item.Id)) { gmqx += item.Status; } else if (shentizhengzhuang.Contains(item.Id)) { stzz += item.Status; } else if (kongbuqingxiang.Contains(item.Id)) { kbqx += item.Status; } else if (chongdongqingxiang.Contains(item.Id)) { cdqx += item.Status; } } list.AddRange(new List { new IntellectJson{ name="学习焦虑" , value=xxjl}, new IntellectJson{ name="对人焦虑" , value=drjl}, new IntellectJson{ name="孤独倾向" , value=gdqx }, new IntellectJson{ name="自责倾向" , value=zzqx}, new IntellectJson{ name="过敏倾向" , value=gmqx}, new IntellectJson{ name="身体症状" , value=stzz}, new IntellectJson{ name="恐怖倾向" , value=kbqx}, new IntellectJson{ name="冲动倾向" , value=cdqx}, }); return list;//"[{\"name\":\"学习焦虑\",\"value\":" + xxjl + "},{\"name\":\"对人焦虑\",\"value\":" + drjl + "},{\"name\":\"孤独倾向\",\"value\":" + gdqx + "},{\"name\":\"自责倾向\",\"value\":" + zzqx + "},{\"name\":\"过敏倾向\",\"value\":" + gmqx + "},{\"name\":\"身体症状\",\"value\":" + stzz + "},{\"name\":\"恐怖倾向\",\"value\":" + kbqx + "},{\"name\":\"冲动倾向\",\"value\":" + cdqx + "}]"; } /// /// 根据最大值获取职业标签名称 /// /// /// /// public string GetFieldName(HollandModel model, int maxnumb, string first, string second) { string FieldName = string.Empty; Type t = typeof(HollandModel); foreach (PropertyInfo finfo in t.GetProperties()) { if (finfo.Name != "Target" && Convert.ToInt32(finfo.GetValue(model)) == maxnumb) { if (finfo.Name != first && finfo.Name != second) { FieldName = finfo.Name; break; } } } return FieldName; } /// /// 获取标签数量 /// /// /// public Tuple, List> GetCategoriesByHoolandModel(HollandModel model) { var FieldNames = new List(); var series = new List(); var serieint = new List(); Type t = typeof(HollandModel); foreach (PropertyInfo finfo in t.GetProperties()) { FieldNames.Add(finfo.Name); serieint.Add(Convert.ToInt32(finfo.GetValue(model))); } series.Add(new serie() { data = serieint, name = "霍兰德" }); return new Tuple, List>(FieldNames, series); } #endregion #region 提交/获取 霍兰德和MBTI /// /// 提交 霍兰德和MBTI /// /// /// public async Task SaveHolland(SaveHollandQuery query) { StringBuilder tagname = new StringBuilder(); if (query.CategoryId == 18) { var model = JsonConvert.DeserializeObject(query.Tags); int[] Num = new int[] { model.A, model.C, model.E, model.I, model.R, model.S }; List Numbers = Num.ToList(); int first = Numbers.Max(); Numbers.Remove(first); int second = Numbers.Max(); Numbers.Remove(second); int third = Numbers.Max(); string firstname = GetFieldName(model, first, "", ""); string secondname = GetFieldName(model, second, firstname, ""); string thirdname = GetFieldName(model, third, firstname, secondname); var result = new TagtestingHollandResult(); var radars = new Radar(); var temp = GetCategoriesByHoolandModel(model); radars.categories = temp.Item1; radars.series = temp.Item2; result.TagName = firstname + secondname + thirdname; result.radar = radars; tagname.Append(JsonConvert.SerializeObject(result)); var info = await _dal.Add(new Test_PsychMeasurementInfo() { StudentId = query.StudentId, CategoryId = query.CategoryId, CycleTimeId = 87,//需要动态获取---CycleTimeId //ClassName = query.ClassName, //GradeName = query.GradeName, IsOpen = 1, Result = tagname.ToString() }); return info > 0 ? true : false; } else if (query.CategoryId == 19) { var model = JsonConvert.DeserializeObject(query.Tags); tagname.Append(model.E > model.I ? "E" : "I"); tagname.Append(model.S > model.N ? "S" : "N"); tagname.Append(model.T > model.F ? "T" : "F"); tagname.Append(model.J > model.P ? "J" : "P"); var info = await _dal.Add(new Test_PsychMeasurementInfo() { StudentId = query.StudentId, CategoryId = query.CategoryId, CycleTimeId = 87, //ClassName = query.ClassName, //GradeName = query.GradeName, IsOpen = 1, Result = tagname.ToString() }); return info > 0 ? true : false; } return false; } /// /// 获取霍兰德测评结果 /// /// /// public async Task GetHollandResult(ResultLookQuery query) { Test_PsychMeasurementInfo info = new Test_PsychMeasurementInfo() { }; if (query.CycleTimeId > 0) { info = (await _dal.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.StudentId && x.CycleTimeId == query.CycleTimeId)).FirstOrDefault(); } else { info = (await _dal.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.StudentId)).OrderByDescending(x => x.CreateTime).FirstOrDefault(); } if (info == null || string.IsNullOrEmpty(info.Result)) return new TagtestingHollandResult() { }; return JsonConvert.DeserializeObject(info.Result); } /// /// 获取MBTI测评结果 /// /// /// public async Task GetMBTIResult(ResultLookQuery query) { var info = await _dal.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.StudentId && x.CycleTimeId == query.CycleTimeId); if (info.Count() <= 0 || string.IsNullOrEmpty(info?.FirstOrDefault()?.Result)) return new UserResult() { }; var mbtiresult = (await test_MBTIMapResultRepository.Query(x => x.Tag == info.FirstOrDefault().Result))?.FirstOrDefault(); if (mbtiresult == null) return new UserResult() { }; return new UserResult() { Advantage = mbtiresult.Advantage, BlindSpot = mbtiresult.BlindSpot, Disadvantage = mbtiresult.Disadvantage, Domain = mbtiresult.Domain, Feature = mbtiresult.Feature, Interpretation = mbtiresult.Interpretation, Recommend = mbtiresult.Recommend, Tag = mbtiresult.Tag }; } #endregion /// /// 获取学生发展 /// /// /// public async Task GetPsychDetail(ResultLookQuery query) { ShowPsychologicalResult result = new ShowPsychologicalResult() { }; List BillDatas = new List() { }; List Billcators = new List() { }; List Result = new List() { }; List List = new List() { }; Test_PsychMeasurementInfo info = new Test_PsychMeasurementInfo() { }; if (query.CycleTimeId > 0) { info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.StudentId && x.CategoryId == query.CategoryId && x.CycleTimeId == query.CycleTimeId)).FirstOrDefault(); } else { info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.StudentId && x.CategoryId == query.CategoryId)).OrderByDescending(x => x.CreateTime).FirstOrDefault(); } var Json = JsonConvert.DeserializeObject>(info.Result).Where(w => w.name != null).ToList(); if (query.CategoryId == 7) { var Psyintellectags = ShowPsychological.Psyintellectags; var Psysuggesttypes = ShowPsychological.Psysuggesttypes; Json.ForEach(m => { BillDatas.Add(m.value); Billcators.Add(new EvBillcator() { max = 65, text = m.name }); List.Add(new NameValue() { Name = m.name, Value = m.value }); var info = Psyintellectags.Where(x => x.name == m.name)?.FirstOrDefault(); if (info != null) { var Suggess = ""; if (m.value <= 35) { Suggess = Psysuggesttypes.Where(x => x.name == m.name).Select(x => x.suggest)?.FirstOrDefault(); } Result.Add(new PsyTagDetail() { MaxScore = 65, Score = m.value, Name = m.name, Title = info.title, Content = info.content, Suggess = Suggess }); } }); return new ShowPsychologicalResult() { Name = "多元智能", BillDatas = BillDatas, Billcators = Billcators, List = List, Result = Result }; } else if (query.CategoryId == 8) { var showsuggesttaggests = ShowMultiDimension.showsuggesttaggests; Json.ForEach(m => { BillDatas.Add(m.value); Billcators.Add(new EvBillcator() { max = 12, text = m.name }); List.Add(new NameValue() { Name = m.name, Value = m.value }); var info = showsuggesttaggests.Where(x => x.name == m.name)?.FirstOrDefault(); if (info != null) { var Suggess = ""; var Taggess = ""; if (info.score == 17) { if (m.value > info.score) { Suggess = info.suggest; Taggess = info.truetaggest; } Taggess = info.falsetaggest; } else { if (m.value < info.score) { Suggess = info.suggest; Taggess = info.truetaggest; } Taggess = info.falsetaggest; } Result.Add(new PsyTagDetail() { MaxScore = 12, Score = m.value, Name = m.name, //Title = info.title, Content = Taggess, Suggess = Suggess }); } }); return new ShowPsychologicalResult() { Name = "学习多维分析", BillDatas = BillDatas, Billcators = Billcators, List = List, Result = Result }; } else if (query.CategoryId == 9) { Json.ForEach(m => { Result.Add(new PsyTagDetail() { MaxScore = 37, Score = m.value, Content = "得分12分以下考试焦虑属较低水平,13分至20分属中等程度,21以上属较高水平。21分以上者的考试焦虑程度较高,建议掌握一些考试减压技巧和应试技巧", Name = m.name }); }); return new ShowPsychologicalResult() { Name = "考试焦虑测试", Result = Result }; } else if (query.CategoryId == 10) { Json.ForEach(m => { Result.Add(new PsyTagDetail() { MaxScore = 200, Score = m.value, Name = m.name, Title = "任何一个学习者,都有必要培养和提高自己的学习技能。要想提高自己的学习技能,必须全面掌握各个学习环节的具体方法。对于在校学生来说,也就是要掌握预习、听课、复习、作业和应考方法。分数越高,学习技能越强。", Content = m.value >= 137 ? "学习技能较好(或优秀),建议再接再厉,全面发展!" : "学习技能水平较差(或一般),注意改进学习方法", Suggess = m.value >= 137 ? "" : "

(一)预习:用快速略读法事先预习极多次,但不要求完全懂。
(二)上课(a)用专心放轻松的方法听讲,保持灵敏的心去听,不主动要求自己全部听懂。(b)除非特殊状况,一定要作笔记,笔记愈整洁明晰愈好(不要为了省钱将笔记记得密密麻麻的),以利日后快、慢速的复习。(c)在老师停顿或转身抄黑板的时候,迅速回想(最好口中默念出来)老师刚刚讲的重点,此种回想又可以叫潜意识迅速转极多次以消化之。
(三)家中复习:复习功课的第一步骤,也是先快速略读多次,有空的时候作一次详读之后(此时要在课本、笔记上划出重点),再多花一点时间回想上课的重点。若因为晚上补习没有足够时间,虽可以省掉详读,但略读和回想一定要作。记住不论如何忙,最多三、五天一定要将老师教过的部份,作过一次详读(没有时间的话,至少要作快速详读)。
(四)做作业:做作业之前(必要时可以找一本比较完整的参考书来做,其作业题通常比课本多很多),要确定有没有先回想重点。
(五)复习以前的功课:每隔三五天最好翻开笔记本,迅速的略读前一两个星期的功课。有空的话,将笔记本上划重点的部份出声念一遍。
(六)考前复习:和家中复习那一项差不多,但要找出时间,针对笔记上的重点发出声音教给一个假想的人或同学。同时也要找一些例题和具有代表性的习题,教一教这个假想人。
(七)考前猜题:想象自己是老师,出一些与重点有关的题目。不一定要真的去作出来(因为是自己出的题目,若题目合理则本来就会做),但可以将这一些题目和课本互相印证,找出某几课中的真正重点和如何应用这些重点。
(八)考前保持感觉最佳状态有二种方式:(a)考前做一些有代表性的例题和习题,从这一些题目中回想重点,回想时若发现忘了重点,翻开笔记看一看那一部份重点就可。(b)将笔记上的重点(或整理出的重点)重复多次地看,虽然不耐烦了还要再看,过度50%。


" }); }); return new ShowPsychologicalResult() { Name = "学习技能测试", Result = Result }; } else if (query.CategoryId == 11) { Json.ForEach(m => { BillDatas.Add(m.value); Billcators.Add(new EvBillcator() { max = 50, text = m.name }); List.Add(new NameValue() { Name = m.name, Value = m.value }); }); return new ShowPsychologicalResult() { Name = "学习风格测评", BillDatas = BillDatas, Billcators = Billcators, List = List, }; } else if (query.CategoryId == 13) { var anxietyInfos = ShowSelfofAnxiety.anxietyInfos; Json.ForEach(m => { var score = 0; if (m.value >= 70) { score = 1; } else if (m.value >= 60) { score = 2; } else if (m.value >= 50) { score = 3; } else { score = 4; } var nowinfo = anxietyInfos.Where(x => x.score == score)?.FirstOrDefault(); if (nowinfo != null) { Result.Add(new PsyTagDetail() { Score = m.value, Title = nowinfo.title, Suggess = nowinfo.suggess }); } }); return new ShowPsychologicalResult() { Name = "SAS测试", Result = Result }; } else if (query.CategoryId == 14) { //sds var selfofDepressionInfos = ShowSelfofDepression.selfofDepressionInfos; Json.ForEach(m => { var score = 0; if (m.value < 53) { score = 1; } else if (m.value <= 62) { score = 2; } else if (m.value <= 72) { score = 3; } else { score = 4; } var nowinfo = selfofDepressionInfos.Where(x => x.score == score)?.FirstOrDefault(); if (nowinfo != null) { Result.Add(new PsyTagDetail() { Score = m.value, Title = nowinfo.title, Suggess = nowinfo.suggess, Content = nowinfo.result }); } }); return new ShowPsychologicalResult() { Name = "SDS测试", Result = Result }; } else if (query.CategoryId == 15) { var mentalHealthInfos = ShowMentalHealth.mentalHealthInfos; Json.ForEach(m => { List.Add(new NameValue() { Name = m.name, Value = m.value }); var nowinfo = mentalHealthInfos.Where(x => x.title == m.name)?.FirstOrDefault(); var Suggess = ""; if (nowinfo != null) { if (m.value > 8) { Suggess = nowinfo.maxsuggest; } else if (m.value < 3) { Suggess = nowinfo.minsuggest; } Result.Add(new PsyTagDetail() { Score = m.value, Title = nowinfo.title, Suggess = Suggess }); } }); return new ShowPsychologicalResult() { Name = "MHT测试", Result = Result, List = List }; } return new ShowPsychologicalResult() { }; } /// /// 学科探索 结果 /// /// /// public async Task> SubjectChartRadar(ResultLookQuery query) { SubjectEvBillDTO dTO = new SubjectEvBillDTO() { }; var info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.StudentId && x.CategoryId == query.CategoryId)).FirstOrDefault(); if (info == null) return new MessageModel() { success = false, msg = "未测试" }; List newlist = new List() { }; newlist.Add(new IntellectJson() { name = "物理", value = 0 }); newlist.Add(new IntellectJson() { name = "化学", value = 0 }); newlist.Add(new IntellectJson() { name = "生物", value = 0 }); newlist.Add(new IntellectJson() { name = "政治", value = 0 }); newlist.Add(new IntellectJson() { name = "历史", value = 0 }); newlist.Add(new IntellectJson() { name = "地理", value = 0 }); EvBillDTO subjectinterest = new EvBillDTO() { }; var chartsinterestvalue = new List(); var evbillinterest = new List(); EvBillDTO subjectability = new EvBillDTO() { }; var chartsabilitvalue = new List(); var evbillabilit = new List(); var result = JsonConvert.DeserializeObject>(info.Result); var xqinfo = result.Where(w => w.name == "学科兴趣"); if (xqinfo.Any()) { var xq = xqinfo.FirstOrDefault().value; foreach (var item in xq) { switch (item.name) { case "物理": chartsinterestvalue.Add(item.value); newlist.Where(x => x.name == "物理").FirstOrDefault().value += item.value; break; case "化学": chartsinterestvalue.Add(item.value); newlist.Where(x => x.name == "化学").FirstOrDefault().value += item.value; break; case "生物": chartsinterestvalue.Add(item.value); newlist.Where(x => x.name == "生物").FirstOrDefault().value += item.value; break; case "政治": chartsinterestvalue.Add(item.value); newlist.Where(x => x.name == "政治").FirstOrDefault().value += item.value; break; case "历史": chartsinterestvalue.Add(item.value); newlist.Where(x => x.name == "历史").FirstOrDefault().value += item.value; break; case "地理": chartsinterestvalue.Add(item.value); newlist.Where(x => x.name == "地理").FirstOrDefault().value += item.value; break; } } subjectinterest.BillDatas = chartsinterestvalue; var subjectinterestnewsort = xq.OrderByDescending(x => x.value); subjectinterest.Name = string.Join("|", subjectinterestnewsort.Take(3).Select(x => x.name).ToList()); } evbillinterest.Add(new EvBillcator() { max = 32, text = "物理" }); evbillinterest.Add(new EvBillcator() { max = 32, text = "化学" }); evbillinterest.Add(new EvBillcator() { max = 32, text = "生物" }); evbillinterest.Add(new EvBillcator() { max = 32, text = "政治" }); evbillinterest.Add(new EvBillcator() { max = 32, text = "历史" }); evbillinterest.Add(new EvBillcator() { max = 32, text = "地理" }); var nlinfo = result.Where(w => w.name == "学科能力"); if (nlinfo.Any()) { var nl = nlinfo.FirstOrDefault().value; foreach (var item in nl) { switch (item.name) { case "物理": chartsabilitvalue.Add(item.value); newlist.Where(x => x.name == "物理").FirstOrDefault().value += item.value; break; case "化学": chartsabilitvalue.Add(item.value); newlist.Where(x => x.name == "化学").FirstOrDefault().value += item.value; break; case "生物": chartsabilitvalue.Add(item.value); newlist.Where(x => x.name == "生物").FirstOrDefault().value += item.value; break; case "政治": chartsabilitvalue.Add(item.value); newlist.Where(x => x.name == "政治").FirstOrDefault().value += item.value; break; case "历史": chartsabilitvalue.Add(item.value); newlist.Where(x => x.name == "历史").FirstOrDefault().value += item.value; break; case "地理": chartsabilitvalue.Add(item.value); newlist.Where(x => x.name == "地理").FirstOrDefault().value += item.value; break; } subjectability.BillDatas = chartsabilitvalue; var subjectabilitynewsort = nl.OrderByDescending(x => x.value); subjectability.Name = string.Join("|", subjectabilitynewsort.Take(3).Select(x => x.name).ToList()); } } evbillabilit.Add(new EvBillcator() { max = 32, text = "物理" }); evbillabilit.Add(new EvBillcator() { max = 32, text = "化学" }); evbillabilit.Add(new EvBillcator() { max = 32, text = "生物" }); evbillabilit.Add(new EvBillcator() { max = 32, text = "政治" }); evbillabilit.Add(new EvBillcator() { max = 32, text = "历史" }); evbillabilit.Add(new EvBillcator() { max = 32, text = "地理" }); var namelist = newlist.OrderByDescending(x => x.value).Take(3).Select(x => x.name).ToList(); var Name = string.Join("|", namelist); return new MessageModel() { success = true, msg = "获取成功", response = new SubjectEvBillDTO() { Name = Name, subjectability = subjectability, subjectinterest = subjectinterest } }; } /// /// 传入用户Id 获取霍兰德测评状态 /// /// /// public async Task> GetHollandStatus(IdQuery query) { var info = await _dal.Query(x => x.StudentId == query.Id && x.CategoryId == 18 && x.IsDelete == false); if (info.Count <= 0) return new MessageModel() { success = false, msg = "暂未测试霍兰德" }; var result = info.OrderByDescending(x => x.CreateTime).Select(x => x.Result)?.FirstOrDefault(); var tag = JsonConvert.DeserializeObject(result).TagName; return new MessageModel() { success = true, msg = "获取成功", response = tag }; } /// /// 传入用户Id 获取学科探索测评状态 /// /// /// public async Task> GetSubjectSelectStatus(IdQuery query) { var info = await _dal.Query(x => x.StudentId == query.Id && x.CategoryId == 20 && x.IsDelete == false); if (info.Count <= 0) return new MessageModel() { success = false, msg = "暂未测试学科探索" }; return new MessageModel() { success = true, msg = "已测试学科探索" }; } /// /// 获取测评最新周期Id /// /// /// public async Task> GetReportCycleInfo(IdQuery query) { var info = await _dal.Query(x => x.IsDelete == false && x.StudentId == query.Id); if (info.Count <= 0) return new MessageModel() { success = false, msg = "未测评" }; var nengli = info.Where(x => x.CategoryId == 7).OrderByDescending(x => x.CreateTime).FirstOrDefault(); if (nengli == null) return new MessageModel() { success = false, msg = "未测评完全,请先去测试多元智能" }; var duowei = info.Where(x => x.CategoryId == 8).OrderByDescending(x => x.CreateTime).FirstOrDefault(); if (duowei == null) return new MessageModel() { success = false, msg = "未测评完全,请先去测试多维分析" }; var jiaolv = info.Where(x => x.CategoryId == 9).OrderByDescending(x => x.CreateTime).FirstOrDefault(); if (jiaolv == null) return new MessageModel() { success = false, msg = "未测评完全,请先去测试考试焦虑" }; var jineng = info.Where(x => x.CategoryId == 10).OrderByDescending(x => x.CreateTime).FirstOrDefault(); if (jineng == null) return new MessageModel() { success = false, msg = "未测评完全,请先去测评学习技能" }; var fengge = info.Where(x => x.CategoryId == 11).OrderByDescending(x => x.CreateTime).FirstOrDefault(); if (fengge == null) return new MessageModel() { success = false, msg = "未测评完全,请先去测评学习风格" }; return new MessageModel() { success = true, msg = "获取成功", response = new CycleInfoResult() { nengliCycleId = nengli.CycleTimeId, duoweiCycleId = duowei.CycleTimeId, fenggeCycleId = fengge.CycleTimeId, jiaolvCycleId = jiaolv.CycleTimeId, jinengCycleId = jineng.CycleTimeId } }; } /// /// 获取三种推荐选科 /// /// /// public async Task>> GetSubjectSelectResult(NewSubjectQuery query) { List list = new List() { }; #region 学科探索 var info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.CustomerId && x.CategoryId == 20 && x.CycleTimeId == 1)).FirstOrDefault(); if (info == null) return new MessageModel>() { success = false, msg = "未测试" }; List newlist = new List() { }; newlist.Add(new IntellectJson() { name = "物", value = 0 }); newlist.Add(new IntellectJson() { name = "化", value = 0 }); newlist.Add(new IntellectJson() { name = "生", value = 0 }); newlist.Add(new IntellectJson() { name = "政", value = 0 }); newlist.Add(new IntellectJson() { name = "史", value = 0 }); newlist.Add(new IntellectJson() { name = "地", value = 0 }); var result = JsonConvert.DeserializeObject>(info.Result).FirstOrDefault().value; foreach (var item in result) { switch (item.name) { case "物理": newlist.Where(x => x.name == "物").FirstOrDefault().value += item.value; break; case "化学": newlist.Where(x => x.name == "化").FirstOrDefault().value += item.value; break; case "生物": newlist.Where(x => x.name == "生").FirstOrDefault().value += item.value; break; case "政治": newlist.Where(x => x.name == "政").FirstOrDefault().value += item.value; break; case "历史": newlist.Where(x => x.name == "史").FirstOrDefault().value += item.value; break; case "地理": newlist.Where(x => x.name == "地").FirstOrDefault().value += item.value; break; } } var namelist = newlist.OrderByDescending(x => x.value).Take(3).Select(x => x.name).ToList(); var subjectName = string.Join("+", namelist); #endregion #region 霍兰德 var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); if (planinfo == null) return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; var planid = planinfo.FirstOrDefault().Id; if (string.IsNullOrWhiteSpace(query.Tag)) return new MessageModel>() { success = false, msg = "标签传入为空,请去测试" }; var newTags = GetTag(query.Tag); var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); List majorlists = new List() { }; foreach (var item in newTags) { majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); } majorlists = majorlists.Distinct().ToList(); var descinfo = await t_EnrollmentPlanedescRepository.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.UniversityId > 0); List hollandlist = new List() { }; hollandlist.Add(new IdNameResult() { Name = "物", Id = descinfo.Count(x => x.Subjectclaim.Contains("物")) }); hollandlist.Add(new IdNameResult() { Name = "化", Id = descinfo.Count(x => x.Subjectclaim.Contains("化")) }); hollandlist.Add(new IdNameResult() { Name = "生", Id = descinfo.Count(x => x.Subjectclaim.Contains("生")) }); hollandlist.Add(new IdNameResult() { Name = "政", Id = descinfo.Count(x => x.Subjectclaim.Contains("政")) }); hollandlist.Add(new IdNameResult() { Name = "史", Id = descinfo.Count(x => x.Subjectclaim.Contains("史")) }); hollandlist.Add(new IdNameResult() { Name = "地", Id = descinfo.Count(x => x.Subjectclaim.Contains("地")) }); var hollandresult = hollandlist.OrderByDescending(x => x.Id).Select(x => x.Name).Take(3).ToList(); var HollandName = string.Join("+", hollandresult); #endregion #region 自选 var Optional = await v_SubjectSelectRepository.Query(x => x.IsDelete == false && x.CustomerId == query.CustomerId && x.Status == 1); var Optionalresult = Optional.Select(x => x.SubjectSelect).FirstOrDefault().Split(",").ToList(); var OptionalName = Optional.Select(x => x.SubjectSelect).FirstOrDefault().Replace(",", "+"); #endregion // namelist.Contains() hollandresult #region first var firstholl = 0; var firstoptional = 0; foreach (var item in namelist) { if (hollandresult.Count(x => x == item) > 0) { firstholl += 33; } } foreach (var item in namelist) { if (Optionalresult.Count(x => x == item) > 0) { firstoptional += 33; } } list.Add(new SubjectSelectResult() { Select = subjectName, SubjectResult = 100, HollResult = firstholl == 99 ? 100 : firstholl, OptionalResult = firstoptional == 99 ? 100 : firstoptional }); #endregion #region second var secondsubject = 0; var secondoptional = 0; foreach (var item in hollandresult) { if (namelist.Count(x => x == item) > 0) { secondsubject += 33; } } foreach (var item in hollandresult) { if (Optionalresult.Count(x => x == item) > 0) { secondoptional += 33; } } list.Add(new SubjectSelectResult() { Select = HollandName, SubjectResult = secondsubject == 99 ? 100 : secondsubject, HollResult = 100, OptionalResult = secondoptional == 99 ? 100 : secondoptional }); #endregion #region three var threesubject = 0; var threeholl = 0; foreach (var item in Optionalresult) { if (namelist.Count(x => x == item) > 0) { threesubject += 33; } } foreach (var item in Optionalresult) { if (hollandresult.Count(x => x == item) > 0) { threeholl += 33; } } list.Add(new SubjectSelectResult() { Select = OptionalName, SubjectResult = threesubject == 99 ? 100 : threesubject, HollResult = threeholl == 99 ? 100 : threeholl, OptionalResult = 100 }); #endregion return new MessageModel>() { success = true, msg = "获取成功", response = list }; } /// /// 根绝霍兰德获取推荐选科 /// /// /// public async Task> GetHollandSubject(HollandSubjectQuery query) { var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); if (planinfo == null) return new MessageModel() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; var planid = planinfo.FirstOrDefault().Id; if (string.IsNullOrWhiteSpace(query.Tag)) return new MessageModel() { success = false, msg = "标签传入为空,请去测试" }; var newTags = GetTag(query.Tag); var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); List majorlists = new List() { }; foreach (var item in newTags) { majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); } majorlists = majorlists.Distinct().ToList(); var descinfo = await t_EnrollmentPlanedescRepository.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.UniversityId > 0); List hollandlist = new List() { }; hollandlist.Add(new IdNameResult() { Name = "物", Id = descinfo.Count(x => x.Subjectclaim.Contains("物")) }); hollandlist.Add(new IdNameResult() { Name = "化", Id = descinfo.Count(x => x.Subjectclaim.Contains("化")) }); hollandlist.Add(new IdNameResult() { Name = "生", Id = descinfo.Count(x => x.Subjectclaim.Contains("生")) }); hollandlist.Add(new IdNameResult() { Name = "政", Id = descinfo.Count(x => x.Subjectclaim.Contains("政")) }); hollandlist.Add(new IdNameResult() { Name = "史", Id = descinfo.Count(x => x.Subjectclaim.Contains("史")) }); hollandlist.Add(new IdNameResult() { Name = "地", Id = descinfo.Count(x => x.Subjectclaim.Contains("地")) }); var hollandresult = hollandlist.OrderByDescending(x => x.Id).Select(x => x.Name).Take(3).ToList(); var HollandName = string.Join("+", hollandresult); return new MessageModel() { success = true, msg = "获取成功", response = HollandName }; } /// /// 转化出标签所有可能 /// /// /// public List GetTag(string tag) { var Nums = new List(); for (int i = 0; i < tag.Length; i++) { Nums.Add(tag[i].ToString()); } Permutation(Nums.ToArray(), 0, Nums.ToArray().Length); //permut = GetTagExtened(tag, permut); return permut; } /// /// 递归实现全排序并输出 /// /// 待排序的字符数组 /// 输出字符数组的起始位置 /// 输出字符数组的长度 public void Permutation(string[] nums, int m, int n) { int i; string t; if (m < n - 1) { Permutation(nums, m + 1, n); for (i = m + 1; i < n; i++) { t = nums[m]; nums[m] = nums[i]; nums[i] = t; Permutation(nums, m + 1, n); t = nums[m]; nums[m] = nums[i]; nums[i] = t; } } else { string kk = string.Empty; for (int j = 0; j < nums.Length; j++) { kk += nums[j]; } permut.Add(kk); } } ///// ///// 判断是否为不常见标签,若是则匹配相关联标签 ///// ///// ///// //public List GetTagExtened(string tag, List taglist) //{ // var list = new List(); // var query = yd_tagExInfo.Get(a => a.YD_Enabled == 1 && a.YD_Tags.Equals(tag)).FirstOrDefault(); // if (query != null) // { // list = JsonConvert.DeserializeObject>(query.YD_tagEx); // } // if (list.Any() && list.Count() > 0) // { // taglist.AddRange(list.Select(s => s.tag).ToList()); // } // return taglist; //} } }