Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EduSpider
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
viitto
EduSpider
Commits
97826a2a
Commit
97826a2a
authored
May 26, 2022
by
liudong1993
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
ada84f88
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
1732 additions
and
2 deletions
+1732
-2
IExamRepository.cs
EduSpider.IRepository/IExamRepository.cs
+19
-0
IExam_QuestionsRepository.cs
EduSpider.IRepository/IExam_QuestionsRepository.cs
+19
-0
IExam_ScoreRepository.cs
EduSpider.IRepository/IExam_ScoreRepository.cs
+19
-0
IStudentRepository.cs
EduSpider.IRepository/IStudentRepository.cs
+1
-0
IExamService.cs
EduSpider.IServices/IExamService.cs
+17
-0
ITeacherService.cs
EduSpider.IServices/ITeacherService.cs
+1
-1
RB_Exam.cs
EduSpider.Model/Entity/RB_Exam.cs
+47
-0
RB_Exam_Questions.cs
EduSpider.Model/Entity/RB_Exam_Questions.cs
+52
-0
RB_Exam_Score.cs
EduSpider.Model/Entity/RB_Exam_Score.cs
+57
-0
RB_Exam_Score2.cs
EduSpider.Model/Entity/RB_Exam_Score2.cs
+47
-0
RB_Exam_Extend.cs
EduSpider.Model/Extend/RB_Exam_Extend.cs
+14
-0
RB_Exam_Questions_Extend.cs
EduSpider.Model/Extend/RB_Exam_Questions_Extend.cs
+14
-0
RB_Exam_Score_Extend.cs
EduSpider.Model/Extend/RB_Exam_Score_Extend.cs
+14
-0
ExamRepository.cs
EduSpider.Repository/ExamRepository.cs
+18
-0
Exam_QuestionsRepository.cs
EduSpider.Repository/Exam_QuestionsRepository.cs
+18
-0
Exam_ScoreRepository.cs
EduSpider.Repository/Exam_ScoreRepository.cs
+18
-0
StudentRepository.cs
EduSpider.Repository/StudentRepository.cs
+12
-0
ExamService.cs
EduSpider.Services/ExamService.cs
+204
-0
TeacherService.cs
EduSpider.Services/TeacherService.cs
+2
-1
StuExamScoreHelper.cs
EduSpider.Utility/Data/StuExamScoreHelper.cs
+141
-0
EduSpider.Utility.csproj
EduSpider.Utility/EduSpider.Utility.csproj
+1
-0
NPOIHelper.cs
EduSpider.Utility/Plugin/NPOIHelper.cs
+855
-0
UploadController.cs
EduSpider.WebApi/Controllers/Upload/UploadController.cs
+142
-0
No files found.
EduSpider.IRepository/IExamRepository.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Config
;
using
VTX.FW.DB
;
namespace
EduSpider.Repository
{
/// <summary>
/// 考试仓储接口
/// </summary>
public
interface
IExamRepository
:
IDBRepository
<
RB_Exam
>,
IDependency
{
}
}
EduSpider.IRepository/IExam_QuestionsRepository.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Config
;
using
VTX.FW.DB
;
namespace
EduSpider.Repository
{
/// <summary>
/// 考试题目仓储接口
/// </summary>
public
interface
IExam_QuestionsRepository
:
IDBRepository
<
RB_Exam_Questions
>,
IDependency
{
}
}
EduSpider.IRepository/IExam_ScoreRepository.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Config
;
using
VTX.FW.DB
;
namespace
EduSpider.Repository
{
/// <summary>
/// 考试得分仓储接口
/// </summary>
public
interface
IExam_ScoreRepository
:
IDBRepository
<
RB_Exam_Score
>,
IDependency
{
}
}
EduSpider.IRepository/IStudentRepository.cs
View file @
97826a2a
...
...
@@ -14,5 +14,6 @@ namespace EduSpider.IRepository
/// <param name="students"></param>
/// <returns></returns>
public
bool
BatchSetStudent
(
List
<
RB_Student
>
students
);
List
<
RB_Student
>
GetListForStuName
(
string
stuNames
);
}
}
EduSpider.IServices/IExamService.cs
0 → 100644
View file @
97826a2a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Config
;
namespace
EduSpider.IServices
{
/// <summary>
/// 考试服务层接口
/// </summary>
public
interface
IExamService
:
IDependency
{
string
ImportExcelForStuExamScore
(
string
path_server
,
int
courseId
,
string
examName
,
int
userId
);
}
}
EduSpider.IServices/ITeacherService.cs
View file @
97826a2a
...
...
@@ -12,6 +12,6 @@ namespace EduSpider.IServices
/// </summary>
public
interface
ITeacherService
:
IDependency
{
}
}
EduSpider.Model/Entity/RB_Exam.cs
0 → 100644
View file @
97826a2a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Entity
{
/// <summary>
/// 考试
/// </summary>
[
Serializable
]
[
DB
(
ConnectionName
=
"DefaultConnection"
)]
public
class
RB_Exam
{
/// <summary>
/// ExamId
/// </summary>
public
int
ExamId
{
get
;
set
;
}
/// <summary>
/// 考试名称
/// </summary>
public
string
ExamName
{
get
;
set
;
}
/// <summary>
/// 关联课程
/// </summary>
public
int
CourseId
{
get
;
set
;
}
/// <summary>
/// 删除状态
/// </summary>
public
int
Status
{
get
;
set
;
}
/// <summary>
/// 创建人
/// </summary>
public
int
CreateBy
{
get
;
set
;
}
/// <summary>
/// 创建时间
/// </summary>
public
DateTime
CreateTime
{
get
;
set
;
}
}
}
EduSpider.Model/Entity/RB_Exam_Questions.cs
0 → 100644
View file @
97826a2a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Entity
{
/// <summary>
/// 考试题目
/// </summary>
[
Serializable
]
[
DB
(
ConnectionName
=
"DefaultConnection"
)]
public
class
RB_Exam_Questions
{
/// <summary>
/// Id
/// </summary>
public
int
Id
{
get
;
set
;
}
/// <summary>
/// 考试ID
/// </summary>
public
int
ExamId
{
get
;
set
;
}
/// <summary>
/// 题号
/// </summary>
public
int
Sort
{
get
;
set
;
}
/// <summary>
/// 难度
/// </summary>
public
string
Difficulty
{
get
;
set
;
}
/// <summary>
/// 知识点
/// </summary>
public
string
KnowledgePoint
{
get
;
set
;
}
/// <summary>
/// 归属模块
/// </summary>
public
string
Module
{
get
;
set
;
}
/// <summary>
/// 分数
/// </summary>
public
decimal
Score
{
get
;
set
;
}
}
}
EduSpider.Model/Entity/RB_Exam_Score.cs
0 → 100644
View file @
97826a2a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Entity
{
/// <summary>
/// 考试分数
/// </summary>
[
Serializable
]
[
DB
(
ConnectionName
=
"DefaultConnection"
)]
public
class
RB_Exam_Score
{
/// <summary>
/// Id
/// </summary>
public
int
Id
{
get
;
set
;
}
/// <summary>
/// 考试ID
/// </summary>
public
int
ExamId
{
get
;
set
;
}
/// <summary>
/// 学生ID
/// </summary>
public
int
StuId
{
get
;
set
;
}
/// <summary>
/// 导入的姓名
/// </summary>
public
string
StuName
{
get
;
set
;
}
/// <summary>
/// 得分明细 json格式
/// </summary>
public
string
Content
{
get
;
set
;
}
/// <summary>
/// 总分
/// </summary>
public
decimal
TScore
{
get
;
set
;
}
/// <summary>
/// 排名
/// </summary>
public
int
Rank
{
get
;
set
;
}
/// <summary>
/// 百分比排名
/// </summary>
public
decimal
RankRate
{
get
;
set
;
}
}
}
EduSpider.Model/Entity/RB_Exam_Score2.cs
0 → 100644
View file @
97826a2a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Entity
{
/// <summary>
/// 考试分数
/// </summary>
[
Serializable
]
[
DB
(
ConnectionName
=
"DefaultConnection"
)]
public
class
RB_Exam_Score2
{
/// <summary>
/// Id
/// </summary>
public
int
Id
{
get
;
set
;
}
/// <summary>
/// 考试ID
/// </summary>
public
int
ExamId
{
get
;
set
;
}
/// <summary>
/// 学生ID
/// </summary>
public
int
StuId
{
get
;
set
;
}
/// <summary>
/// 题号
/// </summary>
public
int
Sort
{
get
;
set
;
}
/// <summary>
/// 分数
/// </summary>
public
decimal
Score
{
get
;
set
;
}
/// <summary>
/// 导入的姓名
/// </summary>
public
string
StuName
{
get
;
set
;
}
}
}
EduSpider.Model/Extend/RB_Exam_Extend.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
System
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Extend
{
/// <summary>
/// 考试扩展
/// </summary>
public
class
RB_Exam_Extend
:
RB_Exam
{
}
}
EduSpider.Model/Extend/RB_Exam_Questions_Extend.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
System
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Extend
{
/// <summary>
/// 考试题目扩展
/// </summary>
public
class
RB_Exam_Questions_Extend
:
RB_Exam_Questions
{
}
}
EduSpider.Model/Extend/RB_Exam_Score_Extend.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
System
;
using
VTX.FW.Attr
;
namespace
EduSpider.Model.Extend
{
/// <summary>
/// 考试分数扩展
/// </summary>
public
class
RB_Exam_Score_Extend
:
RB_Exam_Score
{
}
}
EduSpider.Repository/ExamRepository.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
EduSpider.Repository.Base
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
EduSpider.Repository
{
/// <summary>
/// 考试仓储层
/// </summary>
public
class
ExamRepository
:
BaseRepository
<
RB_Exam
>,
IExamRepository
{
}
}
EduSpider.Repository/Exam_QuestionsRepository.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
EduSpider.Repository.Base
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
EduSpider.Repository
{
/// <summary>
/// 考试题目仓储层
/// </summary>
public
class
Exam_QuestionsRepository
:
BaseRepository
<
RB_Exam_Questions
>,
IExam_QuestionsRepository
{
}
}
EduSpider.Repository/Exam_ScoreRepository.cs
0 → 100644
View file @
97826a2a
using
EduSpider.Model.Entity
;
using
EduSpider.Repository.Base
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
EduSpider.Repository
{
/// <summary>
/// 考试得分仓储层
/// </summary>
public
class
Exam_ScoreRepository
:
BaseRepository
<
RB_Exam_Score
>,
IExam_ScoreRepository
{
}
}
EduSpider.Repository/StudentRepository.cs
View file @
97826a2a
...
...
@@ -2,6 +2,7 @@
using
EduSpider.Model.Entity
;
using
EduSpider.Repository.Base
;
using
System.Collections.Generic
;
using
System.Linq
;
namespace
EduSpider.Repository
{
...
...
@@ -13,5 +14,16 @@ namespace EduSpider.Repository
flag
=
base
.
BatchInsert
(
students
,
isReplace
:
true
);
return
flag
;
}
/// <summary>
/// 获取学生列表 根据学生姓名
/// </summary>
/// <param name="stuNames"></param>
/// <returns></returns>
public
List
<
RB_Student
>
GetListForStuName
(
string
stuNames
)
{
string
sql
=
$"select StudId,StudentName from RB_Student where StudentName in(
{
stuNames
}
) order by StudId desc"
;
return
Get
<
RB_Student
>(
sql
).
ToList
();
}
}
}
EduSpider.Services/ExamService.cs
0 → 100644
View file @
97826a2a
using
EduSpider.IRepository
;
using
EduSpider.IServices
;
using
EduSpider.Repository
;
using
EduSpider.Utility.Data
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Attr
;
using
VTX.FW.Helper
;
namespace
EduSpider.Services
{
/// <summary>
/// 考试服务实现
/// </summary>
public
class
ExamService
:
IExamService
{
/// <summary>
/// 帐号仓储接口
/// </summary>
[
Autowired
]
private
IAccountRepository
accountRepository
{
get
;
set
;
}
/// <summary>
/// 考试
/// </summary>
[
Autowired
]
private
IExamRepository
examRepository
{
get
;
set
;
}
/// <summary>
/// 考试题目
/// </summary>
[
Autowired
]
private
IExam_QuestionsRepository
exam_QuestionsRepository
{
get
;
set
;
}
/// <summary>
/// 考试得分
/// </summary>
[
Autowired
]
private
IExam_ScoreRepository
exam_ScoreRepository
{
get
;
set
;
}
/// <summary>
/// 学生
/// </summary>
[
Autowired
]
private
IStudentRepository
studentRepository
{
get
;
set
;
}
/// <summary>
/// 导入考试成绩
/// </summary>
/// <param name="path_server"></param>
/// <param name="userId"></param>
/// <returns></returns>
public
string
ImportExcelForStuExamScore
(
string
path_server
,
int
courseId
,
string
examName
,
int
userId
)
{
var
umodel
=
accountRepository
.
GetAccountList
(
new
Model
.
Extend
.
RB_Account_Extend
()
{
Id
=
userId
}).
FirstOrDefault
();
if
(
umodel
==
null
||
umodel
.
Status
==
Utility
.
Enum
.
DateStateEnum
.
Delete
||
umodel
.
AccountType
!=
Utility
.
Enum
.
AccountTypeEnum
.
Teacher
)
{
return
"没有权限操作"
;
}
var
EQlist
=
StuExamScoreHelper
.
GetStuExamScoreData
(
path_server
,
out
List
<
StuScoreModel
>
StuList
);
if
(
EQlist
.
Any
())
{
var
AvgList
=
StuList
.
Where
(
x
=>
x
.
Name
==
"平均分"
).
ToList
();
StuList
=
StuList
.
Where
(
x
=>
x
.
Name
!=
"平均分"
&&
!
string
.
IsNullOrWhiteSpace
(
x
.
Name
)).
ToList
();
//根据学生姓名 查询所有的学生账号
string
StuNames
=
"'"
+
string
.
Join
(
"','"
,
StuList
.
Select
(
x
=>
x
.
Name
).
Distinct
())
+
"'"
;
var
sList
=
studentRepository
.
GetListForStuName
(
StuNames
);
//插入考试
int
ExamId
=
examRepository
.
Insert
(
new
Model
.
Entity
.
RB_Exam
()
{
ExamId
=
0
,
CourseId
=
courseId
,
ExamName
=
examName
,
CreateBy
=
userId
,
CreateTime
=
DateTime
.
Now
,
Status
=
0
});
if
(
ExamId
>
0
)
{
List
<
Model
.
Entity
.
RB_Exam_Questions
>
InsertEQ
=
new
();
//开始插入题目
foreach
(
var
item
in
EQlist
)
{
InsertEQ
.
Add
(
new
Model
.
Entity
.
RB_Exam_Questions
()
{
Id
=
0
,
ExamId
=
ExamId
,
Difficulty
=
item
.
Difficulty
,
KnowledgePoint
=
item
.
KnowledgePoint
,
Module
=
item
.
Module
,
Score
=
item
.
Score
,
Sort
=
item
.
Id
});
}
exam_QuestionsRepository
.
BatchInsert
(
InsertEQ
);
List
<
Model
.
Entity
.
RB_Exam_Score
>
InsertScore
=
new
();
foreach
(
var
Name
in
StuList
.
Select
(
x
=>
x
.
Name
).
Distinct
())
{
var
clist
=
StuList
.
Where
(
x
=>
x
.
Name
==
Name
).
ToList
();
var
stuModel
=
sList
.
Where
(
x
=>
x
.
StudentName
==
Name
).
FirstOrDefault
();
InsertScore
.
Add
(
new
Model
.
Entity
.
RB_Exam_Score
()
{
Id
=
0
,
ExamId
=
ExamId
,
StuId
=
stuModel
?.
StudId
??
0
,
//匹配学生失败 可能要在后台给与提示, 重新导入
StuName
=
Name
,
Content
=
JsonHelper
.
Serialize
(
clist
.
Where
(
x
=>
x
.
Id
>
0
).
Select
(
x
=>
new
{
Sort
=
x
.
Id
,
x
.
Score
,
AvgScore
=
AvgList
.
Where
(
y
=>
y
.
Id
==
x
.
Id
).
FirstOrDefault
()?.
Score
??
0
})),
TScore
=
clist
.
Where
(
x
=>
x
.
Id
==
-
1
).
FirstOrDefault
()?.
Score
??
0
,
Rank
=
Convert
.
ToInt32
(
clist
.
Where
(
x
=>
x
.
Id
==
-
2
).
FirstOrDefault
()?.
Score
??
0
),
RankRate
=
clist
.
Where
(
x
=>
x
.
Id
==
-
3
).
FirstOrDefault
()?.
Score
??
0
,
});
}
//InsertScore = InsertScore.Where(x => x.StuId > 0).ToList();//暂时只插入匹配到学生的
exam_ScoreRepository
.
BatchInsert
(
InsertScore
);
}
return
""
;
}
else
{
return
"模板匹配失败"
;
}
}
/// <summary>
/// 取消备份
/// </summary>
/// <param name="path_server"></param>
/// <param name="courseId"></param>
/// <param name="examName"></param>
/// <param name="userId"></param>
/// <returns></returns>
public
string
ImportExcelForStuExamScore_V2
(
string
path_server
,
int
courseId
,
string
examName
,
int
userId
)
{
var
umodel
=
accountRepository
.
GetAccountList
(
new
Model
.
Extend
.
RB_Account_Extend
()
{
Id
=
userId
}).
FirstOrDefault
();
if
(
umodel
==
null
||
umodel
.
Status
==
Utility
.
Enum
.
DateStateEnum
.
Delete
||
umodel
.
AccountType
!=
Utility
.
Enum
.
AccountTypeEnum
.
Teacher
)
{
return
"没有权限操作"
;
}
var
EQlist
=
StuExamScoreHelper
.
GetStuExamScoreData
(
path_server
,
out
List
<
StuScoreModel
>
StuList
);
if
(
EQlist
.
Any
())
{
var
AvgList
=
StuList
.
Where
(
x
=>
x
.
Name
==
"平均分"
).
ToList
();
StuList
=
StuList
.
Where
(
x
=>
x
.
Name
!=
"平均分"
&&
!
string
.
IsNullOrWhiteSpace
(
x
.
Name
)).
ToList
();
//根据学生姓名 查询所有的学生账号
string
StuNames
=
"'"
+
string
.
Join
(
"','"
,
StuList
.
Select
(
x
=>
x
.
Name
).
Distinct
())
+
"'"
;
var
sList
=
studentRepository
.
GetListForStuName
(
StuNames
);
//插入考试
int
ExamId
=
examRepository
.
Insert
(
new
Model
.
Entity
.
RB_Exam
()
{
ExamId
=
0
,
CourseId
=
courseId
,
ExamName
=
examName
,
CreateBy
=
userId
,
CreateTime
=
DateTime
.
Now
,
Status
=
0
});
if
(
ExamId
>
0
)
{
List
<
Model
.
Entity
.
RB_Exam_Questions
>
InsertEQ
=
new
();
//开始插入题目
foreach
(
var
item
in
EQlist
)
{
InsertEQ
.
Add
(
new
Model
.
Entity
.
RB_Exam_Questions
()
{
Id
=
0
,
ExamId
=
ExamId
,
Difficulty
=
item
.
Difficulty
,
KnowledgePoint
=
item
.
KnowledgePoint
,
Module
=
item
.
Module
,
Score
=
item
.
Score
,
Sort
=
item
.
Id
});
}
exam_QuestionsRepository
.
BatchInsert
(
InsertEQ
);
List
<
Model
.
Entity
.
RB_Exam_Score
>
InsertScore
=
new
();
//开始插入得分
foreach
(
var
item
in
StuList
)
{
var
stuModel
=
sList
.
Where
(
x
=>
x
.
StudentName
==
item
.
Name
).
FirstOrDefault
();
InsertScore
.
Add
(
new
Model
.
Entity
.
RB_Exam_Score
()
{
Id
=
0
,
ExamId
=
ExamId
,
//Sort = item.Id,
StuId
=
stuModel
?.
StudId
??
0
,
//=0表示未匹配上 暂时=0处理
//Score = item.Score,
StuName
=
item
.
Name
});
}
exam_ScoreRepository
.
BatchInsert
(
InsertScore
);
}
return
""
;
}
else
{
return
"模板匹配失败"
;
}
}
}
}
EduSpider.Services/TeacherService.cs
View file @
97826a2a
using
EduSpider.IServices
;
using
EduSpider.Utility.Data
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
...
...
@@ -13,6 +14,6 @@ namespace EduSpider.Services
/// </summary>
public
class
TeacherService
:
ITeacherService
{
}
}
EduSpider.Utility/Data/StuExamScoreHelper.cs
0 → 100644
View file @
97826a2a
using
System
;
using
System.Collections.Generic
;
using
System.Data
;
using
System.Text
;
using
System.Text.RegularExpressions
;
using
System.Linq
;
namespace
EduSpider.Utility.Data
{
/// <summary>
/// 学生成绩导入帮助类
/// </summary>
public
class
StuExamScoreHelper
{
/// <summary>
/// 根据Excel文件获取列表
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public
static
List
<
ExamQuestionModel
>
GetStuExamScoreData
(
string
filePath
,
out
List
<
StuScoreModel
>
StuList
)
{
StuList
=
new
List
<
StuScoreModel
>();
var
dt
=
NPOIHelper
.
ImportExcelToDatatable
(
filePath
,
0
,
0
,
true
);
List
<
ExamQuestionModel
>
EQList
=
new
List
<
ExamQuestionModel
>();
if
(
dt
!=
null
&&
dt
.
Rows
.
Count
>
0
)
{
//先抓取 题目列表
for
(
var
i
=
1
;
i
<
1000
;
i
++)
{
if
(
dt
.
Columns
.
Contains
(
i
.
ToString
()))
{
EQList
.
Add
(
new
ExamQuestionModel
()
{
Id
=
i
,
Difficulty
=
dt
.
Rows
[
0
][
i
.
ToString
()].
ToString
(),
KnowledgePoint
=
dt
.
Rows
[
1
][
i
.
ToString
()].
ToString
(),
Module
=
dt
.
Rows
[
2
][
i
.
ToString
()].
ToString
(),
Score
=
Convert
.
ToDecimal
(
dt
.
Rows
[
3
][
i
.
ToString
()].
ToString
())
});
}
else
{
break
;
}
}
if
(
EQList
.
Any
())
{
int
totalCount
=
dt
.
Rows
.
Count
;
//从第5行 开始 是学生
for
(
var
i
=
4
;
i
<
totalCount
;
i
++)
{
foreach
(
var
item
in
EQList
)
{
//先装姓名
StuList
.
Add
(
new
StuScoreModel
()
{
Name
=
dt
.
Rows
[
i
][
"题号"
].
ToString
().
Trim
(),
Id
=
item
.
Id
,
Score
=
Convert
.
ToDecimal
(
dt
.
Rows
[
i
][
item
.
Id
.
ToString
()].
ToString
())
});
}
if
(
i
<
totalCount
-
1
)
{
//总分 排名 百分比排名
StuList
.
Add
(
new
StuScoreModel
()
{
Name
=
dt
.
Rows
[
i
][
"题号"
].
ToString
().
Trim
(),
Id
=
-
1
,
Score
=
Convert
.
ToDecimal
(
dt
.
Rows
[
i
][
"总分"
].
ToString
())
});
StuList
.
Add
(
new
StuScoreModel
()
{
Name
=
dt
.
Rows
[
i
][
"题号"
].
ToString
().
Trim
(),
Id
=
-
2
,
Score
=
Convert
.
ToDecimal
(
dt
.
Rows
[
i
][
"排名"
].
ToString
())
});
StuList
.
Add
(
new
StuScoreModel
()
{
Name
=
dt
.
Rows
[
i
][
"题号"
].
ToString
().
Trim
(),
Id
=
-
3
,
Score
=
Convert
.
ToDecimal
(
dt
.
Rows
[
i
][
"百分比排名"
].
ToString
())
});
}
}
}
}
return
EQList
;
}
}
/// <summary>
/// 考题
/// </summary>
public
class
ExamQuestionModel
{
/// <summary>
/// 题目编号
/// </summary>
public
int
Id
{
get
;
set
;
}
/// <summary>
/// 难度
/// </summary>
public
string
Difficulty
{
get
;
set
;
}
/// <summary>
/// 知识点
/// </summary>
public
string
KnowledgePoint
{
get
;
set
;
}
/// <summary>
/// 归属模块
/// </summary>
public
string
Module
{
get
;
set
;
}
/// <summary>
/// 分数
/// </summary>
public
decimal
Score
{
get
;
set
;
}
}
/// <summary>
/// 学生成绩
/// </summary>
public
class
StuScoreModel
{
/// <summary>
/// 学生姓名
/// </summary>
public
string
Name
{
get
;
set
;
}
/// <summary>
/// 考题编号
/// </summary>
public
int
Id
{
get
;
set
;
}
/// <summary>
/// 得分
/// </summary>
public
decimal
Score
{
get
;
set
;
}
}
}
EduSpider.Utility/EduSpider.Utility.csproj
View file @
97826a2a
...
...
@@ -8,6 +8,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NPOI" Version="2.5.6" />
<PackageReference Include="VTX.FW" Version="1.1.0" />
</ItemGroup>
...
...
EduSpider.Utility/Plugin/NPOIHelper.cs
0 → 100644
View file @
97826a2a
This diff is collapsed.
Click to expand it.
EduSpider.WebApi/Controllers/Upload/UploadController.cs
0 → 100644
View file @
97826a2a
using
EduSpider.IServices
;
using
EduSpider.WebApi.Controllers.Base
;
using
Microsoft.AspNetCore.Authorization
;
using
Microsoft.AspNetCore.Mvc
;
using
Newtonsoft.Json.Linq
;
using
VTX.FW.Api
;
using
VTX.FW.Attr
;
using
VTX.FW.Helper
;
using
EduSpider.Utility
;
using
System.Threading
;
using
EduSpider.Model.Extend
;
using
System.Linq
;
using
JWT
;
using
System
;
using
System.Collections.Generic
;
using
JWT.Algorithms
;
using
JWT.Serializers
;
using
System.IO
;
using
Microsoft.AspNetCore.Cors
;
namespace
EduSpider.WebApi.Controllers
{
/// <summary>
/// 上传文件
/// </summary>
[
EnableCors
(
"AllowCors"
)]
[
Route
(
"api/[controller]/[action]"
)]
[
ApiController
]
public
class
UploadController
:
ControllerBase
{
/// <summary>
/// 考试
/// </summary>
[
Autowired
]
public
IExamService
examService
{
get
;
set
;
}
/// <summary>
/// 导入考试成绩
/// </summary>
/// <returns></returns>
[
HttpPost
]
[
AllowAnonymous
]
public
ApiResult
UploadStuExamScore
()
{
try
{
var
files
=
Request
.
Form
.
Files
;
if
(
files
.
Count
==
0
)
{
return
new
ApiResult
{
Code
=
(
int
)
ResultCode
.
Fail
,
Message
=
"未选择文件"
,
Data
=
""
};
}
var
json
=
!
string
.
IsNullOrEmpty
(
Request
.
Form
[
"params"
])
?
JObject
.
Parse
(
Request
.
Form
[
"params"
].
ToString
())
:
null
;
int
UserId
=
Convert
.
ToInt32
(
json
[
"Uid"
]
!=
null
?
json
[
"Uid"
].
ToString
()
:
"0"
);
int
CourseId
=
Convert
.
ToInt32
(
json
[
"CourseId"
]
!=
null
?
json
[
"CourseId"
].
ToString
()
:
"0"
);
string
ExamName
=
json
[
"ExamName"
]
!=
null
?
json
[
"ExamName"
].
ToString
()
:
""
;
string
filename
=
files
[
0
].
FileName
;
string
fileExtention
=
System
.
IO
.
Path
.
GetExtension
(
files
[
0
].
FileName
);
//验证文件格式
List
<
string
>
ExtList
=
new
()
{
".xls"
,
".xlsx"
};
if
(!
ExtList
.
Contains
(
fileExtention
))
{
return
new
ApiResult
{
Code
=
(
int
)
ResultCode
.
Fail
,
Message
=
"文件格式有误"
,
Data
=
""
};
}
if
(
files
[
0
].
Length
<=
0
)
{
return
new
ApiResult
{
Code
=
(
int
)
ResultCode
.
Fail
,
Message
=
"文件大小有误"
,
Data
=
""
};
}
decimal
fileMNum
=
files
[
0
].
Length
/
(
1024
*
1024
);
if
(
fileMNum
>
10
)
{
return
ApiResult
.
Failed
(
"文件不能超过10M"
);
}
string
path
=
Guid
.
NewGuid
().
ToString
()
+
fileExtention
;
string
basepath
=
AppContext
.
BaseDirectory
;
string
dateStr
=
DateTime
.
Now
.
ToString
(
"yyyyMMdd"
);
string
tempPath
=
basepath
+
"upfile\\temporary\\"
+
dateStr
+
"\\"
;
string
path_server
=
tempPath
+
path
;
string
httpPath
=
"/upfile/temporary/"
+
dateStr
+
"/"
+
path
;
if
(!
Directory
.
Exists
(
tempPath
))
{
Directory
.
CreateDirectory
(
tempPath
);
}
using
(
FileStream
fstream
=
new
(
path_server
,
FileMode
.
OpenOrCreate
,
FileAccess
.
ReadWrite
))
{
files
[
0
].
CopyTo
(
fstream
);
}
#
region
解析文档数据并保存
string
rmsg
=
examService
.
ImportExcelForStuExamScore
(
path_server
,
CourseId
,
ExamName
,
UserId
);
if
(
rmsg
==
""
)
{
return
ApiResult
.
Success
();
}
else
{
return
ApiResult
.
Failed
(
rmsg
);
}
#
endregion
}
catch
(
Exception
ex
)
{
LogHelper
.
WriteError
(
"UploadStuExamScore"
,
""
,
ex
);
return
ApiResult
.
Failed
();
}
}
/// <summary>
/// 导入考试成绩
/// </summary>
/// <returns></returns>
[
HttpPost
]
[
AllowAnonymous
]
public
ApiResult
UploadStuExamScore_Test
()
{
try
{
string
path_server
=
"C:/Users/Administrator/Desktop/TempFile/化学成绩查询表.xlsx"
;
#
region
解析文档数据并保存
string
rmsg
=
examService
.
ImportExcelForStuExamScore
(
path_server
,
44977497
,
"测试一下化学"
,
11759328
);
if
(
rmsg
==
""
)
{
return
ApiResult
.
Success
();
}
else
{
return
ApiResult
.
Failed
(
rmsg
);
}
#
endregion
}
catch
(
Exception
ex
)
{
LogHelper
.
WriteError
(
"UploadStuExamScore"
,
""
,
ex
);
return
ApiResult
.
Failed
();
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment