|
@@ -1,4 +1,4 @@
|
|
|
-package org.dromara.workflow.service.impl;
|
|
|
|
|
|
|
+package org.dromara.xg.service.impl;
|
|
|
|
|
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
@@ -10,20 +10,20 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.dromara.workflow.domain.bo.XgStudentLeaveBo;
|
|
|
|
|
-import org.dromara.workflow.domain.vo.XgStudentLeaveVo;
|
|
|
|
|
-import org.dromara.workflow.domain.XgStudentLeave;
|
|
|
|
|
-import org.dromara.workflow.mapper.XgStudentLeaveMapper;
|
|
|
|
|
-import org.dromara.workflow.service.IXgStudentLeaveService;
|
|
|
|
|
|
|
+import org.dromara.xg.domain.bo.XgStudentLeaveBo;
|
|
|
|
|
+import org.dromara.xg.domain.vo.XgStudentLeaveVo;
|
|
|
|
|
+import org.dromara.xg.domain.XgStudentLeave;
|
|
|
|
|
+import org.dromara.xg.mapper.XgStudentLeaveMapper;
|
|
|
|
|
+import org.dromara.xg.service.IXgStudentLeaveService;
|
|
|
import org.dromara.workflow.common.ConditionalOnEnable;
|
|
import org.dromara.workflow.common.ConditionalOnEnable;
|
|
|
import org.dromara.workflow.domain.TestLeave;
|
|
import org.dromara.workflow.domain.TestLeave;
|
|
|
-import org.dromara.workflow.domain.XgStudentCancelLeave;
|
|
|
|
|
|
|
+import org.dromara.xg.domain.XgStudentCancelLeave;
|
|
|
import org.dromara.workflow.domain.bo.TestLeaveBo;
|
|
import org.dromara.workflow.domain.bo.TestLeaveBo;
|
|
|
import org.dromara.workflow.domain.vo.TestLeaveVo;
|
|
import org.dromara.workflow.domain.vo.TestLeaveVo;
|
|
|
import org.dromara.workflow.mapper.TestLeaveMapper;
|
|
import org.dromara.workflow.mapper.TestLeaveMapper;
|
|
|
-import org.dromara.workflow.mapper.XgStudentCancelLeaveMapper;
|
|
|
|
|
|
|
+import org.dromara.xg.mapper.XgStudentCancelLeaveMapper;
|
|
|
import org.dromara.workflow.service.ITestLeaveService;
|
|
import org.dromara.workflow.service.ITestLeaveService;
|
|
|
-import org.dromara.workflow.service.IXgStudentCancelLeaveService;
|
|
|
|
|
|
|
+import org.dromara.xg.service.IXgStudentCancelLeaveService;
|
|
|
import org.springframework.context.event.EventListener;
|
|
import org.springframework.context.event.EventListener;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -41,10 +41,23 @@ import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
+import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
|
|
+import org.dromara.system.mapper.SysDeptMapper;
|
|
|
|
|
+import org.dromara.system.domain.SysDept;
|
|
|
|
|
+import org.dromara.xg.mapper.XgStudentManagerMapper;
|
|
|
|
|
+import org.dromara.xg.mapper.XgStudentManagerSourceMapper;
|
|
|
|
|
+import org.dromara.xg.mapper.XgClassMsgMapper;
|
|
|
|
|
+import org.dromara.xg.domain.XgStudentManager;
|
|
|
|
|
+import org.dromara.xg.domain.XgStudentManagerSource;
|
|
|
|
|
+import org.dromara.xg.domain.XgClassMsg;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Set;
|
|
|
|
|
+import java.util.HashSet;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 学生请假 - 记录学生的请假申请、审批和销假信息Service业务层处理
|
|
* 学生请假 - 记录学生的请假申请、审批和销假信息Service业务层处理
|
|
@@ -61,6 +74,11 @@ public class XgStudentLeaveServiceImpl implements IXgStudentLeaveService {
|
|
|
private final XgStudentLeaveMapper baseMapper;
|
|
private final XgStudentLeaveMapper baseMapper;
|
|
|
private final WorkflowService workflowService;
|
|
private final WorkflowService workflowService;
|
|
|
private final XgStudentCancelLeaveMapper xgStudentCancelLeaveMapper;
|
|
private final XgStudentCancelLeaveMapper xgStudentCancelLeaveMapper;
|
|
|
|
|
+ // 添加权限过滤需要的依赖
|
|
|
|
|
+ private final SysDeptMapper sysDeptMapper;
|
|
|
|
|
+ private final XgStudentManagerMapper xgStudentManagerMapper;
|
|
|
|
|
+ private final XgStudentManagerSourceMapper xgStudentManagerSourceMapper;
|
|
|
|
|
+ private final XgClassMsgMapper xgClassMsgMapper;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 查询学生请假 - 记录学生的请假申请、审批和销假信息
|
|
* 查询学生请假 - 记录学生的请假申请、审批和销假信息
|
|
@@ -82,7 +100,13 @@ public class XgStudentLeaveServiceImpl implements IXgStudentLeaveService {
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public TableDataInfo<XgStudentLeaveVo> queryPageList(XgStudentLeaveBo bo, PageQuery pageQuery) {
|
|
public TableDataInfo<XgStudentLeaveVo> queryPageList(XgStudentLeaveBo bo, PageQuery pageQuery) {
|
|
|
- LambdaQueryWrapper<XgStudentLeave> lqw = buildQueryWrapper(bo);
|
|
|
|
|
|
|
+ // 增加班级数据权限的过滤功能
|
|
|
|
|
+ // 第一步:调用权限过滤方法,获取过滤后的班级IDs(传入101作为根组织ID)
|
|
|
|
|
+ List<Long> filteredDeptIds = filterDeptIdsByPermission(101L);
|
|
|
|
|
+ log.info("权限过滤后的班级ID列表: {}", filteredDeptIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 第二步:使用带权限过滤的查询条件构建器
|
|
|
|
|
+ LambdaQueryWrapper<XgStudentLeave> lqw = buildQueryWrapperWithPermission(bo, filteredDeptIds);
|
|
|
Page<XgStudentLeaveVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
Page<XgStudentLeaveVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
return TableDataInfo.build(result);
|
|
return TableDataInfo.build(result);
|
|
|
}
|
|
}
|
|
@@ -99,6 +123,218 @@ public class XgStudentLeaveServiceImpl implements IXgStudentLeaveService {
|
|
|
return baseMapper.selectVoList(lqw);
|
|
return baseMapper.selectVoList(lqw);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 权限过滤方法
|
|
|
|
|
+ * 根据当前用户的权限范围过滤部门ID列表
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param deptId 入参的部门ID
|
|
|
|
|
+ * @return 过滤后的部门ID列表
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<Long> filterDeptIdsByPermission(Long deptId) {
|
|
|
|
|
+ // 获取当前登录用户ID
|
|
|
|
|
+ Long currentUserId = LoginHelper.getUserId();
|
|
|
|
|
+ log.info("当前登录用户ID: {}", currentUserId);
|
|
|
|
|
+
|
|
|
|
|
+ // 第一步:判断当前用户是否为全校管理员
|
|
|
|
|
+ boolean isSchoolManager = checkIsSchoolManager(currentUserId);
|
|
|
|
|
+ if (isSchoolManager) {
|
|
|
|
|
+ log.info("用户 {} 是全校管理员,不进行权限过滤", currentUserId);
|
|
|
|
|
+ // 全校管理员不进行过滤,返回包含入参deptId及其子组织的列表
|
|
|
|
|
+ return getDeptIdsWithChildren(deptId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 第二步:获取用户的总权限集合
|
|
|
|
|
+ Set<Long> userAuthDeptIds = getUserAuthDeptIds(currentUserId);
|
|
|
|
|
+ log.info("用户 {} 的权限范围: {}", currentUserId, userAuthDeptIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 第三步:判断入参deptId是否在用户权限范围内
|
|
|
|
|
+ if (deptId != null && userAuthDeptIds.contains(deptId)) {
|
|
|
|
|
+ log.info("入参deptId {} 在用户权限范围内,不进行过滤", deptId);
|
|
|
|
|
+ // 在权限范围内,返回包含入参deptId及其子组织的列表
|
|
|
|
|
+ return getDeptIdsWithChildren(deptId);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.info("入参deptId {} 不在用户权限范围内,进行权限过滤", deptId);
|
|
|
|
|
+ // 不在权限范围内,过滤deptIds,只保留在权限范围内的
|
|
|
|
|
+ List<Long> filteredDeptIds = new ArrayList<>();
|
|
|
|
|
+ if (deptId != null) {
|
|
|
|
|
+ // 如果入参deptId不为空,检查其子组织是否在权限范围内
|
|
|
|
|
+ List<Long> deptIdsWithChildren = getDeptIdsWithChildren(deptId);
|
|
|
|
|
+ for (Long deptIdWithChild : deptIdsWithChildren) {
|
|
|
|
|
+ if (userAuthDeptIds.contains(deptIdWithChild)) {
|
|
|
|
|
+ filteredDeptIds.add(deptIdWithChild);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果入参deptId为空,直接使用用户权限范围内的所有部门
|
|
|
|
|
+ filteredDeptIds.addAll(userAuthDeptIds);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 对过滤后的deptIds,查找所有子组织包括他们自己
|
|
|
|
|
+ Set<Long> finalDeptIds = new HashSet<>();
|
|
|
|
|
+ for (Long filteredDeptId : filteredDeptIds) {
|
|
|
|
|
+ List<Long> deptIdsWithChildren = getDeptIdsWithChildren(filteredDeptId);
|
|
|
|
|
+ finalDeptIds.addAll(deptIdsWithChildren);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return new ArrayList<>(finalDeptIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检查用户是否为全校管理员
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param userId 用户ID
|
|
|
|
|
+ * @return 是否为全校管理员
|
|
|
|
|
+ */
|
|
|
|
|
+ private boolean checkIsSchoolManager(Long userId) {
|
|
|
|
|
+ LambdaQueryWrapper<XgStudentManager> lqw = Wrappers.lambdaQuery();
|
|
|
|
|
+ lqw.eq(XgStudentManager::getUserId, userId)
|
|
|
|
|
+ .eq(XgStudentManager::getDeleted, "0")
|
|
|
|
|
+ .eq(XgStudentManager::getStatus, "0")
|
|
|
|
|
+ .eq(XgStudentManager::getManagerType, "1");
|
|
|
|
|
+
|
|
|
|
|
+ return xgStudentManagerMapper.selectCount(lqw) > 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取用户的总权限集合
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param userId 用户ID
|
|
|
|
|
+ * @return 用户权限范围内的部门ID集合
|
|
|
|
|
+ */
|
|
|
|
|
+ private Set<Long> getUserAuthDeptIds(Long userId) {
|
|
|
|
|
+ Set<Long> authDeptIds = new HashSet<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 第三步:通过xg_student_manager和xg_student_manager_source关联,获取用户的权限范围
|
|
|
|
|
+ LambdaQueryWrapper<XgStudentManager> managerWrapper = Wrappers.lambdaQuery();
|
|
|
|
|
+ managerWrapper.eq(XgStudentManager::getUserId, userId)
|
|
|
|
|
+ .eq(XgStudentManager::getDeleted, "0")
|
|
|
|
|
+ .eq(XgStudentManager::getStatus, "0");
|
|
|
|
|
+
|
|
|
|
|
+ List<XgStudentManager> managers = xgStudentManagerMapper.selectList(managerWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ for (XgStudentManager manager : managers) {
|
|
|
|
|
+ LambdaQueryWrapper<XgStudentManagerSource> sourceWrapper = Wrappers.lambdaQuery();
|
|
|
|
|
+ sourceWrapper.eq(XgStudentManagerSource::getManagerId, manager.getId())
|
|
|
|
|
+ .eq(XgStudentManagerSource::getDeleted, "0")
|
|
|
|
|
+ .eq(XgStudentManagerSource::getStatus, "0");
|
|
|
|
|
+
|
|
|
|
|
+ List<XgStudentManagerSource> sources = xgStudentManagerSourceMapper.selectList(sourceWrapper);
|
|
|
|
|
+ for (XgStudentManagerSource source : sources) {
|
|
|
|
|
+ if (source.getAuthSource() != null) {
|
|
|
|
|
+ authDeptIds.add(source.getAuthSource());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 第四步:通过xg_class_msg表,class_teacher_id=当前登录人id,deleted='0',class_status='1',获取id
|
|
|
|
|
+ LambdaQueryWrapper<XgClassMsg> classWrapper = Wrappers.lambdaQuery();
|
|
|
|
|
+ classWrapper.eq(XgClassMsg::getClassTeacherId, userId)
|
|
|
|
|
+ .eq(XgClassMsg::getDeleted, 0L)
|
|
|
|
|
+ .eq(XgClassMsg::getClassStatus, "1");
|
|
|
|
|
+
|
|
|
|
|
+ List<XgClassMsg> classes = xgClassMsgMapper.selectList(classWrapper);
|
|
|
|
|
+ for (XgClassMsg classMsg : classes) {
|
|
|
|
|
+ if (classMsg.getId() != null) {
|
|
|
|
|
+ authDeptIds.add(classMsg.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return authDeptIds;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取部门ID及其所有子组织的ID列表
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param deptId 部门ID
|
|
|
|
|
+ * @return 包含部门ID及其子组织的ID列表
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<Long> getDeptIdsWithChildren(Long deptId) {
|
|
|
|
|
+ List<Long> deptIds = new ArrayList<>();
|
|
|
|
|
+ if (deptId != null) {
|
|
|
|
|
+ deptIds.add(deptId); // 包含自己
|
|
|
|
|
+
|
|
|
|
|
+ // 查找所有子组织
|
|
|
|
|
+ List<SysDept> childDepts = sysDeptMapper.selectListByParentId(deptId);
|
|
|
|
|
+ if (!childDepts.isEmpty()) {
|
|
|
|
|
+ List<Long> childDeptIds = childDepts.stream()
|
|
|
|
|
+ .map(SysDept::getDeptId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ deptIds.addAll(childDeptIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return deptIds;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建带权限过滤的查询条件包装器
|
|
|
|
|
+ */
|
|
|
|
|
+ private LambdaQueryWrapper<XgStudentLeave> buildQueryWrapperWithPermission(XgStudentLeaveBo bo,
|
|
|
|
|
+ List<Long> filteredDeptIds) {
|
|
|
|
|
+ Map<String, Object> params = bo.getParams();
|
|
|
|
|
+ LambdaQueryWrapper<XgStudentLeave> lqw = Wrappers.lambdaQuery();
|
|
|
|
|
+ lqw.orderByDesc(XgStudentLeave::getCreateTime);
|
|
|
|
|
+
|
|
|
|
|
+ // 获取当前登录用户ID
|
|
|
|
|
+ Long currentUserId = LoginHelper.getUserId();
|
|
|
|
|
+
|
|
|
|
|
+ // 添加权限过滤条件:(班级ID必须在权限范围内) OR (是自己创建的请假单)
|
|
|
|
|
+ lqw.and(wrapper -> {
|
|
|
|
|
+ if (filteredDeptIds != null && !filteredDeptIds.isEmpty()) {
|
|
|
|
|
+ wrapper.in(XgStudentLeave::getClassId, filteredDeptIds);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果用户没有任何权限,使用一个不存在的ID
|
|
|
|
|
+ wrapper.eq(XgStudentLeave::getClassId, -1L);
|
|
|
|
|
+ }
|
|
|
|
|
+ // OR 用户可以查看自己创建的请假单
|
|
|
|
|
+ wrapper.or().eq(XgStudentLeave::getStudentId, currentUserId);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 原有的查询条件
|
|
|
|
|
+ lqw.eq(bo.getDeleted() != null, XgStudentLeave::getDeleted, bo.getDeleted());
|
|
|
|
|
+ lqw.eq(bo.getStudentId() != null, XgStudentLeave::getStudentId, bo.getStudentId());
|
|
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XgStudentLeave::getStudentName, bo.getStudentName());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getStudentNo()), XgStudentLeave::getStudentNo, bo.getStudentNo());
|
|
|
|
|
+ lqw.eq(bo.getClassId() != null, XgStudentLeave::getClassId, bo.getClassId());
|
|
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getClassName()), XgStudentLeave::getClassName, bo.getClassName());
|
|
|
|
|
+ lqw.eq(bo.getMajorId() != null, XgStudentLeave::getMajorId, bo.getMajorId());
|
|
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XgStudentLeave::getMajorName, bo.getMajorName());
|
|
|
|
|
+ lqw.eq(bo.getCollegeId() != null, XgStudentLeave::getCollegeId, bo.getCollegeId());
|
|
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XgStudentLeave::getCollegeName, bo.getCollegeName());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getLeaveTypeCode()), XgStudentLeave::getLeaveTypeCode, bo.getLeaveTypeCode());
|
|
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getLeaveTypeName()), XgStudentLeave::getLeaveTypeName,
|
|
|
|
|
+ bo.getLeaveTypeName());
|
|
|
|
|
+ lqw.ge(bo.getStartTime() != null, XgStudentLeave::getStartTime, bo.getStartTime());
|
|
|
|
|
+ lqw.le(bo.getEndTime() != null, XgStudentLeave::getEndTime, bo.getEndTime());
|
|
|
|
|
+ lqw.eq(bo.getLeaveDuration() != null, XgStudentLeave::getLeaveDuration, bo.getLeaveDuration());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getIsLeaveSchool()), XgStudentLeave::getIsLeaveSchool, bo.getIsLeaveSchool());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getNeedCancel()), XgStudentLeave::getNeedCancel, bo.getNeedCancel());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getEmergencyContact()), XgStudentLeave::getEmergencyContact,
|
|
|
|
|
+ bo.getEmergencyContact());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getEmergencyPhone()), XgStudentLeave::getEmergencyPhone,
|
|
|
|
|
+ bo.getEmergencyPhone());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getLeaveReason()), XgStudentLeave::getLeaveReason, bo.getLeaveReason());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getLeaveLocation()), XgStudentLeave::getLeaveLocation, bo.getLeaveLocation());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAttachmentOssIds()), XgStudentLeave::getAttachmentOssIds,
|
|
|
|
|
+ bo.getAttachmentOssIds());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getApprovalStatus()), XgStudentLeave::getApprovalStatus,
|
|
|
|
|
+ bo.getApprovalStatus());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getApprovalOpinion()), XgStudentLeave::getApprovalOpinion,
|
|
|
|
|
+ bo.getApprovalOpinion());
|
|
|
|
|
+ lqw.eq(bo.getApprovalTime() != null, XgStudentLeave::getApprovalTime, bo.getApprovalTime());
|
|
|
|
|
+ lqw.eq(bo.getApprovalBy() != null, XgStudentLeave::getApprovalBy, bo.getApprovalBy());
|
|
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getApprovalByName()), XgStudentLeave::getApprovalByName,
|
|
|
|
|
+ bo.getApprovalByName());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getCancelStatus()), XgStudentLeave::getCancelStatus, bo.getCancelStatus());
|
|
|
|
|
+ lqw.eq(bo.getCancelTime() != null, XgStudentLeave::getCancelTime, bo.getCancelTime());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getCancelLocation()), XgStudentLeave::getCancelLocation,
|
|
|
|
|
+ bo.getCancelLocation());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getCancelPhotoOssIds()), XgStudentLeave::getCancelPhotoOssIds,
|
|
|
|
|
+ bo.getCancelPhotoOssIds());
|
|
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getCancelRemark()), XgStudentLeave::getCancelRemark, bo.getCancelRemark());
|
|
|
|
|
+ return lqw;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private LambdaQueryWrapper<XgStudentLeave> buildQueryWrapper(XgStudentLeaveBo bo) {
|
|
private LambdaQueryWrapper<XgStudentLeave> buildQueryWrapper(XgStudentLeaveBo bo) {
|
|
|
Map<String, Object> params = bo.getParams();
|
|
Map<String, Object> params = bo.getParams();
|
|
|
LambdaQueryWrapper<XgStudentLeave> lqw = Wrappers.lambdaQuery();
|
|
LambdaQueryWrapper<XgStudentLeave> lqw = Wrappers.lambdaQuery();
|