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; /** *

* 想定房间 前端控制器 *

* * @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 list(ScenarioRoom search) { Map scenarioMap = scenarioService.scenarioMap(); //设置开始索引 search.setStart(search.getPageSize() * (search.getPageNum() - 1)); //查询结果列表 List 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 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 remove(@PathVariable("id") String id) { scenarioRoomService.removeById(id); return ResponseData.success(null); } @PostMapping("/start") public ResponseData 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 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 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 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 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); } }