All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.jiangzeyin.common.spring.init.SiteCache Maven / Gradle / Ivy

package cn.jiangzeyin.common.spring.init;

import cn.jiangzeyin.common.spring.ServiceInfoUtil;
import cn.jiangzeyin.database.base.ReadBase;
import cn.jiangzeyin.database.run.read.Select;
import cn.jiangzeyin.database.run.write.Update;
import cn.jiangzeyin.entity.defaults.SiteInfo;
import cn.jiangzeyin.system.SystemBean;
import cn.jiangzeyin.system.log.LogType;
import cn.jiangzeyin.system.log.SystemLog;
import cn.jiangzeyin.system.pool.DefaultExecutor;
import cn.jiangzeyin.util.system.interfaces.UtilSiteCacheInterface;
import cn.jiangzeyin.util.system.util.UtilSystemCache;
import cn.jiangzeyin.util.util.StringUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.Assert;

import java.net.UnknownHostException;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author jiangzeyin
 * Created by jiangzeyin on 2017/2/3.
 */
@Configuration
public class SiteCache implements UtilSiteCacheInterface {

    @Value("${site-cache:false}")
    private boolean cache;
    public static SiteInfo currentSite;
    private static SiteCache beanSiteCache;

    /**
     * 站点缓存
     */
    private final static ConcurrentHashMap siteMap = new ConcurrentHashMap<>();
    private final static ConcurrentHashMap siteId = new ConcurrentHashMap<>();
    //private final static SiteCache siteCache = new SiteCache();


    /**
     * 加载所有站点信息到程序缓存
     */
    static void init() {
        beanSiteCache = SpringUtil.getBean(SiteCache.class);
        if (!beanSiteCache.cache)
            return;
        long s = System.currentTimeMillis();
        SystemLog.LOG(LogType.DEFAULT).info("初始化站点信息");
        siteMap.clear();
        Select util_site = new Select() {
        };
        util_site.setWhere("isDelete=0");
        List list = util_site.run();
        if (list != null)
            for (SiteInfo siteInfo : list) {
                // 读取当前站点
                if (siteInfo.getTag().equals(SystemBean.getInstance().getSystemTag())) {
                    currentSite = siteInfo;
                }
                siteId.put(siteInfo.getId(), siteInfo.getTag());
                siteMap.put(siteInfo.getTag(), siteInfo);
            }
        if (currentSite == null) {
            SystemLog.LOG(LogType.DEFAULT).info("没有找到本站点对应数据,请检查tag 是否正确");
        } else {
            initSiteRunIng();
            // updateSiteToken();
        }
        UtilSystemCache.init(beanSiteCache);
        // EntitySystemCache.init(siteCache);
        SystemLog.LOG(LogType.DEFAULT).info("初始化系站点信息完成:" + (System.currentTimeMillis() - s));
    }


    @Override
    public String getSiteUrl(String tag) {
        return getSiteInfo(tag).getUrl();
    }

    @Override
    public String getLocalPath(String tag) {
        return getSiteInfo(tag).getLocalPath();
    }


    public void execute(Runnable command) {
        DefaultExecutor.DEFAULT_EXECUTOR.execute(command);
    }

    @Override
    public int getCurrentSiteId() {
        if (currentSite == null)
            return -1;
        return currentSite.getId();
    }

    public String getElTag(String tag) {
        return getSiteInfo(tag).getElTag();
    }


    public String parseSiteName(String siteIds) {
        if ("0".equals(siteIds))
            return "全部站点";
        String[] ids = StringUtil.StringToArray(siteIds);
        if (ids == null)
            return null;
        StringBuilder stringBuffer = new StringBuilder();
        for (int i = 0; i < ids.length; i++) {
            if (i != 0)
                stringBuffer.append(",");
            SiteInfo siteInfo = SiteCache.getSiteInfo(StringUtil.parseInt(ids[i]));
            if (siteInfo == null)
                continue;
            stringBuffer.append(siteInfo.getName());
        }
        return stringBuffer.toString();
    }

    /**
     * @param tag tag
     * @return siteInfo
     */
    public static SiteInfo getSiteInfo(String tag) {
        if (beanSiteCache == null)
            beanSiteCache = SpringUtil.getBean(SiteCache.class);
        if (!beanSiteCache.cache)
            throw new RuntimeException("please on siteCache");
        SiteInfo siteInfo = siteMap.get(tag);
        Assert.notNull(siteInfo, String.format("没有找到对应%s站点", tag));
        return siteInfo;
    }

    /**
     * @param id id
     * @return siteInfo
     */
    public static SiteInfo getSiteInfo(int id) {
        String tag = siteId.get(id);
        if (tag == null)
            return null;
        return getSiteInfo(tag);
    }

    /**
     * 保存已经启动的程序地址
     */
    private static void initSiteRunIng() {
        try {
            String serviceUrl = ServiceInfoUtil.getServiceUrl();
            SystemLog.LOG().info("url:" + serviceUrl);
            JSONArray jsonArray = currentSite.runIngToJSONArray();
            if (jsonArray == null)
                jsonArray = new JSONArray();
            boolean find = false;
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                if (jsonObject == null)
                    continue;
                String url = jsonObject.getString("url");
                if (serviceUrl.equals(url)) {
                    find = true;
                    jsonObject.put("startTime", System.currentTimeMillis());
                    jsonObject.put("status", true);
                    break;
                }
            }
            if (!find) {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("url", serviceUrl);
                jsonObject.put("active", SystemBean.getInstance().getActive().toString());
                jsonObject.put("startTime", System.currentTimeMillis());
                jsonObject.put("status", true);
                jsonArray.add(jsonObject);
            }
            Update update = new Update() {
            };
            update.setKeyColumn("tag");
            update.putUpdate("api_token", SystemBean.getInstance().systemApiToken);
            update.setKeyValue(currentSite.getTag());
            update.putUpdate("run_ing", jsonArray.toString());
            update.run();
        } catch (UnknownHostException e) {
            SystemLog.ERROR().error("获取站点url ", e);
        }
    }

//    /**
//     * 更新站点api token
//     */
//    private static void updateSiteToken() {
//        Update update = new Update() {
//        };
//        update.setKeyColumn("tag");
//        update.setKeyValue(currentSite.getTag());
//
//        update.run();
//    }

    /**
     * @param objects obj
     * @param tag     tag
     */
    public static void saveSiteRunIng(JSONObject objects, String tag) {
        Assert.notNull(objects);
        synchronized (SiteCache.class) {
            Select select = new Select() {
            };
            select.setKeyColumn("tag");
            select.setKeyValue(tag);
            select.setColumns("run_ing");
            select.setResultType(ReadBase.Result.String);
            String result = select.run();
            JSONArray jsonArray = JSONArray.parseArray(result);
            String siteUrl = objects.getString("url");
            if (siteUrl == null)
                return;
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String url = jsonObject.getString("url");
                if (siteUrl.equals(url)) {
                    jsonObject.put("msg", objects.getString("msg"));
                    jsonObject.put("refreshCaChe", objects.getLongValue("refreshCaChe"));
                    jsonObject.put("status", objects.getBooleanValue("status"));
                    Update update = new Update() {
                    };
                    update.setKeyColumn("tag");
                    update.setKeyValue(tag);
                    update.putUpdate("run_ing", jsonArray.toString());
                    update.syncRun();
                    break;
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy