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 buildQueryWrapper(ZsjyEnrollmentProcessBo bo) { LambdaQueryWrapper 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 queryPageList(ZsjyEnrollmentProcessBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); // 获取当前用户ID和角色 Long userId = LoginHelper.getUserId(); List 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 result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } /** * 查询符合条件的招生录取流程状态列表 * * @param bo 招生录取流程状态查询条件 * @return 招生录取流程状态列表 */ @Override public List queryList(ZsjyEnrollmentProcessBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } /** * 查询当前用户的待处理流程列表 * 修复:添加基于用户角色的数据过滤逻辑 * * @param bo 招生录取流程状态查询条件 * @param pageQuery 分页查询参数 * @return 待处理的招生录取流程状态分页列表 */ @Override public TableDataInfo queryPendingList(ZsjyEnrollmentProcessBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); // 获取当前用户ID和角色 Long userId = LoginHelper.getUserId(); List 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 result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } /** * 根据报名信息ID查询流程状态 * * @param enrollmentId 报名信息ID * @return 招生录取流程状态 */ @Override public ZsjyEnrollmentProcessVo queryByEnrollmentId(Long enrollmentId) { LambdaQueryWrapper 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 ids, Boolean isValid) { if (isValid) { // 进行校验,例如检查是否有已完成的流程不允许删除等 } return baseMapper.deleteBatchIds(ids) > 0; } }