Merge branch 'zcwy-0613-wjw' into dev0525

This commit is contained in:
xiaozhequ
2024-06-19 15:35:18 +08:00
2 changed files with 98 additions and 46 deletions

View File

@@ -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<String> 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);

View File

@@ -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<Course> findPage(int pageIndex, int pageSize, CourseQueryDto dto) {
List<IFieldFilter> filters = createFilters(dto);
List<IFieldFilter> filters1=new ArrayList<>();
List<IFieldFilter> 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<String> 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<String> 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<Object[]> listFields=new ArrayList<>();
// List<Object[]> 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<Object[]> 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<Course> rs=courseDao.findPage(pageIndex, pageSize, filters, oc);
List<Course> listByFilters = new ArrayList<>();
if(StringUtil.isNotBlank(dto.getOrgIds())){
listByFilters = courseDao.findListByFilters(oc, filters);
}
List<Course> listByFilters1 = courseDao.findListByFilters(oc, filters2);
List<Course> mergedList = Stream.concat(listByFilters.stream(), listByFilters1.stream())
// 使用distinct()配合自定义的去重条件
.filter(distinctByKey(c -> c.getId()))
.collect(Collectors.toList());
// long startTime = System.nanoTime();
// PageList<Course> 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<String> courseIds = courseDao.findListByFilters(oc, filters).stream().map(Course::getId).collect(Collectors.toList());
List<String> courseIds = mergedList.stream().map(Course::getId).collect(Collectors.toList());
//找出courseIds和dto.getCourseIds的差集
List<String> collect = dto.getCourseIds().stream().filter(courseIds::contains).collect(Collectors.toList());
//将属于项目内课程 但不属于组织机构和创建人的课程设置为无权限
if (!collect.isEmpty()){
List<Course> 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<Course> paginate = paginate(mergedList, pageIndex, pageSize);
PageList<Course> rs=new PageList<>();
rs.setCount(mergedList.size());
rs.setList(paginate);
return rs;
}
public static <T> List<T> paginate(List<T> 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 <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
@Override
public List<Course> findList(CourseQueryDto dto) {
List<IFieldFilter> filters = createFilters(dto);