|
@@ -1,43 +1,34 @@
|
|
|
package org.dromara.system.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.lang.Snowflake;
|
|
|
-import cn.hutool.core.lang.UUID;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
-import cn.idev.excel.annotation.ExcelProperty;
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import lombok.val;
|
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.dromara.common.core.exception.ServiceException;
|
|
|
import org.dromara.common.core.utils.ObjectUtils;
|
|
|
-import org.dromara.system.controller.TestPoi;
|
|
|
+import org.dromara.system.domain.GameTeam;
|
|
|
+import org.dromara.system.domain.bo.EnrollBo;
|
|
|
import org.dromara.system.domain.bo.GameAthleteBo;
|
|
|
-import org.dromara.system.domain.bo.GameEventProjectBo;
|
|
|
import org.dromara.system.domain.bo.GameTeamBo;
|
|
|
import org.dromara.system.domain.vo.EnrollProjectVo;
|
|
|
-import org.dromara.system.service.IEnrollService;
|
|
|
-import org.dromara.system.service.IGameAthleteService;
|
|
|
-import org.dromara.system.service.IGameEventProjectService;
|
|
|
-import org.dromara.system.service.IGameTeamService;
|
|
|
-import org.springframework.core.io.Resource;
|
|
|
-import org.springframework.core.io.ResourceLoader;
|
|
|
-import org.springframework.http.ResponseEntity;
|
|
|
+import org.dromara.system.service.*;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
-import java.io.*;
|
|
|
-import java.lang.reflect.Field;
|
|
|
-import java.net.URLEncoder;
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.io.OutputStream;
|
|
|
import java.util.*;
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -49,6 +40,7 @@ public class IEnrollServiceImpl implements IEnrollService {
|
|
|
private final IGameEventProjectService gameEventProjectService;
|
|
|
private final IGameTeamService gameTeamService;
|
|
|
private final IGameAthleteService gameAthleteService;
|
|
|
+ private final IGameEventService gameEventService;
|
|
|
|
|
|
/**
|
|
|
* 使用poi生成报名表模板
|
|
@@ -198,6 +190,85 @@ public class IEnrollServiceImpl implements IEnrollService {
|
|
|
return this.saveEnrollData(enrollList, eventId);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean enroll(EnrollBo enrollBo) {
|
|
|
+ Long eventId = enrollBo.getEventId();
|
|
|
+ Long projectId = enrollBo.getProjectId();
|
|
|
+ String name = enrollBo.getName();
|
|
|
+ String teamName = enrollBo.getTeamName();
|
|
|
+ Integer gender = enrollBo.getGender();
|
|
|
+ Integer age = enrollBo.getAge();
|
|
|
+ String phone = enrollBo.getPhone();
|
|
|
+ String idCard = enrollBo.getIdCard();
|
|
|
+ // 1.查询队伍是否存在 如果存在就更新成员
|
|
|
+ GameTeam team = gameTeamService.queryByName(teamName, eventId);
|
|
|
+ Snowflake snowflake = IdUtil.createSnowflake(1, 1);
|
|
|
+ Long teamId = snowflake.nextId();
|
|
|
+ Long athleteId = snowflake.nextId();
|
|
|
+ String athleteCode = "";
|
|
|
+ if (team == null) {
|
|
|
+ // 1.1 如果队伍不存在就创建队伍并且生成号码段
|
|
|
+ //查询当前赛事号码段最大的
|
|
|
+ GameTeam maxNumberTeam = gameTeamService.queryMaxNumber(eventId);
|
|
|
+ // 生成新的队伍号码段 numberRange
|
|
|
+ // start=maxNumberTeam.getNumberRange.endNumber+1
|
|
|
+ String[] maxNumberRange = maxNumberTeam.getNumberRange().split("-");
|
|
|
+ String startNumber = String.valueOf(Integer.parseInt(maxNumberRange[1]) + 1);
|
|
|
+ // end=maxNumberTeam.getNumberRange.endNumber+300
|
|
|
+ String endNumber = String.valueOf(Integer.parseInt(maxNumberRange[1]) + 300);
|
|
|
+ GameTeamBo gameTeamBo = new GameTeamBo();
|
|
|
+ gameTeamBo.setTeamId(teamId);
|
|
|
+ gameTeamBo.setEventId(eventId);
|
|
|
+ gameTeamBo.setTeamName(teamName);
|
|
|
+ gameTeamBo.setLeader(name);
|
|
|
+ gameTeamBo.setAthleteValue(JSONUtil.toJsonStr(Arrays.asList(athleteId)));
|
|
|
+ gameTeamBo.setAthleteNum(1L);
|
|
|
+ gameTeamBo.setNumberRange(startNumber + "-" + endNumber);
|
|
|
+ gameTeamBo.setCreateDept(-1L);
|
|
|
+ gameTeamBo.setCreateBy(-1L);
|
|
|
+ gameTeamBo.setCreateTime(DateTime.now());
|
|
|
+ gameTeamBo.setUpdateBy(null);
|
|
|
+ gameTeamBo.setUpdateTime(null);
|
|
|
+ athleteCode = startNumber;
|
|
|
+ gameTeamService.insertByBo(gameTeamBo);
|
|
|
+ } else {
|
|
|
+ // 1.2 查询当前队伍中号码段最大的 继续号码
|
|
|
+ teamId = team.getTeamId();
|
|
|
+ String maxNumber = gameAthleteService.queryMaxNumber(teamId);
|
|
|
+ athleteCode = String.valueOf(Integer.parseInt(maxNumber) + 1);
|
|
|
+ // 1.3 更新运动员成员
|
|
|
+ List<Long> ids = JSONUtil.toList(team.getAthleteValue(), Long.class);
|
|
|
+ ids.add(athleteId);
|
|
|
+ team.setAthleteValue(JSONUtil.toJsonStr(ids));
|
|
|
+
|
|
|
+ GameTeamBo bo = new GameTeamBo();
|
|
|
+ BeanUtil.copyProperties(team, bo);
|
|
|
+ gameTeamService.updateByBo(bo);
|
|
|
+ }
|
|
|
+ // 2.加入运动员表
|
|
|
+ GameAthleteBo gameAthleteBo = new GameAthleteBo();
|
|
|
+ gameAthleteBo.setAthleteId(athleteId);
|
|
|
+ gameAthleteBo.setEventId(eventId);
|
|
|
+ gameAthleteBo.setTeamId(teamId);
|
|
|
+ gameAthleteBo.setAthleteCode(athleteCode);
|
|
|
+ gameAthleteBo.setName(name);
|
|
|
+ gameAthleteBo.setGender(String.valueOf(gender));
|
|
|
+ gameAthleteBo.setAge(Long.valueOf(age));
|
|
|
+ gameAthleteBo.setUnit(teamName);
|
|
|
+ gameAthleteBo.setIdCard(idCard);
|
|
|
+ gameAthleteBo.setPhone(phone);
|
|
|
+ gameAthleteBo.setProjectValue(JSONUtil.toJsonStr(Arrays.asList(projectId)));
|
|
|
+ gameAthleteBo.setCreateDept(-1L);
|
|
|
+ gameAthleteBo.setCreateBy(-1L);
|
|
|
+ gameAthleteBo.setCreateTime(DateTime.now());
|
|
|
+ gameAthleteBo.setUpdateBy(null);
|
|
|
+ gameAthleteBo.setUpdateTime(null);
|
|
|
+ return gameAthleteService.insertByBo(gameAthleteBo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // region 辅助方法
|
|
|
+
|
|
|
private List<EnrollProjectVo> parseData(MultipartFile file) {
|
|
|
try {
|
|
|
List<EnrollProjectVo> enrolls = new ArrayList<>();
|
|
@@ -495,4 +566,6 @@ public class IEnrollServiceImpl implements IEnrollService {
|
|
|
|
|
|
return startStr + "-" + endStr;
|
|
|
}
|
|
|
+
|
|
|
+ // endregion 辅助方法
|
|
|
}
|