|
@@ -1,7 +1,6 @@
|
|
|
package org.dromara.system.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
@@ -14,17 +13,21 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.dromara.common.redis.utils.RedisUtils;
|
|
|
-import org.dromara.system.domain.GameAthlete;
|
|
|
import org.dromara.system.domain.GameEvent;
|
|
|
-import org.dromara.system.domain.bo.GameEventBo;
|
|
|
+import org.dromara.system.domain.bo.GameAthleteBo;
|
|
|
import org.dromara.system.domain.constant.GameEventConstant;
|
|
|
-import org.dromara.system.domain.vo.GameEventVo;
|
|
|
import org.dromara.system.domain.vo.SysDictDataVo;
|
|
|
+import org.dromara.system.mapper.GameAthleteMapper;
|
|
|
import org.dromara.system.mapper.GameEventMapper;
|
|
|
-import org.dromara.system.service.IGameEventService;
|
|
|
+import org.dromara.system.mapper.GameRefereeMapper;
|
|
|
+import org.dromara.system.service.IGameAthleteService;
|
|
|
+import org.dromara.system.service.IGameRefereeService;
|
|
|
import org.dromara.system.service.ISysDictTypeService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.dromara.system.domain.bo.GameEventProjectBo;
|
|
|
+import org.dromara.system.domain.bo.GameRefereeBo;
|
|
|
import org.dromara.system.domain.vo.GameEventProjectVo;
|
|
|
import org.dromara.system.domain.GameEventProject;
|
|
|
import org.dromara.system.mapper.GameEventProjectMapper;
|
|
@@ -33,7 +36,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
-import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* 赛事项目Service业务层处理
|
|
@@ -42,7 +44,7 @@ import java.util.stream.Stream;
|
|
|
* @date 2025-07-30
|
|
|
*/
|
|
|
@Slf4j
|
|
|
-@RequiredArgsConstructor
|
|
|
+//@RequiredArgsConstructor
|
|
|
@Service
|
|
|
public class GameEventProjectServiceImpl implements IGameEventProjectService {
|
|
|
|
|
@@ -50,6 +52,20 @@ public class GameEventProjectServiceImpl implements IGameEventProjectService {
|
|
|
private final GameEventMapper gameEventMapper;
|
|
|
private final ISysDictTypeService sysDictTypeService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ @Lazy
|
|
|
+ private IGameRefereeService gameRefereeService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Lazy
|
|
|
+ private IGameAthleteService gameAthleteService;
|
|
|
+
|
|
|
+ public GameEventProjectServiceImpl(GameEventProjectMapper baseMapper, GameEventMapper gameEventMapper, ISysDictTypeService sysDictTypeService) {
|
|
|
+ this.baseMapper = baseMapper;
|
|
|
+ this.gameEventMapper = gameEventMapper;
|
|
|
+ this.sysDictTypeService = sysDictTypeService;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询赛事项目
|
|
|
*
|
|
@@ -59,7 +75,14 @@ public class GameEventProjectServiceImpl implements IGameEventProjectService {
|
|
|
@Override
|
|
|
public GameEventProjectVo queryById(Long projectId) {
|
|
|
GameEventProjectVo vo = baseMapper.selectVoById(projectId);
|
|
|
- vo.setRefereeGroups(JSONUtil.toList(vo.getRefereeGroup(), Long.class));
|
|
|
+ if (vo == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (vo.getRefereeGroup() != null && !"".equals(vo.getRefereeGroup())){
|
|
|
+ vo.setRefereeGroups(JSONUtil.toList(vo.getRefereeGroup(), Long.class));
|
|
|
+ }else{
|
|
|
+ vo.setRefereeGroups(new ArrayList<>());
|
|
|
+ }
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
@@ -348,10 +371,74 @@ public class GameEventProjectServiceImpl implements IGameEventProjectService {
|
|
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
if (isValid) {
|
|
|
//TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+
|
|
|
}
|
|
|
+ //删除项目前批量删除裁判的关联信息
|
|
|
+ removeProjectFromReferees(ids);
|
|
|
+ //删除项目前批量删除运动员的关联信息
|
|
|
+ removeProjectFromAthletes(ids);
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 从所有运动员的项目列表中移除指定项目
|
|
|
+ *
|
|
|
+ * @param projectIds 要移除的项目ID列表
|
|
|
+ */
|
|
|
+ private void removeProjectFromAthletes(Collection<Long> projectIds) {
|
|
|
+ try {
|
|
|
+ if (CollectionUtils.isEmpty(projectIds)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询所有包含这些项目的运动员
|
|
|
+ List<GameAthleteBo> athletes = gameAthleteService.findByProjectIds(projectIds);
|
|
|
+
|
|
|
+ log.info("找到 {} 名运动员需要更新项目关联,项目ID列表: {}", athletes.size(), projectIds);
|
|
|
+
|
|
|
+ for (GameAthleteBo athlete : athletes) {
|
|
|
+ for (Long projectId : projectIds){
|
|
|
+ if (athlete.getProjectList() != null) {
|
|
|
+ athlete.getProjectList().remove(projectId);
|
|
|
+ log.info("已从运动员 {} 的项目列表中移除项目 {}", athlete.getName(), projectId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ gameAthleteService.updateByBo(athlete);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("运动员项目关联清理完成,共处理 {} 名运动员", athletes.size());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("清理运动员项目关联失败,项目ID列表: {}", projectIds, e);
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从所有裁判的项目列表中移除指定项目
|
|
|
+ *
|
|
|
+ * @param ids 要移除的项目ID集合
|
|
|
+ */
|
|
|
+ private void removeProjectFromReferees(Collection<Long> ids) {
|
|
|
+ try {
|
|
|
+ // 查询所有包含该项目的裁判
|
|
|
+ List<GameRefereeBo> referees = gameRefereeService.findByProjectIds(ids);
|
|
|
+
|
|
|
+ for (GameRefereeBo referee : referees) {
|
|
|
+ for (Long projectId : ids) {
|
|
|
+ if (referee.getProjectList2() != null) {
|
|
|
+ // 从项目列表中移除该项目
|
|
|
+ referee.getProjectList2().remove(projectId);
|
|
|
+ log.info("已从裁判 {} 的项目列表中移除项目 {}", referee.getName(), projectId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ gameRefereeService.updateByBo(referee);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("从裁判项目列表中移除项目失败,项目ID: {}", ids, e);
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<GameEventProjectVo> listProjectsByEventIdAndProjectIndex(Long eventId, List<Long> projectIds) {
|
|
|
if (CollectionUtils.isEmpty(projectIds)) {
|