package cn.seecoder.courselearning.serviceimpl.course; import cn.seecoder.courselearning.mapperservice.CourseLikesMapper; import cn.seecoder.courselearning.mapperservice.CourseMapper; import cn.seecoder.courselearning.po.Course; import cn.seecoder.courselearning.po.CourseOrder; import cn.seecoder.courselearning.service.course.CourseService; import cn.seecoder.courselearning.service.order.CourseOrderService; import cn.seecoder.courselearning.service.order.QueryOrderService; import cn.seecoder.courselearning.util.Constant; import cn.seecoder.courselearning.util.PageInfoUtil; import cn.seecoder.courselearning.vo.CourseVO; import cn.seecoder.courselearning.vo.ResultVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class CourseServiceImpl implements CourseService { @Resource private CourseMapper courseMapper; @Resource private CourseLikesMapper courseLikesMapper; private QueryOrderService orderService; @Autowired public void setOrderService(QueryOrderService orderService) { this.orderService = orderService; } @Override public PageInfo getCourses(Integer currPage, Integer pageSize, Integer uid, String key) { if(currPage==null || currPage<1) currPage=1; PageHelper.startPage(currPage, pageSize); PageInfo po = new PageInfo<>(courseMapper.queryAll(key)); return getCourseVOPageInfo(uid, po); } @Override public PageInfo getCoursesByType(Integer currPage, Integer pageSize, Integer uid, String type) { if(currPage==null || currPage<1) currPage=1; PageHelper.startPage(currPage, pageSize); PageInfo po = new PageInfo<>(courseMapper.selectByType(type)); return getCourseVOPageInfo(uid, po); } @Override public PageInfo getHotCourses(Integer currPage, Integer pageSize) { if(currPage==null || currPage<1) currPage=1; PageHelper.startPage(currPage, pageSize); PageInfo po = new PageInfo<>(courseMapper.selectHotCourses()); return getCourseVOPageInfo(null, po); } @Override public List getBoughtCourses(Integer uid) { List ret = new ArrayList<>(); List courseList = courseMapper.selectByStudentId(uid); for(Course course: courseList){ ret.add(new CourseVO(course, true, false)); } return ret; } @Override public List getManageableCourses(Integer uid) { List ret = new ArrayList<>(); List courseList = courseMapper.selectByTeacherId(uid); for(Course course: courseList){ ret.add(new CourseVO(course, false, true)); } return ret; } @Override public CourseVO getCourse(Integer courseId, Integer uid) { Course course = courseMapper.selectByPrimaryKey(courseId); boolean bought = false; boolean manageable = false; if(uid != null && uid > 0) { CourseOrder order = orderService.queryMostRecentOrder(uid, courseId); if(order != null) bought = order.getStatus().equals(Constant.ORDER_STATUS_SUCCESS); manageable = uid.equals(course.getTeacherId()); } return new CourseVO(course, bought, manageable); } @Override public ResultVO createCourse(CourseVO courseVO) { courseVO.setCreateTime(new Date()); for(Course course: courseMapper.selectByTeacherId(courseVO.getTeacherId())){ if (course.getName().equals(courseVO.getName())) return new ResultVO<>(Constant.REQUEST_FAIL, "已存在同名课程!"); } Course course = new Course(courseVO); if(courseMapper.insert(course) > 0){ return new ResultVO(Constant.REQUEST_SUCCESS, "课程创建成功。", new CourseVO(course, false, true)); } return new ResultVO<>(Constant.REQUEST_FAIL, "服务器错误"); } @Override public ResultVO setCourseLike(Integer courseId, Integer userId) { if (courseLikesMapper.count(courseId, userId) > 0) { return new ResultVO<>(Constant.REQUEST_FAIL, "您已经为当前课程点赞过,请勿重复操作!"); } courseLikesMapper.insert(courseId, userId); return new ResultVO<>(Constant.REQUEST_SUCCESS, "操作成功", getCourse(courseId, userId)); } @Override public ResultVO cancelCourseLike(Integer courseId, Integer userId) { if (courseLikesMapper.count(courseId, userId) == 0) { return new ResultVO<>(Constant.REQUEST_FAIL, "您已经为当前课程取消点赞了,请勿重复操作!"); } courseLikesMapper.deleteByPrimaryKey(courseId, userId); return new ResultVO<>(Constant.REQUEST_SUCCESS, "操作成功", getCourse(courseId, userId)); } @Override public Course getByPrimaryKey(Integer courseId) { return courseMapper.selectByPrimaryKey(courseId); } private PageInfo getCourseVOPageInfo(Integer uid, PageInfo po) { PageInfo result = PageInfoUtil.convert(po, CourseVO.class); if(uid != null && uid > 0){ List voList = result.getList(); for(CourseVO vo: voList){ CourseOrder order = orderService.queryMostRecentOrder(uid, vo.getId()); if(order != null) vo.setBought(order.getStatus().equals(Constant.ORDER_STATUS_SUCCESS)); vo.setManageable(uid.equals(vo.getTeacherId())); } } return result; } }