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.LicenseUtils; import com.zy.system.entity.license.LicenseVerify; import com.zy.system.entity.license.LicenseVerifyParam; 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;//许可证天数 @Value("${license.subject}") private String subject; @Value("${license.publicAlias}") private String publicAlias; @Value("${license.storePass}") private String storePass; @Value("${license.publicKeysStorePath}") private String publicKeysStorePath; @Value("${license.remoteServerUrl:http://net.zoneyung.net:9999/license}") private String remoteServerUrl; @Autowired private LicenseInfosService licenseInfosService; //每天晚上11点更新系统激活状态 @Scheduled(cron = "0 0 23 * * ? ") public void timer() { try { getRemoteLicense(); } catch (Exception ignored) { } try { verify(); } catch (Exception ignored) { } } public void getRemoteLicense() { try { String requestCode = LicenseUtils.buildRequestCode(subject); JSONObject response = requestRemoteLicense(buildRequestCodePayload(requestCode)); if (isSuccess(response)) { String license = response.getString("data"); if (Cools.isEmpty(license)) { return; } LicenseInfos latestLicense = licenseInfosService.getLatestLicenseByRequestCode(requestCode); if (latestLicense != null && Cools.eq(latestLicense.getLicense(), license)) { return; } LicenseInfos licenseInfos = new LicenseInfos(); licenseInfos.setLicense(license); licenseInfos.setCreateTime(new Date()); licenseInfos.setLicenseTime(response.getString("licenseTime")); licenseInfos.setRequestCode(requestCode); licenseInfosService.insert(licenseInfos); } } catch (Exception e) { e.printStackTrace(); } } private JSONObject requestRemoteLicense(String json) { try { String response = new HttpHandler.Builder() .setUri(remoteServerUrl) .setPath("/remoteQueryLicense") .setJson(json) .build() .doPost(); if (response == null || response.trim().isEmpty()) { return null; } return JSON.parseObject(response); } catch (Exception e) { return null; } } private String buildRequestCodePayload(String requestCode) { HashMap map = new HashMap<>(); map.put("subject", subject); map.put("requestCode", requestCode); return JSON.toJSONString(map); } private boolean isSuccess(JSONObject jsonObject) { return jsonObject != null && "ok".equalsIgnoreCase(jsonObject.getString("result")); } public void verify() { LicenseVerifyParam param = new LicenseVerifyParam(); param.setSubject(subject); param.setPublicAlias(publicAlias); param.setStorePass(storePass); param.setPublicKeysStorePath(publicKeysStorePath); String requestCode = LicenseUtils.buildRequestCode(subject); LicenseInfos latestLicense = licenseInfosService.getLatestLicenseByRequestCode(requestCode); LicenseVerify licenseVerify = new LicenseVerify(); LicenseContent install = null; if (latestLicense != null && !Cools.isEmpty(latestLicense.getLicense())) { install = licenseVerify.install(param, latestLicense.getLicense()); } if (install != null) { Date start = new Date(); Date end = install.getNotAfter(); long num = end.getTime() - start.getTime(); 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; } }