From 1a33190acb8faaac9f662cc35c2a11f22a11d6b3 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Fri, 6 Feb 2026 15:20:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E9=85=8D=E6=96=B9?= =?UTF-8?q?=E5=BA=93=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RecipeDeviceAttributeController.java | 8 ++ .../RecipeDeviceRecordController.java | 76 +++++++++++-------- .../RecipeDeviceAttributeMapper.java | 6 ++ .../RecipePlanDetailMapper.java | 4 +- .../RecipeDeviceAttributeService.java | 1 + .../RecipeDeviceAttributeServiceImpl.java | 7 ++ .../RecipePointRecordServiceImpl.java | 1 - 7 files changed, 68 insertions(+), 35 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java index 951364ead..dc92ac8c6 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java @@ -95,6 +95,14 @@ public class RecipeDeviceAttributeController { return success(pageResult); } + @GetMapping("/getList") + @Operation(summary = "查询配方配置列表") + public CommonResult> getList(RecipeDeviceAttributePageReqVO reqVO) { + // 替换为关联查询方法 + List recipeDeviceAttributeServiceList = recipeDeviceAttributeService.getList(reqVO); + return success(recipeDeviceAttributeServiceList); + } + @GetMapping("/list") @Operation(summary = "查询配方配置列表") public CommonResult> list(RecipeDeviceAttributePageReqVO reqVO) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java index 283104ff1..75fe0c168 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java @@ -156,16 +156,17 @@ public class RecipeDeviceRecordController { @Operation(summary = "批量创建设备点位采集记录和配方点位记录") @PreAuthorize("@ss.hasPermission('iot:recipe-device-record:create')") public CommonResult batchCreateRecipeDeviceRecord( - @RequestParam("id") Long recipeId) { + @RequestParam("id") Long id) { - RecipePlanDetailDO recipePlanDetailDO = recipePlanDetailService.getRecipePlanDetail(recipeId); + RecipePlanDetailDO recipePlanDetailDO = recipePlanDetailService.getRecipePlanDetail(id); + Long recipeId = recipePlanDetailDO.getRecipeId(); // ========== 第一步:查询配方关联的点位属性信息 ========== // 1.1 根据recipeId查询iot_recipe_device_attribute表记录 - recipePlanDetailDO.setRecipeId(recipeId); - List attributeList = recipeDeviceAttributeService.getByRecipeId(recipePlanDetailDO.getRecipeId()); +// recipePlanDetailDO.setRecipeId(recipeId); + List attributeList = recipeDeviceAttributeService.getByRecipeId(recipeId); //先删除在添加 List recipeDeviceRecordDOS = recipeDeviceRecordService.getListByRecipeId(recipeId); @@ -178,42 +179,53 @@ public class RecipeDeviceRecordController { } DeviceRespVO device = deviceService.getDevice(recipe.getMachineId()); - if (device== null ){ - throw exception(DEVICE_NOT_EXISTS); - } - - try { + if (device != null) { +// throw exception(DEVICE_NOT_EXISTS); - Map deviceContactModelMap = new HashMap<>(); - List deviceContactModelDOS = deviceContactModelService.selectListByDeviceId(device.getId()); - if (!deviceContactModelDOS.isEmpty()){ - deviceContactModelMap = deviceContactModelDOS.stream() - .collect(Collectors.toMap( - DeviceContactModelDO::getId, - Function.identity() - )); - } - OpcUtils.connect(device.getId(),device.getUrl(),device.getUsername(),device.getPassword(),10); + try { - for (RecipeDeviceAttributeDO attributeDO : attributeList) { - DeviceContactModelDO deviceContactModelDO = deviceContactModelMap.get(attributeDO.getAttributeId()); - if (deviceContactModelDO == null){ - continue; + Map deviceContactModelMap = new HashMap<>(); + List deviceContactModelDOS = deviceContactModelService.selectListByDeviceId(device.getId()); + if (!deviceContactModelDOS.isEmpty()) { + deviceContactModelMap = deviceContactModelDOS.stream() + .collect(Collectors.toMap( + DeviceContactModelDO::getId, + Function.identity() + )); } - // 创建 - RecipeDeviceRecordDO recipeDeviceRecordDO = new RecipeDeviceRecordDO(); - recipeDeviceRecordDO.setRecipeId(recipeId); - recipeDeviceRecordDO.setAttributeCode(deviceContactModelDO.getAttributeName()); - recipeDeviceRecordDO.setDataType(deviceContactModelDO.getDataType()); - recipeDeviceRecordDO.setDataUnit(deviceContactModelDO.getDataUnit()); + + + Map> deviceDataMap = deviceService.createDeviceDataMap(device.getId());//recipeRespVO.getDeviceId() + +// OpcUtils.connect(device.getId(),device.getUrl(),device.getUsername(),device.getPassword(),10); + + for (RecipeDeviceAttributeDO attributeDO : attributeList) { + Map data = deviceDataMap.get(attributeDO.getAttributeId()); + + DeviceContactModelDO deviceContactModelDO = deviceContactModelMap.get(attributeDO.getAttributeId()); + if (deviceContactModelDO == null) { + continue; + } + // 创建 + RecipeDeviceRecordDO recipeDeviceRecordDO = new RecipeDeviceRecordDO(); + recipeDeviceRecordDO.setRecipeId(recipeId); + recipeDeviceRecordDO.setAttributeCode(deviceContactModelDO.getAttributeCode()); + recipeDeviceRecordDO.setAttributeName(deviceContactModelDO.getAttributeName()); + recipeDeviceRecordDO.setDataType(deviceContactModelDO.getDataType()); + recipeDeviceRecordDO.setDeviceId(deviceContactModelDO.getDeviceId()); + recipeDeviceRecordDO.setDataUnit(deviceContactModelDO.getDataUnit()); // recipeDeviceRecordDO.setValue((String) OpcUtils.readValues(device.getId(),deviceContactModelDO.getAddress())); + if (data.get("addressValue") != null && data.get("addressValue").toString() != null) { + recipeDeviceRecordDO.setValue(data.get("addressValue").toString()); + } - recipeDeviceRecordService.createRecipeDeviceRecord(BeanUtils.toBean(recipeDeviceRecordDO, RecipeDeviceRecordSaveReqVO.class)); + recipeDeviceRecordService.createRecipeDeviceRecord(BeanUtils.toBean(recipeDeviceRecordDO, RecipeDeviceRecordSaveReqVO.class)); + } + } catch (Exception e) { + throw new RuntimeException(e); } - } catch (Exception e) { - throw new RuntimeException(e); } return success(true); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java index 76c7ab31b..f11e61677 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java @@ -98,6 +98,12 @@ public interface RecipeDeviceAttributeMapper extends BaseMapperX(list, page.getTotal()); } + + default List getList(RecipeDeviceAttributePageReqVO reqVO) { + List list = selectPageWithAttribute(null, reqVO); + return list; + } + /** * 根据配方ID查询设备属性记录 * @param recipeId 配方ID diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipeplandetail/RecipePlanDetailMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipeplandetail/RecipePlanDetailMapper.java index 142fb7184..50ab68679 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipeplandetail/RecipePlanDetailMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipeplandetail/RecipePlanDetailMapper.java @@ -41,9 +41,9 @@ public interface RecipePlanDetailMapper extends BaseMapperX " p.code AS planCode, ", // 关联mes_plan表的编码 " d.id AS deviceId ", // 新增:关联iot_device表的id作为deviceId "FROM iot_recipe_plan_detail rpd", - "LEFT JOIN iot_recipe r ON rpd.recipe_id = r.id ", // 左关联配方表(避免配方ID不存在时数据丢失) + "LEFT JOIN iot_recipe r ON rpd.recipe_id = r.id ", // 左关联配方表(避免配方ID不存在时数据丢失) "LEFT JOIN mes_plan p ON rpd.plan_id = p.id ", // 左关联计划表 - "LEFT JOIN iot_device d ON r.machine_name = d.device_name ", // 新增:左关联设备表,通过machine_name匹配device_name + "LEFT JOIN iot_device d ON r.machine_id = d.id ", // 新增:左关联设备表,通过machine_name匹配device_name "WHERE rpd.deleted = 0 ", // 过滤已删除数据 "", " AND rpd.code LIKE CONCAT('%', #{reqVO.code}, '%')", diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java index b0250e667..386c00bef 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java @@ -84,4 +84,5 @@ public interface RecipeDeviceAttributeService { */ PageResult selectPageWithAttribute(RecipeDeviceAttributePageReqVO reqVO); + List getList(RecipeDeviceAttributePageReqVO reqVO); } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java index 227719a12..04ac8d904 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java @@ -156,6 +156,13 @@ public class RecipeDeviceAttributeServiceImpl implements RecipeDeviceAttributeSe return recipeDeviceAttributeMapper.selectPageWithAttributeWrap(reqVO); } + @Override + public List getList(RecipeDeviceAttributePageReqVO reqVO) { + return recipeDeviceAttributeMapper.getList(reqVO); + + + } + // @Override // public List> operationAnalysisDetails(Long deviceId, String collectionStartTime, String collectionEndTime) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepointrecord/RecipePointRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepointrecord/RecipePointRecordServiceImpl.java index a07dbee01..7f19a6fdd 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepointrecord/RecipePointRecordServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepointrecord/RecipePointRecordServiceImpl.java @@ -37,7 +37,6 @@ public class RecipePointRecordServiceImpl implements RecipePointRecordService { recipePointRecordMapper.deleteByIds(recipePointRecordDOS); } - // 插入 RecipePointRecordDO recipePointRecord = BeanUtils.toBean(createReqVO, RecipePointRecordDO.class); recipePointRecordMapper.insert(recipePointRecord);