package top.belongme.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.belongme.exception.GlobalBusinessException;
import top.belongme.mapper.BatchMapper;
import top.belongme.mapper.CourseMapper;
import top.belongme.mapper.TaskMapper;
import top.belongme.mapper.UserMapper;
import top.belongme.model.pojo.Batch;
import top.belongme.model.pojo.Course;
import top.belongme.model.pojo.task.Task;
import top.belongme.model.pojo.user.LoginUser;
import top.belongme.model.pojo.user.User;
import top.belongme.model.result.Result;
import top.belongme.model.vo.BatchQueryVo;
import top.belongme.service.BatchService;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Title: BatchServiceImpl
* @ProjectName JobManage-Back
* @Description: TODO
* @Author DengChao
* @Date 2023/2/915:30
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class BatchServiceImpl extends ServiceImpl<BatchMapper, Batch> implements BatchService {
@Resource
private CourseMapper courseMapper;
@Resource
private TaskMapper taskMapper;
@Resource
private UserMapper userMapper;
@Resource
private String filePathBySystem;
@Resource
private Date GMTDate;
/**
* TODO 添加批次并创建同名文件夹
*
* @Author DengChao
* @Date 2023/2/9 16:11
*/
@Override
public Result addBatchAndFolderPath(Batch batch) {
Batch oldBatch = baseMapper.selectOne(new QueryWrapper<Batch>().eq("batch_name", batch.getBatchName()).eq("belong_course_id", batch.getBelongCourseId()));
if (Objects.nonNull(oldBatch)) {
log.error("批次创建失败,因为即将添加的批次已经存在");
throw new GlobalBusinessException(800, "批次已存在");
}
// 获取所属课程
Course course = courseMapper.selectById(batch.getBelongCourseId());
if (Objects.isNull(course)) {
log.error("批次创建失败,因为批次所属的课程不存在");
throw new GlobalBusinessException(800, "课程不存在");
}
// 创建批次文件夹
String batchFolderName = course.getFolderPath() + File.separator + batch.getBatchName();
File batchFolder = new File(batchFolderName);
boolean mkdirs = batchFolder.mkdirs();
if (!mkdirs) {
log.error("批次创建失败,因为批次对应的文件夹创建失败");
throw new GlobalBusinessException(800, "批次文件夹创建失败");
}
batch.setFolderPath(batchFolderName);
// 获取当前登录用户
LoginUser loginUser = (LoginUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// 设置创建者id
batch.setCreatorId(loginUser.getUser().getId());
// 设置修改者id
batch.setModifierId(loginUser.getUser().getId());
int insert = baseMapper.insert(batch);
if (insert > 0) {
// 打印日志
log.info("管理员【{}】,在【{}】课程下创建了一个批次:【{}】", loginUser.getUser().getName(), course.getCourseName(), batch.getBatchName());
return new Result(200, "批次添加成功");
} else {
log.error("批次创建失败,因为向数据库中插入记录失败");
throw new GlobalBusinessException(800, "批次添加失败");
}
}
/**
* TODO 分页查询批次
*
* @Author DengChao
* @Date 2023/2/9 22:47
*/
@Override
public IPage<Batch> selectPage(Page<Batch> pageParam, BatchQueryVo batchQueryVo) {
Course course = courseMapper.selectById(batchQueryVo.getBelongCourseId());
if (Objects.isNull(course)) {
log.info("查询失败,因为传入的所属课程不存在");
throw new GlobalBusinessException(800, "该课程不存在");
}
if (course.getStatus() == 0) {
log.info("查询失败,因为传入的所属课程已经被禁用");
throw new GlobalBusinessException(800, "该课程已被禁用");
}
IPage<Batch> batchIPage = baseMapper.selectPage(pageParam, batchQueryVo);
batchIPage.getRecords().forEach(batch -> {
// 判断批次的截止时间是否是格林威治时间,是则设置为未截止,否则设置为已截止
if (GMTDate.equals(batch.getEndTime())) {
batch.setIsEnd(0);
} else {
// 判断批次是否已截止,date1.compareTo(date2)返回值为1则date1大于date2,返回值为0则date1等于date2,返回值为-1则date1小于date2
int compare = batch.getEndTime().compareTo(new Date());
if (compare <= 0) {
// 设置批次的截止状态,1为已截止,0为未截止
batch.setIsEnd(1);
} else {
batch.setIsEnd(0);
}
}
});
return batchIPage;
}
/**
* TODO 修改批次文件夹名称,修改批次所属课程(需要移动文件夹)
*
* @Author DengChao
* @Date 2023/2/9 21:55
*/
@Override
public Result updateBatchAndFolderPath(Batch batch) {
// 获取原批次信息,判断批次是否存在
Batch oldBatch = baseMapper.selectById(batch.getId());
if (Objects.isNull(oldBatch)) {
log.error("更新批次失败,因为即将更新的批次不存在");
throw new GlobalBusinessException(800, "批次不存在");
}
// 标志批次最终是否需要被修改
boolean isModify = false;
// 获取旧批次的所属课程,因为修改批次名或所属课程名时都要使用,所以提前获取,以免修改课程时二次获取
Course oldBelongCourse = courseMapper.selectById(oldBatch.getBelongCourseId());
// 批次名称要需改的情况,文件系统中
if (!Objects.equals(batch.getBatchName(), oldBatch.getBatchName())) {
// 拼接新批次文件夹路径,旧课程的路径 + 新批次名称
String newBatchFolderPath = oldBelongCourse.getFolderPath() + File.separator + batch.getBatchName();
// 构建要修改文件夹路径的新批次对象
Batch batchUpdateFolderPath = new Batch();
// 设置批次id
batchUpdateFolderPath.setId(batch.getId());
// 设置批次新名称
// batchUpdateFolderPath.setBatchName(batch.getBatchName());
// 设置批次新文件夹路径
batchUpdateFolderPath.setFolderPath(newBatchFolderPath);
// 设置批次修改人id为当前登录的用户id
// batchUpdateFolderPath.setModifierId(loginUser.getUser().getId());
// 更新数据库中的批次信息
int update = baseMapper.updateById(batchUpdateFolderPath);
// 如果更新成功则重命名文件系统中的文件夹名称
if (update > 0) {
// 获取旧批次文件夹路径
String oldBatchFolderPath = oldBatch.getFolderPath();
// 构建旧批次文件夹
File oldBatchFolder = new File(oldBatchFolderPath);
// 构建新批次文件夹
File newBatchFolder = new File(newBatchFolderPath)
没有合适的资源?快使用搜索试试~ 我知道了~
基于JavaScript+vue的作业提交管理系统前端和后端源码+项目说明.zip
共199个文件
java:82个
js:42个
vue:21个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 79 浏览量
2023-07-02
00:37:02
上传
评论 2
收藏 330KB ZIP 举报
温馨提示
基于JavaScript+vue的作业提交管理系统前端和后端源码+项目说明.zip 【资源说明】 功能 身份验证(角色分为三个) 系统管理员 普通管理员(通常为班委,只比系统管理员少了人员管理) 普通用户(只能提交和下载自己的作业文件) 个人作业提交(仅user用户) 只能提交和下载该批次下自己的作业 课程管理(仅system和normal管理员) 一个课程对应一个系统中的同名文件夹,文件夹下有若干的批次文件夹 批次管理(仅system和normal管理员) 归属于所属课程 一个批次对应一个系统中的同名文件夹,存在于所属课程文件夹下,提交的作业文件都存储在这里 作业提交详情(仅system和normal管理员) 支持一键下载指定批次全部文件 支持下载单个已交人员提交的作业 支持查看指定批次已交人员 支持查看指定批次未交人员,可导出为Excel文件,可邮件提醒指定已绑定邮箱的用户 人员管理(仅system管理员) 个人信息管理 支持修改密码和邮箱,目前不支持密码找回,如忘记密码需联系系统管理员修改 、登陆页 默认管理员账号:admin 默认管理员密码:123456
资源推荐
资源详情
资源评论
收起资源包目录
基于JavaScript+vue的作业提交管理系统前端和后端源码+项目说明.zip (199个子文件)
.env.development 132B
.editorconfig 243B
.eslintignore 34B
.gitignore 190B
.gitignore 182B
.gitignore 29B
index.html 931B
favicon.ico 66KB
BatchServiceImpl.java 22KB
TaskServiceImpl.java 20KB
CourseServiceImpl.java 12KB
UserServiceImpl.java 11KB
SendMailServiceImpl.java 7KB
UserController.java 6KB
BatchController.java 6KB
RedisCache.java 6KB
CourseController.java 5KB
JwtAuthenticationTokenFilter.java 4KB
JwtUtil.java 4KB
ExcelServiceImpl.java 3KB
LoginServiceImpl.java 3KB
SecurityConfig.java 3KB
TaskDetailsServiceImpl.java 3KB
TaskController.java 3KB
UserDetailsServiceImpl.java 2KB
TaskDetailsController.java 2KB
FileConfig.java 2KB
LoginUser.java 2KB
Batch.java 2KB
CourseConverter.java 2KB
FastJsonRedisSerializer.java 2KB
AuthenticationEntryPointImpl.java 1KB
RedisConfig.java 1KB
PathFilter.java 1KB
User.java 1KB
UserConverter.java 1KB
BatchDTO.java 1KB
UserService.java 1KB
BatchConverter.java 1KB
ExcelController.java 1KB
DateConfig.java 1KB
AccessDeniedHandlerImpl.java 997B
BatchService.java 994B
Course.java 954B
TaskService.java 944B
TaskDetails.java 937B
Result.java 914B
CorsConfig.java 898B
Menu.java 874B
MybatisPlusConfig.java 863B
RoleController.java 845B
CourseService.java 815B
UserMapper.java 803B
CourseExceptionHandler.java 793B
EmailController.java 786B
Task.java 761B
TaskManageApplication.java 733B
LoginController.java 713B
WebUtils.java 712B
Email.java 709B
TextEmailService.java 706B
UserDTO.java 690B
TaskDetailsMapper.java 671B
SystemController.java 652B
TaskDetailsService.java 620B
CourseMapper.java 619B
BatchMapper.java 610B
TaskMapper.java 607B
SendMailService.java 593B
RoleServiceImpl.java 505B
GlobalBusinessException.java 497B
Role.java 494B
ExcelService.java 489B
UserExcel.java 486B
TaskDetailsQueryVo.java 473B
CourseDTO.java 470B
CourseQueryVo.java 465B
TestFile.java 447B
MenuMapper.java 443B
BatchQueryVo.java 436B
ResetPasswordVo.java 435B
RemindVo.java 417B
EmailVo.java 404B
Mail.java 397B
LoginService.java 364B
UserVo.java 356B
EmailConfig.java 319B
RoleService.java 314B
RoleMapper.java 307B
TaskQueryVo.java 191B
.eslintrc.js 5KB
index.js 4KB
vue.config.js 4KB
request.js 4KB
task.js 3KB
Breadcrumb.spec.js 3KB
index.js 3KB
permission.js 2KB
user.js 2KB
user.js 2KB
共 199 条
- 1
- 2
资源评论
manylinux
- 粉丝: 4411
- 资源: 2491
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功