| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package com.malk.tonglibo.utils;
- import com.malk.tonglibo.entity.MachineData;
- import org.springframework.stereotype.Component;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- /**
- * 功能:
- * 作者:hanxue
- * 日期:2025/10/20 9:34
- */
- @Component
- public class ChangeDetector {
- // 存储每个设备最新的数据指纹
- private final Map<String, String> lastFingerprintMap = new ConcurrentHashMap<>();
- /**
- * 判断当前数据是否为新状态(MD5 指纹不同)
- */
- public boolean isChanged(MachineData data) {
- String machineNo = data.getMachineNo();
- String fingerprint = generateFingerprint(data);
- String lastFingerprint = lastFingerprintMap.get(machineNo);
- if (lastFingerprint == null) {
- return true; // 第一次上报,算变化
- }
- return !lastFingerprint.equals(fingerprint);
- }
- /**
- * 记录当前指纹为最新状态
- */
- public void recordAsCurrent(String machineNo, String fingerprint) {
- lastFingerprintMap.put(machineNo, fingerprint);
- }
- String concatFields(MachineData data) {
- return new StringBuilder()
- .append(defaultString(data.getJqyxsh()))
- .append(defaultString(data.getZcn()))
- .append(defaultString(data.getZqsj()))
- .append(defaultString(data.getSgdyl()))
- .append(defaultString(data.getXgdyl()))
- .append(defaultString(data.getYskqyl1()))
- .append(defaultString(data.getYskqyl2()))
- .append(defaultString(data.getZymwd1()))
- .append(defaultString(data.getZymwd2()))
- .append(defaultString(data.getZymwd3()))
- .append(defaultString(data.getZymwd4()))
- .append(defaultString(data.getSmwd1()))
- .append(defaultString(data.getSmwd2()))
- .append(defaultString(data.getSmwd3()))
- .append(defaultString(data.getSmwd4()))
- .append(defaultString(data.getXmwd1()))
- .append(defaultString(data.getXmwd2()))
- .append(defaultString(data.getXmwd3()))
- .append(defaultString(data.getXmwd4()))
- .append(defaultString(data.getXjsj()))
- .append(defaultString(data.getTssj()))
- .append(defaultString(data.getZysj()))
- .append(defaultString(data.getDn()))
- .toString();
- }
- private String generateFingerprint(MachineData data) {
- String content = concatFields(data);
- return MD5Util.md5(content);
- }
- private String defaultString(String str) {
- return str == null ? "" : str;
- }
- }
|