package com.yb.service;
import com.yb.entity.Homework;
import com.yb.entity.ScoringStandard;
import com.yb.repository.ScoringStandardRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
/**
* 评分标准业务服务类
*
* @author yb
* @version 1.0.0
* @since 2024-01-01
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ScoringStandardService {
private final ScoringStandardRepository scoringStandardRepository;
/**
* 保存评分标准
*/
@Transactional
public ScoringStandard saveScoringStandard(ScoringStandard scoringStandard) {
scoringStandard.setCreateTime(LocalDateTime.now());
// 如果新标准是激活状态,则停用该科目的所有其他激活标准
if (scoringStandard.getActive()) {
List<ScoringStandard> activeStandards = scoringStandardRepository.findBySubjectTypeAndActive(
scoringStandard.getSubjectType(), true);
for (ScoringStandard activeStandard : activeStandards) {
activeStandard.setActive(false);
activeStandard.setUpdateTime(LocalDateTime.now());
scoringStandardRepository.save(activeStandard);
log.info("自动停用评分标准,ID: {}, 科目: {}", activeStandard.getId(), scoringStandard.getSubjectType());
}
}
return scoringStandardRepository.save(scoringStandard);
}
/**
* 更新评分标准
*/
@Transactional
public ScoringStandard updateScoringStandard(ScoringStandard scoringStandard) {
scoringStandard.setUpdateTime(LocalDateTime.now());
return scoringStandardRepository.save(scoringStandard);
}
/**
* 根据ID查询评分标准
*/
public Optional<ScoringStandard> findById(Long id) {
return scoringStandardRepository.findById(id);
}
/**
* 查询所有评分标准
*/
public List<ScoringStandard> findAll() {
return scoringStandardRepository.findAll();
}
/**
* 根据科目类型查询评分标准
*/
public List<ScoringStandard> findBySubjectType(Homework.SubjectType subjectType) {
return scoringStandardRepository.findBySubjectType(subjectType);
}
/**
* 根据科目类型查询激活的评分标准
*/
public Optional<ScoringStandard> findActiveStandardBySubject(Homework.SubjectType subjectType) {
return scoringStandardRepository.findFirstBySubjectTypeAndActiveOrderByCreateTimeDesc(subjectType, true);
}
/**
* 查询所有激活的评分标准
*/
public List<ScoringStandard> findActiveStandards() {
return scoringStandardRepository.findByActiveOrderByCreateTimeDesc(true);
}
/**
* 激活/停用评分标准
*/
@Transactional
public ScoringStandard toggleActiveStatus(Long id) {
Optional<ScoringStandard> standardOpt = scoringStandardRepository.findById(id);
if (standardOpt.isEmpty()) {
throw new RuntimeException("评分标准不存在,ID: " + id);
}
ScoringStandard standard = standardOpt.get();
boolean newStatus = !standard.getActive();
// 如果要激活该标准,则先停用该科目的所有其他标准
if (newStatus) {
List<ScoringStandard> activeStandards = scoringStandardRepository.findBySubjectTypeAndActive(
standard.getSubjectType(), true);
for (ScoringStandard activeStandard : activeStandards) {
if (!activeStandard.getId().equals(id)) {
activeStandard.setActive(false);
activeStandard.setUpdateTime(LocalDateTime.now());
scoringStandardRepository.save(activeStandard);
log.info("自动停用评分标准,ID: {}, 科目: {}", activeStandard.getId(), standard.getSubjectType());
}
}
}
standard.setActive(newStatus);
standard.setUpdateTime(LocalDateTime.now());
log.info("切换评分标准状态,ID: {}, 新状态: {}, 科目: {}", id, newStatus, standard.getSubjectType());
return scoringStandardRepository.save(standard);
}
/**
* 删除评分标准
*/
@Transactional
public void deleteScoringStandard(Long id) {
scoringStandardRepository.deleteById(id);
log.info("删除评分标准,ID: {}", id);
}
/**
* 根据标准名称查询
*/
public Optional<ScoringStandard> findByStandardName(String standardName) {
return scoringStandardRepository.findByStandardName(standardName);
}
/**
* 创建默认评分标准
*/
@Transactional
public void createDefaultStandards() {
// 创建语文默认评分标准
if (scoringStandardRepository.findBySubjectTypeAndActive(Homework.SubjectType.CHINESE, true).isEmpty()) {
ScoringStandard chineseStandard = new ScoringStandard();
chineseStandard.setSubjectType(Homework.SubjectType.CHINESE);
chineseStandard.setStandardName("语文作文默认评分标准");
chineseStandard.setStandardContent(
"语文作文评分标准(满分100分):\n" +
"1. 立意新颖独特(30分):主题明确,思想深刻,有独特见解\n" +
"2. 结构清晰合理(20分):层次分明,逻辑严密,首尾呼应\n" +
"3. 语言流畅优美(25分):用词准确,句式多样,表达生动\n" +
"4. 表达准确生动(25分):内容充实,感情真挚,有感染力"
);
chineseStandard.setActive(true);
saveScoringStandard(chineseStandard);
log.info("创建语文默认评分标准");
}
// 创建数学默认评分标准
if (scoringStandardRepository.findBySubjectTypeAndActive(Homework.SubjectType.MATH, true).isEmpty()) {
ScoringStandard mathStandard = new ScoringStandard();
mathStandard.setSubjectType(Homework.SubjectType.MATH);
mathStandard.setStandardName("数学应用题默认评分标准");
mathStandard.setStandardContent(
"数学应用题评分标准(满分100分):\n" +
"1. 理解题意(25分):能正确理解题目要求,提取关键信息\n" +
"2. 解题思路(25分):选择合适的解题方法,思路清晰正确\n" +
"3. 计算过程(25分):计算步骤完整,过程规范,无计算错误\n" +
"4. 答案准确性(25分):最终答案正确,单位准确,格式规范"
);
mathStandard.setActive(true);
saveScoringStandard(mathStandard);
log.info("创建数学默认评分标准");
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Spring AI 项目实战:Spring Boot +AI + DeepSeek 开发智能教育作业批改系统(源码)

共19个文件
java:12个
html:5个
yml:1个

1 下载量 117 浏览量
2025-07-02
14:25:27
上传
评论
收藏 41KB ZIP 举报
温馨提示
基于Spring Boot 3.2.0和Spring AI 1.0.0-M4开发的智能教育作业批改系统,结合DeepSeek大模型实现主观题自动批改功能。系统针对语文作文、数学应用题等主观题作业,提供语义匹配、步骤解析、动态评分标准适配等核心功能,有效解决传统人工批改效率低、主观性强的问题。文章详细阐述了项目背景、技术选型(Spring Boot+DeepSeek API+H2数据库)、系统架构及实现方案,并提供了Maven依赖配置示例。
资源推荐
资源详情
资源评论





























收起资源包目录

































共 19 条
- 1
资源评论



程序员丘山
- 粉丝: 2406
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- PHOTOSHOP说课稿.doc
- 计算机专业职业生涯规划书样本.doc
- c语言初学必背代码.doc
- 思科系统公司的无线网络帮助密尔沃基儿童医院改进患者服务.docx
- 物联网行业应用及技术.doc
- COMSOL激光熔覆技术详解:模型与视频教程助力高效表面改性 详解
- (源码)基于ROS和ChibiOS的移动机器人实时控制系统.zip
- 武汉智慧城市概念设计方案终稿.docx
- 网络营销技术组合.pptx
- 设计企业信息化解决方案.doc
- 项目管理的特点[最终版].pdf
- 2022年会计职称计算机考试题库.doc
- 2023年ORACLE定时备份方案.doc
- 企业会计学网络实验指导书.doc
- 山东省淄博市应用软件开发公司名录2019版762家.pdf
- 2023年二级C语言公共基础知识.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
