simulation-backend/src/main/java/com/hivekion/scenario/controller/ScenarioRoomController.java
2025-09-17 13:58:20 +08:00

154 lines
6.0 KiB
Java

package com.hivekion.scenario.controller;
import com.hivekion.Global;
import com.hivekion.baseData.controller.BaseController;
import com.hivekion.baseData.entity.Scenario;
import com.hivekion.baseData.service.ScenarioService;
import com.hivekion.common.entity.PagedResultVo;
import com.hivekion.common.entity.ResponseData;
import com.hivekion.common.enums.ResultCodeEnum;
import com.hivekion.common.security.SecurityUtils;
import com.hivekion.common.uuid.IdUtils;
import com.hivekion.enums.ScenarioRoomStatusEnum;
import com.hivekion.scenario.bean.ScenarioWsParam;
import com.hivekion.scenario.entity.RoomLog;
import com.hivekion.scenario.entity.ScenarioRoom;
import com.hivekion.scenario.service.ScenarioRoomService;
import com.hivekion.scenario.service.ScenarioTaskService;
import io.swagger.annotations.ApiOperation;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 想定房间 前端控制器
* </p>
*
* @author liDongYu
* @since 2025-09-03
*/
@RestController
@RequestMapping("/scenario/room")
public class ScenarioRoomController extends BaseController {
@Resource
private ScenarioRoomService scenarioRoomService;
@Resource
private ScenarioService scenarioService;
@Resource
private ScenarioTaskService scenarioTaskService;
/**
* 查询想定列表
*
* @return 查询结果
*/
@ApiOperation(value = "分页查询房间列表", notes = "")
@GetMapping("/list")
public PagedResultVo<ScenarioRoom> list(ScenarioRoom search) {
Map<Integer, Scenario> scenarioMap = scenarioService.scenarioMap();
//设置开始索引
search.setStart(search.getPageSize() * (search.getPageNum() - 1));
//查询结果列表
List<ScenarioRoom> list = scenarioRoomService.list(search);
for (ScenarioRoom scenarioRoom : list) {
if (scenarioMap.get(scenarioRoom.getScenarioId()) != null) {
scenarioRoom.setScenarioName(scenarioMap.get(scenarioRoom.getScenarioId()).getName());
}
}
//查询总数
Long total = scenarioRoomService.count(search);
return list(search, list, total);
}
@PostMapping("/save")
public ResponseData<Object> save(@Validated @RequestBody ScenarioRoom room,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return bindingErrors(bindingResult);
}
if (room.getId() == null) {
room.setId(IdUtils.randomUUID());
room.setCreateTime(LocalDateTime.now());
room.setUserId(SecurityUtils.getCurrentLoginUser().getUserId());
}
scenarioRoomService.saveOrUpdate(room);
return ResponseData.success(room);
}
@GetMapping("/remove/{id}")
public ResponseData<Void> remove(@PathVariable("id") String id) {
scenarioRoomService.removeById(id);
return ResponseData.success(null);
}
@PostMapping("/start")
public ResponseData<Void> start(@RequestBody ScenarioRoom room) {
//验证
Scenario scenario = scenarioService.getScenarioById(room.getScenarioId());
if (scenario == null) {
return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(), "想定不存在", null);
}
if (scenarioRoomService.getById(room.getId()) == null) {
return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(), "房间不存在", null);
}
Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"启动想定",SecurityUtils.getCurrentLoginUser().getUsername())) ;
scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.STARTED.getCode());
scenarioTaskService.start(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
@PostMapping("/break")
public ResponseData<Void> breakAWhile(@RequestBody ScenarioRoom room) {
Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"暂停想定",SecurityUtils.getCurrentLoginUser().getUsername())) ;
scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.BROKEN.getCode());
scenarioTaskService.sleepWhile(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
@PostMapping("/wakeUp")
public ResponseData<Void> wakeUp(@RequestBody ScenarioRoom room) {
Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"想定继续",SecurityUtils.getCurrentLoginUser().getUsername())) ;
scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.STARTED.getCode());
scenarioTaskService.wakeup(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
@PostMapping("/mag")
public ResponseData<Void> mag(@RequestBody ScenarioRoom room) {
synchronized (this) {
Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"想定加速/减速",SecurityUtils.getCurrentLoginUser().getUsername())) ;
if (Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId()) == null) {
Global.roomParamMap.put(room.getScenarioId() + "_" + room.getId(), new ScenarioWsParam());
}
ScenarioWsParam magValue = Global.roomParamMap.get(room.getScenarioId() + "_" + room.getId());
magValue.setMag(room.getMag());
}
return ResponseData.success(null);
}
@PostMapping("/stop")
public ResponseData<Void> stop(@RequestBody ScenarioRoom room) {
Global.roomLogQueue.add(RoomLog.createRoomLog(room.getId(),"想定结束",SecurityUtils.getCurrentLoginUser().getUsername())) ;
scenarioRoomService.updateStatus(room.getId(), ScenarioRoomStatusEnum.FINISHED.getCode());
scenarioTaskService.stop(room.getScenarioId(), room.getId());
return ResponseData.success(null);
}
}