增加远程控制接口

This commit is contained in:
sdy 2026-05-21 17:08:24 +08:00
parent e15a249caf
commit 4cfcbb644f
8 changed files with 509 additions and 1 deletions

View File

@ -71,6 +71,7 @@ public interface BusinessConstant {
String DOCK_IN_WORK = "dock_in_work_"; String DOCK_IN_WORK = "dock_in_work_";
String FLIGHT_TASK_KMZ_FILE_INFO = "flight_task_kmz_file_info_"; String FLIGHT_TASK_KMZ_FILE_INFO = "flight_task_kmz_file_info_";
String UAV_SPEAKER_INDEX = "uav_speaker_index_"; String UAV_SPEAKER_INDEX = "uav_speaker_index_";
String UAV_LIGHT_INDEX = "uav_light_index_";
//********************************* other *********************************// //********************************* other *********************************//
String HTTP_PROTOCOL = "http://"; String HTTP_PROTOCOL = "http://";

View File

@ -0,0 +1,240 @@
package com.multictrl.modules.business.controller;
import com.multictrl.common.annotation.ApiOrder;
import com.multictrl.common.annotation.LogOperation;
import com.multictrl.common.utils.Result;
import com.multictrl.common.validator.ValidatorUtils;
import com.multictrl.modules.business.dto.remote.control.LightFineTuningSet;
import com.multictrl.modules.business.service.DJIBaseService;
import com.multictrl.modules.business.service.RemoteService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
/**
* 远程控制
*
* @author Sdy
* @since 1.0.0 2026/5/21
*/
@RestController
@RequestMapping("business/remote")
@Tag(name = "远程控制", description = "远程控制是开启DRC后执行的特定通道命令提高命令执行速度")
@ApiOrder(11)
@RequiredArgsConstructor
public class RemoteController {
private final RemoteService remoteService;
private final DJIBaseService djiBaseService;
@LogOperation("夜景模式设置")
@PostMapping("/drcCameraNightModeSet/{dockSn}")
@Operation(summary = "夜景模式设置")
@RequiresPermissions("bus:remote:drcCameraNightModeSet")
public Result<Object> drcCameraNightModeSet(@PathVariable String dockSn,
@Parameter(name = "mode", description = "{0:关闭,1:开启,2:自动(自动模式根据进光量自动开启)}")
@RequestParam Integer mode) {
return new Result<>().ok(remoteService.drcCameraNightModeSet(dockSn, mode));
}
@LogOperation("降噪等级设置")
@PostMapping("/drcCameraDenoiseLevelSet/{dockSn}")
@Operation(summary = "降噪等级设置")
@RequiresPermissions("bus:remote:drcCameraDenoiseLevelSet")
public Result<Object> drcCameraDenoiseLevelSet(@PathVariable String dockSn,
@Parameter(name = "level", description = "{2:增强降噪 15fps,3:超强降噪 5fps}(仅手动开启夜景模式后生效)")
@RequestParam Integer level) {
return new Result<>().ok(remoteService.drcCameraDenoiseLevelSet(dockSn, level));
}
@LogOperation("黑白夜视使能")
@PostMapping("/drcCameraNightVisionEnable/{dockSn}")
@Operation(summary = "黑白夜视使能")
@RequiresPermissions("bus:remote:drcCameraNightVisionEnable")
public Result<Object> drcCameraNightVisionEnable(@PathVariable String dockSn,
@Parameter(name = "enable", description = "{false:关闭,true:开启}(仅变焦7x以上生效)")
@RequestParam Boolean enable) {
return new Result<>().ok(remoteService.drcCameraNightVisionEnable(dockSn, enable));
}
@LogOperation("近红外补光使能")
@PostMapping("/drcInfraredFillLightEnable/{dockSn}")
@Operation(summary = "近红外补光使能")
@RequiresPermissions("bus:remote:drcInfraredFillLightEnable")
public Result<Object> drcInfraredFillLightEnable(@PathVariable String dockSn,
@Parameter(name = "enable", description = "{false:关闭,true:开启}(仅变焦7x以上生效)")
@RequestParam Boolean enable) {
return new Result<>().ok(remoteService.drcInfraredFillLightEnable(dockSn, enable));
}
@LogOperation("强制降落(慎用! 急停可取消)")
@PostMapping("/drcForceLanding/{dockSn}")
@Operation(summary = "强制降落", description = "调用后,无论是否有障碍飞行器都会直接降到地面,用 drone_emergency_stop 命令可取消。降落完成后只能人工拾取飞行器,慎用!")
@RequiresPermissions("bus:remote:drcForceLanding")
public Result<Object> drcForceLanding(@PathVariable String dockSn) {
return new Result<>().ok(djiBaseService.executeDrcAndReturnResult(dockSn, "drc_force_landing"));
}
@LogOperation("急停")
@PostMapping("/droneEmergencyStop/{dockSn}")
@Operation(summary = "急停", description = "可取消强制降落")
@RequiresPermissions("bus:remote:droneEmergencyStop")
public Result<Object> droneEmergencyStop(@PathVariable String dockSn) {
return new Result<>().ok(djiBaseService.executeDrcAndReturnResult(dockSn, "drone_emergency_stop"));
}
@LogOperation("紧急降落(慎用! 急停可取消)")
@PostMapping("/drcEmergencyLanding/{dockSn}")
@Operation(summary = "紧急降落", description = "调用后,飞行器会开始降落,在开启避障时可能会因触发避障而中止。用 drone_emergency_stop 命令可取消。降落完成后只能人工拾取飞行器,慎用!")
@RequiresPermissions("bus:remote:drcEmergencyLanding")
public Result<Object> drcEmergencyLanding(@PathVariable String dockSn) {
return new Result<>().ok(djiBaseService.executeDrcAndReturnResult(dockSn, "drc_emergency_landing"));
}
@LogOperation("探照灯—亮度设置")
@PostMapping("/drcLightBrightnessSet/{dockSn}")
@Operation(summary = "探照灯—亮度设置")
@RequiresPermissions("bus:remote:drcLightBrightnessSet")
public Result<Object> drcLightBrightnessSet(@PathVariable String dockSn,
@Parameter(name = "brightness", description = "亮度 {max:100,min:1}")
@RequestParam Integer brightness) {
return new Result<>().ok(remoteService.drcInfraredFillLightEnable(dockSn, brightness));
}
@LogOperation("探照灯—模式设置")
@PostMapping("/drcLightModeSet/{dockSn}")
@Operation(summary = "探照灯—模式设置")
@RequiresPermissions("bus:remote:drcLightModeSet")
public Result<Object> drcLightModeSet(@PathVariable String dockSn,
@Parameter(name = "mode", description = "模式{ 0: 关闭, 1: 常亮, 2: 爆闪, 3: 快速爆闪, 4: 交替爆闪 }")
@RequestParam Integer mode) {
return new Result<>().ok(remoteService.drcLightModeSet(dockSn, mode));
}
@LogOperation("探照灯—左右角度微调")
@PostMapping("/drcLightFineTuningSet/{dockSn}")
@Operation(summary = "探照灯—左右角度微调")
@RequiresPermissions("bus:remote:drcLightFineTuningSet")
public Result<Object> drcLightFineTuningSet(@PathVariable String dockSn, @RequestBody LightFineTuningSet lightFineTuningSet) {
ValidatorUtils.validateEntity(lightFineTuningSet);
return new Result<>().ok(remoteService.drcLightFineTuningSet(dockSn, lightFineTuningSet));
}
@LogOperation("探照灯—云台校准")
@PostMapping("/drcLightCalibration/{dockSn}")
@Operation(summary = "探照灯—云台校准")
@RequiresPermissions("bus:remote:drcLightCalibration")
public Result<Object> drcLightCalibration(@PathVariable String dockSn) {
return new Result<>().ok(remoteService.drcLightCalibration(dockSn));
}
@LogOperation("DRC初始状态订阅")
@PostMapping("/drcInitialState/{dockSn}")
@Operation(summary = "DRC初始状态订阅")
@RequiresPermissions("bus:remote:drcInitialState")
public Result<Object> drcInitialState(@PathVariable String dockSn) {
return new Result<>().ok(djiBaseService.executeDrcAndReturnResult(dockSn, "drc_initial_state_subscribe"));
}
@LogOperation("夜航灯设置")
@PostMapping("/drcNightLightsStateSet/{dockSn}")
@Operation(summary = "夜航灯设置")
@RequiresPermissions("bus:remote:drcNightLightsStateSet")
public Result<Object> drcNightLightsStateSet(@PathVariable String dockSn,
@Parameter(name = "state", description = "状态 {0:关闭 1:开启}")
@RequestParam Integer state) {
return new Result<>().ok(remoteService.drcLightModeSet(dockSn, state));
}
@LogOperation("飞行控制—隐蔽模式")
@PostMapping("/drcStealthStateSet/{dockSn}")
@Operation(summary = "飞行控制—隐蔽模式(关闭所有飞机灯光)", description = "设置飞机的隐蔽模式,用于关闭所有飞机灯光")
@RequiresPermissions("bus:remote:drcStealthStateSet")
public Result<Object> drcStealthStateSet(@PathVariable String dockSn,
@Parameter(name = "state", description = "隐蔽模式 {0:关闭 1:开启}")
@RequestParam Integer state) {
return new Result<>().ok(remoteService.drcStealthStateSet(dockSn, state));
}
@LogOperation("负载控制—相机光圈")
@PostMapping("/drcCameraApertureValueSet/{dockSn}")
@Operation(summary = "负载控制—相机光圈")
@RequiresPermissions("bus:remote:drcCameraApertureValueSet")
public Result<Object> drcCameraApertureValueSet(@PathVariable String dockSn,
@Parameter(name = "value", description = "光圈值 {0:F_AUTO 50:F_AUTO ...}")
@RequestParam Integer value) {
return new Result<>().ok(remoteService.drcCameraApertureValueSet(dockSn, value));
}
@LogOperation("负载控制—相机快门")
@PostMapping("/drcCameraShutterSet/{dockSn}")
@Operation(summary = "负载控制—相机快门")
@RequiresPermissions("bus:remote:drcCameraShutterSet")
public Result<Object> drcCameraShutterSet(@PathVariable String dockSn,
@Parameter(name = "value", description = "快门设置 {0:1/8000s 1:1/6400s ...}")
@RequestParam Integer value) {
return new Result<>().ok(remoteService.drcCameraShutterSet(dockSn, value));
}
@LogOperation("负载控制—ISO设置")
@PostMapping("/drcCameraIsoSet/{dockSn}")
@Operation(summary = "负载控制—ISO设置")
@RequiresPermissions("bus:remote:drcCameraIsoSet")
public Result<Object> drcCameraIsoSet(@PathVariable String dockSn,
@Parameter(name = "value", description = "ISO值 {0:ISO_AUTO 1:ISO_50 ...}")
@RequestParam Integer value) {
return new Result<>().ok(remoteService.drcCameraIsoSet(dockSn, value));
}
@LogOperation("负载控制—机械快门")
@PostMapping("/drcCameraMechanicalShutterSet/{dockSn}")
@Operation(summary = "负载控制—机械快门", description = "支持用户手动关闭机械快门提高设备作业寿命Matrice 3D广角模式下机械快门开关")
@RequiresPermissions("bus:remote:drcCameraMechanicalShutterSet")
public Result<Object> drcCameraMechanicalShutterSet(@PathVariable String dockSn,
@Parameter(name = "state", description = "是否使能机械快门 {0:关闭 1:开启}")
@RequestParam Integer state) {
return new Result<>().ok(remoteService.drcCameraMechanicalShutterSet(dockSn, state));
}
@LogOperation("负载控制—镜头去畸变")
@PostMapping("/drcCameraDewarpingSet/{dockSn}")
@Operation(summary = "负载控制—镜头去畸变", description = "能让用户的广角视角不再有暗角Matrice 3D广角模式的镜头去畸变")
@RequiresPermissions("bus:remote:drcCameraDewarpingSet")
public Result<Object> drcCameraDewarpingSet(@PathVariable String dockSn,
@Parameter(name = "state", description = "是否使能去畸变 {0:关闭 1:开启}")
@RequestParam Integer state) {
return new Result<>().ok(remoteService.drcCameraDewarpingSet(dockSn, state));
}
@LogOperation("红外照片格式设置")
@PostMapping("/drcCameraPhotoFormatSet/{dockSn}")
@Operation(summary = "红外照片格式设置", description = "用于设置红外照片格式,需要直播镜头先切换为红外才可有效使用")
@RequiresPermissions("bus:remote:drcCameraPhotoFormatSet")
public Result<Object> drcCameraPhotoFormatSet(@PathVariable String dockSn,
@Parameter(name = "format", description = "照片格式 {7:RJPEG 16:DLT664}")
@RequestParam Integer format) {
return new Result<>().ok(remoteService.drcCameraPhotoFormatSet(dockSn, format));
}
}

View File

@ -0,0 +1,32 @@
package com.multictrl.modules.business.dto.remote.control;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 探照灯左右角度微调
*
* @author Sdy
* @since 1.0.0 2026/5/21
*/
@Data
@Schema(name = "探照灯—左右角度微调")
public class LightFineTuningSet {
@NotNull(message = "灯不能为空")
@Schema(description = "灯{0:左灯 1:右灯}")
private Integer position;
@NotNull(message = "值不能为空")
@Max(value = 3, message = "最大值为+3")
@Min(value = -3, message = "最小值为-3")
@Schema(description = "值({ max: +3, min: -3}")
private Integer value;
@NotNull(message = "是否保存不能为空")
@Schema(description = "是否保存")
private Boolean saved;
}

View File

@ -165,6 +165,11 @@ public class StateHandler implements MessageHandler {
if (speakerIndex != null) { if (speakerIndex != null) {
CacheUtils.set(BusinessConstant.UAV_SPEAKER_INDEX + dockSn, speakerIndex); CacheUtils.set(BusinessConstant.UAV_SPEAKER_INDEX + dockSn, speakerIndex);
} }
} else if ("".equals(name)) {//探照灯
Integer lightIndex = psdkJson.getInt("psdk_index");
if (lightIndex != null) {
CacheUtils.set(BusinessConstant.UAV_LIGHT_INDEX + dockSn, lightIndex);
}
} }
} }
} }

View File

@ -0,0 +1,60 @@
package com.multictrl.modules.business.service;
import com.multictrl.modules.business.dto.remote.control.LightFineTuningSet;
/**
* 远程控制
*
* @author Sdy
* @since 1.0.0 2026/5/21
*/
public interface RemoteService {
//夜景模式设置
String drcCameraNightModeSet(String dockSn, Integer mode);
//降噪等级设置
String drcCameraDenoiseLevelSet(String dockSn, Integer level);
//黑白夜视使能
String drcCameraNightVisionEnable(String dockSn, Boolean enable);
//近红外补光使能
String drcInfraredFillLightEnable(String dockSn, Boolean enable);
//探照灯亮度设置
String drcInfraredFillLightEnable(String dockSn, Integer brightness);
//探照灯模式设置
String drcLightModeSet(String dockSn, Integer mode);
//探照灯左右角度微调
String drcLightFineTuningSet(String dockSn, LightFineTuningSet lightFineTuningSet);
//探照灯云台校准
String drcLightCalibration(String dockSn);
//夜航灯设置
String drcNightLightsStateSet(String dockSn, Integer state);
//飞行控制隐蔽模式
String drcStealthStateSet(String dockSn, Integer state);
//负载控制相机光圈
String drcCameraApertureValueSet(String dockSn, Integer value);
//负载控制相机快门
String drcCameraShutterSet(String dockSn, Integer value);
//负载控制ISO设置
String drcCameraIsoSet(String dockSn, Integer value);
//负载控制机械快门
String drcCameraMechanicalShutterSet(String dockSn, Integer state);
//负载控制镜头去畸变
String drcCameraDewarpingSet(String dockSn, Integer state);
//红外照片格式设置
String drcCameraPhotoFormatSet(String dockSn, Integer format);
}

View File

@ -0,0 +1,168 @@
package com.multictrl.modules.business.service.impl;
import cn.hutool.json.JSONObject;
import com.multictrl.common.constant.BusinessConstant;
import com.multictrl.common.exception.ErrorCode;
import com.multictrl.common.exception.RenException;
import com.multictrl.common.utils.CacheUtils;
import com.multictrl.modules.business.dto.remote.control.LightFineTuningSet;
import com.multictrl.modules.business.service.DJIBaseService;
import com.multictrl.modules.business.service.RemoteService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* 远程控制
*
* @author Sdy
* @since 1.0.0 2026/5/21
*/
@Service
@RequiredArgsConstructor
public class RemoteServiceImpl implements RemoteService {
private final DJIBaseService djiBaseService;
@Override
public String drcCameraNightModeSet(String dockSn, Integer mode) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("mode", mode);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_night_mode_set", data);
}
@Override
public String drcCameraDenoiseLevelSet(String dockSn, Integer level) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("level", level);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_denoise_level_set", data);
}
@Override
public String drcCameraNightVisionEnable(String dockSn, Boolean enable) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("enable", enable);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_night_vision_enable", data);
}
@Override
public String drcInfraredFillLightEnable(String dockSn, Boolean enable) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("enable", enable);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_infrared_fill_light_enable", data);
}
@Override
public String drcInfraredFillLightEnable(String dockSn, Integer brightness) {
JSONObject data = getDataIncludeLightIndex(dockSn);
data.set("group", 0);//{"0":"主探照灯"}
data.set("brightness", brightness);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_light_brightness_set", data);
}
@Override
public String drcLightModeSet(String dockSn, Integer mode) {
JSONObject data = getDataIncludeLightIndex(dockSn);
data.set("group", 0);//{"0":"主探照灯"}
data.set("mode", mode);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_light_mode_set", data);
}
@Override
public String drcLightFineTuningSet(String dockSn, LightFineTuningSet lightFineTuningSet) {
JSONObject data = getDataIncludeLightIndex(dockSn);
data.set("position", lightFineTuningSet.getPosition());
data.set("value", lightFineTuningSet.getValue());
data.set("saved", lightFineTuningSet.getSaved());
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_light_fine_tuning_set", data);
}
@Override
public String drcLightCalibration(String dockSn) {
JSONObject data = getDataIncludeLightIndex(dockSn);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_light_calibration", data);
}
@Override
public String drcNightLightsStateSet(String dockSn, Integer state) {
JSONObject data = new JSONObject();
data.set("night_lights_state", state);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_night_lights_state_set", data);
}
@Override
public String drcStealthStateSet(String dockSn, Integer state) {
JSONObject data = new JSONObject();
data.set("stealth_state", state);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_stealth_state_set", data);
}
@Override
public String drcCameraApertureValueSet(String dockSn, Integer value) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("camera_type", CacheUtils.get(BusinessConstant.UAV_VIDEO_TYPE + dockSn));
data.set("aperture_value", value);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_aperture_value_set", data);
}
@Override
public String drcCameraShutterSet(String dockSn, Integer value) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("camera_type", CacheUtils.get(BusinessConstant.UAV_VIDEO_TYPE + dockSn));
data.set("shutter_value", value);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_shutter_set", data);
}
@Override
public String drcCameraIsoSet(String dockSn, Integer value) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("camera_type", CacheUtils.get(BusinessConstant.UAV_VIDEO_TYPE + dockSn));
data.set("iso_value", value);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_iso_set", data);
}
@Override
public String drcCameraMechanicalShutterSet(String dockSn, Integer state) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("camera_type", CacheUtils.get(BusinessConstant.UAV_VIDEO_TYPE + dockSn));
data.set("mechanical_shutter_state", state);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_mechanical_shutter_set", data);
}
@Override
public String drcCameraDewarpingSet(String dockSn, Integer state) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("camera_type", CacheUtils.get(BusinessConstant.UAV_VIDEO_TYPE + dockSn));
data.set("dewarping_state", state);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_dewarping_set", data);
}
@Override
public String drcCameraPhotoFormatSet(String dockSn, Integer format) {
JSONObject data = getDataIncludeCameraIndex(dockSn);
data.set("photo_format", format);
return djiBaseService.executeDrcAndReturnResult(dockSn, "drc_camera_photo_format_set", data);
}
//获取包含index的data
private JSONObject getDataIncludeCameraIndex(String dockSn) {
JSONObject data = new JSONObject();
Object cameraIndex = CacheUtils.get(BusinessConstant.UAV_CAMERA_INDEX + dockSn);
if (cameraIndex != null) {
data.set("payload_index", cameraIndex);
} else {
throw new RenException(ErrorCode.UAV_CAMERA_INDEX_NOT_EXIST);
}
return data;
}
//获取包含index的data
private JSONObject getDataIncludeLightIndex(String dockSn) {
JSONObject data = new JSONObject();
Object lightIndex = CacheUtils.get(BusinessConstant.UAV_LIGHT_INDEX + dockSn);
if (lightIndex != null) {
data.set("psdk_index", lightIndex);
} else {
throw new RenException(ErrorCode.UAV_LIGHT_INDEX_NOT_EXIST);
}
return data;
}
}

View File

@ -64,4 +64,5 @@ public interface ErrorCode {
int UAV_NOT_REGISTER = 20023; int UAV_NOT_REGISTER = 20023;
int SPEAKER_NAME_EXIST = 20024; int SPEAKER_NAME_EXIST = 20024;
int FILE_NOT_EXIST = 20025; int FILE_NOT_EXIST = 20025;
int UAV_LIGHT_INDEX_NOT_EXIST = 20026;
} }

View File

@ -53,3 +53,4 @@
20023=\u65E0\u4EBA\u673A\u672A\u6CE8\u518C\uFF0C\u8BF7\u98DE\u673A\u5F00\u673A\u540E\u8FDB\u884C\u673A\u573A\u91CD\u65B0\u6CE8\u518C 20023=\u65E0\u4EBA\u673A\u672A\u6CE8\u518C\uFF0C\u8BF7\u98DE\u673A\u5F00\u673A\u540E\u8FDB\u884C\u673A\u573A\u91CD\u65B0\u6CE8\u518C
20024=\u558A\u8BDD\u5668\u6A21\u7248\u540D\u79F0\u5DF2\u5B58\u5728 20024=\u558A\u8BDD\u5668\u6A21\u7248\u540D\u79F0\u5DF2\u5B58\u5728
20025={0}\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E 20025={0}\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E
20026=\u98DE\u673A\u63A2\u7167\u706F\u8D1F\u8F7D\u4F4D\u7F6E\u672A\u83B7\u53D6\uFF0C\u8BF7\u68C0\u67E5\u98DE\u673A\u662F\u5426\u5F00\u673A