package com.qxueyou.scc.admin.progress.service.impl.lecture; import java.math.BigDecimal; 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; @Override public Result addProgress(String targetId, String learnerId, Double start, Double end) { if (start > end || start < 0 || end < 0) { return new Result(false, "invalid arguments"); } Double[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId)); if (!checkLecture(targetId).isSuccess()) { return checkLecture(targetId); } Double 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); 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(Double start, Double 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); TraceUtils.setCreateTrace(detail); this.save(detail); } /** * »ñÈ¡½ø¶È°Ù·Ö±È * * @param targetId * @param sum * @return */ protected double getProgressPercent(String targetId, Double sum) { return 1.00d; } @Override public String getType() { return Progress.PROGRESS_TYPE_LECTURE; } protected void updateProgress(String targetId, Progress p, Double sum) { TraceUtils.setUpdateTrace(p); p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); p.setProgressPercent(1d); save(p); } protected Progress newProgress(String targetId, String learnerId, Double sum) { Progress p = new Progress(); TraceUtils.setCreateTrace(p); p.setLearnerId(learnerId); p.setLearnerName(ClientUtils.getUserName()); p.setProgressUnit("s"); p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); p.setTargetId(targetId); p.setType(Progress.PROGRESS_TYPE_LECTURE); p.setProgressPercent(1d); save(p); return p; } }