package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.system.mapper.TTrainLibraryMapper; import com.ruoyi.system.model.TProjectTeam; import com.ruoyi.system.model.TTrainLibrary; import com.ruoyi.system.query.TTrainLibraryDetailQuery; import com.ruoyi.system.query.TTrainLibraryQuery; import com.ruoyi.system.service.TProjectTeamService; import com.ruoyi.system.service.TTrainLibraryService; import com.ruoyi.system.vo.TTrainLibraryDetailVO; import com.ruoyi.system.vo.TTrainLibraryVO; import com.ruoyi.system.vo.TTrainLibraryWarehousingVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** *

* 菌种库 服务实现类 *

* * @author 无关风月 * @since 2025-04-12 */ @Service public class TTrainLibraryServiceImpl extends ServiceImpl implements TTrainLibraryService { @Resource private TProjectTeamService projectTeamService; @Override public PageInfo pageList(TTrainLibraryQuery query, String roleType) { // 1. 查询所有符合条件的数据(不分页) List allList = this.baseMapper.listAll(query); // 2. 在内存中过滤 + 补充 projectName List filteredList = new ArrayList<>(); for (TTrainLibraryVO vo : allList) { if (StringUtils.isNotEmpty(vo.getProjectId())) { TProjectTeam byId = projectTeamService.getById(vo.getProjectId()); // 未封存的数据:roleType=2 或 status=1 if (byId != null && ("2".equals(roleType) || byId.getStatus() == 1)) { vo.setProjectName(byId.getTeamName()); filteredList.add(vo); } } } // 3. 手动分页(在内存中截取) int total = filteredList.size(); int pageNum = query.getPageNum(); int pageSize = query.getPageSize(); int start = (pageNum - 1) * pageSize; int end = Math.min(start + pageSize, total); // 处理边界情况 List pageList = new ArrayList<>(); if (start < total) { pageList = filteredList.subList(start, end); } // 4. 构建 PageInfo 返回 PageInfo pageInfo = new PageInfo<>(); pageInfo.setRecords(pageList); pageInfo.setTotal(total); pageInfo.setPages((int) Math.ceil((double) total / pageSize)); pageInfo.setHasNextPage(pageNum < (int) Math.ceil((double) total / pageSize)); return pageInfo; } @Override public TTrainLibraryDetailVO getDetailById(TTrainLibraryDetailQuery query) { TTrainLibraryDetailVO tTrainLibraryDetailVO = new TTrainLibraryDetailVO(); TTrainLibrary tTrainLibrary = this.baseMapper.selectById(query.getId()); BeanUtils.copyProperties(tTrainLibrary,tTrainLibraryDetailVO); PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.getDetailById(query,pageInfo); pageInfo.setRecords(list); tTrainLibraryDetailVO.setWarehousingList(pageInfo); return tTrainLibraryDetailVO; } }