From a4f07b2a0ddb6c210e05afbbb491feeb466203e7 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 09 三月 2026 19:15:50 +0800
Subject: [PATCH] #V3重大更新,升级JDK17,升级SpirngBoot3.5.1

---
 src/main/java/com/zy/system/entity/license/LicenseCheckListener.java |   69 ++++++++++++++++++++++++++++++----
 1 files changed, 60 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
index 7721c02..355abf2 100644
--- a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
+++ b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
@@ -16,6 +16,9 @@
 import org.springframework.stereotype.Component;
 
 import java.io.File;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.util.Base64;
 import java.util.Date;
 
 /**
@@ -72,12 +75,18 @@
 
     //鍔犺浇璇佷功
     public boolean loadLicense() {
+        return loadLicense(true);
+    }
+
+    public boolean loadLicense(boolean fetchRemote) {
         if(!Cools.isEmpty(licensePath)){
             logger.info("++++++++ 寮�濮嬪姞杞借鍙瘉 ++++++++");
 
-            try {
-                licenseTimer.getRemoteLicense();
-            } catch (Exception e) {
+            if (fetchRemote) {
+                try {
+                    licenseTimer.getRemoteLicense();
+                } catch (Exception e) {
+                }
             }
 
             try {
@@ -89,15 +98,23 @@
                 param.setPublicKeysStorePath(publicKeysStorePath);
 
                 LicenseVerify licenseVerify = new LicenseVerify();
+                String requestCode = LicenseUtils.buildRequestCode(subject);
+                LicenseInfos latestLicense = licenseInfosService.getLatestLicenseByRequestCode(requestCode);
 
-                LicenseInfos latestLicense = licenseInfosService.getLatestLicense();
-                if (latestLicense == null) {
+                LicenseContent install = null;
+                if (latestLicense != null) {
+                    install = licenseVerify.install(param, latestLicense.getLicense());
+                }
+                if (install == null) {
+                    install = licenseVerify.install(param);
+                    if (install != null) {
+                        cacheLocalLicense(requestCode, install);
+                    }
+                }
+                if (install == null) {
                     logger.info("璁稿彲璇佷笉瀛樺湪");
                     return false;
                 }
-
-                //瀹夎璇佷功
-                LicenseContent install = licenseVerify.install(param, latestLicense.getLicense());
 
                 logger.info("++++++++ 璁稿彲璇佸姞杞界粨鏉� ++++++++");
 
@@ -127,4 +144,38 @@
         licenseTimer.setSystemSupport(false);
         return false;
     }
-}
\ No newline at end of file
+
+    private void cacheLocalLicense(String requestCode, LicenseContent install) {
+        try {
+            File licenseFile = resolveLicenseFile();
+            if (licenseFile == null || !licenseFile.exists()) {
+                return;
+            }
+            LicenseInfos licenseInfos = new LicenseInfos();
+            licenseInfos.setLicense(Base64.getEncoder().encodeToString(Files.readAllBytes(licenseFile.toPath())));
+            licenseInfos.setLicenseTime(formatLicenseTime(install));
+            licenseInfos.setRequestCode(requestCode);
+            licenseInfos.setCreateTime(new Date());
+            licenseInfosService.save(licenseInfos);
+        } catch (Exception ignored) {
+        }
+    }
+
+    private File resolveLicenseFile() {
+        try {
+            if (this.getClass().getClassLoader().getResource(licensePath) != null) {
+                return new File(this.getClass().getClassLoader().getResource(licensePath).toURI());
+            }
+        } catch (Exception ignored) {
+        }
+        return new File(licensePath);
+    }
+
+    private String formatLicenseTime(LicenseContent install) {
+        if (install == null) {
+            return "";
+        }
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return format.format(install.getNotBefore()) + "  -  " + format.format(install.getNotAfter());
+    }
+}

--
Gitblit v1.9.1