|
@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.dromara.common.redis.utils.RedisUtils;
|
|
import org.dromara.common.redis.utils.RedisUtils;
|
|
|
|
+import org.dromara.system.domain.GameEventProject;
|
|
import org.dromara.system.domain.constant.GameEventConstant;
|
|
import org.dromara.system.domain.constant.GameEventConstant;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -19,10 +20,17 @@ import org.dromara.system.domain.vo.GameRefereeVo;
|
|
import org.dromara.system.domain.GameReferee;
|
|
import org.dromara.system.domain.GameReferee;
|
|
import org.dromara.system.mapper.GameRefereeMapper;
|
|
import org.dromara.system.mapper.GameRefereeMapper;
|
|
import org.dromara.system.service.IGameRefereeService;
|
|
import org.dromara.system.service.IGameRefereeService;
|
|
|
|
+import org.dromara.system.service.IGameEventProjectService;
|
|
|
|
+import org.dromara.system.domain.vo.GameEventProjectVo;
|
|
|
|
+import org.dromara.system.domain.bo.GameEventProjectBo;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 裁判Service业务层处理
|
|
* 裁判Service业务层处理
|
|
@@ -35,7 +43,8 @@ import java.util.Collection;
|
|
@Service
|
|
@Service
|
|
public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
|
|
|
|
- private final GameRefereeMapper baseMapper;
|
|
|
|
|
|
+ private final GameRefereeMapper gameRefereeMapper;
|
|
|
|
+ private final IGameEventProjectService gameEventProjectService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询裁判
|
|
* 查询裁判
|
|
@@ -45,9 +54,9 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public GameRefereeVo queryById(Long refereeId){
|
|
public GameRefereeVo queryById(Long refereeId){
|
|
- GameRefereeVo vo = baseMapper.selectVoById(refereeId);
|
|
|
|
|
|
+ GameRefereeVo vo = gameRefereeMapper.selectVoById(refereeId);
|
|
if (vo.getProjectList() != null) {
|
|
if (vo.getProjectList() != null) {
|
|
- vo.setProjectList2(JSONUtil.toList(vo.getProjectList(), String.class));
|
|
|
|
|
|
+ vo.setProjectList2(JSONUtil.toList(vo.getProjectList(), Long.class));
|
|
}
|
|
}
|
|
return vo;
|
|
return vo;
|
|
}
|
|
}
|
|
@@ -70,10 +79,10 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
LambdaQueryWrapper<GameReferee> lqw = buildQueryWrapper(bo);
|
|
LambdaQueryWrapper<GameReferee> lqw = buildQueryWrapper(bo);
|
|
- Page<GameRefereeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
|
|
+ Page<GameRefereeVo> result = gameRefereeMapper.selectVoPage(pageQuery.build(), lqw);
|
|
result.getRecords().forEach(vo -> {
|
|
result.getRecords().forEach(vo -> {
|
|
if (vo.getProjectList() != null) {
|
|
if (vo.getProjectList() != null) {
|
|
- vo.setProjectList2(JSONUtil.toList(vo.getProjectList(), String.class));
|
|
|
|
|
|
+ vo.setProjectList2(JSONUtil.toList(vo.getProjectList(), Long.class));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
return TableDataInfo.build(result);
|
|
return TableDataInfo.build(result);
|
|
@@ -96,10 +105,10 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
LambdaQueryWrapper<GameReferee> lqw = buildQueryWrapper(bo);
|
|
LambdaQueryWrapper<GameReferee> lqw = buildQueryWrapper(bo);
|
|
- List<GameRefereeVo> list = baseMapper.selectVoList(lqw);
|
|
|
|
|
|
+ List<GameRefereeVo> list = gameRefereeMapper.selectVoList(lqw);
|
|
list.forEach(vo -> {
|
|
list.forEach(vo -> {
|
|
if (vo.getProjectList() != null) {
|
|
if (vo.getProjectList() != null) {
|
|
- vo.setProjectList2(JSONUtil.toList(vo.getProjectList(), String.class));
|
|
|
|
|
|
+ vo.setProjectList2(JSONUtil.toList(vo.getProjectList(), Long.class));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
return list;
|
|
return list;
|
|
@@ -122,6 +131,7 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
* @return 是否新增成功
|
|
* @return 是否新增成功
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
public Boolean insertByBo(GameRefereeBo bo) {
|
|
public Boolean insertByBo(GameRefereeBo bo) {
|
|
if (bo.getEventId() == null) {
|
|
if (bo.getEventId() == null) {
|
|
Object cacheObject = RedisUtils.getCacheObject(GameEventConstant.DEFAULT_EVENT_ID);
|
|
Object cacheObject = RedisUtils.getCacheObject(GameEventConstant.DEFAULT_EVENT_ID);
|
|
@@ -136,9 +146,15 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
}
|
|
}
|
|
GameReferee add = MapstructUtils.convert(bo, GameReferee.class);
|
|
GameReferee add = MapstructUtils.convert(bo, GameReferee.class);
|
|
validEntityBeforeSave(add);
|
|
validEntityBeforeSave(add);
|
|
- boolean flag = baseMapper.insert(add) > 0;
|
|
|
|
|
|
+ boolean flag = gameRefereeMapper.insert(add) > 0;
|
|
if (flag) {
|
|
if (flag) {
|
|
- bo.setRefereeId(add.getRefereeId());
|
|
|
|
|
|
+ if (add != null) {
|
|
|
|
+ bo.setRefereeId(add.getRefereeId());
|
|
|
|
+ }else{
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ // 更新项目表中的裁判组关联
|
|
|
|
+ updateProjectRefereeGroups(add.getRefereeId(), bo.getProjectList2(), new ArrayList<>());
|
|
}
|
|
}
|
|
return flag;
|
|
return flag;
|
|
}
|
|
}
|
|
@@ -150,6 +166,7 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
* @return 是否修改成功
|
|
* @return 是否修改成功
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
public Boolean updateByBo(GameRefereeBo bo) {
|
|
public Boolean updateByBo(GameRefereeBo bo) {
|
|
if (bo.getEventId() == null) {
|
|
if (bo.getEventId() == null) {
|
|
Object cacheObject = RedisUtils.getCacheObject(GameEventConstant.DEFAULT_EVENT_ID);
|
|
Object cacheObject = RedisUtils.getCacheObject(GameEventConstant.DEFAULT_EVENT_ID);
|
|
@@ -159,12 +176,118 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
bo.setEventId((Long) cacheObject);
|
|
bo.setEventId((Long) cacheObject);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // 获取原始裁判信息
|
|
|
|
+ GameRefereeVo originalReferee = queryById(bo.getRefereeId());
|
|
|
|
+ List<Long> originalProjectList = originalReferee.getProjectList2() != null ?
|
|
|
|
+ originalReferee.getProjectList2() : new ArrayList<>();
|
|
|
|
+
|
|
if (bo.getProjectList2() != null) {
|
|
if (bo.getProjectList2() != null) {
|
|
bo.setProjectList(JSONUtil.toJsonStr(bo.getProjectList2()));
|
|
bo.setProjectList(JSONUtil.toJsonStr(bo.getProjectList2()));
|
|
}
|
|
}
|
|
|
|
+
|
|
GameReferee update = MapstructUtils.convert(bo, GameReferee.class);
|
|
GameReferee update = MapstructUtils.convert(bo, GameReferee.class);
|
|
validEntityBeforeSave(update);
|
|
validEntityBeforeSave(update);
|
|
- return baseMapper.updateById(update) > 0;
|
|
|
|
|
|
+ boolean flag = gameRefereeMapper.updateById(update) > 0;
|
|
|
|
+
|
|
|
|
+ if (flag) {
|
|
|
|
+ // 更新项目表中的裁判组关联
|
|
|
|
+ List<Long> newProjectList = bo.getProjectList2() != null ? bo.getProjectList2() : new ArrayList<>();
|
|
|
|
+ updateProjectRefereeGroups(bo.getRefereeId(), newProjectList, originalProjectList);
|
|
|
|
+ }
|
|
|
|
+ return flag;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 更新项目表中的裁判组关联
|
|
|
|
+ *
|
|
|
|
+ * @param refereeId 裁判ID
|
|
|
|
+ * @param newProjectList 新的项目列表
|
|
|
|
+ * @param originalProjectList 原始项目列表
|
|
|
|
+ */
|
|
|
|
+ private void updateProjectRefereeGroups(Long refereeId, List<Long> newProjectList, List<Long> originalProjectList) {
|
|
|
|
+ try {
|
|
|
|
+// String refereeIdStr = String.valueOf(refereeId);
|
|
|
|
+
|
|
|
|
+ // 找出需要移除的项目(在原列表中但不在新列表中)
|
|
|
|
+ List<Long> removedProjects = originalProjectList.stream()
|
|
|
|
+ .filter(projectId -> !newProjectList.contains(projectId))
|
|
|
|
+ .toList();
|
|
|
|
+
|
|
|
|
+ // 找出需要添加的项目(在新列表中但不在原列表中)
|
|
|
|
+ List<Long> addedProjects = newProjectList.stream()
|
|
|
|
+ .filter(projectId -> !originalProjectList.contains(projectId))
|
|
|
|
+ .toList();
|
|
|
|
+
|
|
|
|
+ // 从移除的项目中删除该裁判
|
|
|
|
+ for (Long projectId : removedProjects) {
|
|
|
|
+ removeRefereeFromProject(projectId, refereeId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 向添加的项目中添加该裁判
|
|
|
|
+ for (Long projectId : addedProjects) {
|
|
|
|
+ addRefereeToProject(projectId, refereeId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("更新项目裁判组关联失败: refereeId={}, newProjectList={}, originalProjectList={}",
|
|
|
|
+ refereeId, newProjectList, originalProjectList, e);
|
|
|
|
+ throw e;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 从项目中移除裁判
|
|
|
|
+ *
|
|
|
|
+ * @param projectId 项目ID
|
|
|
|
+ * @param refereeId 裁判ID
|
|
|
|
+ */
|
|
|
|
+ private void removeRefereeFromProject(Long projectId, Long refereeId) {
|
|
|
|
+ try {
|
|
|
|
+ GameEventProjectVo vo = gameEventProjectService.queryById(projectId);
|
|
|
|
+ if (vo != null && vo.getRefereeGroups() != null) {
|
|
|
|
+ List<Long> refereeGroups = new ArrayList<>(vo.getRefereeGroups());
|
|
|
|
+ refereeGroups.remove(refereeId);
|
|
|
|
+
|
|
|
|
+ GameEventProject project = MapstructUtils.convert(vo, GameEventProject.class);
|
|
|
|
+
|
|
|
|
+ GameEventProjectBo projectBo = MapstructUtils.convert(project, GameEventProjectBo.class);
|
|
|
|
+// GameEventProjectBo projectBo = ObjectUtils.copy(vo, GameEventProjectBo.class);
|
|
|
|
+ projectBo.setRefereeGroups(refereeGroups);
|
|
|
|
+ gameEventProjectService.updateByBo(projectBo);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("从项目中移除裁判失败: projectId={}, refereeId={}", projectId, refereeId, e);
|
|
|
|
+ throw e;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 向项目中添加裁判
|
|
|
|
+ *
|
|
|
|
+ * @param projectId 项目ID
|
|
|
|
+ * @param refereeId 裁判ID
|
|
|
|
+ */
|
|
|
|
+ private void addRefereeToProject(Long projectId, Long refereeId) {
|
|
|
|
+ try {
|
|
|
|
+ GameEventProjectVo vo = gameEventProjectService.queryById(projectId);
|
|
|
|
+ if (vo != null) {
|
|
|
|
+ List<Long> refereeGroups = vo.getRefereeGroups() != null ?
|
|
|
|
+ new ArrayList<>(vo.getRefereeGroups()) : new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ if (!refereeGroups.contains(refereeId)) {
|
|
|
|
+ refereeGroups.add(refereeId);
|
|
|
|
+
|
|
|
|
+ GameEventProject project = MapstructUtils.convert(vo, GameEventProject.class);
|
|
|
|
+ GameEventProjectBo projectBo = MapstructUtils.convert(project, GameEventProjectBo.class);
|
|
|
|
+ projectBo.setRefereeGroups(refereeGroups);
|
|
|
|
+ gameEventProjectService.updateByBo(projectBo);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("向项目中添加裁判失败: projectId={}, refereeId={}", projectId, refereeId, e);
|
|
|
|
+ throw e;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -186,7 +309,32 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
if(isValid){
|
|
if(isValid){
|
|
//TODO 做一些业务上的校验,判断是否需要校验
|
|
//TODO 做一些业务上的校验,判断是否需要校验
|
|
}
|
|
}
|
|
- return baseMapper.deleteByIds(ids) > 0;
|
|
|
|
|
|
+
|
|
|
|
+ // 删除前先从所有项目中移除该裁判
|
|
|
|
+ for (Long refereeId : ids) {
|
|
|
|
+ removeRefereeFromAllProjects(refereeId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return gameRefereeMapper.deleteByIds(ids) > 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 从所有项目中移除裁判
|
|
|
|
+ *
|
|
|
|
+ * @param refereeId 裁判ID
|
|
|
|
+ */
|
|
|
|
+ private void removeRefereeFromAllProjects(Long refereeId) {
|
|
|
|
+ try {
|
|
|
|
+ GameRefereeVo referee = queryById(refereeId);
|
|
|
|
+ if (referee != null && referee.getProjectList2() != null) {
|
|
|
|
+ for (Long projectId : referee.getProjectList2()) {
|
|
|
|
+ removeRefereeFromProject(projectId, refereeId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("从所有项目中移除裁判失败: refereeId={}", refereeId, e);
|
|
|
|
+ throw e;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -196,7 +344,7 @@ public class GameRefereeServiceImpl implements IGameRefereeService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public Long countReferee() {
|
|
public Long countReferee() {
|
|
- return this.baseMapper.selectCount(
|
|
|
|
|
|
+ return this.gameRefereeMapper.selectCount(
|
|
Wrappers.lambdaQuery(GameReferee.class)
|
|
Wrappers.lambdaQuery(GameReferee.class)
|
|
);
|
|
);
|
|
}
|
|
}
|