fix(team): 修复删除选手后集体信息未同步更新的问题
- 删除选手时级联删除集体成员关系 - 集体列表动态计算有效成员数(排除已删除选手) - 集体详情过滤已删除的选手
This commit is contained in:
@@ -12,7 +12,9 @@ import org.springblade.modules.martial.mapper.MartialAthleteMapper;
|
|||||||
import org.springblade.modules.martial.pojo.entity.MartialJudgeInvite;
|
import org.springblade.modules.martial.pojo.entity.MartialJudgeInvite;
|
||||||
import org.springblade.modules.martial.pojo.entity.MartialScheduleAthlete;
|
import org.springblade.modules.martial.pojo.entity.MartialScheduleAthlete;
|
||||||
import org.springblade.modules.martial.pojo.entity.MartialScore;
|
import org.springblade.modules.martial.pojo.entity.MartialScore;
|
||||||
|
import org.springblade.modules.martial.pojo.entity.MartialTeamMember;
|
||||||
import org.springblade.modules.martial.pojo.vo.MartialAthleteVO;
|
import org.springblade.modules.martial.pojo.vo.MartialAthleteVO;
|
||||||
|
import org.springblade.modules.martial.mapper.MartialTeamMemberMapper;
|
||||||
import org.springblade.modules.martial.pojo.vo.MiniAthleteAdminVO;
|
import org.springblade.modules.martial.pojo.vo.MiniAthleteAdminVO;
|
||||||
import org.springblade.modules.martial.pojo.vo.MiniAthleteScoreVO;
|
import org.springblade.modules.martial.pojo.vo.MiniAthleteScoreVO;
|
||||||
import org.springblade.modules.martial.service.IMartialAthleteService;
|
import org.springblade.modules.martial.service.IMartialAthleteService;
|
||||||
@@ -24,6 +26,8 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -45,6 +49,9 @@ public class MartialAthleteServiceImpl extends ServiceImpl<MartialAthleteMapper,
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IMartialJudgeInviteService judgeInviteService;
|
private IMartialJudgeInviteService judgeInviteService;
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MartialTeamMemberMapper teamMemberMapper;
|
||||||
/**
|
/**
|
||||||
* 分页查询参赛选手(包含关联字段)
|
* 分页查询参赛选手(包含关联字段)
|
||||||
*
|
*
|
||||||
@@ -57,6 +64,24 @@ public class MartialAthleteServiceImpl extends ServiceImpl<MartialAthleteMapper,
|
|||||||
return baseMapper.selectAthleteVOPage(page, athlete);
|
return baseMapper.selectAthleteVOPage(page, athlete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override removeByIds to cascade delete team member relations
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean removeByIds(Collection<?> idList) {
|
||||||
|
if (idList != null && !idList.isEmpty()) {
|
||||||
|
// Delete team member relations for these athletes
|
||||||
|
for (Object id : idList) {
|
||||||
|
LambdaQueryWrapper<MartialTeamMember> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(MartialTeamMember::getAthleteId, id);
|
||||||
|
teamMemberMapper.delete(wrapper);
|
||||||
|
log.info("Deleted team member relations for athlete: {}", id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.removeByIds(idList);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Task 2.1: 运动员签到检录
|
* Task 2.1: 运动员签到检录
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ public class MartialTeamServiceImpl extends ServiceImpl<MartialTeamMapper, Marti
|
|||||||
.map(team -> {
|
.map(team -> {
|
||||||
MartialTeamVO vo = new MartialTeamVO();
|
MartialTeamVO vo = new MartialTeamVO();
|
||||||
BeanUtils.copyProperties(team, vo);
|
BeanUtils.copyProperties(team, vo);
|
||||||
|
// Calculate actual member count (excluding deleted athletes)
|
||||||
|
int actualMemberCount = getActualMemberCount(team.getId());
|
||||||
|
vo.setMemberCount(actualMemberCount);
|
||||||
return vo;
|
return vo;
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@@ -81,6 +84,29 @@ public class MartialTeamServiceImpl extends ServiceImpl<MartialTeamMapper, Marti
|
|||||||
return voPage;
|
return voPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get actual member count excluding deleted athletes
|
||||||
|
*/
|
||||||
|
private int getActualMemberCount(Long teamId) {
|
||||||
|
LambdaQueryWrapper<MartialTeamMember> memberWrapper = new LambdaQueryWrapper<>();
|
||||||
|
memberWrapper.eq(MartialTeamMember::getTeamId, teamId);
|
||||||
|
memberWrapper.eq(MartialTeamMember::getIsDeleted, 0);
|
||||||
|
List<MartialTeamMember> members = teamMemberMapper.selectList(memberWrapper);
|
||||||
|
|
||||||
|
if (members.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Long> athleteIds = members.stream()
|
||||||
|
.map(MartialTeamMember::getAthleteId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
LambdaQueryWrapper<MartialAthlete> athleteWrapper = new LambdaQueryWrapper<>();
|
||||||
|
athleteWrapper.in(MartialAthlete::getId, athleteIds);
|
||||||
|
athleteWrapper.eq(MartialAthlete::getIsDeleted, 0);
|
||||||
|
return (int) athleteService.count(athleteWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MartialTeamVO getTeamDetail(Long id) {
|
public MartialTeamVO getTeamDetail(Long id) {
|
||||||
MartialTeam team = this.getById(id);
|
MartialTeam team = this.getById(id);
|
||||||
@@ -102,7 +128,10 @@ public class MartialTeamServiceImpl extends ServiceImpl<MartialTeamMapper, Marti
|
|||||||
.map(MartialTeamMember::getAthleteId)
|
.map(MartialTeamMember::getAthleteId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
List<MartialAthlete> athletes = athleteService.listByIds(athleteIds);
|
LambdaQueryWrapper<MartialAthlete> athleteWrapper = new LambdaQueryWrapper<>();
|
||||||
|
athleteWrapper.in(MartialAthlete::getId, athleteIds);
|
||||||
|
athleteWrapper.eq(MartialAthlete::getIsDeleted, 0);
|
||||||
|
List<MartialAthlete> athletes = athleteService.list(athleteWrapper);
|
||||||
Map<Long, MartialAthlete> athleteMap = athletes.stream()
|
Map<Long, MartialAthlete> athleteMap = athletes.stream()
|
||||||
.collect(Collectors.toMap(MartialAthlete::getId, a -> a));
|
.collect(Collectors.toMap(MartialAthlete::getId, a -> a));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user