|
@@ -18,6 +18,7 @@ import com.izouma.yags.repo.*;
|
|
|
import com.izouma.yags.utils.JpaUtils;
|
|
import com.izouma.yags.utils.JpaUtils;
|
|
|
import com.izouma.yags.utils.RecognizeUtil;
|
|
import com.izouma.yags.utils.RecognizeUtil;
|
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
@@ -44,6 +45,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
|
|
|
+@Slf4j
|
|
|
public class RoomService {
|
|
public class RoomService {
|
|
|
|
|
|
|
|
private RoomRepo roomRepo;
|
|
private RoomRepo roomRepo;
|
|
@@ -249,10 +251,22 @@ public class RoomService {
|
|
|
if (!room.getUserId().equals(userId)) {
|
|
if (!room.getUserId().equals(userId)) {
|
|
|
throw new BusinessException("无权限");
|
|
throw new BusinessException("无权限");
|
|
|
}
|
|
}
|
|
|
|
|
+ cancel(room);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void cancel(Room room) {
|
|
|
if (room.getStatus() != RoomStatus.WAITING) {
|
|
if (room.getStatus() != RoomStatus.WAITING) {
|
|
|
throw new BusinessException("游戏已开始");
|
|
throw new BusinessException("游戏已开始");
|
|
|
}
|
|
}
|
|
|
- List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomIdAndStatus(roomId, JoinRoomStatus.WAITING);
|
|
|
|
|
|
|
+ cancelJoinRoomAndReturnTicket(room);
|
|
|
|
|
+
|
|
|
|
|
+ room.setStatus(RoomStatus.CANCELLED);
|
|
|
|
|
+ room.setCancelAt(LocalDateTime.now());
|
|
|
|
|
+ roomRepo.save(room);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void cancelJoinRoomAndReturnTicket(Room room) {
|
|
|
|
|
+ List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomId(room.getId());
|
|
|
joinRoomList.forEach(j -> {
|
|
joinRoomList.forEach(j -> {
|
|
|
j.setStatus(JoinRoomStatus.CANCELLED);
|
|
j.setStatus(JoinRoomStatus.CANCELLED);
|
|
|
joinRoomRepo.save(j);
|
|
joinRoomRepo.save(j);
|
|
@@ -264,8 +278,18 @@ public class RoomService {
|
|
|
userTicketRepo.save(t);
|
|
userTicketRepo.save(t);
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- room.setStatus(RoomStatus.CANCELLED);
|
|
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public void invalid(Room room) {
|
|
|
|
|
+ if (room.getStatus() == RoomStatus.FINISH) {
|
|
|
|
|
+ for (Long userId : room.getWinner()) {
|
|
|
|
|
+ userBalanceService.modifyBalance(userId, room.getBonus().negate(), Constants.BalanceDesc.RETURN);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cancelJoinRoomAndReturnTicket(room);
|
|
|
|
|
+
|
|
|
|
|
+ room.setStatus(RoomStatus.INVALID);
|
|
|
room.setCancelAt(LocalDateTime.now());
|
|
room.setCancelAt(LocalDateTime.now());
|
|
|
roomRepo.save(room);
|
|
roomRepo.save(room);
|
|
|
}
|
|
}
|
|
@@ -401,8 +425,7 @@ public class RoomService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public RoomDetail detail(Room room, boolean players) {
|
|
public RoomDetail detail(Room room, boolean players) {
|
|
|
- List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomIdAndStatusNotIn(room.getId(),
|
|
|
|
|
- Arrays.asList(JoinRoomStatus.KICKED_OUT, JoinRoomStatus.QUIT));
|
|
|
|
|
|
|
+ List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomId(room.getId());
|
|
|
RoomDetail detail = new RoomDetail();
|
|
RoomDetail detail = new RoomDetail();
|
|
|
BeanUtils.copyProperties(room, detail);
|
|
BeanUtils.copyProperties(room, detail);
|
|
|
Arrays.asList(1, 2, 3).parallelStream().forEach(i -> {
|
|
Arrays.asList(1, 2, 3).parallelStream().forEach(i -> {
|
|
@@ -489,8 +512,7 @@ public class RoomService {
|
|
|
if (room.getStatus() != RoomStatus.AUDIT) {
|
|
if (room.getStatus() != RoomStatus.AUDIT) {
|
|
|
throw new BusinessException("房间状态不正确");
|
|
throw new BusinessException("房间状态不正确");
|
|
|
}
|
|
}
|
|
|
- List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomIdAndStatusNotIn(room.getId(),
|
|
|
|
|
- Arrays.asList(JoinRoomStatus.KICKED_OUT, JoinRoomStatus.QUIT));
|
|
|
|
|
|
|
+ List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomId(room.getId());
|
|
|
for (JoinRoom j : joinRoomList) {
|
|
for (JoinRoom j : joinRoomList) {
|
|
|
j.setFinishAt(LocalDateTime.now());
|
|
j.setFinishAt(LocalDateTime.now());
|
|
|
if (j.getTeam().equals(team)) {
|
|
if (j.getTeam().equals(team)) {
|
|
@@ -514,8 +536,7 @@ public class RoomService {
|
|
|
if (room.getStatus() != RoomStatus.FINISH) {
|
|
if (room.getStatus() != RoomStatus.FINISH) {
|
|
|
throw new BusinessException("房间状态不正确");
|
|
throw new BusinessException("房间状态不正确");
|
|
|
}
|
|
}
|
|
|
- List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomIdAndStatusNotIn(room.getId(),
|
|
|
|
|
- Arrays.asList(JoinRoomStatus.KICKED_OUT, JoinRoomStatus.QUIT));
|
|
|
|
|
|
|
+ List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomId(room.getId());
|
|
|
String currentWinTeam = joinRoomList.stream().filter(j -> j.getStatus() == JoinRoomStatus.WIN)
|
|
String currentWinTeam = joinRoomList.stream().filter(j -> j.getStatus() == JoinRoomStatus.WIN)
|
|
|
.findAny().map(JoinRoom::getTeam).orElseThrow(new BusinessException("没有胜利的队伍"));
|
|
.findAny().map(JoinRoom::getTeam).orElseThrow(new BusinessException("没有胜利的队伍"));
|
|
|
if (currentWinTeam.equals(team)) {
|
|
if (currentWinTeam.equals(team)) {
|
|
@@ -546,8 +567,7 @@ public class RoomService {
|
|
|
@Transactional
|
|
@Transactional
|
|
|
public void apiJudge(Room room) {
|
|
public void apiJudge(Room room) {
|
|
|
if (!(room.getStatus() == RoomStatus.AUDIT)) return;
|
|
if (!(room.getStatus() == RoomStatus.AUDIT)) return;
|
|
|
- List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomIdAndStatusNotIn(room.getId(),
|
|
|
|
|
- Arrays.asList(JoinRoomStatus.KICKED_OUT, JoinRoomStatus.QUIT));
|
|
|
|
|
|
|
+ List<JoinRoom> joinRoomList = joinRoomRepo.findByRoomId(room.getId());
|
|
|
if (room.getMaxPlayerNum() != 2) return;
|
|
if (room.getMaxPlayerNum() != 2) return;
|
|
|
if (joinRoomList.size() != 2) return;
|
|
if (joinRoomList.size() != 2) return;
|
|
|
|
|
|
|
@@ -594,4 +614,6 @@ public class RoomService {
|
|
|
.map(JoinRoom::getUserId).collect(Collectors.toList()));
|
|
.map(JoinRoom::getUserId).collect(Collectors.toList()));
|
|
|
roomRepo.save(room);
|
|
roomRepo.save(room);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|