|
|
@@ -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 @@ import java.util.Map;
|
|
|
@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 @@ public class RuleDaoImpl extends BaseServiceDao implements IRuleDao {
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询 rule_entrance表信息
|
|
|
+ *
|
|
|
+ * 这里逻辑,首先从ehCache 中获取数据,如果没有缓存,则校验redis中是否存在,如果不存在从数据库中查询,然后保存至redis中,
|
|
|
+ * 自动缓存到ehcache 中(默认是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");
|
|
|
+ //将 数据缓存至redis中
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ //将 数据缓存至redis中
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|