From efd6693d8dd75a6c3e53f54bda4eb7ed7e51d51e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=ABUmbrella?= <2539020564@qq.com> Date: Sat, 18 Apr 2026 18:51:19 +0800 Subject: [PATCH] =?UTF-8?q?mes=E6=8E=A5=E5=8F=A3=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quality/pojo/entity/QcHardnessIot.java | 2 +- .../pojo/entity/QcWithstandVoltageIot.java | 2 +- .../iot/controller/IotWebApiController.java | 6 +- .../impl/MesQcProduceRunServiceImpl.java | 2 +- .../quality/mapper/IotThicknessMapper.java | 9 ++ .../quality/mapper/IotThicknessMapper.xml | 7 + .../quality/mapper/QcHardnessIotMapper.xml | 4 +- .../quality/mapper/QcThicknessIotMapper.xml | 2 +- .../mapper/QcWithstandVoltageIotMapper.xml | 2 +- .../quality/service/IIotThicknessService.java | 8 + .../service/impl/IotThicknessServiceImpl.java | 26 ++++ .../impl/QcHardnessIotServiceImpl.java | 145 ++++++------------ 12 files changed, 109 insertions(+), 106 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcHardnessIot.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcHardnessIot.java index bc94d713..8ee26500 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcHardnessIot.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcHardnessIot.java @@ -30,7 +30,7 @@ public class QcHardnessIot implements Serializable { /** * 主键ID */ - @TableId(value = "QH_ID", type = IdType.AUTO) + @TableId(value = "QH_ID", type = IdType.ASSIGN_ID) @Schema(description = "主键ID") private Long qhId; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcWithstandVoltageIot.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcWithstandVoltageIot.java index 7eda6c31..f2ccf121 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcWithstandVoltageIot.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/QcWithstandVoltageIot.java @@ -30,7 +30,7 @@ public class QcWithstandVoltageIot implements Serializable { /** * 主键ID */ - @TableId(value = "QW_ID", type = IdType.AUTO) + @TableId(value = "QW_ID", type = IdType.ASSIGN_ID) @Schema(description = "主键ID") private Long qwId; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/controller/IotWebApiController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/controller/IotWebApiController.java index 8cb41c0d..27923fd8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/controller/IotWebApiController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/controller/IotWebApiController.java @@ -12,7 +12,7 @@ import org.springblade.desk.basic.pojo.entity.BasicClazz; import org.springblade.desk.basic.service.IBasicClazzService; import org.springblade.desk.iot.setvice.IEpLineElectricService; import org.springblade.desk.quality.service.IQcHardnessIotService; -import org.springblade.desk.quality.service.IQcThicknessIotService; +import org.springblade.desk.quality.service.IIotThicknessService; import org.springblade.desk.quality.service.IQcWithstandVoltageIotService; import org.springframework.web.bind.annotation.*; @@ -28,7 +28,7 @@ public class IotWebApiController { private final IEpLineElectricService lineElectricService; private final IBasicClazzService bsBasicClassService; - private final IQcThicknessIotService qcThicknessIotService; + private final IIotThicknessService iotThicknessService; private final IQcHardnessIotService qcHardnessIotService; private final IQcWithstandVoltageIotService qcWithstandVoltageIotService; @@ -61,7 +61,7 @@ public class IotWebApiController { if (data == null || data.isEmpty()) { throw new ServiceException("参数传递异常!"); } - qcThicknessIotService.pushThickness(data); + iotThicknessService.pushThickness(data); return R.success(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java index 8aec9886..41b3c39f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java @@ -75,7 +75,7 @@ public class MesQcProduceRunServiceImpl extends BaseServiceImpl> mtuList = macToolUseMapper.listAllByNoFinished(); if (mtuList == null || mtuList.isEmpty()) { return; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.java index 38fd5479..c505d66b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.java @@ -37,4 +37,13 @@ public interface IotThicknessMapper extends BaseMapper { * @return List */ List exportIotThickness(@Param("ew") Wrapper queryWrapper); + + /** + * 根据设备编码和文件时间查询记录(去重) + * + * @param equipmentCode 设备编码 + * @param filetime 文件时间 + * @return IotThickness + */ + IotThickness getByEquipmentAndFiletime(@Param("equipmentCode") String equipmentCode, @Param("filetime") String filetime); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.xml index 653c9a6e..c78789a4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/IotThicknessMapper.xml @@ -29,4 +29,11 @@ SELECT * FROM QA_IOT_THICKNESS ${ew.customSqlSegment} + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcHardnessIotMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcHardnessIotMapper.xml index 4903aaa3..50f4a7ce 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcHardnessIotMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcHardnessIotMapper.xml @@ -18,10 +18,10 @@ \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcThicknessIotMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcThicknessIotMapper.xml index 20645eda..a7cf2677 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcThicknessIotMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcThicknessIotMapper.xml @@ -24,7 +24,7 @@ SELECT QT_ID, DEVICE_CODE, FILETIME, DATA_CONTENT, CREATE_TIME, NOT_USE FROM QC_THICKNESS_IOT WHERE DEVICE_CODE = #{deviceCode} AND FILETIME = #{filetime} - FETCH FIRST 1 ROWS ONLY + AND ROWNUM <= 1 \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcWithstandVoltageIotMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcWithstandVoltageIotMapper.xml index ed9f9040..a7115ca2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcWithstandVoltageIotMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/QcWithstandVoltageIotMapper.xml @@ -20,7 +20,7 @@ SELECT QW_ID, DEVICE_CODE, WO_CODE, TEST_TIME, CUR_CONTENT, RES_RANGE, CREATE_TIME, IS_READ FROM QC_WITHSTAND_VOLTAGE_IOT WHERE WO_CODE = #{woCode} - FETCH FIRST 1 ROWS ONLY + AND ROWNUM <= 1 \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IIotThicknessService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IIotThicknessService.java index 7d7afdd0..65985653 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IIotThicknessService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IIotThicknessService.java @@ -3,6 +3,7 @@ */ package org.springblade.desk.quality.service; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; @@ -41,4 +42,11 @@ public interface IIotThicknessService extends BaseService { * @param vo */ void setVOValue(IotThicknessVO vo); + + /** + * iot系统推送测厚数据 + * + * @param data 推送数据 + */ + void pushThickness(JSONObject data); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/IotThicknessServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/IotThicknessServiceImpl.java index dba54c09..e6466107 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/IotThicknessServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/IotThicknessServiceImpl.java @@ -3,6 +3,7 @@ */ package org.springblade.desk.quality.service.impl; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; @@ -58,4 +59,29 @@ public class IotThicknessServiceImpl extends BaseServiceImpl implements IQcHardnessIotService { @Override + @SuppressWarnings("unchecked") public void pushHardness(JSONArray dataArray) { - // 存储需要的字段:hardnessValue列表、IP、deviceCode - List hardnessValues = new ArrayList<>(); - List ipList = new ArrayList<>(); - List deviceCodeList = new ArrayList<>(); - - // 遍历数组提取所需数据 for (Object obj : dataArray) { - if (!(obj instanceof JSONObject)) { - log.error("数组中包含非JSON对象元素: {}", obj); + JSONObject data; + if (obj instanceof JSONObject) { + data = (JSONObject) obj; + } else if (obj instanceof java.util.Map) { + data = new JSONObject((java.util.Map) obj); + } else { + log.error("数组中包含不支持类型的元素: {}", obj); continue; } - JSONObject data = (JSONObject) obj; - // 提取largeEquipment对象 - JSONObject largeEquipment = data.getJSONObject("largeEquipment"); - if (largeEquipment == null) { - log.warn("未找到largeEquipment字段,跳过当前数据: {}", data); - continue; - } - - // 提取deviceCode并添加到列表 - String deviceCode = largeEquipment.getString("deviceCode"); - if (StringUtils.isNotBlank(deviceCode)) { - deviceCodeList.add(deviceCode); - } - - // 提取IP并添加到列表 - String ip = largeEquipment.getString("IP"); - if (StringUtils.isNotBlank(ip)) { - ipList.add(ip); - } + String deviceCode = data.getString("Equipment_code"); + String batchNo = data.getString("Batch_number"); + String testTime = data.getString("Test_time"); - // 提取parameter_Values中的hardnessValue - JSONArray paramValuesArray = largeEquipment.getJSONArray("parameter_Values"); - if (paramValuesArray == null) { - log.warn("parameter_Values字段为空,跳过当前数据"); + if (StringUtils.isBlank(deviceCode)) { + log.warn("未获取到有效设备编码,跳过当前数据"); continue; } - // 遍历每个参数值字符串,解析JSON并提取hardnessValue - for (Object paramValObj : paramValuesArray) { - String paramValStr = paramValObj.toString(); - try { - JSONObject paramValJson = JSONObject.parseObject(paramValStr); - Double hardnessValue = paramValJson.getDouble("hardnessValue"); - if (hardnessValue != null) { - hardnessValues.add(hardnessValue); + // 提取Parameter_values并格式化为 "name:value unit" 形式 + JSONArray paramValues = data.getJSONArray("Parameter_values"); + List paramStrList = new ArrayList<>(); + if (paramValues != null) { + for (Object pvObj : paramValues) { + JSONObject pv; + if (pvObj instanceof JSONObject) { + pv = (JSONObject) pvObj; + } else if (pvObj instanceof java.util.Map) { + pv = new JSONObject((java.util.Map) pvObj); } else { - log.warn("当前参数中未找到hardnessValue: {}", paramValStr); + continue; } - } catch (Exception e) { - log.error("解析parameter_Values元素失败: {},错误信息: {}", paramValStr, e.getMessage(), e); + String paramName = pv.getString("Parameter_name"); + String paramValue = pv.getString("Parameter_value"); + String paramUnit = pv.getString("Parameter_unit"); + paramStrList.add(paramName + ":" + paramValue + " " + paramUnit); } } - } - - // 处理合并后的数据 - processMergedData(deviceCodeList, ipList, hardnessValues); - } + String formattedParams = String.join(", ", paramStrList); - /** - * 处理合并后的三个列表数据 - */ - private void processMergedData(List deviceCodeList, List ipList, List hardnessValues) { - // 获取核心字段 - String deviceCode = deviceCodeList.isEmpty() ? "" : deviceCodeList.get(0); - String ip = ipList.isEmpty() ? "" : ipList.get(0); - - if (StringUtils.isBlank(deviceCode)) { - log.warn("未获取到有效设备编码,终止数据处理"); - return; - } - - // 格式化hardnessValue为"hv 值1-值2-值3"格式 - String formattedHardness; - if (hardnessValues.isEmpty()) { - formattedHardness = "hv "; - log.warn("未提取到任何hardnessValue值"); - } else { - List hardnessStrList = new ArrayList<>(); - for (Double hv : hardnessValues) { - hardnessStrList.add(String.valueOf(hv)); + // 数据去重检查 + QcHardnessIot duplicateData = baseMapper.getDataByDeviceCodeAndDataContent(deviceCode, data.toJSONString()); + if (duplicateData != null) { + log.info("已存在相同设备编码+相同硬度数据的记录,无需重复存储: deviceCode={}", deviceCode); + continue; } - formattedHardness = "hv " + String.join("-", hardnessStrList); - } - // 构建存储的JSON对象 - JSONObject formattedJson = new JSONObject(); - formattedJson.put("formatted_hardness", formattedHardness); - String dataContentStr = formattedJson.toJSONString(); - - // 数据去重检查 - QcHardnessIot duplicateData = baseMapper.getDataByDeviceCodeAndDataContent(deviceCode, dataContentStr); - if (duplicateData != null) { - log.info("已存在相同设备编码+相同硬度数据的记录,无需重复存储"); - return; + // 将同设备编码下所有未读记录标记为超时未读 + baseMapper.updateAllToRead(deviceCode); + + // 新增记录 + QcHardnessIot entity = new QcHardnessIot(); + entity.setCreateTime(new Date()); + entity.setNotUse(2); + entity.setDataContent(data.toJSONString()); + entity.setDeviceCode(deviceCode); + entity.setBatchNo(batchNo); + entity.setFiletime(testTime); + entity.setIsRead(0); + save(entity); + + log.info("新增硬度数据成功,设备编码:{},批次号:{},检测时间:{},参数:{}", deviceCode, batchNo, testTime, formattedParams); } - - // 将同设备编码下所有未读记录标记为超时未读 - baseMapper.updateAllToRead(deviceCode); - - // 新增记录 - QcHardnessIot entity = new QcHardnessIot(); - entity.setCreateTime(new Date()); - entity.setNotUse(2); - entity.setDataContent(dataContentStr); - entity.setDeviceCode(deviceCode); - entity.setIp(ip); - entity.setIsRead(0); - save(entity); - - log.info("新增硬度数据成功,设备编码:{},IP:{},格式化硬度值:{}", deviceCode, ip, formattedHardness); } } \ No newline at end of file