package com.xiaopeng.admin.controller; import com.xiaopeng.admin.service.CommandCenterService; import com.xiaopeng.api.feignClient.map.CommandCenterMapClient; import com.xiaopeng.api.feignClient.operation.CommandCenterOpenCityClient; import com.xiaopeng.api.model.operation.XpOpenCity; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.api.model.operation.XpStation; import com.xiaopeng.api.vo.commandCenter.CommandCenterFenceVo; import com.xiaopeng.api.vo.commandCenter.CommandCenterVehicleDetailVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.security.annotation.Logical; import com.xiaopeng.common.security.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * 指挥中心 REST 接口 * * @ClassName CommandCenterController */ @RestController @RequestMapping("/api/v1/commandCenter") @RefreshScope public class CommandCenterController { private static final List VALID_POINT_ON_OFF = Arrays.asList(1, 2, 3); @Value("${command-center.points.show-all:false}") private boolean pointsShowAll; @Resource private CommandCenterService commandCenterService; @Resource private CommandCenterMapClient commandCenterMapClient; @Resource private CommandCenterOpenCityClient commandCenterOpenCityClient; @GetMapping("/vehicle/detail") @RequiresPermissions(value = {"commandCenter:view"}, logical = Logical.OR) public R vehicleDetail(@RequestParam Long vehicleId) { CommandCenterVehicleDetailVo detail = commandCenterService.getVehicleDetailForPush(vehicleId); return R.ok(detail); } @GetMapping("/fences") @RequiresPermissions(value = {"commandCenter:view"}, logical = Logical.OR) public R> fences(@RequestParam String cityCode) { return commandCenterMapClient.listFencesByCityCode(cityCode); } @GetMapping("/stations") @RequiresPermissions(value = {"commandCenter:view"}, logical = Logical.OR) public R> stations(@RequestParam String cityCode) { return commandCenterMapClient.listStationsByCityCode(cityCode); } @GetMapping("/regions") @RequiresPermissions(value = {"commandCenter:view"}, logical = Logical.OR) public R> regions() { return commandCenterOpenCityClient.listEnabled(); } @GetMapping("/points") @RequiresPermissions(value = {"commandCenter:view"}, logical = Logical.OR) public R> points(@RequestParam String cityCode) { R> result = commandCenterMapClient.listPointsByCityCode(cityCode); if (pointsShowAll || result == null || result.getData() == null) { return result; } List filtered = result.getData().stream() .filter(p -> p.getPointOnOff() != null && VALID_POINT_ON_OFF.contains(p.getPointOnOff())) .collect(Collectors.toList()); return R.ok(filtered); } }