java110
2020-10-22 17764bd12c42512189ea5c71fac8be2614fb7589
service-order/src/main/java/com/java110/order/smo/impl/CenterServiceCacheSMOImpl.java
@@ -1,23 +1,21 @@
package com.java110.order.smo.impl;
import com.alibaba.fastjson.JSONObject;
import com.java110.utils.cache.ServiceBusinessCache;
import com.java110.core.factory.DataTransactionFactory;
import com.java110.db.dao.IQueryServiceDAO;
import com.java110.dto.basePrivilege.BasePrivilegeDto;
import com.java110.entity.center.AppRoute;
import com.java110.entity.mapping.Mapping;
import com.java110.entity.order.ServiceBusiness;
import com.java110.entity.service.ServiceSql;
import com.java110.order.dao.ICenterServiceDAO;
import com.java110.order.smo.ICenterServiceCacheSMO;
import com.java110.utils.cache.AppRouteCache;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.cache.ServiceSqlCache;
import com.java110.service.context.DataQuery;
import com.java110.utils.cache.*;
import com.java110.utils.constant.CommonConstant;
import com.java110.utils.constant.ResponseConstant;
import com.java110.utils.exception.SMOException;
import com.java110.utils.util.Assert;
import com.java110.core.factory.DataTransactionFactory;
import com.java110.entity.center.AppRoute;
import com.java110.entity.mapping.Mapping;
import com.java110.service.context.DataQuery;
import com.java110.entity.service.ServiceSql;
import com.java110.db.dao.IQueryServiceDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,8 +42,7 @@
    IQueryServiceDAO queryServiceDAOImpl;
    @Override
    public void flush(DataQuery dataQuery) throws SMOException{
    public void flush(DataQuery dataQuery) throws SMOException {
        //1.0 封装 AppRoute
@@ -60,14 +57,18 @@
        //4.0 刷新业务信息
        flushServiceBusiness(dataQuery);
        dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_CODE_SUCCESS,"刷新成功"));
        //5.0 刷新基础权限
        flushPrivilege(dataQuery);
        dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_CODE_SUCCESS, "刷新成功"));
    }
    /**
     * 根据缓存类别刷新缓存
     *
     * @param headers 缓存类别
     */
    public void flush(Map<String,String> headers) throws SMOException{
    public void flush(Map<String, String> headers) throws SMOException {
        flushAppRoute(headers);
@@ -78,6 +79,9 @@
        //4.0 刷新业务信息
        flushServiceBusiness(headers);
        //5.0 刷新基础权限
        flushPrivilege(headers);
    }
    /**
@@ -95,22 +99,27 @@
        doFlushServiceSql();
        doFlushServiceBusiness();
        //5.0 刷新全新
        doFlushPrivilege();
    }
    private void checkCacheParam(DataQuery dataQuery) throws SMOException{
    private void checkCacheParam(DataQuery dataQuery) throws SMOException {
        JSONObject params = dataQuery.getRequestParams();
        if(params == null || !params.containsKey(CommonConstant.CACHE_PARAM_NAME)){
            throw new SMOException(ResponseConstant.RESULT_PARAM_ERROR,"请求报文错误,未包含字段 "+CommonConstant.CACHE_PARAM_NAME);
        if (params == null || !params.containsKey(CommonConstant.CACHE_PARAM_NAME)) {
            throw new SMOException(ResponseConstant.RESULT_PARAM_ERROR, "请求报文错误,未包含字段 " + CommonConstant.CACHE_PARAM_NAME);
        }
    }
    /**
     * 3.0 分装 ServiceSql
     */
    private void flushServiceSql(DataQuery dataQuery) {
        JSONObject params = dataQuery.getRequestParams();
        if(!CommonConstant.CACHE_SERVICE_SQL.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))){
            return ;
        if (!CommonConstant.CACHE_SERVICE_SQL.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))) {
            return;
        }
        // 刷新
        doFlushServiceSql();
@@ -119,8 +128,8 @@
    private void flushServiceBusiness(DataQuery dataQuery) {
        JSONObject params = dataQuery.getRequestParams();
        if(!CommonConstant.CACHE_SERVICE_BUSINESS.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))){
            return ;
        if (!CommonConstant.CACHE_SERVICE_BUSINESS.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))) {
            return;
        }
        // 刷新
        doFlushServiceBusiness();
@@ -129,12 +138,12 @@
    /**
     * 3.0 分装 ServiceSql
     */
    private void flushServiceSql(Map<String,String> headers) {
    private void flushServiceSql(Map<String, String> headers) {
        Assert.hasKey(headers,CommonConstant.CACHE_PARAM,"未包含cache参数"+headers.toString());
        if(!CommonConstant.CACHE_SERVICE_SQL.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))){
            return ;
        Assert.hasKey(headers, CommonConstant.CACHE_PARAM, "未包含cache参数" + headers.toString());
        if (!CommonConstant.CACHE_SERVICE_SQL.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))) {
            return;
        }
        // 刷新
        doFlushServiceSql();
@@ -143,12 +152,12 @@
    /**
     * 3.0 分装 ServiceSql
     */
    private void flushServiceBusiness(Map<String,String> headers) {
    private void flushServiceBusiness(Map<String, String> headers) {
        Assert.hasKey(headers,CommonConstant.CACHE_PARAM,"未包含cache参数"+headers.toString());
        if(!CommonConstant.CACHE_SERVICE_BUSINESS.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))){
            return ;
        Assert.hasKey(headers, CommonConstant.CACHE_PARAM, "未包含cache参数" + headers.toString());
        if (!CommonConstant.CACHE_SERVICE_BUSINESS.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))) {
            return;
        }
        // 刷新
        doFlushServiceBusiness();
@@ -160,22 +169,22 @@
        List<ServiceSql> serviceSqls = queryServiceDAOImpl.qureyServiceSqlAll();
        if(serviceSqls == null || serviceSqls.size() == 0){
        if (serviceSqls == null || serviceSqls.size() == 0) {
            return;
        }
        //删除原始数据
        ServiceSqlCache.removeData(ServiceSqlCache._SUFFIX_SERVICE_SQL);
        for(ServiceSql serviceSql: serviceSqls){
        for (ServiceSql serviceSql : serviceSqls) {
            ServiceSqlCache.setServiceSql(serviceSql);
        }
    }
    private void doFlushServiceBusiness(){
    private void doFlushServiceBusiness() {
        logger.debug("开始刷新 ServiceBusiness数据到redis数据库中");
        List<ServiceBusiness> serviceBusinesses = queryServiceDAOImpl.qureyServiceBusiness();
        if(serviceBusinesses == null || serviceBusinesses.size() == 0){
        if (serviceBusinesses == null || serviceBusinesses.size() == 0) {
            return;
        }
        //删除原始数据
@@ -193,23 +202,53 @@
        JSONObject params = dataQuery.getRequestParams();
        if(!CommonConstant.CACHE_MAPPING.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))){
            return ;
        if (!CommonConstant.CACHE_MAPPING.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))) {
            return;
        }
        doFlushMapping();
    }
    /**
     * 刷新 Mapping 数据
     */
    private void flushMapping(Map<String,String> headers) {
    private void flushPrivilege(DataQuery dataQuery) {
        Assert.hasKey(headers,CommonConstant.CACHE_PARAM,"未包含cache参数"+headers.toString());
        JSONObject params = dataQuery.getRequestParams();
        if(!CommonConstant.CACHE_MAPPING.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))){
            return ;
        if (!CommonConstant.CACHE_PRIVILEGE.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))) {
            return;
        }
        doFlushPrivilege();
    }
    /**
     * 刷新 Mapping 数据
     */
    private void flushPrivilege(Map<String, String> headers) {
        Assert.hasKey(headers, CommonConstant.CACHE_PARAM, "未包含cache参数" + headers.toString());
        if (!CommonConstant.CACHE_PRIVILEGE.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))) {
            return;
        }
        doFlushPrivilege();
    }
    /**
     * 刷新 Mapping 数据
     */
    private void flushMapping(Map<String, String> headers) {
        Assert.hasKey(headers, CommonConstant.CACHE_PARAM, "未包含cache参数" + headers.toString());
        if (!CommonConstant.CACHE_MAPPING.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))) {
            return;
        }
        doFlushMapping();
@@ -220,20 +259,20 @@
        List<Mapping> mappings = centerServiceDAOImpl.getMappingInfoAll();
        //删除原始数据
        MappingCache.removeData(MappingCache._SUFFIX_MAPPING);
        for(Mapping mapping : mappings){
        for (Mapping mapping : mappings) {
            MappingCache.setVaule(mapping);
        }
        Map<String,List<Mapping>> mappingMap = new HashMap<String,List<Mapping>>();
        Map<String, List<Mapping>> mappingMap = new HashMap<String, List<Mapping>>();
        List<Mapping> mappingsNew = null;
        for(Mapping mapping : mappings){
            if(mappingMap.containsKey(mapping.getDomain())){
        for (Mapping mapping : mappings) {
            if (mappingMap.containsKey(mapping.getDomain())) {
                mappingsNew = mappingMap.get(mapping.getDomain());
                mappingsNew.add(mapping);
            }else{
            } else {
                mappingsNew = new ArrayList<Mapping>();
                mappingsNew.add(mapping);
                mappingMap.put(mapping.getDomain(),mappingsNew);
                mappingMap.put(mapping.getDomain(), mappingsNew);
            }
        }
@@ -242,15 +281,23 @@
        }
    }
    private void doFlushPrivilege() {
        logger.debug("开始刷新 Mapping数据到redis数据库中");
        List<BasePrivilegeDto> basePrivilegeDtos = centerServiceDAOImpl.getPrivilegeAll();
        //删除原始数据
        PrivilegeCache.removeData(PrivilegeCache.DEFAULT_PRIVILEGE);
        PrivilegeCache.setValue(basePrivilegeDtos);
    }
    /**
     * 刷新AppRoute数据
     */
    private void flushAppRoute(DataQuery dataQuery){
    private void flushAppRoute(DataQuery dataQuery) {
        JSONObject params = dataQuery.getRequestParams();
        if(!CommonConstant.CACHE_APP_ROUTE_SERVICE.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))){
            return ;
        if (!CommonConstant.CACHE_APP_ROUTE_SERVICE.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))) {
            return;
        }
        doFlushAppRoute();
@@ -259,13 +306,13 @@
    /**
     * 刷新AppRoute数据
     */
    private void flushAppRoute(Map<String,String> headers){
    private void flushAppRoute(Map<String, String> headers) {
        Assert.hasKey(headers,CommonConstant.CACHE_PARAM,"未包含cache参数"+headers.toString());
        Assert.hasKey(headers, CommonConstant.CACHE_PARAM, "未包含cache参数" + headers.toString());
        if(!CommonConstant.CACHE_APP_ROUTE_SERVICE.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))){
            return ;
        if (!CommonConstant.CACHE_APP_ROUTE_SERVICE.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))) {
            return;
        }
        doFlushAppRoute();
@@ -274,16 +321,16 @@
    private void doFlushAppRoute() {
        logger.debug("开始刷新 AppRoute数据到redis数据库中");
        List<Map> appInfos = centerServiceDAOImpl.getAppRouteAndServiceInfoAll();
        Map<String,List<AppRoute>> appRoustsMap = new HashMap<String,List<AppRoute>>();
        Map<String, List<AppRoute>> appRoustsMap = new HashMap<String, List<AppRoute>>();
        List<AppRoute> appRoutes = null;
        for(Map appInfo : appInfos){
            if(appRoustsMap.containsKey(appInfo.get("app_id").toString())){
        for (Map appInfo : appInfos) {
            if (appRoustsMap.containsKey(appInfo.get("app_id").toString())) {
                appRoutes = appRoustsMap.get(appInfo.get("app_id").toString());
                appRoutes.add(AppRoute.newInstance().builder(appInfo));
            }else{
            } else {
                appRoutes = new ArrayList<AppRoute>();
                appRoutes.add(AppRoute.newInstance().builder(appInfo));
                appRoustsMap.put(appInfo.get("app_id").toString(),appRoutes);
                appRoustsMap.put(appInfo.get("app_id").toString(), appRoutes);
            }
        }
        //删除原始数据