From 7eb578127d5833704be79cd61288f5da330f53c9 Mon Sep 17 00:00:00 2001 From: xiaozhequ <792962424@qq.com> Date: Wed, 3 Jul 2024 16:30:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=9C=A8=E7=BA=BF=E8=AF=BE=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CourseManageApi.java | 16 +- .../service/impl/CourseServiceImpl.java | 3350 +++++++++-------- 2 files changed, 1720 insertions(+), 1646 deletions(-) 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 c04b2cde..f3aa6041 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 @@ -125,11 +125,11 @@ public class CourseManageApi extends ApiBaseController{ List orgIds = userOrgIds.getIds(); -// if(userOrgIds.getPermissions().containsKey(UserOrgIds.IsSystemAdminKey)){ -// dto.setIsSystemAdmin(userOrgIds.getPermissions().get(UserOrgIds.IsSystemAdminKey)); -// }else { -// dto.setIsSystemAdmin(false); -// } + if(userOrgIds.getPermissions().containsKey(UserOrgIds.IsSystemAdminKey)){ + dto.setIsSystemAdmin(userOrgIds.getPermissions().get(UserOrgIds.IsSystemAdminKey)); + }else { + dto.setIsSystemAdmin(false); + } String ids=""; if(userOrgIds.getIds()!=null && !userOrgIds.getIds().isEmpty()) { @@ -137,11 +137,7 @@ public class CourseManageApi extends ApiBaseController{ } //log.info("获取到的用户的组织机构权限ids",ids); String aid=getCurrent().getAccountId(); - if(Objects.equals(aid, "965342027497607168")||Objects.equals(aid, "1739115608332701697")){ - dto.setIsSystemAdmin(true); - }else { - dto.setIsSystemAdmin(false); - } +// String aid="1706272694871445506"; //如果前端查询当前人的,这里去掉 if(StringUtils.isNotBlank(dto.getAid())) { dto.setAid(null); 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 c48bd588..e5190670 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 @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; 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; @@ -21,6 +22,7 @@ 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; @@ -63,866 +65,947 @@ 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 IResDataManagerService rdmService; - - @Autowired(required = false) - private ICourseFullTextSearch fullTextSearch; - - @Resource - PublishCourseUtil publishUtil; - - @Autowired(required = false) - private IEventDataSender eventSender; + @Resource + private IAccountService accountService; + + + @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); - List filters1 = createFilters(dto); - List filters2 = createFilters(dto); - List list1 = getProject(dto); - List list2 = getRouter(dto); - //需要设置为隐藏的课程id - Set list = new HashSet<>(); - //有受众权限的课程 - 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); + @Override + public List findList(int num, CourseQueryDto dto) { + List filters = createFilters(dto); + //自动添加过滤已删除 + filters.add(FieldFilters.eq("deleted", false)); + filters.add(FieldFilters.eq("enabled", true)); - //有权限的查询,也同时查询出创建人的数据,在权限上 - 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 不过机构过滤,查询全部"); - } - } + QueryBuilder query = QueryBuilder.from(Course.class).addFilters(filters); - //自动添加过滤已删除 - 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"); - } - 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<>(); + if (dto.getTopOrder() != null) { + if (dto.getTopOrder()) { + //query.addOrder(OrderCondition.desc("isTop")); + query.addOrder(OrderCondition.desc("topTime")); + } } - //根据list筛选 - List listByFilters2 = courseDao.findListByFilters(oc, filters2); - //去除根据组织和创建人筛选的课程id - List finalListByFilters = listByFilters; - List collect = listByFilters2.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(Stream.concat(listByFilters.stream(), listByFilters1.stream()),collect.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; - } - private List getRouter(CourseQueryDto dto) { - String sql = "SELECT DISTINCT\n" + - "rt.course_id\n" + - "FROM\n" + - "boe.student s INNER JOIN boe.router_task rt on s.pid=rt.router_id inner join boe_base.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"; - Listlist = courseTeacherDao.sqlFindList(sql,dto.getOrgAid()); - Listlist1=new ArrayList<>(); - for (Object obj : list) { - list1.add(obj.toString()); - } - - return list1; - } - private List getProject(CourseQueryDto dto) { - String sql = "SELECT DISTINCT\n" + - "pt.course_id\n" + - "FROM\n" + - "boe.student s INNER JOIN boe.project_task pt on s.pid=pt.project_id inner join boe_base.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"; - Listlist = courseTeacherDao.sqlFindList(sql, dto.getOrgAid()); - Listlist1=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); - Listlist1=new ArrayList<>(); - for (Object obj : list) { - list1.add(obj.toString()); - } - - return list1; - } - private List getNoAudiences(CourseQueryDto dto) { - String sql = "SELECT DISTINCT\n" + - "\tc.id \n" + - "FROM\n" + - "\tboe_base.boe_course c \n" + - "WHERE\n" + - "\t NOT EXISTS ( SELECT 1 FROM boe_base.boe_course_crowd cc where cc.course_id = c.id ) \n" + - "\tAND c.deleted =0 \n"; - Listlist = courseTeacherDao.sqlFindList(sql); - Listlist1=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.student s\n" + - "\tINNER JOIN boe.grow_task gt ON s.pid = gt.grow_id\n" + - "\tINNER JOIN boe_base.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"; - Listlist = courseTeacherDao.sqlFindList(sql,dto.getOrgAid()); - Listlist1=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_base.boe_study_course sc\n" + - "\tINNER JOIN boe_base.boe_course c ON sc.course_id = c.id \n" + - "WHERE\n" + - "\tsc.aid = ?1 \n" + - "\tAND c.deleted =0"; - Listlist = courseTeacherDao.sqlFindList(sql,dto.getOrgAid()); - Listlist1=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 keyExtractor) { - Set seen = ConcurrentHashMap.newKeySet(); - return t -> seen.add(keyExtractor.apply(t)); - } - @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); - - 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; + //去掉未发布的课程 + listByFilters2.removeIf(e -> { + if (!e.getPublished() && seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { + return true; + } + return false; + }); + //将需要隐藏的做标记 + listByFilters2.forEach(e -> { + if (seache.contains(e.getId()) && !finalStrings.contains(e.getOrgId()) && !dto.getOrgAid().equals(e.getSysCreateAid())) { + e.setIsPermission(false); + } else { + e.setIsPermission(true); + } + }); + } + } + 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.student s INNER JOIN boe.router_task rt on s.pid=rt.router_id inner join boe_base.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.student s INNER JOIN boe.project_task pt on s.pid=pt.project_id inner join boe_base.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_base.boe_course c \n" + + "WHERE\n" + + "\t NOT EXISTS ( SELECT 1 FROM boe_base.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.student s\n" + + "\tINNER JOIN boe.grow_task gt ON s.pid = gt.grow_id\n" + + "\tINNER JOIN boe_base.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_base.boe_study_course sc\n" + + "\tINNER JOIN boe_base.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 keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } + + @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); + + return list; + } + + + @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")); // } - - int num=6; - List courses = this.userHobbyList(currentAid, dto.getOrderField(), dto.getOrderAsc()); - if(courses!=null && !courses.isEmpty()){ - num=6-courses.size(); - //重复的不包括 - List courseIds = courses.stream().map(Course::getId).collect(Collectors.toList()); - query.addFilter(FieldFilters.notIn("id",courseIds)); - } - query.setPageSize(num); - query.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,summary,publishTime,isTop)"); - List rs=courseDao.findList(query.builder()); - if(rs.isEmpty()) { - log.error("未能查询出数据"); - } + + 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; + } + + @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)); + //返回的结果 + + 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")); +// } + + int num = 6; + List courses = this.userHobbyList(currentAid, dto.getOrderField(), dto.getOrderAsc()); + if (courses != null && !courses.isEmpty()) { + num = 6 - courses.size(); + //重复的不包括 + List courseIds = courses.stream().map(Course::getId).collect(Collectors.toList()); + query.addFilter(FieldFilters.notIn("id", courseIds)); + } + query.setPageSize(num); + query.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,summary,publishTime,isTop)"); + List rs = courseDao.findList(query.builder()); + if (rs.isEmpty()) { + log.error("未能查询出数据"); + } // courses.addAll(rs); - rs.addAll(courses); - return rs; - } + rs.addAll(courses); + return rs; + } - @Override - public List mobileList(int num, String aid,CourseQueryDto dto) { + @Override + public List mobileList(int num, String aid, CourseQueryDto dto) { - List filters = createFilters(dto); - //自动添加过滤已删除 - filters.add(FieldFilters.eq("deleted",false)); - filters.add(FieldFilters.eq("enabled",true)); - //返回的结果 + List filters = createFilters(dto); + //自动添加过滤已删除 + filters.add(FieldFilters.eq("deleted", false)); + filters.add(FieldFilters.eq("enabled", true)); + //返回的结果 - QueryBuilder query=QueryBuilder.from(Course.class).addFilters(filters); + 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) { + 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); - List courses = this.userHobbyList(aid, dto.getOrderField(), dto.getOrderAsc()); - if(courses!=null && !courses.isEmpty()){ - num=num-courses.size(); - //重复的不包括 - List courseIds = courses.stream().map(Course::getId).collect(Collectors.toList()); - query.addFilter(FieldFilters.notIn("id",courseIds)); - } - query.setPageSize(num); - query.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,summary,publishTime,isTop,sysType1,sysType2,sysType3)"); - List courseList = courseDao.findList(query.builder()); - courseList.addAll(courses); - return courseList; - } + List courses = this.userHobbyList(aid, dto.getOrderField(), dto.getOrderAsc()); + if (courses != null && !courses.isEmpty()) { + num = num - courses.size(); + //重复的不包括 + List courseIds = courses.stream().map(Course::getId).collect(Collectors.toList()); + query.addFilter(FieldFilters.notIn("id", courseIds)); + } + query.setPageSize(num); + query.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,summary,publishTime,isTop,sysType1,sysType2,sysType3)"); + List courseList = courseDao.findList(query.builder()); + courseList.addAll(courses); + return courseList; + } - @Override - public void save(Course course) { - course.setComments(0); - course.setDeleted(false); - course.setEnabled(true);//是否可用,上下架 - course.setFavorites(0); - course.setIsTop(false); - course.setPraises(0); - course.setPublished(false); - course.setShares(0); - course.setViews(0); - course.setStudyTime(0); - course.setStudys(0); - course.setScore(0f); - course.setTrampleCount(0); - if(course.getSource()==null) { - course.setSource(1);//来源内部 - } - if(course.getVisible()==null) { - course.setVisible(true); - } + @Override + public void save(Course course) { + course.setComments(0); + course.setDeleted(false); + course.setEnabled(true);//是否可用,上下架 + course.setFavorites(0); + course.setIsTop(false); + course.setPraises(0); + course.setPublished(false); + course.setShares(0); + course.setViews(0); + course.setStudyTime(0); + course.setStudys(0); + course.setScore(0f); + course.setTrampleCount(0); + if (course.getSource() == null) { + course.setSource(1);//来源内部 + } + if (course.getVisible() == null) { + course.setVisible(true); + } courseDao.save(course); - - } - - @Override - public void update(Course course, boolean log) { - //更新。 - courseDao.update(course); - - if(StringUtils.isNotBlank(course.getFullTextId())) { - publishUtil.removeByDocId(course.getFullTextId()); - } - - //记录日志 + + } + + @Override + public void update(Course course, boolean log) { + //更新。 + courseDao.update(course); + + if (StringUtils.isNotBlank(course.getFullTextId())) { + publishUtil.removeByDocId(course.getFullTextId()); + } + + //记录日志 // if(log) { // //记录课程记录 // // } - } - - - @Override - public void delete(String id,boolean erasable, String aid, String name, String remark) { - if(!erasable) { - courseDao.setDeleted(id); - courseDao.updateFieldById(id,"name","已删除"+name); - //同时添加发布事件,这里的创建人需要修改为教师 - Course c=courseDao.get(id); - //删除分两种情况,一个是管理员删除,一个是自己删除 ,所以这里的处理移到前端了 - if(c.getFullTextId()!=null) { - publishUtil.removeByDocId(c.getFullTextId()); - } - //只有速有全文检索返回标识的,才算是发布过再删除的,删除消息 - if(StringUtils.isNotBlank(c.getFullTextId())){ - if(eventSender!=null) { - List teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", id)); - if(teachers.size()>0) { - String authorIds=""; - for(CourseTeacher cteacher:teachers) { - if(authorIds.equals("")) { - authorIds+=cteacher.getTeacherId(); - }else { - authorIds+="|"+cteacher.getTeacherId(); - } - } - String txt="管理删除课程"; - eventSender.send(txt,"CourseDelete", "管理删除课程", c.getId(), "1", c.getName(), aid, name,"authors:"+authorIds); - } - }else { - log.error("未配置事件消息发送的实现"); - } - } - }else { - //彻底删除,课件设置为无课程状态 - courseDao.setDeleted(id); - } - //记录删除日志信息 - - } - @Override - public Course get(String id) { - Course c=courseDao.get(id); - return c; - } - - @Override - public Course getAddView(String id) { - Course c=courseDao.get(id); - courseDao.updateFieldById(id,"views", c.getViews()+1); - return c; - } - - @Override - public void save(CourseFullDto full) { - Course c=full.getCourse(); - c.setComments(0); - c.setDeleted(false); - c.setEnabled(true); - c.setErasable(true);//未发布前是可以物理删除的 - c.setFavorites(0); - c.setIsTop(false); - c.setViews(0); - c.setStudys(0); - c.setPraises(0); - c.setTrampleCount(0); + } - - if(c.getPublished()==null) { - c.setPublished(false);// - } - c.setShares(0); - if(c.getStatus()==null) { - c.setStatus(Course.STATUS_NONE); - } - if(c.getScore()==null) { - c.setScore(0f);//默认是5分 - } - courseDao.save(c); - c.setSysVersion(0); - if(full.getTeachers()!=null && !full.getTeachers().isEmpty()) { - for(CourseTeacher ct : full.getTeachers()) { - ct.setCourseId(c.getId()); - courseTeacherDao.save(ct); - } - } - if(full.getCrowds()!=null && !full.getCrowds().isEmpty()) { - for(CourseCrowd cc : full.getCrowds()) { - cc.setCourseId(c.getId()); - courseCrowdDao.save(cc); - } - } - } - /** - * 追加修改日志,共用方法,在其它的修改的地方也可能调用 - * @param old - * @param now - */ - private void appendUpdateLog(StringBuffer josnLog,Course oldCourse,Course newCourse) { - if(!newCourse.getName().equals(oldCourse.getName())) { - josnLog.append("{\"field\":\"name\",\"title\":\"名称\",\"before\":\""+oldCourse.getName()+"\",\"after\":\""+newCourse.getName()+"\" },"); - } - if(newCourse.getSysType1()!=null && !newCourse.getSysType1().equals(oldCourse.getSysType1())){ - josnLog.append("{\"field\":\"name\",\"title\":\"一级内容分类\",\"before\":\""+oldCourse.getSysType1()+"\",\"after\":\""+newCourse.getSysType1()+"\" },"); - } - if(newCourse.getSysType2()!=null && !newCourse.getSysType2().equals(oldCourse.getSysType2()) ){ - josnLog.append("{\"field\":\"name\",\"title\":\"二级内容分类\",\"before\":\""+oldCourse.getSysType2()+"\",\"after\":\""+newCourse.getSysType2()+"\" },"); - } - if(newCourse.getSysType3()!=null && !newCourse.getSysType3().equals(oldCourse.getSysType3())){ - josnLog.append("{\"field\":\"name\",\"title\":\"三级内容分类\",\"before\":\""+oldCourse.getSysType3()+"\",\"after\":\""+newCourse.getSysType3()+"\" },"); - } - if(newCourse.getForUsers()!=null && !newCourse.getForUsers().equals(oldCourse.getForUsers())){ - josnLog.append("{\"field\":\"name\",\"title\":\"目标人群\",\"before\":\""+oldCourse.getForUsers()+"\",\"after\":\""+newCourse.getForUsers()+"\" },"); - } - if(newCourse.getCoverImg()!=null && !newCourse.getCoverImg().equals(oldCourse.getCoverImg())){ - josnLog.append("{\"field\":\"name\",\"title\":\"封面图片\",\"before\":\""+oldCourse.getCoverImg()+"\",\"after\":\""+newCourse.getCoverImg()+"\" },"); - } - if(newCourse.getForScene()!=null && !newCourse.getForScene().equals(oldCourse.getForScene())){ - josnLog.append("{\"field\":\"name\",\"title\":\"应用场景\",\"before\":\""+oldCourse.getForScene()+"\",\"after\":\""+newCourse.getForScene()+"\" },"); - } - if(newCourse.getValue()!=null && !newCourse.getValue().equals(oldCourse.getValue())){ - josnLog.append("{\"field\":\"name\",\"title\":\"课程价值\",\"before\":\""+oldCourse.getValue()+"\",\"after\":\""+newCourse.getValue()+"\" },"); - } - if(!newCourse.getDevice().equals(oldCourse.getDevice())){ - josnLog.append("{\"field\":\"name\",\"title\":\"观看设置\",\"before\":\""+oldCourse.getDevice()+"\",\"after\":\""+newCourse.getDevice()+"\" },"); - } - if(newCourse.getKeywords()!=null && !newCourse.getKeywords().equals(oldCourse.getKeywords())){ - josnLog.append("{\"field\":\"name\",\"title\":\"关键字\",\"before\":\""+oldCourse.getKeywords()+"\",\"after\":\""+newCourse.getKeywords()+"\" },"); - } - if(newCourse.getSource()!=null && !newCourse.getSource().equals(oldCourse.getSource())){ - josnLog.append("{\"field\":\"name\",\"title\":\"来源\",\"before\":\""+oldCourse.getScore()+"\",\"after\":\""+newCourse.getScore()+"\" },"); - } - if(newCourse.getSummary()!=null && !newCourse.getSummary().equals(oldCourse.getSummary())){ - josnLog.append("{\"field\":\"name\",\"title\":\"简介\",\"before\":\""+oldCourse.getSummary()+"\",\"after\":\""+newCourse.getSummary()+"\" },"); - } - } - - @Override - public void update(CourseFullDto full) throws Exception { + @Override + public void delete(String id, boolean erasable, String aid, String name, String remark) { + if (!erasable) { + courseDao.setDeleted(id); + courseDao.updateFieldById(id, "name", "已删除" + name); + //同时添加发布事件,这里的创建人需要修改为教师 + Course c = courseDao.get(id); + //删除分两种情况,一个是管理员删除,一个是自己删除 ,所以这里的处理移到前端了 + if (c.getFullTextId() != null) { + publishUtil.removeByDocId(c.getFullTextId()); + } + //只有速有全文检索返回标识的,才算是发布过再删除的,删除消息 + if (StringUtils.isNotBlank(c.getFullTextId())) { + if (eventSender != null) { + List teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", id)); + if (teachers.size() > 0) { + String authorIds = ""; + for (CourseTeacher cteacher : teachers) { + if (authorIds.equals("")) { + authorIds += cteacher.getTeacherId(); + } else { + authorIds += "|" + cteacher.getTeacherId(); + } + } + String txt = "管理删除课程"; + eventSender.send(txt, "CourseDelete", "管理删除课程", c.getId(), "1", c.getName(), aid, name, "authors:" + authorIds); + } + } else { + log.error("未配置事件消息发送的实现"); + } + } + } else { + //彻底删除,课件设置为无课程状态 + courseDao.setDeleted(id); + } + //记录删除日志信息 - Course c=full.getCourse();//当前的课程信息 - Course nowCourse=courseDao.get(c.getId());//修改之前的课程信息 + } - StringBuffer stringBuffer = new StringBuffer("["); - //追加日志内容 - appendUpdateLog(stringBuffer,nowCourse,c); + @Override + public Course get(String id) { + Course c = courseDao.get(id); + return c; + } - if(stringBuffer.length()>1){ + @Override + public Course getAddView(String id) { + Course c = courseDao.get(id); + courseDao.updateFieldById(id, "views", c.getViews() + 1); + return c; + } - String strJson=stringBuffer.substring(0,stringBuffer.length()-1); - strJson+="]"; - //记录修改日志 - CourseUpdateLog updateLog=new CourseUpdateLog(); - updateLog.setCourseId(c.getId()); - updateLog.setLogData(strJson); - updateLogDao.save(updateLog); - } - if(c.getVisible()==null) { - c.setVisible(true); - } - courseDao.update(c); - c.setSysVersion(courseDao.getVersion(c.getId())); - full.getCourse().setSysVersion(c.getSysVersion()); - - //先清空教师信息, 教师信息如果不一样了,也要加入到日志中 - courseTeacherDao.deleteByField("courseId", c.getId()); - if(full.getTeachers()!=null && !full.getTeachers().isEmpty()) { - for(CourseTeacher ct : full.getTeachers()) { - ct.setCourseId(c.getId()); - courseTeacherDao.saveOrUpdate(ct); - } - } - //先清空受众信息,受众信息如果不一样了,也要加入到日志中 - courseCrowdDao.deleteByField("courseId", c.getId()); - if(full.getCrowds()!=null && !full.getCrowds().isEmpty()) { - for(CourseCrowd cc : full.getCrowds()) { - cc.setCourseId(c.getId()); - courseCrowdDao.saveOrUpdate(cc); - } - } - - //更新后需要删除发布 - if(StringUtils.isNotBlank(c.getFullTextId())) { - publishUtil.removeByDocId(c.getFullTextId()); - - } - - } - - @Override - public void submit(CourseFullDto full) throws Exception { + @Override + public void save(CourseFullDto full) { + Course c = full.getCourse(); + c.setComments(0); + c.setDeleted(false); + c.setEnabled(true); + c.setErasable(true);//未发布前是可以物理删除的 + c.setFavorites(0); + c.setIsTop(false); + c.setViews(0); + c.setStudys(0); + c.setPraises(0); + c.setTrampleCount(0); - Course c=full.getCourse();//当前的课程信息 - if(c.getVisible()==null) { - c.setVisible(true); - } - //提交审核,不再记录修改日志 + + if (c.getPublished() == null) { + c.setPublished(false);// + } + c.setShares(0); + if (c.getStatus() == null) { + c.setStatus(Course.STATUS_NONE); + } + if (c.getScore() == null) { + c.setScore(0f);//默认是5分 + } + courseDao.save(c); + c.setSysVersion(0); + if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { + for (CourseTeacher ct : full.getTeachers()) { + ct.setCourseId(c.getId()); + courseTeacherDao.save(ct); + } + } + if (full.getCrowds() != null && !full.getCrowds().isEmpty()) { + for (CourseCrowd cc : full.getCrowds()) { + cc.setCourseId(c.getId()); + courseCrowdDao.save(cc); + } + } + } + + /** + * 追加修改日志,共用方法,在其它的修改的地方也可能调用 + * + * @param old + * @param now + */ + private void appendUpdateLog(StringBuffer josnLog, Course oldCourse, Course newCourse) { + if (!newCourse.getName().equals(oldCourse.getName())) { + josnLog.append("{\"field\":\"name\",\"title\":\"名称\",\"before\":\"" + oldCourse.getName() + "\",\"after\":\"" + newCourse.getName() + "\" },"); + } + if (newCourse.getSysType1() != null && !newCourse.getSysType1().equals(oldCourse.getSysType1())) { + josnLog.append("{\"field\":\"name\",\"title\":\"一级内容分类\",\"before\":\"" + oldCourse.getSysType1() + "\",\"after\":\"" + newCourse.getSysType1() + "\" },"); + } + if (newCourse.getSysType2() != null && !newCourse.getSysType2().equals(oldCourse.getSysType2())) { + josnLog.append("{\"field\":\"name\",\"title\":\"二级内容分类\",\"before\":\"" + oldCourse.getSysType2() + "\",\"after\":\"" + newCourse.getSysType2() + "\" },"); + } + if (newCourse.getSysType3() != null && !newCourse.getSysType3().equals(oldCourse.getSysType3())) { + josnLog.append("{\"field\":\"name\",\"title\":\"三级内容分类\",\"before\":\"" + oldCourse.getSysType3() + "\",\"after\":\"" + newCourse.getSysType3() + "\" },"); + } + if (newCourse.getForUsers() != null && !newCourse.getForUsers().equals(oldCourse.getForUsers())) { + josnLog.append("{\"field\":\"name\",\"title\":\"目标人群\",\"before\":\"" + oldCourse.getForUsers() + "\",\"after\":\"" + newCourse.getForUsers() + "\" },"); + } + if (newCourse.getCoverImg() != null && !newCourse.getCoverImg().equals(oldCourse.getCoverImg())) { + josnLog.append("{\"field\":\"name\",\"title\":\"封面图片\",\"before\":\"" + oldCourse.getCoverImg() + "\",\"after\":\"" + newCourse.getCoverImg() + "\" },"); + } + if (newCourse.getForScene() != null && !newCourse.getForScene().equals(oldCourse.getForScene())) { + josnLog.append("{\"field\":\"name\",\"title\":\"应用场景\",\"before\":\"" + oldCourse.getForScene() + "\",\"after\":\"" + newCourse.getForScene() + "\" },"); + } + if (newCourse.getValue() != null && !newCourse.getValue().equals(oldCourse.getValue())) { + josnLog.append("{\"field\":\"name\",\"title\":\"课程价值\",\"before\":\"" + oldCourse.getValue() + "\",\"after\":\"" + newCourse.getValue() + "\" },"); + } + if (!newCourse.getDevice().equals(oldCourse.getDevice())) { + josnLog.append("{\"field\":\"name\",\"title\":\"观看设置\",\"before\":\"" + oldCourse.getDevice() + "\",\"after\":\"" + newCourse.getDevice() + "\" },"); + } + if (newCourse.getKeywords() != null && !newCourse.getKeywords().equals(oldCourse.getKeywords())) { + josnLog.append("{\"field\":\"name\",\"title\":\"关键字\",\"before\":\"" + oldCourse.getKeywords() + "\",\"after\":\"" + newCourse.getKeywords() + "\" },"); + } + if (newCourse.getSource() != null && !newCourse.getSource().equals(oldCourse.getSource())) { + josnLog.append("{\"field\":\"name\",\"title\":\"来源\",\"before\":\"" + oldCourse.getScore() + "\",\"after\":\"" + newCourse.getScore() + "\" },"); + } + if (newCourse.getSummary() != null && !newCourse.getSummary().equals(oldCourse.getSummary())) { + josnLog.append("{\"field\":\"name\",\"title\":\"简介\",\"before\":\"" + oldCourse.getSummary() + "\",\"after\":\"" + newCourse.getSummary() + "\" },"); + } + } + + @Override + public void update(CourseFullDto full) throws Exception { + + Course c = full.getCourse();//当前的课程信息 + Course nowCourse = courseDao.get(c.getId());//修改之前的课程信息 + + StringBuffer stringBuffer = new StringBuffer("["); + //追加日志内容 + appendUpdateLog(stringBuffer, nowCourse, c); + + if (stringBuffer.length() > 1) { + + String strJson = stringBuffer.substring(0, stringBuffer.length() - 1); + strJson += "]"; + //记录修改日志 + CourseUpdateLog updateLog = new CourseUpdateLog(); + updateLog.setCourseId(c.getId()); + updateLog.setLogData(strJson); + updateLogDao.save(updateLog); + } + if (c.getVisible() == null) { + c.setVisible(true); + } + courseDao.update(c); + c.setSysVersion(courseDao.getVersion(c.getId())); + full.getCourse().setSysVersion(c.getSysVersion()); + + //先清空教师信息, 教师信息如果不一样了,也要加入到日志中 + courseTeacherDao.deleteByField("courseId", c.getId()); + if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { + for (CourseTeacher ct : full.getTeachers()) { + ct.setCourseId(c.getId()); + courseTeacherDao.saveOrUpdate(ct); + } + } + //先清空受众信息,受众信息如果不一样了,也要加入到日志中 + courseCrowdDao.deleteByField("courseId", c.getId()); + if (full.getCrowds() != null && !full.getCrowds().isEmpty()) { + for (CourseCrowd cc : full.getCrowds()) { + cc.setCourseId(c.getId()); + courseCrowdDao.saveOrUpdate(cc); + } + } + + //更新后需要删除发布 + if (StringUtils.isNotBlank(c.getFullTextId())) { + publishUtil.removeByDocId(c.getFullTextId()); + + } + + } + + @Override + public void submit(CourseFullDto full) throws Exception { + + Course c = full.getCourse();//当前的课程信息 + if (c.getVisible() == null) { + c.setVisible(true); + } + //提交审核,不再记录修改日志 // Course nowCourse=courseDao.get(c.getId());//修改之前的课程信息 // //审核不保存日志了 // StringBuffer stringBuffer = new StringBuffer("["); @@ -940,112 +1023,112 @@ public class CourseServiceImpl implements ICourseService { // updateLogDao.save(updateLog); // } - courseDao.update(c); - c.setSysVersion(courseDao.getVersion(c.getId())); - full.getCourse().setSysVersion(c.getSysVersion()); - - //先清空教师信息, 教师信息如果不一样了,也要加入到日志中 - courseTeacherDao.deleteByField("courseId", c.getId()); - if(full.getTeachers()!=null && !full.getTeachers().isEmpty()) { - for(CourseTeacher ct : full.getTeachers()) { - ct.setCourseId(c.getId()); - courseTeacherDao.saveOrUpdate(ct); - } - } - //先清空受众信息,受众信息如果不一样了,也要加入到日志中 - courseCrowdDao.deleteByField("courseId", c.getId()); - if(full.getCrowds()!=null && !full.getCrowds().isEmpty()) { - for(CourseCrowd cc : full.getCrowds()) { - cc.setCourseId(c.getId()); - courseCrowdDao.saveOrUpdate(cc); - } - } - //保存审核信息 - CourseHRBPAudit hrbpAudit=new CourseHRBPAudit(); - hrbpAudit.setCourseId(c.getId()); - hrbpAudit.setAddTime(LocalDateTime.now()); - hrbpAudit.setAid(full.getAuditUser().getAid()); - hrbpAudit.setAuditRemark(""); - hrbpAudit.setForward(CourseHRBPAudit.FORWARD_NONE); - hrbpAudit.setStatus(CourseHRBPAudit.STATUS_NONE); - courseHRBPAuditDao.save(hrbpAudit); - } - - @Override - public void submitAndPublish(CourseFullDto full,String aid,String aname) throws Exception { + courseDao.update(c); + c.setSysVersion(courseDao.getVersion(c.getId())); + full.getCourse().setSysVersion(c.getSysVersion()); - Course c=full.getCourse();//当前的课程信息 - c.setPublished(true); - c.setPublishTime(LocalDateTime.now()); - courseDao.update(c); - - //先清空教师信息, 教师信息如果不一样了,也要加入到日志中 - courseTeacherDao.deleteByField("courseId", c.getId()); - if(full.getTeachers()!=null && !full.getTeachers().isEmpty()) { - for(CourseTeacher ct : full.getTeachers()) { - ct.setCourseId(c.getId()); - courseTeacherDao.saveOrUpdate(ct); - } - } - //先清空受众信息,受众信息如果不一样了,也要加入到日志中 - courseCrowdDao.deleteByField("courseId", c.getId()); - if(full.getCrowds()!=null && !full.getCrowds().isEmpty()) { - for(CourseCrowd cc : full.getCrowds()) { - cc.setCourseId(c.getId()); - courseCrowdDao.saveOrUpdate(cc); - } - } - //同步发布 - publishUtil.fullTextPublish(c); - //发布事件处理 - if(eventSender!=null) { - List teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", c.getId())); - 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,aname,"authors:"+authorIds); - } - - }else { - log.error("未配置事件消息发送的实现"); - } - - } - - @Override - public void submit(CourseHRBPAudit hrbpAudit) throws Exception { - - courseDao.updateMultiFieldById(hrbpAudit.getCourseId(),UpdateBuilder.create("status",Course.STATUS_SUBMIT), - UpdateBuilder.create("published",false),UpdateBuilder.create("publishTime",LocalDateTime.now())); - - //保存审核信息 - hrbpAudit.setAddTime(LocalDateTime.now()); - hrbpAudit.setAuditRemark(""); - hrbpAudit.setForward(CourseHRBPAudit.FORWARD_NONE); - hrbpAudit.setStatus(CourseHRBPAudit.STATUS_NONE); - courseHRBPAuditDao.save(hrbpAudit); + //先清空教师信息, 教师信息如果不一样了,也要加入到日志中 + courseTeacherDao.deleteByField("courseId", c.getId()); + if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { + for (CourseTeacher ct : full.getTeachers()) { + ct.setCourseId(c.getId()); + courseTeacherDao.saveOrUpdate(ct); + } + } + //先清空受众信息,受众信息如果不一样了,也要加入到日志中 + courseCrowdDao.deleteByField("courseId", c.getId()); + if (full.getCrowds() != null && !full.getCrowds().isEmpty()) { + for (CourseCrowd cc : full.getCrowds()) { + cc.setCourseId(c.getId()); + courseCrowdDao.saveOrUpdate(cc); + } + } + //保存审核信息 + CourseHRBPAudit hrbpAudit = new CourseHRBPAudit(); + hrbpAudit.setCourseId(c.getId()); + hrbpAudit.setAddTime(LocalDateTime.now()); + hrbpAudit.setAid(full.getAuditUser().getAid()); + hrbpAudit.setAuditRemark(""); + hrbpAudit.setForward(CourseHRBPAudit.FORWARD_NONE); + hrbpAudit.setStatus(CourseHRBPAudit.STATUS_NONE); + courseHRBPAuditDao.save(hrbpAudit); + } - } + @Override + public void submitAndPublish(CourseFullDto full, String aid, String aname) throws Exception { - /** - * 撤销发布 - */ - @Override - public void update(String id) { - courseDao.updateMultiFieldById(id,UpdateBuilder.create("status",Course.STATUS_SUBMIT), - UpdateBuilder.create("published",false),UpdateBuilder.create("publishTime",LocalDateTime.now())); - } - - /*** - * 发布全文索引 - * @param c - */ + Course c = full.getCourse();//当前的课程信息 + c.setPublished(true); + c.setPublishTime(LocalDateTime.now()); + courseDao.update(c); + + //先清空教师信息, 教师信息如果不一样了,也要加入到日志中 + courseTeacherDao.deleteByField("courseId", c.getId()); + if (full.getTeachers() != null && !full.getTeachers().isEmpty()) { + for (CourseTeacher ct : full.getTeachers()) { + ct.setCourseId(c.getId()); + courseTeacherDao.saveOrUpdate(ct); + } + } + //先清空受众信息,受众信息如果不一样了,也要加入到日志中 + courseCrowdDao.deleteByField("courseId", c.getId()); + if (full.getCrowds() != null && !full.getCrowds().isEmpty()) { + for (CourseCrowd cc : full.getCrowds()) { + cc.setCourseId(c.getId()); + courseCrowdDao.saveOrUpdate(cc); + } + } + //同步发布 + publishUtil.fullTextPublish(c); + //发布事件处理 + if (eventSender != null) { + List teachers = courseTeacherDao.findList(FieldFilters.eq("courseId", c.getId())); + 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, aname, "authors:" + authorIds); + } + + } else { + log.error("未配置事件消息发送的实现"); + } + + } + + @Override + public void submit(CourseHRBPAudit hrbpAudit) throws Exception { + + courseDao.updateMultiFieldById(hrbpAudit.getCourseId(), UpdateBuilder.create("status", Course.STATUS_SUBMIT), + UpdateBuilder.create("published", false), UpdateBuilder.create("publishTime", LocalDateTime.now())); + + //保存审核信息 + hrbpAudit.setAddTime(LocalDateTime.now()); + hrbpAudit.setAuditRemark(""); + hrbpAudit.setForward(CourseHRBPAudit.FORWARD_NONE); + hrbpAudit.setStatus(CourseHRBPAudit.STATUS_NONE); + courseHRBPAuditDao.save(hrbpAudit); + + } + + /** + * 撤销发布 + */ + @Override + public void update(String id) { + courseDao.updateMultiFieldById(id, UpdateBuilder.create("status", Course.STATUS_SUBMIT), + UpdateBuilder.create("published", false), UpdateBuilder.create("publishTime", LocalDateTime.now())); + } + + /*** + * 发布全文索引 + * @param c + */ // private void fullTextPublish(Course c) { // if(fullTextSearch==null) { // log.error("未实现全文检索的接口:"+ICourseFullTextSearch.class); @@ -1104,12 +1187,11 @@ public class CourseServiceImpl implements ICourseService { // log.error("课程发布全文检索失败",e); // } // } + @Override + public void audit(String auditId, String courseId, Boolean pass, String aid, String name, String remark, boolean publish, Integer from) { - @Override - public void audit(String auditId, String courseId, Boolean pass, String aid, String name, String remark,boolean publish,Integer from) { - - //课程审核,记录审核记录 - LocalDateTime now=LocalDateTime.now(); + //课程审核,记录审核记录 + LocalDateTime now = LocalDateTime.now(); // SysLogAudit la=new SysLogAudit(); // la.setAuditRemark(remark); // la.setObjInfo(name); @@ -1118,773 +1200,769 @@ public class CourseServiceImpl implements ICourseService { // la.setObjId(id); // la.setObjType(1); // logAuditDao.save(la); - - int status=Course.STATUS_AUDIT_FINISH; - if(!pass) { - status=Course.STATUS_AUDIT_NOPASS; - } - - //更新状态,并把转审的信息置为空 - courseDao.updateMultiFieldById(courseId,UpdateBuilder.create("status", status),UpdateBuilder.create("auditAid", null),UpdateBuilder.create("auditInfo", null)); - //更新审核记录状态 - if(from!=null) { - courseHRBPAuditDao.updateMultiFieldById(auditId, - UpdateBuilder.create("status", pass? CourseHRBPAudit.STATUS_PASS:CourseHRBPAudit.STATUS_NOPASS), - UpdateBuilder.create("auditRemark", remark), - UpdateBuilder.create("auditUser", name), - UpdateBuilder.create("auditAid", aid), - UpdateBuilder.create("auditTime", now), - UpdateBuilder.create("forward", from) - ); - }else { - courseHRBPAuditDao.updateMultiFieldById(auditId, - UpdateBuilder.create("status", pass? CourseHRBPAudit.STATUS_PASS:CourseHRBPAudit.STATUS_NOPASS), - UpdateBuilder.create("auditRemark", remark), - UpdateBuilder.create("auditUser", name), - UpdateBuilder.create("auditAid", aid), - UpdateBuilder.create("auditTime", now) - ); - } - - - //审核通过并发布,直接发布课程 - if(pass && publish) { - //设置课程状态已审核完成,这里是管理员的审核 - courseDao.updateMultiFieldById(courseId, - UpdateBuilder.create("published", pass), - UpdateBuilder.create("erasable", false), //设置以后不能物理删除了 - UpdateBuilder.create("publishTime", LocalDateTime.now())); - //发布到全文检索中 - Course c=courseDao.get(courseId); + + int status = Course.STATUS_AUDIT_FINISH; + if (!pass) { + status = Course.STATUS_AUDIT_NOPASS; + } + + //更新状态,并把转审的信息置为空 + courseDao.updateMultiFieldById(courseId, UpdateBuilder.create("status", status), UpdateBuilder.create("auditAid", null), UpdateBuilder.create("auditInfo", null)); + //更新审核记录状态 + if (from != null) { + courseHRBPAuditDao.updateMultiFieldById(auditId, + UpdateBuilder.create("status", pass ? CourseHRBPAudit.STATUS_PASS : CourseHRBPAudit.STATUS_NOPASS), + UpdateBuilder.create("auditRemark", remark), + UpdateBuilder.create("auditUser", name), + UpdateBuilder.create("auditAid", aid), + UpdateBuilder.create("auditTime", now), + UpdateBuilder.create("forward", from) + ); + } else { + courseHRBPAuditDao.updateMultiFieldById(auditId, + UpdateBuilder.create("status", pass ? CourseHRBPAudit.STATUS_PASS : CourseHRBPAudit.STATUS_NOPASS), + UpdateBuilder.create("auditRemark", remark), + UpdateBuilder.create("auditUser", name), + UpdateBuilder.create("auditAid", aid), + UpdateBuilder.create("auditTime", now) + ); + } + + + //审核通过并发布,直接发布课程 + if (pass && publish) { + //设置课程状态已审核完成,这里是管理员的审核 + courseDao.updateMultiFieldById(courseId, + UpdateBuilder.create("published", pass), + UpdateBuilder.create("erasable", false), //设置以后不能物理删除了 + UpdateBuilder.create("publishTime", LocalDateTime.now())); + //发布到全文检索中 + Course c = courseDao.get(courseId); // if(fullTextSearch!=null) { // this.fullTextPublish(c); // } - publishUtil.fullTextPublish(c); - //同时添加发布事件,这里的创建人需要修改为教师 - if(eventSender!=null) { - List 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("未配置事件消息发送的实现"); - } - } - - } + publishUtil.fullTextPublish(c); + //同时添加发布事件,这里的创建人需要修改为教师 + if (eventSender != null) { + List 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); + } - @Override - public void publish(String id, boolean pass, String aid, String name, String remark) { - //只是修改发布情况 - if(pass) { - courseDao.updateMultiFieldById(id, - UpdateBuilder.create("published", pass), - UpdateBuilder.create("erasable", false), //设置以后不能物理删除了 - UpdateBuilder.create("publishTime", LocalDateTime.now())); - //发布到全文检索中 - if(fullTextSearch!=null) { - Course c=courseDao.get(id); - //this.fullTextPublish(c); - publishUtil.fullTextPublish(c); - } - }else { - courseDao.updateMultiFieldById(id,UpdateBuilder.create("published", pass)); - if(this.fullTextSearch!=null) { - Object fullId=courseDao.findField("fullTextId", FieldFilters.eq("id", id)); - if(fullId!=null) { - publishUtil.removeByDocId((String)fullId); - } - } - } - - - } - - @Override - public void setTop(String id, boolean top, String aid, String name, String remark) { - if(top) { - courseDao.updateMultiFieldById(id, - UpdateBuilder.create("isTop", top), - UpdateBuilder.create("topTime", LocalDateTime.now())); - }else { - courseDao.updateMultiFieldById(id, - UpdateBuilder.create("isTop", top), - UpdateBuilder.create("topTime", null)); - } - - if(this.fullTextSearch!=null) { - Object fullId=courseDao.findField("fullTextId", FieldFilters.eq("id", id)); - if(fullId!=null) { - publishUtil.updateFieldByDocId((String)fullId, "isTop", top?1:0); - } - } - - } - - @Override - public void setEnabled(String id, boolean enabled, String aid, String name, String remark) { - courseDao.updateMultiFieldById(id, - UpdateBuilder.create("enabled", enabled), - UpdateBuilder.create("enableRemark","【"+name+","+LocalDateTime.now().toString()+"】"+remark)); - - if(this.fullTextSearch!=null) { - if(enabled) { //启用,重新必 - Course c=courseDao.get(id); - //this.fullTextPublish(c); - publishUtil.fullTextPublish(c); - }else { - Object fullId=courseDao.findField("fullTextId", FieldFilters.eq("id", id)); - if(fullId!=null) { - publishUtil.removeByDocId((String)fullId); - } - } - - } - } - /** - * 赋值赞踩数 - * */ - @Override - public void updateTrampleCount(String id,Integer trampleCount) { - courseDao.updateMultiFieldById(id,UpdateBuilder.create("trampleCount", trampleCount)); - } - - - /** - * 赋值点赞数 - * */ - - @Override - public List findTeachersByCourseId(String courseId) { - - return courseTeacherDao.findList(OrderCondition.desc("teacherId"),FieldFilters.eq("courseId", courseId)); - } - - @Override - public List statRanking(int num,Integer type, Integer time) { - - try { - return courseDao.statRanking(num, type, time); - } catch (Exception e) { - //e.printStackTrace(); - log.error("统计课程排名错误",e); - return null; - } - } - - @Override - public List findTeachersByCourseIds(List ids) { - - return courseTeacherDao.findList(OrderCondition.desc("teacherId"),FieldFilters.in("courseId",ids)); - } - - @Override - public List findUpdataLogs(int num, String courseId, String name) { - - List filters = new ArrayList(); - - //自动添加过滤已删除 - filters.add(FieldFilters.eq("courseId", courseId)); - if(StringUtils.isNotBlank(name)) { - filters.add(FieldFilters.eq("sysCreateBy", name)); - } - - QueryBuilder query=QueryBuilder.from(CourseUpdateLog.class).addFilters(filters); - query.setPageSize(num); - query.addOrder(OrderCondition.desc("id")); - //query.addFields("new CourseUpdateLog(id,sysCreateAid,sysCreateBy,sysCreateTime)"); - - List rs=updateLogDao.findList(query.builder()); - return rs; - } - - @Override - public CourseUpdateLog getUpdateLog(String id) { - return updateLogDao.get(id); - } - - @Override - public Map findImages(List ids) { - return courseDao.findMap("id","coverImg", FieldFilters.in("id", ids)); - } - - - - @Override - public List scoreList(int num,int index) { - QueryBuilder builder = QueryBuilder.from(Course.class); - builder.setPageSize(num); - builder.addFilter(FieldFilters.eq("deleted",false)); - builder.addFilter(FieldFilters.eq("status",Course.STATUS_AUDIT_FINISH)); - builder.addFilter(FieldFilters.eq("published", true)); - builder.addFilter(FieldFilters.eq("enabled",true)); - builder.addFilter(FieldFilters.isNull("kid")); - builder.addFilter(FieldFilters.gt("studys",100)); - LocalDateTime parse = LocalDate.parse("2022-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay(); - builder.addFilter(FieldFilters.gt("publishTime",parse)); - if(index==1){ - builder.addOrder(OrderCondition.desc("studys")); - }else { - builder.addOrder(OrderCondition.desc("score")); - } - - PageList page = courseDao.findPage(builder.builder()); - List list = page.getList(); - List rankingDtos = new ArrayList<>(); - for (Course c:list) { - RankingDto rankingDto = new RankingDto(); - rankingDto.setId(c.getId()); - rankingDto.setName(c.getName()); - rankingDto.setType(c.getType()); - rankingDto.setScore(c.getScore()); - rankingDto.setStudys(c.getStudys()); - rankingDto.setImages(c.getCoverImg()); - rankingDto.setSummary(c.getSummary()); - rankingDto.setFavorites(c.getFavorites()); - rankingDto.setPraises(c.getPraises()); - rankingDto.setShares(c.getShares()); - rankingDto.setComments(c.getComments()); - rankingDto.setViews(c.getViews()); - rankingDto.setPublishTime(c.getPublishTime()); - rankingDtos.add(rankingDto); - } - return rankingDtos; - } - - @Override - public Boolean isRedoName() { - List list = courseDao.getAll(); - List strings = new ArrayList<>(); - for (Course c:list) { - strings.add(c.getName()); - } - long count=strings.stream().distinct().count(); - if(count name = courseDao.findList(FieldFilters.eq("name", courseName), - FieldFilters.ne("id",courseId)); - if(name.size()>0){ - return false; - }else{ - return true; - } - - } - - @Override - public List ids(List ids) { - List courses = courseDao.findList(FieldFilters.in("id", ids)); - return courses; - } - - @Override - public List userHobbyList(String aid,String orderField,Boolean orderAsc) { - List courses = new ArrayList<>(); - if(StringUtil.isNotBlank(aid)){ - String sql="select ref_id from boe_user_hobby where aid='"+aid+"'"; - List list = courseDao.sqlFindList(sql); - //课程id集合 - List strings = new ArrayList<>(); - for (Object o:list) { - strings.add((String) o); - } - if(list.isEmpty()){ - return courses; - } - QueryBuilder builder = QueryBuilder.from(Course.class); - builder.addFilter(FieldFilters.eq("deleted",false)); - builder.addFilter(FieldFilters.eq("enabled",true)); - builder.addFilter(FieldFilters.gt("score",4.0f)); - builder.setPageSize(3); - List iFieldFilters = new ArrayList<>(); - iFieldFilters.add(FieldFilters.in("sysType1",strings)); - iFieldFilters.add(FieldFilters.in("sysType2",strings)); - iFieldFilters.add(FieldFilters.in("sysType3",strings)); - builder.addFilter(FieldFilters.or(iFieldFilters)); - OrderCondition oc=null; - if(StringUtils.isNotBlank(orderField)) { - if(orderAsc==null || orderAsc) { - oc=OrderCondition.asc(orderField); - }else { - oc=OrderCondition.desc(orderField); - } - }else { - //oc=OrderCondition.desc("id"); - //默认按发布时间排序 - oc=OrderCondition.desc("publishTime"); - } - builder.addOrder(oc); - courses=courseDao.findList(builder.builder()); - } - return courses; - - - } - - @Override - public List mobiledelList(Integer num, CourseQueryDto courseQueryDto) { - QueryBuilder builder = QueryBuilder.from(Course.class); - builder.setPageSize(num); - builder.addFilter(FieldFilters.eq("deleted",false)); - builder.addFilter(FieldFilters.eq("enabled",true)); - builder.addFilter(FieldFilters.eq("status",Course.STATUS_AUDIT_FINISH)); - builder.addFilter(FieldFilters.eq("published", true)); - if(courseQueryDto!=null){ - if(StringUtil.isNotBlank(courseQueryDto.getSysType1())){ - builder.addFilter(FieldFilters.eq("sysType1",courseQueryDto.getSysType1())); - } - if(StringUtil.isNotBlank(courseQueryDto.getSysType2())){ - builder.addFilter(FieldFilters.eq("sysType2",courseQueryDto.getSysType2())); - } - if(StringUtil.isNotBlank(courseQueryDto.getSysType3())){ - builder.addFilter(FieldFilters.eq("sysType3",courseQueryDto.getSysType3())); - } - } - //排序规则按学习人数 - builder.addOrder(OrderCondition.desc("studys")); - builder.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,publishTime,isTop,sysType1,sysType2,sysType3)"); - List list = courseDao.findList(builder.builder()); - if(!list.isEmpty()&& list.size() list1 = courseDao.findList(num - list.size(),OrderCondition.desc("studys"), FieldFilters.eq("deleted", false), FieldFilters.eq("enabled", true), FieldFilters.eq("status", Course.STATUS_AUDIT_FINISH), - FieldFilters.eq("published", true)); - list.addAll(list1); - - } - return list; - } - - - - @Override - public int countWaitAudit(String aid) { - //查询待审核的课程 - String hql="Select count(c.id) from "+Course.class.getSimpleName()+" c,"+CourseHRBPAudit.class.getSimpleName()+" a where c.id=a.courseId " ; - hql+="and a.status="+CourseHRBPAudit.STATUS_NONE+" and a.aid=?1"; - int n=courseDao.count(hql, aid); - return n; - } - - @Override - public PageList findAuditPage(int pageIndex, int pageSize, CourseQueryDto dto,String aid,Integer auditStatus){ - - QueryBuilder query=QueryBuilder.from(Course.class.getSimpleName()+" c,"+CourseHRBPAudit.class.getSimpleName()+" a"); - query.setPageIndex(pageIndex); - query.setPageSize(pageSize); - query.addField("c"); - query.addField("a.id"); - query.addField("a.forward"); - query.addFilter(FieldFilters.eqField("c.id", "a.courseId")); - //超级用户 - Map managers=accountService.findIdMapByLoginNames("00004409","110858","10726944"); - if(!managers.containsKey(aid)){ - query.addFilter(FieldFilters.eq("a.aid",aid)); - } - //审核状态 - if(auditStatus!=null) { - if(auditStatus==9) { - query.addFilter(FieldFilters.gt("a.status",CourseHRBPAudit.STATUS_NONE)); - }else { - query.addFilter(FieldFilters.eq("a.status",auditStatus)); - } - - }else { - query.addFilter(FieldFilters.eq("a.status",CourseHRBPAudit.STATUS_NONE)); - } - //query.addFilter(FieldFilters.eq("a.forward",CourseHRBPAudit.FORWARD_NONE)); - - if(StringUtils.isNotBlank(dto.getKeyword())){ - query.addFilter(FieldFilters.like("c.name", dto.getKeyword())); - }else { - if(StringUtils.isNotBlank(dto.getName())){ - query.addFilter(FieldFilters.like("c.name",dto.getName())); - } + } else { + log.error("未配置事件消息发送的实现"); + } } - if(StringUtils.isNotBlank(dto.getSysType3())){ - query.addFilter(FieldFilters.eq("c.sysType3",dto.getSysType3())); - } - if(StringUtils.isNotBlank(dto.getSysType2())){ - query.addFilter(FieldFilters.eq("c.sysType2",dto.getSysType2())); - } - if(StringUtils.isNotBlank(dto.getSysType1())){ - query.addFilter(FieldFilters.eq("c.sysType1",dto.getSysType1())); - } - if(StringUtils.isNotBlank(dto.getCreateUser())){ - query.addFilter(FieldFilters.like("c.sysCreateBy", LikeMatchMode.ANYWHERE,dto.getCreateUser())); - } - - query.addFilter(FieldFilters.eq("c.deleted",false)); - query.addFilter(FieldFilters.eq("c.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("a.addTime"); - } - query.addOrder(oc); - PageList rs=new PageList(); - rs.setList(new ArrayList()); - try { - PageList list=courseDao.findPageFields(query.builder()); - rs.setCount(list.getCount()); - rs.setPageSize(pageSize); - for(Object[] objs : list.getList()) { - Course course=(Course)objs[0]; - course.setAuditId(objs[1].toString()); - course.setAuditForward((Integer)objs[2]); - rs.getList().add(course); - } - - - }catch(Exception e) { - log.error("查询课程审核错误",e); - } - return rs; - } - - @Override - public PageList teacherAuditPage(int pageIndex, int pageSize, CourseQueryDto dto,String aid,Integer auditStatus) { - QueryBuilder query=QueryBuilder.from(Course.class.getSimpleName()+" c,"+CourseHRBPAudit.class.getSimpleName()+" a"); - query.setPageIndex(pageIndex); - query.setPageSize(pageSize); - query.addField("c"); - query.addField("a.id"); - query.addField("a.toInfo"); - query.addFilter(FieldFilters.eqField("c.id", "a.courseId")); - - //审核权限处理 - query.addFilter(FieldFilters.eq("a.toAid",aid)); - - //审核状态 - if(auditStatus!=null) { - if(auditStatus==9) { - query.addFilter(FieldFilters.gt("a.status",CourseHRBPAudit.STATUS_NONE)); - }else { - query.addFilter(FieldFilters.eq("a.status",auditStatus)); - } - }else { - query.addFilter(FieldFilters.eq("a.status",CourseHRBPAudit.STATUS_NONE)); - } - - query.addFilter(FieldFilters.eq("a.forward", CourseHRBPAudit.FORWARD_TEACHER)); - - if(StringUtils.isNotBlank(dto.getKeyword())){ - query.addFilter(FieldFilters.like("c.name", dto.getKeyword())); - }else { - if(StringUtils.isNotBlank(dto.getName())){ - query.addFilter(FieldFilters.like("c.name",dto.getName())); - } + } + + @Override + public void publish(String id, boolean pass, String aid, String name, String remark) { + //只是修改发布情况 + if (pass) { + courseDao.updateMultiFieldById(id, + UpdateBuilder.create("published", pass), + UpdateBuilder.create("erasable", false), //设置以后不能物理删除了 + UpdateBuilder.create("publishTime", LocalDateTime.now())); + //发布到全文检索中 + if (fullTextSearch != null) { + Course c = courseDao.get(id); + //this.fullTextPublish(c); + publishUtil.fullTextPublish(c); + } + } else { + courseDao.updateMultiFieldById(id, UpdateBuilder.create("published", pass)); + if (this.fullTextSearch != null) { + Object fullId = courseDao.findField("fullTextId", FieldFilters.eq("id", id)); + if (fullId != null) { + publishUtil.removeByDocId((String) fullId); + } + } } - if(StringUtils.isNotBlank(dto.getSysType3())){ - query.addFilter(FieldFilters.eq("c.sysType3",dto.getSysType3())); - } - if(StringUtils.isNotBlank(dto.getSysType2())){ - query.addFilter(FieldFilters.eq("c.sysType2",dto.getSysType2())); - } - if(StringUtils.isNotBlank(dto.getSysType1())){ - query.addFilter(FieldFilters.eq("c.sysType1",dto.getSysType1())); - } - if(StringUtils.isNotBlank(dto.getCreateUser())){ - query.addFilter(FieldFilters.like("c.sysCreateBy", LikeMatchMode.ANYWHERE,dto.getCreateUser())); - } - - query.addFilter(FieldFilters.eq("c.deleted",false)); - query.addFilter(FieldFilters.eq("c.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("a.addTime"); - } - query.addOrder(oc); - PageList rs=new PageList(); - rs.setList(new ArrayList()); - try { - PageList list=courseDao.findPageFields(query.builder()); - rs.setCount(list.getCount()); - rs.setPageSize(pageSize); - for(Object[] objs : list.getList()) { - Course course=(Course)objs[0]; - course.setAuditId(objs[1].toString()); - course.setAuditInfo((String)objs[2]); - rs.getList().add(course); - } - - - }catch(Exception e) { - log.error("查询课程审核错误",e); - } - - return rs; - } - - @Override - public List findAuditList(CourseQueryDto dto, String aid) { - QueryBuilder query=QueryBuilder.from(Course.class.getSimpleName()+" c,"+CourseHRBPAudit.class.getSimpleName()+" a"); - query.addField("c"); - query.addFilter(FieldFilters.eqField("c.id", "a.courseId")); - //超级用户 - Map managers=accountService.findIdMapByLoginNames("00004409","110858","10726944"); - if(!managers.containsKey(aid)){ - query.addFilter(FieldFilters.eq("a.aid",aid)); - } - //审核权限处理 - query.addFilter(FieldFilters.eq("a.status",CourseHRBPAudit.STATUS_NONE)); - - if(StringUtils.isNotBlank(dto.getKeyword())){ - query.addFilter(FieldFilters.like("c.name", dto.getKeyword())); - }else { - if(StringUtils.isNotBlank(dto.getName())){ - query.addFilter(FieldFilters.like("c.name",dto.getName())); - } - } - if(StringUtils.isNotBlank(dto.getSysType3())){ - query.addFilter(FieldFilters.eq("c.sysType3",dto.getSysType3())); - } - if(StringUtils.isNotBlank(dto.getSysType2())){ - query.addFilter(FieldFilters.eq("c.sysType2",dto.getSysType2())); - } - if(StringUtils.isNotBlank(dto.getSysType1())){ - query.addFilter(FieldFilters.eq("c.sysType1",dto.getSysType1())); - } - if(StringUtils.isNotBlank(dto.getCreateUser())){ - query.addFilter(FieldFilters.like("c.sysCreateBy", LikeMatchMode.ANYWHERE,dto.getCreateUser())); - } - - query.addFilter(FieldFilters.eq("c.deleted",false)); - query.addFilter(FieldFilters.eq("c.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("a.addTime"); - } - query.addOrder(oc); - - List rs=courseDao.findList(query.builder()); - - return rs; - } - - /** - * 撤销课程审核 - */ - @Override - public void revokeSubmit(String id) { - //courseDao.updateFieldById(id, "status",Course.STATUS_NONE); - courseDao.updateMultiFieldById(id, UpdateBuilder.create("published",false),UpdateBuilder.create("status",Course.STATUS_NONE)); - //如果此课程有未审核的处理就应该主去掉 - courseHRBPAuditDao.deleteByFilter(FieldFilters.eq("courseId", id),FieldFilters.eq("status", CourseHRBPAudit.STATUS_NONE)); - } - - /** - * 返回当前课程名字 - * */ - private String courseName(String id){ - Course course = courseDao.get(id); - return course.getName(); - } - - @Transactional(propagation = Propagation.REQUIRED) - @Override - public String copyCourse(String id,String refId,String refType,String aid,String aname) { - //复制课程,boe_course,boe_course_content,boe_course_homework,boe_course_section,boe_course_teacher,boe_course_exam - // insert info select - List sectionList = courseSectionDao.findList("courseId", id); - if(refId==null) { - refId=""; - } - if(refType==null) { - refType=""; - } - - boolean visible=true; - if(StringUtils.isNotBlank(refId)) { - visible=false; - } - - String newId = IDGenerator.generate(); - String courseName = this.courseName(id); - LocalDateTime time = LocalDateTime.now(); - String mess=null; - if(courseName.length()<96) { - - String sql = "insert into boe_course(id,org_id,copy_id,ref_id,ref_type,visible,sys_create_aid,sys_create_by,sys_create_time,deleted,sys_update_by," + - "sys_update_time,sys_version,comments,cover_img,dead_time,device,enable_remark,enabled," + - "erasable,favorites,for_scene,for_users,is_top,keywords,name,open_object," + - "overview,pass_formula,praises,publish_time,published,res_owner1,res_owner2," + - "res_owner3,score,score_formula,shares,source,study_time,studys,summary," + - "sys_type1,sys_type2,sys_type3,tags,top_time,trample_count,type,value,views," + - "order_study,status)" + - "select '" + newId + "',org_id,'"+id+"','"+refId+"','"+refType+"',"+visible+",'"+aid+"','"+aname+"','" + time + "',0,'"+aname+"'," + - "'" + time + "',1,comments,cover_img,dead_time,device,enable_remark,enabled," + - "erasable,0,for_scene,for_users,0,keywords,'" + courseName + "(1)" + "',open_object," + - "overview,pass_formula,0,publish_time,0,res_owner1,res_owner2," + - "res_owner3,score,score_formula,0,source,study_time,0,summary," + - "sys_type1,sys_type2,sys_type3,tags,top_time,trample_count,type,value,0," + - "order_study,1 from boe_course where id=?1"; - courseDao.sqlUpdate(sql, id); - - //课程章节复制,因为微课是没有章的,所以这里要判断 - - if(sectionList.isEmpty()) { - //查出所有的内容,然后再一个一个复制(因为要复制关联的内容) - List contentIds= courseContentDao.findListField("id",FieldFilters.eq("courseId", id),FieldFilters.eq("deleted", false)); - for(Object obj :contentIds) { - String oldId=(String)obj; - String newContentId=IDGenerator.generate(); - String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + - "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + - "content_type,course_id,csection_id,duration,sort_index)" + - "select '"+newContentId+"','"+aid+"','"+aname+"','" + time + "'," + - "deleted,'"+aname+"','" + time + "',1,content," + - "content_name,content_refid,content_type,'" + newId + "','',duration,sort_index " + - "from boe_course_content where id=?1"; - courseContentDao.sqlUpdate(sqlContent, oldId); - - //课程作业复制 - String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + - "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + - "file,name,submit_mode)" + - "SELECT UUID_SHORT(),'"+aid+"','"+aname+"','" + time + "'," + - "deleted,'"+aname+"','" + time + "',sys_version,content,'"+newContentId+"','" + newId + "',dead_time," + - "file,name,submit_mode from boe_course_homework where content_id=?1"; - courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork, oldId); - - //课程考试信息复制 - String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + - "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + - "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + - "scoring_type,show_analysis,show_answer,test_duration," + - "test_name,times)" + - "select UUID_SHORT(),'"+aid+"','"+aname+"'," + - "'" + time + "',deleted,'"+aname+"','" + time + "'," + - "1,arrange,'"+newContentId+"'," + - "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + - "random_mode,scoring_type,show_analysis,show_answer,test_duration," + - "test_name,times from boe_course_exam where content_id=?1"; - courseExamDao.sqlUpdate(sqlExam, oldId); - } - }else { - List contentIdSectionIds= courseContentDao.findKeyValueList("id","csectionId", FieldFilters.eq("courseId", id),FieldFilters.eq("deleted", false)); - for(CourseSection csection : sectionList) { - //生成新的章的id - String newSectionId = IDGenerator.generate(); - String sqlSection = "" + - "insert into boe_course_section(id,course_id,description,name,order_index,parent_id)" + - "SELECT '"+newSectionId+"','" + newId + "',description,name,order_index,parent_id " + - "from boe_course_section where id=?1"; - courseSectionDao.sqlUpdate(sqlSection, csection.getId()); - - //课程内容复制 - for(KeyValue kv : contentIdSectionIds) { - if(!kv.getValue().equals(csection.getId())) { - continue; - } - String newContentId=IDGenerator.generate(); - String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + - "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + - "content_type,course_id,csection_id,duration,sort_index)" + - "select '"+newContentId+"','"+aid+"','"+aname+"','" + time + "'," + - "deleted,'"+aname+"','" + time + "',sys_version,content," + - "content_name,content_refid,content_type,'" + newId + "','"+newSectionId+"',duration,sort_index " + - "from boe_course_content where id=?1"; - courseContentDao.sqlUpdate(sqlContent,kv.getKey()); - - //课程作业复制 - String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + - "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + - "file,name,submit_mode)" + - "SELECT UUID_SHORT(),'"+aid+"','"+aname+"','" + time + "'," + - "deleted,'"+aname+"','" + time + "',sys_version,content,'"+newContentId+"','" + newId + "',dead_time," + - "file,name,submit_mode from boe_course_homework where content_id=?1 and course_id=?2"; - courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork,kv.getKey(),id); - - //课程考试信息复制 - String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + - "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + - "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + - "scoring_type,show_analysis,show_answer,test_duration," + - "test_name,times)" + - "select UUID_SHORT(),'"+aid+"','"+aname+"'," + - "'" + time + "',deleted,'"+aname+"','" + time + "'," + - "1,arrange,'"+newContentId+"'," + - "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + - "random_mode,scoring_type,show_analysis,show_answer,test_duration," + - "test_name,times from boe_course_exam where content_id=?1 and course_id=?2"; - courseExamDao.sqlUpdate(sqlExam,kv.getKey(),id); - } - - } - } - - //课程任课教师复制 - String sqlTeacher = "insert into boe_course_teacher(id,sys_create_aid,sys_create_by,sys_create_time," + - "course_id,teacher_id,teacher_name)" + - "SELECT UUID_SHORT(),'"+aid+"','"+aname+"'," + - "'" + time + "','" + newId + "',teacher_id," + - "teacher_name from boe_course_teacher where course_id=?1"; - courseTeacherDao.sqlUpdate(sqlTeacher, id); - - } - else{ - mess="长度超出范围"; - } - return mess; - - } - - @Override - public List findCrowdByCourseId(String courseId) { - - return courseCrowdDao.findList("courseId", courseId); - } - - @Override - public void updateFieldById(String id, String field, Object value) { - courseDao.updateFieldById(id, field, value); - } - - @Override - public List findStudysScoreByIds(List ids) { - - return courseDao.findListByHql("Select new Course(id,studys,score) from Course where id in(?1)",ids); - } + } + + @Override + public void setTop(String id, boolean top, String aid, String name, String remark) { + if (top) { + courseDao.updateMultiFieldById(id, + UpdateBuilder.create("isTop", top), + UpdateBuilder.create("topTime", LocalDateTime.now())); + } else { + courseDao.updateMultiFieldById(id, + UpdateBuilder.create("isTop", top), + UpdateBuilder.create("topTime", null)); + } + + if (this.fullTextSearch != null) { + Object fullId = courseDao.findField("fullTextId", FieldFilters.eq("id", id)); + if (fullId != null) { + publishUtil.updateFieldByDocId((String) fullId, "isTop", top ? 1 : 0); + } + } + + } + + @Override + public void setEnabled(String id, boolean enabled, String aid, String name, String remark) { + courseDao.updateMultiFieldById(id, + UpdateBuilder.create("enabled", enabled), + UpdateBuilder.create("enableRemark", "【" + name + "," + LocalDateTime.now().toString() + "】" + remark)); + + if (this.fullTextSearch != null) { + if (enabled) { //启用,重新必 + Course c = courseDao.get(id); + //this.fullTextPublish(c); + publishUtil.fullTextPublish(c); + } else { + Object fullId = courseDao.findField("fullTextId", FieldFilters.eq("id", id)); + if (fullId != null) { + publishUtil.removeByDocId((String) fullId); + } + } + + } + } + + /** + * 赋值赞踩数 + */ + @Override + public void updateTrampleCount(String id, Integer trampleCount) { + courseDao.updateMultiFieldById(id, UpdateBuilder.create("trampleCount", trampleCount)); + } + + + /** + * 赋值点赞数 + */ + + @Override + public List findTeachersByCourseId(String courseId) { + + return courseTeacherDao.findList(OrderCondition.desc("teacherId"), FieldFilters.eq("courseId", courseId)); + } + + @Override + public List statRanking(int num, Integer type, Integer time) { + + try { + return courseDao.statRanking(num, type, time); + } catch (Exception e) { + //e.printStackTrace(); + log.error("统计课程排名错误", e); + return null; + } + } + + @Override + public List findTeachersByCourseIds(List ids) { + + return courseTeacherDao.findList(OrderCondition.desc("teacherId"), FieldFilters.in("courseId", ids)); + } + + @Override + public List findUpdataLogs(int num, String courseId, String name) { + + List filters = new ArrayList(); + + //自动添加过滤已删除 + filters.add(FieldFilters.eq("courseId", courseId)); + if (StringUtils.isNotBlank(name)) { + filters.add(FieldFilters.eq("sysCreateBy", name)); + } + + QueryBuilder query = QueryBuilder.from(CourseUpdateLog.class).addFilters(filters); + query.setPageSize(num); + query.addOrder(OrderCondition.desc("id")); + //query.addFields("new CourseUpdateLog(id,sysCreateAid,sysCreateBy,sysCreateTime)"); + + List rs = updateLogDao.findList(query.builder()); + return rs; + } + + @Override + public CourseUpdateLog getUpdateLog(String id) { + return updateLogDao.get(id); + } + + @Override + public Map findImages(List ids) { + return courseDao.findMap("id", "coverImg", FieldFilters.in("id", ids)); + } + + + @Override + public List scoreList(int num, int index) { + QueryBuilder builder = QueryBuilder.from(Course.class); + builder.setPageSize(num); + builder.addFilter(FieldFilters.eq("deleted", false)); + builder.addFilter(FieldFilters.eq("status", Course.STATUS_AUDIT_FINISH)); + builder.addFilter(FieldFilters.eq("published", true)); + builder.addFilter(FieldFilters.eq("enabled", true)); + builder.addFilter(FieldFilters.isNull("kid")); + builder.addFilter(FieldFilters.gt("studys", 100)); + LocalDateTime parse = LocalDate.parse("2022-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay(); + builder.addFilter(FieldFilters.gt("publishTime", parse)); + if (index == 1) { + builder.addOrder(OrderCondition.desc("studys")); + } else { + builder.addOrder(OrderCondition.desc("score")); + } + + PageList page = courseDao.findPage(builder.builder()); + List list = page.getList(); + List rankingDtos = new ArrayList<>(); + for (Course c : list) { + RankingDto rankingDto = new RankingDto(); + rankingDto.setId(c.getId()); + rankingDto.setName(c.getName()); + rankingDto.setType(c.getType()); + rankingDto.setScore(c.getScore()); + rankingDto.setStudys(c.getStudys()); + rankingDto.setImages(c.getCoverImg()); + rankingDto.setSummary(c.getSummary()); + rankingDto.setFavorites(c.getFavorites()); + rankingDto.setPraises(c.getPraises()); + rankingDto.setShares(c.getShares()); + rankingDto.setComments(c.getComments()); + rankingDto.setViews(c.getViews()); + rankingDto.setPublishTime(c.getPublishTime()); + rankingDtos.add(rankingDto); + } + return rankingDtos; + } + + @Override + public Boolean isRedoName() { + List list = courseDao.getAll(); + List strings = new ArrayList<>(); + for (Course c : list) { + strings.add(c.getName()); + } + long count = strings.stream().distinct().count(); + if (count < strings.size()) { + return true; + } else { + return false; + } + + } + + @Override + public Boolean isCourseName(String courseName, String courseId) { + + List name = courseDao.findList(FieldFilters.eq("name", courseName), + FieldFilters.ne("id", courseId)); + if (name.size() > 0) { + return false; + } else { + return true; + } + + } + + @Override + public List ids(List ids) { + List courses = courseDao.findList(FieldFilters.in("id", ids)); + return courses; + } + + @Override + public List userHobbyList(String aid, String orderField, Boolean orderAsc) { + List courses = new ArrayList<>(); + if (StringUtil.isNotBlank(aid)) { + String sql = "select ref_id from boe_user_hobby where aid='" + aid + "'"; + List list = courseDao.sqlFindList(sql); + //课程id集合 + List strings = new ArrayList<>(); + for (Object o : list) { + strings.add((String) o); + } + if (list.isEmpty()) { + return courses; + } + QueryBuilder builder = QueryBuilder.from(Course.class); + builder.addFilter(FieldFilters.eq("deleted", false)); + builder.addFilter(FieldFilters.eq("enabled", true)); + builder.addFilter(FieldFilters.gt("score", 4.0f)); + builder.setPageSize(3); + List iFieldFilters = new ArrayList<>(); + iFieldFilters.add(FieldFilters.in("sysType1", strings)); + iFieldFilters.add(FieldFilters.in("sysType2", strings)); + iFieldFilters.add(FieldFilters.in("sysType3", strings)); + builder.addFilter(FieldFilters.or(iFieldFilters)); + OrderCondition oc = null; + if (StringUtils.isNotBlank(orderField)) { + if (orderAsc == null || orderAsc) { + oc = OrderCondition.asc(orderField); + } else { + oc = OrderCondition.desc(orderField); + } + } else { + //oc=OrderCondition.desc("id"); + //默认按发布时间排序 + oc = OrderCondition.desc("publishTime"); + } + builder.addOrder(oc); + courses = courseDao.findList(builder.builder()); + } + return courses; + + + } + + @Override + public List mobiledelList(Integer num, CourseQueryDto courseQueryDto) { + QueryBuilder builder = QueryBuilder.from(Course.class); + builder.setPageSize(num); + builder.addFilter(FieldFilters.eq("deleted", false)); + builder.addFilter(FieldFilters.eq("enabled", true)); + builder.addFilter(FieldFilters.eq("status", Course.STATUS_AUDIT_FINISH)); + builder.addFilter(FieldFilters.eq("published", true)); + if (courseQueryDto != null) { + if (StringUtil.isNotBlank(courseQueryDto.getSysType1())) { + builder.addFilter(FieldFilters.eq("sysType1", courseQueryDto.getSysType1())); + } + if (StringUtil.isNotBlank(courseQueryDto.getSysType2())) { + builder.addFilter(FieldFilters.eq("sysType2", courseQueryDto.getSysType2())); + } + if (StringUtil.isNotBlank(courseQueryDto.getSysType3())) { + builder.addFilter(FieldFilters.eq("sysType3", courseQueryDto.getSysType3())); + } + } + //排序规则按学习人数 + builder.addOrder(OrderCondition.desc("studys")); + builder.addFields("new Course(id,type,name,coverImg,score,studys,comments,shares,praises,favorites,forUsers,value,publishTime,isTop,sysType1,sysType2,sysType3)"); + List list = courseDao.findList(builder.builder()); + if (!list.isEmpty() && list.size() < num) { + List list1 = courseDao.findList(num - list.size(), OrderCondition.desc("studys"), FieldFilters.eq("deleted", false), FieldFilters.eq("enabled", true), FieldFilters.eq("status", Course.STATUS_AUDIT_FINISH), + FieldFilters.eq("published", true)); + list.addAll(list1); + + } + return list; + } + + + @Override + public int countWaitAudit(String aid) { + //查询待审核的课程 + String hql = "Select count(c.id) from " + Course.class.getSimpleName() + " c," + CourseHRBPAudit.class.getSimpleName() + " a where c.id=a.courseId "; + hql += "and a.status=" + CourseHRBPAudit.STATUS_NONE + " and a.aid=?1"; + int n = courseDao.count(hql, aid); + return n; + } + + @Override + public PageList findAuditPage(int pageIndex, int pageSize, CourseQueryDto dto, String aid, Integer auditStatus) { + + QueryBuilder query = QueryBuilder.from(Course.class.getSimpleName() + " c," + CourseHRBPAudit.class.getSimpleName() + " a"); + query.setPageIndex(pageIndex); + query.setPageSize(pageSize); + query.addField("c"); + query.addField("a.id"); + query.addField("a.forward"); + query.addFilter(FieldFilters.eqField("c.id", "a.courseId")); + //超级用户 + Map managers = accountService.findIdMapByLoginNames("00004409", "110858", "10726944"); + if (!managers.containsKey(aid)) { + query.addFilter(FieldFilters.eq("a.aid", aid)); + } + //审核状态 + if (auditStatus != null) { + if (auditStatus == 9) { + query.addFilter(FieldFilters.gt("a.status", CourseHRBPAudit.STATUS_NONE)); + } else { + query.addFilter(FieldFilters.eq("a.status", auditStatus)); + } + + } else { + query.addFilter(FieldFilters.eq("a.status", CourseHRBPAudit.STATUS_NONE)); + } + //query.addFilter(FieldFilters.eq("a.forward",CourseHRBPAudit.FORWARD_NONE)); + + if (StringUtils.isNotBlank(dto.getKeyword())) { + query.addFilter(FieldFilters.like("c.name", dto.getKeyword())); + } else { + if (StringUtils.isNotBlank(dto.getName())) { + query.addFilter(FieldFilters.like("c.name", dto.getName())); + } + } + if (StringUtils.isNotBlank(dto.getSysType3())) { + query.addFilter(FieldFilters.eq("c.sysType3", dto.getSysType3())); + } + if (StringUtils.isNotBlank(dto.getSysType2())) { + query.addFilter(FieldFilters.eq("c.sysType2", dto.getSysType2())); + } + if (StringUtils.isNotBlank(dto.getSysType1())) { + query.addFilter(FieldFilters.eq("c.sysType1", dto.getSysType1())); + } + if (StringUtils.isNotBlank(dto.getCreateUser())) { + query.addFilter(FieldFilters.like("c.sysCreateBy", LikeMatchMode.ANYWHERE, dto.getCreateUser())); + } + + query.addFilter(FieldFilters.eq("c.deleted", false)); + query.addFilter(FieldFilters.eq("c.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("a.addTime"); + } + query.addOrder(oc); + PageList rs = new PageList(); + rs.setList(new ArrayList()); + try { + PageList list = courseDao.findPageFields(query.builder()); + rs.setCount(list.getCount()); + rs.setPageSize(pageSize); + for (Object[] objs : list.getList()) { + Course course = (Course) objs[0]; + course.setAuditId(objs[1].toString()); + course.setAuditForward((Integer) objs[2]); + rs.getList().add(course); + } + + + } catch (Exception e) { + log.error("查询课程审核错误", e); + } + + return rs; + } + + @Override + public PageList teacherAuditPage(int pageIndex, int pageSize, CourseQueryDto dto, String aid, Integer auditStatus) { + QueryBuilder query = QueryBuilder.from(Course.class.getSimpleName() + " c," + CourseHRBPAudit.class.getSimpleName() + " a"); + query.setPageIndex(pageIndex); + query.setPageSize(pageSize); + query.addField("c"); + query.addField("a.id"); + query.addField("a.toInfo"); + query.addFilter(FieldFilters.eqField("c.id", "a.courseId")); + + //审核权限处理 + query.addFilter(FieldFilters.eq("a.toAid", aid)); + + //审核状态 + if (auditStatus != null) { + if (auditStatus == 9) { + query.addFilter(FieldFilters.gt("a.status", CourseHRBPAudit.STATUS_NONE)); + } else { + query.addFilter(FieldFilters.eq("a.status", auditStatus)); + } + } else { + query.addFilter(FieldFilters.eq("a.status", CourseHRBPAudit.STATUS_NONE)); + } + + query.addFilter(FieldFilters.eq("a.forward", CourseHRBPAudit.FORWARD_TEACHER)); + + if (StringUtils.isNotBlank(dto.getKeyword())) { + query.addFilter(FieldFilters.like("c.name", dto.getKeyword())); + } else { + if (StringUtils.isNotBlank(dto.getName())) { + query.addFilter(FieldFilters.like("c.name", dto.getName())); + } + } + if (StringUtils.isNotBlank(dto.getSysType3())) { + query.addFilter(FieldFilters.eq("c.sysType3", dto.getSysType3())); + } + if (StringUtils.isNotBlank(dto.getSysType2())) { + query.addFilter(FieldFilters.eq("c.sysType2", dto.getSysType2())); + } + if (StringUtils.isNotBlank(dto.getSysType1())) { + query.addFilter(FieldFilters.eq("c.sysType1", dto.getSysType1())); + } + if (StringUtils.isNotBlank(dto.getCreateUser())) { + query.addFilter(FieldFilters.like("c.sysCreateBy", LikeMatchMode.ANYWHERE, dto.getCreateUser())); + } + + query.addFilter(FieldFilters.eq("c.deleted", false)); + query.addFilter(FieldFilters.eq("c.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("a.addTime"); + } + query.addOrder(oc); + PageList rs = new PageList(); + rs.setList(new ArrayList()); + try { + PageList list = courseDao.findPageFields(query.builder()); + rs.setCount(list.getCount()); + rs.setPageSize(pageSize); + for (Object[] objs : list.getList()) { + Course course = (Course) objs[0]; + course.setAuditId(objs[1].toString()); + course.setAuditInfo((String) objs[2]); + rs.getList().add(course); + } + + + } catch (Exception e) { + log.error("查询课程审核错误", e); + } + + return rs; + } + + @Override + public List findAuditList(CourseQueryDto dto, String aid) { + QueryBuilder query = QueryBuilder.from(Course.class.getSimpleName() + " c," + CourseHRBPAudit.class.getSimpleName() + " a"); + query.addField("c"); + query.addFilter(FieldFilters.eqField("c.id", "a.courseId")); + //超级用户 + Map managers = accountService.findIdMapByLoginNames("00004409", "110858", "10726944"); + if (!managers.containsKey(aid)) { + query.addFilter(FieldFilters.eq("a.aid", aid)); + } + //审核权限处理 + query.addFilter(FieldFilters.eq("a.status", CourseHRBPAudit.STATUS_NONE)); + + if (StringUtils.isNotBlank(dto.getKeyword())) { + query.addFilter(FieldFilters.like("c.name", dto.getKeyword())); + } else { + if (StringUtils.isNotBlank(dto.getName())) { + query.addFilter(FieldFilters.like("c.name", dto.getName())); + } + } + if (StringUtils.isNotBlank(dto.getSysType3())) { + query.addFilter(FieldFilters.eq("c.sysType3", dto.getSysType3())); + } + if (StringUtils.isNotBlank(dto.getSysType2())) { + query.addFilter(FieldFilters.eq("c.sysType2", dto.getSysType2())); + } + if (StringUtils.isNotBlank(dto.getSysType1())) { + query.addFilter(FieldFilters.eq("c.sysType1", dto.getSysType1())); + } + if (StringUtils.isNotBlank(dto.getCreateUser())) { + query.addFilter(FieldFilters.like("c.sysCreateBy", LikeMatchMode.ANYWHERE, dto.getCreateUser())); + } + + query.addFilter(FieldFilters.eq("c.deleted", false)); + query.addFilter(FieldFilters.eq("c.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("a.addTime"); + } + query.addOrder(oc); + + List rs = courseDao.findList(query.builder()); + + return rs; + } + + /** + * 撤销课程审核 + */ + @Override + public void revokeSubmit(String id) { + //courseDao.updateFieldById(id, "status",Course.STATUS_NONE); + courseDao.updateMultiFieldById(id, UpdateBuilder.create("published", false), UpdateBuilder.create("status", Course.STATUS_NONE)); + //如果此课程有未审核的处理就应该主去掉 + courseHRBPAuditDao.deleteByFilter(FieldFilters.eq("courseId", id), FieldFilters.eq("status", CourseHRBPAudit.STATUS_NONE)); + } + + /** + * 返回当前课程名字 + */ + private String courseName(String id) { + Course course = courseDao.get(id); + return course.getName(); + } + + @Transactional(propagation = Propagation.REQUIRED) + @Override + public String copyCourse(String id, String refId, String refType, String aid, String aname) { + //复制课程,boe_course,boe_course_content,boe_course_homework,boe_course_section,boe_course_teacher,boe_course_exam + // insert info select + List sectionList = courseSectionDao.findList("courseId", id); + if (refId == null) { + refId = ""; + } + if (refType == null) { + refType = ""; + } + + boolean visible = true; + if (StringUtils.isNotBlank(refId)) { + visible = false; + } + + String newId = IDGenerator.generate(); + String courseName = this.courseName(id); + LocalDateTime time = LocalDateTime.now(); + String mess = null; + if (courseName.length() < 96) { + + String sql = "insert into boe_course(id,org_id,copy_id,ref_id,ref_type,visible,sys_create_aid,sys_create_by,sys_create_time,deleted,sys_update_by," + + "sys_update_time,sys_version,comments,cover_img,dead_time,device,enable_remark,enabled," + + "erasable,favorites,for_scene,for_users,is_top,keywords,name,open_object," + + "overview,pass_formula,praises,publish_time,published,res_owner1,res_owner2," + + "res_owner3,score,score_formula,shares,source,study_time,studys,summary," + + "sys_type1,sys_type2,sys_type3,tags,top_time,trample_count,type,value,views," + + "order_study,status)" + + "select '" + newId + "',org_id,'" + id + "','" + refId + "','" + refType + "'," + visible + ",'" + aid + "','" + aname + "','" + time + "',0,'" + aname + "'," + + "'" + time + "',1,comments,cover_img,dead_time,device,enable_remark,enabled," + + "erasable,0,for_scene,for_users,0,keywords,'" + courseName + "(1)" + "',open_object," + + "overview,pass_formula,0,publish_time,0,res_owner1,res_owner2," + + "res_owner3,score,score_formula,0,source,study_time,0,summary," + + "sys_type1,sys_type2,sys_type3,tags,top_time,trample_count,type,value,0," + + "order_study,1 from boe_course where id=?1"; + courseDao.sqlUpdate(sql, id); + + //课程章节复制,因为微课是没有章的,所以这里要判断 + + if (sectionList.isEmpty()) { + //查出所有的内容,然后再一个一个复制(因为要复制关联的内容) + List contentIds = courseContentDao.findListField("id", FieldFilters.eq("courseId", id), FieldFilters.eq("deleted", false)); + for (Object obj : contentIds) { + String oldId = (String) obj; + String newContentId = IDGenerator.generate(); + String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + + "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + + "content_type,course_id,csection_id,duration,sort_index)" + + "select '" + newContentId + "','" + aid + "','" + aname + "','" + time + "'," + + "deleted,'" + aname + "','" + time + "',1,content," + + "content_name,content_refid,content_type,'" + newId + "','',duration,sort_index " + + "from boe_course_content where id=?1"; + courseContentDao.sqlUpdate(sqlContent, oldId); + + //课程作业复制 + String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + + "file,name,submit_mode)" + + "SELECT UUID_SHORT(),'" + aid + "','" + aname + "','" + time + "'," + + "deleted,'" + aname + "','" + time + "',sys_version,content,'" + newContentId + "','" + newId + "',dead_time," + + "file,name,submit_mode from boe_course_homework where content_id=?1"; + courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork, oldId); + + //课程考试信息复制 + String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + + "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + + "scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times)" + + "select UUID_SHORT(),'" + aid + "','" + aname + "'," + + "'" + time + "',deleted,'" + aname + "','" + time + "'," + + "1,arrange,'" + newContentId + "'," + + "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + + "random_mode,scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times from boe_course_exam where content_id=?1"; + courseExamDao.sqlUpdate(sqlExam, oldId); + } + } else { + List contentIdSectionIds = courseContentDao.findKeyValueList("id", "csectionId", FieldFilters.eq("courseId", id), FieldFilters.eq("deleted", false)); + for (CourseSection csection : sectionList) { + //生成新的章的id + String newSectionId = IDGenerator.generate(); + String sqlSection = "" + + "insert into boe_course_section(id,course_id,description,name,order_index,parent_id)" + + "SELECT '" + newSectionId + "','" + newId + "',description,name,order_index,parent_id " + + "from boe_course_section where id=?1"; + courseSectionDao.sqlUpdate(sqlSection, csection.getId()); + + //课程内容复制 + for (KeyValue kv : contentIdSectionIds) { + if (!kv.getValue().equals(csection.getId())) { + continue; + } + String newContentId = IDGenerator.generate(); + String sqlContent = "insert into boe_course_content(id,sys_create_aid,sys_create_by,sys_create_time," + + "deleted,sys_update_by,sys_update_time,sys_version,content,content_name,content_refid," + + "content_type,course_id,csection_id,duration,sort_index)" + + "select '" + newContentId + "','" + aid + "','" + aname + "','" + time + "'," + + "deleted,'" + aname + "','" + time + "',sys_version,content," + + "content_name,content_refid,content_type,'" + newId + "','" + newSectionId + "',duration,sort_index " + + "from boe_course_content where id=?1"; + courseContentDao.sqlUpdate(sqlContent, kv.getKey()); + + //课程作业复制 + String sqlCourseHomeWork = "insert into boe_course_homework(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,content,content_id,course_id,dead_time," + + "file,name,submit_mode)" + + "SELECT UUID_SHORT(),'" + aid + "','" + aname + "','" + time + "'," + + "deleted,'" + aname + "','" + time + "',sys_version,content,'" + newContentId + "','" + newId + "',dead_time," + + "file,name,submit_mode from boe_course_homework where content_id=?1 and course_id=?2"; + courseHomeWorkDao.sqlUpdate(sqlCourseHomeWork, kv.getKey(), id); + + //课程考试信息复制 + String sqlExam = "insert into boe_course_exam(id,sys_create_aid,sys_create_by," + + "sys_create_time,deleted,sys_update_by,sys_update_time,sys_version,arrange,content_id," + + "course_id,info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum,random_mode," + + "scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times)" + + "select UUID_SHORT(),'" + aid + "','" + aname + "'," + + "'" + time + "',deleted,'" + aname + "','" + time + "'," + + "1,arrange,'" + newContentId + "'," + + "'" + newId + "',info,paper_content,paper_id,paper_type,pass_line,percent_score,qnum," + + "random_mode,scoring_type,show_analysis,show_answer,test_duration," + + "test_name,times from boe_course_exam where content_id=?1 and course_id=?2"; + courseExamDao.sqlUpdate(sqlExam, kv.getKey(), id); + } + + } + } + + //课程任课教师复制 + String sqlTeacher = "insert into boe_course_teacher(id,sys_create_aid,sys_create_by,sys_create_time," + + "course_id,teacher_id,teacher_name)" + + "SELECT UUID_SHORT(),'" + aid + "','" + aname + "'," + + "'" + time + "','" + newId + "',teacher_id," + + "teacher_name from boe_course_teacher where course_id=?1"; + courseTeacherDao.sqlUpdate(sqlTeacher, id); + + } else { + mess = "长度超出范围"; + } + return mess; + + } + + @Override + public List findCrowdByCourseId(String courseId) { + + return courseCrowdDao.findList("courseId", courseId); + } + + @Override + public void updateFieldById(String id, String field, Object value) { + courseDao.updateFieldById(id, field, value); + } + + @Override + public List findStudysScoreByIds(List ids) { + + return courseDao.findListByHql("Select new Course(id,studys,score) from Course where id in(?1)", ids); + } }