package com.xiaozhi.serviceImpl;
import com.alibaba.dubbo.common.utils.CollectionUtils;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.xiaozhi.dao.mysql.CourseMySqlDao;
import com.xiaozhi.dao.mysql.StudentCourseDao;
import com.xiaozhi.dao.redis.CourseRedisDao;
import com.xiaozhi.model.CourseVo;
import com.xiaozhi.model.StudentVo;
import com.xiaozhi.model.mysql.CourseDo;
import com.xiaozhi.model.mysql.StudentCourseDo;
import com.xiaozhi.result.ResultCode;
import com.xiaozhi.result.resultImpl.ServiceResult;
import com.xiaozhi.service.CourseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by 小智 on 2017/4/27 0027.
*/
@Slf4j
@Service("courseServiceImpl")
public class CourseServiceImpl implements CourseService{
@Resource
private CourseRedisDao courseRedisDao;
@Resource
private CourseMySqlDao courseMySqlDao;
@Resource
private StudentCourseDao studentCourseDao;
@Override
public ServiceResult<List<CourseVo>> findList(StudentVo studentVo){
if (studentVo.isIllegal()) {
log.warn("参数studentVo不合法,studentVo:{}", studentVo);
return new ServiceResult<>(ResultCode.PARAMETER_ILLEGAL);
}
List<CourseDo> courseDos = courseRedisDao.findAll();
List<CourseVo> courseVos = Lists.newArrayList();
courseDos.forEach(courseDo -> {
//一般会转换数据库的值为显示的值,在此没有进行,而是直接保存
int remain = courseRedisDao.findCourseNumber(courseDo.getId());
//解决高并发数据为负为题,只是显示所以不影响数据正确性
if (remain < 0)
remain = 0;
CourseVo courseVo = new CourseVo();
BeanUtils.copyProperties(courseDo, courseVo);
courseVo.setRemain(remain);
courseVo.setSelected(courseVo.getTotal() - remain);
courseVos.add(courseVo);
});
return new ServiceResult<>(courseVos);
}
@Override
public ServiceResult<Void> update(StudentVo studentVo, String courseId, boolean isAdd){
if (studentVo.isIllegal() && Strings.isNullOrEmpty(courseId)) {
log.warn("参数studentVo不合法,studentVo:{},courseId:{}", studentVo, courseId);
return new ServiceResult<>(ResultCode.PARAMETER_ILLEGAL);
}
//是否到选课时间 -1:未开始; 0:开始; 1:已结束
int isSelectedTime = courseRedisDao.isSelectedTime();
if (isSelectedTime == -1) {
log.warn("选课时间未到!");
return new ServiceResult<>(ResultCode.COURSE_SELECTED_TIME);
}
if (isSelectedTime == 1) {
log.warn("选课已结束!");
return new ServiceResult<>(ResultCode.COURSE_SELECTED_OVER);
}
boolean isSucceed = courseRedisDao.update(courseId, isAdd);
if (isSucceed) {
//学生表存储 mysql
StudentCourseDo studentCourseDo = new StudentCourseDo();
studentCourseDo.setStudentId(studentVo.getId());
studentCourseDo.setCourseId(courseId);
studentCourseDao.save(studentCourseDo);
return new ServiceResult<>();
} else {
return new ServiceResult<>(ResultCode.COURSE_HAD_NONE);
}
}
@Override
public ServiceResult<List<CourseVo>> listStudentSelected(StudentVo studentVo){
if (studentVo.isIllegal()) {
log.warn("参数studentVo不合法,studentVo:{}", studentVo);
return new ServiceResult<>(ResultCode.PARAMETER_ILLEGAL);
}
List<CourseVo> courseVos = Lists.newArrayList();
List<StudentCourseDo> studentCourseDos = studentCourseDao.listByStudentId(studentVo.getId());
if (CollectionUtils.isEmpty(studentCourseDos)) {
log.info("该学生还没有选课,studentVo:{}", studentVo);
return new ServiceResult<>(courseVos);
}
studentCourseDos.forEach(studentCourseDo -> {
CourseDo courseDo = courseMySqlDao.getById(studentCourseDo.getCourseId());
CourseVo courseVo = new CourseVo();
BeanUtils.copyProperties(courseDo, courseVo);
courseVos.add(courseVo);
});
return new ServiceResult<>(courseVos);
}
@Override
public ServiceResult<Void> addCourse(StudentVo studentVo, List<CourseVo> courseVos){
for (CourseVo courseVo : courseVos) {
CourseDo courseDo = new CourseDo();
BeanUtils.copyProperties(courseVo, courseDo);
courseDo.setSelected(0);
courseDo.setRemain(courseDo.getTotal());
courseMySqlDao.save(courseDo); //Mysql保存
courseRedisDao.save(courseDo); //Redis保存
}
return new ServiceResult<>();
}
@Override
public ServiceResult<Void> setCourseTime(StudentVo studentVo, String startTime, String endTime){
courseRedisDao.addTime(startTime, endTime);
//设置选课结束时间同步数据到MYsql
redisToMySql(endTime, studentVo);
return new ServiceResult<>();
}
@Override
public ServiceResult<List<CourseVo>> listManageCourse(StudentVo studentVo){
List<CourseDo> courseDos = courseMySqlDao.listAll();
List<CourseVo> courseVos = Lists.newArrayList();
courseDos.forEach(courseDo -> {
CourseVo courseVo = new CourseVo();
BeanUtils.copyProperties(courseDo, courseVo);
courseVos.add(courseVo);
});
return new ServiceResult<>(courseVos);
}
private void redisToMySql(String time, StudentVo studentVo){
Date date = new Date(new Long(time));
Timer timer = new Timer();
timer.schedule(new MyTimerTask(studentVo), date);
}
private class MyTimerTask extends TimerTask{
private StudentVo studentVo;
public MyTimerTask(StudentVo studentVo){
this.studentVo = studentVo;
}
@Override
public void run(){
List<CourseVo> courseVos = findList(studentVo).getData();
List<CourseDo> courseDos = Lists.newArrayList();
courseVos.forEach(courseVo -> {
CourseDo courseDo = new CourseDo();
BeanUtils.copyProperties(courseVo, courseDo);
courseDos.add(courseDo);
});
courseMySqlDao.updateBatch(courseDos);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run Anywhere): Java的代码可以在不同的平台上运行,只需编写一次代码,就可以在任何支持Java的设备上执行。这得益于Java虚拟机(JVM),它充当了代码和底层硬件之间的中介。 面向对象: Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的概念。这使得Java编写的代码更加模块化、可维护和可扩展。 多线程支持: Java内置了对多线程的支持,允许程序同时执行多个任务。这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。
资源推荐
资源详情
资源评论
收起资源包目录
教务管理系统(毕业设计).zip (184个子文件)
ExceptionHandleAop.aj 6KB
bootstrap.min.css 118KB
bootstrap-datetimepicker.min.css 11KB
login_studentAll.css 11KB
login_common.css 1KB
info_library.css 1KB
.gitignore 138B
studentAll.html 9KB
test.html 919B
provider.iml 6KB
customer.iml 4KB
managementSystem.iml 862B
CourseServiceImpl.java 7KB
BeansOfficeController.java 5KB
FinancialServiceImpl.java 3KB
LibraryServiceImpl.java 3KB
LibraryInfoDaoTest.java 3KB
CourseRedisDaoImpl.java 3KB
LogAndResultAspect.java 3KB
LibraryController.java 3KB
FinancialController.java 2KB
LibraryInfoDaoImpl.java 2KB
StudentDaoImpl.java 2KB
CampusNetServiceImpl.java 2KB
CampusNetDaoImpl.java 2KB
LoginController.java 2KB
CampusNetController.java 2KB
FinancialDaoImpl.java 2KB
CourseMySqlDaoTest.java 2KB
StudentView.java 2KB
ServiceResult.java 2KB
LoginServiceImpl.java 1KB
FinancialServiceTest.java 1KB
TestServiceImpl.java 1KB
CourseRedisDaoTest.java 1KB
WebResult.java 1KB
LibraryInfoDo.java 1KB
MajorEnum.java 1KB
StudentCourseMySqlDaoTest.java 1KB
CampusNetDaoTest.java 1KB
CampusNetServiceTest.java 1KB
FinancialDo.java 1KB
ResultCode.java 1KB
StudentDo.java 1KB
FinancialDaoTest.java 1KB
CourseService.java 1KB
StudentVo.java 1KB
LibraryInfoVo.java 985B
ServiceException.java 935B
TestController.java 932B
CampusNetDo.java 914B
AcademyEnum.java 899B
FinancialVo.java 881B
StudentCommonEnum.java 843B
CourseServiceTest.java 842B
CourseDo.java 776B
CourseVo.java 732B
CampusNetVo.java 698B
LibraryService.java 680B
TestServiceTest.java 670B
CampusNetService.java 670B
CourseRedisDao.java 660B
StudentCourseDao.java 649B
FinancialService.java 638B
CourseSelectedDao.java 600B
CourseMySqlDao.java 576B
JsonUtils.java 506B
LoginService.java 471B
LibraryInfoDao.java 448B
CampusNetDao.java 430B
BaseResult.java 402B
FinancialDao.java 384B
StudentCourseDo.java 383B
TestDao.java 380B
Test2Dao.java 380B
StudentDao.java 360B
TestDo.java 342B
TestVo.java 243B
TestService.java 192B
bg_01.jpg 87KB
vue.min.js 114KB
jquery.min.js 82KB
bootstrap-datetimepicker.js 68KB
bootstrap.min.js 36KB
vue-resource.js 35KB
bootstrap-datetimepicker.zh-CN.js 813B
library.jsp 12KB
CourseManage.jsp 9KB
campusNetwork.jsp 8KB
deansOffice.jsp 8KB
financial.jsp 7KB
deansOffice.jsp 3KB
financial.jsp 2KB
library.jsp 2KB
campusNetwork.jsp 2KB
index.jsp 264B
index.jsp 76B
formbg.png 15KB
formbgCommon.png 14KB
QQ截图20170421185838.png 7KB
共 184 条
- 1
- 2
资源评论
JJJ69
- 粉丝: 6232
- 资源: 5778
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功