|
|
|
|
@ -34,118 +34,71 @@ import java.util.List; |
|
|
|
|
public class QcHardnessIotServiceImpl extends ServiceImpl<QcHardnessIotMapper, QcHardnessIot> implements IQcHardnessIotService { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
|
public void pushHardness(JSONArray dataArray) { |
|
|
|
|
// 存储需要的字段:hardnessValue列表、IP、deviceCode
|
|
|
|
|
List<Double> hardnessValues = new ArrayList<>(); |
|
|
|
|
List<String> ipList = new ArrayList<>(); |
|
|
|
|
List<String> 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<String, Object>) 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<String> 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<String, Object>) 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<String> deviceCodeList, List<String> ipList, List<Double> 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<String> 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); |
|
|
|
|
} |
|
|
|
|
} |