package com.zy.system.timer; 
 | 
  
 | 
import com.alibaba.fastjson.JSON; 
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
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 { 
 | 
  
 | 
    private static boolean SYSTEM_SUPPORT = false;//系统激活状态,默认关闭 
 | 
  
 | 
    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.publicKeysStorePath}") 
 | 
    private String publicKeysStorePath; 
 | 
  
 | 
    @Autowired 
 | 
    private LicenseInfosService licenseInfosService; 
 | 
  
 | 
    //每天晚上11点更新系统激活状态 
 | 
    @Scheduled(cron = "0 0 23 * * ? ") 
 | 
    public void timer() { 
 | 
        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.setPublicKeysStorePath(publicKeysStorePath); 
 | 
  
 | 
        //验证许可证是否有效 
 | 
        LicenseVerify licenseVerify = new LicenseVerify(); 
 | 
        //安装证书 
 | 
        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() { 
 | 
        return SYSTEM_SUPPORT; 
 | 
    } 
 | 
  
 | 
    public void setSystemSupport(boolean systemSupport) { 
 | 
        SYSTEM_SUPPORT = systemSupport; 
 | 
    } 
 | 
  
 | 
    public int getLicenseDays() { 
 | 
        return LICENSE_DAYS; 
 | 
    } 
 | 
  
 | 
    public void setLicenseDays(int licenseDays) { 
 | 
        LICENSE_DAYS = licenseDays; 
 | 
    } 
 | 
  
 | 
} 
 |