Files
hzdyjs/ZsjyEnrollmentProcessServiceImpl-fixed.java
T
2025-07-23 15:20:48 +08:00

238 lines
9.7 KiB
Java

package org.dromara.zsjy.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.zsjy.domain.ZsjyEnrollmentProcess;
import org.dromara.zsjy.domain.bo.ZsjyEnrollmentProcessBo;
import org.dromara.zsjy.domain.vo.ZsjyEnrollmentProcessVo;
import org.dromara.zsjy.mapper.ZsjyEnrollmentProcessMapper;
import org.dromara.zsjy.service.IZsjyEnrollmentProcessService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
/**
* 招生录取流程状态Service实现类
* 修复版本 - 添加了基于用户角色的数据过滤逻辑
*
* @author Cursor AI
* @date 2025-07-21
*/
@Service
@RequiredArgsConstructor
public class ZsjyEnrollmentProcessServiceImpl implements IZsjyEnrollmentProcessService {
private final ZsjyEnrollmentProcessMapper baseMapper;
/**
* 查询招生录取流程状态
*
* @param id 招生录取流程状态主键
* @return 招生录取流程状态
*/
@Override
public ZsjyEnrollmentProcessVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
/**
* 构建查询条件
*/
private LambdaQueryWrapper<ZsjyEnrollmentProcess> buildQueryWrapper(ZsjyEnrollmentProcessBo bo) {
LambdaQueryWrapper<ZsjyEnrollmentProcess> lqw = new LambdaQueryWrapper<>();
lqw.eq(bo.getEnrollmentId() != null, ZsjyEnrollmentProcess::getEnrollmentId, bo.getEnrollmentId());
lqw.like(StringUtils.isNotBlank(bo.getStudentName()), ZsjyEnrollmentProcess::getStudentName, bo.getStudentName());
lqw.like(StringUtils.isNotBlank(bo.getIdCard()), ZsjyEnrollmentProcess::getIdCard, bo.getIdCard());
lqw.eq(StringUtils.isNotBlank(bo.getCurrentStatus()), ZsjyEnrollmentProcess::getCurrentStatus, bo.getCurrentStatus());
lqw.eq(bo.getCurrentHandler() != null, ZsjyEnrollmentProcess::getCurrentHandler, bo.getCurrentHandler());
lqw.eq(StringUtils.isNotBlank(bo.getInfoAuditStatus()), ZsjyEnrollmentProcess::getInfoAuditStatus, bo.getInfoAuditStatus());
lqw.eq(StringUtils.isNotBlank(bo.getAdmissionStatus()), ZsjyEnrollmentProcess::getAdmissionStatus, bo.getAdmissionStatus());
lqw.eq(StringUtils.isNotBlank(bo.getFinalAuditStatus()), ZsjyEnrollmentProcess::getFinalAuditStatus, bo.getFinalAuditStatus());
lqw.eq(bo.getIsCompleted() != null, ZsjyEnrollmentProcess::getIsCompleted, bo.getIsCompleted());
return lqw;
}
/**
* 分页查询招生录取流程状态列表
* 修复:添加基于用户角色的数据过滤逻辑
*
* @param bo 招生录取流程状态查询条件
* @param pageQuery 分页查询参数
* @return 招生录取流程状态分页列表
*/
@Override
public TableDataInfo<ZsjyEnrollmentProcessVo> queryPageList(ZsjyEnrollmentProcessBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsjyEnrollmentProcess> lqw = buildQueryWrapper(bo);
// 获取当前用户ID和角色
Long userId = LoginHelper.getUserId();
List<String> roles = LoginHelper.getRolePermission();
// 根据角色过滤数据
if (roles.contains("zsjy_info_auditor")) {
// 信息审核员只能看到状态为0和1的数据
lqw.in(ZsjyEnrollmentProcess::getCurrentStatus, "0", "1");
} else if (roles.contains("zsjy_admission_processor")) {
// 录取处理员只能看到状态为2的数据
lqw.eq(ZsjyEnrollmentProcess::getCurrentStatus, "2");
} else if (!roles.contains("admin") && !roles.contains("superadmin")) {
// 非管理员且非特定角色,只能看到自己处理的数据
lqw.eq(ZsjyEnrollmentProcess::getCurrentHandler, userId);
}
Page<ZsjyEnrollmentProcessVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的招生录取流程状态列表
*
* @param bo 招生录取流程状态查询条件
* @return 招生录取流程状态列表
*/
@Override
public List<ZsjyEnrollmentProcessVo> queryList(ZsjyEnrollmentProcessBo bo) {
LambdaQueryWrapper<ZsjyEnrollmentProcess> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
/**
* 查询当前用户的待处理流程列表
* 修复:添加基于用户角色的数据过滤逻辑
*
* @param bo 招生录取流程状态查询条件
* @param pageQuery 分页查询参数
* @return 待处理的招生录取流程状态分页列表
*/
@Override
public TableDataInfo<ZsjyEnrollmentProcessVo> queryPendingList(ZsjyEnrollmentProcessBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsjyEnrollmentProcess> lqw = buildQueryWrapper(bo);
// 获取当前用户ID和角色
Long userId = LoginHelper.getUserId();
List<String> roles = LoginHelper.getRolePermission();
// 根据角色过滤待处理数据
if (roles.contains("zsjy_info_auditor")) {
// 信息审核员只能看到状态为0和1的待处理数据
lqw.and(wrapper -> wrapper
.eq(ZsjyEnrollmentProcess::getCurrentHandler, userId)
.or(subWrapper -> subWrapper
.isNull(ZsjyEnrollmentProcess::getCurrentHandler)
.in(ZsjyEnrollmentProcess::getCurrentStatus, "0", "1")
)
);
} else if (roles.contains("zsjy_admission_processor")) {
// 录取处理员只能看到状态为2的待处理数据
lqw.and(wrapper -> wrapper
.eq(ZsjyEnrollmentProcess::getCurrentHandler, userId)
.or(subWrapper -> subWrapper
.isNull(ZsjyEnrollmentProcess::getCurrentHandler)
.eq(ZsjyEnrollmentProcess::getCurrentStatus, "2")
)
);
} else if (roles.contains("admin") || roles.contains("superadmin")) {
// 管理员可以看到所有待处理数据
// 不添加额外过滤条件
} else {
// 其他用户只能看到分配给自己的数据
lqw.eq(ZsjyEnrollmentProcess::getCurrentHandler, userId);
}
// 排除已完成和已驳回的流程
lqw.notIn(ZsjyEnrollmentProcess::getCurrentStatus, "4", "9");
Page<ZsjyEnrollmentProcessVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 根据报名信息ID查询流程状态
*
* @param enrollmentId 报名信息ID
* @return 招生录取流程状态
*/
@Override
public ZsjyEnrollmentProcessVo queryByEnrollmentId(Long enrollmentId) {
LambdaQueryWrapper<ZsjyEnrollmentProcess> lqw = new LambdaQueryWrapper<>();
lqw.eq(ZsjyEnrollmentProcess::getEnrollmentId, enrollmentId);
return baseMapper.selectVoOne(lqw);
}
/**
* 新增招生录取流程状态
*
* @param bo 招生录取流程状态
* @return 结果
*/
@Override
public Boolean insertByBo(ZsjyEnrollmentProcessBo bo) {
ZsjyEnrollmentProcess add = MapstructUtils.convert(bo, ZsjyEnrollmentProcess.class);
// 设置初始状态为待审核
if (StringUtils.isEmpty(add.getCurrentStatus())) {
add.setCurrentStatus("0");
}
// 设置信息审核状态为待审核
if (StringUtils.isEmpty(add.getInfoAuditStatus())) {
add.setInfoAuditStatus("0");
}
// 设置录取处理状态为待处理
if (StringUtils.isEmpty(add.getAdmissionStatus())) {
add.setAdmissionStatus("0");
}
// 设置最终审核状态为待确认
if (StringUtils.isEmpty(add.getFinalAuditStatus())) {
add.setFinalAuditStatus("0");
}
// 设置缴费状态为未缴费
if (StringUtils.isEmpty(add.getPaymentStatus())) {
add.setPaymentStatus("0");
}
// 设置完成状态为未完成
if (add.getIsCompleted() == null) {
add.setIsCompleted(0);
}
// 分配处理人(根据角色分配)
if (add.getCurrentHandler() == null) {
// 这里应该根据实际业务逻辑分配处理人
// 例如:从信息审核员角色中选择一个用户作为处理人
}
return baseMapper.insert(add) > 0;
}
/**
* 修改招生录取流程状态
*
* @param bo 招生录取流程状态
* @return 结果
*/
@Override
public Boolean updateByBo(ZsjyEnrollmentProcessBo bo) {
ZsjyEnrollmentProcess update = MapstructUtils.convert(bo, ZsjyEnrollmentProcess.class);
return baseMapper.updateById(update) > 0;
}
/**
* 校验并批量删除招生录取流程状态信息
*
* @param ids 需要删除的招生录取流程状态主键集合
* @param isValid 是否校验,true-删除前校验,false-不校验
* @return 结果
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
// 进行校验,例如检查是否有已完成的流程不允许删除等
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}