From 00a9bbf99abf3ecc343e501730826f5209de47e2 Mon Sep 17 00:00:00 2001
From: wuxw7 <wuxw7@asiainfo.com>
Date: 星期一, 24 七月 2017 00:50:07 +0800
Subject: [PATCH] 加入redis 和 ehcache 缓存系统,规则引擎服务彻底完工

---
 RuleService/src/main/java/com/java110/rule/dao/impl/RuleDaoImpl.java |  158 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 155 insertions(+), 3 deletions(-)

diff --git a/RuleService/src/main/java/com/java110/rule/dao/impl/RuleDaoImpl.java b/RuleService/src/main/java/com/java110/rule/dao/impl/RuleDaoImpl.java
index 0897794..6688101 100644
--- a/RuleService/src/main/java/com/java110/rule/dao/impl/RuleDaoImpl.java
+++ b/RuleService/src/main/java/com/java110/rule/dao/impl/RuleDaoImpl.java
@@ -1,13 +1,19 @@
 package com.java110.rule.dao.impl;
 
+import com.java110.common.constant.RuleDomain;
+import com.java110.common.util.SerializeUtil;
 import com.java110.core.base.dao.BaseServiceDao;
+import com.java110.entity.rule.Rule;
+import com.java110.entity.rule.RuleCondCfg;
+import com.java110.entity.rule.RuleEntrance;
 import com.java110.rule.dao.IRuleDao;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+import redis.clients.jedis.Jedis;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Created by wuxw on 2017/7/23.
@@ -16,6 +22,8 @@
 @Service("ruleDaoImpl")
 @Transactional
 public class RuleDaoImpl extends BaseServiceDao implements IRuleDao {
+
+
     @Override
     public List<Map<String, String>> executeSql(String sql) throws Exception {
         return sqlSessionTemplate.selectList("ruleDaoImpl.executeSql",sql);
@@ -46,4 +54,148 @@
         }
         return null;
     }
+
+    /**
+     * 鏌ヨ rule_entrance琛ㄤ俊鎭�
+     *
+     * 杩欓噷閫昏緫锛岄鍏堜粠ehCache 涓幏鍙栨暟鎹紝濡傛灉娌℃湁缂撳瓨锛屽垯鏍¢獙redis涓槸鍚﹀瓨鍦紝濡傛灉涓嶅瓨鍦ㄤ粠鏁版嵁搴撲腑鏌ヨ锛岀劧鍚庝繚瀛樿嚦redis涓紝
+     * 鑷姩缂撳瓨鍒癳hcache 涓紙榛樿鏄�10鍒嗛挓锛�
+     * @return
+     * @throws Exception
+     */
+    @Override
+    @Cacheable(key=RuleDomain.REDIS_KEY_RULE_ENTRANCE)
+    public Map<String, RuleEntrance> getRuleEntranceMap() throws Exception {
+
+        Jedis jedis = jedisPool.getResource();
+
+        Map map = new HashMap();
+
+        List<RuleEntrance> list = null;
+
+        if(jedis.exists(RuleDomain.REDIS_KEY_RULE_ENTRANCE.getBytes())){
+            list =  SerializeUtil.unserializeList(jedis.get(RuleDomain.REDIS_KEY_RULE_ENTRANCE.getBytes()),RuleEntrance.class);
+        }else{
+            list = sqlSessionTemplate.selectList("ruleDaoImpl.getRuleEntranceMap");
+            //灏� 鏁版嵁缂撳瓨鑷硆edis涓�
+
+            jedis.set(RuleDomain.REDIS_KEY_RULE_ENTRANCE.getBytes(),SerializeUtil.serializeList(list));
+        }
+
+        if (null != list && !list.isEmpty()) {
+            RuleEntrance ruleEntrance = null;
+            for (int ruleEntranceIndex = 0;ruleEntranceIndex< list.size();ruleEntranceIndex++) {
+                ruleEntrance =  list.get(ruleEntranceIndex);
+                map.put(String.valueOf(ruleEntranceIndex), ruleEntrance);
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 鍒濆鍖栦笟鍔¤鍒欏垎缁勫拰缂栫爜鏄犲皠鍏宠仈鍏崇郴淇℃伅
+     * @return
+     * @throws Exception
+     */
+    @Override
+    @Cacheable(key=RuleDomain.REDIS_KEY_RULE_GROUP)
+    public List getRuleGroupRelaList() throws Exception {
+        List saopRuleGroupRelaList = new ArrayList();
+
+        Jedis jedis = jedisPool.getResource();
+
+        if(jedis.exists(RuleDomain.REDIS_KEY_RULE_ENTRANCE.getBytes())){
+            saopRuleGroupRelaList =  SerializeUtil.unserializeList(jedis.get(RuleDomain.REDIS_KEY_RULE_GROUP.getBytes()),Map.class);
+        }else {
+            //鏌ヨ鍏ㄩ儴涓氬姟瑙勫垯鍒嗙粍淇℃伅
+            List allSaopRuleGroupInfoList = sqlSessionTemplate.selectList("ruleDaoImpl.querySaopRuleGroupMap");
+
+            //涓氬姟鍒嗙粍鍜岀紪鐮佹槧灏勫叧绯婚泦鍚�
+            List allsaopRuleGroupRelaInfoList = sqlSessionTemplate.selectList("ruleDaoImpl.querySaopRuleGroupRelaMap");
+
+            int allSaopRuleGroupInfoListSize = allSaopRuleGroupInfoList.size();
+            int allsaopRuleGroupRelaInfoListSize = allsaopRuleGroupRelaInfoList.size();
+
+            if (allSaopRuleGroupInfoListSize > 0 && allsaopRuleGroupRelaInfoListSize > 0) {
+                for (int i = 0; i < allSaopRuleGroupInfoListSize; i++) {
+                    //姣忎釜涓氬姟瑙勫垯鍒嗙粍椤�
+                    Map saopRuleGroupMap = (Map) allSaopRuleGroupInfoList.get(i);
+                    if (null == saopRuleGroupMap || null == saopRuleGroupMap.get("groupId")) {
+                        continue;
+                    }
+
+                    //褰撳墠瑙勫垯鍒嗙粍缂栫爜
+                    String curRuleGroupId = String.valueOf(saopRuleGroupMap.get("groupId"));
+
+                    //褰撳墠涓氬姟瑙勫垯鍒嗙粍涓嬬殑瑙勫垯缂栫爜闆嗗悎
+                    List ruleIdList = new ArrayList();
+                    saopRuleGroupMap.put("ruleIdList", ruleIdList);
+
+                    for (int j = 0; j < allsaopRuleGroupRelaInfoListSize; j++) {
+                        Map saopRuleGroupRelaMap = (Map) allsaopRuleGroupRelaInfoList.get(j);
+                        if (null == saopRuleGroupRelaMap || null == saopRuleGroupRelaMap.get("groupId")) {
+                            continue;
+                        }
+
+                        //褰撳墠瑙勫垯鍒嗙粍缂栫爜
+                        String ruleRelaGroupId = String.valueOf(saopRuleGroupRelaMap.get("groupId"));
+
+                        if (curRuleGroupId.equals(ruleRelaGroupId)) {
+                            //鑾峰彇瑙勫垯缂栫爜
+                            String ruleId = "";
+                            if (null != saopRuleGroupRelaMap.get("rule_id")) {
+                                ruleId = String.valueOf(saopRuleGroupRelaMap.get("rule_id"));
+                            }
+
+                            if (!StringUtils.isEmpty(ruleId)) {
+                                ruleIdList.add(ruleId);
+                            }
+                        }
+                    }
+                }
+
+                saopRuleGroupRelaList = allSaopRuleGroupInfoList;
+
+                jedis.set(RuleDomain.REDIS_KEY_RULE_ENTRANCE.getBytes(),SerializeUtil.serializeList(saopRuleGroupRelaList));
+            }
+        }
+
+
+        return saopRuleGroupRelaList;
+    }
+
+    @Override
+    @Cacheable(key=RuleDomain.REDIS_KEY_RULE)
+    public Map<String, Rule> getRuleMap() throws Exception {
+
+        Jedis jedis = jedisPool.getResource();
+
+        List<Rule> ruleList = null;
+
+        Map map = new HashMap();
+
+        if(jedis.exists(RuleDomain.REDIS_KEY_RULE.getBytes())){
+            ruleList =  SerializeUtil.unserializeList(jedis.get(RuleDomain.REDIS_KEY_RULE.getBytes()),Rule.class);
+        }else{
+            ruleList = sqlSessionTemplate.selectList("ruleDaoImpl.queryRule");
+            for (Rule rule : ruleList) {
+                String ruleId = rule.getRule_id();
+                List<RuleCondCfg> ruleCondCfgList = sqlSessionTemplate.selectList("ruleDaoImpl.queryRuleCondCfg", ruleId);
+                rule.setRuleCondCfgs(ruleCondCfgList);
+            }
+            //灏� 鏁版嵁缂撳瓨鑷硆edis涓�
+
+            jedis.set(RuleDomain.REDIS_KEY_RULE.getBytes(),SerializeUtil.serializeList(ruleList));
+        }
+
+        if (null != ruleList && !ruleList.isEmpty()) {
+            Rule rule = null;
+            for (Iterator i = ruleList.iterator(); i.hasNext();) {
+                rule = (Rule) i.next();
+                map.put(rule.getRule_id(), rule);
+            }
+        }
+
+        return map;
+    }
 }

--
Gitblit v1.8.0