diff --git a/servers/boe-server-all/pom.xml b/servers/boe-server-all/pom.xml
index 8e84c962..e6cedf36 100644
--- a/servers/boe-server-all/pom.xml
+++ b/servers/boe-server-all/pom.xml
@@ -18,6 +18,7 @@
2021.0.5
2021.0.5.0
2.2.0
+ 9.0.69
@@ -58,11 +59,19 @@
xboe-module-scorm
1.0.0
-
+
+
com.xboe
xboe-core
1.0.0
+
+
+ org.apache.commons
+ commons-text
+ 1.10.0
+
+
com.xboe
xboe-redis
diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java
index b9b6155e..831e2299 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java
@@ -12,13 +12,10 @@ import com.xboe.module.dict.entity.DictDto;
import com.xboe.module.exam.entity.ExamTest;
import com.xboe.school.study.entity.StudyCourse;
import com.xboe.system.user.dao.UserDao;
-import com.xboe.system.user.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
diff --git a/servers/boe-server-all/src/main/java/com/xboe/data/dto/UserOrgIds.java b/servers/boe-server-all/src/main/java/com/xboe/data/dto/UserOrgIds.java
index 207084c2..78827b50 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/data/dto/UserOrgIds.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/data/dto/UserOrgIds.java
@@ -17,5 +17,7 @@ public class UserOrgIds {
private Map permissions=new HashMap();
private List ids;
+ //hrbp只读权限
+ private List readIds;
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/data/outside/OutSideDataServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/data/outside/OutSideDataServiceImpl.java
index cbafc01a..08429761 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/data/outside/OutSideDataServiceImpl.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/data/outside/OutSideDataServiceImpl.java
@@ -229,8 +229,10 @@ public class OutSideDataServiceImpl implements IOutSideDataService {
public UserOrgIds getOrgIds() {
UserOrgIds uids=new UserOrgIds();
List orgIds = new ArrayList<>();
-
+ List readIds = new ArrayList<>();
+
uids.setIds(orgIds);
+ uids.setReadIds(readIds);
String token = TokenProxy.getToken(request);
String type="application/json";
String[] headers=new String[] {"token",token,"Content-Type",type};
@@ -281,7 +283,8 @@ public class OutSideDataServiceImpl implements IOutSideDataService {
while (elements.hasNext()){
String oid=elements.next().asText();
if(!orgSetIds.contains(oid)) {
- orgIds.add(oid);
+// orgIds.add(oid);
+ readIds.add(oid);
}
}
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java
index 57f0081a..c3a31e73 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java
@@ -1,11 +1,7 @@
package com.xboe.module.course.api;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -134,7 +130,6 @@ public class CourseManageApi extends ApiBaseController{
}else {
dto.setIsSystemAdmin(false);
}
-
String ids="";
if(userOrgIds.getIds()!=null && !userOrgIds.getIds().isEmpty())
{
@@ -142,12 +137,14 @@ public class CourseManageApi extends ApiBaseController{
}
//log.info("获取到的用户的组织机构权限ids",ids);
String aid=getCurrent().getAccountId();
+// String aid="1706272694871445506";
//如果前端查询当前人的,这里去掉
if(StringUtils.isNotBlank(dto.getAid())) {
dto.setAid(null);
}
dto.setOrgAid(aid);
dto.setOrgIds(ids);
+ dto.setReadIds(userOrgIds.getReadIds());
PageList coursePageList = courseService.findPage(pager.getPageIndex(), pager.getPageSize(),dto);
return success(coursePageList);
}catch(Exception e) {
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseContentDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseContentDao.java
index b945ea63..0f1046d6 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseContentDao.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseContentDao.java
@@ -1,10 +1,13 @@
package com.xboe.module.course.dao;
+import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.xboe.core.orm.BaseDao;
import com.xboe.module.course.entity.CourseContent;
+import java.util.List;
+
@Repository
public class CourseContentDao extends BaseDao {
@@ -20,4 +23,5 @@ public class CourseContentDao extends BaseDao {
int count=count(hql, courseId);
return count;
}
+
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CourseQueryDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CourseQueryDto.java
index 72ff5da1..5829d723 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CourseQueryDto.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/CourseQueryDto.java
@@ -2,6 +2,8 @@ package com.xboe.module.course.dto;
import lombok.Data;
+import java.util.List;
+
/**
* 课程查询的条件对象
*/
@@ -102,6 +104,9 @@ public class CourseQueryDto {
* */
private String orgIds;
+ //hrpb只读
+ private List readIds;
+
/**用户权限的查询*/
private String orgAid;
@@ -110,6 +115,11 @@ public class CourseQueryDto {
*/
private Boolean isSystemAdmin;
+ /**
+ * 是否是新建在线可
+ */
+ private Boolean isCreateCourse;
+
private Boolean visible;
private String refId;
@@ -129,4 +139,5 @@ public class CourseQueryDto {
* 登录人id
*/
private String userId;
+
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java
index 5d7fdca3..cd9fe5f2 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java
@@ -370,6 +370,9 @@ public class Course extends BaseEntity {
@Column(name = "ref_type",length=32,columnDefinition="varchar(32) comment '反向关联的类型'")
private String refType;
+
+ @Transient
+ private Boolean isPermission=true;
@Transient
private String orgName;
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseContent.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseContent.java
index a93e159c..3e92ee3a 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseContent.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/CourseContent.java
@@ -83,8 +83,13 @@ public class CourseContent extends BaseEntity {
* */
@Column(name = "duration")
private Integer duration;
-
-
+
+ /**
+ * 视频播放进度
+ * */
+ @Column(name = "progress_video")
+ private Float progressVideo;
+
/**用于学习时的状态显示,非存储字段*/
@Transient
private Integer status;
@@ -100,6 +105,21 @@ public class CourseContent extends BaseEntity {
this.contentType=contentType;
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 +
+ '}';
+ }
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java
index 4e5e2f83..f1f7d543 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java
@@ -82,4 +82,7 @@ public interface ICourseContentService{
* @return
*/
CourseAssess getAssess(String ccid);
+
+ void updateProcessVideo(String contentId, String courseId, Float processVideo);
+
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java
index c2cc351d..d517167d 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java
@@ -1,5 +1,7 @@
package com.xboe.module.course.service.impl;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
@@ -141,6 +143,17 @@ public class CourseContentServiceImpl implements ICourseContentService {
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
@Transactional
public void updateName(String id, String name) {
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java
index 82eabf81..873bcc5d 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java
@@ -3,17 +3,26 @@ package com.xboe.module.course.service.impl;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.annotation.Resource;
+import javax.management.Query;
+import com.xboe.api.ThirdApi;
+import com.xboe.core.orm.*;
+import com.xboe.data.dto.UserData;
+import com.xboe.school.study.dao.StudyCourseDao;
+import com.xboe.school.study.entity.StudyCourse;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.mapping.IdGenerator;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -26,11 +35,6 @@ import com.xboe.common.beans.KeyValue;
import com.xboe.common.utils.IDGenerator;
import com.xboe.common.utils.StringUtil;
import com.xboe.core.event.IEventDataSender;
-import com.xboe.core.orm.FieldFilters;
-import com.xboe.core.orm.IFieldFilter;
-import com.xboe.core.orm.LikeMatchMode;
-import com.xboe.core.orm.QueryBuilder;
-import com.xboe.core.orm.UpdateBuilder;
import com.xboe.module.course.dao.CourseContentDao;
import com.xboe.module.course.dao.CourseCrowdDao;
import com.xboe.module.course.dao.CourseDao;
@@ -61,646 +65,962 @@ import lombok.extern.slf4j.Slf4j;
@Service
@Transactional
public class CourseServiceImpl implements ICourseService {
-
+
@Resource
private CourseDao courseDao;
-
+
@Resource
private CourseTeacherDao courseTeacherDao;
-
+
@Resource
private CourseCrowdDao courseCrowdDao;
- @Resource
- private CourseContentDao courseContentDao;
-
- @Resource
- private CourseHomeWorkDao courseHomeWorkDao;
-
- @Resource
- private CourseSectionDao courseSectionDao;
+ @Resource
+ private CourseContentDao courseContentDao;
@Resource
- private CourseUpdateLogDao updateLogDao;
+ private CourseHomeWorkDao courseHomeWorkDao;
+
+ @Resource
+ private CourseSectionDao courseSectionDao;
+
+ @Resource
+ private CourseUpdateLogDao updateLogDao;
+
+ @Resource
+ private CourseExamDao courseExamDao;
+
+ @Resource
+ private CourseHRBPAuditDao courseHRBPAuditDao;
+
- @Resource
- private CourseExamDao courseExamDao;
-
- @Resource
- private CourseHRBPAuditDao courseHRBPAuditDao;
-
-
@Resource
private SysLogAuditDao logAuditDao;//审核日志记录
- @Resource
- private ICourseGradeService courseGradeService;
-
- @Resource
- private IAccountService accountService;
+ @Resource
+ private ICourseGradeService courseGradeService;
+
+ @Resource
+ private IAccountService accountService;
+
+
+ @Resource
+ private IResDataManagerService rdmService;
+
+ @Autowired(required = false)
+ private ICourseFullTextSearch fullTextSearch;
+
+ @Resource
+ PublishCourseUtil publishUtil;
+
+ @Autowired(required = false)
+ private IEventDataSender eventSender;
+
-
- @Resource
- private IResDataManagerService rdmService;
-
- @Autowired(required = false)
- private ICourseFullTextSearch fullTextSearch;
-
- @Resource
- PublishCourseUtil publishUtil;
-
- @Autowired(required = false)
- private IEventDataSender eventSender;
/**
* 生成过滤条件
+ *
* @param dto
* @return
*/
- private List createFilters(CourseQueryDto dto){
- List filters = new ArrayList<>();
- List iFieldFilters = new ArrayList<>();
+ private List createFilters(CourseQueryDto dto) {
+ List filters = new ArrayList<>();
+ List iFieldFilters = new ArrayList<>();
- if(StringUtils.isNotBlank(dto.getKeyword())){
+ if (StringUtils.isNotBlank(dto.getKeyword())) {
// filters.add(FieldFilters.or(FieldFilters.like("keywords", dto.getKeyword()),FieldFilters.like("name", dto.getKeyword()), ));
- iFieldFilters.add(FieldFilters.like("keywords", dto.getKeyword()));
- iFieldFilters.add(FieldFilters.like("name", dto.getKeyword()));
- iFieldFilters.add(FieldFilters.like("sysCreateBy",dto.getKeyword()));
- filters.add(FieldFilters.or(iFieldFilters));
- }else {
- if(StringUtils.isNotBlank(dto.getName())){
- filters.add(FieldFilters.like("name",dto.getName()));
- }
+ iFieldFilters.add(FieldFilters.like("keywords", dto.getKeyword()));
+ iFieldFilters.add(FieldFilters.like("name", dto.getKeyword()));
+ iFieldFilters.add(FieldFilters.like("sysCreateBy", dto.getKeyword()));
+ filters.add(FieldFilters.or(iFieldFilters));
+ } else {
+ if (StringUtils.isNotBlank(dto.getName())) {
+ filters.add(FieldFilters.like("name", dto.getName()));
+ }
}
- if(StringUtils.isNotBlank(dto.getCreateUser())){
- filters.add(FieldFilters.like("sysCreateBy", LikeMatchMode.ANYWHERE,dto.getCreateUser()));
+ if (StringUtils.isNotBlank(dto.getCreateUser())) {
+ filters.add(FieldFilters.like("sysCreateBy", LikeMatchMode.ANYWHERE, dto.getCreateUser()));
}
- if(StringUtils.isNotBlank(dto.getAid())){
- filters.add(FieldFilters.eq("sysCreateAid",dto.getAid()));
+ if (StringUtils.isNotBlank(dto.getAid())) {
+ filters.add(FieldFilters.eq("sysCreateAid", dto.getAid()));
}
-
- if(StringUtils.isNotBlank(dto.getResOwner3())){
- filters.add(FieldFilters.eq("resOwner3",dto.getResOwner3()));
+
+ if (StringUtils.isNotBlank(dto.getResOwner3())) {
+ filters.add(FieldFilters.eq("resOwner3", dto.getResOwner3()));
}
- if(StringUtils.isNotBlank(dto.getResOwner2())){
- filters.add(FieldFilters.eq("resOwner2",dto.getResOwner2()));
+ if (StringUtils.isNotBlank(dto.getResOwner2())) {
+ filters.add(FieldFilters.eq("resOwner2", dto.getResOwner2()));
}
- if(StringUtils.isNotBlank(dto.getResOwner1())){
- filters.add(FieldFilters.eq("resOwner1",dto.getResOwner1()));
+ if (StringUtils.isNotBlank(dto.getResOwner1())) {
+ filters.add(FieldFilters.eq("resOwner1", dto.getResOwner1()));
+ }
+
+ if (StringUtils.isNotBlank(dto.getRefId())) {
+ filters.add(FieldFilters.eq("refId", dto.getRefId()));
+ }
+ if (StringUtils.isNotBlank(dto.getRefType())) {
+ filters.add(FieldFilters.eq("refType", dto.getRefType()));
}
-
- if(StringUtils.isNotBlank(dto.getRefId())){
- filters.add(FieldFilters.eq("refId",dto.getRefId()));
- }
- if(StringUtils.isNotBlank(dto.getRefType())){
- filters.add(FieldFilters.eq("refType",dto.getRefType()));
- }
// if(dto.getVisible()!=null) {
// filters.add(FieldFilters.eq("visible",dto.getVisible()));
// }
-
- if(dto.getDevice()!=null){
- if(dto.getDevice()==Course.DEVICE_PC) {
- filters.add(FieldFilters.in("device",Course.DEVICE_PC,Course.DEVICE_ALL));
- }else if(dto.getDevice()==Course.DEVICE_MOBILE) {
- filters.add(FieldFilters.in("device",Course.DEVICE_MOBILE,Course.DEVICE_ALL));
- }else if(dto.getDevice()==Course.DEVICE_ALL) {
- filters.add(FieldFilters.eq("device",Course.DEVICE_ALL));
- }
-
- }
-
- if(dto.getYearFilter()!=null && dto.getYearFilter()) {
- LocalDateTime ldt=LocalDateTime.of(2022,1, 1, 0, 0);
- filters.add(FieldFilters.ge("publishTime",ldt));
- }
-
+
+ if (dto.getDevice() != null) {
+ if (dto.getDevice() == Course.DEVICE_PC) {
+ filters.add(FieldFilters.in("device", Course.DEVICE_PC, Course.DEVICE_ALL));
+ } else if (dto.getDevice() == Course.DEVICE_MOBILE) {
+ filters.add(FieldFilters.in("device", Course.DEVICE_MOBILE, Course.DEVICE_ALL));
+ } else if (dto.getDevice() == Course.DEVICE_ALL) {
+ filters.add(FieldFilters.eq("device", Course.DEVICE_ALL));
+ }
+
+ }
+
+ if (dto.getYearFilter() != null && dto.getYearFilter()) {
+ LocalDateTime ldt = LocalDateTime.of(2022, 1, 1, 0, 0);
+ filters.add(FieldFilters.ge("publishTime", ldt));
+ }
+
// if(dto.getType()!=null){
// filters.add(FieldFilters.eq("type",dto.getType()));
// }
//对场景的查询是单表还是多条的问题,如果单独的分类绑定表,这种查询会单独的处理
- if(StringUtils.isNotBlank(dto.getScenes())){
+ if (StringUtils.isNotBlank(dto.getScenes())) {
// if(dto.getScenes().indexOf(CourseQueryDto.SEPARATE)>0) {
// //String[] array=dto.getScenes().split(CourseQueryDto.SEPARATE);
// //后续再完善
// }
// else {
- filters.add(FieldFilters.eq("forScene",dto.getScenes()));
+ filters.add(FieldFilters.eq("forScene", dto.getScenes()));
// }
}
-
- if(StringUtils.isNotBlank(dto.getStatus())){
- if(dto.getStatus().indexOf(CourseQueryDto.SEPARATE)>0) {
- String[] array=dto.getStatus().split(CourseQueryDto.SEPARATE);
- List types=new ArrayList();
- for(String s : array) {
- types.add(Integer.valueOf(s));
- }
- filters.add(FieldFilters.in("status",types));//多个的情况查询
- }else {
- filters.add(FieldFilters.eq("status",Integer.valueOf(dto.getStatus())));
- }
+
+ if (StringUtils.isNotBlank(dto.getStatus())) {
+ if (dto.getStatus().indexOf(CourseQueryDto.SEPARATE) > 0) {
+ String[] array = dto.getStatus().split(CourseQueryDto.SEPARATE);
+ List types = new ArrayList();
+ for (String s : array) {
+ types.add(Integer.valueOf(s));
+ }
+ filters.add(FieldFilters.in("status", types));//多个的情况查询
+ } else {
+ filters.add(FieldFilters.eq("status", Integer.valueOf(dto.getStatus())));
+ }
}
//对于系统分类是一个课程只是一个分类,还是多个的问题。如果单独的分类绑定表,这种查询会单独的处理
- if(StringUtils.isNotBlank(dto.getSysType3())){
- filters.add(FieldFilters.eq("sysType3",dto.getSysType3()));
+ if (StringUtils.isNotBlank(dto.getSysType3())) {
+ filters.add(FieldFilters.eq("sysType3", dto.getSysType3()));
}
- if(StringUtils.isNotBlank(dto.getSysType2())){
- filters.add(FieldFilters.eq("sysType2",dto.getSysType2()));
+ if (StringUtils.isNotBlank(dto.getSysType2())) {
+ filters.add(FieldFilters.eq("sysType2", dto.getSysType2()));
}
- if(StringUtils.isNotBlank(dto.getSysType1())){
- filters.add(FieldFilters.eq("sysType1",dto.getSysType1()));
+ if (StringUtils.isNotBlank(dto.getSysType1())) {
+ filters.add(FieldFilters.eq("sysType1", dto.getSysType1()));
}
-
- if(dto.getPublish()!=null){
- filters.add(FieldFilters.eq("published",dto.getPublish()));
+
+ if (dto.getPublish() != null) {
+ filters.add(FieldFilters.eq("published", dto.getPublish()));
}
//是否启用
- if(dto.getEnabled()!=null){
- filters.add(FieldFilters.eq("enabled",dto.getEnabled()));
+ if (dto.getEnabled() != null) {
+ filters.add(FieldFilters.eq("enabled", dto.getEnabled()));
}
return filters;
}
- @Override
- public List findList(int num, CourseQueryDto dto) {
- List filters = createFilters(dto);
- //自动添加过滤已删除
- filters.add(FieldFilters.eq("deleted",false));
- filters.add(FieldFilters.eq("enabled",true));
-
- QueryBuilder query=QueryBuilder.from(Course.class).addFilters(filters);
-
- if(dto.getTopOrder()!=null) {
- if(dto.getTopOrder()){
- //query.addOrder(OrderCondition.desc("isTop"));
- query.addOrder(OrderCondition.desc("topTime"));
- }
- }
-
- OrderCondition oc=null;
- if(StringUtils.isNotBlank(dto.getOrderField())) {
- if(dto.getOrderAsc()|| dto.getOrderAsc()==null) {
- oc=OrderCondition.asc(dto.getOrderField());
- }else {
- oc=OrderCondition.desc(dto.getOrderField());
- }
- }else {
- oc=OrderCondition.desc("id");
- }
- query.addOrder(oc);
- query.setPageSize(num);
- return courseDao.findList(query.builder());
- }
-
- @Override
- public PageList findPage(int pageIndex, int pageSize, CourseQueryDto dto) {
- List filters = createFilters(dto);
-
- //有权限的查询,也同时查询出创建人的数据,在权限上
- if(TempFilterConfig.Manager_CourseFile_ByOrgIds) {
- if(dto.getIsSystemAdmin()==null || !dto.getIsSystemAdmin()) {
-
- if(StringUtil.isNotBlank(dto.getOrgIds())){
- //log.info("【"+dto.getOrgAid()+"】 按机构过滤和自己创建的课程");
- //log.info(" orgids "+dto.getOrgIds());
- if(dto.getOrgIds().contains(",")){
- String[] split = dto.getOrgIds().split(",");
- List strings = Arrays.asList(split);
- filters.add(FieldFilters.or(FieldFilters.in("orgId",strings),FieldFilters.eq("sysCreateAid",dto.getOrgAid())));
- }else {
- filters.add(FieldFilters.or(FieldFilters.eq("orgId",dto.getOrgIds()),FieldFilters.eq("sysCreateAid",dto.getOrgAid())));
- }
- }else {
- //log.info("【"+dto.getOrgAid()+"】 机构ids没有, 只查询自己创建的课程");
- //没有机构权限,只能查出自己创建的
- filters.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid()));
- }
- }else {
- //log.info("【"+dto.getOrgAid()+"】IsSystemAdmin is true 不过机构过滤,查询全部");
- }
- }
-
- //自动添加过滤已删除
- filters.add(FieldFilters.eq("deleted",false));
- OrderCondition oc=null;
- if(StringUtils.isNotBlank(dto.getOrderField())) {
- if(dto.getOrderAsc()||dto.getOrderAsc()==null) {
- oc=OrderCondition.asc(dto.getOrderField());
- }else {
- oc=OrderCondition.desc(dto.getOrderField());
- }
- }else {
- oc=OrderCondition.desc("id");
- }
+ @Override
+ public List findList(int num, CourseQueryDto dto) {
+ List filters = createFilters(dto);
+ //自动添加过滤已删除
+ filters.add(FieldFilters.eq("deleted", false));
+ filters.add(FieldFilters.eq("enabled", true));
- PageList rs=courseDao.findPage(pageIndex, pageSize, filters, oc);
- //log.info("查询出的条数:"+rs.getCount());
- return rs;
- }
+ QueryBuilder query = QueryBuilder.from(Course.class).addFilters(filters);
- @Override
- public List findList(CourseQueryDto dto) {
- List filters = createFilters(dto);
- //自动添加过滤已删除
- filters.add(FieldFilters.eq("deleted",false));
- filters.add(FieldFilters.eq("enabled",true));
- OrderCondition oc=null;
- if(StringUtils.isNotBlank(dto.getOrderField())) {
- if(dto.getOrderAsc()||dto.getOrderAsc()==null) {
- oc=OrderCondition.asc(dto.getOrderField());
- }else {
- oc=OrderCondition.desc(dto.getOrderField());
- }
- }else {
- oc=OrderCondition.desc("sysCreateTime");
- }
- List list = courseDao.findListByFilters(oc, filters);
+ if (dto.getTopOrder() != null) {
+ if (dto.getTopOrder()) {
+ //query.addOrder(OrderCondition.desc("isTop"));
+ query.addOrder(OrderCondition.desc("topTime"));
+ }
+ }
- return list;
- }
+ OrderCondition oc = null;
+ if (StringUtils.isNotBlank(dto.getOrderField())) {
+ if (dto.getOrderAsc() || dto.getOrderAsc() == null) {
+ oc = OrderCondition.asc(dto.getOrderField());
+ } else {
+ oc = OrderCondition.desc(dto.getOrderField());
+ }
+ } else {
+ oc = OrderCondition.desc("id");
+ }
+ query.addOrder(oc);
+ query.setPageSize(num);
+ return courseDao.findList(query.builder());
+ }
- @Override
- public PageList findSimplePage(int pageIndex, int pageSize, CourseQueryDto dto) {
- List filters = createFilters(dto);
- //自动添加过滤已删除
- filters.add(FieldFilters.eq("deleted",false));
- filters.add(FieldFilters.eq("enabled",true));
-
- QueryBuilder query=QueryBuilder.from(Course.class).addFilters(filters);
-
- if(dto.getTopOrder()!=null) {
- if(dto.getTopOrder()){
- query.addOrder(OrderCondition.desc("isTop"));
- query.addOrder(OrderCondition.desc("topTime"));
- }
- }
- OrderCondition oc=null;
- if(StringUtils.isNotBlank(dto.getOrderField())) {
- if(dto.getOrderAsc()==null || dto.getOrderAsc()) {
- oc=OrderCondition.asc(dto.getOrderField());
- }else {
- oc=OrderCondition.desc(dto.getOrderField());
- }
- }else {
- //oc=OrderCondition.desc("id");
- //默认按发布时间排序
- oc=OrderCondition.desc("publishTime");
- }
- query.addOrder(oc);
-
-// if(dto.getTopOrder()!=null && dto.getTopOrder()){
-// query.addOrder(OrderCondition.desc("topTime"));
+ // public PageList findPage(int pageIndex, int pageSize, CourseQueryDto dto) {
+// List filters = createFilters(dto);
+// List filters1 = createFilters(dto);
+// List filters2 = createFilters(dto);
+//// String s = redisTemplate.opsForValue().get("course_search");
+//// Setlist=new HashSet<>();
+//// if(s!=null&&!s.isEmpty()){
+//// list=Arrays.stream(s.split(",")).collect(Collectors.toSet());
+//// }else {
+//// Set ss = getSeache(dto);
+//// String courseSearch=String.join(",",ss);
+//// redisTemplate.opsForValue().set("course_search",courseSearch);
+//// //设置过期时间为1分钟
+//// redisTemplate.expire("course_search", 1, TimeUnit.MINUTES);
+//// }
+// Set list = getSeache(dto);
+// //有权限的查询,也同时查询出创建人的数据,在权限上
+// if(TempFilterConfig.Manager_CourseFile_ByOrgIds) {
+// if(dto.getIsSystemAdmin()==null || !dto.getIsSystemAdmin()) {
+// if(StringUtil.isNotBlank(dto.getOrgIds())){
+// //log.info("【"+dto.getOrgAid()+"】 按机构过滤和自己创建的课程");
+// //log.info(" orgids "+dto.getOrgIds());
+// if(dto.getOrgIds().contains(",")){
+// String[] split = dto.getOrgIds().split(",");
+// List strings = Arrays.asList(split);
+//// filters.add(FieldFilters.or(FieldFilters.in("orgId",strings),FieldFilters.eq("sysCreateAid",dto.getOrgAid())));
+// filters.add(FieldFilters.in("orgId",strings));
+// filters1.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid()));
+// if(!list.isEmpty()){
+// filters2.add(FieldFilters.in("id",list));
+// }
+// }else {
+//// filters.add(FieldFilters.or(FieldFilters.eq("orgId",dto.getOrgIds()),FieldFilters.eq("sysCreateAid",dto.getOrgAid())));
+// filters.add(FieldFilters.eq("orgId",dto.getOrgIds()));
+// filters1.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid()));
+// if(!list.isEmpty()){
+// filters2.add(FieldFilters.in("id",list));
+// }
+// }
+// }
+// if (!StringUtil.isNotBlank(dto.getOrgIds())){
+// //log.info("【"+dto.getOrgAid()+"】 机构ids没有, 只查询自己创建的课程");
+// //没有机构权限,只能查出自己创建的
+//// filters.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid()));
+// filters1.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid()));
+// if(!list.isEmpty()){
+// filters2.add(FieldFilters.in("id",list));
+// }
+// }
+// }else {
+// //log.info("【"+dto.getOrgAid()+"】IsSystemAdmin is true 不过机构过滤,查询全部");
+// }
+// }
+//
+// //自动添加过滤已删除
+// filters.add(FieldFilters.eq("deleted",false));
+// filters1.add(FieldFilters.eq("deleted",false));
+// filters2.add(FieldFilters.eq("deleted",false));
+// //同时查出所有项目内课程
+// OrderCondition oc=null;
+// if(StringUtils.isNotBlank(dto.getOrderField())) {
+// if(dto.getOrderAsc()||dto.getOrderAsc()==null) {
+// oc=OrderCondition.asc(dto.getOrderField());
+// }else {
+// oc=OrderCondition.desc(dto.getOrderField());
+// }
+// }else {
+// oc=OrderCondition.desc("id");
// }
-
- query.setPageIndex(pageIndex);
- query.setPageSize(pageSize);
- query.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,summary,publishTime,isTop)");
-
- PageList rs=courseDao.findPage(query.builder());
-
- return rs;
- }
+// List listByFilters = new ArrayList<>();
+// //根据组织筛选
+// if(StringUtil.isNotBlank(dto.getOrgIds())){
+// listByFilters = courseDao.findListByFilters(oc, filters);
+// }
+// //根据创建人筛选
+// List listByFilters1;
+// if(!list.isEmpty()){
+// listByFilters1 = courseDao.findListByFilters(oc, filters1);
+// } else {
+// listByFilters1 = new ArrayList<>();
+// }
+// //根据list筛选
+//// List listByFilters2 = courseDao.findListByFilters(oc, filters2);
+// //去除根据组织和创建人筛选的课程id
+// List finalListByFilters = listByFilters;
+//// List collect = list.stream()
+//// .filter(element -> !finalListByFilters.contains(element))
+//// .filter(element -> !listByFilters1.contains(element)).collect(Collectors.toList());
+//// List courseIds = collect.stream().map(Course::getId).collect(Collectors.toList());
+// //合并
+// List mergedList = Stream.concat(listByFilters.stream(), listByFilters1.stream())
+// // 使用distinct()配合自定义的去重条件
+// .filter(distinctByKey(c -> c.getId()))
+// .collect(Collectors.toList());
+//// PageList rs=courseDao.findPage(pageIndex, pageSize, filters, oc);
+//// long endTime = System.nanoTime();
+// //log.info("查询出的条数:"+rs.getCount());
+// if(!mergedList.isEmpty()){
+// //去掉未发布的课程
+// mergedList.removeIf(e->{
+// if(!e.getPublished()&&courseIds.contains(e.getId())){
+// return true;
+// }
+// return false;
+// });
+// //
+// //将需要隐藏的做标记
+// mergedList.forEach(e->{
+// if(courseIds.contains(e.getId())){
+// e.setIsPermission(false);
+// }else {
+// e.setIsPermission(true);
+// }
+// });
+// }
+// List paginate = paginate(mergedList, pageIndex, pageSize);
+// PageList rs=new PageList<>();
+// rs.setCount(mergedList.size());
+// rs.setList(paginate);
+// return rs;
+// }
+ @Override
+ public PageList findPage(int pageIndex, int pageSize, CourseQueryDto dto) {
+ List filters2 = createFilters(dto);
+ filters2.add(FieldFilters.eq("deleted", false));
+ //同时查出所有项目内课程
+ OrderCondition oc = null;
+ if (StringUtils.isNotBlank(dto.getOrderField())) {
+ if (dto.getOrderAsc() || dto.getOrderAsc() == null) {
+ oc = OrderCondition.asc(dto.getOrderField());
+ } else {
+ oc = OrderCondition.desc(dto.getOrderField());
+ }
+ } else {
+ oc = OrderCondition.desc("id");
+ }
+ //组织id
+ List strings = new ArrayList<>();
+ if (StringUtil.isNotBlank(dto.getOrgIds())) {
+ if (dto.getOrgIds().contains(",")) {
+ String[] split = dto.getOrgIds().split(",");
+ strings = Arrays.asList(split);
+ } else {
+ strings.add(dto.getOrgIds());
+ }
+ }
+ Set seache = getSeache(dto);
+ //查出全部的课程
+ List listByFilters2 = courseDao.findListByFilters(oc, filters2);
+ if (TempFilterConfig.Manager_CourseFile_ByOrgIds) {
+ if (dto.getIsSystemAdmin() == null || !dto.getIsSystemAdmin()) {
+ List finalStrings = strings;
+ log.info("dto为"+dto);
+ if(dto.getIsCreateCourse()!=null&&dto.getIsCreateCourse()){
+ listByFilters2.removeIf(e -> {
+ //去掉未发布的课程
+ if (!e.getPublished() && seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
+ return true;
+ }
+ //去掉所有条件都不符合的课程
+ if(!seache.contains(e.getId())&&!dto.getReadIds().contains(e.getId())&& !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())){
+ return true;
+ }
+ return false;
+ });
+ //将需要隐藏的做标记
+ listByFilters2.forEach(e -> {
+ if ((seache.contains(e.getId())||dto.getReadIds().contains(e.getOrgId())) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) {
+ e.setIsPermission(false);
+ } else {
+ e.setIsPermission(true);
+ }
+ });
+ listByFilters2.sort(Comparator.comparing(Course::getIsPermission).reversed());
+ }else{
+ List collect = listByFilters2.stream().filter(e ->dto.getReadIds().contains(e.getOrgId())||dto.getOrgAid().equals(e.getSysCreateAid())||finalStrings.contains(e.getOrgId())).collect(Collectors.toList());
+ List paginate = paginate(collect, pageIndex, pageSize);
+ PageList rs = new PageList<>();
+ rs.setCount(collect.size());
+ rs.setList(paginate);
+ return rs;
+ }
+ }
+ }
+ List paginate = paginate(listByFilters2, pageIndex, pageSize);
+ PageList rs = new PageList<>();
+ rs.setCount(listByFilters2.size());
+ rs.setList(paginate);
+ return rs;
+ }
- @Override
- public List findSimpleList(int number,String currentAid, CourseQueryDto dto) {
- List filters = createFilters(dto);
- //自动添加过滤已删除
- filters.add(FieldFilters.eq("deleted",false));
- filters.add(FieldFilters.eq("enabled",true));
- //返回的结果
+ private Set getSeache(CourseQueryDto dto) {
+ //需要设置为隐藏的课程id
+ Set list = new HashSet<>();
+ List list1 = getProject(dto);
+ List list2 = getRouter(dto);
+// //有受众权限的课程
+ if (dto.getAudiences() != null && !dto.getAudiences().isEmpty()) {
+ List audiences = getAudiences(dto);
+ list.addAll(audiences);
+ }
+// //没有受众的课程
+ List noAudiences = getNoAudiences(dto);
+ list.addAll(noAudiences);
+// //成长路径的课
+// List grow = getGrow(dto);
+// //已报名的课
+ List enroll = getEnroll(dto);
+// list.addAll(grow);
+ list.addAll(enroll);
+ list.addAll(list1);
+ list.addAll(list2);
+ return list;
+ }
- QueryBuilder query=QueryBuilder.from(Course.class).addFilters(filters);
+ private List getRouter(CourseQueryDto dto) {
+ String sql = "SELECT DISTINCT\n" +
+ "rt.course_id\n" +
+ "FROM\n" +
+ "boe_new.student s INNER JOIN boe_new.router_task rt on s.pid=rt.router_id inner join boe_course c on c.id=rt.course_id\n" +
+ "\n" +
+ "WHERE\n" +
+ "\n" +
+ "s.deleted = 0 \n" +
+ "and rt.deleted=0\n" +
+ "and rt.type=1\n" +
+ "and c.deleted=0\n" +
+ "AND s.type =2 \n" +
+ "AND s.student_id = ?1";
+ List list = courseTeacherDao.sqlFindList(sql, dto.getOrgAid());
+ List list1 = new ArrayList<>();
+ for (Object obj : list) {
+ list1.add(obj.toString());
+ }
- if(dto.getTopOrder()!=null){
- if(dto.getTopOrder()){
- query.addOrder(OrderCondition.desc("isTop"));
- query.addOrder(OrderCondition.desc("topTime"));
- }
- }
- OrderCondition oc=null;
- if(StringUtils.isNotBlank(dto.getOrderField())) {
- if(dto.getOrderAsc()==null || dto.getOrderAsc()) {
- oc=OrderCondition.asc(dto.getOrderField());
- }else {
- oc=OrderCondition.desc(dto.getOrderField());
- }
- }else {
- //oc=OrderCondition.desc("id");
- //默认按发布时间排序
- oc=OrderCondition.desc("publishTime");
- }
- query.addOrder(oc);
+ return list1;
+ }
+
+ private List getProject(CourseQueryDto dto) {
+ String sql = "SELECT DISTINCT\n" +
+ "pt.course_id\n" +
+ "FROM\n" +
+ "boe_new.student s INNER JOIN boe_new.project_task pt on s.pid=pt.project_id inner join boe_course c on c.id=pt.course_id\n" +
+ "\n" +
+ "WHERE\n" +
+ "\n" +
+ "s.deleted = 0 \n" +
+ "and pt.deleted=0\n" +
+ "and pt.type=1\n" +
+ "and c.deleted=0\n" +
+ "AND s.type =1 \n" +
+ "AND s.student_id = ?1\n";
+ List list = courseTeacherDao.sqlFindList(sql, dto.getOrgAid());
+ List list1 = new ArrayList<>();
+ for (Object obj : list) {
+ list1.add(obj.toString());
+ }
+ return list1;
+ }
+
+ private List getAudiences(CourseQueryDto dto) {
+ List s = Arrays.asList(dto.getAudiences().split(","));
+ String sql = "SELECT DISTINCT\n" +
+ "\tcc.course_id \n" +
+ "FROM\n" +
+ "\t`boe_course_crowd` cc\n" +
+ "\tINNER JOIN boe_course c ON cc.course_id = c.id \n" +
+ "WHERE\n" +
+ "\tcc.group_id IN (?1) \n" +
+ "\tAND c.deleted =0 ";
+ List list = courseTeacherDao.sqlFindList(sql, s);
+ List list1 = new ArrayList<>();
+ for (Object obj : list) {
+ list1.add(obj.toString());
+ }
+
+ return list1;
+ }
+
+ private List getNoAudiences(CourseQueryDto dto) {
+ String sql = "SELECT\n" +
+ "\tc.id \n" +
+ "FROM\n" +
+ "\tboe_course c \n" +
+ "WHERE\n" +
+ "\t NOT EXISTS ( SELECT 1 FROM boe_course_crowd cc where cc.course_id = c.id ) \n" +
+ "\tAND c.deleted =0 \n";
+ List list = courseDao.sqlFindList(sql);
+ List list1 = new ArrayList<>();
+ for (Object obj : list) {
+ list1.add(obj.toString());
+ }
+ return list1;
+ }
+
+ private List getGrow(CourseQueryDto dto) {
+ String sql = "SELECT DISTINCT\n" +
+ "\tc.id \n" +
+ "FROM\n" +
+ "\tboe_new.student s\n" +
+ "\tINNER JOIN boe_new.grow_task gt ON s.pid = gt.grow_id\n" +
+ "\tINNER JOIN boe_course c ON gt.course_id = c.id \n" +
+ "WHERE\n" +
+ "\ts.type = 14 \n" +
+ "\tAND gt.type = 1 \n" +
+ "\tAND s.deleted = 0 \n" +
+ "\tAND gt.deleted = 0 \n" +
+ "\tAND c.deleted = 0\n" +
+ "\tAND s.student_id = ?1\n";
+ List list = courseTeacherDao.sqlFindList(sql, dto.getOrgAid());
+ List list1 = new ArrayList<>();
+ for (Object obj : list) {
+ list1.add(obj.toString());
+ }
+ return list1;
+ }
+
+ private List getEnroll(CourseQueryDto dto) {
+ String sql = "SELECT DISTINCT\n" +
+ "\tsc.course_id \n" +
+ "FROM\n" +
+ "\tboe_study_course sc\n" +
+ "\tINNER JOIN boe_course c ON sc.course_id = c.id \n" +
+ "WHERE\n" +
+ "\tsc.aid = ?1 \n" +
+ "\tAND c.deleted =0";
+ List list = courseTeacherDao.sqlFindList(sql, dto.getOrgAid());
+ List list1 = new ArrayList<>();
+ for (Object obj : list) {
+ list1.add(obj.toString());
+ }
+
+ return list1;
+ }
+
+ public static List paginate(List list, int pageNumber, int pageSize) {
+ if (list == null || list.isEmpty() || pageNumber <= 0 || pageSize <= 0) {
+ return null;
+ }
+
+ int fromIndex = (pageNumber - 1) * pageSize;
+ int toIndex = Math.min(fromIndex + pageSize, list.size());
+
+ if (fromIndex >= list.size()) {
+ // 请求的页码超过了最大页数,返回空列表
+ return null;
+ }
+
+ return list.subList(fromIndex, toIndex);
+ }
+
+ private static Predicate distinctByKey(Function super T, ?> keyExtractor) {
+ Set