mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-08 10:26:48 +08:00
Merge branch 'zcwy-0613-wjw' into dev0525
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user