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; import com.mes.device.service.DeviceGroupRelationService; import com.mes.device.vo.DeviceGroupVO; import com.mes.device.vo.StatisticsVO; import com.mes.vo.Result; 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.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 设备组管理控制器 * * @author mes * @since 2024-10-30 */ @Slf4j @RestController @RequestMapping("device/group") @Api(tags = "设备组管理") public class DeviceGroupController { @Resource private DeviceGroupConfigService deviceGroupConfigService; @Autowired private DeviceGroupRelationService deviceGroupRelationService; @Resource private ObjectMapper objectMapper; /** * 创建设备组 */ @PostMapping("/create") @ApiOperation("创建设备组") public Result createGroup( @Valid @RequestBody DeviceGroupRequest request) { try { 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("创建设备组失败"); } } catch (Exception e) { log.error("创建设备组失败", e); return Result.error("创建设备组失败: " + e.getMessage()); } } /** * 更新设备组配置 */ @PostMapping("/update") @ApiOperation("更新设备组配置") public Result updateGroup( @Valid @RequestBody DeviceGroupRequest request) { try { 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) { // 更新成功后,重新获取设备组对象 DeviceGroupConfig updated = deviceGroupConfigService.getDeviceGroupByCode(groupConfig.getGroupCode()); return Result.success(updated); } else { return Result.error("更新设备组配置失败"); } } catch (Exception e) { log.error("更新设备组配置失败", e); return Result.error("更新设备组配置失败: " + e.getMessage()); } } /** * 删除设备组配置 */ @PostMapping("/delete") @ApiOperation("删除设备组配置") public Result deleteGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupConfigService.deleteDeviceGroup(request.getGroupId()); return Result.success(null); } catch (Exception e) { log.error("删除设备组配置失败", e); return Result.error(); } } /** * 根据ID获取设备组配置 */ @PostMapping("/detail") @ApiOperation("获取设备组配置详情") public Result getGroupById( @Valid @RequestBody DeviceGroupRequest request) { try { DeviceGroupConfig group = deviceGroupConfigService.getDeviceGroupById(request.getGroupId()); return Result.success(group); } catch (Exception e) { log.error("获取设备组配置失败", e); return Result.error(); } } /** * 分页查询设备组列表 */ @PostMapping("/list") @ApiOperation("分页查询设备组列表") public Result> getGroupList( @Valid @RequestBody DeviceGroupRequest request) { try { @SuppressWarnings("unchecked") Map configMap = (Map) (request.getGroupConfig() != null ? request.getGroupConfig() : new HashMap<>()); Page pageResult = deviceGroupConfigService.getDeviceGroupList( (Long) configMap.get("projectId"), (String) configMap.get("groupType"), (String) configMap.get("groupStatus"), (String) configMap.get("keyword"), (Integer) configMap.get("page"), (Integer) configMap.get("size") ); return Result.success(pageResult); } catch (Exception e) { log.error("查询设备组列表失败", e); return Result.error(); } } /** * 启用设备组 */ @PostMapping("/enable") @ApiOperation("启用设备组") public Result enableGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupConfigService.enableDeviceGroup(request.getGroupId()); return Result.success(null); } catch (Exception e) { log.error("启用设备组失败", e); return Result.error(); } } /** * 禁用设备组 */ @PostMapping("/disable") @ApiOperation("禁用设备组") public Result disableGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupConfigService.disableDeviceGroup(request.getGroupId()); return Result.success(null); } catch (Exception e) { log.error("禁用设备组失败", e); return Result.error(); } } /** * 批量启用设备组 */ @PostMapping("/batch-enable") @ApiOperation("批量启用设备组") public Result batchEnableGroups( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupConfigService.batchEnableDeviceGroups(request.getGroupIds()); return Result.success(null); } catch (Exception e) { log.error("批量启用设备组失败", e); return Result.error(); } } /** * 批量禁用设备组 */ @PostMapping("/batch-disable") @ApiOperation("批量禁用设备组") public Result batchDisableGroups( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupConfigService.batchDisableDeviceGroups(request.getGroupIds()); return Result.success(null); } catch (Exception e) { log.error("批量禁用设备组失败", e); return Result.error(); } } /** * 获取设备组统计信息 */ @PostMapping("/statistics/groups") @ApiOperation("获取设备组统计信息") public Result getGroupStatistics( @RequestBody(required = false) Map request) { try { Long projectId = request != null ? (Long) request.get("projectId") : null; StatisticsVO.GroupStatistics statistics = deviceGroupConfigService.getDeviceGroupStatistics(projectId); return Result.success(statistics); } catch (Exception e) { log.error("获取设备组统计信息失败", e); return Result.error(); } } /** * 检查设备组编码是否已存在 */ @PostMapping("/check-code") @ApiOperation("检查设备组编码") public Result checkGroupCodeExists( @Valid @RequestBody DeviceGroupRequest request) { try { @SuppressWarnings("unchecked") Map configMap = (Map) (request.getGroupConfig() != null ? request.getGroupConfig() : new HashMap<>()); boolean exists = deviceGroupConfigService.isGroupCodeExists( (String) configMap.get("groupCode"), request.getGroupId()); return Result.success(exists); } catch (Exception e) { log.error("检查设备组编码失败", e); return Result.error(); } } /** * 获取设备组类型列表 */ @PostMapping("/types") @ApiOperation("获取设备组类型列表") public Result> getGroupTypes() { try { List groupTypes = deviceGroupConfigService.getAllGroupTypes(); return Result.success(groupTypes); } catch (Exception e) { log.error("获取设备组类型列表失败", e); return Result.error(); } } /** * 获取设备组状态列表 */ @PostMapping("/statuses") @ApiOperation("获取设备组状态列表") public Result> getGroupStatuses() { try { List groupStatuses = deviceGroupConfigService.getAllGroupStatuses(); return Result.success(groupStatuses); } catch (Exception e) { log.error("获取设备组状态列表失败", e); return Result.error(); } } /** * 添加设备到设备组 */ @PostMapping("/devices") @ApiOperation("添加设备到设备组") public Result addDeviceToGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupRelationService.addDeviceToGroup(request.getGroupId(), request.getDeviceId(), request.getDeviceRole() != null ? request.getDeviceRole() : "MEMBER"); return Result.success(null); } catch (Exception e) { log.error("添加设备到设备组失败", e); return Result.error(); } } /** * 从设备组移除设备 */ @PostMapping("/devices/remove") @ApiOperation("从设备组移除设备") public Result removeDeviceFromGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupRelationService.removeDeviceFromGroup(request.getGroupId(), request.getDeviceId()); return Result.success(null); } catch (Exception e) { log.error("从设备组移除设备失败", e); return Result.error(); } } /** * 更新设备角色 */ @PostMapping("/devices/role") @ApiOperation("更新设备角色") public Result updateDeviceRole( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupRelationService.updateDeviceRole(request.getGroupId(), request.getDeviceId(), request.getDeviceRole()); return Result.success(null); } catch (Exception e) { log.error("更新设备角色失败", e); return Result.error(); } } /** * 获取设备组设备列表 */ @PostMapping("/devices/list") @ApiOperation("获取设备组设备列表") public Result> getGroupDevices( @Valid @RequestBody DeviceGroupRequest request) { try { List devices = deviceGroupRelationService.getGroupDevices(request.getGroupId()); return Result.success(devices); } catch (Exception e) { log.error("获取设备组设备列表失败", e); return Result.error(); } } /** * 获取设备设备组列表 */ @PostMapping("/devices/groups") @ApiOperation("获取设备设备组列表") public Result> getDeviceGroups( @Valid @RequestBody DeviceGroupRequest request) { try { List groups = deviceGroupRelationService.getDeviceGroups(request.getDeviceId()); return Result.success(groups); } catch (Exception e) { log.error("获取设备设备组列表失败", e); return Result.error(); } } /** * 批量添加设备到设备组 */ @PostMapping("/batch-add-devices") @ApiOperation("批量添加设备到设备组") public Result batchAddDevicesToGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupRelationService.batchAddDevicesToGroup(request.getGroupId(), request.getDeviceIds()); return Result.success(null); } catch (Exception e) { log.error("批量添加设备到设备组失败", e); return Result.error(); } } /** * 批量从设备组移除设备 */ @PostMapping("/devices/batch-remove") @ApiOperation("批量从设备组移除设备") public Result batchRemoveDevicesFromGroup( @Valid @RequestBody DeviceGroupRequest request) { try { deviceGroupRelationService.batchRemoveDevicesFromGroup(request.getGroupId(), request.getDeviceIds()); return Result.success(null); } catch (Exception e) { log.error("批量从设备组移除设备失败", e); return Result.error(); } } /** * 设备组健康检查 */ @PostMapping("/health-check") @ApiOperation("设备组健康检查") public Result performGroupHealthCheck( @Valid @RequestBody DeviceGroupRequest request) { try { DeviceGroupVO.HealthCheckResult result = deviceGroupConfigService.performGroupHealthCheck(request.getGroupId()); return Result.success(result); } catch (Exception e) { log.error("设备组健康检查失败", e); return Result.error(); } } /** * 获取设备组性能统计 */ @PostMapping("/performance") @ApiOperation("获取设备组性能统计") public Result getGroupPerformance( @Valid @RequestBody DeviceGroupRequest request) { try { DeviceGroupVO.PerformanceStats stats = deviceGroupConfigService.getGroupPerformance(request.getGroupId()); return Result.success(stats); } catch (Exception e) { log.error("获取设备组性能统计失败", e); 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; } } }