From b8f7e58b5c626987816335889c96a25a697bf7e9 Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 24 Oct 2021 00:16:16 +0800
Subject: [PATCH] Merge branch 'score_shop' into api_score_meger

---
 zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java |   82 +++++++++++++--------------
 zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java     |    8 ++
 zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java       |   85 +++++++++++++++++++---------
 3 files changed, 105 insertions(+), 70 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java b/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
index 90acb1a..caf92b3 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/actions/DeveloperAction.java
@@ -3,6 +3,7 @@
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.web.BaseAction;
+import com.matrix.system.common.init.InitWebContainer;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -73,4 +74,11 @@
 		return new AjaxResult(AjaxResult.STATUS_SUCCESS, "debug模式开启");
 	}
 
+	@RequestMapping("/getLocalCache")
+	public @ResponseBody AjaxResult getLocalCache(String key) {
+		Object cache=InitWebContainer.getLocalCache(key);
+		return AjaxResult.buildSuccessInstance(cache);
+	}
+
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java b/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
index 6f04363..29faf3a 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/init/InitWebContainer.java
@@ -1,32 +1,46 @@
 package com.matrix.system.common.init;
 
-import com.matrix.core.constance.MatrixConstance;
-import com.matrix.core.tools.LogUtil;
-import com.matrix.system.common.bean.SysCompany;
-import com.matrix.system.common.dao.SysCompanyDao;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.context.ServletContextAware;
-
-import javax.servlet.ServletContext;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.servlet.ServletContext;
+
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.core.tools.WebUtil;
+import com.matrix.system.common.bean.SysCompany;
+import com.matrix.system.common.service.SysCompanyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.context.ServletContextAware;
+
+import com.matrix.core.constance.MatrixConstance;
 
 /**
- * 
+ *
  *  初始化web容器的类 一些网站启动需要加载的数据和方法在这里配置和执行
  * @author:姜友瑶
  * @date 2016年10月18日
  */
-@Controller
-public class InitWebContainer   implements ServletContextAware{
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class InitWebContainer   implements ApplicationRunner {
+
+
+	private static ConcurrentMap<String,Object> localCache=new ConcurrentHashMap(60);
 
 	private static final String TRUE = "true";
-
-	private ServletContext servletContext;
 
 	static private final String LANGUAGE_ZH = "zh";
 
@@ -35,8 +49,7 @@
 
 
 	@Autowired
-	private SysCompanyDao sysCompanyDao;
-
+	private SysCompanyService sysCompanyService;
 
 
 
@@ -50,27 +63,25 @@
 	private String systemLanguage;
 
 	/**
-	 * 
+	 *
 	 *  容器启动后加载数据
 	 * @author:姜友瑶
-	 * @param sc
 	 * @date 2016年10月18日
 	 */
 	@Override
-	public void setServletContext(ServletContext sc) {
-		this.servletContext = sc;
+	public void run(ApplicationArguments args) {
 
 		// 初始化调试模式
 		initDebug();
 		// 初始化语言环境
 		initLanguage();
 		//初始化公司
-		//initParams();
+		initParams();
 		LogUtil.info("\r\n\r\n**********************************************\r\n"
-				+ "* =========== Matrix启动成功 ===========\r\n" 
+				+ "* =========== 成功 ===========\r\n"
 				+ "* DEBUG模式:" + debug+"*\r\n"
 				+ "* 语言环境:" + Locale.getDefault().getLanguage()+"\r\n"
-			 
+
 				+ "**********************************************\r\n");
 	}
 
@@ -84,7 +95,7 @@
 
 	/**
 	 * 初始化语言环境,默认为中文
-	 * 
+	 *
 	 * @author JIANGYOUYAO
 	 * @email 935090232@qq.com
 	 * @date 2017年11月30日
@@ -110,15 +121,35 @@
 	public  void initParams() {
 
 		//初始化所有的公司
-		List<SysCompany> company=sysCompanyDao.selectAll();
+		List<SysCompany> company=sysCompanyService.findByModel(null);
 		Map<String, SysCompany> companyMap=new HashMap<>();
 		for (SysCompany sysCompany : company) {
 			companyMap.put(sysCompany.getComWebUrl(), sysCompany);
 		}
-		servletContext.setAttribute("companyMap", companyMap);
+		saveLocalCache("companyMap", companyMap);
 	}
 
 
+	/**
+	 * 获取本地缓存
+	 * @param key
+	 * @param <T>
+	 * @return
+	 */
+	public static <T> T getLocalCache(String key){
+		return (T)localCache.get(key);
+	}
+
+	/**
+	 * 保存一个本地缓存
+	 * @param key
+	 * @param value
+	 */
+	public static void saveLocalCache(String key,Object value){
+		if(null!=localCache.put(key,value)){
+			LogUtil.debug("覆盖原有缓存{}",key);
+		}
+	}
 
 
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java b/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
index 7c441ef..d377706 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/interceptor/HostInterceptor.java
@@ -1,8 +1,10 @@
 package com.matrix.system.common.interceptor;
 
 import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.StringUtils;
 import com.matrix.core.tools.WebUtil;
 import com.matrix.system.common.bean.SysCompany;
+import com.matrix.system.common.init.InitWebContainer;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@@ -15,6 +17,7 @@
 
 /**
  * 域名与公司对应绑定拦截
+ *
  * @author JIANGYOUYAO
  * @email 935090232@qq.com
  * @date 2017年11月29日
@@ -23,55 +26,48 @@
 public class HostInterceptor extends HandlerInterceptorAdapter {
 
 
-	public static final String ATTR_COMPANY = "company";
+    public static final String ATTR_COMPANY = "company";
 
-	@Override
-	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
-			throws Exception {
-	}
+    @Override
+    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
+            throws Exception {
+    }
 
-	/**
-	 * 通用拦截器
-	 */
-	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
-		SysCompany company= WebUtil.getSessionAttribute(ATTR_COMPANY);
+    /**
+     * 通用拦截器
+     */
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
 
-		if (company != null) {
-			LogUtil.debug("匹配到公司{}", company.getComName());
-			return true;
-		} else {
-		// 获得请求的域名--由小程序直接传过来companyCode参数对应公司的网址
-		String host = request.getHeader("companyCode");
-		LogUtil.debug("当前请求域名{}", host);
-			@SuppressWarnings("unchecked")
-			Map<String, SysCompany> companyMap = (Map<String, SysCompany>) WebUtil.getServletContext()
-					.getAttribute("companyMap");
-			if(Objects.nonNull(companyMap)){
-				Set<String> hostSet = companyMap.keySet();
-				for (String key : hostSet) {
-					LogUtil.debug("-- 匹配公司key={},host={} 匹配结果={}", key , host, key.contains(host));
-					if (key.contains(host)) {
-						// 查到公司后存到sesssion中
-						WebUtil.setSessionAttribute(ATTR_COMPANY, companyMap.get(key));
-						return true;
-					}
-				}
-			}
-		}
-		LogUtil.debug("没有匹配到对应的公司");
-		return false;
-	}
+        // 获得请求的域名--由小程序直接传过来companyCode参数对应公司的网址
+        String host = request.getHeader("companyCode");
+        LogUtil.debug("当前请求域名{}", host);
+        if (StringUtils.isBlank(host)) {
+            return false;
+        }
+
+        Map<String, SysCompany> companyMap = InitWebContainer.getLocalCache("companyMap");
+        SysCompany company=companyMap.get(host);
+        if(Objects.nonNull(company)){
+            // 查到公司后存到sesssion中
+            LogUtil.debug("匹配到公司{}", company.getComName());
+            WebUtil.setSessionAttribute(ATTR_COMPANY, company);
+            return true;
+        }
+        LogUtil.debug("没有匹配到对应的公司");
+        return false;
 
 
+    }
 
 
-	/**
-	 * 获取当前域名对于的公司ID
-	 * @return
-	 */
-	public static Long getCompanyId() {
-		return ((SysCompany) WebUtil.getSessionAttribute(ATTR_COMPANY)).getComId();
-	}
+    /**
+     * 获取当前域名对于的公司ID
+     *
+     * @return
+     */
+    public static Long getCompanyId() {
+        return ((SysCompany) WebUtil.getSessionAttribute(ATTR_COMPANY)).getComId();
+    }
 
 }

--
Gitblit v1.9.1