| package com.zy.system.timer; | 
|   | 
| 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 { | 
|   | 
|     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.licensePath}") | 
|     private String licensePath; | 
|   | 
|     /** | 
|      * 密钥库存储路径 | 
|      */ | 
|     @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.setLicensePath(licensePath); | 
|         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; | 
|     } | 
|   | 
| } |