diff --git a/src/main/java/com/ecep/contract/manager/AppV2.java b/src/main/java/com/ecep/contract/manager/AppV2.java index 7f50025..9a04b8e 100644 --- a/src/main/java/com/ecep/contract/manager/AppV2.java +++ b/src/main/java/com/ecep/contract/manager/AppV2.java @@ -25,7 +25,7 @@ public class AppV2 { System.out.println("AppV2.done"); } - public static final String DEFAULT_DB_HOST = "10.84.209.145"; // "db-server1.ecctrl.com" + public static final String DEFAULT_DB_HOST = "10.84.209.154"; // "db-server1.ecctrl.com" public static final String DEFAULT_DB_PORT = "3306"; public static final String DEFAULT_DB_USERNAME = "supplier_ms"; public static final String DEFAULT_DB_PASSWORD = "[TPdseO!JKMmlrpf"; diff --git a/src/main/java/com/ecep/contract/manager/CurrentEmployee.java b/src/main/java/com/ecep/contract/manager/CurrentEmployee.java index 9085431..53e7686 100644 --- a/src/main/java/com/ecep/contract/manager/CurrentEmployee.java +++ b/src/main/java/com/ecep/contract/manager/CurrentEmployee.java @@ -1,25 +1,29 @@ package com.ecep.contract.manager; -import com.ecep.contract.manager.ds.other.model.Employee; -import com.ecep.contract.manager.ds.other.model.EmployeeRole; -import com.ecep.contract.manager.ds.other.service.EmployeeService; -import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel; -import javafx.application.Platform; -import javafx.beans.property.SimpleListProperty; -import javafx.beans.property.SimpleObjectProperty; -import javafx.collections.FXCollections; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.List; import java.util.Locale; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ecep.contract.manager.ds.other.model.Employee; +import com.ecep.contract.manager.ds.other.model.EmployeeRole; +import com.ecep.contract.manager.ds.other.service.EmployeeService; +import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel; + +import javafx.application.Platform; +import javafx.beans.property.SimpleListProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.collections.FXCollections; +import lombok.ToString; + /** * 当前登录用户 */ +@ToString(of = {"id", "name", "email", "phone", "roles"}) public class CurrentEmployee extends EmployeeViewModel { private static final Logger logger = LoggerFactory.getLogger(CurrentEmployee.class); /** diff --git a/src/main/java/com/ecep/contract/manager/Desktop.java b/src/main/java/com/ecep/contract/manager/Desktop.java index 0e7d470..07ce5a7 100644 --- a/src/main/java/com/ecep/contract/manager/Desktop.java +++ b/src/main/java/com/ecep/contract/manager/Desktop.java @@ -22,7 +22,6 @@ import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.util.StringUtils; import java.io.File; import java.io.FileInputStream; @@ -31,7 +30,6 @@ import java.net.URL; import java.util.List; import java.util.Properties; import java.util.concurrent.*; -import java.util.function.Consumer; import java.util.logging.Level; /** @@ -41,74 +39,9 @@ import java.util.logging.Level; * Created by ecep on 2017/05/08. */ public class Desktop extends Application { - private static final Logger logger = LoggerFactory.getLogger(Desktop.class); + public static final Logger logger = LoggerFactory.getLogger(Desktop.class); public static Desktop instance; - /** - * 在默认浏览器中打开指定的URL。 - *

- * 该函数使用JavaFX的HostServices类来调用系统默认的浏览器,并打开传入的URL。 - * - * @param url 要在浏览器中打开的URL字符串。该参数不能为空,且应为有效的URL格式。 - */ - public static void showInBrowse(String url) { - instance.getHostServices().showDocument(url); - } - - /** - * 在系统的文件资源管理器中打开指定的文件夹。 - *

- * 该方法首先尝试使用 java.awt.Desktop API 打开文件夹。如果该 API 不支持, - * 则在 Windows 系统中使用 explorer.exe 打开文件夹。 - * - * @param dir 要打开的文件夹对象。如果为 null 或无效路径,可能会抛出异常。 - * @throws RuntimeException 如果使用 java.awt.Desktop 打开文件夹时发生 IOException, - * 则将其包装为 RuntimeException 抛出。 - */ - public static void showInExplorer(File dir) { - if (java.awt.Desktop.isDesktopSupported()) { - try { - java.awt.Desktop.getDesktop().open(dir); - } catch (IOException e) { - throw new RuntimeException(e); - } - } else { - try { - // 在Windows中使用explorer.exe打开文件夹,路径用双引号括起来 - Process process = Runtime.getRuntime().exec( - new String[] { "explorer.exe", "\"" + dir.getAbsolutePath() + "\"" }, null, new File(".")); - // process.waitFor(); - } catch (IOException e) { - if (logger.isDebugEnabled()) { - logger.debug("Unable open {}", dir.getAbsolutePath(), e); - } - } - } - } - - public static void checkAndShowInExplorer(String path, Consumer consumer) { - if (!StringUtils.hasText(path)) { - consumer.accept("文件/目录为空,无法打开"); - return; - } - File file = new File(path); - if (!file.exists()) { - if (file.isFile()) { - consumer.accept("文件 " + file.getAbsolutePath() + " 不存在,请确认"); - } else { - consumer.accept("目录 " + file.getAbsolutePath() + " 不存在,请确认"); - } - return; - } - - try { - Desktop.showInExplorer(file); - consumer.accept("打开文件/目录 " + path); - } catch (Exception e) { - consumer.accept("打开文件错误:" + e.getMessage()); - } - } - public static void shutdown() { if (logger.isDebugEnabled()) { logger.debug("shutdown"); @@ -249,7 +182,6 @@ public class Desktop extends Application { beanFactory.registerSingleton("scheduledExecutorService", getExecutorService()); beanFactory.registerSingleton("taskMonitorCenter", taskMonitorCenter); - }); try { diff --git a/src/main/java/com/ecep/contract/manager/MyPersistentCookieStore.java b/src/main/java/com/ecep/contract/manager/MyPersistentCookieStore.java index 109ad1f..afbfcd0 100644 --- a/src/main/java/com/ecep/contract/manager/MyPersistentCookieStore.java +++ b/src/main/java/com/ecep/contract/manager/MyPersistentCookieStore.java @@ -1,17 +1,26 @@ package com.ecep.contract.manager; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import java.net.CookieStore; import java.net.HttpCookie; import java.net.URI; import java.net.URISyntaxException; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; public class MyPersistentCookieStore implements CookieStore { diff --git a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycService.java b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycService.java index 787b694..1f2d0ed 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycService.java +++ b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycService.java @@ -156,7 +156,7 @@ public class CloudTycService implements ViewModelService files) { diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java index ce8a810..9497f0b 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java @@ -38,6 +38,7 @@ import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorManagerWindow import com.ecep.contract.manager.ui.BaseController; import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.task.TaskMonitorViewController; +import com.ecep.contract.manager.util.DesktopUtils; import com.ecep.contract.manager.util.FxmlUtils; import javafx.concurrent.Task; @@ -173,7 +174,7 @@ public class HomeWindowController extends BaseController { public void openInBrowse(ActionEvent event) { MenuItem source = (MenuItem) event.getSource(); String url = (String) source.getUserData(); - Desktop.showInBrowse(url); + DesktopUtils.showInBrowse(url); } public void openGroupRKResourceWindow(ActionEvent event) { diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/bid/ProjectBidTabSkinBase.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/bid/ProjectBidTabSkinBase.java index 4e69007..1d7da43 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/bid/ProjectBidTabSkinBase.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/bid/ProjectBidTabSkinBase.java @@ -1,6 +1,5 @@ package com.ecep.contract.manager.ds.project.controller.bid; -import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.company.CompanyStringConverter; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; @@ -29,6 +28,7 @@ import com.ecep.contract.manager.ds.project.service.ProjectService; import com.ecep.contract.manager.ds.project.vo.ProjectBidViewModel; import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.TabSkin; +import com.ecep.contract.manager.util.DesktopUtils; import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.UITools; import javafx.application.Platform; @@ -204,7 +204,7 @@ public class ProjectBidTabSkinBase controller.authorizationFileField.textProperty().bind(viewModel.getAuthorizationFile().map(File::getName)); controller.openAuthorizationFileBtn.setOnAction(event -> { - Desktop.showInExplorer(viewModel.getAuthorizationFile().get()); + DesktopUtils.showInExplorer(viewModel.getAuthorizationFile().get()); }); controller.openAuthorizationFileBtn.disableProperty().bind(viewModel.getAuthorizationFile().isNull()); controller.changeAuthorizationFileBtn.setOnAction(this::onChangeAuthorizationFileAction); @@ -212,7 +212,7 @@ public class ProjectBidTabSkinBase controller.bidAcceptanceLetterFileField.textProperty() .bind(viewModel.getBidAcceptanceLetterFile().map(File::getName)); controller.openBidAcceptanceLetterFileBtn.setOnAction(event -> { - Desktop.showInExplorer(viewModel.getBidAcceptanceLetterFile().get()); + DesktopUtils.showInExplorer(viewModel.getBidAcceptanceLetterFile().get()); }); controller.openBidAcceptanceLetterFileBtn.disableProperty() .bind(viewModel.getBidAcceptanceLetterFile().isNull()); diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/cost/ProjectCostTabSkinBase.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/cost/ProjectCostTabSkinBase.java index 16b7f64..f0d6029 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/cost/ProjectCostTabSkinBase.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/cost/ProjectCostTabSkinBase.java @@ -1,6 +1,5 @@ package com.ecep.contract.manager.ds.project.controller.cost; -import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.contract.ContractFileType; import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.ContractFile; @@ -13,6 +12,7 @@ import com.ecep.contract.manager.ds.project.service.ProjectService; import com.ecep.contract.manager.ds.project.vo.ProjectCostViewModel; import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.TabSkin; +import com.ecep.contract.manager.util.DesktopUtils; import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.UITools; import javafx.application.Platform; @@ -68,7 +68,7 @@ public class ProjectCostTabSkinBase @Override public void initializeTab() { controller.openFileBtn.setOnAction(event -> { - Desktop.showInExplorer(viewModel.getAuthorizationFile().get()); + DesktopUtils.showInExplorer(viewModel.getAuthorizationFile().get()); }); controller.openFileBtn.disableProperty().bind(viewModel.getAuthorizationFile().isNull()); controller.changeFileBtn.setOnAction(this::onChangeAuthorizationFileAction); diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationTabSkinBase.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationTabSkinBase.java index e831e0d..1c62d7d 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationTabSkinBase.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationTabSkinBase.java @@ -1,6 +1,5 @@ package com.ecep.contract.manager.ds.project.controller.quotation; -import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.company.CompanyStringConverter; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; @@ -26,6 +25,7 @@ import com.ecep.contract.manager.ds.project.service.ProjectService; import com.ecep.contract.manager.ds.project.vo.ProjectQuotationViewModel; import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.TabSkin; +import com.ecep.contract.manager.util.DesktopUtils; import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.UITools; import javafx.application.Platform; @@ -101,7 +101,7 @@ public class ProjectQuotationTabSkinBase @Override public void initializeTab() { controller.openFileBtn.setOnAction(event -> { - Desktop.showInExplorer(viewModel.getAuthorizationFile().get()); + DesktopUtils.showInExplorer(viewModel.getAuthorizationFile().get()); }); controller.openFileBtn.disableProperty().bind(viewModel.getAuthorizationFile().isNull()); controller.changeFileBtn.setOnAction(this::onChangeAuthorizationFileAction); diff --git a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorWindowController.java b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorWindowController.java index 7d25993..b7722fd 100644 --- a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorWindowController.java @@ -1,6 +1,5 @@ package com.ecep.contract.manager.ds.vendor.controller; -import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.company.service.CompanyContactService; import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.vendor.model.CompanyVendor; @@ -9,6 +8,8 @@ import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService; import com.ecep.contract.manager.ds.vendor.vo.CompanyVendorViewModel; import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.FxmlPath; +import com.ecep.contract.manager.util.DesktopUtils; + import javafx.event.ActionEvent; import javafx.scene.control.*; import javafx.scene.layout.BorderPane; @@ -106,7 +107,7 @@ public class CompanyVendorWindowController extends AbstEntityController files) { diff --git a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinFiles.java b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinFiles.java index 087a6b9..e143068 100644 --- a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinFiles.java +++ b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinFiles.java @@ -1,6 +1,5 @@ package com.ecep.contract.manager.ds.vendor.controller.approved_list; -import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.company.CompanyFileUtils; import com.ecep.contract.manager.ds.vendor.model.CompanyVendorApprovedFile; import com.ecep.contract.manager.ds.vendor.model.CompanyVendorApprovedList; @@ -10,6 +9,7 @@ import com.ecep.contract.manager.ds.vendor.vo.CompanyVendorApprovedListViewModel import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.TabSkin; +import com.ecep.contract.manager.util.DesktopUtils; import com.ecep.contract.manager.util.SpecificationUtils; import javafx.event.ActionEvent; import javafx.scene.control.Tab; @@ -101,7 +101,7 @@ public class CompanyVendorApprovedListTabSkinFiles setStatus("文件不存在 " + file.getName()); return; } - Desktop.showInExplorer(file); + DesktopUtils.showInExplorer(file); } } diff --git a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListWindowController.java b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListWindowController.java index 80e71fa..38738a6 100644 --- a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListWindowController.java @@ -1,11 +1,11 @@ package com.ecep.contract.manager.ds.vendor.controller.approved_list; -import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.vendor.model.CompanyVendorApprovedList; import com.ecep.contract.manager.ds.vendor.service.CompanyVendorApprovedListService; import com.ecep.contract.manager.ds.vendor.vo.CompanyVendorApprovedListViewModel; import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.FxmlPath; +import com.ecep.contract.manager.util.DesktopUtils; import com.ecep.contract.manager.util.UITools; import javafx.event.ActionEvent; import javafx.scene.control.*; @@ -86,7 +86,7 @@ public class CompanyVendorApprovedListWindowController setStatus("目录错误,不存在"); return; } - Desktop.showInExplorer(file); + DesktopUtils.showInExplorer(file); } public void onVendorApprovedListVerifyAction(ActionEvent event) { diff --git a/src/main/java/com/ecep/contract/manager/util/DesktopUtils.java b/src/main/java/com/ecep/contract/manager/util/DesktopUtils.java new file mode 100644 index 0000000..7390a10 --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/util/DesktopUtils.java @@ -0,0 +1,78 @@ +package com.ecep.contract.manager.util; + +import java.io.File; +import java.io.IOException; +import java.util.function.Consumer; + +import org.springframework.util.StringUtils; + +import com.ecep.contract.manager.Desktop; + +public class DesktopUtils { + + /** + * 在默认浏览器中打开指定的URL。 + *

+ * 该函数使用JavaFX的HostServices类来调用系统默认的浏览器,并打开传入的URL。 + * + * @param url 要在浏览器中打开的URL字符串。该参数不能为空,且应为有效的URL格式。 + */ + public static void showInBrowse(String url) { + Desktop.instance.getHostServices().showDocument(url); + } + + /** + * 在系统的文件资源管理器中打开指定的文件夹。 + *

+ * 该方法首先尝试使用 java.awt.Desktop API 打开文件夹。如果该 API 不支持, + * 则在 Windows 系统中使用 explorer.exe 打开文件夹。 + * + * @param dir 要打开的文件夹对象。如果为 null 或无效路径,可能会抛出异常。 + * @throws RuntimeException 如果使用 java.awt.Desktop 打开文件夹时发生 IOException, + * 则将其包装为 RuntimeException 抛出。 + */ + public static void showInExplorer(File dir) { + if (java.awt.Desktop.isDesktopSupported()) { + try { + java.awt.Desktop.getDesktop().open(dir); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + try { + // 在Windows中使用explorer.exe打开文件夹,路径用双引号括起来 + Process process = Runtime.getRuntime().exec( + new String[] { "explorer.exe", "\"" + dir.getAbsolutePath() + "\"" }, null, new File(".")); + // process.waitFor(); + } catch (IOException e) { + if (Desktop.logger.isDebugEnabled()) { + Desktop.logger.debug("Unable open {}", dir.getAbsolutePath(), e); + } + } + } + } + + public static void checkAndShowInExplorer(String path, Consumer consumer) { + if (!StringUtils.hasText(path)) { + consumer.accept("文件/目录为空,无法打开"); + return; + } + File file = new File(path); + if (!file.exists()) { + if (file.isFile()) { + consumer.accept("文件 " + file.getAbsolutePath() + " 不存在,请确认"); + } else { + consumer.accept("目录 " + file.getAbsolutePath() + " 不存在,请确认"); + } + return; + } + + try { + showInExplorer(file); + consumer.accept("打开文件/目录 " + path); + } catch (Exception e) { + consumer.accept("打开文件错误:" + e.getMessage()); + } + } + +}