From de69ba1c118fb7c0689ccf4bfcba68d586b23075 Mon Sep 17 00:00:00 2001 From: xiaozhequ <792962424@qq.com> Date: Wed, 19 Jun 2024 15:34:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E8=AF=BE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CourseManageApi.java | 22 ++-- .../service/impl/CourseServiceImpl.java | 122 +++++++++++++----- 2 files changed, 98 insertions(+), 46 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 238e98a0..c04b2cde 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java @@ -1,11 +1,7 @@ package com.xboe.module.course.api; import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -129,12 +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); - } -// 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()) { @@ -142,6 +137,11 @@ 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); + } //如果前端查询当前人的,这里去掉 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 c1f26660..4d8fa8c5 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 @@ -4,10 +4,16 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Resource; +import javax.management.Query; +import com.xboe.core.orm.*; import org.apache.commons.lang3.StringUtils; import org.hibernate.mapping.IdGenerator; import org.springframework.beans.factory.annotation.Autowired; @@ -23,11 +29,6 @@ import com.xboe.common.beans.KeyValue; import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.StringUtil; import com.xboe.core.event.IEventDataSender; -import com.xboe.core.orm.FieldFilters; -import com.xboe.core.orm.IFieldFilter; -import com.xboe.core.orm.LikeMatchMode; -import com.xboe.core.orm.QueryBuilder; -import com.xboe.core.orm.UpdateBuilder; import com.xboe.module.course.dao.CourseContentDao; import com.xboe.module.course.dao.CourseCrowdDao; import com.xboe.module.course.dao.CourseDao; @@ -254,50 +255,68 @@ public class CourseServiceImpl implements ICourseService { @Override public PageList findPage(int pageIndex, int pageSize, CourseQueryDto dto) { List filters = createFilters(dto); - List filters1=new ArrayList<>(); + List filters2 = createFilters(dto); //有权限的查询,也同时查询出创建人的数据,在权限上 if(TempFilterConfig.Manager_CourseFile_ByOrgIds) { if(dto.getIsSystemAdmin()==null || !dto.getIsSystemAdmin()) { - if(StringUtil.isNotBlank(dto.getOrgIds())&&dto.getCourseIds()!=null&&!dto.getCourseIds().isEmpty()){ - //log.info("【"+dto.getOrgAid()+"】 按机构过滤和自己创建的课程"); - //log.info(" orgids "+dto.getOrgIds()); - if(dto.getOrgIds().contains(",")){ - String[] split = dto.getOrgIds().split(","); - List strings = Arrays.asList(split); - filters1.add(FieldFilters.in("orgId",strings)); - filters1.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); - filters1.add(FieldFilters.in("id",dto.getCourseIds())); - filters.add(FieldFilters.or(filters1)); - }else { - filters1.add(FieldFilters.eq("orgId",dto.getOrgIds())); - filters1.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); - filters1.add(FieldFilters.in("id",dto.getCourseIds())); - filters.add(FieldFilters.or(filters1)); - } - } - if(StringUtil.isNotBlank(dto.getOrgIds())&&(dto.getCourseIds()==null||dto.getCourseIds().isEmpty())){ + 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.or(FieldFilters.in("orgId",strings),FieldFilters.eq("sysCreateAid",dto.getOrgAid()))); + filters.add((FieldFilters.in("orgId",strings))); +// filters2.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); + if(dto.getCourseIds()!=null&&!dto.getCourseIds().isEmpty()){ + filters2.add(FieldFilters.or(FieldFilters.eq("sysCreateAid",dto.getOrgAid()),FieldFilters.eq("id",dto.getCourseIds()))); + }else{ + filters2.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); + } }else { - filters.add(FieldFilters.or(FieldFilters.eq("orgId",dto.getOrgIds()),FieldFilters.eq("sysCreateAid",dto.getOrgAid()))); +// filters.add(FieldFilters.or(FieldFilters.eq("orgId",dto.getOrgIds()),FieldFilters.eq("sysCreateAid",dto.getOrgAid()))); + filters.add(FieldFilters.eq("orgId",dto.getOrgIds())); + if(dto.getCourseIds()!=null&&!dto.getCourseIds().isEmpty()){ + filters2.add(FieldFilters.or(FieldFilters.eq("sysCreateAid",dto.getOrgAid()),FieldFilters.eq("id",dto.getCourseIds()))); + }else{ + filters2.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); + } } } - if (!StringUtil.isNotBlank(dto.getOrgIds())&&(dto.getCourseIds()==null||dto.getCourseIds().isEmpty())){ + if (!StringUtil.isNotBlank(dto.getOrgIds())){ //log.info("【"+dto.getOrgAid()+"】 机构ids没有, 只查询自己创建的课程"); //没有机构权限,只能查出自己创建的 - filters.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); +// filters.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); + if(dto.getCourseIds()!=null&&!dto.getCourseIds().isEmpty()){ + filters2.add(FieldFilters.or(FieldFilters.eq("sysCreateAid",dto.getOrgAid()),FieldFilters.eq("id",dto.getCourseIds()))); + }else{ + filters2.add(FieldFilters.eq("sysCreateAid",dto.getOrgAid())); + } } }else { //log.info("【"+dto.getOrgAid()+"】IsSystemAdmin is true 不过机构过滤,查询全部"); } } - +// List listFields=new ArrayList<>(); +// List listFields1=new ArrayList<>(); +// String sql="SELECT name FROM "+Course.class.getSimpleName()+" WHERE sys_create_aid =?1"; +// String sql1="select name from "+Course.class.getSimpleName()+" where org_id in (?1)"; +// try { +// listFields1=courseDao.findListFields(sql,"965342027497607168"); +// listFields = courseDao.findListFields(sql1, "123"); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// List collect1 = Stream.concat(listFields1.stream(), listFields.stream()) +// .distinct() +// .collect(Collectors.toList()); +// paginate(collect1, pageIndex, pageSize); + + //自动添加过滤已删除 filters.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) { @@ -308,30 +327,63 @@ public class CourseServiceImpl implements ICourseService { }else { oc=OrderCondition.desc("id"); } - PageList rs=courseDao.findPage(pageIndex, pageSize, filters, oc); + List listByFilters = new ArrayList<>(); + if(StringUtil.isNotBlank(dto.getOrgIds())){ + listByFilters = courseDao.findListByFilters(oc, filters); + } + List listByFilters1 = courseDao.findListByFilters(oc, filters2); + List mergedList = Stream.concat(listByFilters.stream(), listByFilters1.stream()) + // 使用distinct()配合自定义的去重条件 + .filter(distinctByKey(c -> c.getId())) + .collect(Collectors.toList()); +// long startTime = System.nanoTime(); +// PageList rs=courseDao.findPage(pageIndex, pageSize, filters, oc); +// long endTime = System.nanoTime(); +// // 计算并转换执行时间为秒 +// double durationInSeconds = (endTime - startTime) / 1_000_000_000.0; +// System.out.printf("方法执行时间: %.6f 秒%n", durationInSeconds); //log.info("查询出的条数:"+rs.getCount()); if(dto.getCourseIds()!=null&&!dto.getCourseIds().isEmpty()){ //查出属于机构的课程和创建人的课程 - List courseIds = courseDao.findListByFilters(oc, filters).stream().map(Course::getId).collect(Collectors.toList()); + List courseIds = mergedList.stream().map(Course::getId).collect(Collectors.toList()); //找出courseIds和dto.getCourseIds的差集 List collect = dto.getCourseIds().stream().filter(courseIds::contains).collect(Collectors.toList()); //将属于项目内课程 但不属于组织机构和创建人的课程设置为无权限 if (!collect.isEmpty()){ - List list = rs.getList(); - list.forEach(e->{ + mergedList.forEach(e->{ if (collect.contains(e.getId())){ e.setIsPermission(false); }else { e.setIsPermission(true); } }); - rs.setList(list); } } - + List paginate = paginate(mergedList, pageIndex, pageSize); + PageList rs=new PageList<>(); + rs.setCount(mergedList.size()); + rs.setList(paginate); return rs; } + 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);