Compare commits

..

8 Commits

16 changed files with 74 additions and 227 deletions

View File

@@ -45,7 +45,10 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.*; import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinPool;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@@ -404,20 +407,4 @@ public class ThirdApi {
.body()).orElseThrow(() -> new RuntimeException("token校验失败")); .body()).orElseThrow(() -> new RuntimeException("token校验失败"));
log.info("-------delOnLineById = " + resp); log.info("-------delOnLineById = " + resp);
} }
//获取字典信息
public List<Dict> getDictItems(CommonSearchVo searcher) {
try {
List<Dict> dictList = dictRemoteClient.getList(searcher);
if(!Objects.isNull(dictList) && dictList.size() > 0){
// List<String> dicts = dictList.stream().map(Dict::getValue).collect(Collectors.toList());
return dictList;
}else {
return null;
}
} catch (Exception e) {
log.error("-------获取字典信息 = " + e.getMessage());
}
return null;
}
} }

View File

@@ -358,10 +358,8 @@ public class CourseAuditApi extends ApiBaseController{
//修改在线课开课状态=已开课 //修改在线课开课状态=已开课
String token = request.getHeader("Xboe-Access-Token"); String token = request.getHeader("Xboe-Access-Token");
CourseParam param = new CourseParam(); CourseParam param = new CourseParam();
param.setId(c.getId()); param.setId(courseId);
param.setOrgId(c.getOrgId()); thirdApi.updateOnLineStatua(param,token);
param.setOrgName(c.getOrgName());
thirdApi.updateOrSaveCourse(param,token);
} }
return success(true); return success(true);
} catch (Exception e) { } catch (Exception e) {

View File

@@ -2,14 +2,11 @@
import java.io.OutputStream; import java.io.OutputStream;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.boe.feign.api.infrastructure.entity.CommonSearchVo;
import com.boe.feign.api.infrastructure.entity.Dict;
import com.xboe.api.ThirdApi; import com.xboe.api.ThirdApi;
import com.xboe.module.course.dto.*; import com.xboe.module.course.dto.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -172,48 +169,19 @@ public class CourseManageApi extends ApiBaseController{
List<CourseSection> sectionlist=sectionService.getByCourseId(id); List<CourseSection> sectionlist=sectionService.getByCourseId(id);
List<CourseTeacher> teachers=courseService.findTeachersByCourseId(id); List<CourseTeacher> teachers=courseService.findTeachersByCourseId(id);
List<CourseCrowd> crowds=courseService.findCrowdByCourseId(id); List<CourseCrowd> crowds=courseService.findCrowdByCourseId(id);
CommonSearchVo searcher = new CommonSearchVo(); //
searcher.setPid(637L);
searcher.setType(1);
List<Dict> dictList = thirdApi.getDictItems(searcher);
boolean isPermission = false;
if(dictList != null && dictList.size() > 0){
List<String> dicts = dictList.stream().map(Dict::getValue).collect(Collectors.toList());
isPermission = dicts.contains(course.getOrgId());
rs.put("dicts",dicts);
}
log.error("-------是否仅内网查看 = " + isPermission);
rs.put("course",course); rs.put("course",course);
rs.put("contents",cclist); rs.put("contents",cclist);
rs.put("sections",sectionlist); rs.put("sections",sectionlist);
rs.put("teachers",teachers); rs.put("teachers",teachers);
rs.put("crowds",crowds); rs.put("crowds",crowds);
rs.put("isPermission",isPermission);
return success(rs); return success(rs);
} }
@GetMapping("/getDictIds")
public JsonResponse<Map<String,Object>> getDictIds(Long pid,Integer type){
CommonSearchVo searcher = new CommonSearchVo();
if(pid==null || type ==null){
return badRequest("参数错误");
}
Map<String,Object> rs=new HashMap<String,Object>();
searcher.setPid(pid);
searcher.setType(type);
List<Dict> dictList = thirdApi.getDictItems(searcher);
rs.put("dicts",null);
if(dictList != null && dictList.size() > 0){
List<String> dicts = dictList.stream().map(Dict::getValue).collect(Collectors.toList());
rs.put("dicts",dicts);
}
return success(rs);
}
/** /**
* 管理员审核列表教师的审核不在这里此审核也应该移动CourseAuditApi中去 * 管理员审核列表教师的审核不在这里此审核也应该移动CourseAuditApi中去
* @param pager * @param pager

View File

@@ -1,9 +0,0 @@
package com.xboe.module.course.dao;
import com.xboe.core.orm.BaseDao;
import com.xboe.module.course.entity.CourseTeacherDeletedRecord;
import org.springframework.stereotype.Repository;
@Repository
public class CourseTeacherDeletedRecordDao extends BaseDao<CourseTeacherDeletedRecord> {
}

View File

@@ -33,10 +33,7 @@ public class Course extends BaseEntity {
/**所有的设备*/ /**所有的设备*/
public static int DEVICE_ALL=3; public static int DEVICE_ALL=3;
/**仅内网*/
public static int DEVICE_INTERNAL=4;
/**未提交,草稿*/ /**未提交,草稿*/
public static final int STATUS_NONE=1; public static final int STATUS_NONE=1;

View File

@@ -57,4 +57,8 @@ public class CourseTeacher extends IdBaseEntity {
@Transient @Transient
private Integer teacherType; private Integer teacherType;
/**讲师头像*/
@Transient
private String photo;
} }

View File

@@ -1,43 +0,0 @@
package com.xboe.module.course.entity;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* 课程任课教师删除记录
*/
@Data
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = SysConstant.TABLE_PRE + "course_teacher_deleted_record")
public class CourseTeacherDeletedRecord extends IdBaseEntity {
private static final long serialVersionUID = 1L;
/**
* 课程id
*/
@Column(name = "course_id", nullable = false, length = 20)
private String courseId;
/**
* 教师id实际上就是aid
*
*/
@Column(name = "teacher_id", nullable = false, length = 20)
private String teacherId;
/**
* 教师姓名
*
*/
@Column(name = "teacher_name", length = 30)
private String teacherName;
}

View File

@@ -15,12 +15,9 @@ import java.util.stream.Stream;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.management.Query; import javax.management.Query;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.xboe.api.ThirdApi; import com.xboe.api.ThirdApi;
import com.xboe.core.orm.*; import com.xboe.core.orm.*;
import com.xboe.module.course.dao.*;
import com.xboe.module.course.entity.*;
import com.xboe.school.study.dao.StudyCourseDao; import com.xboe.school.study.dao.StudyCourseDao;
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;
@@ -44,9 +41,24 @@ import com.xboe.common.beans.KeyValue;
import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.IDGenerator;
import com.xboe.common.utils.StringUtil; import com.xboe.common.utils.StringUtil;
import com.xboe.core.event.IEventDataSender; import com.xboe.core.event.IEventDataSender;
import com.xboe.module.course.dao.CourseContentDao;
import com.xboe.module.course.dao.CourseCrowdDao;
import com.xboe.module.course.dao.CourseDao;
import com.xboe.module.course.dao.CourseExamDao;
import com.xboe.module.course.dao.CourseHRBPAuditDao;
import com.xboe.module.course.dao.CourseHomeWorkDao;
import com.xboe.module.course.dao.CourseSectionDao;
import com.xboe.module.course.dao.CourseTeacherDao;
import com.xboe.module.course.dao.CourseUpdateLogDao;
import com.xboe.module.course.dto.CourseFullDto; import com.xboe.module.course.dto.CourseFullDto;
import com.xboe.module.course.dto.CourseQueryDto; import com.xboe.module.course.dto.CourseQueryDto;
import com.xboe.module.course.dto.RankingDto; import com.xboe.module.course.dto.RankingDto;
import com.xboe.module.course.entity.Course;
import com.xboe.module.course.entity.CourseCrowd;
import com.xboe.module.course.entity.CourseHRBPAudit;
import com.xboe.module.course.entity.CourseSection;
import com.xboe.module.course.entity.CourseTeacher;
import com.xboe.module.course.entity.CourseUpdateLog;
import com.xboe.module.course.service.ICourseFullTextSearch; import com.xboe.module.course.service.ICourseFullTextSearch;
import com.xboe.module.course.service.ICourseService; import com.xboe.module.course.service.ICourseService;
import com.xboe.module.interaction.service.ICourseGradeService; import com.xboe.module.interaction.service.ICourseGradeService;
@@ -113,9 +125,8 @@ public class CourseServiceImpl implements ICourseService {
@Resource @Resource
RestHighLevelClient restHighLevelClient; RestHighLevelClient restHighLevelClient;
@Resource
private CourseTeacherDeletedRecordDao courseTeacherDeletedRecordDao;
/** /**
* 生成过滤条件 * 生成过滤条件
* *
@@ -172,8 +183,6 @@ public class CourseServiceImpl implements ICourseService {
filters.add(FieldFilters.in("device", Course.DEVICE_MOBILE, Course.DEVICE_ALL)); filters.add(FieldFilters.in("device", Course.DEVICE_MOBILE, Course.DEVICE_ALL));
} else if (dto.getDevice() == Course.DEVICE_ALL) { } else if (dto.getDevice() == Course.DEVICE_ALL) {
filters.add(FieldFilters.eq("device", Course.DEVICE_ALL)); filters.add(FieldFilters.eq("device", Course.DEVICE_ALL));
} else if (dto.getDevice() == Course.DEVICE_INTERNAL) {
filters.add(FieldFilters.eq("device", Course.DEVICE_INTERNAL));
} }
} }
@@ -270,13 +279,13 @@ public class CourseServiceImpl implements ICourseService {
//// Set<String>list=new HashSet<>(); //// Set<String>list=new HashSet<>();
//// if(s!=null&&!s.isEmpty()){ //// if(s!=null&&!s.isEmpty()){
//// list=Arrays.stream(s.split(",")).collect(Collectors.toSet()); //// list=Arrays.stream(s.split(",")).collect(Collectors.toSet());
//// }else { //// }else {
//// Set<String> ss = getSeache(dto); //// Set<String> ss = getSeache(dto);
//// String courseSearch=String.join(",",ss); //// String courseSearch=String.join(",",ss);
//// redisTemplate.opsForValue().set("course_search",courseSearch); //// redisTemplate.opsForValue().set("course_search",courseSearch);
//// //设置过期时间为1分钟 //// //设置过期时间为1分钟
//// redisTemplate.expire("course_search", 1, TimeUnit.MINUTES); //// redisTemplate.expire("course_search", 1, TimeUnit.MINUTES);
//// } //// }
// Set<String> list = getSeache(dto); // Set<String> list = getSeache(dto);
// //有权限的查询,也同时查询出创建人的数据,在权限上 // //有权限的查询,也同时查询出创建人的数据,在权限上
// if(TempFilterConfig.Manager_CourseFile_ByOrgIds) { // if(TempFilterConfig.Manager_CourseFile_ByOrgIds) {
@@ -356,9 +365,8 @@ public class CourseServiceImpl implements ICourseService {
// // 使用distinct()配合自定义的去重条件 // // 使用distinct()配合自定义的去重条件
// .filter(distinctByKey(c -> c.getId())) // .filter(distinctByKey(c -> c.getId()))
// .collect(Collectors.toList()); // .collect(Collectors.toList());
//// PageList<Course> rs=courseDao.findPage(pageIndex, pageSize, filters, oc);
/// / PageList<Course> rs=courseDao.findPage(pageIndex, pageSize, filters, oc); //// long endTime = System.nanoTime();
/// / long endTime = System.nanoTime();
// //log.info("查询出的条数:"+rs.getCount()); // //log.info("查询出的条数:"+rs.getCount());
// if(!mergedList.isEmpty()){ // if(!mergedList.isEmpty()){
// //去掉未发布的课程 // //去掉未发布的课程
@@ -415,30 +423,30 @@ public class CourseServiceImpl implements ICourseService {
if (TempFilterConfig.Manager_CourseFile_ByOrgIds) { if (TempFilterConfig.Manager_CourseFile_ByOrgIds) {
if (dto.getIsSystemAdmin() == null || !dto.getIsSystemAdmin()) { if (dto.getIsSystemAdmin() == null || !dto.getIsSystemAdmin()) {
List<String> finalStrings = strings; List<String> finalStrings = strings;
log.info("dto为" + dto); log.info("dto为"+dto);
if (dto.getIsCreateCourse() != null && dto.getIsCreateCourse()) { if(dto.getIsCreateCourse()!=null&&dto.getIsCreateCourse()){
listByFilters2.removeIf(e -> { listByFilters2.removeIf(e -> {
//去掉未发布的课程 //去掉未发布的课程
if (!e.getPublished() && seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { if (!e.getPublished() && seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
return true; return true;
} }
//去掉所有条件都不符合的课程 //去掉所有条件都不符合的课程
if (!seache.contains(e.getId()) && !dto.getReadIds().contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { if(!seache.contains(e.getId())&&!dto.getReadIds().contains(e.getId())&& !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())){
return true; return true;
} }
return false; return false;
}); });
//将需要隐藏的做标记 //将需要隐藏的做标记
listByFilters2.forEach(e -> { listByFilters2.forEach(e -> {
if ((seache.contains(e.getId()) || dto.getReadIds().contains(e.getOrgId())) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { if ((seache.contains(e.getId())||dto.getReadIds().contains(e.getOrgId())) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
e.setIsPermission(false); e.setIsPermission(false);
} else { } else {
e.setIsPermission(true); e.setIsPermission(true);
} }
}); });
listByFilters2.sort(Comparator.comparing(Course::getIsPermission).reversed()); listByFilters2.sort(Comparator.comparing(Course::getIsPermission).reversed());
} else { }else{
List<Course> collect = listByFilters2.stream().filter(e -> dto.getReadIds().contains(e.getOrgId()) || dto.getOrgAid().equals(e.getSysCreateAid()) || finalStrings.contains(e.getOrgId())).collect(Collectors.toList()); List<Course> collect = listByFilters2.stream().filter(e ->dto.getReadIds().contains(e.getOrgId())||dto.getOrgAid().equals(e.getSysCreateAid())||finalStrings.contains(e.getOrgId())).collect(Collectors.toList());
List<Course> paginate = paginate(collect, pageIndex, pageSize); List<Course> paginate = paginate(collect, pageIndex, pageSize);
PageList<Course> rs = new PageList<>(); PageList<Course> rs = new PageList<>();
rs.setCount(collect.size()); rs.setCount(collect.size());
@@ -858,7 +866,7 @@ public class CourseServiceImpl implements ICourseService {
} }
// 删除ES数据 // 删除ES数据
deletedStudyResourceBatchByCourseIdAndType(id, c.getType()); deletedStudyResourceBatchByCourseIdAndType(id,c.getType());
} else { } else {
//彻底删除,课件设置为无课程状态 //彻底删除,课件设置为无课程状态
courseDao.setDeleted(id); courseDao.setDeleted(id);
@@ -992,8 +1000,6 @@ public class CourseServiceImpl implements ICourseService {
c.setSysVersion(courseDao.getVersion(c.getId())); c.setSysVersion(courseDao.getVersion(c.getId()));
full.getCourse().setSysVersion(c.getSysVersion()); full.getCourse().setSysVersion(c.getSysVersion());
// 兼容处理,记录下删除的关联数据
createCourseTeacherDeletedRecord(c.getId());
//先清空教师信息, 教师信息如果不一样了,也要加入到日志中 //先清空教师信息, 教师信息如果不一样了,也要加入到日志中
courseTeacherDao.deleteByField("courseId", c.getId()); courseTeacherDao.deleteByField("courseId", c.getId());
if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { if (full.getTeachers() != null && !full.getTeachers().isEmpty()) {
@@ -1048,8 +1054,6 @@ public class CourseServiceImpl implements ICourseService {
c.setSysVersion(courseDao.getVersion(c.getId())); c.setSysVersion(courseDao.getVersion(c.getId()));
full.getCourse().setSysVersion(c.getSysVersion()); full.getCourse().setSysVersion(c.getSysVersion());
// 兼容处理,记录下删除的关联数据
createCourseTeacherDeletedRecord(c.getId());
//先清空教师信息, 教师信息如果不一样了,也要加入到日志中 //先清空教师信息, 教师信息如果不一样了,也要加入到日志中
courseTeacherDao.deleteByField("courseId", c.getId()); courseTeacherDao.deleteByField("courseId", c.getId());
if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { if (full.getTeachers() != null && !full.getTeachers().isEmpty()) {
@@ -1085,8 +1089,6 @@ public class CourseServiceImpl implements ICourseService {
c.setPublishTime(LocalDateTime.now()); c.setPublishTime(LocalDateTime.now());
courseDao.update(c); courseDao.update(c);
// 兼容处理,记录下删除的关联数据
createCourseTeacherDeletedRecord(c.getId());
//先清空教师信息, 教师信息如果不一样了,也要加入到日志中 //先清空教师信息, 教师信息如果不一样了,也要加入到日志中
courseTeacherDao.deleteByField("courseId", c.getId()); courseTeacherDao.deleteByField("courseId", c.getId());
if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { if (full.getTeachers() != null && !full.getTeachers().isEmpty()) {
@@ -2009,25 +2011,4 @@ public class CourseServiceImpl implements ICourseService {
e.printStackTrace(); e.printStackTrace();
} }
} }
/**
* 删除boe_course_teacher数据时把删除的数据储存到boe_course_teacher_deleted_record表
* boe_course_teacher表没有deleted字段兼容处理
*
* @param courseId 课程ID
*/
private void createCourseTeacherDeletedRecord(String courseId) {
List<CourseTeacherDeletedRecord> courseTeacherList = courseTeacherDao.findList(FieldFilters.eq("courseId", courseId)).stream().map(ct -> {
CourseTeacherDeletedRecord courseTeacherDeletedRecord = new CourseTeacherDeletedRecord();
courseTeacherDeletedRecord.setCourseId(ct.getCourseId());
courseTeacherDeletedRecord.setTeacherId(ct.getTeacherId());
courseTeacherDeletedRecord.setTeacherName(ct.getTeacherName());
return courseTeacherDeletedRecord;
}).collect(Collectors.toList());
if (CollUtil.isNotEmpty(courseTeacherList)) {
courseTeacherDeletedRecordDao.saveList(courseTeacherList);
}
}
} }

View File

@@ -165,7 +165,7 @@ public class AloneExamServiceImpl implements IAloneExamService{
query.addFilter(FieldFilters.eq("aid",aea.getAid())); query.addFilter(FieldFilters.eq("aid",aea.getAid()));
} }
if(StringUtils.isNotBlank(aea.getName())) { if(StringUtils.isNotBlank(aea.getName())) {
query.addFilter(FieldFilters.eq("name",aea.getName())); query.addFilter(FieldFilters.like("name", aea.getName()));
} }
} }
return dao.findPage(query.builder()); return dao.findPage(query.builder());
@@ -247,7 +247,7 @@ public class AloneExamServiceImpl implements IAloneExamService{
query.addFilter(FieldFilters.eq("a.aid",aea.getAid())); query.addFilter(FieldFilters.eq("a.aid",aea.getAid()));
} }
if(StringUtils.isNotBlank(aea.getName())) { if(StringUtils.isNotBlank(aea.getName())) {
query.addFilter(FieldFilters.eq("a.name",aea.getName())); query.addFilter(FieldFilters.like("a.name", "%" + aea.getName() + "%"));
} }
} }
return aeDao.findPage(query.builder()); return aeDao.findPage(query.builder());

View File

@@ -75,6 +75,7 @@ public class CommentsServiceImpl implements ICommentsService{
c.setPraises(0); c.setPraises(0);
c.setFavorites(0); c.setFavorites(0);
dao.save(c); dao.save(c);
callback.increase(BoedxResourceType.toEnum(c.getObjType()),c.getObjId(), BoedxHitsField.Comments);
if(c.getParentRead()!=null && c.getParentRead()) { if(c.getParentRead()!=null && c.getParentRead()) {
dao.updateMultiFieldById(c.getParentId(), dao.updateMultiFieldById(c.getParentId(),
UpdateBuilder.create("replys","replys+1",FieldUpdateType.EXPRESSION), UpdateBuilder.create("replys","replys+1",FieldUpdateType.EXPRESSION),
@@ -87,9 +88,11 @@ public class CommentsServiceImpl implements ICommentsService{
@Override @Override
public void deleteReply(String id,String parentId) { public void deleteReply(String id,String parentId) {
Comments comment=dao.get(id);
dao.deleteById(id); dao.deleteById(id);
dao.updateMultiFieldById(parentId, UpdateBuilder.create("replys","replys-1",FieldUpdateType.EXPRESSION)); dao.updateMultiFieldById(parentId, UpdateBuilder.create("replys","replys-1",FieldUpdateType.EXPRESSION));
//需要同时回调处理,修改对应的内容的评论数量
callback.reduce(BoedxResourceType.toEnum(comment.getObjType()),comment.getObjId(),BoedxHitsField.Comments);
} }
@Override @Override
@@ -198,7 +201,7 @@ public class CommentsServiceImpl implements ICommentsService{
PageList<CommentsDto> list = new PageList<>(); PageList<CommentsDto> list = new PageList<>();
list.setList(new ArrayList<CommentsDto>()); list.setList(new ArrayList<CommentsDto>());
QueryBuilder builder = QueryBuilder.from(CommentQa.class); QueryBuilder builder = QueryBuilder.from(CommentQa.class);
// builder.addFilter(FieldFilters.eq("deleted",false)); builder.addFilter(FieldFilters.eq("deleted",false));
// builder.addFilter(FieldFilters.ne("objType",4)); // builder.addFilter(FieldFilters.ne("objType",4));
if(StringUtil.isNotBlank(toaid)){ if(StringUtil.isNotBlank(toaid)){
builder.addFilter(FieldFilters.eq("toAid",toaid)); builder.addFilter(FieldFilters.eq("toAid",toaid));

View File

@@ -1,6 +1,5 @@
package com.xboe.module.popup.entity; package com.xboe.module.popup.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xboe.core.SysConstant; import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity; import com.xboe.core.orm.IdEntity;
import lombok.Data; import lombok.Data;
@@ -25,14 +24,12 @@ public class Popup extends IdEntity {
* 开始时间 * 开始时间
* */ * */
@Column(name = "start_time") @Column(name = "start_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime; private LocalDateTime startTime;
/** /**
* 结束时间 * 结束时间
* */ * */
@Column(name = "end_time") @Column(name = "end_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime; private LocalDateTime endTime;

View File

@@ -86,7 +86,7 @@ public class QuestionServiceImpl implements IQuestionService {
// filters.add(FieldFilters.or(FieldFilters.like("title", questionDto.getKeyword()), FieldFilters.like("content", questionDto.getKeyword()))); // filters.add(FieldFilters.or(FieldFilters.like("title", questionDto.getKeyword()), FieldFilters.like("content", questionDto.getKeyword())));
List<IFieldFilter> iFieldFilters = new ArrayList<>(); List<IFieldFilter> iFieldFilters = new ArrayList<>();
iFieldFilters.add(FieldFilters.like("title", questionDto.getKeyword())); iFieldFilters.add(FieldFilters.like("title", questionDto.getKeyword()));
iFieldFilters.add(FieldFilters.like("content", questionDto.getKeyword())); // iFieldFilters.add(FieldFilters.like("content", questionDto.getKeyword()));
iFieldFilters.add(FieldFilters.like("sysCreateBy", questionDto.getKeyword())); iFieldFilters.add(FieldFilters.like("sysCreateBy", questionDto.getKeyword()));
filters.add(FieldFilters.or(iFieldFilters)); filters.add(FieldFilters.or(iFieldFilters));
} }
@@ -213,6 +213,14 @@ public class QuestionServiceImpl implements IQuestionService {
@Override @Override
public void deleteQuestions(String id) { public void deleteQuestions(String id) {
questionDao.setDeleted(id); questionDao.setDeleted(id);
// 首先根据问题id查询出所有答案id
QueryBuilder builder = QueryBuilder.from(Answer.class);
builder.addFilter(FieldFilters.eq("qid",id));
List<Answer> answerList = answerDao.findList(builder.builder());
// 删除答案(逻辑删除)
for (Answer answer : answerList) {
answerDao.setDeleted(answer.getId());
}
} }
/** /**
* 设置精华问题*/ * 设置精华问题*/

View File

@@ -10,8 +10,6 @@ import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.nacos.shaded.com.google.common.util.concurrent.RateLimiter; import com.alibaba.nacos.shaded.com.google.common.util.concurrent.RateLimiter;
import com.boe.feign.api.infrastructure.entity.CommonSearchVo;
import com.boe.feign.api.infrastructure.entity.Dict;
import com.xboe.api.ThirdApi; import com.xboe.api.ThirdApi;
import com.xboe.constants.CacheName; import com.xboe.constants.CacheName;
import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.course.vo.TeacherVo;
@@ -214,6 +212,7 @@ public class StudyCourseApi extends ApiBaseController{
ct.setRemark(t.getDescription()); ct.setRemark(t.getDescription());
ct.setSupplier(t.getSupplier()); ct.setSupplier(t.getSupplier());
ct.setTeacherType(t.getTeacherType()); ct.setTeacherType(t.getTeacherType());
ct.setPhoto(t.getPhoto());
} }
if(redisTemplate.opsForValue().get(ct.getTeacherId())==null){ if(redisTemplate.opsForValue().get(ct.getTeacherId())==null){
List<String>list=new ArrayList<>(); List<String>list=new ArrayList<>();
@@ -235,30 +234,7 @@ public class StudyCourseApi extends ApiBaseController{
rs.put("contents",cclist); rs.put("contents",cclist);
rs.put("sections",sectionlist); rs.put("sections",sectionlist);
rs.put("teachers",teachers); rs.put("teachers",teachers);
// 未选择仅内网时isPermission = false不用区分内外网
boolean isPermission = false;
if(course.getDevice() ==4){
CommonSearchVo searcher = new CommonSearchVo();
searcher.setPid(637L);
searcher.setType(1);
List<Dict> dictList = thirdApi.getDictItems(searcher);
if(dictList != null && dictList.size() > 0){
List<String> dicts = dictList.stream().map(Dict::getValue).collect(Collectors.toList());
// 选择仅内网 并且字典中配置了此课程资源归属,那么只能内网观看 返回 truw
isPermission = dicts.contains(course.getOrgId());
}
}
rs.put("isPermission",isPermission);
CommonSearchVo warn = new CommonSearchVo();
warn.setCode("course_warn");
warn.setType(1);
List<Dict> warns = thirdApi.getDictItems(warn);
if(warns != null && warns.size() > 0){
rs.put("warn",warns.get(0).getValue());
rs.put("warnTitle",warns.get(0).getName());
}
//检查是否已报名 //检查是否已报名
StudyCourse sc=service.findByCourseIdAndAid(cid, aid); StudyCourse sc=service.findByCourseIdAndAid(cid, aid);
if(pass==true && sc==null) { if(pass==true && sc==null) {
@@ -592,8 +568,8 @@ public class StudyCourseApi extends ApiBaseController{
} }
try { try {
studyService.finishVideoStudyItem(itemId, studyId,courseId,cnum,token); studyService.finishVideoStudyItem(itemId, studyId,courseId,cnum,token);
// List<StudyCourse> allUserList = thirdApi.getStudyCourseList(studyId ,courseId, token); List<StudyCourse> allUserList = thirdApi.getStudyCourseList(studyId ,courseId, token);
// log.info("在线课学习记录"+allUserList); log.info("在线课学习记录"+allUserList);
return success(true); return success(true);
}catch(Exception e) { }catch(Exception e) {
log.error("记录内容学习完成错误",e); log.error("记录内容学习完成错误",e);

View File

@@ -10,7 +10,6 @@ import com.xboe.module.course.entity.CourseExam;
import com.xboe.school.study.dao.StudyCourseDao; import com.xboe.school.study.dao.StudyCourseDao;
import com.xboe.school.study.dao.StudyCourseItemDao; import com.xboe.school.study.dao.StudyCourseItemDao;
import com.xboe.school.study.dao.StudyExamDao; import com.xboe.school.study.dao.StudyExamDao;
import com.xboe.school.study.entity.StudyCourse;
import com.xboe.school.study.entity.StudyCourseItem; import com.xboe.school.study.entity.StudyCourseItem;
import com.xboe.school.study.entity.StudyExam; import com.xboe.school.study.entity.StudyExam;
import com.xboe.school.study.service.IStudyExamService; import com.xboe.school.study.service.IStudyExamService;
@@ -171,32 +170,15 @@ public class StudyExamServiceImpl implements IStudyExamService{
} }
builder.addGroupBy("studyId"); builder.addGroupBy("studyId");
List<StudyExam> list1 = dao.findList(builder.builder()); List<StudyExam> list1 = dao.findList(builder.builder());
if(list1 != null && list1.size() > 0){ log.info("------------QueryBuilder list1.size = " + list1.size() + ",0 = " + list1.get(0));
log.info("----------StudyExam--QueryBuilder list1.size = " + list1.size() + ",0 = " + list1.get(0));
for(StudyExam item : list1){
log.info("--------------StudyExam---CourseId = " + item.getCourseId() + " , StudyId = " + item.getStudyId() + " , StudentId = " + item.getStudentId());
int totalContent = courseContentDao.getCount(item.getCourseId());
log.info("--------StudyExam--准备判断进度-------totalContent = " + totalContent);
scDao.finishCheck1(item.getStudyId(),item.getCourseId(),totalContent);
log.info("--------StudyExam--判断进度完毕----------------------");
}
}else{
QueryBuilder builder1 = QueryBuilder.from(StudyCourse.class);
if (StringUtils.isEmpty(courseId)){
return;
}
builder1.addFilter(FieldFilters.eq("courseId", courseId));
List<StudyCourse> list2 = scDao.findList(builder1.builder());
log.info("------------StudyCourse list2.size = " + list2.size() + ",0 = " + list2.get(0));
for(StudyCourse item : list2){
log.info("-------------StudyCourse----CourseId = " + item.getCourseId() + " , StudyId = " + item.getId() + " , StudentId = " + item.getAid());
int totalContent = courseContentDao.getCount(item.getCourseId());
log.info("--------StudyCourse--准备判断进度-------totalContent = " + totalContent);
scDao.finishCheck1(item.getId(),item.getCourseId(),totalContent);
log.info("--------StudyCourse--判断进度完毕----------------------");
}
}
for(StudyExam item : list1){
log.info("-----------------CourseId = " + item.getCourseId() + " , StudyId = " + item.getStudyId() + " , StudentId = " + item.getStudentId());
int totalContent = courseContentDao.getCount(item.getCourseId());
log.info("----------准备判断进度-------totalContent = " + totalContent);
scDao.finishCheck1(item.getStudyId(),item.getCourseId(),totalContent);
log.info("----------判断进度完毕----------------------");
}
} catch (Exception exception) { } catch (Exception exception) {
exception.printStackTrace(); exception.printStackTrace();
log.info("------异常----------------------" +exception.getMessage()); log.info("------异常----------------------" +exception.getMessage());

View File

@@ -282,12 +282,11 @@ public class StudyServiceImpl implements IStudyService{
return pageList; return pageList;
} }
} }
String sql = "select a.id, a.course_id, a.course_name, a.aname, " + 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,b.score " + "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 + "' and aname like '%"+name+"%') a " + "from (select id, course_id, course_name, aname, 0, 1 from boe_study_course where course_id = '" + courseId + "' and aname like '%"+name+"%') a " +
"left join " + "left join " +
"(select bsc.id, bsc.course_id, bsc.course_name, bsc.aname, item.finish_time, item.progress, item.status,MAX(item.score) score " + "(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 " + "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 + "' and item.aname like '%"+name+"%' group by bsc.id) b " + "where bsc.course_id = '" + courseId + "' and item.content_id = '" + contentId + "' and item.aname like '%"+name+"%' group by bsc.id) b " +
"on a.course_id = b.course_id and a.id = b.id " + "on a.course_id = b.course_id and a.id = b.id " +
@@ -316,9 +315,6 @@ public class StudyServiceImpl implements IStudyService{
sc.setProgress(Integer.valueOf(objs[5].toString())); sc.setProgress(Integer.valueOf(objs[5].toString()));
sc.setStatus(Integer.valueOf(objs[6].toString())); sc.setStatus(Integer.valueOf(objs[6].toString()));
sc.setAname(objs[3].toString()); sc.setAname(objs[3].toString());
if(objs[7] != null){
sc.setScore(Float.valueOf(objs[7].toString()));
}
item.add(sc); item.add(sc);
} }
log.info("资源完成情况人员"+item); log.info("资源完成情况人员"+item);

View File

@@ -60,6 +60,8 @@ public class SysUploaderApi extends ApiBaseController{
fileTypeSet.add("pptx"); fileTypeSet.add("pptx");
fileTypeSet.add("pdf"); fileTypeSet.add("pdf");
fileTypeSet.add("zip"); fileTypeSet.add("zip");
fileTypeSet.add("txt");
fileTypeSet.add("jpeg");
} }
@RequestMapping(value = "/file/upload", method = RequestMethod.POST, produces = "application/json") @RequestMapping(value = "/file/upload", method = RequestMethod.POST, produces = "application/json")