自动化立体仓库 - WMS系统
lty
6 天以前 6d077ee150e66d50f56c61670f97d2baaa1b61a2
src/main/java/com/zy/system/timer/LicenseTimer.java
@@ -1,8 +1,20 @@
package com.zy.system.timer;
import com.zy.system.entity.license.LicenseVerify;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.zy.common.utils.HttpHandler;
import com.zy.system.entity.LicenseInfos;
import com.zy.system.entity.license.*;
import com.zy.system.service.LicenseInfosService;
import de.schlichtherle.license.LicenseContent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
@Component
public class LicenseTimer {
@@ -11,14 +23,125 @@
    private static int LICENSE_DAYS = 0;//许可证天数
    /**
     * 证书subject
     */
    @Value("${license.subject}")
    private String subject;
    /**
     * 公钥别称
     */
    @Value("${license.publicAlias}")
    private String publicAlias;
    /**
     * 访问公钥库的密码
     */
    @Value("${license.storePass}")
    private String storePass;
    /**
     * 证书生成路径
     */
    @Value("${license.licensePath}")
    private String licensePath;
    /**
     * 密钥库存储路径
     */
    @Value("${license.publicKeysStorePath}")
    private String publicKeysStorePath;
    @Autowired
    private LicenseInfosService licenseInfosService;
    //每天晚上11点更新系统激活状态
    @Scheduled(cron = "0 0 23 * * ? ")
    public void timer() {
//        System.out.println(SYSTEM_SUPPORT);
        try {
            getRemoteLicense();
        } catch (Exception e) {
        }
        try {
            verify();
        } catch (Exception e) {
        }
    }
    public void getRemoteLicense() {
        try {
            AbstractServerInfos abstractServerInfos = null;
            String osName = System.getProperty("os.name");
            //根据不同操作系统类型选择不同的数据获取方法
            if (osName.startsWith("windows")) {
                abstractServerInfos = new WindowsServerInfos();
            } else if (osName.startsWith("linux")) {
                abstractServerInfos = new LinuxServerInfos();
            }else{//其他服务器类型
                abstractServerInfos = new WindowsServerInfos();
            }
            LicenseCheck serverInfos = abstractServerInfos.getServerInfos();
            HashMap<String, Object> map = new HashMap<>();
            map.put("subject", subject);
            map.put("licenseCheck", serverInfos);
            String response = new HttpHandler.Builder()
                    .setUri("http://net.zoneyung.net:9999/license")
                    .setPath("/remoteQueryLicense")
                    .setJson(JSON.toJSONString(map))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getString("result").equals("ok")) {
                LicenseInfos licenseInfos = new LicenseInfos();
                licenseInfos.setLicense(jsonObject.getString("data"));
                licenseInfos.setCreateTime(new Date());
                licenseInfos.setLicenseTime(jsonObject.getString("licenseTime"));
                licenseInfosService.insert(licenseInfos);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void verify() {
        LicenseInfos latestLicense = licenseInfosService.getLatestLicense();
        if (latestLicense == null) {
            setLicenseDays(0);
            setSystemSupport(false);
            return;
        }
        LicenseVerifyParam param = new LicenseVerifyParam();
        param.setSubject(subject);
        param.setPublicAlias(publicAlias);
        param.setStorePass(storePass);
        param.setLicensePath(licensePath);
        param.setPublicKeysStorePath(publicKeysStorePath);
        //验证许可证是否有效
        LicenseVerify licenseVerify = new LicenseVerify();
        boolean verify = licenseVerify.verify();
        setSystemSupport(verify);//更新系统激活状态
        //安装证书
        LicenseContent install = licenseVerify.install(param, latestLicense.getLicense());
        if (install != null) {
            Date start = new Date();
            Date end = install.getNotAfter();
            Long starTime = start.getTime();
            Long endTime = end.getTime();
            long num = endTime - starTime;//时间戳相差的毫秒数
            int day = (int) (num / 24 / 60 / 60 / 1000);
            setLicenseDays(day);
            setSystemSupport(true);
        }else {
            setLicenseDays(0);
            setSystemSupport(false);
        }
    }
    public boolean getSystemSupport() {