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