diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/cache/CacheController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/cache/CacheController.java index 27c3fdb..ac0d2c7 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/cache/CacheController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/cache/CacheController.java @@ -11,7 +11,9 @@ import com.jfinal.aop.Clear; import com.jfinal.core.Controller; import com.jfinal.plugin.activerecord.Record; +import java.text.DateFormat; import java.util.Date; +import java.util.HashMap; import java.util.Map; @Clear(AuthInterceptor.class) @@ -19,7 +21,7 @@ public class CacheController extends Controller { /** * 重新加载本地数据库缓存到内存 */ - public void reload(){ + public void reload() { SupermarketSyncService.me.initSupCache(); TransportCompanyService.me.initTransCoPriceModulus(); // 初始化物流公司价格系数配置 @@ -30,11 +32,20 @@ public class CacheController extends Controller { renderJson(Result.success("重新加载完成")); } - public void last(){ - Record out = new Record(); - for(Map.Entry entry : SvrCacheData.SUP_HEARTBEAT.entrySet()){ - out.set(String.valueOf(entry.getKey()), DateTimeUtil.sdfhms.get().format(new Date(entry.getValue()))); + public void last() { + Map map = new HashMap<>(); + + for (Map.Entry entry : SvrCacheData.SUP_HEARTBEAT.entrySet()) { + Record c = entry.getValue(); + Record out = new Record(); + out.set("version", c.get("version")); + + if (c.get("tm") != null) { + out.set("tm", DateTimeUtil.sdfhms.get().format(new Date(c.getLong("tm")))); + } + + map.put(entry.getKey(), out); } - renderJson(out); + renderJson(map); } } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java index 26a4852..768d259 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java @@ -1,11 +1,12 @@ package com.cowr.service.ssjygl.main; import com.cowr.model.Supermarket; +import com.jfinal.plugin.activerecord.Record; import java.util.HashMap; import java.util.Map; public class SvrCacheData { public static Map SUP_CACHE = new HashMap<>(); // 砂站基础信息缓存,常用配置数据,避免重复请求数据库 - public static Map SUP_HEARTBEAT = new HashMap<>(); // 砂站客户端心跳时间戳 + public static Map SUP_HEARTBEAT = new HashMap<>(); // 砂站客户端心跳时间戳 } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java index 7deea3c..4410698 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java @@ -6,6 +6,7 @@ import com.cowr.model.Supermarket; import com.cowr.service.ssjygl.main.SvrCacheData; import com.cowr.service.ssjygl.synctask.SyncTaskService; import com.jfinal.log.Log; +import com.jfinal.plugin.activerecord.Record; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; @@ -185,18 +186,29 @@ public class NettyServer { .toJSONString() ); + // 只保存有效 supermarket_id + if (SvrCacheData.SUP_CACHE.containsKey(supermarket_id)) { + if (!SvrCacheData.SUP_HEARTBEAT.containsKey(supermarket_id)) { + SvrCacheData.SUP_HEARTBEAT.put(supermarket_id, new Record()); + } + + SvrCacheData.SUP_HEARTBEAT.get(supermarket_id).set("version", json.get("clinet_version")); + } + log.debug("supermarket_id %s 注册成功, client version %s", supermarket_id, json.get("clinet_version")); } else if (Enums.MsgTarget.HEARTBEAT.name().equals(target)) { printlog("收到心跳 supermarket " + map.get(ctx.channel()) + ", 已连接客户端总数: " + map.size()); - if(map.containsKey(ctx.channel())){ + if (map.containsKey(ctx.channel())) { Integer supermarket_id = map.get(ctx.channel()); - if(SvrCacheData.SUP_CACHE.containsKey(supermarket_id)){ - Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id); + // 只保存有效 supermarket_id + if (SvrCacheData.SUP_CACHE.containsKey(supermarket_id)) { + if (!SvrCacheData.SUP_HEARTBEAT.containsKey(supermarket_id)) { + SvrCacheData.SUP_HEARTBEAT.put(supermarket_id, new Record()); + } - // 只保存有效 supermarket_id - SvrCacheData.SUP_HEARTBEAT.put(supermarket.getId(), System.currentTimeMillis()); + SvrCacheData.SUP_HEARTBEAT.get(supermarket_id).set("tm", System.currentTimeMillis()); } } } else if (Enums.MsgTarget.SYNCTASK.name().equals(target)) {