From 96c5a749f14c3dea75ff774e5eed2921ba0f2555 Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期三, 17 十二月 2025 09:52:02 +0800
Subject: [PATCH] #1
---
src/main/java/com/zy/system/controller/LicenseCreatorController.java | 29 +-
src/main/java/com/zy/system/entity/license/LicenseCheckListener.java | 47 +++
src/main/java/com/zy/system/entity/LicenseInfos.java | 56 +++++
src/main/java/com/zy/system/entity/license/CustomLicenseManager.java | 2
src/main/java/com/zy/asrs/task/WCSReportScheduler.java | 2
src/main/resources/mapper/LocDetlMapper.xml | 2
src/main/java/com/zy/system/entity/license/LicenseVerify.java | 75 +++---
src/main/resources/mapper/LicenseInfosMapper.xml | 18 +
src/main/java/com/zy/system/mapper/LicenseInfosMapper.java | 14 +
src/main/java/com/zy/common/web/WcsController.java | 33 +-
src/main/java/com/zy/system/entity/license/LinuxServerInfos.java | 91 ++++++++
src/main/webapp/static/image/zy_logo_dark_color.png | 0
src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java | 4
src/main/java/com/zy/system/entity/license/CustomKeyStoreParam.java | 6
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 6
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java | 4
src/main/webapp/views/index.html | 9
src/main/java/com/zy/system/service/LicenseInfosService.java | 10
src/main/java/com/zy/system/entity/license/AbstractServerInfos.java | 2
src/main/java/com/zy/system/timer/LicenseTimer.java | 163 ++++++++++++++
src/main/java/com/zy/common/service/CommonService.java | 20
src/main/resources/application.yml | 6
src/main/java/com/zy/system/service/impl/LicenseInfosServiceImpl.java | 16 +
23 files changed, 505 insertions(+), 110 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index be77333..9ef1cd3 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -19,6 +19,7 @@
import com.zy.common.web.WcsController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -74,6 +75,8 @@
private SlaveProperties slaveProperties;
@Autowired
private WaitPakinService waitPakinService;
+ @Value("${wcs-slave.cancel}")
+ private String cancel;
@Override
@Transactional
@@ -1024,6 +1027,9 @@
if (!wrkMastRes || !locMastRes) {
throw new CoolException("淇濆瓨鏁版嵁澶辫触");
}
+
+ //wms鍙栨秷浠诲姟 鍚屾椂璋冪敤wcs浠诲姟鍙栨秷鎺ュ彛閫氱煡wcs todo
+
}
@Override
diff --git a/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java b/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
index d5c566b..47b00c5 100644
--- a/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
+++ b/src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
@@ -27,8 +27,8 @@
@Slf4j
public class CheckDeepScheduler {
- @Value("${wcs-slave.doubleDeep}")
- private boolean confirmDeep;
+// @Value("${wcs-slave.doubleDeep}")
+// private boolean confirmDeep;
@Autowired
private LocDetlService locDetlService;
@Autowired
diff --git a/src/main/java/com/zy/asrs/task/WCSReportScheduler.java b/src/main/java/com/zy/asrs/task/WCSReportScheduler.java
index 89a500f..0a8330c 100644
--- a/src/main/java/com/zy/asrs/task/WCSReportScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WCSReportScheduler.java
@@ -28,7 +28,7 @@
/**
* 涓嬪彂浠诲姟缁橶CS
*/
-// @Scheduled(cron = "0/3 * * * * ? ")
+ @Scheduled(cron = "0/3 * * * * ? ")
public void execute (){
if (!workIssuedFig){
return;
diff --git a/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java b/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java
index 9eb6b97..d78e059 100644
--- a/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java
@@ -27,8 +27,8 @@
@Slf4j
public class CheckDeepHandler extends AbstractHandler<String> {
- @Value("${wcs-slave.doubleDeep}")
- private boolean confirmDeep;
+// @Value("${wcs-slave.doubleDeep}")
+// private boolean confirmDeep;
@Autowired
private LocDetlService locDetlService;
@Autowired
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index bd943cc..f94e117 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -214,14 +214,14 @@
//鐩歌繎鐗╂枡鍖归厤澶辫触锛屾悳绱㈠彲鐢ㄧ┖搴撲綅缁�
//鑾峰彇璁惧妤煎眰
- List<Integer> levList = basCrnpService.getLevList();
- Collections.shuffle(levList);
+// List<Integer> levList = basCrnpService.getLevList();
+// Collections.shuffle(levList);
List<Integer> locLevList = locMastService.getLevList();
- levList.addAll(locLevList);
+// levList.addAll(locLevList);
- for (Integer lev : levList) {
- List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("lev1", lev).orderBy("bay1", true));
+ for (Integer lev : locLevList) {
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("lev1", lev).orderBy("bay1", true).orderBy("row1",true));
for (LocMast locMast : locMasts) {
String locNo = locMast.getLocNo();
//鑾峰彇閫氶亾缁�
@@ -291,15 +291,15 @@
if (targetLocMast == null){
//鑾峰彇璁惧妤煎眰
- List<Integer> levList = basCrnpService.getLevList();
- Collections.shuffle(levList);
+// List<Integer> levList = basCrnpService.getLevList();
+// Collections.shuffle(levList);
List<Integer> locLevList = locMastService.getLevList();
- levList.addAll(locLevList);
+// levList.addAll(locLevList);
- for (Integer lev : levList) {
+ for (Integer lev : locLevList) {
//鐩歌繎鐗╂枡鍖归厤澶辫触锛屾悳绱㈠彲鐢ㄧ┖搴撲綅缁�
- List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("lev1", lev).orderBy("bay1", true));
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("lev1", lev).orderBy("bay1", true).orderBy("row1",true));
for (LocMast locMast : locMasts) {
String locNo = locMast.getLocNo();
//鑾峰彇閫氶亾缁�
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index e449f34..c54e16d 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -86,12 +86,12 @@
if (Cools.isEmpty(param.getFromPort())) {
return Re.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
}
- if(Cools.isEmpty(param.getWarehouse())){
- return Re.error("浠撳簱缂栧彿涓嶈兘涓虹┖");
- }
- if(!param.getWarehouse().equals(warehouse)){
- return Re.error("浠撳簱缂栧彿涓嶅尮閰�");
- }
+// if(Cools.isEmpty(param.getWarehouse())){
+// return Re.error("浠撳簱缂栧彿涓嶈兘涓虹┖");
+// }
+// if(!param.getWarehouse().equals(warehouse)){
+// return Re.error("浠撳簱缂栧彿涓嶅尮閰�");
+// }
List<WaitPakin> waitPakins = null;
if (param.getFromPort().equals("101")) {
@@ -162,12 +162,12 @@
@ResponseBody
public synchronized Re getLocNo(@RequestBody SearchEmptyParam param) {
log.info("鏀跺埌WCS绌烘澘鍏ュ簱鎺ュ彛璇锋眰====>>鍏ュ弬:{}", param);
- if(Cools.isEmpty(param.getWarehouse())){
- return Re.error("浠撳簱缂栧彿涓嶈兘涓虹┖");
- }
- if(!param.getWarehouse().equals(warehouse)){
- return Re.error("浠撳簱缂栧彿涓嶅尮閰�");
- }
+// if(Cools.isEmpty(param.getWarehouse())){
+// return Re.error("浠撳簱缂栧彿涓嶈兘涓虹┖");
+// }
+// if(!param.getWarehouse().equals(warehouse)){
+// return Re.error("浠撳簱缂栧彿涓嶅尮閰�");
+// }
// 婧愮珯鐐圭姸鎬佹娴�
BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.valueOf(param.getFromPort()), true);
@@ -175,8 +175,7 @@
StartupDto dto = null;
-// dto = emptyPlateIn(Integer.valueOf(param.getFromPort()), locTypeDto);
- dto = startupFullPutStore(Integer.valueOf(param.getFromPort()), null, locTypeDto, null);
+ dto = emptyPlateIn(Integer.valueOf(param.getFromPort()), locTypeDto);
log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto);
return Re.ok();
}
@@ -330,7 +329,7 @@
// 婧愮珯鐐圭姸鎬佹娴�
BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
// 妫�绱㈠簱浣�
- StartupDto dto = commonService.getLocNo(10, devpNo, null, null, null, locTypeDto);
+ StartupDto dto = commonService.getLocNoNew(10, devpNo, null, null, null);
int workNo = dto.getWorkNo();
// 鐢熸垚宸ヤ綔妗�
WrkMast wrkMast = new WrkMast();
@@ -545,12 +544,12 @@
success = true;
} else {
log.error("wms鍚屾wcs搴撲綅澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url + "/" + loc, JSON.toJSONString(mapList), response);
- throw new CoolException("wms涓嬪彂浠诲姟缁檞cs澶辫触");
+ throw new CoolException("wms鍚屾wcs搴撲綅澶辫触");
}
} catch (Exception e) {
log.error("fail", e);
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- throw new CoolException("wms涓嬪彂浠诲姟缁檞cs澶辫触");
+ throw new CoolException("wms鍚屾wcs搴撲綅澶辫触");
} finally {
try {
// 淇濆瓨鎺ュ彛鏃ュ織
diff --git a/src/main/java/com/zy/system/controller/LicenseCreatorController.java b/src/main/java/com/zy/system/controller/LicenseCreatorController.java
index 0aafb3b..13e2b1c 100644
--- a/src/main/java/com/zy/system/controller/LicenseCreatorController.java
+++ b/src/main/java/com/zy/system/controller/LicenseCreatorController.java
@@ -3,7 +3,7 @@
import com.core.common.Cools;
import com.core.common.R;
import com.zy.system.entity.license.*;
-import de.schlichtherle.license.LicenseContent;
+import com.zy.system.timer.LicenseTimer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
@@ -14,7 +14,6 @@
import java.io.File;
import java.io.IOException;
-import java.util.Date;
/**
*
@@ -26,10 +25,10 @@
@Value("${license.licensePath}")
private String licensePath;
-
@Autowired
private LicenseCheckListener licenseCheckListener;
-
+ @Autowired
+ private LicenseTimer licenseTimer;
/**
* 鑾峰彇鏈嶅姟鍣ㄧ‖浠朵俊鎭�
* @param osName 鎿嶄綔绯荤粺绫诲瀷锛屽鏋滀负绌哄垯鑷姩鍒ゆ柇
@@ -48,7 +47,7 @@
if (osName.startsWith("windows")) {
abstractServerInfos = new WindowsServerInfos();
} else if (osName.startsWith("linux")) {
-// abstractServerInfos = new LinuxServerInfos();
+ abstractServerInfos = new LinuxServerInfos();
}else{//鍏朵粬鏈嶅姟鍣ㄧ被鍨�
abstractServerInfos = new WindowsServerInfos();
}
@@ -61,19 +60,7 @@
*/
@RequestMapping(value = "/getLicenseDays")
public R getLicenseDays() {
- LicenseVerify licenseVerify = new LicenseVerify();
- LicenseContent verifyInfo = licenseVerify.getVerifyInfo();
- if (verifyInfo == null) {
- return R.error();
- }
-
- Date start = new Date();
- Date end = verifyInfo.getNotAfter();
- Long starTime = start.getTime();
- Long endTime = end.getTime();
- Long num = endTime - starTime;//鏃堕棿鎴崇浉宸殑姣鏁�
- int day = (int) (num / 24 / 60 / 60 / 1000);
- return R.ok().add(day);
+ return R.ok(licenseTimer.getLicenseDays());
}
@RequestMapping(value = "/updateLicense")
@@ -109,4 +96,10 @@
return R.error("璁稿彲璇佹洿鏂板け璐�");
}
+ @RequestMapping(value = "/activate")
+ public R activate() {
+ licenseTimer.timer();
+ return R.ok();
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/com/zy/system/entity/LicenseInfos.java b/src/main/java/com/zy/system/entity/LicenseInfos.java
new file mode 100644
index 0000000..dafec6d
--- /dev/null
+++ b/src/main/java/com/zy/system/entity/LicenseInfos.java
@@ -0,0 +1,56 @@
+package com.zy.system.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableField;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("sys_license_infos")
+public class LicenseInfos implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value= "")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value= "")
+ private String license;
+
+ @ApiModelProperty(value= "")
+ private String licenseTime;
+
+ @ApiModelProperty(value= "")
+ @TableField("create_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ public LicenseInfos() {}
+
+ public LicenseInfos(String license,Date createTime) {
+ this.license = license;
+ this.createTime = createTime;
+ }
+
+// LicenseInfos licenseInfos = new LicenseInfos(
+// null, //
+// null //
+// );
+
+ public String getCreateTime$(){
+ if (Cools.isEmpty(this.createTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+ }
+
+
+}
diff --git a/src/main/java/com/zy/system/entity/license/AbstractServerInfos.java b/src/main/java/com/zy/system/entity/license/AbstractServerInfos.java
index f771d16..cb413ae 100644
--- a/src/main/java/com/zy/system/entity/license/AbstractServerInfos.java
+++ b/src/main/java/com/zy/system/entity/license/AbstractServerInfos.java
@@ -23,7 +23,7 @@
LicenseCheck result = new LicenseCheck();
try {
- result.setIpAddress(this.getIpAddress());
+// result.setIpAddress(this.getIpAddress());
result.setMacAddress(this.getMacAddress());
result.setCpuSerial(this.getCPUSerial());
result.setMainBoardSerial(this.getMainBoardSerial());
diff --git a/src/main/java/com/zy/system/entity/license/CustomKeyStoreParam.java b/src/main/java/com/zy/system/entity/license/CustomKeyStoreParam.java
index 3d4e4b9..f1cab8b 100644
--- a/src/main/java/com/zy/system/entity/license/CustomKeyStoreParam.java
+++ b/src/main/java/com/zy/system/entity/license/CustomKeyStoreParam.java
@@ -2,7 +2,9 @@
import de.schlichtherle.license.AbstractKeyStoreParam;
-import java.io.*;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
/**
* 鑷畾涔塊eyStoreParam锛岀敤浜庡皢鍏閽ュ瓨鍌ㄦ枃浠跺瓨鏀惧埌鍏朵粬纾佺洏浣嶇疆鑰屼笉鏄」鐩腑
@@ -47,7 +49,7 @@
*/
@Override
public InputStream getStream() throws IOException {
- final InputStream in = new FileInputStream(new File(storePath));
+ final InputStream in = this.getClass().getClassLoader().getResourceAsStream(storePath);
if (null == in) {
throw new FileNotFoundException(storePath);
}
diff --git a/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java b/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
index 1ad2cc1..9a7fc6d 100644
--- a/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
+++ b/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
@@ -194,7 +194,7 @@
if (osName.startsWith("windows")) {
abstractServerInfos = new WindowsServerInfos();
} else if (osName.startsWith("linux")) {
-// abstractServerInfos = new LinuxServerInfos();
+ abstractServerInfos = new LinuxServerInfos();
}else{//鍏朵粬鏈嶅姟鍣ㄧ被鍨�
abstractServerInfos = new WindowsServerInfos();
}
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 1659df2..643ce23 100644
--- a/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
+++ b/src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
@@ -1,9 +1,13 @@
package com.zy.system.entity.license;
import com.core.common.Cools;
+import com.zy.system.entity.LicenseInfos;
+import com.zy.system.service.LicenseInfosService;
+import com.zy.system.timer.LicenseTimer;
import de.schlichtherle.license.LicenseContent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
@@ -11,6 +15,7 @@
import org.springframework.stereotype.Component;
import java.io.File;
+import java.util.Date;
/**
* 鍦ㄩ」鐩惎鍔ㄦ椂瀹夎璇佷功
@@ -48,6 +53,10 @@
*/
@Value("${license.publicKeysStorePath}")
private String publicKeysStorePath;
+ @Autowired
+ private LicenseTimer licenseTimer;
+ @Autowired
+ private LicenseInfosService licenseInfosService;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
@@ -64,31 +73,51 @@
logger.info("++++++++ 寮�濮嬪姞杞借鍙瘉 ++++++++");
try {
- String publicKeysStoreFileName = this.getClass().getClassLoader().getResource(publicKeysStorePath).getPath();
- File publicKeysStoreFile = new File(publicKeysStoreFileName);
+ licenseTimer.getRemoteLicense();
+ } catch (Exception e) {
+ }
- String licensePathFileName = this.getClass().getClassLoader().getResource(licensePath).getPath();
- File licensePathFile = new File(licensePathFileName);
-
+ try {
LicenseVerifyParam param = new LicenseVerifyParam();
param.setSubject(subject);
param.setPublicAlias(publicAlias);
param.setStorePass(storePass);
- param.setLicensePath(licensePathFile.getPath());
- param.setPublicKeysStorePath(publicKeysStoreFile.getPath());
+ param.setLicensePath(licensePath);
+ param.setPublicKeysStorePath(publicKeysStorePath);
LicenseVerify licenseVerify = new LicenseVerify();
+
+ LicenseInfos latestLicense = licenseInfosService.getLatestLicense();
+ if (latestLicense == null) {
+ logger.info("璁稿彲璇佷笉瀛樺湪");
+ return false;
+ }
+
//瀹夎璇佷功
- LicenseContent install = licenseVerify.install(param);
+ LicenseContent install = licenseVerify.install(param, latestLicense.getLicense());
logger.info("++++++++ 璁稿彲璇佸姞杞界粨鏉� ++++++++");
+ licenseTimer.setSystemSupport(install!=null);
+
+ 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);
+ licenseTimer.setLicenseDays(day);
+ }
+
+
return install != null;
} catch (Exception e) {
+ e.printStackTrace();
return false;
}
}
-
+ licenseTimer.setSystemSupport(false);
return false;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/zy/system/entity/license/LicenseVerify.java b/src/main/java/com/zy/system/entity/license/LicenseVerify.java
index 2175930..da239c0 100644
--- a/src/main/java/com/zy/system/entity/license/LicenseVerify.java
+++ b/src/main/java/com/zy/system/entity/license/LicenseVerify.java
@@ -5,9 +5,13 @@
import org.apache.logging.log4j.Logger;
import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
+import java.util.Base64;
import java.util.prefs.Preferences;
/**
@@ -19,19 +23,21 @@
/**
* 瀹夎License璇佷功
*/
- public synchronized LicenseContent install(LicenseVerifyParam param){
+ public synchronized LicenseContent install(LicenseVerifyParam param, String license) {
LicenseContent result = null;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//1. 瀹夎璇佷功
- try{
- LicenseManager licenseManager = LicenseManagerHolder.getInstance(initLicenseParam(param));
+ try {
+ LicenseParam licenseParam = initLicenseParam(param);
+ LicenseManager licenseManager = LicenseManagerHolder.getInstance(licenseParam);
licenseManager.uninstall();
- result = licenseManager.install(new File(param.getLicensePath()));
- logger.info(MessageFormat.format("璁稿彲璇佸姞杞芥垚鍔燂紝璁稿彲璇佹湁鏁堟湡锛歿0} - {1}",format.format(result.getNotBefore()),format.format(result.getNotAfter())));
- }catch (Exception e){
- logger.error("璁稿彲璇佸姞杞藉け璐ワ紒",e);
+ File tempFileFromBase64 = createTempFileFromBase64(license);
+ result = licenseManager.install(tempFileFromBase64);
+ logger.info(MessageFormat.format("璁稿彲璇佸姞杞芥垚鍔燂紝璁稿彲璇佹湁鏁堟湡锛歿0} - {1}", format.format(result.getNotBefore()), format.format(result.getNotAfter())));
+ } catch (Exception e) {
+ logger.error("璁稿彲璇佸姞杞藉け璐ワ紒", e);
}
return result;
@@ -44,11 +50,6 @@
try {
LicenseManager licenseManager = LicenseManagerHolder.getInstance(null);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
- if (!updateSystemTime()) {
- //鏃堕棿鏇存柊澶辫触锛岀郴缁熸椂闂磋鏇存敼
- return false;
- }
LicenseContent licenseContent = licenseManager.verify();
logger.info(MessageFormat.format("璁稿彲璇佹牎楠岄�氳繃锛岃鍙瘉鏈夋晥鏈燂細{0} - {1}",format.format(licenseContent.getNotBefore()),format.format(licenseContent.getNotAfter())));
@@ -64,11 +65,6 @@
*/
public LicenseContent getVerifyInfo(){
LicenseManager licenseManager = LicenseManagerHolder.getInstance(null);
-
- if (!updateSystemTime()) {
- //鏃堕棿鏇存柊澶辫触锛岀郴缁熸椂闂磋鏇存敼
- return null;
- }
//鏍¢獙璇佷功
try {
@@ -103,31 +99,28 @@
}
/**
- * 鏇存柊鏃堕棿鍒版敞鍐岃〃涓�
+ * 灏咮ase64瀛楃涓茶浆鎹负涓存椂鏂囦欢
+ * @param base64String Base64缂栫爜鐨勫瓧绗︿覆
+ * @param filePrefix 鏂囦欢鍚嶅墠缂�锛堜緥濡� "license_"锛�
+ * @param fileSuffix 鏂囦欢鍚庣紑锛堜緥濡� ".lic"锛�
+ * @return 鐢熸垚鐨勪复鏃禙ile瀵硅薄锛堣嚜鍔ㄥ湪JVM閫�鍑烘椂鍒犻櫎锛�
+ * @throws IOException
*/
- private boolean updateSystemTime() {
- // 鑾峰彇鐢ㄦ埛鏍硅妭鐐�
- Preferences userRoot = Preferences.userRoot();
- // 鑾峰彇鎸囧畾璺緞涓嬬殑鑺傜偣
- Preferences node = userRoot.node("/zhongyang");
- String key = "time";
- // 璇诲彇娉ㄥ唽琛�
- String value = node.get(key, null);
- if (value != null) {
- long originTime = Long.parseLong(value);
- long now = System.currentTimeMillis();
- long diff = now - originTime;//鐜板湪鏃堕棿 - 婧愭椂闂� = 鏃堕棿宸�
- if (diff > 0) {
- //鏃堕棿宸ぇ浜�0鎵嶅厑璁告洿鏂版敞鍐岃〃鏃堕棿
- node.put(key, String.valueOf(System.currentTimeMillis()));
- return true;
- }
- }else {
- // 鍐欏叆娉ㄥ唽琛�
- node.put(key, String.valueOf(System.currentTimeMillis()));
- return true;
- }
- return false;
+ public File base64ToTempFile(String base64String, String filePrefix, String fileSuffix)
+ throws IOException {
+ // 瑙g爜Base64
+ byte[] decodedBytes = Base64.getDecoder().decode(base64String);
+ // 鍒涘缓涓存椂鏂囦欢
+ Path tempPath = Files.createTempFile(filePrefix, fileSuffix);
+ // 鍐欏叆鍐呭
+ Files.write(tempPath, decodedBytes);
+ // 璁剧疆JVM閫�鍑烘椂鑷姩鍒犻櫎
+ tempPath.toFile().deleteOnExit();
+ return tempPath.toFile();
+ }
+
+ public File createTempFileFromBase64(String base64Data) throws IOException {
+ return base64ToTempFile(base64Data, "temp_license_", ".bin");
}
}
\ No newline at end of file
diff --git a/src/main/java/com/zy/system/entity/license/LinuxServerInfos.java b/src/main/java/com/zy/system/entity/license/LinuxServerInfos.java
new file mode 100644
index 0000000..0f40daf
--- /dev/null
+++ b/src/main/java/com/zy/system/entity/license/LinuxServerInfos.java
@@ -0,0 +1,91 @@
+package com.zy.system.entity.license;
+
+import com.core.common.Cools;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鐢ㄤ簬鑾峰彇瀹㈡埛Linux鏈嶅姟鍣ㄧ殑鍩烘湰淇℃伅
+ */
+public class LinuxServerInfos extends AbstractServerInfos {
+
+ @Override
+ protected List<String> getIpAddress() throws Exception {
+ List<String> result = null;
+
+ //鑾峰彇鎵�鏈夌綉缁滄帴鍙�
+ List<InetAddress> inetAddresses = getLocalAllInetAddress();
+
+ if (inetAddresses != null && inetAddresses.size() > 0) {
+ result = inetAddresses.stream().map(InetAddress::getHostAddress).distinct().map(String::toLowerCase).collect(Collectors.toList());
+ }
+
+ return result;
+ }
+
+ @Override
+ protected List<String> getMacAddress() throws Exception {
+ List<String> result = null;
+
+ //1. 鑾峰彇鎵�鏈夌綉缁滄帴鍙�
+ List<InetAddress> inetAddresses = getLocalAllInetAddress();
+
+ if (inetAddresses != null && inetAddresses.size() > 0) {
+ //2. 鑾峰彇鎵�鏈夌綉缁滄帴鍙g殑Mac鍦板潃
+ result = inetAddresses.stream().map(this::getMacByInetAddress).distinct().collect(Collectors.toList());
+ }
+
+ return result;
+ }
+
+ @Override
+ protected String getCPUSerial() throws Exception {
+ //搴忓垪鍙�
+ String serialNumber = "";
+
+ //浣跨敤dmidecode鍛戒护鑾峰彇CPU搴忓垪鍙�
+ String[] shell = {"/bin/bash", "-c", "dmidecode -t processor | grep 'ID' | awk -F ':' '{print $2}' | head -n 1"};
+ Process process = Runtime.getRuntime().exec(shell);
+ process.getOutputStream().close();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+
+ if (null == reader.readLine()) {
+ return serialNumber;
+ }
+ String line = reader.readLine().trim();
+ if (!Cools.isEmpty(line)) {
+ serialNumber = line;
+ }
+
+ reader.close();
+ return serialNumber;
+ }
+
+ @Override
+ protected String getMainBoardSerial() throws Exception {
+ //搴忓垪鍙�
+ String serialNumber = "";
+
+ //浣跨敤dmidecode鍛戒护鑾峰彇涓绘澘搴忓垪鍙�
+ String[] shell = {"/bin/bash", "-c", "dmidecode | grep 'Serial Number' | awk -F ':' '{print $2}' | head -n 1"};
+ Process process = Runtime.getRuntime().exec(shell);
+ process.getOutputStream().close();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ if (null == reader.readLine()) {
+ return serialNumber;
+ }
+ String line = reader.readLine().trim();
+ if (!Cools.isEmpty(line)) {
+ serialNumber = line;
+ }
+
+ reader.close();
+ return serialNumber;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/system/mapper/LicenseInfosMapper.java b/src/main/java/com/zy/system/mapper/LicenseInfosMapper.java
new file mode 100644
index 0000000..2e51ff1
--- /dev/null
+++ b/src/main/java/com/zy/system/mapper/LicenseInfosMapper.java
@@ -0,0 +1,14 @@
+package com.zy.system.mapper;
+
+import com.zy.system.entity.LicenseInfos;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface LicenseInfosMapper extends BaseMapper<LicenseInfos> {
+
+ LicenseInfos getLatestLicense();
+
+}
diff --git a/src/main/java/com/zy/system/service/LicenseInfosService.java b/src/main/java/com/zy/system/service/LicenseInfosService.java
new file mode 100644
index 0000000..dc3dc04
--- /dev/null
+++ b/src/main/java/com/zy/system/service/LicenseInfosService.java
@@ -0,0 +1,10 @@
+package com.zy.system.service;
+
+import com.zy.system.entity.LicenseInfos;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface LicenseInfosService extends IService<LicenseInfos> {
+
+ LicenseInfos getLatestLicense();
+
+}
diff --git a/src/main/java/com/zy/system/service/impl/LicenseInfosServiceImpl.java b/src/main/java/com/zy/system/service/impl/LicenseInfosServiceImpl.java
new file mode 100644
index 0000000..2a6b9b3
--- /dev/null
+++ b/src/main/java/com/zy/system/service/impl/LicenseInfosServiceImpl.java
@@ -0,0 +1,16 @@
+package com.zy.system.service.impl;
+
+import com.zy.system.mapper.LicenseInfosMapper;
+import com.zy.system.entity.LicenseInfos;
+import com.zy.system.service.LicenseInfosService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("licenseInfosService")
+public class LicenseInfosServiceImpl extends ServiceImpl<LicenseInfosMapper, LicenseInfos> implements LicenseInfosService {
+
+ @Override
+ public LicenseInfos getLatestLicense() {
+ return this.baseMapper.getLatestLicense();
+ }
+}
diff --git a/src/main/java/com/zy/system/timer/LicenseTimer.java b/src/main/java/com/zy/system/timer/LicenseTimer.java
new file mode 100644
index 0000000..985ace4
--- /dev/null
+++ b/src/main/java/com/zy/system/timer/LicenseTimer.java
@@ -0,0 +1,163 @@
+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;
+ }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c19b4d8..695147b 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -56,7 +56,7 @@
# 鐢辨祬鍏ユ繁
locGroupAscOrder: [
{rowList: [1],minBay: 1,maxBay: 16},
- {rowList: [2,3,4,5,6],minBay: 1,maxBay: 16},
+ {rowList: [2,3,4,5,6,7,8],minBay: 1,maxBay: 16},
]
#鏄惁寮�鍚痺ms涓嬪彂浠诲姟缁檞cs
workIssued-fig : true
@@ -66,6 +66,10 @@
workIssued : fromWms/taskReceive
#搴撲綅鍚屾
loc: fromWms/cargoNoSyn
+ #璐т綅淇℃伅鍚屾
+ locInfo: fromWms/cargoLocationSyn
+ #浠诲姟鍙栨秷
+ cancel: fromWms/taskCancel
#鍏ュ簱绔�
inDevp : 101
#鍑哄簱绔�
diff --git a/src/main/resources/mapper/LicenseInfosMapper.xml b/src/main/resources/mapper/LicenseInfosMapper.xml
new file mode 100644
index 0000000..6274069
--- /dev/null
+++ b/src/main/resources/mapper/LicenseInfosMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.system.mapper.LicenseInfosMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.system.entity.LicenseInfos">
+ <id column="id" property="id" />
+ <result column="license" property="license" />
+ <result column="license_time" property="licenseTime" />
+ <result column="create_time" property="createTime" />
+
+ </resultMap>
+
+ <select id="getLatestLicense" resultMap="BaseResultMap">
+ select top 1 * from sys_license_infos order by create_time desc
+ </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index 299ce41..3df9079 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -409,7 +409,7 @@
order by row1
</select>
- <select id="getSameDetlList" resultMap="java.lang.String">
+ <select id="getSameDetlList" resultType="java.lang.String">
select ld.loc_no from asr_loc_detl as ld
left join asr_loc_mast as lm on ld.loc_no = lm.loc_no
where 1 = 1
diff --git a/src/main/webapp/static/image/zy_logo_dark_color.png b/src/main/webapp/static/image/zy_logo_dark_color.png
new file mode 100644
index 0000000..8278ca7
--- /dev/null
+++ b/src/main/webapp/static/image/zy_logo_dark_color.png
Binary files differ
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index 5a8c6f9..834ff6c 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8">
- <title>鑷姩鍖栫珛浣撲粨搴� - AS / RS</title>
+ <title>涓壃 - 鑷姩鍖栫珛浣撲粨搴� - AS / RS</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
@@ -26,7 +26,7 @@
<!-- 澶撮儴 -->
<div class="layui-header">
<div class="layui-logo">
- <img src="../static/image/logo.png" style="display: inline-block; width: 80%;height: auto">
+ <img src="../static/image/zy_logo_dark_color.png" style="display: inline-block; width: 40%;height: auto">
<!-- <span style="margin-top: 0; letter-spacing: 10px">涓壃绔嬪簱</span>-->
<!-- <img src="../static/image/logo.svg"/>-->
<!-- <cite>涓壃 - Zoneyung</cite>-->
@@ -42,7 +42,7 @@
</ul>
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item" lay-unselect id="licenseShow" style="display: none;user-select: none;">
- <div style="color: red;">璁稿彲璇佹湁鏁堟湡锛�<span id="licenseDays">29</span>澶�</div>
+ <div style="color: red;">涓存椂璁稿彲璇佹湁鏁堟湡锛�<span id="licenseDays">29</span>澶�</div>
</li>
<li class="layui-nav-item layui-hide-xs" lay-unselect>
<a ew-event="fullScreen" title="鍏ㄥ睆"><i class="layui-icon layui-icon-screen-full"></i></a>
@@ -75,7 +75,7 @@
<div class="layui-body"></div>
<!-- 搴曢儴 -->
<div class="layui-footer layui-text">
-
+ copyright 漏 2022 <a href="https://www.superton.cn/" target="_blank">娴欐睙涓壃绔嬪簱鏈夐檺鍏徃</a> all rights reserved.
<span class="pull-right">Version 1.0.0</span>
</div>
@@ -150,6 +150,7 @@
if (days <= 30) {
$("#licenseShow").show()
$("#licenseDays").html(days)
+ alert("涓存椂璁稿彲鏈夋晥鏈燂細" + days + "澶�")
}
}else {
top.location.href = baseUrl + "/login";
--
Gitblit v1.9.1