package com.qxueyou.scc.admin.progress.service.impl.lecture; import java.math.BigDecimal; import java.util.Date; import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture; import com.qxueyou.scc.admin.classes.service.impl.ClassLectureService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.qxueyou.scc.admin.progress.dao.ProgressDAO; import com.qxueyou.scc.admin.progress.model.Progress; import com.qxueyou.scc.admin.progress.model.SubjectLectureProgressDetail; import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV; import com.qxueyou.scc.admin.progress.service.IDetailProgressService; import com.qxueyou.scc.admin.progress.service.impl.ProgressService; import com.qxueyou.scc.admin.progress.service.impl.StudyProgressUtils; import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.service.ICacheService; import com.qxueyou.scc.base.service.impl.CommonAppService; import com.qxueyou.scc.base.util.ClientUtils; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.TraceUtils; @Service public class LectureCommonProgressService extends CommonAppService implements IDetailProgressService { @Autowired ICacheService cacheService; @Autowired ProgressDAO dao; @Autowired ClassLectureService classLectureService; @Override public Result addProgress(String targetId, String learnerId, int start, int end) { if (start > end || start < 0 || end < 0) { return new Result(false, "invalid arguments"); } int[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId)); if (!checkLecture(targetId).isSuccess()) { return checkLecture(targetId); } int sum = StudyProgressUtils.sum(progress); Progress p = dao.getProgress(Progress.PROGRESS_TYPE_LECTURE, targetId, learnerId); if (p == null) { p = newProgress(targetId, learnerId, sum); } else { updateProgress(targetId, p, sum); } //±£´æÑ§Ï°¼Ç¼Ã÷ϸ this.saveProgressDetail(start, end, targetId, p.getProgressId(), learnerId); classLectureService.updateLecturetime(targetId); SubjectProgressTreeV subjectProgressTreeV = dao.getSubjectProgressTreeV(targetId, learnerId); if(subjectProgressTreeV != null) { cacheService.lstRightPush(ProgressService.SUBJECT_PROGRESS_STATISTIC, subjectProgressTreeV.getParentId() + "," + learnerId); } return new Result(true, "success", CollectionUtils.newObjectMap("percent", getProgressPercent(targetId, sum))); } protected Result checkLecture(String targetId) { return new Result(true); } /** * ±£´æÑ§Ï°¼Ç¼Ã÷ϸ * * @param start * @param end * @param targetId * @param progressId * @param learnerId */ private void saveProgressDetail(int start, int end, String targetId, String progressId, String learnerId) { SubjectLectureProgressDetail detail = new SubjectLectureProgressDetail(); detail.setDeleteFlag(false); detail.setEnd(end); detail.setStart(start); detail.setTargetId(targetId); detail.setProgressId(progressId); detail.setLearnerId(learnerId); detail.setCreator(ClientUtils.getUserName()); detail.setCreateId(ClientUtils.getUserId()); detail.setCreateTime(new Date()); detail.setUpdateTime(new Date()); TraceUtils.setCreateTrace(detail); save(detail); } /** * »ñÈ¡½ø¶È°Ù·Ö±È * * @param targetId * @param sum * @return */ protected double getProgressPercent(String targetId, int sum) { return 1.00d; } @Override public String getType() { return Progress.PROGRESS_TYPE_LECTURE; } protected void updateProgress(String targetId, Progress p, int sum) { TraceUtils.setUpdateTrace(p); p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); p.setProgressPercent(1d); save(p); } protected Progress newProgress(String targetId, String learnerId, int sum) { Progress p = new Progress(); TraceUtils.setCreateTrace(p); p.setLearnerId(learnerId); p.setLearnerName(ClientUtils.getUserName()); p.setProgressUnit("s"); p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); p.setTargetId(targetId); p.setType(Progress.PROGRESS_TYPE_LECTURE); p.setProgressPercent(1d); p.setDeleteFlag(false); p.setCreator(ClientUtils.getUserName()); p.setCreateId(ClientUtils.getUserId()); p.setCreateTime(new Date()); p.setUpdator(ClientUtils.getUserName()); p.setUpdateId(ClientUtils.getUserId()); p.setUpdateTime(new Date()); save(p); return p; } }