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<ProductionTeamMapper, ProductionTeam> 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<ProductionTeamUserRel> 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<ProductionTeamUserRel> 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<ProductionTeamVo.MemberVo> members = getBaseMapper().selectTeamMembers(id);
|
teamVo.setMembers(members);
|
}
|
return teamVo;
|
}
|
|
@Override
|
public List<ProductionTeamVo> getTeamList(ProductionTeamDto dto) {
|
List<ProductionTeamVo> teamList = getBaseMapper().selectTeamList(dto);
|
// 为每个班组加载成员列表
|
for (ProductionTeamVo teamVo : teamList) {
|
List<ProductionTeamVo.MemberVo> members = getBaseMapper().selectTeamMembers(teamVo.getId());
|
teamVo.setMembers(members);
|
}
|
return teamList;
|
}
|
|
@Override
|
public IPage<ProductionTeamVo> listPage(Page<ProductionTeamDto> page, ProductionTeamDto dto) {
|
IPage<ProductionTeamVo> resultPage = getBaseMapper().selectTeamPage(page, dto);
|
// 为每个班组加载成员列表
|
for (ProductionTeamVo teamVo : resultPage.getRecords()) {
|
List<ProductionTeamVo.MemberVo> members = getBaseMapper().selectTeamMembers(teamVo.getId());
|
teamVo.setMembers(members);
|
}
|
return resultPage;
|
}
|
|
/**
|
* 保存班组用户关系
|
*/
|
private void saveTeamUserRel(Long teamId, Long leaderId, List<Long> 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);
|
}
|
}
|
}
|
}
|