result = new ArrayList<>(entries.size());
+ for (Object value : entries.values()) {
+ if (value != null) {
+ result.add(JSONUtil.toBean(value.toString(), MallDeliveryOrder.class));
+ }
+ }
+ return result;
+ } catch (Exception e) {
+ log.error("鑾峰彇閰嶉佸憳鍏ㄩ儴璁㈠崟缂撳瓨澶辫触: workerId={}", workerId, e);
+ return Collections.emptyList();
+ }
+ }
+
// ================================================================
// 鍐呴儴宸ュ叿
// ================================================================
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/WorkerRedisCacheUtil.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/WorkerRedisCacheUtil.java
new file mode 100644
index 00000000..46715b0e
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/WorkerRedisCacheUtil.java
@@ -0,0 +1,244 @@
+package cc.hiver.mall.utils;
+
+import cc.hiver.core.common.redis.RedisTemplateHelper;
+import cc.hiver.mall.pojo.vo.WorkerRedisVo;
+import cn.hutool.json.JSONUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 閰嶉佸憳淇℃伅缂撳瓨宸ュ叿绫
+ *
+ * 搴曞眰浣跨敤 Redis Hash 缁撴瀯锛屼繚璇佹寜 regionId + workerId 缁村害鐨 O(1) 璇诲啓鏁堢巼銆
+ *
+ * Key = WORKER_REDIS:{regionId}
+ * Field = workerId
+ * Value = WorkerRedisVo 鐨 JSON 搴忓垪鍖
+ *
+ *
+ * 浣跨敤鍦烘櫙锛氱姸鎬佸彂鐢熷彉鍖栨椂锛堝垱寤恒佹洿鏂般佸彇娑堛佸畬鎴愮瓑锛夛紝
+ *
+ * @author system
+ */
+@Slf4j
+@Component
+public class WorkerRedisCacheUtil {
+
+ /** Redis Key 鍓嶇紑 */
+ private static final String KEY_PREFIX = "WORKER_REDIS:";
+
+ @Autowired
+ private RedisTemplateHelper redisTemplateHelper;
+
+ // ================================================================
+ // Key 鏋勫缓
+ // ================================================================
+
+ private String buildKey(String regionId) {
+ return KEY_PREFIX + regionId;
+ }
+
+ // ================================================================
+ // 瀛樻斁锛坧ut锛
+ // ================================================================
+
+ /**
+ * 瀛樻斁鍗曚釜鍒扮紦瀛
+ *
+ * @param regionId 鍖哄煙ID
+ * @param workerVO VO锛堝繀椤诲寘鍚湁鏁堢殑 id锛
+ */
+ public void put(String regionId, WorkerRedisVo workerVO) {
+ if (StringUtils.isBlank(regionId) || workerVO == null || StringUtils.isBlank(workerVO.getWorkerId())) {
+ log.info("WorkerRedisCacheUtil.put 鍙傛暟鏃犳晥, workerId={}, workerVO={}", regionId, workerVO);
+ return;
+ }
+ try {
+ String key = buildKey(regionId);
+ String json = JSONUtil.toJsonStr(workerVO);
+ redisTemplateHelper.hPut(key, workerVO.getWorkerId(), json);
+ log.info("缂撳瓨閰嶉佸憳: regionId={}, workerId={}", regionId, workerVO.getWorkerId());
+ } catch (Exception e) {
+ log.info("缂撳瓨閰嶉佸憳澶辫触: regionId={}, workerId={}", regionId, workerVO.getWorkerId(), e);
+ }
+ }
+
+ /**
+ * 鑾峰彇鍖哄煙鎵鏈夊湪绾块厤閫佸憳
+ *
+ * @param regionId
+ * @return
+ */
+ public List getAll(String regionId) {
+ if (StringUtils.isBlank(regionId)) {
+ return null;
+ }
+ try {
+ String key = buildKey(regionId);
+ Map