package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.bean.dto.ProductionTeamDto; import com.ruoyi.production.bean.vo.ProductionTeamVo; import com.ruoyi.production.mapper.ProductionTeamMapper; import com.ruoyi.production.pojo.ProductionTeam; import com.ruoyi.production.pojo.ProductionTeamUserRel; import com.ruoyi.production.service.ProductionTeamService; import com.ruoyi.production.service.ProductionTeamUserRelService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.List; @Service @RequiredArgsConstructor public class ProductionTeamServiceImpl extends ServiceImpl implements ProductionTeamService { private final ProductionTeamUserRelService teamUserRelService; @Override @Transactional(rollbackFor = Exception.class) public boolean createTeam(ProductionTeamDto dto) { // 创建班组 ProductionTeam team = new ProductionTeam(); team.setTeamName(dto.getTeamName()); team.setRemark(dto.getRemark()); this.save(team); // 保存成员关系 saveTeamUserRel(team.getId(), dto.getLeaderId(), dto.getMemberIds()); return true; } @Override @Transactional(rollbackFor = Exception.class) public boolean updateTeam(ProductionTeamDto dto) { // 更新班组 ProductionTeam team = new ProductionTeam(); team.setId(dto.getId()); team.setTeamName(dto.getTeamName()); team.setRemark(dto.getRemark()); this.updateById(team); // 删除原有成员关系 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("production_team_id", dto.getId()); teamUserRelService.remove(wrapper); // 保存新的成员关系 saveTeamUserRel(dto.getId(), dto.getLeaderId(), dto.getMemberIds()); return true; } @Override @Transactional(rollbackFor = Exception.class) public boolean deleteTeam(Long id) { // 删除成员关系 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("production_team_id", id); teamUserRelService.remove(wrapper); // 删除班组 return this.removeById(id); } @Override public ProductionTeamVo getTeamDetail(Long id) { ProductionTeamVo teamVo = getBaseMapper().selectTeamDetail(id); if (teamVo != null) { // 加载成员列表 List members = getBaseMapper().selectTeamMembers(id); teamVo.setMembers(members); } return teamVo; } @Override public List getTeamList(ProductionTeamDto dto) { List teamList = getBaseMapper().selectTeamList(dto); // 为每个班组加载成员列表 for (ProductionTeamVo teamVo : teamList) { List members = getBaseMapper().selectTeamMembers(teamVo.getId()); teamVo.setMembers(members); } return teamList; } @Override public IPage listPage(Page page, ProductionTeamDto dto) { IPage resultPage = getBaseMapper().selectTeamPage(page, dto); // 为每个班组加载成员列表 for (ProductionTeamVo teamVo : resultPage.getRecords()) { List members = getBaseMapper().selectTeamMembers(teamVo.getId()); teamVo.setMembers(members); } return resultPage; } /** * 保存班组用户关系 */ private void saveTeamUserRel(Long teamId, Long leaderId, List memberIds) { // 保存班组长 if (leaderId != null) { ProductionTeamUserRel leaderRel = new ProductionTeamUserRel(); leaderRel.setProductionTeamId(teamId); leaderRel.setSysUserId(leaderId); leaderRel.setIsLeader((byte) 1); teamUserRelService.save(leaderRel); } // 保存成员 if (!CollectionUtils.isEmpty(memberIds)) { for (Long memberId : memberIds) { // 跳过班组长(已保存) if (leaderId != null && leaderId.equals(memberId)) { continue; } ProductionTeamUserRel memberRel = new ProductionTeamUserRel(); memberRel.setProductionTeamId(teamId); memberRel.setSysUserId(memberId); memberRel.setIsLeader((byte) 0); teamUserRelService.save(memberRel); } } } }