huang
2025-11-20 366ba040d2447bacd3455299425e3166f1f992bb
mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/DeviceGroupController.java
@@ -1,6 +1,7 @@
package com.mes.device.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mes.device.entity.DeviceGroupConfig;
import com.mes.device.request.DeviceGroupRequest;
import com.mes.device.service.DeviceGroupConfigService;
@@ -8,8 +9,8 @@
import com.mes.device.vo.DeviceGroupVO;
import com.mes.device.vo.StatisticsVO;
import com.mes.vo.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -29,7 +30,7 @@
@Slf4j
@RestController
@RequestMapping("device/group")
@Tag(name = "设备组管理", description = "设备组管理相关接口")
@Api(tags = "设备组管理")
public class DeviceGroupController {
    @Resource
@@ -37,27 +38,33 @@
    @Autowired
    private DeviceGroupRelationService deviceGroupRelationService;
    @Resource
    private ObjectMapper objectMapper;
    /**
     * 创建设备组
     */
    @PostMapping("/create")
    @Operation(summary = "创建设备组", description = "创建设备组信息")
    @ApiOperation("创建设备组")
    public Result<DeviceGroupConfig> createGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
            DeviceGroupConfig groupConfig = (DeviceGroupConfig) request.getGroupConfig();
            DeviceGroupConfig groupConfig = convertToDeviceGroupConfig(request.getGroupConfig());
            if (groupConfig == null) {
                return Result.error("设备组配置信息不能为空");
            }
            boolean success = deviceGroupConfigService.createDeviceGroup(groupConfig);
            if (success) {
                // 创建成功后,重新获取设备组对象
                DeviceGroupConfig created = deviceGroupConfigService.getDeviceGroupByCode(groupConfig.getGroupCode());
                return Result.success(created);
            } else {
                return Result.error();
                return Result.error("创建设备组失败");
            }
        } catch (Exception e) {
            log.error("创建设备组失败", e);
            return Result.error();
            return Result.error("创建设备组失败: " + e.getMessage());
        }
    }
@@ -65,11 +72,17 @@
     * 更新设备组配置
     */
    @PostMapping("/update")
    @Operation(summary = "更新设备组配置", description = "更新指定ID的设备组配置")
    @ApiOperation("更新设备组配置")
    public Result<DeviceGroupConfig> updateGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
            DeviceGroupConfig groupConfig = (DeviceGroupConfig) request.getGroupConfig();
            if (request.getGroupId() == null) {
                return Result.error("设备组ID不能为空");
            }
            DeviceGroupConfig groupConfig = convertToDeviceGroupConfig(request.getGroupConfig());
            if (groupConfig == null) {
                return Result.error("设备组配置信息不能为空");
            }
            groupConfig.setId(request.getGroupId());
            boolean success = deviceGroupConfigService.updateDeviceGroup(groupConfig);
            if (success) {
@@ -77,11 +90,11 @@
                DeviceGroupConfig updated = deviceGroupConfigService.getDeviceGroupByCode(groupConfig.getGroupCode());
                return Result.success(updated);
            } else {
                return Result.error();
                return Result.error("更新设备组配置失败");
            }
        } catch (Exception e) {
            log.error("更新设备组配置失败", e);
            return Result.error();
            return Result.error("更新设备组配置失败: " + e.getMessage());
        }
    }
@@ -89,7 +102,7 @@
     * 删除设备组配置
     */
    @PostMapping("/delete")
    @Operation(summary = "删除设备组配置", description = "删除指定ID的设备组配置")
    @ApiOperation("删除设备组配置")
    public Result<Void> deleteGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -105,7 +118,7 @@
     * 根据ID获取设备组配置
     */
    @PostMapping("/detail")
    @Operation(summary = "获取设备组配置详情", description = "根据ID获取设备组配置的详细信息")
    @ApiOperation("获取设备组配置详情")
    public Result<DeviceGroupConfig> getGroupById(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -121,7 +134,7 @@
     * 分页查询设备组列表
     */
    @PostMapping("/list")
    @Operation(summary = "分页查询设备组列表", description = "分页查询设备组列表")
    @ApiOperation("分页查询设备组列表")
    public Result<Page<DeviceGroupVO.GroupInfo>> getGroupList(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -146,7 +159,7 @@
     * 启用设备组
     */
    @PostMapping("/enable")
    @Operation(summary = "启用设备组", description = "启用指定设备组")
    @ApiOperation("启用设备组")
    public Result<Void> enableGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -162,7 +175,7 @@
     * 禁用设备组
     */
    @PostMapping("/disable")
    @Operation(summary = "禁用设备组", description = "禁用指定设备组")
    @ApiOperation("禁用设备组")
    public Result<Void> disableGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -178,7 +191,7 @@
     * 批量启用设备组
     */
    @PostMapping("/batch-enable")
    @Operation(summary = "批量启用设备组", description = "批量启用指定ID列表的设备组")
    @ApiOperation("批量启用设备组")
    public Result<Void> batchEnableGroups(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -194,7 +207,7 @@
     * 批量禁用设备组
     */
    @PostMapping("/batch-disable")
    @Operation(summary = "批量禁用设备组", description = "批量禁用指定ID列表的设备组")
    @ApiOperation("批量禁用设备组")
    public Result<Void> batchDisableGroups(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -210,7 +223,7 @@
     * 获取设备组统计信息
     */
    @PostMapping("/statistics/groups")
    @Operation(summary = "获取设备组统计信息", description = "获取设备组相关的统计信息")
    @ApiOperation("获取设备组统计信息")
    public Result<StatisticsVO.GroupStatistics> getGroupStatistics(
            @RequestBody(required = false) Map<String, Object> request) {
        try {
@@ -227,7 +240,7 @@
     * 检查设备组编码是否已存在
     */
    @PostMapping("/check-code")
    @Operation(summary = "检查设备组编码", description = "检查设备组编码是否已存在")
    @ApiOperation("检查设备组编码")
    public Result<Boolean> checkGroupCodeExists(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -247,7 +260,7 @@
     * 获取设备组类型列表
     */
    @PostMapping("/types")
    @Operation(summary = "获取设备组类型列表", description = "获取所有可用的设备组类型")
    @ApiOperation("获取设备组类型列表")
    public Result<List<String>> getGroupTypes() {
        try {
            List<String> groupTypes = deviceGroupConfigService.getAllGroupTypes();
@@ -262,7 +275,7 @@
     * 获取设备组状态列表
     */
    @PostMapping("/statuses")
    @Operation(summary = "获取设备组状态列表", description = "获取所有可用的设备组状态")
    @ApiOperation("获取设备组状态列表")
    public Result<List<String>> getGroupStatuses() {
        try {
            List<String> groupStatuses = deviceGroupConfigService.getAllGroupStatuses();
@@ -277,7 +290,7 @@
     * 添加设备到设备组
     */
    @PostMapping("/devices")
    @Operation(summary = "添加设备到设备组", description = "将指定设备添加到设备组中")
    @ApiOperation("添加设备到设备组")
    public Result<Void> addDeviceToGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -294,7 +307,7 @@
     * 从设备组移除设备
     */
    @PostMapping("/devices/remove")
    @Operation(summary = "从设备组移除设备", description = "从设备组中移除指定设备")
    @ApiOperation("从设备组移除设备")
    public Result<Void> removeDeviceFromGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -310,7 +323,7 @@
     * 更新设备角色
     */
    @PostMapping("/devices/role")
    @Operation(summary = "更新设备角色", description = "更新设备在设备组中的角色")
    @ApiOperation("更新设备角色")
    public Result<Void> updateDeviceRole(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -327,7 +340,7 @@
     * 获取设备组设备列表
     */
    @PostMapping("/devices/list")
    @Operation(summary = "获取设备组设备列表", description = "获取指定设备组下的所有设备")
    @ApiOperation("获取设备组设备列表")
    public Result<List<DeviceGroupVO.DeviceInfo>> getGroupDevices(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -343,7 +356,7 @@
     * 获取设备设备组列表
     */
    @PostMapping("/devices/groups")
    @Operation(summary = "获取设备设备组列表", description = "获取指定设备所属的所有设备组")
    @ApiOperation("获取设备设备组列表")
    public Result<List<DeviceGroupVO.GroupInfo>> getDeviceGroups(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -359,7 +372,7 @@
     * 批量添加设备到设备组
     */
    @PostMapping("/batch-add-devices")
    @Operation(summary = "批量添加设备到设备组", description = "批量将指定设备列表添加到设备组中")
    @ApiOperation("批量添加设备到设备组")
    public Result<Void> batchAddDevicesToGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -375,7 +388,7 @@
     * 批量从设备组移除设备
     */
    @PostMapping("/devices/batch-remove")
    @Operation(summary = "批量从设备组移除设备", description = "批量从设备组中移除指定设备列表")
    @ApiOperation("批量从设备组移除设备")
    public Result<Void> batchRemoveDevicesFromGroup(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -391,7 +404,7 @@
     * 设备组健康检查
     */
    @PostMapping("/health-check")
    @Operation(summary = "设备组健康检查", description = "对指定设备组进行健康检查")
    @ApiOperation("设备组健康检查")
    public Result<DeviceGroupVO.HealthCheckResult> performGroupHealthCheck(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -407,7 +420,7 @@
     * 获取设备组性能统计
     */
    @PostMapping("/performance")
    @Operation(summary = "获取设备组性能统计", description = "获取指定设备组的性能统计信息")
    @ApiOperation("获取设备组性能统计")
    public Result<DeviceGroupVO.PerformanceStats> getGroupPerformance(
            @Valid @RequestBody DeviceGroupRequest request) {
        try {
@@ -418,4 +431,39 @@
            return Result.error();
        }
    }
    /**
     * 将Object转换为DeviceGroupConfig
     *
     * @param obj 待转换的对象
     * @return DeviceGroupConfig对象,如果转换失败返回null
     */
    private DeviceGroupConfig convertToDeviceGroupConfig(Object obj) {
        if (obj == null) {
            return null;
        }
        // 如果已经是DeviceGroupConfig类型,直接返回
        if (obj instanceof DeviceGroupConfig) {
            return (DeviceGroupConfig) obj;
        }
        // 如果是Map类型,使用ObjectMapper转换
        if (obj instanceof Map) {
            try {
                return objectMapper.convertValue(obj, DeviceGroupConfig.class);
            } catch (Exception e) {
                log.error("转换Map到DeviceGroupConfig失败", e);
                return null;
            }
        }
        // 其他类型,尝试使用ObjectMapper转换
        try {
            return objectMapper.convertValue(obj, DeviceGroupConfig.class);
        } catch (Exception e) {
            log.error("转换Object到DeviceGroupConfig失败: obj={}", obj, e);
            return null;
        }
    }
}