From 5f9bf98779e2c3e69324d75849efdda00868da4f Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 29 五月 2026 15:45:47 +0800
Subject: [PATCH] 新增智能电表、空调管理

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ConditionerBizServiceImpl.java |   69 ++++++++++++++++++++++++++--------
 1 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ConditionerBizServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ConditionerBizServiceImpl.java
index 5e2c44f..ff922bb 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ConditionerBizServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ConditionerBizServiceImpl.java
@@ -524,23 +524,8 @@
         if (!ok) {
             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), apiMsg(resp, "鏌ヨ澶辫触"));
         }
-        if (ACTION_QUERY_DL == actionType && resp.getData() != null) {
-            try {
-                BigDecimal dl = new BigDecimal(String.valueOf(resp.getData()));
-                meter.setTotalDl(dl);
-            } catch (Exception ignored) {
-            }
-        }
-        if (ACTION_QUERY_POWER == actionType && resp.getData() != null) {
-            try {
-                BigDecimal kw = new BigDecimal(String.valueOf(resp.getData()));
-                meter.setPowerKw(kw);
-            } catch (Exception ignored) {
-            }
-        }
-        meter.setLastSyncDate(new Date());
-        meterMapper.updateById(meter);
-        return "鏌ヨ鎴愬姛";
+        String syncMsg = syncMeters();
+        return "鏌ヨ鎴愬姛锛�" + syncMsg;
     }
 
     @Override
@@ -772,6 +757,9 @@
         if (StringUtils.isBlank(meter.getXyName())) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢佃〃鍗忚涓虹┖锛岃鍏堝悓姝ョ數琛�");
         }
+        if (StringUtils.isBlank(meter.getDljMac())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "澶氳仈鏈篗AC涓虹┖锛岃鍏堝悓姝ョ數琛�");
+        }
         DevControlRequest req = new DevControlRequest();
         req.fillSessionDefaults();
         req.setWg_mac(meter.getWgMac());
@@ -781,6 +769,9 @@
         JSONObject setVal = new JSONObject();
         setVal.put("db_bb", meter.getDbBb() != null ? meter.getDbBb() : 1);
         setVal.put("xy_name", meter.getXyName());
+        setVal.put("dlj_mac", meter.getDljMac());
+        setVal.put("btl", meter.getBtl() != null ? meter.getBtl() : 4);
+        setVal.put("jy", meter.getJy() != null ? meter.getJy() : 0);
         req.setSet_val(setVal);
         return req;
     }
@@ -837,16 +828,60 @@
         local.setWgId(item.getWg_id());
         local.setXyId(item.getXy_id());
         local.setXyName(item.getXy_name());
+        local.setDljMac(item.getDlj_mac());
+        local.setBtl(item.getBtl());
+        local.setJy(item.getJy());
         local.setDbBb(item.getDb_bb());
         local.setOutdoorLoop(item.getDb_rhd());
         local.setDbUptime(item.getDb_uptime());
         if (item.getDb_data() != null) {
             local.setDbData(JSON.toJSONString(item.getDb_data()));
+            BigDecimal energy = parseDbDataEnergy(item.getDb_data());
+            if (energy != null) {
+                local.setTotalDl(energy);
+            }
         }
         local.setLastSyncDate(now);
         local.setEditDate(now);
     }
 
+    private BigDecimal parseDbDataEnergy(Object dbData) {
+        if (dbData == null) {
+            return null;
+        }
+        if (dbData instanceof Number) {
+            return new BigDecimal(dbData.toString());
+        }
+        if (dbData instanceof String) {
+            String text = ((String) dbData).trim();
+            if (StringUtils.isBlank(text)) {
+                return null;
+            }
+            try {
+                return new BigDecimal(text);
+            } catch (Exception ignored) {
+                try {
+                    return parseDbDataEnergy(JSON.parse(text));
+                } catch (Exception ignored2) {
+                    return null;
+                }
+            }
+        }
+        if (dbData instanceof JSONObject) {
+            JSONObject obj = (JSONObject) dbData;
+            for (String key : Arrays.asList("dl", "dn", "total_dl", "totalDl", "db_data", "energy")) {
+                if (obj.containsKey(key) && obj.get(key) != null) {
+                    return parseDbDataEnergy(obj.get(key));
+                }
+            }
+            return null;
+        }
+        if (dbData instanceof Map) {
+            return parseDbDataEnergy(new JSONObject((Map<String, Object>) dbData));
+        }
+        return null;
+    }
+
     private void fillConditionerFromStatus(YwConditioner local, DeviceStatusResponse item,
                                            DeviceArchiveResponse archive, Date now) {
         local.setPlatformDevId(item.getDev_id());

--
Gitblit v1.9.3