Compare commits

..

12 Commits

Author SHA1 Message Date
zhaolongfei
fc98025a3a 视频暂存为空判断 2024-07-29 19:21:26 +08:00
zhaolongfei
e2c697f860 修改bug 2024-06-19 16:43:08 +08:00
zhaolongfei
c6a785bb4f 添加视频暂存点 2024-06-19 13:55:54 +08:00
zhaolongfei
8567fa9ecc content表添加processVideo字段,添加判断 2024-06-18 13:47:46 +08:00
zhaolongfei
359b66e48a content表添加processVideo字段,添加判断 2024-06-18 13:31:39 +08:00
zhaolongfei
8125a6bd77 content表添加processVideo字段,添加判断 2024-06-18 11:12:08 +08:00
zhaolongfei
9b37e8a73d content表添加processVideo字段,添加判断 2024-06-18 09:09:52 +08:00
zhaolongfei
2fa3378e94 content表添加processVideo字段 2024-06-17 16:16:29 +08:00
zhaolongfei
0b7784779f item添加processVideo字段 2024-06-13 15:28:13 +08:00
zhaolongfei
e03118275d 修改项目下考试结束时间并未生效修复 2024-06-06 18:10:28 +08:00
zhaolongfei
1b1cb17861 Merge branch 'zcwy0525-llf' into zcwy0606-llf 2024-06-06 16:35:40 +08:00
zhaolongfei
a35c1faa49 学员在线删除失败的bug修复 2024-06-06 16:32:33 +08:00
16 changed files with 73 additions and 273 deletions

View File

@@ -9,7 +9,6 @@ import com.xboe.module.course.vo.StudyCourseVo;
import com.xboe.module.course.vo.TeacherInfoVo; import com.xboe.module.course.vo.TeacherInfoVo;
import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.course.vo.TeacherVo;
import com.xboe.module.dict.entity.DictDto; import com.xboe.module.dict.entity.DictDto;
import com.xboe.module.exam.entity.ExamTest;
import com.xboe.school.study.entity.StudyCourse; import com.xboe.school.study.entity.StudyCourse;
import com.xboe.system.user.dao.UserDao; import com.xboe.system.user.dao.UserDao;
import com.xboe.system.user.entity.User; import com.xboe.system.user.entity.User;
@@ -63,9 +62,6 @@ public class ThirdApi {
@Value("${coursesuilt.getStudyStatus}") @Value("${coursesuilt.getStudyStatus}")
private String getStudyStatus; private String getStudyStatus;
@Value("${manageApi.editExam}")
private String editExam;
//获取例外人员的id //获取例外人员的id
public List<String> getUserId(){ public List<String> getUserId(){
String responseBody = Optional.ofNullable(HttpRequest.get(infarasApiUrl+"?pid=316&type=1").execute() //prod 316 String responseBody = Optional.ofNullable(HttpRequest.get(infarasApiUrl+"?pid=316&type=1").execute() //prod 316
@@ -210,14 +206,6 @@ public class ThirdApi {
return studyCourseResult.getResult(); return studyCourseResult.getResult();
} }
public void sqlUpdate(ExamTest examTest, String token) {
examTest.setSysUpdateTime(null);
examTest.setSysCreateTime(null);
examTest.setPublishTime(null);
String resp = Optional.ofNullable(HttpRequest.post(editExam).body(JSONUtil.toJsonStr(examTest)).header("token", token).execute().body()).orElseThrow(() -> new RuntimeException("token校验失败"));
Opt.ofBlankAble(resp).map(t -> JSONUtil.toBean(t, DynamicBean.class).success());
}
public static void main(String[] args) { public static void main(String[] args) {
String token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJjb21wYW55Q29kZSI6IkMwMDEiLCJ1SWQiOiI5NjUzNDIwMjc0OTc2MDcxNjgiLCJjb21wYW55SWQiOiIxMDQxNjczOTc3Mzc5OTQ2NDk2IiwibG9naW5JZCI6IjE2ODg0NDg5MjIwNzY0OTE3NzgiLCJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsImV4cCI6MTY5MTM5OTc2NzU1OCwidXNlck5hbWUiOiLmnY7njonlhrAiLCJ1c2VySWQiOiI2QjA0OUZBRi1DMzE0LTdDQ0YtMEQyOC0wRDIzRjRDNDI1MzEifQ==.8b52dcf4d48a790ed258b9ca2b279bb269f5301722095382fbd352705b51c893"; String token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJjb21wYW55Q29kZSI6IkMwMDEiLCJ1SWQiOiI5NjUzNDIwMjc0OTc2MDcxNjgiLCJjb21wYW55SWQiOiIxMDQxNjczOTc3Mzc5OTQ2NDk2IiwibG9naW5JZCI6IjE2ODg0NDg5MjIwNzY0OTE3NzgiLCJpc3MiOiJodHRwOi8vdS5ib2UuY29tIiwiR2l2ZW5OYW1lIjoiYm9ldSIsImV4cCI6MTY5MTM5OTc2NzU1OCwidXNlck5hbWUiOiLmnY7njonlhrAiLCJ1c2VySWQiOiI2QjA0OUZBRi1DMzE0LTdDQ0YtMEQyOC0wRDIzRjRDNDI1MzEifQ==.8b52dcf4d48a790ed258b9ca2b279bb269f5301722095382fbd352705b51c893";
String resp = Optional.ofNullable(HttpRequest.post("https://u-pre.boe.com/statApi/xboe/m/stat/userdynamic/list").body(JSONUtil.toJsonStr(UserdynamicParam.builder(). String resp = Optional.ofNullable(HttpRequest.post("https://u-pre.boe.com/statApi/xboe/m/stat/userdynamic/list").body(JSONUtil.toJsonStr(UserdynamicParam.builder().
@@ -233,6 +221,4 @@ public class ThirdApi {
} }
} }

View File

@@ -1,13 +1,10 @@
package com.xboe.module.course.dao; package com.xboe.module.course.dao;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.xboe.core.orm.BaseDao; import com.xboe.core.orm.BaseDao;
import com.xboe.module.course.entity.CourseContent; import com.xboe.module.course.entity.CourseContent;
import java.util.List;
@Repository @Repository
public class CourseContentDao extends BaseDao<CourseContent> { public class CourseContentDao extends BaseDao<CourseContent> {
@@ -23,5 +20,4 @@ public class CourseContentDao extends BaseDao<CourseContent> {
int count=count(hql, courseId); int count=count(hql, courseId);
return count; return count;
} }
} }

View File

@@ -84,6 +84,11 @@ public class CourseContent extends BaseEntity {
@Column(name = "duration") @Column(name = "duration")
private Integer duration; private Integer duration;
/**
* 视频播放进度
* */
@Column(name = "progress_video")
private Float progressVideo;
/**用于学习时的状态显示,非存储字段*/ /**用于学习时的状态显示,非存储字段*/
@Transient @Transient
@@ -101,20 +106,5 @@ public class CourseContent extends BaseEntity {
this.contentRefId=contentRefId; this.contentRefId=contentRefId;
} }
@Override
public String toString() {
return "CourseContent{" +
"rid='" + rid + '\'' +
", typeId='" + typeId + '\'' +
", courseId='" + courseId + '\'' +
", csectionId='" + csectionId + '\'' +
", sortIndex=" + sortIndex +
", contentType=" + contentType +
", contentName='" + contentName + '\'' +
", contentRefId='" + contentRefId + '\'' +
", content='" + content + '\'' +
", duration=" + duration +
", status=" + status +
'}';
}
} }

View File

@@ -82,4 +82,7 @@ public interface ICourseContentService{
* @return * @return
*/ */
CourseAssess getAssess(String ccid); CourseAssess getAssess(String ccid);
void updateProcessVideo(String contentId, String courseId, Float processVideo);
} }

View File

@@ -160,9 +160,6 @@ public class CourseAuditServiceImpl implements ICourseAuditService{
status=Course.STATUS_AUDIT_NOPASS; status=Course.STATUS_AUDIT_NOPASS;
} }
/**20240620 714 管理员审核应为最终审核 添加下行代码*/
courseDao.updateMultiFieldById(courseId,UpdateBuilder.create("status", status),UpdateBuilder.create("auditAid", null),UpdateBuilder.create("auditInfo", null));
//更新审核记录状态 //更新审核记录状态
courseHRBPAuditDao.updateMultiFieldById(auditId, courseHRBPAuditDao.updateMultiFieldById(auditId,
UpdateBuilder.create("status", pass? CourseHRBPAudit.STATUS_PASS:CourseHRBPAudit.STATUS_NOPASS), UpdateBuilder.create("status", pass? CourseHRBPAudit.STATUS_PASS:CourseHRBPAudit.STATUS_NOPASS),
@@ -173,8 +170,7 @@ public class CourseAuditServiceImpl implements ICourseAuditService{
); );
//更新课程的转审状态,并把转审的信息置为空,这会的状态还未审核通过 //更新课程的转审状态,并把转审的信息置为空,这会的状态还未审核通过
if(!openCourse) { //非公开课,这已表示处理完成,直接更新课程状态 if(!openCourse) { //非公开课,这已表示处理完成,直接更新课程状态
// 20240620 注释,改为上方一同修改 courseDao.updateMultiFieldById(courseId,UpdateBuilder.create("status", status),UpdateBuilder.create("auditAid", null),UpdateBuilder.create("auditInfo", null));
// courseDao.updateMultiFieldById(courseId,UpdateBuilder.create("status", status),UpdateBuilder.create("auditAid", null),UpdateBuilder.create("auditInfo", null));
//审核通过并发布,直接发布课程 //审核通过并发布,直接发布课程
if(pass) { if(pass) {
//设置课程状态已审核完成,这里是管理员的审核 //设置课程状态已审核完成,这里是管理员的审核
@@ -207,40 +203,11 @@ public class CourseAuditServiceImpl implements ICourseAuditService{
}else { }else {
//对于公开课 //对于公开课
if(pass) { if(pass) {
/**20240620 714 管理员审核应为最终审核 lastState状态由1改为9*/
//公开课hrpb审核通过下一步是公开课的审核hrbp审核流程已经完成 //公开课hrpb审核通过下一步是公开课的审核hrbp审核流程已经完成
courseHRBPAuditDao.updateMultiFieldById(auditId, courseHRBPAuditDao.updateMultiFieldById(auditId,
UpdateBuilder.create("forward", CourseHRBPAudit.FORWARD_LAST), UpdateBuilder.create("forward", CourseHRBPAudit.FORWARD_LAST),
UpdateBuilder.create("lastState", CourseHRBPAudit.STATUS_PASS) UpdateBuilder.create("lastState", CourseHRBPAudit.STATUS_NONE)
); );
//设置课程状态已审核完成,这里是管理员的审核
courseDao.updateMultiFieldById(courseId,
UpdateBuilder.create("published", pass),
UpdateBuilder.create("erasable", false), //设置以后不能物理删除了
UpdateBuilder.create("publishTime", LocalDateTime.now()));
//发布到全文检索中
Course c=courseDao.get(courseId);
publishUtil.fullTextPublish(c);
//同时添加发布事件,这里的创建人需要修改为教师
if(eventSender!=null) {
List<CourseTeacher> teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", courseId));
if(teachers.size()>0) {
String authorIds="";
for(CourseTeacher cteacher:teachers) {
if(authorIds.equals("")) {
authorIds+=cteacher.getTeacherId();
}else {
authorIds+="|"+cteacher.getTeacherId();
}
}
eventSender.send("发布课程","PublishCourse", "发布课程【"+c.getName()+"", c.getId(), "1", c.getName(), aid,name,"authors:"+authorIds);
}
}else {
log.error("未配置事件消息发送的实现");
}
}else { }else {
//如果未通过,直接修改课程状态 //如果未通过,直接修改课程状态
courseDao.updateMultiFieldById(courseId,UpdateBuilder.create("status", status),UpdateBuilder.create("auditAid", null),UpdateBuilder.create("auditInfo", null)); courseDao.updateMultiFieldById(courseId,UpdateBuilder.create("status", status),UpdateBuilder.create("auditAid", null),UpdateBuilder.create("auditInfo", null));

View File

@@ -1,5 +1,7 @@
package com.xboe.module.course.service.impl; package com.xboe.module.course.service.impl;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List; import java.util.List;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -141,6 +143,17 @@ public class CourseContentServiceImpl implements ICourseContentService {
return assess; return assess;
} }
@Override
@Transactional
public void updateProcessVideo(String id, String courseId, Float progressVideo) {
// 处理 processVideo 为 null 的情况
if (progressVideo == null) {
progressVideo = 0.00f;
}
String sql = "UPDATE boe_course_content SET progress_video = "+ progressVideo+" WHERE id = "+ id+" AND course_id = "+ courseId+" ";
ccDao.sqlUpdate(sql);
}
@Override @Override
@Transactional @Transactional
public void updateName(String id, String name) { public void updateName(String id, String name) {

View File

@@ -1,10 +1,7 @@
package com.xboe.module.exam.api; package com.xboe.module.exam.api;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.xboe.api.ThirdApi;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.ConstraintViolationException;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@@ -33,8 +30,7 @@ public class ExamTestApi extends ApiBaseController {
@Resource @Resource
private IExamTestService examTestService; private IExamTestService examTestService;
@Resource
ThirdApi thirdApi;
/** /**
*查询考试,分页,搜索,资源归属,状态 *查询考试,分页,搜索,资源归属,状态
**/ **/
@@ -82,7 +78,7 @@ public class ExamTestApi extends ApiBaseController {
* */ * */
@PostMapping("update") @PostMapping("update")
@AutoLog(module = "考试",action = "修改考试",info = "修改考试") @AutoLog(module = "考试",action = "修改考试",info = "修改考试")
public JsonResponse<ExamTest> update(@RequestBody ExamTest examTest, HttpServletRequest request){ public JsonResponse<ExamTest> update(@RequestBody ExamTest examTest){
if(StringUtil.isBlank(examTest.getTestName())){ if(StringUtil.isBlank(examTest.getTestName())){
return badRequest("标题为空"); return badRequest("标题为空");
} }
@@ -93,13 +89,9 @@ public class ExamTestApi extends ApiBaseController {
if (examTest.getId() == null) { if (examTest.getId() == null) {
return badRequest("更新操作需要有效的主键ID"); return badRequest("更新操作需要有效的主键ID");
} }
String token = request.getHeader("Xboe-Access-Token");
if (StringUtils.isEmpty(token)) {
token = request.getHeader("token");
}
try { try {
examTestService.update(examTest); examTestService.update(examTest);
thirdApi.sqlUpdate(examTest,token);
return success(examTest); return success(examTest);
} catch (ConstraintViolationException e) { } catch (ConstraintViolationException e) {
// 捕获约束违反异常,并返回一个更具体的错误消息 // 捕获约束违反异常,并返回一个更具体的错误消息

View File

@@ -28,7 +28,7 @@ public class ExamTest extends BaseEntity {
/** /**
* 考试名称 * 考试名称
* */ * */
@Column(name = "test_name",nullable = false,length = 50) @Column(name = "test_name",length = 50)
private String testName; private String testName;
/** /**
@@ -46,7 +46,7 @@ public class ExamTest extends BaseEntity {
/** /**
* 考试时长 分钟 * 考试时长 分钟
* */ * */
@Column(name = "test_duration",nullable = false) @Column(name = "test_duration")
private Integer testDuration; private Integer testDuration;
/** /**
* 显示解析 * 显示解析
@@ -107,13 +107,13 @@ public class ExamTest extends BaseEntity {
/** /**
* 考试的类型 * 考试的类型
* */ * */
@Column(name = "test_type",nullable = false) @Column(name = "test_type")
private Integer testType; private Integer testType;
/** /**
* 发布状态 ,是否已发布 * 发布状态 ,是否已发布
*/ */
@Column(name = "published",length = 1,nullable = false) @Column(name = "published",length = 1)
private Boolean published; private Boolean published;
/** /**
* 发布时间 * 发布时间
@@ -154,7 +154,7 @@ public class ExamTest extends BaseEntity {
/** /**
* 范围1表独立使用2表课程内部 * 范围1表独立使用2表课程内部
* */ * */
@Column(name = "range_type",nullable = false) @Column(name = "range_type")
private Integer rangeType; private Integer rangeType;
/** /**
@@ -178,4 +178,6 @@ public class ExamTest extends BaseEntity {
@Transient @Transient
private String paperName; private String paperName;
} }

View File

@@ -79,7 +79,7 @@ public class ExamTestServiceImpl implements IExamTestService {
",random_count = "+examTest.getRandomCount()+" ,random_mode = "+examTest.getRandomMode()+",range_type = "+examTest.getRangeType() + ",random_count = "+examTest.getRandomCount()+" ,random_mode = "+examTest.getRandomMode()+",range_type = "+examTest.getRangeType() +
",scoring_type = "+examTest.getScoringType() +",show_analysis="+examTest.getShowAnalysis() +",show_answer = "+examTest.getShowAnswer() + ",scoring_type = "+examTest.getScoringType() +",show_analysis="+examTest.getShowAnalysis() +",show_answer = "+examTest.getShowAnswer() +
",test_duration = "+examTest.getTestDuration() +",test_name = '"+examTest.getTestName() +"',test_remark= '"+examTest.getTestRemark() + ",test_duration = "+examTest.getTestDuration() +",test_name = '"+examTest.getTestName() +"',test_remark= '"+examTest.getTestRemark() +
"',test_type= "+examTest.getTestType() +" ,test_up = '"+examTest.getTestUp() +"' ,test_front= '"+examTest.getTestFront() + "',test_type= '"+examTest.getTestType() +"' ,test_up = '"+examTest.getTestUp() +"' ,test_front= '"+examTest.getTestFront() +
"',times = '"+examTest.getTimes() +"' where id = "+examTest.getId()+""; "',times = '"+examTest.getTimes() +"' where id = "+examTest.getId()+"";
examTestDao.sqlUpdate(sql); examTestDao.sqlUpdate(sql);
} }

View File

@@ -529,7 +529,7 @@ public class StudyCourseApi extends ApiBaseController{
* @return * @return
*/ */
@PostMapping("/study-video-time") @PostMapping("/study-video-time")
public JsonResponse<Boolean> study(String studyId,String itemId,Integer videoTime){ public JsonResponse<Boolean> study(String itemId,Integer videoTime,String contentId , String courseId,Float progressVideo){
if(StringUtils.isBlank(itemId)){ if(StringUtils.isBlank(itemId)){
return error("参数错误"); return error("参数错误");
@@ -539,7 +539,10 @@ public class StudyCourseApi extends ApiBaseController{
} }
//检查是否已存在 //检查是否已存在
try { try {
studyService.updateLastTime(itemId,videoTime,getCurrent().getAccountId()); studyService.updateLastTime(itemId,videoTime, getCurrent().getAccountId());
if (contentId != null && courseId != null && progressVideo != null){
contentService.updateProcessVideo(contentId, courseId, progressVideo);
}
return success(true); return success(true);
}catch(Exception e) { }catch(Exception e) {
log.error("记录最后学习时间错误",e); log.error("记录最后学习时间错误",e);

View File

@@ -94,5 +94,5 @@ public interface IStudyService {
* @param status * @param status
* @return * @return
*/ */
PageList<StudyCourseItem> findItemPage(int pageIndex, int pageSize, String contentId, String courseId, String name, Integer status); PageList<StudyCourseItem> findItemPage(int pageIndex,int pageSize,String contentId,String courseId,String name,Integer status);
} }

View File

@@ -6,7 +6,6 @@ import com.xboe.common.OrderCondition;
import com.xboe.common.PageList; import com.xboe.common.PageList;
import com.xboe.common.beans.KeyValue; import com.xboe.common.beans.KeyValue;
import com.xboe.school.study.entity.StudyCourse; import com.xboe.school.study.entity.StudyCourse;
import com.xboe.school.study.entity.StudyCourseItem;
import com.xboe.school.study.entity.StudySignup; import com.xboe.school.study.entity.StudySignup;
/** /**
@@ -50,13 +49,6 @@ public interface IStudySignupService {
*/ */
StudyCourse addSignup(StudySignup signup); StudyCourse addSignup(StudySignup signup);
/**
* 管理员添加报名课件
* @param signup
*/
StudyCourseItem addStudyCourseItem(StudySignup signup);
/** /**
* 删除报名,只有未审核过的才可以删除 * 删除报名,只有未审核过的才可以删除
* @param id * @param id

View File

@@ -112,34 +112,29 @@ public class StudyExamServiceImpl implements IStudyExamService{
if(cexam.getScoringType()==CourseExam.SCORINGTYPE_LAST){ if(cexam.getScoringType()==CourseExam.SCORINGTYPE_LAST){
scItemDao.updateFieldById(exam.getStudyItemId(), "score",exam.getScore()); scItemDao.updateFieldById(exam.getStudyItemId(), "score",exam.getScore());
scItemDao.updateFieldById(exam.getStudyItemId(), "progress",prog); scItemDao.updateFieldById(exam.getStudyItemId(), "progress",prog);
if(exam.getScore()>=exam.getPassLine()){ }
scItemDao.updateFieldById(exam.getStudyId(), "progress",100); if(prog==100){
scItemDao.updateFieldById(exam.getStudyId(), "finish_time",LocalDateTime.now()); scItemDao.updateFieldById(exam.getStudyId(), "progress",100);
scItemDao.updateFieldById(exam.getStudyId(), "status",StudyCourseItem.STATUS_FINISH); scItemDao.updateFieldById(exam.getStudyId(), "finish_time",LocalDateTime.now());
scItemDao.updateFieldById(exam.getStudyId(), "score",exam.getScore()); scItemDao.updateFieldById(exam.getStudyId(), "status",StudyCourseItem.STATUS_FINISH);
//scDao.updateFieldById(exam.getStudyId(), "last_score",100.0f); scItemDao.updateFieldById(exam.getStudyId(), "score",100.0f);
}
} }
} }
//1最高一次,用于最高一次的计算 //1最高一次,用于最高一次的计算
if(cexam.getScoringType()==CourseExam.SCORINGTYPE_MAX) { if(cexam.getScoringType()==CourseExam.SCORINGTYPE_MAX) {
Float f=(Float)dao.findField("max(score)", FieldFilters.eq("contentId", exam.getContentId()), FieldFilters.eq("courseId", exam.getCourseId()), FieldFilters.eq("studyId", exam.getStudyId())); Float f=(Float)dao.findField("max(score)", FieldFilters.eq("contentId", exam.getContentId()));
scItemDao.updateFieldById(exam.getStudyItemId(), "score", f); scItemDao.updateFieldById(exam.getStudyItemId(), "score", f);
scItemDao.updateFieldById(exam.getStudyItemId(), "status", f>=exam.getPassLine()?StudyCourseItem.STATUS_FINISH:StudyCourseItem.STATUS_STUDYING); scItemDao.updateFieldById(exam.getStudyItemId(), "status", f>=exam.getPassLine()?StudyCourseItem.STATUS_FINISH:StudyCourseItem.STATUS_STUDYING);
scItemDao.updateFieldById(exam.getStudyItemId(), "progress",f>=exam.getPassLine()?100:f.intValue()); scItemDao.updateFieldById(exam.getStudyItemId(), "progress",f>=exam.getPassLine()?100:f.intValue());
if(f>=exam.getPassLine()){ if(f>=exam.getPassLine()){
scItemDao.updateFieldById(exam.getStudyId(), "progress",100); scItemDao.updateFieldById(exam.getStudyId(), "progress",100);
scItemDao.updateFieldById(exam.getStudyId(), "finish_time",LocalDateTime.now()); scItemDao.updateFieldById(exam.getStudyId(), "finish_time",LocalDateTime.now());
scItemDao.updateFieldById(exam.getStudyId(), "status",StudyCourseItem.STATUS_FINISH); scItemDao.updateFieldById(exam.getStudyId(), "status",StudyCourseItem.STATUS_FINISH);
scItemDao.updateFieldById(exam.getStudyId(), "score",exam.getScore()); scItemDao.updateFieldById(exam.getStudyId(), "score",100.0f);
//scDao.updateFieldById(exam.getStudyId(), "last_score",100.0f);
} }
} }
int totalContent = courseContentDao.getCount(exam.getCourseId());
scDao.finishCheck(exam.getStudyId(),exam.getCourseId(),totalContent,token);
scDao.updateFieldById(exam.getStudyId(), "last_score",exam.getScore());
//执行完毕 清除redis记录 //执行完毕 清除redis记录
// redisTemplate.delete(key); // redisTemplate.delete(key);
return ""; return "";

View File

@@ -1,9 +1,6 @@
package com.xboe.school.study.service.impl; package com.xboe.school.study.service.impl;
import java.math.BigInteger;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -11,8 +8,7 @@ import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import com.xboe.module.article.entity.Article; import com.xboe.api.ThirdApi;
import com.xboe.module.interaction.entity.Shares;
import com.xboe.school.study.entity.StudyCourse; import com.xboe.school.study.entity.StudyCourse;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -167,7 +163,9 @@ public class StudyServiceImpl implements IStudyService{
@Override @Override
public PageList<StudyCourseItem> findItemPage(int pageIndex, int pageSize, String contentId, String courseId,String name,Integer status) { public PageList<StudyCourseItem> findItemPage(int pageIndex, int pageSize, String contentId, String courseId,String name,Integer status) {
QueryBuilder query = QueryBuilder.from(StudyCourseItem.class);
QueryBuilder query=QueryBuilder.from(StudyCourseItem.class);
query.setPageIndex(pageIndex); query.setPageIndex(pageIndex);
query.setPageSize(pageSize); query.setPageSize(pageSize);
@@ -179,116 +177,19 @@ public class StudyServiceImpl implements IStudyService{
if(StringUtils.isNotBlank(courseId)) { if(StringUtils.isNotBlank(courseId)) {
query.addFilter(FieldFilters.eq("courseId",courseId)); query.addFilter(FieldFilters.eq("courseId",courseId));
} }
if(status!=null) {
if(status==1) {
query.addFilter(FieldFilters.eq("progress", 0));
}else {
query.addFilter(FieldFilters.eq("progress",100));
}
}
if(StringUtils.isNotBlank(name)) { if(StringUtils.isNotBlank(name)) {
query.addFilter(FieldFilters.eq("aname", name)); query.addFilter(FieldFilters.eq("aname", name));
} }
int pageIndex2 = (pageIndex-1)*10; return scItemDao.findPage(query.builder());
if(status!=null) {
if(status==3) {
query.addFilter(FieldFilters.eq("status", 2));
return scItemDao.findPage(query.builder());
}else if(status==2){
query.addFilter(FieldFilters.eq("status",9));
return scItemDao.findPage(query.builder());
}else if (status == 1) {
String sql = "select bsc.id,bsc.course_id,bsc.course_name,bsc.aname,item.content_id,0 as progress,1 as status from boe_study_course bsc " +
" left join boe_study_course_item item on bsc.course_id = item.course_id and bsc.id = item.study_id" +
" where bsc.course_id = '"+courseId+"' and bsc.id not in(" +
" select item.study_id from boe_study_course_item item " +
" where item.course_id = '" + courseId + "' and item.content_id = '"+ contentId+"' group by item.study_id" +
" ) group by bsc.id limit "+ pageIndex2+","+ pageSize+";";
String sql2 = "select count(*) as total from (select bsc.id,bsc.course_id,bsc.course_name,bsc.aname,item.content_id,0 as progress,1 as status from boe_study_course bsc " +
" left join boe_study_course_item item on bsc.course_id = item.course_id and bsc.id = item.study_id" +
" where bsc.course_id = '"+courseId+"' and bsc.id not in(" +
" select item.study_id from boe_study_course_item item " +
" where item.course_id = '" + courseId + "' and item.content_id = '"+ contentId+"' group by item.study_id" +
" ) group by bsc.id) as total";
log.info("资源完成情况未开始sql"+sql);
List<Object[]> list = scDao.sqlFindList(sql);
log.info("资源完成情况人数"+list);
int totalCount = scDao.sqlCount(sql2);
List<StudyCourseItem> item = new ArrayList<>();
for (Object[] objs : list) {
StudyCourseItem sc = new StudyCourseItem();
sc.setProgress(Integer.valueOf(objs[5].toString()));
sc.setStatus(Integer.valueOf(objs[6].toString()));
sc.setAname(objs[3].toString());
item.add(sc);
}
log.info("资源完成情况人员"+item);
PageList<StudyCourseItem> pageList = new PageList<>(item);
pageList.setCount(totalCount);
pageList.setPageSize(pageSize);
pageList.setList(item);
return pageList;
}
}
// String sql = "select * from (select bsc.id,bsc.course_id,bsc.course_name,bsc.aname,item.progress,item.status from boe_study_course bsc left join " +
// "boe_study_course_item item on item.course_id = bsc.course_id and item.study_id = bsc.id " +
// "where bsc.`status` in (2,9) and bsc.course_id = '"+ courseId+"' group by bsc.id " +
// " UNION ALL " +
// " select bsc.id,bsc.course_id,bsc.course_name,bsc.aname,0 as progress,1 as status from boe_study_course bsc " +
// " LEFT JOIN boe_study_course_item item on item.course_id = bsc.course_id " +
// " where bsc.course_id = '"+courseId+"' and bsc.id not in (" +
// " select bsc.id from boe_study_course bsc " +
// " left join boe_study_course_item item on item.course_id = bsc.course_id and item.study_id = bsc.id " +
// " where bsc.course_id = '" + courseId + "' and item.content_id = '"+ contentId+"' group by bsc.id" +
// " )group by bsc.id) a group by a.id limit "+ pageIndex+","+ pageSize+";";
// String sql2 = "select count(*) from (select bsc.id,bsc.course_id,bsc.course_name,bsc.aname,item.progress,item.status from boe_study_course bsc left join " +
// "boe_study_course_item item on item.course_id = bsc.course_id and item.study_id = bsc.id " +
// "where bsc.`status` in (2,9) and bsc.course_id = '"+ courseId+"' group by bsc.id " +
// " UNION ALL " +
// " select bsc.id,bsc.course_id,bsc.course_name,bsc.aname,0 as progress,1 as status from boe_study_course bsc " +
// " LEFT JOIN boe_study_course_item item on item.course_id = bsc.course_id " +
// " where bsc.course_id = '"+courseId+"' and bsc.id not in (" +
// " select bsc.id from boe_study_course bsc " +
// " left join boe_study_course_item item on item.course_id = bsc.course_id and item.study_id = bsc.id " +
// " where bsc.course_id = '" + courseId + "' and item.content_id = '"+ contentId+"' group by bsc.id" +
// " )group by bsc.id) a group by a.id";
String sql = "select a.id, a.course_id, a.course_name, a.aname, " +
"IFNULL(b.finish_time, '0') as finish_time, IFNULL(b.progress, 0) as progress, IFNULL(b.status, 1) as status " +
"from (select id, course_id, course_name, aname, 0, 1 from boe_study_course where course_id = '" + courseId + "') a " +
"left join " +
"(select bsc.id, bsc.course_id, bsc.course_name, bsc.aname, item.finish_time, item.progress, item.status " +
"from boe_study_course bsc left join boe_study_course_item item on item.course_id = bsc.course_id and item.study_id = bsc.id " +
"where bsc.course_id = '" + courseId + "' and item.content_id = '" + contentId + "' group by bsc.id) b " +
"on a.course_id = b.course_id and a.id = b.id " +
"group by a.id limit "+ pageIndex2+","+ pageSize+";";
String sql2 = "select count(*) as total from (select a.id, a.course_id, a.course_name, a.aname, " +
"IFNULL(b.finish_time, 0) as finish_time, IFNULL(b.progress, 0) as progress, IFNULL(b.status, 1) as status " +
"from (select id, course_id, course_name, aname, 0, 1 from boe_study_course where course_id = '" + courseId + "') a " +
"left join " +
"(select bsc.id, bsc.course_id, bsc.course_name, bsc.aname, item.finish_time, item.progress, item.status " +
"from boe_study_course bsc left join boe_study_course_item item on item.course_id = bsc.course_id and item.study_id = bsc.id " +
"where bsc.course_id = '" + courseId + "' and item.content_id = '" + contentId + "' group by bsc.id) b " +
"on a.course_id = b.course_id and a.id = b.id " +
"group by a.id) as total";
log.info("资源完成情况全部sql"+sql);
List<Object[]> list = scDao.sqlFindList(sql);
log.info("资源完成情况人数"+list);
int totalCount = scDao.sqlCount(sql2);
List<StudyCourseItem> item = new ArrayList<>();
for (Object[] objs : list) {
StudyCourseItem sc = new StudyCourseItem();
if (!"0".equals(objs[4].toString())) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime finishTime = LocalDateTime.parse(objs[4].toString(), formatter);
sc.setFinishTime(finishTime);
}
sc.setProgress(Integer.valueOf(objs[5].toString()));
sc.setStatus(Integer.valueOf(objs[6].toString()));
sc.setAname(objs[3].toString());
item.add(sc);
}
log.info("资源完成情况人员"+item);
PageList<StudyCourseItem> pageList = new PageList<>(item);
pageList.setCount(totalCount);
pageList.setPageSize(pageSize);
pageList.setList(item);
return pageList;
} }

View File

@@ -4,15 +4,9 @@ import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.List; import java.util.List;
import java.util.Optional;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import com.xboe.module.course.dao.CourseContentDao;
import com.xboe.module.course.dto.CourseContentDto;
import com.xboe.module.course.entity.CourseContent;
import com.xboe.school.study.dao.StudyCourseItemDao;
import com.xboe.school.study.entity.StudyCourseItem;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -46,12 +40,6 @@ public class StudySignupServiceImpl implements IStudySignupService{
@Autowired @Autowired
StudyCourseDao studyCourseDao; StudyCourseDao studyCourseDao;
@Autowired
StudyCourseItemDao scItemDao;
@Autowired
CourseContentDao contentDao;
@Autowired(required = false) @Autowired(required = false)
ICourseStudySearch esSearch; ICourseStudySearch esSearch;
@@ -81,6 +69,7 @@ public class StudySignupServiceImpl implements IStudySignupService{
signupDao.save(signup); signupDao.save(signup);
//添加到课程学习 //添加到课程学习
LocalDateTime now=LocalDateTime.now(); LocalDateTime now=LocalDateTime.now();
StudyCourse sc=new StudyCourse(); StudyCourse sc=new StudyCourse();
sc.setAddTime(now); sc.setAddTime(now);
sc.setAid(signup.getAid()); sc.setAid(signup.getAid());
@@ -135,40 +124,11 @@ public class StudySignupServiceImpl implements IStudySignupService{
//courseDao.updateMultiFieldById(signup.getCourseId(),UpdateBuilder.create("studys", "studys+1",FieldUpdateType.EXPRESSION)); //courseDao.updateMultiFieldById(signup.getCourseId(),UpdateBuilder.create("studys", "studys+1",FieldUpdateType.EXPRESSION));
} }
@Override
public StudyCourseItem addStudyCourseItem(StudySignup signup) {
String sql = "select id,course_id,content_name from boe_course_content where course_id = '"+signup.getCourseId()+"'";
List<Object[]> courseContents = contentDao.sqlFindList(sql);
if (!courseContents.isEmpty()) {
log.info("查看在线课集合内容数据(共 {} 条记录)", courseContents.size());
for (Object[] objs : courseContents){
log.info("查看在线课内容数据: {}", objs[0].toString());
// 使用toString()或自定义格式化字符串
StudyCourseItem scitem = new StudyCourseItem();
// 设置scitem的属性
scitem.setAname(signup.getName());
scitem.setAid(signup.getAid());
scitem.setCourseId(signup.getCourseId());
scitem.setProgress(0);
scitem.setScore(0f);
scitem.setStatus(1);
scitem.setContentId(objs[0].toString());
scitem.setStudyId(signup.getStudyId());
// 如果需要可以取消注释以下行来设置contentName
// scitem.setContentName(c.getContentName());
scItemDao.save(scitem);
}
} else {
log.info("没有找到在线课内容数据。");
}
return null;
}
@Override @Override
public void addList(List<StudySignup> list) { public void addList(List<StudySignup> list) {
//用于管理员添加报名 //用于管理员添加报名
for(StudySignup ss : list) { for(StudySignup ss : list) {
addSignup(ss); addSignup(ss);
// addStudyCourseItem(ss);
} }
} }
@@ -176,6 +136,7 @@ public class StudySignupServiceImpl implements IStudySignupService{
public void audit(String id, String aid, String user, boolean pass, String remark) { public void audit(String id, String aid, String user, boolean pass, String remark) {
if(pass) { if(pass) {
StudySignup signup =signupDao.get(id); StudySignup signup =signupDao.get(id);
//是否需要检查是否已报名 //是否需要检查是否已报名
StudyCourse sc=new StudyCourse(); StudyCourse sc=new StudyCourse();
sc.setAddTime(LocalDateTime.now()); sc.setAddTime(LocalDateTime.now());

View File

@@ -71,7 +71,6 @@ audience.getOrgUsers=${boe.domain}/userbasic/user/getOrgUsers
infrasApi.dict=${boe.domain}/infrasApi/dict/list infrasApi.dict=${boe.domain}/infrasApi/dict/list
#获取非报名课id #获取非报名课id
manageApi.stu.offcourse=${boe.domain}/manageApi/stu/offcourse/getOffCourseId manageApi.stu.offcourse=${boe.domain}/manageApi/stu/offcourse/getOffCourseId
manageApi.editExam=${boe.domain}/manageApi/admin/project/editExam
#获取离职教师id #获取离职教师id
userBasic.getTeacherIds=${boe.domain}/userbasic/user/getTeacherInfo userBasic.getTeacherIds=${boe.domain}/userbasic/user/getTeacherInfo
coursesuilt.getStudyStatus=${boe.domain}/manageApi/stu/project/completeStatus coursesuilt.getStudyStatus=${boe.domain}/manageApi/stu/project/completeStatus