Commit 92a18ae3 authored by liudong1993's avatar liudong1993

1

parent 974644a5
......@@ -143,6 +143,11 @@ namespace EduSpider.Model.Extend
/// </summary>
public int ExamScoreId { get; set; }
/// <summary>
/// 考试类型
/// </summary>
public int ExamType { get; set; }
/// <summary>
/// 教师姓名
/// </summary>
......
......@@ -42,6 +42,11 @@ namespace EduSpider.Model.Extend
/// 一试排名
/// </summary>
public int ARank { get; set; }
/// <summary>
/// 考试类型
/// </summary>
public int ExamType { get; set; }
}
/// <summary>
......
......@@ -24,7 +24,7 @@ namespace EduSpider.Repository
{
StringBuilder builder = new();
builder.AppendFormat(@"
SELECT A.*,B.ExamName,B.CreateTime AS ExamCreateTime
SELECT A.*,B.ExamName,B.CreateTime AS ExamCreateTime,B.Type as ExamType
FROM RB_Exam_Score AS A INNER JOIN rb_exam AS B ON A.ExamId=B.ExamId
WHERE 1=1 and B.Status =0
");
......
......@@ -152,6 +152,7 @@ namespace EduSpider.Services
ExamRankRate = item.RankRate,
ExamId = item.ExamId,
ExamScoreId = item.Id,
ExamType = item.ExamType
});
}
}
......@@ -188,6 +189,7 @@ namespace EduSpider.Services
item.ExamRankRate,
item.ExamId,
item.ExamScoreId,
item.ExamType
};
}
//评语
......
......@@ -463,13 +463,15 @@ namespace EduSpider.Services
public string SetExamStatAnalysis(int courseId, UserInfo userInfo)
{
//获取所有分组考试
var examList = ExamRepository.GetExamList(new RB_Exam_Extend() { CourseId = courseId, CreateBy = userInfo.Id, Type = 2 }).OrderBy(x => x.ExamId).ToList();
var examList = ExamRepository.GetExamList(new RB_Exam_Extend() { CourseId = courseId, Type = 2 }).OrderBy(x => x.ExamId).ToList();
if (!examList.Any()) { return "未查询到分组考试信息,无法生成统计分析"; }
//查询所有的 考试题
string examIds = string.Join(",", examList.Select(x => x.ExamId));
var questList = Exam_QuestionsRepository.GetList(new RB_Exam_Questions_Extend() { ExamIds = examIds });
//查询所有的 学生分数
var scoreList = Exam_ScoreRepository.GetList(new RB_Exam_Score_Extend() { ExamIds = examIds });
scoreList = scoreList.Where(x => x.StuId > 0).ToList();
examList = examList.Where(y => scoreList.Select(x => x.ExamId).Contains(y.ExamId)).ToList();
foreach (var item in scoreList) {
item.ScoreList = JsonHelper.Deserialize<List<ExamQScoreModel>>(item.Content);
foreach (var qitem in item.ScoreList)
......@@ -500,204 +502,212 @@ namespace EduSpider.Services
});
if (ExamId > 0) {
List<int> StuIdList = scoreList.Select(x => x.StuId).Distinct().ToList();
int stuNum = StuIdList.Count();
try
{
List<int> StuIdList = scoreList.Select(x => x.StuId).Distinct().ToList();
int stuNum = StuIdList.Count();
#region 1-8题统计
List<ExamPartScoreModel> StuPScoreList = new List<ExamPartScoreModel>();// 1-8题得分列表
List<ExamPartScoreModel> TestScoreList = new List<ExamPartScoreModel>();//一试二试排名列表
List<ExamPartScoreModel> TRScoreList = new List<ExamPartScoreModel>();//总排名列表
//1-8题统计 先看1-8题 平均得分 x轴 考试次数, y轴 得分
int ExamNum = 1, MaxGroupNum = 1;
foreach (var item in examList) {
//先算平均得分
var esList = scoreList.Where(x => x.ExamId == item.ExamId).ToList();
decimal avgScore = Math.Round(esList.Sum(x => x.PartScore) / esList.Count(), 2, MidpointRounding.AwayFromZero);//1-8题 平均得分
//查看所有的分组
var groupList = questList.Where(x => x.ExamId == item.ExamId).Select(x => x.GroupName).Distinct();
int groupNum = 1;
foreach (var groupName in groupList)
{
//组装一试排名 二试排名
foreach (var qitem in esList)
{
qitem.AScore = qitem.ScoreList.Where(x => x.GroupName == groupName).Sum(x => x.Score);
qitem.ScoreList.Where(x => x.GroupName == groupName).ToList().ForEach(x =>
{
x.GroupNum = groupNum;
});
}
int Rank = 1;
esList.OrderByDescending(x => x.AScore).GroupBy(x => x.AScore).ToList().ForEach(x =>
{
x.ToList().ForEach(y =>
{
y.ARank = Rank;
});
Rank += x.Count();
});
#region 1-8题统计
List<ExamPartScoreModel> StuPScoreList = new List<ExamPartScoreModel>();// 1-8题得分列表
List<ExamPartScoreModel> TestScoreList = new List<ExamPartScoreModel>();//一试二试排名列表
List<ExamPartScoreModel> TRScoreList = new List<ExamPartScoreModel>();//总排名列表
foreach (var stuId in StuIdList)
{
//插入分组排名
TestScoreList.Add(new ExamPartScoreModel()
{
StuId = stuId,
Sort = ExamNum,
ExamName = item.ExamName,
GroupName = groupName,
Score = esList.Where(x => x.StuId == stuId).FirstOrDefault()?.ARank ?? 0,
GroupNum = groupNum
});
}
if (MaxGroupNum < groupNum) { MaxGroupNum = groupNum; }
questList.Where(x => x.ExamId == item.ExamId && x.GroupName == groupName).ToList().ForEach(x => x.GroupNum = groupNum);
groupNum++;
}
//1-8题统计 先看1-8题 平均得分 x轴 考试次数, y轴 得分
int ExamNum = 1, MaxGroupNum = 1;
foreach (var item in examList) {
//先算平均得分
var esList = scoreList.Where(x => x.ExamId == item.ExamId).ToList();
decimal avgScore = Math.Round(esList.Sum(x => x.PartScore) / esList.Count(), 2, MidpointRounding.AwayFromZero);//1-8题 平均得分
//查看所有的分组
var groupList = questList.Where(x => x.ExamId == item.ExamId).Select(x => x.GroupName).Distinct();
int groupNum = 1;
foreach (var groupName in groupList)
{
//组装一试排名 二试排名
foreach (var qitem in esList)
{
qitem.AScore = qitem.ScoreList.Where(x => x.GroupName == groupName).Sum(x => x.Score);
qitem.ScoreList.Where(x => x.GroupName == groupName).ToList().ForEach(x =>
//开始插入 遍历所有的 学生
foreach (var stuId in StuIdList) {
//插入1-8题
StuPScoreList.Add(new ExamPartScoreModel()
{
x.GroupNum = groupNum;
StuId = stuId,
Sort = ExamNum,
AvgScore = avgScore,
ExamName = item.ExamName,
Score = esList.Where(x => x.StuId == stuId).FirstOrDefault()?.PartScore ?? 0
});
}
int Rank = 1;
esList.OrderByDescending(x => x.AScore).GroupBy(x => x.AScore).ToList().ForEach(x =>
{
x.ToList().ForEach(y =>
{
y.ARank = Rank;
});
Rank += x.Count();
});
foreach (var stuId in StuIdList)
{
//插入分组排名
TestScoreList.Add(new ExamPartScoreModel()
//插入总排名
TRScoreList.Add(new ExamPartScoreModel()
{
StuId = stuId,
Sort = ExamNum,
ExamName = item.ExamName,
GroupName = groupName,
Score = esList.Where(x => x.StuId == stuId).FirstOrDefault()?.ARank ?? 0,
GroupNum = groupNum
Score = esList.Where(x => x.StuId == stuId).FirstOrDefault()?.Rank ?? 0
});
}
if (MaxGroupNum < groupNum) { MaxGroupNum = groupNum; }
questList.Where(x => x.ExamId == item.ExamId && x.GroupName == groupName).ToList().ForEach(x => x.GroupNum = groupNum);
groupNum++;
ExamNum++;
}
//开始插入 遍历所有的 学生
foreach (var stuId in StuIdList) {
//插入1-8题
StuPScoreList.Add(new ExamPartScoreModel()
{
StuId = stuId,
Sort = ExamNum,
AvgScore = avgScore,
ExamName = item.ExamName,
Score = esList.Where(x => x.StuId == stuId).FirstOrDefault()?.PartScore ?? 0
});
//插入总排名
TRScoreList.Add(new ExamPartScoreModel()
{
StuId = stuId,
Sort = ExamNum,
ExamName = item.ExamName,
Score = esList.Where(x => x.StuId == stuId).FirstOrDefault()?.Rank ?? 0
});
}
ExamNum++;
}
#endregion
#region 模块分析
//分组版块分析表 x轴 知识点 , y轴 分数(总分 个人分 平均分) 如果有多次考试 知识点 重复的 就累计使用
List<ExamPartScoreModel> ModuleScoreList = new List<ExamPartScoreModel>();//考试版块分析列表
var knowList = questList.Select(x => x.KnowledgePoint).Distinct();
foreach (var item in knowList) {
//查询分组
for (int groupN = 1; groupN <= MaxGroupNum; groupN++) {
decimal TotalScore = questList.Where(x => x.KnowledgePoint == item && x.GroupNum == groupN).Sum(x => x.Score);//知识点总分
if (TotalScore > 0)
{
decimal AvgScore = Math.Round(scoreList.Sum(x => x.ScoreList.Where(y => y.KnowledgePoint == item && y.GroupNum == groupN).Sum(y => y.Score)) / stuNum, 2, MidpointRounding.AwayFromZero);//知识点平均得分
foreach (var stuId in StuIdList)
#endregion
#region 模块分析
//分组版块分析表 x轴 知识点 , y轴 分数(总分 个人分 平均分) 如果有多次考试 知识点 重复的 就累计使用
List<ExamPartScoreModel> ModuleScoreList = new List<ExamPartScoreModel>();//考试版块分析列表
var knowList = questList.Select(x => x.KnowledgePoint).Distinct();
foreach (var item in knowList) {
//查询分组
for (int groupN = 1; groupN <= MaxGroupNum; groupN++) {
decimal TotalScore = questList.Where(x => x.KnowledgePoint == item && x.GroupNum == groupN).Sum(x => x.Score);//知识点总分
if (TotalScore > 0)
{
decimal Score = scoreList.Where(x => x.StuId == stuId).Sum(x => x.ScoreList.Where(y => y.KnowledgePoint == item && y.GroupNum == groupN).Sum(y => y.Score));//学生这些知识点的总得分
ModuleScoreList.Add(new ExamPartScoreModel()
decimal AvgScore = Math.Round(scoreList.Sum(x => x.ScoreList.Where(y => y.KnowledgePoint == item && y.GroupNum == groupN).Sum(y => y.Score)) / stuNum, 2, MidpointRounding.AwayFromZero);//知识点平均得分
foreach (var stuId in StuIdList)
{
StuId = stuId,
GroupNum = groupN,
ExamName = item,
Score = Score,
TScore = TotalScore,
AvgScore = AvgScore
});
decimal Score = scoreList.Where(x => x.StuId == stuId).Sum(x => x.ScoreList.Where(y => y.KnowledgePoint == item && y.GroupNum == groupN).Sum(y => y.Score));//学生这些知识点的总得分
ModuleScoreList.Add(new ExamPartScoreModel()
{
StuId = stuId,
GroupNum = groupN,
ExamName = item,
Score = Score,
TScore = TotalScore,
AvgScore = AvgScore
});
}
}
}
}
}
#endregion
#endregion
#region 开始插入数据
int eNum = examList.Count();//考试数量
List<RB_Exam_Score_Extend> TRankList = new List<RB_Exam_Score_Extend>();//统计排名
foreach (var stuId in StuIdList) {
decimal TScore = Math.Round(scoreList.Where(x => x.StuId == stuId).Sum(x => x.TScore) / eNum, 2, MidpointRounding.AwayFromZero);// 平均几次考试 得到总分
decimal ExamScore = Math.Round(scoreList.Where(x => x.StuId == stuId).Sum(x => x.ExamScore) / eNum, 2, MidpointRounding.AwayFromZero);
#region 开始插入数据
int eNum = examList.Count();//考试数量
List<RB_Exam_Score_Extend> TRankList = new List<RB_Exam_Score_Extend>();//统计排名
foreach (var stuId in StuIdList) {
decimal TScore = Math.Round(scoreList.Where(x => x.StuId == stuId).Sum(x => x.TScore) / eNum, 2, MidpointRounding.AwayFromZero);// 平均几次考试 得到总分
decimal ExamScore = Math.Round(scoreList.Where(x => x.StuId == stuId).Sum(x => x.ExamScore) / eNum, 2, MidpointRounding.AwayFromZero);
TRankList.Add(new RB_Exam_Score_Extend()
{
StuId = stuId,
TScore = TScore,
ExamScore = ExamScore
});
}
int TRank = 1;
TRankList.OrderByDescending(x => x.TScore).GroupBy(x => x.TScore).ToList().ForEach(x =>
{
x.ToList().ForEach(y =>
TRankList.Add(new RB_Exam_Score_Extend()
{
StuId = stuId,
TScore = TScore,
ExamScore = ExamScore
});
}
int TRank = 1;
TRankList.OrderByDescending(x => x.TScore).GroupBy(x => x.TScore).ToList().ForEach(x =>
{
y.Rank = TRank;
y.RankRate = Math.Round(Convert.ToDecimal(stuNum - TRank + 1) / stuNum, 2, MidpointRounding.AwayFromZero);
x.ToList().ForEach(y =>
{
y.Rank = TRank;
y.RankRate = Math.Round(Convert.ToDecimal(stuNum - TRank + 1) / stuNum, 2, MidpointRounding.AwayFromZero);
});
TRank += x.Count();
});
TRank += x.Count();
});
//插入
foreach (var stuId in StuIdList) {
//插入
foreach (var stuId in StuIdList) {
ExamStatModel statModel = new ExamStatModel()
{
PartScoreList = StuPScoreList.Where(x => x.StuId == stuId).ToList(),
GroupScoreList = TestScoreList.Where(x => x.StuId == stuId).ToList(),
TRankScoreList = TRScoreList.Where(x => x.StuId == stuId).ToList(),
ModuleScoreList = ModuleScoreList.Where(x => x.StuId == stuId).ToList()
};
var smodel = scoreList.Where(x => x.StuId == stuId).FirstOrDefault();
ExamStatModel statModel = new ExamStatModel()
{
PartScoreList = StuPScoreList.Where(x => x.StuId == stuId).ToList(),
GroupScoreList = TestScoreList.Where(x => x.StuId == stuId).ToList(),
TRankScoreList = TRScoreList.Where(x => x.StuId == stuId).ToList(),
ModuleScoreList = ModuleScoreList.Where(x => x.StuId == stuId).ToList()
};
var smodel = scoreList.Where(x => x.StuId == stuId).FirstOrDefault();
var rmodel = TRankList.Where(x => x.StuId == stuId).FirstOrDefault();
var rmodel = TRankList.Where(x => x.StuId == stuId).FirstOrDefault();
Exam_ScoreRepository.Insert(new Model.Entity.RB_Exam_Score()
{
Id = 0,
StuId = stuId,
ExamId = ExamId,
StuUId = smodel.StuUId,
StuName = smodel.StuName,
Content = JsonHelper.Serialize(new
Exam_ScoreRepository.Insert(new Model.Entity.RB_Exam_Score()
{
PartScoreList = statModel.PartScoreList.Select(x => new
{
x.Sort,
x.ExamName,
x.AvgScore,
x.Score
}),
ModuleScoreList = statModel.ModuleScoreList.Select(y => new
{
y.GroupNum,
y.ExamName,
y.Score,
y.AvgScore,
y.TScore
}),
GroupScoreList = statModel.GroupScoreList.Select(y => new
Id = 0,
StuId = stuId,
ExamId = ExamId,
StuUId = smodel.StuUId,
StuName = smodel.StuName,
Content = JsonHelper.Serialize(new
{
y.GroupNum,
y.Sort,
y.ExamName,
y.Score
PartScoreList = statModel.PartScoreList.Select(x => new
{
x.Sort,
x.ExamName,
x.AvgScore,
x.Score
}),
ModuleScoreList = statModel.ModuleScoreList.Select(y => new
{
y.GroupNum,
y.ExamName,
y.Score,
y.AvgScore,
y.TScore
}),
GroupScoreList = statModel.GroupScoreList.Select(y => new
{
y.GroupNum,
y.Sort,
y.ExamName,
y.Score
}),
TRankScoreList = statModel.TRankScoreList.Select(x => new
{
x.Sort,
x.ExamName,
x.Score
})
}),
TRankScoreList = statModel.TRankScoreList.Select(x => new
{
x.Sort,
x.ExamName,
x.Score
})
}),
TScore = rmodel.TScore,
ExamScore = rmodel.ExamScore,
Rank = rmodel.Rank,
RankRate = rmodel.RankRate
});
TScore = rmodel.TScore,
ExamScore = rmodel.ExamScore,
Rank = rmodel.Rank,
RankRate = rmodel.RankRate
});
}
#endregion
}
catch (Exception ex)
{
LogHelper.WriteError("SetExamStatAnalysis", "", ex);
return "出错了,请联系管理员";
}
#endregion
}
return ExamId > 0 ? "" : "出错了,请联系管理员";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment