From a1b87de7c005a4c0b1bfe46638828eeac8f1c370 Mon Sep 17 00:00:00 2001 From: songqq Date: Thu, 11 Sep 2025 19:44:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=92=8CLogback=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor: 重构实体类equals和hashCode方法 fix: 修复WebSocketService消息发送逻辑 style: 格式化代码和优化导入 docs: 更新JacksonConfig日期序列化格式 test: 添加CompanyFilePathTableCell测试类 chore: 清理无用代码和注释 --- client/pom.xml | 7 + .../main/java/com/ecep/contract/Desktop.java | 25 +- .../java/com/ecep/contract/SpringApp.java | 22 +- .../com/ecep/contract/WebSocketService.java | 4 +- .../controller/AbstEntityController.java | 98 ++++--- .../controller/OkHttpLoginController.java | 17 +- .../company/AbstCompanyTableTabSkin.java | 9 +- .../company/CompanyWindowController.java | 10 - .../CompanyOldNameWindowController.java | 10 - .../contract/ContractWindowController.java | 2 - .../inventory/InventoryWindowController.java | 15 +- .../EmployeeRoleWindowController.java | 11 - .../project/ProjectWindowController.java | 10 - .../controller/tab/AbstGenericTabSkin.java | 4 + .../tab/CompanyTabSkinContract.java | 5 +- .../controller/tab/CompanyTabSkinFile.java | 40 +-- .../controller/tab/ContractManagerSkin.java | 27 +- .../controller/tab/ContractTabSkinBase.java | 16 +- .../table/cell/CompanyFilePathTableCell.java | 36 +++ .../PurchaseBillVoucherWindowController.java | 11 - .../service/CompanyBlackReasonService.java | 3 +- .../contract/service/ContractItemService.java | 28 -- .../contract/service/ContractService.java | 5 - .../ecep/contract/service/QueryService.java | 42 ++- .../ecep/contract/vm/IdentityViewModel.java | 4 +- client/src/main/resources/logback.xml | 22 ++ .../ui/contract/contract-tab-bid.fxml | 2 +- .../ui/contract/contract-tab-file.fxml | 2 +- .../ui/contract/contract-tab-item-v2.fxml | 2 +- .../ui/contract/contract-tab-item.fxml | 2 +- .../ui/contract/contract-tab-pay-plan.fxml | 2 +- .../contract-tab-purchase-orders.fxml | 2 +- .../ui/contract/contract-tab-sale-orders.fxml | 2 +- .../contract/contract-tab-sub-contract.fxml | 2 +- .../java/com/ecep/contract/PageArgument.java | 76 +++++ .../java/com/ecep/contract/model/Bank.java | 16 +- .../ecep/contract/model/BaseEnumEntity.java | 3 +- .../java/com/ecep/contract/model/CloudRk.java | 22 +- .../com/ecep/contract/model/CloudTyc.java | 24 +- .../java/com/ecep/contract/model/CloudYu.java | 21 ++ .../java/com/ecep/contract/model/Company.java | 17 +- .../contract/model/CompanyBankAccount.java | 22 +- .../contract/model/CompanyBlackReason.java | 21 +- .../ecep/contract/model/CompanyContact.java | 17 +- .../ecep/contract/model/CompanyContract.java | 23 +- .../ecep/contract/model/CompanyCustomer.java | 17 +- .../contract/model/CompanyCustomerEntity.java | 15 +- .../CompanyCustomerEvaluationFormFile.java | 20 +- .../contract/model/CompanyCustomerFile.java | 17 ++ .../model/CompanyCustomerFileTypeLocal.java | 19 ++ .../contract/model/CompanyExtendInfo.java | 15 +- .../com/ecep/contract/model/CompanyFile.java | 22 +- .../contract/model/CompanyFileTypeLocal.java | 20 ++ .../contract/model/CompanyInvoiceInfo.java | 30 +- .../ecep/contract/model/CompanyOldName.java | 21 +- .../ecep/contract/model/CompanyVendor.java | 17 +- .../model/CompanyVendorApprovedFile.java | 22 +- .../model/CompanyVendorApprovedItem.java | 17 +- .../model/CompanyVendorApprovedList.java | 17 +- .../contract/model/CompanyVendorEntity.java | 15 +- .../contract/model/CompanyVendorFile.java | 20 ++ .../model/CompanyVendorFileTypeLocal.java | 19 ++ .../com/ecep/contract/model/Contract.java | 50 ++-- .../contract/model/ContractBidVendor.java | 19 +- .../ecep/contract/model/ContractCatalog.java | 16 +- .../com/ecep/contract/model/ContractFile.java | 17 +- .../contract/model/ContractFileTypeLocal.java | 20 ++ .../ecep/contract/model/ContractGroup.java | 16 +- .../com/ecep/contract/model/ContractItem.java | 17 +- .../com/ecep/contract/model/ContractKind.java | 17 +- .../ecep/contract/model/ContractPayPlan.java | 22 +- .../com/ecep/contract/model/ContractType.java | 16 +- .../ecep/contract/model/CustomerCatalog.java | 27 +- .../model/CustomerSatisfactionSurvey.java | 21 ++ .../contract/model/DeliverySignMethod.java | 16 +- .../com/ecep/contract/model/Department.java | 14 +- .../com/ecep/contract/model/Employee.java | 17 +- .../ecep/contract/model/EmployeeAuthBind.java | 33 ++- .../contract/model/EmployeeLoginHistory.java | 39 ++- .../com/ecep/contract/model/EmployeeRole.java | 103 ++++--- .../ecep/contract/model/ExtendVendorInfo.java | 15 +- .../com/ecep/contract/model/Function.java | 31 +- .../com/ecep/contract/model/HolidayTable.java | 29 +- .../com/ecep/contract/model/Inventory.java | 24 +- .../ecep/contract/model/InventoryCatalog.java | 33 ++- .../contract/model/InventoryHistoryPrice.java | 43 ++- .../java/com/ecep/contract/model/Invoice.java | 26 +- .../com/ecep/contract/model/Permission.java | 31 +- .../com/ecep/contract/model/ProductType.java | 15 +- .../com/ecep/contract/model/ProductUsage.java | 13 +- .../java/com/ecep/contract/model/Project.java | 23 +- .../com/ecep/contract/model/ProjectBid.java | 22 +- .../com/ecep/contract/model/ProjectCost.java | 24 +- .../ecep/contract/model/ProjectCostItem.java | 18 +- .../com/ecep/contract/model/ProjectFile.java | 17 +- .../contract/model/ProjectFileTypeLocal.java | 19 +- .../ecep/contract/model/ProjectFundPlan.java | 23 +- .../ecep/contract/model/ProjectIndustry.java | 18 +- .../ecep/contract/model/ProjectQuotation.java | 23 ++ .../ecep/contract/model/ProjectSaleType.java | 18 +- .../model/ProjectSaleTypeRequireFileType.java | 22 +- .../com/ecep/contract/model/ProjectType.java | 18 +- .../contract/model/PurchaseBillVoucher.java | 25 +- .../model/PurchaseBillVoucherItem.java | 25 +- .../ecep/contract/model/PurchaseOrder.java | 16 +- .../contract/model/PurchaseOrderItem.java | 25 +- .../ecep/contract/model/PurchaseReceipt.java | 24 +- .../model/PurchaseSettlementVoucher.java | 22 +- .../model/PurchaseSettlementVoucherItem.java | 22 +- .../ecep/contract/model/SalesBillVoucher.java | 25 +- .../contract/model/SalesBillVoucherItem.java | 23 +- .../com/ecep/contract/model/SalesOrder.java | 16 +- .../ecep/contract/model/SalesOrderItem.java | 16 +- .../java/com/ecep/contract/model/SysConf.java | 23 ++ .../java/com/ecep/contract/model/Unit.java | 24 +- .../ecep/contract/model/VendorCatalog.java | 14 +- .../com/ecep/contract/model/VendorGroup.java | 16 +- .../model/VendorGroupRequireFileType.java | 17 +- .../ecep/contract/model/VendorTypeLocal.java | 23 ++ .../com/ecep/contract/msg/SimpleMessage.java | 4 +- .../contract/util/HibernateProxyUtils.java | 36 +++ config.properties | 4 + docs/tmp.json | 275 ++---------------- .../ecep/contract/config/JacksonConfig.java | 14 +- .../service/CompanyBankAccountService.java | 24 +- .../service/CompanyBlackReasonService.java | 20 +- .../service/CompanyContactService.java | 18 +- .../service/CompanyExtendInfoService.java | 57 +++- .../company/service/CompanyFileService.java | 18 +- .../service/CompanyInvoiceInfoService.java | 44 ++- .../service/CompanyOldNameService.java | 34 ++- .../ds/company/service/CompanyService.java | 3 + .../ds/company/service/InvoiceService.java | 21 +- .../service/ContractBidVendorService.java | 30 +- .../service/ContractCatalogService.java | 38 ++- .../contract/service/ContractFileService.java | 20 +- .../service/ContractGroupService.java | 21 +- .../contract/service/ContractItemService.java | 20 +- .../contract/service/ContractKindService.java | 39 ++- .../service/ContractPayPlanService.java | 33 ++- .../ds/contract/service/ContractService.java | 41 ++- .../contract/service/ContractTypeService.java | 13 +- .../service/ExtendVendorInfoService.java | 52 +++- .../PurchaseBillVoucherItemService.java | 14 +- .../service/PurchaseBillVoucherService.java | 48 +-- .../service/PurchaseOrderItemService.java | 35 ++- .../service/PurchaseOrdersService.java | 49 ++-- .../contract/handler/WebSocketHandler.java | 179 +++++++----- .../contract/util/SpecificationUtils.java | 30 +- 149 files changed, 2246 insertions(+), 1413 deletions(-) create mode 100644 client/src/main/java/com/ecep/contract/controller/table/cell/CompanyFilePathTableCell.java create mode 100644 client/src/main/resources/logback.xml create mode 100644 common/src/main/java/com/ecep/contract/PageArgument.java create mode 100644 common/src/main/java/com/ecep/contract/util/HibernateProxyUtils.java diff --git a/client/pom.xml b/client/pom.xml index de2a1e4..9e14534 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -73,6 +73,13 @@ okhttp 4.12.0 + + + + ch.qos.logback + logback-classic + 1.4.14 + diff --git a/client/src/main/java/com/ecep/contract/Desktop.java b/client/src/main/java/com/ecep/contract/Desktop.java index b8c7ced..bb0fd8e 100644 --- a/client/src/main/java/com/ecep/contract/Desktop.java +++ b/client/src/main/java/com/ecep/contract/Desktop.java @@ -20,6 +20,7 @@ import com.ecep.contract.controller.BaseController; import com.ecep.contract.controller.HomeWindowController; import com.ecep.contract.controller.OkHttpLoginController; import com.ecep.contract.task.TaskMonitorCenter; +import com.ecep.contract.util.HibernateProxyUtils; import com.ecep.contract.util.TextMessageHolder; import com.ecep.contract.util.UITools; import com.ecep.contract.vm.CurrentEmployee; @@ -37,12 +38,10 @@ import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.stage.StageStyle; import lombok.Getter; -import lombok.Setter; import okhttp3.Cookie; import okhttp3.CookieJar; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; -import okhttp3.WebSocket; /** * JavaFx 应用程序 @@ -187,6 +186,7 @@ public class Desktop extends Application { } else { logger.warn("配置文件{}不存在", configFile.getAbsolutePath()); } + HibernateProxyUtils.useProxy(false); runAsync(() -> { SpringApp.launch(properties, holder); @@ -204,12 +204,11 @@ public class Desktop extends Application { controller.setHolder(holder); controller.setPrimaryStage(primaryStage); controller.setProperties(properties); - // while (true) { - controller.tryLogin().whenComplete((v, e) -> { - if (e != null) { - holder.error("登录失败:" + e.getMessage()); - } else { + while (true) { + try { + controller.tryLogin().get(); holder.info("登录成功"); + try { while (!SpringApp.isRunning()) { System.out.println("等待启动"); @@ -221,13 +220,13 @@ public class Desktop extends Application { // 必须要等待启动成功后才能关闭主场景,否则进程结束程序退出 HomeWindowController.show().thenRun(() -> Platform.runLater(primaryStage::close)); - } - }); - // if (getActiveEmployeeId() > 0) { - // break; - // } - // } + break; + } catch (Exception ex) { + holder.error(ex.getMessage()); + Thread.sleep(3000); + } + } } catch (Exception e) { holder.error("登录失败:" + e.getMessage()); logger.error(e.getMessage(), e); diff --git a/client/src/main/java/com/ecep/contract/SpringApp.java b/client/src/main/java/com/ecep/contract/SpringApp.java index 6a1f47f..c5ebccf 100644 --- a/client/src/main/java/com/ecep/contract/SpringApp.java +++ b/client/src/main/java/com/ecep/contract/SpringApp.java @@ -46,10 +46,10 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; @SpringBootApplication(exclude = { - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class, - org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration.class, - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class, - org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration.class + org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class, + org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration.class, + org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class, + org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration.class }) @EnableScheduling @EnableAsync @@ -237,14 +237,18 @@ public class SpringApp { public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); + // LocalDate javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); - javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer( - DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); - javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE)); - javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer( - DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); + // LocalTime + javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ISO_LOCAL_TIME)); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME)); + // LocalDateTime + javaTimeModule.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + javaTimeModule.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + objectMapper.registerModule(javaTimeModule); return objectMapper; } diff --git a/client/src/main/java/com/ecep/contract/WebSocketService.java b/client/src/main/java/com/ecep/contract/WebSocketService.java index 2bb6391..6db8bad 100644 --- a/client/src/main/java/com/ecep/contract/WebSocketService.java +++ b/client/src/main/java/com/ecep/contract/WebSocketService.java @@ -85,7 +85,7 @@ public class WebSocketService { if (node.has("success")) { if (!node.get("success").asBoolean()) { future.completeExceptionally( - new RuntimeException("请求失败:" + node.get("message").asText())); + new RuntimeException("请求失败:来自服务器的消息=" + node.get("message").asText())); return; } } @@ -153,9 +153,9 @@ public class WebSocketService { } String json = objectMapper.writeValueAsString(msg); + callbacks.put(msg.getMessageId(), future); if (webSocket.send(json)) { logger.debug("send message success:{}", json); - callbacks.put(msg.getMessageId(), future); } else { future.completeExceptionally(new RuntimeException("Failed to send WebSocket message")); } diff --git a/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java b/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java index 72bd48d..5b69d67 100644 --- a/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java +++ b/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java @@ -10,6 +10,7 @@ import com.ecep.contract.controller.tab.AbstEntityBasedTabSkin; import com.ecep.contract.controller.tab.RefreshableSkin; import com.ecep.contract.controller.tab.TabSkin; import com.ecep.contract.model.IdentityEntity; +import com.ecep.contract.service.QueryService; import com.ecep.contract.service.ViewModelService; import com.ecep.contract.util.UITools; import com.ecep.contract.vm.BaseViewModel; @@ -46,24 +47,38 @@ public abstract class AbstEntityController aClass = getClass(); super.onShown(windowEvent); - loadedFuture = CompletableFuture.supplyAsync(() -> { - T entity = loadEntity(); - if (entity == null) { + ViewModelService service = getViewModelService(); + + if (service instanceof QueryService queryService) { + setStatus("读取..."); + loadedFuture = queryService.asyncFindById(viewModel.getId().get()); + loadedFuture.thenAccept(entity -> { // fixed, bind change if new view model create if (viewModel != null) { viewModel.bindListener(); } - return null; - } - Platform.runLater(() -> { setStatus(); - viewModel.update(entity); + // BaseViewModel.updateInFxApplicationThread(entity, viewModel); }); - viewModel.bindListener(); - return entity; - }); + loadedFuture.exceptionally(ex -> { + handleException("载入失败,#" + viewModel.getId().get(), ex); + return null; + }); + } else { + loadedFuture = CompletableFuture.supplyAsync(() -> { + T entity = getViewModelService().findById(viewModel.getId().get()); + if (entity == null) { + return null; + } + Platform.runLater(() -> { + setStatus(); + viewModel.update(entity); + }); + viewModel.bindListener(); + return entity; + }); + } registerTabSkins(); if (saveBtn != null) { @@ -74,10 +89,6 @@ public abstract class AbstEntityController refresh() { CompletableFuture future = new CompletableFuture<>(); - T entity = loadEntity(); - - Platform.runLater(() -> { + ViewModelService service = getViewModelService(); + if (service instanceof QueryService queryService) { + loadedFuture = queryService.asyncFindById(viewModel.getId().get()); + loadedFuture.whenComplete((entity, ex) -> { + if (ex != null) { + future.completeExceptionally(ex); + return; + } + BaseViewModel.updateInFxApplicationThread(entity, viewModel); + }); + } else { + T entity = service.findById(viewModel.getId().get()); setEntity(entity); + } - List list = tabSkins.stream() - .filter(v -> v instanceof RefreshableSkin) - .map(v -> ((RefreshableSkin) v)).toList(); + List list = tabSkins.stream() + .filter(v -> v instanceof RefreshableSkin) + .map(v -> ((RefreshableSkin) v)).toList(); - if (list.isEmpty()) { - future.complete(null); - return; - } + if (list.isEmpty()) { + future.complete(null); + return future; + } - CompletableFuture.allOf(list - .stream() - .map(RefreshableSkin::refresh) - .filter(Objects::nonNull) - .toArray(CompletableFuture[]::new)) - .whenComplete((v, ex) -> { - if (ex != null) { - future.completeExceptionally(ex); - } else { - future.complete(null); - } - }); - - }); - return future; + return CompletableFuture.allOf(list + .stream() + .map(RefreshableSkin::refresh) + .filter(Objects::nonNull) + .toArray(CompletableFuture[]::new)) + .whenComplete((v, ex) -> { + if (ex != null) { + future.completeExceptionally(ex); + } else { + future.complete(null); + } + }); } public abstract ViewModelService getViewModelService(); diff --git a/client/src/main/java/com/ecep/contract/controller/OkHttpLoginController.java b/client/src/main/java/com/ecep/contract/controller/OkHttpLoginController.java index a997a23..b71e830 100644 --- a/client/src/main/java/com/ecep/contract/controller/OkHttpLoginController.java +++ b/client/src/main/java/com/ecep/contract/controller/OkHttpLoginController.java @@ -104,25 +104,16 @@ public class OkHttpLoginController implements MessageHolder { String userName = getUserName(); String password = getPassword(); - CompletableFuture loginFuture = new CompletableFuture<>(); - if (StringUtils.hasText(userName) && StringUtils.hasText(password)) { - login(userName, password).whenComplete((v, e) -> { - if (e != null) { - loginFuture.completeExceptionally(e); - } else { - loginFuture.complete(v); - } - }); + return login(userName, password); } else { + CompletableFuture loginFuture = new CompletableFuture<>(); Platform.runLater(() -> { showLoginDialog(); - if (!loginFuture.isDone()) { - loginFuture.complete(null); - } + loginFuture.complete(null); }); + return loginFuture; } - return loginFuture; } private String getUserName() { diff --git a/client/src/main/java/com/ecep/contract/controller/company/AbstCompanyTableTabSkin.java b/client/src/main/java/com/ecep/contract/controller/company/AbstCompanyTableTabSkin.java index 64c115b..3931b8d 100644 --- a/client/src/main/java/com/ecep/contract/controller/company/AbstCompanyTableTabSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/company/AbstCompanyTableTabSkin.java @@ -12,14 +12,10 @@ import com.ecep.contract.vm.CompanyBasedViewModel; import com.ecep.contract.vm.CompanyViewModel; import com.ecep.contract.vm.IdentityViewModel; -import lombok.Setter; - public abstract class AbstCompanyTableTabSkin> extends AbstEntityTableTabSkin implements TabSkin, TableOfTabSkin { - @Setter - private CompanyService companyService; public AbstCompanyTableTabSkin(CompanyWindowController controller) { super(controller); @@ -40,10 +36,7 @@ public abstract class AbstCompanyTableTabSkin new CompanyTabSkinBase(this)); diff --git a/client/src/main/java/com/ecep/contract/controller/company_old_name/CompanyOldNameWindowController.java b/client/src/main/java/com/ecep/contract/controller/company_old_name/CompanyOldNameWindowController.java index 14f649c..5f13236 100644 --- a/client/src/main/java/com/ecep/contract/controller/company_old_name/CompanyOldNameWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/company_old_name/CompanyOldNameWindowController.java @@ -72,16 +72,6 @@ public class CompanyOldNameWindowController extends AbstEntityController new InventoryTabSkinBase(this)); @@ -135,6 +122,6 @@ public class InventoryWindowController extends AbstEntityController "[" + viewModel.getId().get() + "] " + viewModel.getCode().get() + " " + viewModel.getName().getValue() + " 项目详情", viewModel.getCode(), viewModel.getName())); } - @Override - protected Project loadEntity() { - return projectService.findById(viewModel.getId().get()); - } - - @Override - protected Project saveEntity(Project entity) { - return projectService.save(entity); - } - @Override protected void registerTabSkins() { registerTabSkin(baseInfoTab, this::createBaseTabSkin); diff --git a/client/src/main/java/com/ecep/contract/controller/tab/AbstGenericTabSkin.java b/client/src/main/java/com/ecep/contract/controller/tab/AbstGenericTabSkin.java index 594d1d3..9e547e4 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/AbstGenericTabSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/AbstGenericTabSkin.java @@ -20,6 +20,10 @@ public abstract class AbstGenericTabSkin implements Ta this.controller = controller; } + public T getBean(Class requiredType) throws BeansException { + return controller.getCachedBean(requiredType); + } + public T getCachedBean(Class requiredType) throws BeansException { return controller.getCachedBean(requiredType); } diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java index 9275fd5..018cacc 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java @@ -7,7 +7,6 @@ import java.util.Map; import java.util.NoSuchElementException; import java.util.concurrent.CompletableFuture; -import org.springframework.beans.BeansException; import org.springframework.util.StringUtils; import com.ecep.contract.DesktopUtils; @@ -21,7 +20,6 @@ import com.ecep.contract.controller.table.cell.ContractTypeTableCell; import com.ecep.contract.controller.table.cell.EmployeeTableCell; import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell; import com.ecep.contract.converter.ContractGroupStringConverter; -import com.ecep.contract.converter.EmployeeStringConverter; import com.ecep.contract.model.Company; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ContractGroup; @@ -32,7 +30,6 @@ import com.ecep.contract.service.ContractGroupService; import com.ecep.contract.service.ContractKindService; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.ContractTypeService; -import com.ecep.contract.service.YongYouU8Service; import com.ecep.contract.task.ContractRepairByCompanyTask; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.util.UITools; @@ -117,7 +114,7 @@ public class CompanyTabSkinContract ObservableList contractGroups = FXCollections.observableArrayList(); contractGroups.add(null); - contractGroups.addAll(getViewModelService().findAllGroups()); + contractGroups.addAll(getContractGroupService().findAll()); contractGroupSelector.setItems(contractGroups); contractGroupSelector.setConverter(new ContractGroupStringConverter(contractGroups)); contractSearchKeyField.setOnKeyReleased(event -> { diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinFile.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinFile.java index f2c969c..7b83414 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinFile.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinFile.java @@ -17,6 +17,7 @@ import com.ecep.contract.constant.CloudServiceConstant; import com.ecep.contract.controller.company.AbstCompanyTableTabSkin; import com.ecep.contract.controller.company.CompanyWindowController; import com.ecep.contract.controller.table.EditableEntityTableTabSkin; +import com.ecep.contract.controller.table.cell.CompanyFilePathTableCell; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyFile; import com.ecep.contract.model.CompanyFileTypeLocal; @@ -36,9 +37,7 @@ import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.MenuItem; import javafx.scene.control.Tab; -import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; -import lombok.Setter; /** * @@ -61,8 +60,6 @@ public class CompanyTabSkinFile public MenuItem fileTable_menu_del; public MenuItem fileTable_menu_copy_as_matched_by_contract; - @Setter - private CompanyFileService companyFileService; private final ObservableMap fileTypeLocalMap = FXCollections .observableHashMap(); @@ -72,11 +69,12 @@ public class CompanyTabSkinFile setDragAndDropFileHandler(this::moveFileToCompany); } + protected CompanyFileService getViewModelService() { + return getCompanyFileService(); + } + CompanyFileService getCompanyFileService() { - if (companyFileService == null) { - companyFileService = getBean(CompanyFileService.class); - } - return companyFileService; + return getBean(CompanyFileService.class); } @Override @@ -96,7 +94,7 @@ public class CompanyTabSkinFile typeColumn.setCellValueFactory(param -> Bindings.valueAt(fileTypeLocalMap, param.getValue().getType()) .map(CompanyFileTypeLocal::getValue)); filePathColumn.setCellValueFactory(param -> param.getValue().getFilePath()); - filePathColumn.setCellFactory(param -> new FileTableFilePathTableCell()); + filePathColumn.setCellFactory(param -> new CompanyFilePathTableCell<>(viewModel.getPath())); applyDateColumn.setCellValueFactory(param -> param.getValue().getApplyDate()); expiringDateColumn.setCellValueFactory(param -> param.getValue().getExpiringDate()); @@ -151,7 +149,7 @@ public class CompanyTabSkinFile * 把文件从 老系统中移到 \\10.84.209.8\项目信息\相关方信息 目录中 */ private void onTableMoveFileAction(ActionEvent event) { - CompanyFileService companyFileService = getViewModelService(); + CompanyFileService companyFileService = getCompanyFileService(); Company company = getParent(); List list = companyFileService.findByCompany(company); if (list.isEmpty()) { @@ -354,26 +352,4 @@ public class CompanyTabSkinFile DesktopUtils.showInExplorer(file); } } - - class FileTableFilePathTableCell extends TableCell { - @Override - protected void updateItem(String item, boolean empty) { - super.updateItem(item, empty); - if (empty || item == null) { - setText(""); - return; - } - String path = viewModel.getPath().get(); - if (StringUtils.hasText(path)) { - if (item.startsWith(path)) { - item = "~" + item.substring(path.length()); - } - } - setText(item); - } - } - - protected CompanyFileService getViewModelService() { - return getCompanyFileService(); - } } diff --git a/client/src/main/java/com/ecep/contract/controller/tab/ContractManagerSkin.java b/client/src/main/java/com/ecep/contract/controller/tab/ContractManagerSkin.java index 8c23a53..f8e30a2 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/ContractManagerSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/ContractManagerSkin.java @@ -49,35 +49,18 @@ public class ContractManagerSkin public ContractService getContractService() { return controller.getViewModelService(); } - public CompanyService getCompanyService() { - if (companyService == null) { - companyService = getBean(CompanyService.class); - } - return companyService; + return getBean(CompanyService.class); } - private ContractTypeService getContractTypeService() { - if (contractTypeService == null) { - contractTypeService = getBean(ContractTypeService.class); - } - return contractTypeService; + return getBean(ContractTypeService.class); } - private ContractKindService getContractKindService() { - if (contractKindService == null) { - contractKindService = getBean(ContractKindService.class); - } - return contractKindService; + return getBean(ContractKindService.class); } - private ContractGroupService getContractGroupService() { - if (contractGroupService == null) { - contractGroupService = getBean(ContractGroupService.class); - } - return contractGroupService; + return getBean(ContractGroupService.class); } - public Map getSpecification() { Map params = super.getSpecification(); if (controller.composeViewBtn.isSelected()) { @@ -108,7 +91,7 @@ public class ContractManagerSkin @SuppressWarnings("unchecked") @Override public void initializeTable() { - ComboBoxUtils.initialComboBox(controller.groupSelector, getContractService().findAllGroups(), true); + ComboBoxUtils.initialComboBox(controller.groupSelector, getContractGroupService().findAll(), true); controller.groupSelector.valueProperty().addListener((observable, oldValue, newValue) -> { loadTableDataSet(false); }); diff --git a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinBase.java b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinBase.java index a5c9f40..89c2034 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinBase.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinBase.java @@ -109,7 +109,7 @@ public class ContractTabSkinBase extends AbstContractBasedTabSkin { initializeBaseTabCompanyFieldAutoCompletion(controller.companyField); controller.groupField.textProperty().bind(viewModel.getGroup().map(group -> { - ContractGroupService groupService = controller.getCachedBean(ContractGroupService.class); + ContractGroupService groupService = getContractGroupService(); if (!ProxyUtils.isInitialized(group)) { group = groupService.findById(group.getId()); } @@ -506,22 +506,26 @@ public class ContractTabSkinBase extends AbstContractBasedTabSkin { } public CompanyCustomerService getCompanyCustomerService() { - return controller.getCachedBean(CompanyCustomerService.class); + return getCachedBean(CompanyCustomerService.class); } public ProjectService getProjectService() { - return controller.getCachedBean(ProjectService.class); + return getCachedBean(ProjectService.class); } public ProjectSaleTypeService getSaleTypeService() { - return controller.getCachedBean(ProjectSaleTypeService.class); + return getCachedBean(ProjectSaleTypeService.class); } public ExtendVendorInfoService getExtendVendorInfoService() { - return controller.getCachedBean(ExtendVendorInfoService.class); + return getCachedBean(ExtendVendorInfoService.class); + } + + public ContractGroupService getContractGroupService() { + return getCachedBean(ContractGroupService.class); } public VendorGroupService getVendorGroupService() { - return controller.getCachedBean(VendorGroupService.class); + return getCachedBean(VendorGroupService.class); } } diff --git a/client/src/main/java/com/ecep/contract/controller/table/cell/CompanyFilePathTableCell.java b/client/src/main/java/com/ecep/contract/controller/table/cell/CompanyFilePathTableCell.java new file mode 100644 index 0000000..05aa656 --- /dev/null +++ b/client/src/main/java/com/ecep/contract/controller/table/cell/CompanyFilePathTableCell.java @@ -0,0 +1,36 @@ +package com.ecep.contract.controller.table.cell; + +import org.springframework.util.StringUtils; + +import javafx.beans.property.SimpleStringProperty; +import javafx.scene.control.TableCell; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +public class CompanyFilePathTableCell extends TableCell { + private SimpleStringProperty companyPathProperty; + + public void setCompanyPathProperty(SimpleStringProperty property) { + this.companyPathProperty = property; + } + + @Override + protected void updateItem(String item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setText(""); + return; + } + if (companyPathProperty != null) { + String path = companyPathProperty.get(); + if (StringUtils.hasText(path)) { + if (item.startsWith(path)) { + item = "~" + item.substring(path.length()); + } + } + } + setText(item); + } +} diff --git a/client/src/main/java/com/ecep/contract/controller/vendor/PurchaseBillVoucherWindowController.java b/client/src/main/java/com/ecep/contract/controller/vendor/PurchaseBillVoucherWindowController.java index 1a5e0da..587cd2a 100644 --- a/client/src/main/java/com/ecep/contract/controller/vendor/PurchaseBillVoucherWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/vendor/PurchaseBillVoucherWindowController.java @@ -29,17 +29,6 @@ public class PurchaseBillVoucherWindowController @Autowired private PurchaseBillVoucherService service; - - @Override - protected PurchaseBillVoucher loadEntity() { - return service.findById(viewModel.getId().get()); - } - - @Override - protected PurchaseBillVoucher saveEntity(PurchaseBillVoucher entity) { - return service.save(entity); - } - @Override public void show(Stage stage) { super.show(stage); diff --git a/client/src/main/java/com/ecep/contract/service/CompanyBlackReasonService.java b/client/src/main/java/com/ecep/contract/service/CompanyBlackReasonService.java index 34c7680..83a60eb 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyBlackReasonService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyBlackReasonService.java @@ -6,7 +6,6 @@ import com.ecep.contract.model.CompanyBlackReason; import com.ecep.contract.vm.CompanyBlackReasonViewModel; @Service -public class CompanyBlackReasonService - extends QueryService { +public class CompanyBlackReasonService extends QueryService { } diff --git a/client/src/main/java/com/ecep/contract/service/ContractItemService.java b/client/src/main/java/com/ecep/contract/service/ContractItemService.java index 059780f..0aad692 100644 --- a/client/src/main/java/com/ecep/contract/service/ContractItemService.java +++ b/client/src/main/java/com/ecep/contract/service/ContractItemService.java @@ -1,10 +1,7 @@ package com.ecep.contract.service; import java.util.List; -import java.util.Map; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import com.ecep.contract.model.ContractItem; @@ -14,31 +11,6 @@ import com.ecep.contract.vm.ContractItemViewModel; @Service public class ContractItemService extends QueryService { - @Override - public ContractItem findById(Integer id) { - throw new UnsupportedOperationException("Unimplemented method 'findById'"); - } - - @Override - public ContractItem save(ContractItem entity) { - throw new UnsupportedOperationException("Unimplemented method 'save'"); - } - - @Override - public void delete(ContractItem entity) { - throw new UnsupportedOperationException("Unimplemented method 'delete'"); - } - - @Override - public List findAll() { - throw new UnsupportedOperationException("Unimplemented method 'findAll'"); - } - - @Override - public Page findAll(Map params, Pageable pageable) { - throw new UnsupportedOperationException("Unimplemented method 'findAll'"); - } - public List findAllByInventory(Inventory parent) { throw new UnsupportedOperationException("Unimplemented method 'findAllByInventory'"); } diff --git a/client/src/main/java/com/ecep/contract/service/ContractService.java b/client/src/main/java/com/ecep/contract/service/ContractService.java index 68e6e9a..6141b96 100644 --- a/client/src/main/java/com/ecep/contract/service/ContractService.java +++ b/client/src/main/java/com/ecep/contract/service/ContractService.java @@ -10,7 +10,6 @@ import com.ecep.contract.MessageHolder; import com.ecep.contract.model.CompanyVendor; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ContractFile; -import com.ecep.contract.model.ContractGroup; import com.ecep.contract.model.Project; import com.ecep.contract.vm.ContractViewModel; @@ -22,10 +21,6 @@ public class ContractService extends QueryService { throw new UnsupportedOperationException("Unimplemented method 'updateParentCode'"); } - public List findAllGroups() { - throw new UnsupportedOperationException("Unimplemented method 'findAllGroups'"); - } - public Contract findByCode(String string) { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'findByCode'"); diff --git a/client/src/main/java/com/ecep/contract/service/QueryService.java b/client/src/main/java/com/ecep/contract/service/QueryService.java index 4abf6e4..4186d6e 100644 --- a/client/src/main/java/com/ecep/contract/service/QueryService.java +++ b/client/src/main/java/com/ecep/contract/service/QueryService.java @@ -4,6 +4,7 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; @@ -12,10 +13,12 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import com.ecep.contract.PageArgument; import com.ecep.contract.WebSocketService; import com.ecep.contract.model.IdentityEntity; import com.ecep.contract.msg.SimpleMessage; import com.ecep.contract.vm.IdentityViewModel; +import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -31,8 +34,6 @@ public class QueryService")[0].split(",")[1].trim(); @@ -92,31 +93,49 @@ public class QueryService asyncFindById(Integer id) { SimpleMessage msg = new SimpleMessage(); msg.setService(getBeanName()); msg.setMethod("findById"); msg.setArguments(id); - try { - JsonNode response = webSocketService.send(msg).get(readTimeout, TimeUnit.MILLISECONDS); - if (response != null) { - T newEntity = createNewEntity(); - objectMapper.updateValue(newEntity, response); - return newEntity; + return webSocketService.send(msg).orTimeout(readTimeout, TimeUnit.MILLISECONDS).handle((response, ex) -> { + if (ex != null) { + return null; } + if (response == null) { + + return null; + } + T newEntity = createNewEntity(); + try { + objectMapper.updateValue(newEntity, response); + } catch (JsonMappingException e) { + throw new RuntimeException(response.toString(), e); + } + return newEntity; + }); + } + + @Override + public T findById(Integer id) { + try { + return asyncFindById(id).get(); } catch (Exception e) { e.printStackTrace(); } return null; } + public List findAll() { + return findAll(null, Pageable.unpaged()).getContent(); + } + @Override public Page findAll(Map params, Pageable pageable) { SimpleMessage msg = new SimpleMessage(); msg.setService(getBeanName()); msg.setMethod("findAll"); - msg.setArguments(params, pageable); + msg.setArguments(params, PageArgument.of(pageable)); try { JsonNode response = webSocketService.send(msg).get(readTimeout, TimeUnit.MILLISECONDS); if (response != null) { @@ -147,7 +166,6 @@ public class QueryService search(String searchText) { Map params = getSpecification(searchText); List list = findAll(params, Pageable.ofSize(10)).getContent(); diff --git a/client/src/main/java/com/ecep/contract/vm/IdentityViewModel.java b/client/src/main/java/com/ecep/contract/vm/IdentityViewModel.java index 046e087..4bf1453 100644 --- a/client/src/main/java/com/ecep/contract/vm/IdentityViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/IdentityViewModel.java @@ -20,7 +20,9 @@ public class IdentityViewModel extends BaseViewModel + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/src/main/resources/ui/contract/contract-tab-bid.fxml b/client/src/main/resources/ui/contract/contract-tab-bid.fxml index 56642cc..669b1f2 100644 --- a/client/src/main/resources/ui/contract/contract-tab-bid.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-bid.fxml @@ -5,7 +5,7 @@ + fx:controller="com.ecep.contract.controller.tab.ContractTabSkinVendorBid"> diff --git a/client/src/main/resources/ui/contract/contract-tab-file.fxml b/client/src/main/resources/ui/contract/contract-tab-file.fxml index c16f518..38792a8 100644 --- a/client/src/main/resources/ui/contract/contract-tab-file.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-file.fxml @@ -4,7 +4,7 @@ + fx:controller="com.ecep.contract.controller.tab.ContractTabSkinFiles"> diff --git a/client/src/main/resources/ui/contract/contract-tab-item-v2.fxml b/client/src/main/resources/ui/contract/contract-tab-item-v2.fxml index 4a99060..7b57257 100644 --- a/client/src/main/resources/ui/contract/contract-tab-item-v2.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-item-v2.fxml @@ -5,7 +5,7 @@ + fx:controller="com.ecep.contract.controller.tab.ContractTabSkinItemsV2"> diff --git a/client/src/main/resources/ui/contract/contract-tab-item.fxml b/client/src/main/resources/ui/contract/contract-tab-item.fxml index 34301b0..6efcc22 100644 --- a/client/src/main/resources/ui/contract/contract-tab-item.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-item.fxml @@ -5,7 +5,7 @@ + fx:controller="com.ecep.contract.controller.tab.ContractTabSkinItems"> diff --git a/client/src/main/resources/ui/contract/contract-tab-pay-plan.fxml b/client/src/main/resources/ui/contract/contract-tab-pay-plan.fxml index f5642a6..d9426c6 100644 --- a/client/src/main/resources/ui/contract/contract-tab-pay-plan.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-pay-plan.fxml @@ -5,7 +5,7 @@ + fx:controller="com.ecep.contract.controller.tab.ContractTabSkinPayPlan"> diff --git a/client/src/main/resources/ui/contract/contract-tab-purchase-orders.fxml b/client/src/main/resources/ui/contract/contract-tab-purchase-orders.fxml index 110a0d1..7c5274c 100644 --- a/client/src/main/resources/ui/contract/contract-tab-purchase-orders.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-purchase-orders.fxml @@ -5,7 +5,7 @@ diff --git a/client/src/main/resources/ui/contract/contract-tab-sale-orders.fxml b/client/src/main/resources/ui/contract/contract-tab-sale-orders.fxml index 56fb2b9..4e7126f 100644 --- a/client/src/main/resources/ui/contract/contract-tab-sale-orders.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-sale-orders.fxml @@ -5,7 +5,7 @@ diff --git a/client/src/main/resources/ui/contract/contract-tab-sub-contract.fxml b/client/src/main/resources/ui/contract/contract-tab-sub-contract.fxml index 877b96d..2c31711 100644 --- a/client/src/main/resources/ui/contract/contract-tab-sub-contract.fxml +++ b/client/src/main/resources/ui/contract/contract-tab-sub-contract.fxml @@ -5,7 +5,7 @@ diff --git a/common/src/main/java/com/ecep/contract/PageArgument.java b/common/src/main/java/com/ecep/contract/PageArgument.java new file mode 100644 index 0000000..8d90bd2 --- /dev/null +++ b/common/src/main/java/com/ecep/contract/PageArgument.java @@ -0,0 +1,76 @@ +package com.ecep.contract; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Direction; +import org.springframework.data.domain.Sort.NullHandling; +import org.springframework.data.domain.Sort.Order; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +public class PageArgument { + + private boolean paged = false; + private int pageNumber = 0; + private int pageSize = 0; + private long offset = 0; + private List orders; + + public static PageArgument of(Pageable pageable) { + PageArgument page = new PageArgument(); + page.setPaged(pageable.isPaged()); + if (page.isPaged()) { + page.setPageNumber(pageable.getPageNumber()); + page.setPageSize(pageable.getPageSize()); + page.setOffset(pageable.getOffset()); + } + + Sort sort = pageable.getSort(); + if (sort != null && sort.isSorted()) { + page.setOrders(sort.stream().map(OrderArgument::of).collect(Collectors.toList())); + } + return page; + } + + public Pageable toPageable() { + Sort sort = null; + if (orders != null && !orders.isEmpty()) { + sort = Sort.by(orders.stream().map(order -> new Order(order.getDirection(), order.getProperty(), + order.isIgnoreCase(), order.getNullHandling())) + .collect(Collectors.toList())); + } else { + sort = Sort.unsorted(); + } + if (isPaged()) { + return PageRequest.of(pageNumber, pageSize, sort); + } + return Pageable.unpaged(sort); + } + + public boolean isUnpaged() { + return !isPaged(); + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class OrderArgument { + private Direction direction; + private String property; + private boolean ignoreCase; + private NullHandling nullHandling; + + public static OrderArgument of(Order order) { + return new OrderArgument(order.getDirection(), order.getProperty(), order.isIgnoreCase(), + order.getNullHandling()); + } + } + +} diff --git a/common/src/main/java/com/ecep/contract/model/Bank.java b/common/src/main/java/com/ecep/contract/model/Bank.java index ec54872..5076c41 100644 --- a/common/src/main/java/com/ecep/contract/model/Bank.java +++ b/common/src/main/java/com/ecep/contract/model/Bank.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -40,15 +40,7 @@ public class Bank implements BasedEntity, IdentityEntity, Serializable { public final boolean equals(Object object) { if (this == object) return true; - if (object == null) - return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) return false; Bank bank = (Bank) object; return getId() != null && Objects.equals(getId(), bank.getId()); @@ -56,8 +48,6 @@ public class Bank implements BasedEntity, IdentityEntity, Serializable { @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/BaseEnumEntity.java b/common/src/main/java/com/ecep/contract/model/BaseEnumEntity.java index 9cf3fbe..5b9d9f2 100644 --- a/common/src/main/java/com/ecep/contract/model/BaseEnumEntity.java +++ b/common/src/main/java/com/ecep/contract/model/BaseEnumEntity.java @@ -15,7 +15,7 @@ import lombok.ToString; @Setter @MappedSuperclass @ToString -public class BaseEnumEntity> implements IdentityEntity { +public abstract class BaseEnumEntity> implements IdentityEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) @@ -33,4 +33,5 @@ public class BaseEnumEntity> implements IdentityEntity { @Column(name = "VALUE") private String value; + } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CloudRk.java b/common/src/main/java/com/ecep/contract/model/CloudRk.java index 6609c9e..2ed6b91 100644 --- a/common/src/main/java/com/ecep/contract/model/CloudRk.java +++ b/common/src/main/java/com/ecep/contract/model/CloudRk.java @@ -1,11 +1,13 @@ package com.ecep.contract.model; import java.io.Serializable; -import java.time.Instant; import java.time.LocalDateTime; +import java.util.Objects; import org.hibernate.annotations.ColumnDefault; +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -133,4 +135,22 @@ public class CloudRk implements IdentityEntity, Serializable { */ @Column(name = "VERSION", nullable = false) private Integer version = 0; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CloudRk cloudRk = (CloudRk) object; + return getId() != null && Objects.equals(getId(), cloudRk.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CloudTyc.java b/common/src/main/java/com/ecep/contract/model/CloudTyc.java index cfdf7b7..15e703e 100644 --- a/common/src/main/java/com/ecep/contract/model/CloudTyc.java +++ b/common/src/main/java/com/ecep/contract/model/CloudTyc.java @@ -5,7 +5,8 @@ import java.time.Instant; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -71,28 +72,21 @@ public class CloudTyc implements IdentityEntity, Serializable { private int version; @Override - public final boolean equals(Object o) { - if (this == o) + public final boolean equals(Object object) { + if (this == object) return true; - if (o == null) + if (object == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy - ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() - : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; - CloudTyc cloudInfo = (CloudTyc) o; + } + CloudTyc cloudInfo = (CloudTyc) object; return getId() != null && Objects.equals(getId(), cloudInfo.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CloudYu.java b/common/src/main/java/com/ecep/contract/model/CloudYu.java index 67ecef7..1f6d358 100644 --- a/common/src/main/java/com/ecep/contract/model/CloudYu.java +++ b/common/src/main/java/com/ecep/contract/model/CloudYu.java @@ -3,9 +3,12 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.Instant; import java.time.LocalDate; +import java.util.Objects; import org.hibernate.annotations.ColumnDefault; +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -69,4 +72,22 @@ public class CloudYu implements IdentityEntity, Serializable { */ @Column(name = "CLOUD_LATEST") private Instant cloudLatest; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CloudYu cloudYu = (CloudYu) object; + return getId() != null && Objects.equals(getId(), cloudYu.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/Company.java b/common/src/main/java/com/ecep/contract/model/Company.java index 0ce8fc7..144e7d4 100644 --- a/common/src/main/java/com/ecep/contract/model/Company.java +++ b/common/src/main/java/com/ecep/contract/model/Company.java @@ -5,7 +5,8 @@ import java.time.LocalDate; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -185,15 +186,7 @@ public class Company implements IdentityEntity, NamedEntity, BasedEntity, Serial public final boolean equals(Object object) { if (this == object) return true; - if (object == null) - return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) return false; Company company = (Company) object; return getId() != null && Objects.equals(getId(), company.getId()); @@ -201,9 +194,7 @@ public class Company implements IdentityEntity, NamedEntity, BasedEntity, Serial @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyBankAccount.java b/common/src/main/java/com/ecep/contract/model/CompanyBankAccount.java index 6c6a2ee..86f7c9a 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyBankAccount.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyBankAccount.java @@ -1,6 +1,10 @@ package com.ecep.contract.model; import java.io.Serializable; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -17,7 +21,7 @@ import lombok.ToString; @Setter @jakarta.persistence.Entity @Table(name = "COMPANY_BANK_ACCOUNT", schema = "supplier_ms") -public class CompanyBankAccount implements IdentityEntity, BasedEntity, CompanyBasedEntity, Serializable { +public class CompanyBankAccount implements IdentityEntity, BasedEntity, CompanyBasedEntity, Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -49,9 +53,23 @@ public class CompanyBankAccount implements IdentityEntity, BasedEntity, Company @Column(name = "DESCRIPTION") private String description; - @Override public String toPrettyString() { return account; } + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; + CompanyBankAccount that = (CompanyBankAccount) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyBlackReason.java b/common/src/main/java/com/ecep/contract/model/CompanyBlackReason.java index 4a552e1..9929501 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyBlackReason.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyBlackReason.java @@ -2,11 +2,13 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDate; +import java.util.Objects; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import com.ecep.contract.BlackReasonType; +import com.ecep.contract.util.HibernateProxyUtils; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.Column; @@ -31,7 +33,7 @@ import lombok.Setter; }) // @org.springframework.data.relational.core.mapping.Table("COMPANY_BLACK_REASON") @JsonIgnoreProperties(ignoreUnknown = true) -public class CompanyBlackReason implements IdentityEntity, CompanyBasedEntity, Serializable { +public class CompanyBlackReason implements IdentityEntity, CompanyBasedEntity, Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -71,4 +73,21 @@ public class CompanyBlackReason implements IdentityEntity, CompanyBasedEntity, @Column(name = "`KEY`") private String key; + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyBlackReason that = (CompanyBlackReason) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CompanyContact.java b/common/src/main/java/com/ecep/contract/model/CompanyContact.java index 5b03bc0..251f344 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyContact.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyContact.java @@ -5,7 +5,8 @@ import java.time.LocalDate; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -85,15 +86,7 @@ public class CompanyContact implements IdentityEntity, NamedEntity, BasedEntity, public final boolean equals(Object object) { if (this == object) return true; - if (object == null) - return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) return false; CompanyContact that = (CompanyContact) object; return getId() != null && Objects.equals(getId(), that.getId()); @@ -101,9 +94,7 @@ public class CompanyContact implements IdentityEntity, NamedEntity, BasedEntity, @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CompanyContract.java b/common/src/main/java/com/ecep/contract/model/CompanyContract.java index 8a612ce..025ae61 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyContract.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyContract.java @@ -2,6 +2,9 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Map; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -27,7 +30,7 @@ import lombok.ToString; }, uniqueConstraints = { }) -@ToString(exclude = {"company", "contract"}) +@ToString(exclude = { "company", "contract" }) public class CompanyContract implements IdentityEntity, CompanyBasedEntity, Serializable { private static final long serialVersionUID = 1L; @Id @@ -54,4 +57,22 @@ public class CompanyContract implements IdentityEntity, CompanyBasedEntity, Seri contact.getPhone() + contact.getEmail(); } + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyContract that = (CompanyContract) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java b/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java index 9543a8d..88a6747 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java @@ -6,7 +6,8 @@ import java.time.LocalDate; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -79,15 +80,7 @@ public class CompanyCustomer implements IdentityEntity, CompanyBasedEntity, Seri public final boolean equals(Object object) { if (this == object) return true; - if (object == null) - return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) return false; CompanyCustomer that = (CompanyCustomer) object; return getId() != null && Objects.equals(getId(), that.getId()); @@ -95,8 +88,6 @@ public class CompanyCustomer implements IdentityEntity, CompanyBasedEntity, Seri @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CompanyCustomerEntity.java b/common/src/main/java/com/ecep/contract/model/CompanyCustomerEntity.java index ff0f857..de743b7 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyCustomerEntity.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyCustomerEntity.java @@ -5,7 +5,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -102,22 +102,15 @@ public class CompanyCustomerEntity implements IdentityEntity, Serializable { return true; if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; + } CompanyCustomerEntity that = (CompanyCustomerEntity) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyCustomerEvaluationFormFile.java b/common/src/main/java/com/ecep/contract/model/CompanyCustomerEvaluationFormFile.java index c034b56..20642b5 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyCustomerEvaluationFormFile.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyCustomerEvaluationFormFile.java @@ -1,6 +1,10 @@ package com.ecep.contract.model; import java.io.Serializable; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -62,9 +66,23 @@ public class CompanyCustomerEvaluationFormFile implements IdentityEntity, BasedE @Column(name = "SCORE_TEMPLATE_VER") private Integer scoreTemplateVersion = 1; - @Override public String toPrettyString() { return getCatalog() + ", level=" + getCreditLevel(); } + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; + CompanyCustomerEvaluationFormFile that = (CompanyCustomerEvaluationFormFile) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyCustomerFile.java b/common/src/main/java/com/ecep/contract/model/CompanyCustomerFile.java index c204a89..e45eaef 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyCustomerFile.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyCustomerFile.java @@ -2,8 +2,10 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDate; +import java.util.Objects; import com.ecep.contract.CompanyCustomerFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -61,4 +63,19 @@ public class CompanyCustomerFile implements CompanyBasicFile implements Serializable { private static final long serialVersionUID = 1L; + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyCustomerFileTypeLocal that = (CompanyCustomerFileTypeLocal) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyExtendInfo.java b/common/src/main/java/com/ecep/contract/model/CompanyExtendInfo.java index ffcc2b0..9930035 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyExtendInfo.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyExtendInfo.java @@ -4,7 +4,8 @@ import java.io.Serializable; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -49,20 +50,18 @@ public class CompanyExtendInfo implements IdentityEntity, Serializable { @ToString.Exclude private int version; - @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; CompanyExtendInfo that = (CompanyExtendInfo) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyFile.java b/common/src/main/java/com/ecep/contract/model/CompanyFile.java index dc2dc69..6f3b437 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyFile.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyFile.java @@ -2,8 +2,10 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDate; +import java.util.Objects; import com.ecep.contract.CompanyFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -28,7 +30,7 @@ import lombok.ToString; @Entity @Table(name = "COMPANY_FILE") @ToString -public class CompanyFile implements IdentityEntity, CompanyBasedEntity, Serializable { +public class CompanyFile implements IdentityEntity, CompanyBasedEntity, Serializable { private static final long serialVersionUID = 1L; @Id @@ -61,4 +63,22 @@ public class CompanyFile implements IdentityEntity, CompanyBasedEntity, Seriali */ @Column(name = "FILE_PATH") private String filePath; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyFile that = (CompanyFile) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyFileTypeLocal.java b/common/src/main/java/com/ecep/contract/model/CompanyFileTypeLocal.java index 9df5569..8af1212 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyFileTypeLocal.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyFileTypeLocal.java @@ -1,8 +1,10 @@ package com.ecep.contract.model; import java.io.Serializable; +import java.util.Objects; import com.ecep.contract.CompanyFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Entity; import jakarta.persistence.Table; @@ -17,4 +19,22 @@ import lombok.ToString; @ToString public class CompanyFileTypeLocal extends BaseEnumEntity implements Serializable { private static final long serialVersionUID = 1L; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyFileTypeLocal that = (CompanyFileTypeLocal) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyInvoiceInfo.java b/common/src/main/java/com/ecep/contract/model/CompanyInvoiceInfo.java index 44bef72..05e9786 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyInvoiceInfo.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyInvoiceInfo.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -43,19 +43,19 @@ public class CompanyInvoiceInfo implements IdentityEntity, NamedEntity, BasedEnt private Company company; @Column(name = "TAX") - private String taxId; // 税号(纳税人识别号) + private String taxId; // 税号(纳税人识别号) @Column(name = "ADDR") - private String address; // 地址 + private String address; // 地址 @Column(name = "TEL") - private String phone; // 电话 + private String phone; // 电话 @Column(name = "BANK") - private String bankName; // 开户行 + private String bankName; // 开户行 @Column(name = "BANK_ACCOUNT") - private String bankAccount; // 银行账号 + private String bankAccount; // 银行账号 @Override public String toPrettyString() { @@ -63,18 +63,20 @@ public class CompanyInvoiceInfo implements IdentityEntity, NamedEntity, BasedEnt } @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - CompanyInvoiceInfo that = (CompanyInvoiceInfo) o; + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyInvoiceInfo that = (CompanyInvoiceInfo) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyOldName.java b/common/src/main/java/com/ecep/contract/model/CompanyOldName.java index 25abee9..6837eaf 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyOldName.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyOldName.java @@ -5,7 +5,8 @@ import java.time.LocalDate; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -62,18 +63,20 @@ public class CompanyOldName implements IdentityEntity, NamedEntity, Serializable private int version; @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - CompanyOldName that = (CompanyOldName) o; + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyOldName that = (CompanyOldName) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CompanyVendor.java b/common/src/main/java/com/ecep/contract/model/CompanyVendor.java index cde811a..6ebea7e 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyVendor.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyVendor.java @@ -7,9 +7,9 @@ import java.util.List; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; import com.ecep.contract.VendorType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -46,7 +46,6 @@ public class CompanyVendor implements IdentityEntity, CompanyBasedEntity, Serial @Column(name = "TYPE") private VendorType type; - @ColumnDefault("false") @Column(name = "PROTOCOL_PROVIDER", nullable = false) private boolean protocolProvider = false; @@ -107,17 +106,19 @@ public class CompanyVendor implements IdentityEntity, CompanyBasedEntity, Serial @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } CompanyVendor that = (CompanyVendor) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedFile.java b/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedFile.java index 7861424..ff6d957 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedFile.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedFile.java @@ -2,6 +2,9 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDate; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -31,13 +34,11 @@ public class CompanyVendorApprovedFile implements IdentityEntity, Serializable { @Column(name = "ID", nullable = false) private Integer id; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "LIST_ID", nullable = false) @ToString.Exclude private CompanyVendorApprovedList list; - /** * 文件名,不含目录,目录使用目录的目录 */ @@ -56,4 +57,21 @@ public class CompanyVendorApprovedFile implements IdentityEntity, Serializable { @Column(name = "DESCRIPTION") private String description; + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyVendorApprovedFile that = (CompanyVendorApprovedFile) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedItem.java b/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedItem.java index 5f669f9..392c3bc 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedItem.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedItem.java @@ -3,9 +3,8 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.VendorType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -66,17 +65,19 @@ public class CompanyVendorApprovedItem implements IdentityEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } CompanyVendorApprovedItem that = (CompanyVendorApprovedItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedList.java b/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedList.java index c1daef0..9a937a6 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedList.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyVendorApprovedList.java @@ -4,7 +4,7 @@ import java.io.Serializable; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -16,7 +16,6 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; - /** * 合格供应商名录 * 每年一条记录 @@ -60,17 +59,19 @@ public class CompanyVendorApprovedList implements IdentityEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } CompanyVendorApprovedList that = (CompanyVendorApprovedList) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyVendorEntity.java b/common/src/main/java/com/ecep/contract/model/CompanyVendorEntity.java index 0f4f226..d371290 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyVendorEntity.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyVendorEntity.java @@ -5,7 +5,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -20,7 +20,6 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; - /** * 供应商的关联详细项,关联信息用于绑定U8系统中的供应商编号 */ @@ -96,20 +95,18 @@ public class CompanyVendorEntity implements IdentityEntity, Serializable { @Column(name = "FETCHED_TIME") private LocalDateTime fetchedTime; - @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; CompanyVendorEntity that = (CompanyVendorEntity) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CompanyVendorFile.java b/common/src/main/java/com/ecep/contract/model/CompanyVendorFile.java index 8c798a1..0a50f28 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyVendorFile.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyVendorFile.java @@ -2,8 +2,10 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDate; +import java.util.Objects; import com.ecep.contract.CompanyVendorFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -64,4 +66,22 @@ public class CompanyVendorFile implements CompanyBasicFile { + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CompanyVendorFileTypeLocal that = (CompanyVendorFileTypeLocal) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/Contract.java b/common/src/main/java/com/ecep/contract/model/Contract.java index cd86a10..10271d1 100644 --- a/common/src/main/java/com/ecep/contract/model/Contract.java +++ b/common/src/main/java/com/ecep/contract/model/Contract.java @@ -6,9 +6,9 @@ import java.time.LocalDateTime; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; import com.ecep.contract.ContractPayWay; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -70,12 +70,27 @@ public class Contract implements IdentityEntity, NamedEntity, BasedEntity, Compa /** * 合同状态,U8 系统中的合同状态,目前含义未知 * - * - * - * - * - * - * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * *
各个状态值的统计情况如下,数据样本日期:2025-02-08
StateCount
null3891
A9
B6499
C79
各个状态值的统计情况如下,数据样本日期:2025-02-08
StateCount
null3891
A9
B6499
C79
*/ @Column(name = "STATE") @@ -83,21 +98,21 @@ public class Contract implements IdentityEntity, NamedEntity, BasedEntity, Compa /** * 合同分组 */ -// @ManyToOne(fetch = FetchType.EAGER) + // @ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "GROUP_ID") private ContractGroup group; /** * 分类 */ -// @ManyToOne(fetch = FetchType.EAGER) + // @ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TYPE_ID") private ContractType type; /** * 性质 */ -// @ManyToOne(fetch = FetchType.EAGER) + // @ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "KIND_ID") private ContractKind kind; @@ -267,7 +282,6 @@ public class Contract implements IdentityEntity, NamedEntity, BasedEntity, Compa @Column(name = "EXEC_UNTAX_AMOUNT") private double execUnTaxAmount; - @Override public String toPrettyString() { return getCode() + " " + getName(); @@ -275,17 +289,19 @@ public class Contract implements IdentityEntity, NamedEntity, BasedEntity, Compa @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } Contract contract = (Contract) object; return getId() != null && Objects.equals(getId(), contract.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractBidVendor.java b/common/src/main/java/com/ecep/contract/model/ContractBidVendor.java index e53f915..66a0d59 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractBidVendor.java +++ b/common/src/main/java/com/ecep/contract/model/ContractBidVendor.java @@ -1,7 +1,9 @@ package com.ecep.contract.model; import java.io.Serializable; -import org.hibernate.proxy.HibernateProxy; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -57,22 +59,15 @@ public class ContractBidVendor implements IdentityEntity, ContractBasedEntity, S return true; if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; + } ContractBidVendor that = (ContractBidVendor) object; - return equals(that); + return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractCatalog.java b/common/src/main/java/com/ecep/contract/model/ContractCatalog.java index 64ed086..70e13db 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractCatalog.java +++ b/common/src/main/java/com/ecep/contract/model/ContractCatalog.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -53,17 +53,19 @@ public class ContractCatalog implements IdentityEntity, NamedEntity, Serializabl @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ContractCatalog that = (ContractCatalog) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractFile.java b/common/src/main/java/com/ecep/contract/model/ContractFile.java index 7311960..7a6a320 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractFile.java +++ b/common/src/main/java/com/ecep/contract/model/ContractFile.java @@ -4,9 +4,8 @@ import java.io.Serializable; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.ContractFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -68,17 +67,19 @@ public class ContractFile implements IdentityEntity, ContractBasedEntity, Serial @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ContractFile that = (ContractFile) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractFileTypeLocal.java b/common/src/main/java/com/ecep/contract/model/ContractFileTypeLocal.java index b079f2d..83472a1 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractFileTypeLocal.java +++ b/common/src/main/java/com/ecep/contract/model/ContractFileTypeLocal.java @@ -1,6 +1,9 @@ package com.ecep.contract.model; +import java.util.Objects; + import com.ecep.contract.ContractFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -24,4 +27,21 @@ public class ContractFileTypeLocal extends BaseEnumEntity { @Column(name = "SUGGEST_FILE_NAME") private String suggestFileName; + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + ContractFileTypeLocal that = (ContractFileTypeLocal) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractGroup.java b/common/src/main/java/com/ecep/contract/model/ContractGroup.java index 8473485..99fdb9a 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractGroup.java +++ b/common/src/main/java/com/ecep/contract/model/ContractGroup.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -51,17 +51,19 @@ public class ContractGroup implements IdentityEntity, NamedEntity, Serializable @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ContractGroup that = (ContractGroup) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractItem.java b/common/src/main/java/com/ecep/contract/model/ContractItem.java index 923c237..dec0385 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractItem.java +++ b/common/src/main/java/com/ecep/contract/model/ContractItem.java @@ -5,7 +5,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -76,7 +76,6 @@ public class ContractItem implements IdentityEntity, ContractBasedEntity, BasedE @ToString.Exclude private Inventory inventory; - /** * 不含税单价 */ @@ -148,17 +147,19 @@ public class ContractItem implements IdentityEntity, ContractBasedEntity, BasedE @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ContractItem that = (ContractItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractKind.java b/common/src/main/java/com/ecep/contract/model/ContractKind.java index c7c3e24..f5f03b9 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractKind.java +++ b/common/src/main/java/com/ecep/contract/model/ContractKind.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -39,7 +39,6 @@ public class ContractKind implements IdentityEntity, NamedEntity, Serializable { @Column(name = "NAME") private String name; - @Column(name = "TITLE") private String title; @@ -53,17 +52,19 @@ public class ContractKind implements IdentityEntity, NamedEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ContractKind that = (ContractKind) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ContractPayPlan.java b/common/src/main/java/com/ecep/contract/model/ContractPayPlan.java index 2e9f802..35f66eb 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractPayPlan.java +++ b/common/src/main/java/com/ecep/contract/model/ContractPayPlan.java @@ -3,6 +3,9 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -41,7 +44,6 @@ public class ContractPayPlan implements IdentityEntity, ContractBasedEntity, Ser @Column(name = "REF_ID") private Integer refId; - @Column(name = "PAY_DATE") private LocalDate payDate; @@ -66,4 +68,22 @@ public class ContractPayPlan implements IdentityEntity, ContractBasedEntity, Ser */ @Column(name = "UPDATE_TIME") private LocalDateTime updateDate; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + ContractPayPlan that = (ContractPayPlan) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/ContractType.java b/common/src/main/java/com/ecep/contract/model/ContractType.java index 5ea409a..219dd0d 100644 --- a/common/src/main/java/com/ecep/contract/model/ContractType.java +++ b/common/src/main/java/com/ecep/contract/model/ContractType.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -59,17 +59,19 @@ public class ContractType implements IdentityEntity, NamedEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ContractType that = (ContractType) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CustomerCatalog.java b/common/src/main/java/com/ecep/contract/model/CustomerCatalog.java index 91fff51..c925894 100644 --- a/common/src/main/java/com/ecep/contract/model/CustomerCatalog.java +++ b/common/src/main/java/com/ecep/contract/model/CustomerCatalog.java @@ -1,12 +1,18 @@ package com.ecep.contract.model; -import jakarta.persistence.*; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.hibernate.proxy.HibernateProxy; - -import java.util.Objects; /** * U8系统的 客户分类 @@ -45,22 +51,15 @@ public class CustomerCatalog implements BasedEntity { return true; if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; + } CustomerCatalog that = (CustomerCatalog) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/CustomerSatisfactionSurvey.java b/common/src/main/java/com/ecep/contract/model/CustomerSatisfactionSurvey.java index 1edad16..82e33d8 100644 --- a/common/src/main/java/com/ecep/contract/model/CustomerSatisfactionSurvey.java +++ b/common/src/main/java/com/ecep/contract/model/CustomerSatisfactionSurvey.java @@ -2,6 +2,9 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -76,4 +79,22 @@ public class CustomerSatisfactionSurvey implements IdentityEntity, ProjectBasedE */ @Column(name = "DESCRIPTION") private String description; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + CustomerSatisfactionSurvey that = (CustomerSatisfactionSurvey) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/DeliverySignMethod.java b/common/src/main/java/com/ecep/contract/model/DeliverySignMethod.java index e92e1e1..d395ba6 100644 --- a/common/src/main/java/com/ecep/contract/model/DeliverySignMethod.java +++ b/common/src/main/java/com/ecep/contract/model/DeliverySignMethod.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -51,17 +51,19 @@ public class DeliverySignMethod implements BasedEntity, IdentityEntity { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } DeliverySignMethod that = (DeliverySignMethod) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/Department.java b/common/src/main/java/com/ecep/contract/model/Department.java index 7c8b71e..c7b0f1d 100644 --- a/common/src/main/java/com/ecep/contract/model/Department.java +++ b/common/src/main/java/com/ecep/contract/model/Department.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.FetchType; @@ -31,7 +31,6 @@ public class Department implements BasedEntity, IdentityEntity, Serializable { @Column(name = "CODE") private String code; - @Column(name = "NAME") private String name; @@ -50,17 +49,16 @@ public class Department implements BasedEntity, IdentityEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; Department that = (Department) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/Employee.java b/common/src/main/java/com/ecep/contract/model/Employee.java index 27cd84e..18fcc69 100644 --- a/common/src/main/java/com/ecep/contract/model/Employee.java +++ b/common/src/main/java/com/ecep/contract/model/Employee.java @@ -4,8 +4,7 @@ import java.io.Serializable; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - +import com.ecep.contract.util.HibernateProxyUtils; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -118,15 +117,7 @@ public class Employee implements BasedEntity, IdentityEntity, NamedEntity, Seria public final boolean equals(Object object) { if (this == object) return true; - if (object == null) - return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) return false; Employee employee = (Employee) object; return getId() != null && Objects.equals(getId(), employee.getId()); @@ -134,8 +125,6 @@ public class Employee implements BasedEntity, IdentityEntity, NamedEntity, Seria @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/EmployeeAuthBind.java b/common/src/main/java/com/ecep/contract/model/EmployeeAuthBind.java index d6716cb..12561ed 100644 --- a/common/src/main/java/com/ecep/contract/model/EmployeeAuthBind.java +++ b/common/src/main/java/com/ecep/contract/model/EmployeeAuthBind.java @@ -1,14 +1,22 @@ package com.ecep.contract.model; import java.io.Serializable; -import jakarta.persistence.*; +import java.time.LocalDateTime; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.hibernate.proxy.HibernateProxy; - -import java.time.LocalDateTime; -import java.util.Objects; @Getter @Setter @@ -50,7 +58,6 @@ public class EmployeeAuthBind implements BasedEntity, IdentityEntity, Serializab @Column(name = "DESCRIPTION") private String description; - @Override public String toPrettyString() { return ip + " " + mac; @@ -58,17 +65,19 @@ public class EmployeeAuthBind implements BasedEntity, IdentityEntity, Serializab @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } EmployeeAuthBind bank = (EmployeeAuthBind) object; return getId() != null && Objects.equals(getId(), bank.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/EmployeeLoginHistory.java b/common/src/main/java/com/ecep/contract/model/EmployeeLoginHistory.java index 1a93152..a9118a1 100644 --- a/common/src/main/java/com/ecep/contract/model/EmployeeLoginHistory.java +++ b/common/src/main/java/com/ecep/contract/model/EmployeeLoginHistory.java @@ -1,19 +1,27 @@ package com.ecep.contract.model; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.Setter; -import org.hibernate.proxy.HibernateProxy; - import java.io.Serializable; import java.time.LocalDateTime; import java.util.Objects; +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + @Getter @Setter @jakarta.persistence.Entity @Table(name = "EMPLOYEE_LOGIN_HISTORY", schema = "supplier_ms") -public class EmployeeLoginHistory implements BasedEntity ,IdentityEntity, Serializable { +public class EmployeeLoginHistory implements BasedEntity, IdentityEntity, Serializable { private static final long serialVersionUID = 1L; @Id @@ -37,7 +45,6 @@ public class EmployeeLoginHistory implements BasedEntity ,IdentityEntity, Serial @Column(name = "LATEST_ACTIVE") private LocalDateTime activeTime; - @Override public String toPrettyString() { return ip + " " + mac; @@ -45,17 +52,19 @@ public class EmployeeLoginHistory implements BasedEntity ,IdentityEntity, Serial @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - EmployeeLoginHistory bank = (EmployeeLoginHistory) object; - return getId() != null && Objects.equals(getId(), bank.getId()); + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + EmployeeLoginHistory that = (EmployeeLoginHistory) object; + return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/EmployeeRole.java b/common/src/main/java/com/ecep/contract/model/EmployeeRole.java index e027e5e..a58423a 100644 --- a/common/src/main/java/com/ecep/contract/model/EmployeeRole.java +++ b/common/src/main/java/com/ecep/contract/model/EmployeeRole.java @@ -1,56 +1,85 @@ package com.ecep.contract.model; -import jakarta.persistence.*; +import java.io.Serializable; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; -import java.io.Serializable; - -import com.fasterxml.jackson.annotation.JsonIgnore; - @Getter @Setter @jakarta.persistence.Entity @Table(name = "EMPLOYEE_ROLE", schema = "supplier_ms") public class EmployeeRole implements IdentityEntity, NamedEntity, Serializable { - private static final long serialVersionUID = 1L; - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "ID", nullable = false) - private Integer id; + private static final long serialVersionUID = 1L; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID", nullable = false) + private Integer id; - @Column(name = "CODE") - private String code; + @Column(name = "CODE") + private String code; - @Column(name = "NAME") - private String name; + @Column(name = "NAME") + private String name; - /** - * 是否系统管理员 - */ - @Column(name = "SYS_ADMIN") - private boolean systemAdministrator; + /** + * 是否系统管理员 + */ + @Column(name = "SYS_ADMIN") + private boolean systemAdministrator; - /** - * 是否管理层 - */ - @Column(name = "MANAGER") - private boolean manager; + /** + * 是否管理层 + */ + @Column(name = "MANAGER") + private boolean manager; - /** - * 是否启用 - */ - @Column(name = "IS_ACTIVE") - private boolean active = true; + /** + * 是否启用 + */ + @Column(name = "IS_ACTIVE") + private boolean active = true; - @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }) - @JoinTable(name = "EMPLOYEE_ROLE_FUNCTIONS", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "FUNC_ID")) - @JsonIgnore - private java.util.List functions = new java.util.ArrayList<>(); + @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }) + @JoinTable(name = "EMPLOYEE_ROLE_FUNCTIONS", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "FUNC_ID")) + @JsonIgnore + private java.util.List functions = new java.util.ArrayList<>(); - @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }) - @JoinTable(name = "EMPLOYEE_ROLES", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "EMPLOYEE_ID")) - @JsonIgnore - private java.util.List employees = new java.util.ArrayList<>(); + @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }) + @JoinTable(name = "EMPLOYEE_ROLES", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "EMPLOYEE_ID")) + @JsonIgnore + private java.util.List employees = new java.util.ArrayList<>(); + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + EmployeeRole that = (EmployeeRole) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/ExtendVendorInfo.java b/common/src/main/java/com/ecep/contract/model/ExtendVendorInfo.java index 9986527..f2bddd0 100644 --- a/common/src/main/java/com/ecep/contract/model/ExtendVendorInfo.java +++ b/common/src/main/java/com/ecep/contract/model/ExtendVendorInfo.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -62,22 +62,15 @@ public class ExtendVendorInfo implements IdentityEntity { return true; if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; + } ExtendVendorInfo that = (ExtendVendorInfo) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/Function.java b/common/src/main/java/com/ecep/contract/model/Function.java index b0ba179..7145dc3 100644 --- a/common/src/main/java/com/ecep/contract/model/Function.java +++ b/common/src/main/java/com/ecep/contract/model/Function.java @@ -1,11 +1,18 @@ package com.ecep.contract.model; -import jakarta.persistence.*; +import java.io.Serializable; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.Column; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; -import java.io.Serializable; - @Getter @Setter @jakarta.persistence.Entity @@ -35,4 +42,22 @@ public class Function implements IdentityEntity, NamedEntity, Serializable { @Column(name = "DESCRIPTION", columnDefinition = "VARCHAR(255)") private String description; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + Function that = (Function) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/HolidayTable.java b/common/src/main/java/com/ecep/contract/model/HolidayTable.java index 4fe3a4c..1c29188 100644 --- a/common/src/main/java/com/ecep/contract/model/HolidayTable.java +++ b/common/src/main/java/com/ecep/contract/model/HolidayTable.java @@ -1,5 +1,13 @@ package com.ecep.contract.model; +import java.time.LocalDate; +import java.util.Objects; + +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; @@ -7,10 +15,6 @@ import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.hibernate.annotations.JdbcTypeCode; -import org.hibernate.type.SqlTypes; - -import java.time.LocalDate; @Getter @Setter @@ -26,4 +30,21 @@ public class HolidayTable { @Column(name = "IS_HOLIDAY", nullable = false) private boolean holiday; + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + HolidayTable that = (HolidayTable) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/Inventory.java b/common/src/main/java/com/ecep/contract/model/Inventory.java index b7c2956..32c3c38 100644 --- a/common/src/main/java/com/ecep/contract/model/Inventory.java +++ b/common/src/main/java/com/ecep/contract/model/Inventory.java @@ -5,7 +5,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.AttributeOverride; import jakarta.persistence.AttributeOverrides; @@ -23,7 +23,6 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; - /** * 存货物品清单 */ @@ -101,17 +100,17 @@ public class Inventory implements IdentityEntity, BasedEntity, Serializable { * 重量单位 */ @Column(name = "WEIGHT_UNIT") - private String weightUnit="kg"; + private String weightUnit = "kg"; /** * 体积单位 */ @Column(name = "VOLUME_UNIT") - private String volumeUnit="m³"; + private String volumeUnit = "m³"; /** * 尺寸单位 */ @Column(name = "VOLUME_SIZE_UNIT") - private String sizeUnit="mm"; + private String sizeUnit = "mm"; /** * 体积尺寸(不含包装) @@ -136,7 +135,6 @@ public class Inventory implements IdentityEntity, BasedEntity, Serializable { }) private VolumeSize packagedVolumeSize = new VolumeSize(); - /** * 创建人 */ @@ -169,17 +167,19 @@ public class Inventory implements IdentityEntity, BasedEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } Inventory that = (Inventory) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/InventoryCatalog.java b/common/src/main/java/com/ecep/contract/model/InventoryCatalog.java index 63c819a..2741de0 100644 --- a/common/src/main/java/com/ecep/contract/model/InventoryCatalog.java +++ b/common/src/main/java/com/ecep/contract/model/InventoryCatalog.java @@ -1,11 +1,18 @@ package com.ecep.contract.model; -import jakarta.persistence.*; +import java.io.Serializable; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; -import org.hibernate.proxy.HibernateProxy; - -import java.util.Objects; /** * 存货分类 @@ -14,7 +21,8 @@ import java.util.Objects; @Setter @Entity @Table(name = "INVENTORY_CATALOG", schema = "supplier_ms") -public class InventoryCatalog implements IdentityEntity, BasedEntity { +public class InventoryCatalog implements IdentityEntity, BasedEntity, Serializable { + private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) @@ -32,18 +40,17 @@ public class InventoryCatalog implements IdentityEntity, BasedEntity { } @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - InventoryCatalog that = (InventoryCatalog) o; + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; + InventoryCatalog that = (InventoryCatalog) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/InventoryHistoryPrice.java b/common/src/main/java/com/ecep/contract/model/InventoryHistoryPrice.java index 8a37a0f..99500f7 100644 --- a/common/src/main/java/com/ecep/contract/model/InventoryHistoryPrice.java +++ b/common/src/main/java/com/ecep/contract/model/InventoryHistoryPrice.java @@ -1,15 +1,26 @@ package com.ecep.contract.model; -import jakarta.persistence.Entity; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; -import org.hibernate.proxy.HibernateProxy; - import java.time.Year; import java.util.Objects; +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.AttributeOverride; +import jakarta.persistence.AttributeOverrides; +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + @Getter @Setter @ToString @@ -92,18 +103,20 @@ public class InventoryHistoryPrice implements IdentityEntity { private HistoryPrice maxSalePrice = new HistoryPrice(); @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - InventoryHistoryPrice that = (InventoryHistoryPrice) o; + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + InventoryHistoryPrice that = (InventoryHistoryPrice) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/Invoice.java b/common/src/main/java/com/ecep/contract/model/Invoice.java index c53ace2..ec1aece 100644 --- a/common/src/main/java/com/ecep/contract/model/Invoice.java +++ b/common/src/main/java/com/ecep/contract/model/Invoice.java @@ -4,9 +4,10 @@ import java.io.Serializable; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; import org.springframework.util.StringUtils; +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -71,27 +72,20 @@ public class Invoice implements IdentityEntity, BasedEntity, Serializable { } @Override - public final boolean equals(Object o) { - if (this == o) + public final boolean equals(Object object) { + if (this == object) return true; - if (o == null) + if (object == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy - ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() - : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; - Invoice invoice = (Invoice) o; - return getId() != null && Objects.equals(getId(), invoice.getId()); + } + Invoice that = (Invoice) object; + return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/Permission.java b/common/src/main/java/com/ecep/contract/model/Permission.java index 956d484..ee06dbe 100644 --- a/common/src/main/java/com/ecep/contract/model/Permission.java +++ b/common/src/main/java/com/ecep/contract/model/Permission.java @@ -1,7 +1,18 @@ package com.ecep.contract.model; import java.io.Serializable; -import jakarta.persistence.*; +import java.util.Objects; + +import com.ecep.contract.util.HibernateProxyUtils; + +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -27,4 +38,22 @@ public class Permission implements IdentityEntity, NamedEntity, Serializable { @Column(name = "PERMISSION_KEY") private String key; + + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + Permission that = (Permission) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/ProductType.java b/common/src/main/java/com/ecep/contract/model/ProductType.java index a2f5f93..66a34cf 100644 --- a/common/src/main/java/com/ecep/contract/model/ProductType.java +++ b/common/src/main/java/com/ecep/contract/model/ProductType.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -48,22 +48,15 @@ public class ProductType implements BasedEntity, IdentityEntity, Serializable { return true; if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; + } ProductType that = (ProductType) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/ProductUsage.java b/common/src/main/java/com/ecep/contract/model/ProductUsage.java index d9b372b..695774a 100644 --- a/common/src/main/java/com/ecep/contract/model/ProductUsage.java +++ b/common/src/main/java/com/ecep/contract/model/ProductUsage.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -44,17 +44,16 @@ public class ProductUsage implements BasedEntity, IdentityEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; ProductUsage that = (ProductUsage) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/Project.java b/common/src/main/java/com/ecep/contract/model/Project.java index 5b3b6b2..169d09a 100644 --- a/common/src/main/java/com/ecep/contract/model/Project.java +++ b/common/src/main/java/com/ecep/contract/model/Project.java @@ -5,7 +5,8 @@ import java.time.LocalDate; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -45,7 +46,6 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial @ToString.Exclude private Company customer; - /** * 项目名称 */ @@ -53,7 +53,9 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial private String name; /** - * 项目代码,{@link #saleType saleType.Code}+{@link #codeYear}+{@link #codeSequenceNumber codeSequenceNumber} 组成 + * 项目代码,{@link #saleType + * saleType.Code}+{@link #codeYear}+{@link #codeSequenceNumber + * codeSequenceNumber} 组成 */ @Column(name = "CODE") private String code; @@ -109,7 +111,6 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial @ToString.Exclude private ProjectIndustry industry; - /** * 销售类型 */ @@ -126,7 +127,6 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial @ToString.Exclude private ProjectType projectType; - /** * 产品类型 */ @@ -135,7 +135,6 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial @ToString.Exclude private ProductType productType; - /** * 交货签收方式 * Delivery signature method @@ -229,7 +228,6 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial @ToString.Exclude private int version; - @Override public String toPrettyString() { return code + " " + name; @@ -237,17 +235,16 @@ public class Project implements IdentityEntity, NamedEntity, BasedEntity, Serial @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; Project project = (Project) object; return getId() != null && Objects.equals(getId(), project.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectBid.java b/common/src/main/java/com/ecep/contract/model/ProjectBid.java index 343d80f..baea122 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectBid.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectBid.java @@ -1,9 +1,13 @@ package com.ecep.contract.model; +import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Objects; import org.hibernate.annotations.ColumnDefault; +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -27,7 +31,8 @@ import lombok.ToString; @Entity @Table(name = "PROJECT_BID") @ToString -public class ProjectBid implements IdentityEntity, ProjectBasedEntity { +public class ProjectBid implements IdentityEntity, ProjectBasedEntity, Serializable { + private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) @@ -91,7 +96,6 @@ public class ProjectBid implements IdentityEntity, ProjectBasedEntity { @Column(name = "NO_STANDARD_CONTRACT_TEXT") private String noStandardContractText; - /** * 审核文件 */ @@ -129,12 +133,24 @@ public class ProjectBid implements IdentityEntity, ProjectBasedEntity { @Column(name = "AUTHORIZER_DATE") private LocalDateTime authorizationTime; - /** * 说明 */ @Column(name = "DESCRIPTION", columnDefinition = "TEXT") private String description; + @Override + public final boolean equals(Object object) { + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; + ProjectBid projectBid = (ProjectBid) object; + return getId() != null && Objects.equals(getId(), projectBid.getId()); + } + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectCost.java b/common/src/main/java/com/ecep/contract/model/ProjectCost.java index 2de8f5d..c36ce29 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectCost.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectCost.java @@ -1,10 +1,12 @@ package com.ecep.contract.model; +import java.io.Serializable; import java.time.LocalDateTime; import java.util.Objects; import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -24,7 +26,8 @@ import lombok.ToString; @Entity @Table(name = "PROJECT_COST") @ToString -public class ProjectCost implements IdentityEntity, ProjectBasedEntity { +public class ProjectCost implements IdentityEntity, ProjectBasedEntity, Serializable { + private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) @@ -46,7 +49,6 @@ public class ProjectCost implements IdentityEntity, ProjectBasedEntity { @Column(name = "VER") private int version; - /** * 是否标准付款方式 */ @@ -201,23 +203,21 @@ public class ProjectCost implements IdentityEntity, ProjectBasedEntity { @Column(name = "DESCRIPTION", columnDefinition = "TEXT") private String description; - @Column(name = "IMPORT_LOCK") private boolean importLock; @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - ProjectCost that = (ProjectCost) object; - return getId() != null && Objects.equals(getId(), that.getId()); + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; + ProjectCost projectCost = (ProjectCost) object; + return getId() != null && Objects.equals(getId(), projectCost.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectCostItem.java b/common/src/main/java/com/ecep/contract/model/ProjectCostItem.java index 2b5d8b0..b61fdac 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectCostItem.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectCostItem.java @@ -4,7 +4,7 @@ import java.io.Serializable; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -138,17 +138,21 @@ public class ProjectCostItem implements IdentityEntity, BasedEntity, Serializabl @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ProjectCostItem that = (ProjectCostItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectFile.java b/common/src/main/java/com/ecep/contract/model/ProjectFile.java index a1a6e91..3d96dbb 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectFile.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectFile.java @@ -3,9 +3,8 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.ProjectFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -57,15 +56,7 @@ public class ProjectFile implements IdentityEntity, ProjectBasedEntity, Serializ public final boolean equals(Object object) { if (this == object) return true; - if (object == null) - return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) return false; ProjectFile that = (ProjectFile) object; return getId() != null && Objects.equals(getId(), that.getId()); @@ -73,8 +64,6 @@ public class ProjectFile implements IdentityEntity, ProjectBasedEntity, Serializ @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectFileTypeLocal.java b/common/src/main/java/com/ecep/contract/model/ProjectFileTypeLocal.java index 36acf36..785ecd2 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectFileTypeLocal.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectFileTypeLocal.java @@ -2,9 +2,8 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.ProjectFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Entity; import jakarta.persistence.Table; @@ -20,17 +19,21 @@ import lombok.ToString; public class ProjectFileTypeLocal extends BaseEnumEntity { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ProjectFileTypeLocal that = (ProjectFileTypeLocal) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectFundPlan.java b/common/src/main/java/com/ecep/contract/model/ProjectFundPlan.java index d9058fb..86b0c82 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectFundPlan.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectFundPlan.java @@ -2,8 +2,10 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Objects; import com.ecep.contract.ContractPayWay; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -66,7 +68,6 @@ public class ProjectFundPlan implements IdentityEntity, ProjectBasedEntity { @Column(name = "PAY_TERM") private String payTerm; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "CONTRACT_PAY_PLAN_ID") private ContractPayPlan contractPayPlan; @@ -76,4 +77,24 @@ public class ProjectFundPlan implements IdentityEntity, ProjectBasedEntity { */ @Column(name = "UPDATE_TIME") private LocalDateTime updateDate; + + @Override + public boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + ProjectFundPlan that = (ProjectFundPlan) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectIndustry.java b/common/src/main/java/com/ecep/contract/model/ProjectIndustry.java index 58294e9..3f7c690 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectIndustry.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectIndustry.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -48,17 +48,21 @@ public class ProjectIndustry implements BasedEntity, IdentityEntity, NamedEntity @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ProjectIndustry that = (ProjectIndustry) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectQuotation.java b/common/src/main/java/com/ecep/contract/model/ProjectQuotation.java index 42535bf..377a612 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectQuotation.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectQuotation.java @@ -1,9 +1,12 @@ package com.ecep.contract.model; import java.time.LocalDateTime; +import java.util.Objects; import org.hibernate.annotations.ColumnDefault; +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -108,4 +111,24 @@ public class ProjectQuotation implements IdentityEntity, ProjectBasedEntity { @ToString.Exclude private CompanyCustomerEvaluationFormFile evaluationFile; + @Override + public boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + ProjectQuotation that = (ProjectQuotation) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } + } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectSaleType.java b/common/src/main/java/com/ecep/contract/model/ProjectSaleType.java index 964e7ed..1b66a9f 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectSaleType.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectSaleType.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -63,17 +63,21 @@ public class ProjectSaleType implements IdentityEntity, NamedEntity, BasedEntity @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ProjectSaleType that = (ProjectSaleType) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/ProjectSaleTypeRequireFileType.java b/common/src/main/java/com/ecep/contract/model/ProjectSaleTypeRequireFileType.java index f74acfb..d07851f 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectSaleTypeRequireFileType.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectSaleTypeRequireFileType.java @@ -2,9 +2,8 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.ContractFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -57,26 +56,21 @@ public class ProjectSaleTypeRequireFileType implements IdentityEntity, BasedEnti @Override public final boolean equals(Object object) { - if (this == object) + if (this == object) { return true; - if (object == null) + } + if (object == null) { return false; - Class oEffectiveClass = object instanceof HibernateProxy - ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() - : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; + } ProjectSaleTypeRequireFileType that = (ProjectSaleTypeRequireFileType) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/ProjectType.java b/common/src/main/java/com/ecep/contract/model/ProjectType.java index 1610135..aa945bc 100644 --- a/common/src/main/java/com/ecep/contract/model/ProjectType.java +++ b/common/src/main/java/com/ecep/contract/model/ProjectType.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -44,17 +44,21 @@ public class ProjectType implements IdentityEntity, NamedEntity, BasedEntity, Se @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } ProjectType that = (ProjectType) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucher.java b/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucher.java index 4df4dcd..0a471ed 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucher.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucher.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -107,27 +107,22 @@ public class PurchaseBillVoucher implements IdentityEntity, BasedEntity { } @Override - public final boolean equals(Object o) { - if (this == o) + public final boolean equals(Object object) { + if (this == object) { return true; - if (o == null) + } + if (object == null) { return false; - Class oEffectiveClass = o instanceof HibernateProxy - ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() - : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; - PurchaseBillVoucher that = (PurchaseBillVoucher) o; + } + PurchaseBillVoucher that = (PurchaseBillVoucher) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucherItem.java b/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucherItem.java index 0058c95..b41ae76 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucherItem.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseBillVoucherItem.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -85,28 +85,23 @@ public class PurchaseBillVoucherItem implements IdentityEntity, BasedEntity { private String description; @Override - public final boolean equals(Object o) { - if (this == o) + public final boolean equals(Object object) { + if (this == object) { return true; - if (o == null) + } + if (object == null) { return false; - Class oEffectiveClass = o instanceof HibernateProxy - ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() - : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; - PurchaseBillVoucherItem that = (PurchaseBillVoucherItem) o; + } + PurchaseBillVoucherItem that = (PurchaseBillVoucherItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } @Override diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseOrder.java b/common/src/main/java/com/ecep/contract/model/PurchaseOrder.java index 6366e28..e298af6 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseOrder.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseOrder.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -100,17 +100,19 @@ public class PurchaseOrder implements IdentityEntity, BasedEntity, ContractBased @Override public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == o) + return true; + if (o == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(o, this)) { + return false; + } PurchaseOrder that = (PurchaseOrder) o; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseOrderItem.java b/common/src/main/java/com/ecep/contract/model/PurchaseOrderItem.java index 721ae85..17778d5 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseOrderItem.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseOrderItem.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -74,28 +74,23 @@ public class PurchaseOrderItem implements IdentityEntity, BasedEntity { private String description; @Override - public final boolean equals(Object o) { - if (this == o) + public final boolean equals(Object object) { + if (this == object) { return true; - if (o == null) + } + if (object == null) { return false; - Class oEffectiveClass = o instanceof HibernateProxy - ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() - : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; - PurchaseOrderItem that = (PurchaseOrderItem) o; + } + PurchaseOrderItem that = (PurchaseOrderItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } @Override diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseReceipt.java b/common/src/main/java/com/ecep/contract/model/PurchaseReceipt.java index c85d2f1..85adf4e 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseReceipt.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseReceipt.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -20,7 +20,7 @@ import lombok.ToString; /** * 采购入库单 - * 对应 U8 的 表 + * 对应 U8 的 表 */ @Getter @Setter @@ -71,18 +71,22 @@ public class PurchaseReceipt implements IdentityEntity, BasedEntity { } @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - PurchaseReceipt that = (PurchaseReceipt) o; + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + PurchaseReceipt that = (PurchaseReceipt) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucher.java b/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucher.java index 343106a..f2dfe1a 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucher.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucher.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -83,18 +83,22 @@ public class PurchaseSettlementVoucher implements IdentityEntity, BasedEntity { } @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - PurchaseSettlementVoucher that = (PurchaseSettlementVoucher) o; + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + PurchaseSettlementVoucher that = (PurchaseSettlementVoucher) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucherItem.java b/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucherItem.java index b31d17b..7bc33f0 100644 --- a/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucherItem.java +++ b/common/src/main/java/com/ecep/contract/model/PurchaseSettlementVoucherItem.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -89,19 +89,23 @@ public class PurchaseSettlementVoucherItem implements IdentityEntity, BasedEntit private String description; @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - PurchaseSettlementVoucherItem that = (PurchaseSettlementVoucherItem) o; + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + PurchaseSettlementVoucherItem that = (PurchaseSettlementVoucherItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } @Override diff --git a/common/src/main/java/com/ecep/contract/model/SalesBillVoucher.java b/common/src/main/java/com/ecep/contract/model/SalesBillVoucher.java index 94beb01..630aa66 100644 --- a/common/src/main/java/com/ecep/contract/model/SalesBillVoucher.java +++ b/common/src/main/java/com/ecep/contract/model/SalesBillVoucher.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDateTime; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -107,27 +107,22 @@ public class SalesBillVoucher implements IdentityEntity, BasedEntity { } @Override - public final boolean equals(Object o) { - if (this == o) + public final boolean equals(Object object) { + if (this == object) { return true; - if (o == null) + } + if (object == null) { return false; - Class oEffectiveClass = o instanceof HibernateProxy - ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() - : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() - : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { return false; - SalesBillVoucher that = (SalesBillVoucher) o; + } + SalesBillVoucher that = (SalesBillVoucher) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy - ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() - : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/SalesBillVoucherItem.java b/common/src/main/java/com/ecep/contract/model/SalesBillVoucherItem.java index 28ce59a..28e2659 100644 --- a/common/src/main/java/com/ecep/contract/model/SalesBillVoucherItem.java +++ b/common/src/main/java/com/ecep/contract/model/SalesBillVoucherItem.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -60,24 +60,27 @@ public class SalesBillVoucherItem implements IdentityEntity, BasedEntity { @Column(name = "PRICE") private double price; - @Column(name = "DESCRIPTION", columnDefinition = "TEXT") private String description; @Override - public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; - SalesBillVoucherItem that = (SalesBillVoucherItem) o; + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + SalesBillVoucherItem that = (SalesBillVoucherItem) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } @Override diff --git a/common/src/main/java/com/ecep/contract/model/SalesOrder.java b/common/src/main/java/com/ecep/contract/model/SalesOrder.java index 8716555..a1f7f21 100644 --- a/common/src/main/java/com/ecep/contract/model/SalesOrder.java +++ b/common/src/main/java/com/ecep/contract/model/SalesOrder.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -82,18 +82,20 @@ public class SalesOrder implements IdentityEntity, BasedEntity, ContractBasedEnt @Override public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == o) + return true; + if (o == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(o, this)) { + return false; + } SalesOrder that = (SalesOrder) o; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } @Override diff --git a/common/src/main/java/com/ecep/contract/model/SalesOrderItem.java b/common/src/main/java/com/ecep/contract/model/SalesOrderItem.java index a692ae2..981df43 100644 --- a/common/src/main/java/com/ecep/contract/model/SalesOrderItem.java +++ b/common/src/main/java/com/ecep/contract/model/SalesOrderItem.java @@ -3,7 +3,7 @@ package com.ecep.contract.model; import java.time.LocalDate; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -76,18 +76,20 @@ public class SalesOrderItem implements IdentityEntity, BasedEntity { @Override public final boolean equals(Object o) { - if (this == o) return true; - if (o == null) return false; - Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == o) + return true; + if (o == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(o, this)) { + return false; + } SalesOrderItem that = (SalesOrderItem) o; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } @Override diff --git a/common/src/main/java/com/ecep/contract/model/SysConf.java b/common/src/main/java/com/ecep/contract/model/SysConf.java index 22c9f27..4785391 100644 --- a/common/src/main/java/com/ecep/contract/model/SysConf.java +++ b/common/src/main/java/com/ecep/contract/model/SysConf.java @@ -2,9 +2,12 @@ package com.ecep.contract.model; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.Objects; import org.hibernate.annotations.ColumnDefault; +import com.ecep.contract.util.HibernateProxyUtils; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; @@ -32,4 +35,24 @@ public class SysConf implements Serializable { @Column(name = "CREATED") private LocalDateTime created; + @Override + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + SysConf that = (SysConf) object; + return Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } + } \ No newline at end of file diff --git a/common/src/main/java/com/ecep/contract/model/Unit.java b/common/src/main/java/com/ecep/contract/model/Unit.java index 8ea3b25..8f45536 100644 --- a/common/src/main/java/com/ecep/contract/model/Unit.java +++ b/common/src/main/java/com/ecep/contract/model/Unit.java @@ -1,8 +1,10 @@ package com.ecep.contract.model; - import java.io.Serializable; +import java.util.Objects; + import com.ecep.contract.UnitType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.EnumType; @@ -44,4 +46,24 @@ public class Unit implements IdentityEntity, NamedEntity, Serializable { @Column(name = "STANDARD") private boolean standard; + + @Override + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + Unit that = (Unit) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/model/VendorCatalog.java b/common/src/main/java/com/ecep/contract/model/VendorCatalog.java index 19c2488..44944c1 100644 --- a/common/src/main/java/com/ecep/contract/model/VendorCatalog.java +++ b/common/src/main/java/com/ecep/contract/model/VendorCatalog.java @@ -3,9 +3,8 @@ package com.ecep.contract.model; import java.io.Serializable; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.VendorType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -51,17 +50,16 @@ public class VendorCatalog implements BasedEntity, Serializable { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null || HibernateProxyUtils.isNotEffectiveClassEquals(this, object)) + return false; VendorCatalog that = (VendorCatalog) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/VendorGroup.java b/common/src/main/java/com/ecep/contract/model/VendorGroup.java index 10c70cb..03e17b2 100644 --- a/common/src/main/java/com/ecep/contract/model/VendorGroup.java +++ b/common/src/main/java/com/ecep/contract/model/VendorGroup.java @@ -2,7 +2,7 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -63,17 +63,19 @@ public class VendorGroup implements IdentityEntity, NamedEntity, BasedEntity { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } VendorGroup that = (VendorGroup) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/VendorGroupRequireFileType.java b/common/src/main/java/com/ecep/contract/model/VendorGroupRequireFileType.java index b21f812..7961a0e 100644 --- a/common/src/main/java/com/ecep/contract/model/VendorGroupRequireFileType.java +++ b/common/src/main/java/com/ecep/contract/model/VendorGroupRequireFileType.java @@ -2,9 +2,8 @@ package com.ecep.contract.model; import java.util.Objects; -import org.hibernate.proxy.HibernateProxy; - import com.ecep.contract.ContractFileType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -57,17 +56,19 @@ public class VendorGroupRequireFileType implements IdentityEntity, BasedEntity { @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } VendorGroupRequireFileType that = (VendorGroupRequireFileType) object; return getId() != null && Objects.equals(getId(), that.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return HibernateProxyUtils.hashCode(this); } } diff --git a/common/src/main/java/com/ecep/contract/model/VendorTypeLocal.java b/common/src/main/java/com/ecep/contract/model/VendorTypeLocal.java index a42f16e..44227cc 100644 --- a/common/src/main/java/com/ecep/contract/model/VendorTypeLocal.java +++ b/common/src/main/java/com/ecep/contract/model/VendorTypeLocal.java @@ -1,6 +1,9 @@ package com.ecep.contract.model; +import java.util.Objects; + import com.ecep.contract.VendorType; +import com.ecep.contract.util.HibernateProxyUtils; import jakarta.persistence.Entity; import jakarta.persistence.Table; @@ -17,4 +20,24 @@ import lombok.ToString; @Table(name = "VENDOR_TYPE_LOCAL") @ToString(callSuper = true) public class VendorTypeLocal extends BaseEnumEntity { + + @Override + public final boolean equals(Object object) { + if (this == object) { + return true; + } + if (object == null) { + return false; + } + if (HibernateProxyUtils.isNotEffectiveClassEquals(object, this)) { + return false; + } + VendorTypeLocal that = (VendorTypeLocal) object; + return getId() != null && Objects.equals(getId(), that.getId()); + } + + @Override + public final int hashCode() { + return HibernateProxyUtils.hashCode(this); + } } diff --git a/common/src/main/java/com/ecep/contract/msg/SimpleMessage.java b/common/src/main/java/com/ecep/contract/msg/SimpleMessage.java index 1fbacd7..e1e413f 100644 --- a/common/src/main/java/com/ecep/contract/msg/SimpleMessage.java +++ b/common/src/main/java/com/ecep/contract/msg/SimpleMessage.java @@ -19,7 +19,9 @@ public class SimpleMessage { private List arguments; public void setArguments(Object... arguments) { - this.parameterTypes = Arrays.stream(arguments).map(Object::getClass).map(Class::getName).collect(Collectors.toList()); + this.parameterTypes = Arrays.stream(arguments) + .map(arg -> arg != null ? arg.getClass().getName() : null) + .collect(Collectors.toList()); this.arguments = Arrays.asList(arguments); } diff --git a/common/src/main/java/com/ecep/contract/util/HibernateProxyUtils.java b/common/src/main/java/com/ecep/contract/util/HibernateProxyUtils.java new file mode 100644 index 0000000..66215aa --- /dev/null +++ b/common/src/main/java/com/ecep/contract/util/HibernateProxyUtils.java @@ -0,0 +1,36 @@ +package com.ecep.contract.util; + +import org.hibernate.proxy.HibernateProxy; + +public class HibernateProxyUtils { + private static boolean useProxy = true; + + public static void useProxy(boolean b) { + useProxy = b; + } + + public static boolean isNotEffectiveClassEquals(Object the, Object that) { + if (!useProxy) { + return false; + } + Class oEffectiveClass = the instanceof HibernateProxy + ? ((HibernateProxy) the).getHibernateLazyInitializer().getPersistentClass() + : the.getClass(); + Class thisEffectiveClass = that instanceof HibernateProxy + ? ((HibernateProxy) that).getHibernateLazyInitializer().getPersistentClass() + : that.getClass(); + if (thisEffectiveClass != oEffectiveClass) + return false; + return true; + } + + public static int hashCode(Object that) { + if (!useProxy) { + return that.hashCode(); + } + return that instanceof HibernateProxy + ? ((HibernateProxy) that).getHibernateLazyInitializer().getPersistentClass().hashCode() + : that.getClass().hashCode(); + } + +} diff --git a/config.properties b/config.properties index 451e6e3..6082957 100644 --- a/config.properties +++ b/config.properties @@ -1,5 +1,9 @@ #Updated config.properties #Wed Mar 26 16:33:45 CST 2025 +# 日志配置 +logging.level.com.ecep.contract=DEBUG +logging.level.com.ecep.contract.WebSocketService=DEBUG + cloud.u8.enabled=true #db.server.database=supplier_ms #db.server.host=10.84.209.8 diff --git a/docs/tmp.json b/docs/tmp.json index c5ea5e1..d4c288c 100644 --- a/docs/tmp.json +++ b/docs/tmp.json @@ -1,256 +1,27 @@ { - "messageId": "d0e98143-babd-4f9c-b110-405686110745", - "data": { - "content": [ - { - "id": 1, - "latestUpdate": "2024-10-12T08:05:21Z", - "company": { - "id": 1 - }, - "exceptionMessage": "", - "customerUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:54.102719Z" + "messageId": "a8260988-a09a-46b4-a862-d0f8dd79b00a", + "service": "companyService", + "method": "findAll", + "data": null, + "parameterTypes": [ + "java.util.HashMap", + "org.springframework.data.domain.PageRequest" + ], + "arguments": [ + { + "searchText": "" + }, + { + "pageNumber": 0, + "pageSize": 25, + "sort": { + "empty": false, + "sorted": true, + "unsorted": false }, - { - "id": 4, - "latestUpdate": "2025-07-03T02:51:54.360525Z", - "company": { - "id": 4 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:47.824839Z" - }, - { - "id": 7, - "latestUpdate": "2025-07-19T14:29:32.238535Z", - "company": { - "id": 7 - }, - "exceptionMessage": "", - "cloudLatest": "2025-07-19T14:29:32.238535Z" - }, - { - "id": 8, - "latestUpdate": "2025-07-19T14:30:06.477050Z", - "company": { - "id": 8 - }, - "exceptionMessage": "", - "cloudLatest": "2025-07-19T14:30:06.477050Z" - }, - { - "id": 11, - "latestUpdate": "2025-02-06T01:53:37Z", - "company": { - "id": 11 - } - }, - { - "id": 14, - "latestUpdate": "2025-07-19T14:33:38.778951Z", - "company": { - "id": 14 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "customerUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:50.509512Z" - }, - { - "id": 15, - "latestUpdate": "2025-07-19T14:33:54.829587Z", - "company": { - "id": 15 - }, - "exceptionMessage": "", - "cloudLatest": "2025-07-19T14:33:54.829587Z" - }, - { - "id": 17, - "latestUpdate": "2025-02-06T01:53:50Z", - "company": { - "id": 17 - } - }, - { - "id": 18, - "latestUpdate": "2024-10-12T08:05:21Z", - "company": { - "id": 18 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "customerUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:51.464435Z" - }, - { - "id": 20, - "latestUpdate": "2025-07-19T15:08:20.797876Z", - "company": { - "id": 20 - }, - "exceptionMessage": "", - "cloudLatest": "2025-07-19T15:08:20.797876Z" - }, - { - "id": 21, - "latestUpdate": "2025-07-19T15:08:42.800397Z", - "company": { - "id": 21 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:48.275700Z" - }, - { - "id": 22, - "latestUpdate": "2024-10-12T08:05:21Z", - "company": { - "id": 22 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "customerUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:50.811717Z" - }, - { - "id": 24, - "latestUpdate": "2024-10-12T08:05:21Z", - "company": { - "id": 24 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:47.783776Z" - }, - { - "id": 28, - "latestUpdate": "2025-07-22T06:48:43.340164Z", - "company": { - "id": 28 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:48.372596Z" - }, - { - "id": 29, - "latestUpdate": "2024-10-12T08:05:21Z", - "company": { - "id": 29 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:45.709869Z" - }, - { - "id": 30, - "latestUpdate": "2025-02-06T01:54:06Z", - "company": { - "id": 30 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:48.703944Z" - }, - { - "id": 31, - "latestUpdate": "2025-01-21T06:33:02Z", - "company": { - "id": 31 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:48.532253Z" - }, - { - "id": 32, - "latestUpdate": "2025-02-06T01:54:10Z", - "company": { - "id": 32 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:47.858587Z" - }, - { - "id": 33, - "latestUpdate": "2025-02-06T01:54:13Z", - "company": { - "id": 33 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:46.764209Z" - }, - { - "id": 34, - "latestUpdate": "2025-02-06T01:54:16Z", - "company": { - "id": 34 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:49.249222Z" - }, - { - "id": 35, - "latestUpdate": "2025-02-06T01:54:20Z", - "company": { - "id": 35 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:46.457127Z" - }, - { - "id": 36, - "latestUpdate": "2025-02-06T01:54:24Z", - "company": { - "id": 36 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:48.780775Z" - }, - { - "id": 37, - "latestUpdate": "2025-02-06T01:54:27Z", - "company": { - "id": 37 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:47.675527Z" - }, - { - "id": 38, - "latestUpdate": "2024-10-12T08:05:21Z", - "company": { - "id": 38 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:48.910369Z" - }, - { - "id": 39, - "latestUpdate": "2025-02-06T01:54:30Z", - "company": { - "id": 39 - }, - "exceptionMessage": "", - "vendorUpdateDate": "2025-09-03", - "cloudLatest": "2025-09-03T09:08:49.267816Z" - } - ], - "page": { - "size": 25, - "number": 0, - "totalElements": 4562, - "totalPages": 183 + "offset": 0, + "unpaged": false, + "paged": true } - } + ] } \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/config/JacksonConfig.java b/server/src/main/java/com/ecep/contract/config/JacksonConfig.java index 850b151..7ff3d80 100644 --- a/server/src/main/java/com/ecep/contract/config/JacksonConfig.java +++ b/server/src/main/java/com/ecep/contract/config/JacksonConfig.java @@ -54,14 +54,18 @@ public class JacksonConfig { // 配置Java 8时间模块的序列化格式 JavaTimeModule javaTimeModule = new JavaTimeModule(); + // LocalDate javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); - javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer( - DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE)); - javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer( - DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + // LocalTime + javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ISO_LOCAL_TIME)); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME)); + // LocalDateTime + javaTimeModule.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + javaTimeModule.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + objectMapper.registerModule(javaTimeModule); // 添加自定义模块,用于处理JPA/Hibernate代理对象 diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBankAccountService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBankAccountService.java index c198e39..c994f65 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBankAccountService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBankAccountService.java @@ -17,21 +17,22 @@ import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; import com.ecep.contract.MessageHolder; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.CompanyBankAccountRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyBankAccount; import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "company-bank-account") -public class CompanyBankAccountService implements IEntityService { +public class CompanyBankAccountService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(CompanyBankAccountService.class); @Lazy @Autowired private CompanyBankAccountRepository repository; - public CompanyBankAccount findByAccount(Company company, String account) { return repository.findByCompanyAndAccount(company, account).orElse(null); } @@ -79,7 +80,6 @@ public class CompanyBankAccountService implements IEntityService getSpecification(String searchText) { if (!StringUtils.hasText(searchText)) { @@ -91,12 +91,9 @@ public class CompanyBankAccountService implements IEntityService findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java index c933750..f8b3b25 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java @@ -14,19 +14,21 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.CompanyBlackReasonRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyBlackReason; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service -public class CompanyBlackReasonService implements IEntityService { +public class CompanyBlackReasonService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(CompanyContactService.class); @Autowired private CompanyBlackReasonRepository repository; - public CompanyBlackReason findById(Integer id) { return repository.findById(id).orElse(null); } @@ -40,8 +42,7 @@ public class CompanyBlackReasonService implements IEntityService findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java index 3e578ef..b7f936f 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java @@ -15,11 +15,13 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.CompanyContactRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyContact; import com.ecep.contract.util.MyStringUtils; import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 公司联系人服务 @@ -27,7 +29,7 @@ import com.ecep.contract.util.SpecificationUtils; @Lazy @Service @CacheConfig(cacheNames = "company-contact") -public class CompanyContactService implements IEntityService { +public class CompanyContactService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(CompanyContactService.class); @Autowired @@ -82,8 +84,7 @@ public class CompanyContactService implements IEntityService { builder.like(root.get("phone"), "%" + searchText + "%"), builder.like(root.get("email"), "%" + searchText + "%"), builder.like(root.get("position"), "%" + searchText + "%"), - builder.like(root.get("memo"), "%" + searchText + "%") - ); + builder.like(root.get("memo"), "%" + searchText + "%")); }; } @@ -106,4 +107,15 @@ public class CompanyContactService implements IEntityService { public List findAllByCompanyAndName(Company company, String contactName) { return companyContactRepository.findAllByCompanyAndName(company, contactName); } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java index 8b11134..550c3eb 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java @@ -10,13 +10,19 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.CompanyExtendInfoRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyExtendInfo; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 公司文件服务 @@ -24,7 +30,7 @@ import com.ecep.contract.model.CompanyExtendInfo; @Lazy @Service @CacheConfig(cacheNames = "company-extend-info") -public class CompanyExtendInfoService { +public class CompanyExtendInfoService implements QueryService { private static final Logger logger = LoggerFactory.getLogger(CompanyExtendInfoService.class); @Autowired private CompanyExtendInfoRepository repository; @@ -34,27 +40,49 @@ public class CompanyExtendInfoService { return repository.findById(id).orElse(null); } - public List findAll(Specification spec, Sort sort) { return repository.findAll(spec, sort); } - @Caching( - evict = { - @CacheEvict(key = "#p0.id"), - @CacheEvict(key = "'byCompany-'+#p0.company.id") - } - ) + public Specification getSpecification(String searchText) { + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("businessScope"), "%" + searchText + "%"), + builder.like(root.get("taxRegistrationNumber"), "%" + searchText + "%"), + builder.like(root.get("legalPerson"), "%" + searchText + "%")); + }; + } + + public Page findAll(Specification spec, Pageable pageable) { + return repository.findAll(spec, pageable); + } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'byCompany-'+#p0.company.id") + }) public void delete(CompanyExtendInfo extendInfo) { repository.delete(extendInfo); } - @Caching( - evict = { - @CacheEvict(key = "#p0.id"), - @CacheEvict(key = "'byCompany-'+#p0.company.id") - } - ) + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'byCompany-'+#p0.company.id") + }) public CompanyExtendInfo save(CompanyExtendInfo extendInfo) { return repository.save(extendInfo); } @@ -71,5 +99,4 @@ public class CompanyExtendInfoService { return list.getFirst(); } - } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileService.java index d9a1235..84c218c 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileService.java @@ -29,6 +29,7 @@ import org.springframework.util.StringUtils; import com.ecep.contract.CompanyFileType; import com.ecep.contract.IEntityService; import com.ecep.contract.MyDateTimeUtils; +import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; import com.ecep.contract.cloud.rk.CloudRkService; import com.ecep.contract.cloud.tyc.CloudTycService; @@ -43,6 +44,8 @@ import com.ecep.contract.model.CompanyFile; import com.ecep.contract.model.CompanyFileTypeLocal; import com.ecep.contract.model.CompanyOldName; import com.ecep.contract.model.Contract; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 公司文件服务 @@ -50,7 +53,7 @@ import com.ecep.contract.model.Contract; @Lazy @Service @CacheConfig(cacheNames = "company-file") -public class CompanyFileService implements IEntityService { +public class CompanyFileService implements IEntityService, QueryService { public final static String ENTERPRISE_REPORT = "企业信用报告"; public final static String BUSINESS_LICENSE = "营业执照"; public final static String ORGANIZATION_CODE_CERTIFICATE = "组织机构代码证"; @@ -99,12 +102,23 @@ public class CompanyFileService implements IEntityService { // public List findAllFileTypes(String lang) { // Map map = // fileTypeLocalRepository.getCompleteMapByLocal(lang); - // List list = new ArrayList<>(map.values()); + // public List list = new ArrayList<>(map.values()); // list.sort((o1, o2) -> Objects.compare(o1.getValue(), o2.getValue(), // String::compareTo)); // return list; // } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } + /** * 根据公司的合同的资信报告文件,推算下一个咨询报告日期 * diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java index 8022ca9..e19720e 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java @@ -2,17 +2,24 @@ package com.ecep.contract.ds.company.service; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.CompanyInvoiceInfoRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyInvoiceInfo; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 公司发票信息服务 @@ -20,7 +27,8 @@ import com.ecep.contract.model.CompanyInvoiceInfo; @Lazy @Service @CacheConfig(cacheNames = "company-invoice-info") -public class CompanyInvoiceInfoService { +public class CompanyInvoiceInfoService implements QueryService { + private static final Logger logger = LoggerFactory.getLogger(CompanyInvoiceInfoService.class); @Lazy @Autowired private CompanyInvoiceInfoRepository repository; @@ -30,7 +38,6 @@ public class CompanyInvoiceInfoService { return repository.findById(id).orElse(null); } - public List searchByCompany(Company company, String searchText) { Specification spec = (root, query, builder) -> { return builder.or( @@ -39,8 +46,7 @@ public class CompanyInvoiceInfoService { builder.like(root.get("address"), "%" + searchText + "%"), builder.like(root.get("phone"), "%" + searchText + "%"), builder.like(root.get("bankName"), "%" + searchText + "%"), - builder.like(root.get("bankAccount"), "%" + searchText + "%") - ); + builder.like(root.get("bankAccount"), "%" + searchText + "%")); }; if (company != null) { @@ -50,4 +56,34 @@ public class CompanyInvoiceInfoService { } return repository.findAll(spec, Pageable.ofSize(10)).getContent(); } + + public Specification getSpecification(String searchText) { + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("name"), "%" + searchText + "%"), + builder.like(root.get("taxId"), "%" + searchText + "%"), + builder.like(root.get("address"), "%" + searchText + "%"), + builder.like(root.get("phone"), "%" + searchText + "%"), + builder.like(root.get("bankName"), "%" + searchText + "%"), + builder.like(root.get("bankAccount"), "%" + searchText + "%")); + }; + } + + public Page findAll(Specification spec, Pageable pageable) { + return repository.findAll(spec, pageable); + } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyOldNameService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyOldNameService.java index 737a287..f492886 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyOldNameService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyOldNameService.java @@ -16,16 +16,18 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.CompanyFileUtils; import com.ecep.contract.ds.company.repository.CompanyOldNameRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.CompanyOldName; import com.ecep.contract.util.MyStringUtils; import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service -public class CompanyOldNameService implements IEntityService { +public class CompanyOldNameService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(CompanyOldNameService.class); @Lazy @Autowired @@ -34,7 +36,6 @@ public class CompanyOldNameService implements IEntityService { @Autowired private CompanyService companyService; - public CompanyOldName findById(Integer id) { return companyOldNameRepository.findById(id).orElse(null); } @@ -51,12 +52,10 @@ public class CompanyOldNameService implements IEntityService { return (root, query, builder) -> { return builder.or( builder.like(root.get("name"), "%" + searchText + "%"), - builder.like(root.get("memo"), "%" + searchText + "%") - ); + builder.like(root.get("memo"), "%" + searchText + "%")); }; } - public CompanyOldName save(CompanyOldName companyOldName) { return companyOldNameRepository.save(companyOldName); } @@ -108,7 +107,6 @@ public class CompanyOldNameService implements IEntityService { return null; } - public List findAllByName(String name) { return companyOldNameRepository.findAllByName(name); } @@ -198,6 +196,30 @@ public class CompanyOldNameService implements IEntityService { return companyOldNameRepository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + if (paramsNode.has("company")) { + JsonNode param = paramsNode.get("company"); + Integer companyId = null; + if (param.isInt()) { + companyId = param.asInt(); + } else if (param.isObject()) { + companyId = param.get("id").asInt(); + } + if (companyId != null) { + final int id = companyId; + spec = SpecificationUtils.and(spec, (root, query, builder) -> { + return builder.equal(root.get("companyId"), id); + }); + } + } + return findAll(spec, pageable); + } + public CompanyOldName createNew(Company company, String name, boolean ambiguity) { CompanyOldName companyOldName = new CompanyOldName(); companyOldName.setCompanyId(company.getId()); diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyService.java index 9f8bb25..c8cd669 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyService.java @@ -127,6 +127,9 @@ public class CompanyService implements IEntityService, QueryService findAll(JsonNode paramsNode, Pageable pageable) { Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } return findAll(spec, pageable); } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java b/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java index 257f4cb..a6176e6 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java @@ -17,19 +17,21 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.InvoiceRepository; import com.ecep.contract.model.Invoice; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "invoice") -public class InvoiceService implements IEntityService { +public class InvoiceService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(InvoiceService.class); @Autowired private InvoiceRepository repository; - @Cacheable(key = "#p0") public Invoice findById(Integer id) { return repository.findById(id).orElse(null); @@ -44,8 +46,7 @@ public class InvoiceService implements IEntityService { return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), - builder.like(root.get("description"), "%" + searchText + "%") - ); + builder.like(root.get("description"), "%" + searchText + "%")); }; } @@ -72,4 +73,16 @@ public class InvoiceService implements IEntityService { public Invoice save(Invoice invoice) { return repository.save(invoice); } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return findAll(spec, pageable); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java index abd75c6..5ab93c7 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java @@ -13,21 +13,26 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractBidVendorRepository; import com.ecep.contract.model.Company; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ContractBidVendor; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-ven-bid") -public class ContractBidVendorService implements IEntityService { +public class ContractBidVendorService implements IEntityService, QueryService { @Lazy @Autowired private ContractBidVendorRepository repository; + @Override @Cacheable(key = "#p0") public ContractBidVendor findById(Integer id) { return repository.findById(id).orElse(null); @@ -35,7 +40,15 @@ public class ContractBidVendorService implements IEntityService getSpecification(String searchText) { - return null; + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("bidName"), "%" + searchText + "%"), + builder.like(root.get("memo"), "%" + searchText + "%") + ); + }; } @Override @@ -60,6 +73,7 @@ public class ContractBidVendorService implements IEntityService findByContractAndCompany(Contract contract, Company company) { return repository.findByContractIdAndCompanyId(contract.getId(), company.getId()); } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); + return findAll(spec, pageable); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractCatalogService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractCatalogService.java index 881ee74..222efd3 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractCatalogService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractCatalogService.java @@ -8,10 +8,17 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractCatalogRepository; import com.ecep.contract.model.ContractCatalog; +import com.fasterxml.jackson.databind.JsonNode; /** * 合同分类服务 @@ -19,7 +26,7 @@ import com.ecep.contract.model.ContractCatalog; @Lazy @Service @CacheConfig(cacheNames = "contract-catalog") -public class ContractCatalogService { +public class ContractCatalogService implements IEntityService, QueryService { @Lazy @Autowired private ContractCatalogRepository repository; @@ -28,6 +35,7 @@ public class ContractCatalogService { * 根据 id 查找 ContractCatalog */ @Cacheable(key = "#p0") + @Override public ContractCatalog findById(Integer id) { return repository.findById(id).orElse(null); } @@ -60,7 +68,35 @@ public class ContractCatalogService { @CacheEvict(key = "'code-'+#p0.code"), @CacheEvict(key = "'catalogs'"), }) + @Override public void delete(ContractCatalog catalog) { repository.delete(catalog); } + + @Override + public Specification getSpecification(String searchText) { + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("name"), "%" + searchText + "%"), + builder.like(root.get("code"), "%" + searchText + "%"), + builder.like(root.get("memo"), "%" + searchText + "%")); + }; + } + + @Override + public Page findAll(Specification spec, Pageable pageable) { + return repository.findAll(spec, pageable); + } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + return findAll(spec, pageable); + } } \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java index 5a9f67c..cd5739b 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java @@ -21,16 +21,19 @@ import org.springframework.util.StringUtils; import com.ecep.contract.ContractFileType; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractFileRepository; import com.ecep.contract.ds.contract.repository.ContractFileTypeLocalRepository; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ContractFile; import com.ecep.contract.model.ContractFileTypeLocal; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-file") -public class ContractFileService implements IEntityService { +public class ContractFileService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(ContractFileService.class); @Lazy @Autowired @@ -39,6 +42,7 @@ public class ContractFileService implements IEntityService { @Autowired private ContractFileTypeLocalRepository contractFileTypeLocalRepository; + @Override @Cacheable(key = "#p0") public ContractFile findById(Integer id) { return contractFileRepository.findById(id).orElse(null); @@ -61,6 +65,19 @@ public class ContractFileService implements IEntityService { return contractFileRepository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "contract", "type"); + + return findAll(spec, pageable); + } + public List findAll(Specification spec, Sort by) { return contractFileRepository.findAll(spec, by); } @@ -123,6 +140,7 @@ public class ContractFileService implements IEntityService { @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'allbycontract-'+#p0.contract.id") }) + @Override public void delete(ContractFile file) { contractFileRepository.deleteById(file.getId()); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java index 8d8d791..563b2e2 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java @@ -16,8 +16,10 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractGroupRepository; import com.ecep.contract.model.ContractGroup; +import com.fasterxml.jackson.databind.JsonNode; /** * 合同分组服务 @@ -25,13 +27,14 @@ import com.ecep.contract.model.ContractGroup; @Lazy @Service @CacheConfig(cacheNames = "contract-group") -public class ContractGroupService implements IEntityService { +public class ContractGroupService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(ContractGroupService.class); @Lazy @Autowired private ContractGroupRepository repository; + @Override @Cacheable(key = "#p0") public ContractGroup findById(Integer id) { return repository.findById(id).orElse(null); @@ -42,14 +45,22 @@ public class ContractGroupService implements IEntityService { return repository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + return findAll(spec, pageable); + } + @Override public Specification getSpecification(String searchText) { - return (root, query, builder)->{ + return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), builder.like(root.get("name"), "%" + searchText + "%"), - builder.like(root.get("title"), "%" + searchText + "%") - ); + builder.like(root.get("title"), "%" + searchText + "%")); }; } @@ -89,6 +100,7 @@ public class ContractGroupService implements IEntityService { @CacheEvict(key = "'groups'"), @CacheEvict(key = "'code-'+#p0.code"), }) + @Override public void delete(ContractGroup group) { repository.delete(group); } @@ -100,4 +112,5 @@ public class ContractGroupService implements IEntityService { group.setTitle(""); return group; } + } \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java index f3aa935..ad31771 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java @@ -18,23 +18,27 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractItemRepository; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ContractItem; import com.ecep.contract.model.Inventory; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; import jakarta.persistence.criteria.Path; @Lazy @Service @CacheConfig(cacheNames = "contract-item") -public class ContractItemService implements IEntityService { +public class ContractItemService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(ContractItemService.class); @Lazy @Autowired private ContractItemRepository itemRepository; + @Override @Cacheable(key = "#p0") public ContractItem findById(Integer id) { return itemRepository.findById(id).orElse(null); @@ -66,6 +70,19 @@ public class ContractItemService implements IEntityService { return itemRepository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + // TODO 完成参数处理 + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); + logger.warn("Unsupported paramsNode: {}", paramsNode); + return findAll(spec, pageable); + } + public List findAllByContract(Contract contract) { return itemRepository.findByContractId(contract.getId()); } @@ -88,6 +105,7 @@ public class ContractItemService implements IEntityService { @Caching(evict = { @CacheEvict(key = "#p0.id") }) + @Override public void delete(ContractItem item) { itemRepository.delete(item); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java index cbf8ed7..a49590e 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java @@ -16,8 +16,10 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractKindRepository; import com.ecep.contract.model.ContractKind; +import com.fasterxml.jackson.databind.JsonNode; /** * 合同种类服务 @@ -25,13 +27,14 @@ import com.ecep.contract.model.ContractKind; @Lazy @Service @CacheConfig(cacheNames = "contract-kind") -public class ContractKindService implements IEntityService { +public class ContractKindService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(ContractKindService.class); @Lazy @Autowired private ContractKindRepository repository; + @Override @Cacheable(key = "'kind-'+#p0") public ContractKind findById(Integer id) { return repository.findById(id).orElse(null); @@ -42,14 +45,22 @@ public class ContractKindService implements IEntityService { return repository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + return findAll(spec, pageable); + } + @Override public Specification getSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), builder.like(root.get("name"), "%" + searchText + "%"), - builder.like(root.get("title"), "%" + searchText + "%") - ); + builder.like(root.get("title"), "%" + searchText + "%")); }; } @@ -72,23 +83,19 @@ public class ContractKindService implements IEntityService { return repository.findAll(); } - @Caching( - evict = { - @CacheEvict(key = "'kinds'"), - @CacheEvict(key = "'kind-'+#p0.id"), - @CacheEvict(key = "'code-'+#p0.name"), - } - ) + @Caching(evict = { + @CacheEvict(key = "'kinds'"), + @CacheEvict(key = "'kind-'+#p0.id"), + @CacheEvict(key = "'code-'+#p0.name"), + }) public ContractKind save(ContractKind kind) { return repository.save(kind); } - @Caching( - evict = { - @CacheEvict(key = "'kinds'"), - @CacheEvict(key = "'kind-'+#p0"), - } - ) + @Caching(evict = { + @CacheEvict(key = "'kinds'"), + @CacheEvict(key = "'kind-'+#p0"), + }) public void delete(Integer id) { repository.deleteById(id); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java index 5c31c76..548d748 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java @@ -15,9 +15,12 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractPayPlanRepository; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ContractPayPlan; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 合同支付计划服务 @@ -25,7 +28,7 @@ import com.ecep.contract.model.ContractPayPlan; @Lazy @Service @CacheConfig(cacheNames = "contract-pay-plan") -public class ContractPayPlanService implements IEntityService { +public class ContractPayPlanService implements IEntityService, QueryService { @Lazy @Autowired private ContractPayPlanRepository repository; @@ -51,29 +54,35 @@ public class ContractPayPlanService implements IEntityService { return repository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); + return findAll(spec, pageable); + } + public List findAllByContract(Contract contract) { return repository.findAllByContract(contract); } - @Caching( - evict = { - @CacheEvict(key = "#p0.id") - } - ) + @Caching(evict = { + @CacheEvict(key = "#p0.id") + }) @Override public void delete(ContractPayPlan entity) { repository.delete(entity); } - @Caching( - evict = { - @CacheEvict(key = "#p0.id") - } - ) + @Caching(evict = { + @CacheEvict(key = "#p0.id") + }) @Override public ContractPayPlan save(ContractPayPlan entity) { return repository.save(entity); } - } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java index 8e2711b..6bcb781 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java @@ -26,6 +26,7 @@ import org.springframework.util.StringUtils; import com.ecep.contract.ContractPayWay; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.constant.ContractConstant; import com.ecep.contract.ds.contract.repository.ContractRepository; import com.ecep.contract.ds.other.service.SysConfService; @@ -40,6 +41,7 @@ import com.ecep.contract.model.ContractType; import com.ecep.contract.model.Project; import com.ecep.contract.util.MyStringUtils; import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; import jakarta.persistence.criteria.Predicate; @@ -50,7 +52,7 @@ import jakarta.persistence.criteria.Predicate; @Lazy @Service @CacheConfig(cacheNames = "contract") -public class ContractService implements IEntityService { +public class ContractService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(ContractService.class); @Lazy @Autowired @@ -127,6 +129,43 @@ public class ContractService implements IEntityService { return contractRepository.findAll(spec, sort); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "group", "kind", "type", "group"); + + // relation + spec = SpecificationUtils.andParam(spec, paramsNode, "company", "project"); + + return findAll(spec, pageable); + } + + private Specification andParam(Specification spec, JsonNode paramsNode, String field) { + if (!paramsNode.has(field)) { + return spec; + } + JsonNode param = paramsNode.get(field); + Integer value = null; + if (param.isInt()) { + value = param.asInt(); + } else if (param.isObject()) { + value = param.get("id").asInt(); + } + if (value == null) { + return spec; + } + final int id = value; + spec = SpecificationUtils.and(spec, (root, query, builder) -> { + return builder.equal(root.get(field).get("id"), id); + }); + return spec; + } + public List findAllByCompany(Company company) { return contractRepository.findAllByCompanyId(company.getId()); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java index 794d56f..e8f523e 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java @@ -16,8 +16,10 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractTypeRepository; import com.ecep.contract.model.ContractType; +import com.fasterxml.jackson.databind.JsonNode; /** * 合同类型服务 @@ -25,7 +27,7 @@ import com.ecep.contract.model.ContractType; @Lazy @Service @CacheConfig(cacheNames = "contract-type") -public class ContractTypeService implements IEntityService { +public class ContractTypeService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(ContractTypeService.class); @Lazy @@ -42,6 +44,15 @@ public class ContractTypeService implements IEntityService { return repository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + return findAll(spec, pageable); + } + public ContractType findByName(String name) { return repository.findByName(name).orElse(null); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java index d55f780..de4095b 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java @@ -10,20 +10,26 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ExtendVendorInfoRepository; import com.ecep.contract.ds.vendor.service.VendorGroupService; import com.ecep.contract.model.Contract; import com.ecep.contract.model.ExtendVendorInfo; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-ext-ven-info") -public class ExtendVendorInfoService { +public class ExtendVendorInfoService implements IEntityService, QueryService { @Lazy @Autowired private ExtendVendorInfoRepository repository; @@ -31,8 +37,9 @@ public class ExtendVendorInfoService { @Autowired private VendorGroupService vendorGroupService; + @Override @Cacheable(key = "#p0") - public ExtendVendorInfo findById(int id) { + public ExtendVendorInfo findById(Integer id) { return repository.findById(id).orElse(null); } @@ -49,13 +56,46 @@ public class ExtendVendorInfoService { return repository.save(bidVendor); } - @Caching(evict = { - @CacheEvict(key = "#p0.id"), - @CacheEvict(key = "'bycontract-'+#p0.contract.id") - }) + @Caching( + evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'bycontract-'+#p0.contract.id") + } + ) + @Override public void delete(ExtendVendorInfo bidVendor) { repository.delete(bidVendor); } + + @Override + public Page findAll(Specification spec, Pageable pageable) { + return repository.findAll(spec, pageable); + } + + @Override + public Specification getSpecification(String searchText) { + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("contract").get("code"), "%" + searchText + "%"), + builder.like(root.get("contract").get("name"), "%" + searchText + "%"), + builder.like(root.get("codeSequenceNumber").as(String.class), "%" + searchText + "%") + ); + }; + } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); + return findAll(spec, pageable); + } public List findAll(Specification spec, Sort sort) { return repository.findAll(spec, sort); diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherItemService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherItemService.java index 018f7eb..0992b05 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherItemService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherItemService.java @@ -15,13 +15,16 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.PurchaseBillVoucherItemRepository; import com.ecep.contract.model.PurchaseBillVoucherItem; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "purchase-bill-voucher-item") -public class PurchaseBillVoucherItemService implements IEntityService { +public class PurchaseBillVoucherItemService + implements IEntityService, QueryService { @Lazy @Autowired private PurchaseBillVoucherItemRepository repository; @@ -45,6 +48,15 @@ public class PurchaseBillVoucherItemService implements IEntityService findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + return findAll(spec, pageable); + } + @Caching(evict = { @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'refId-'+#p0.refId") diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherService.java index abe935b..48f3220 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseBillVoucherService.java @@ -18,8 +18,11 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.PurchaseBillVoucherRepository; import com.ecep.contract.model.PurchaseBillVoucher; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 采购账单凭证服务 @@ -27,14 +30,15 @@ import com.ecep.contract.model.PurchaseBillVoucher; @Lazy @Service @CacheConfig(cacheNames = "purchase-bill-voucher") -public class PurchaseBillVoucherService implements IEntityService { +public class PurchaseBillVoucherService + implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(PurchaseBillVoucherService.class); @Lazy @Autowired private PurchaseBillVoucherRepository repository; - + @Override @Cacheable(key = "#p0") public PurchaseBillVoucher findById(Integer id) { return repository.findById(id).orElse(null); @@ -50,8 +54,7 @@ public class PurchaseBillVoucherService implements IEntityService { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), - builder.like(root.get("description"), "%" + searchText + "%") - ); + builder.like(root.get("description"), "%" + searchText + "%")); }; } @@ -71,24 +74,21 @@ public class PurchaseBillVoucherService implements IEntityService findAll(Specification spec, Pageable pageable) { return repository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "company", "inventory"); + return findAll(spec, pageable); + } + public List findAll(Specification spec, Sort sort) { return repository.findAll(spec, sort); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrderItemService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrderItemService.java index af1ad99..f217802 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrderItemService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrderItemService.java @@ -18,13 +18,16 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.PurchaseOrderItemRepository; import com.ecep.contract.model.PurchaseOrderItem; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-purchase-order-item") -public class PurchaseOrderItemService implements IEntityService { +public class PurchaseOrderItemService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(PurchaseOrderItemService.class); @Lazy @Autowired @@ -52,7 +55,6 @@ public class PurchaseOrderItemService implements IEntityService getSpecification(String searchText) { if (!StringUtils.hasText(searchText)) { @@ -68,22 +70,29 @@ public class PurchaseOrderItemService implements IEntityService findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + // field + spec = SpecificationUtils.andParam(spec, paramsNode, "order", "inventory"); + return findAll(spec, pageable); + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'refId-'+#p0.refId") + }) @Override public void delete(PurchaseOrderItem entity) { repository.delete(entity); } - @Caching( - evict = { - @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'refId-'+#p0.refId") - } - ) + @Caching(evict = { + @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'refId-'+#p0.refId") + }) @Override public PurchaseOrderItem save(PurchaseOrderItem entity) { return repository.save(entity); diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrdersService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrdersService.java index dd9e983..cd77ed6 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrdersService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/PurchaseOrdersService.java @@ -17,9 +17,12 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.PurchaseOrderRepository; import com.ecep.contract.model.Contract; import com.ecep.contract.model.PurchaseOrder; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; /** * 采购订单服务 @@ -27,14 +30,14 @@ import com.ecep.contract.model.PurchaseOrder; @Lazy @Service @CacheConfig(cacheNames = "contract-purchase-order") -public class PurchaseOrdersService implements IEntityService { +public class PurchaseOrdersService implements IEntityService, QueryService { private static final Logger logger = LoggerFactory.getLogger(PurchaseOrdersService.class); @Lazy @Autowired private PurchaseOrderRepository purchaseOrderRepository; - + @Override @Cacheable(key = "#p0") public PurchaseOrder findById(Integer id) { return purchaseOrderRepository.findById(id).orElse(null); @@ -45,8 +48,7 @@ public class PurchaseOrdersService implements IEntityService { return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), - builder.like(root.get("description"), "%" + searchText + "%") - ); + builder.like(root.get("description"), "%" + searchText + "%")); }; } @@ -66,24 +68,21 @@ public class PurchaseOrdersService implements IEntityService { * @param order 要保存的实体对象 * @return 返回异步调用 */ - @Caching( - evict = { - @CacheEvict(key = "#p0.id"), - @CacheEvict(key = "'code-'+#p0.code"), - @CacheEvict(key = "'refId-'+#p0.refId") - } - ) + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'code-'+#p0.code"), + @CacheEvict(key = "'refId-'+#p0.refId") + }) public PurchaseOrder save(PurchaseOrder order) { return purchaseOrderRepository.save(order); } - @Caching( - evict = { - @CacheEvict(key = "#p0.id"), - @CacheEvict(key = "'code-'+#p0.code"), - @CacheEvict(key = "'refId-'+#p0.refId") - } - ) + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'code-'+#p0.code"), + @CacheEvict(key = "'refId-'+#p0.refId") + }) + @Override public void delete(PurchaseOrder order) { purchaseOrderRepository.delete(order); } @@ -96,10 +95,21 @@ public class PurchaseOrdersService implements IEntityService { return purchaseOrderRepository.count(spec); } + @Override public Page findAll(Specification spec, Pageable pageable) { return purchaseOrderRepository.findAll(spec, pageable); } + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has("searchText")) { + spec = getSpecification(paramsNode.get("searchText").asText()); + } + spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); + return findAll(spec, pageable); + } + public List findAll(Specification spec, Sort sort) { return purchaseOrderRepository.findAll(spec, sort); } @@ -112,8 +122,7 @@ public class PurchaseOrdersService implements IEntityService { Specification spec = (root, query, builder) -> { return builder.or( builder.like(root.get("name"), "%" + searchText + "%"), - builder.like(root.get("code"), "%" + searchText + "%") - ); + builder.like(root.get("code"), "%" + searchText + "%")); }; return purchaseOrderRepository.findAll(spec, Pageable.ofSize(10)).getContent(); } diff --git a/server/src/main/java/com/ecep/contract/handler/WebSocketHandler.java b/server/src/main/java/com/ecep/contract/handler/WebSocketHandler.java index c990660..f6b2272 100644 --- a/server/src/main/java/com/ecep/contract/handler/WebSocketHandler.java +++ b/server/src/main/java/com/ecep/contract/handler/WebSocketHandler.java @@ -1,25 +1,21 @@ package com.ecep.contract.handler; import java.io.IOException; +import java.lang.reflect.Type; import java.nio.ByteBuffer; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import org.apache.poi.ss.formula.functions.T; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import org.springframework.web.socket.BinaryMessage; import org.springframework.web.socket.CloseStatus; @@ -30,6 +26,7 @@ import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; import com.ecep.contract.IEntityService; +import com.ecep.contract.PageArgument; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; import com.ecep.contract.ds.other.service.EmployeeLoginHistoryService; @@ -146,25 +143,31 @@ public class WebSocketHandler extends TextWebSocketHandler { logger.info("处理普通消息: " + payload); } - private boolean handleAsMessageCallback(WebSocketSession session, String payload) - throws JsonProcessingException, IOException { + private boolean handleAsMessageCallback(WebSocketSession session, String payload) { + if (session == null || !session.isOpen()) { + logger.warn("尝试在已关闭的WebSocket会话上处理消息回调"); + return false; + } + JsonNode jsonNode = null; try { jsonNode = objectMapper.readTree(payload); } catch (Exception e) { - logger.warn(payload, e); + logger.warn("解析消息回调JSON失败: {}", payload, e); return false; } - jsonNode = objectMapper.readTree(payload); + if (!jsonNode.has("messageId")) { // 没有 messageId 的消息不处理 return false; } String messageId = jsonNode.get("messageId").asText(); + if (!jsonNode.has("service")) { sendError(session, messageId, "缺失 service 参数"); return true; } + String serviceName = jsonNode.get("service").asText(); Object service = null; try { @@ -178,6 +181,7 @@ public class WebSocketHandler extends TextWebSocketHandler { sendError(session, messageId, "缺失 method 参数"); return true; } + String methodName = jsonNode.get("method").asText(); try { @@ -194,98 +198,125 @@ public class WebSocketHandler extends TextWebSocketHandler { sendError(session, messageId, "未实现的方法: " + methodName); return true; } + + // 再次检查会话状态 + if (!session.isOpen()) { + logger.warn("会话已关闭,无法发送处理结果 (消息ID: {})"); + return true; + } + ObjectNode objectNode = objectMapper.createObjectNode(); objectNode.put("messageId", messageId); objectNode.set("data", objectMapper.valueToTree(result)); - session.sendMessage(new TextMessage(objectMapper.writeValueAsString(objectNode))); - - } catch (BeansException | IOException | NoSuchElementException e) { - sendError(session, messageId, e.getMessage()); + String response = objectMapper.writeValueAsString(objectNode); + session.sendMessage(new TextMessage(response)); + return true; + } catch (Exception e) { + // 防止重复发送消息导致的TEXT_PARTIAL_WRITING异常 + if (!session.isOpen()) { + logger.warn("会话已关闭,无法发送错误消息 (消息ID: {})"); + } else { + sendError(session, messageId, e.getMessage()); + } + logger.error("处理消息回调失败 (消息ID: {})", messageId, e); + return true; } - ObjectNode objectNode = objectMapper.createObjectNode(); - objectNode.put("messageId", messageId); - objectNode.put("success", false); - objectNode.put("message", "未找到服务: " + serviceName); - session.sendMessage(new TextMessage(objectMapper.writeValueAsString(objectNode))); - return true; } - private Object invokerDeleteMethod(Object service, JsonNode paramsNode) { - JsonNode param = paramsNode.get(0); + private Object invokerDeleteMethod(Object service, JsonNode argumentsNode) { + JsonNode paramsNode = argumentsNode.get(0); + if (!paramsNode.has("id")) { + throw new IllegalArgumentException("缺失 id 参数"); + } + int id = paramsNode.get("id").asInt(); IEntityService entityService = (IEntityService) service; - Object entity = entityService.findById(param.get("id").asInt()); + Object entity = entityService.findById(id); if (entity == null) { - throw new NoSuchElementException("未找到实体: " + param.get("id").asInt()); + throw new NoSuchElementException("未找到实体: #" + id); } entityService.delete(entity); return entity; } - private Object invokerSaveMethod(Object service, JsonNode paramsNode) throws JsonMappingException { - JsonNode param = paramsNode.get(0); + private Object invokerSaveMethod(Object service, JsonNode argumentsNode) throws JsonMappingException { + JsonNode paramsNode = argumentsNode.get(0); IEntityService entityService = (IEntityService) service; - Object entity = entityService.findById(param.get("id").asInt()); - objectMapper.updateValue(entity, param); + Object entity = null; + if (paramsNode.has("id")) { + int id = paramsNode.get("id").asInt(); + entity = entityService.findById(id); + if (entity == null) { + throw new NoSuchElementException("未找到实体: #" + id); + } + } else { + entity = createNewEntity(entityService); + if (entity == null) { + throw new UnsupportedOperationException("无法创建实体对象, " + service.getClass().getName()); + } + } + objectMapper.updateValue(entity, paramsNode); return entityService.save(entity); } + private Object createNewEntity(IEntityService entityService) { + try { + Type[] types = getClass().getGenericInterfaces(); + // System.out.println("types = " + Arrays.asList(types)); + if (types.length > 0) { + String typeName = types[0].getTypeName(); + // System.out.println("typeName = " + typeName); + String clz = typeName.split("<")[1].split(">")[0].split(",")[0].trim(); + // System.out.println("clz = " + clz); + Class clazz = Class.forName(clz); + return (T) clazz.getDeclaredConstructor().newInstance(); + } + } catch (Exception e) { + throw new RuntimeException("无法创建Entity实例", e); + } + return null; + } + + /* + * see client QueryService#findById(Integer) + */ private Object invokerFindByIdMethod(Object service, JsonNode argumentsNode) { JsonNode paramsNode = argumentsNode.get(0); - Integer id = paramsNode.get(0).asInt(); + Integer id = paramsNode.asInt(); IEntityService entityService = (IEntityService) service; return entityService.findById(id); } - private Object invokerFindAllMethod(Object service, JsonNode argumentsNode) { + private Object invokerFindAllMethod(Object service, JsonNode argumentsNode) throws JsonProcessingException { JsonNode paramsNode = argumentsNode.get(0); JsonNode pageableNode = argumentsNode.get(1); - // 从pageableNode中解析分页参数 - int pageNumber = 0; - int pageSize = 10; - Sort sort = Sort.unsorted(); - - if (pageableNode.has("pageNumber")) { - pageNumber = pageableNode.get("pageNumber").asInt(); - } - if (pageableNode.has("pageSize")) { - pageSize = pageableNode.get("pageSize").asInt(); - } - - // 处理排序信息 - if (pageableNode.has("sort")) { - JsonNode sortNode = pageableNode.get("sort"); - // 检查是否有排序字段 - if (sortNode.has("sorted") && sortNode.get("sorted").asBoolean() && sortNode.has("orders")) { - JsonNode ordersNode = sortNode.get("orders"); - if (ordersNode.isArray() && ordersNode.size() > 0) { - List orders = new ArrayList<>(); - for (JsonNode orderNode : ordersNode) { - if (orderNode.has("property") && orderNode.has("direction")) { - String property = orderNode.get("property").asText(); - String direction = orderNode.get("direction").asText(); - orders.add(new Sort.Order(Sort.Direction.valueOf(direction.toUpperCase()), - property)); - } - } - if (!orders.isEmpty()) { - sort = Sort.by(orders); - } - } - } - } - - Pageable pageable = PageRequest.of(pageNumber, pageSize, sort); + PageArgument pageArgument = objectMapper.treeToValue(pageableNode, PageArgument.class); QueryService entityService = (QueryService) service; - return entityService.findAll(paramsNode, pageable); + return entityService.findAll(paramsNode, pageArgument.toPageable()); } - private void sendError(WebSocketSession session, String messageId, String string) - throws JsonProcessingException, IOException { - ObjectNode objectNode = objectMapper.createObjectNode(); - objectNode.put("messageId", messageId); - objectNode.put("success", false); - objectNode.put("message", messageId); - session.sendMessage(new TextMessage(objectMapper.writeValueAsString(objectNode))); + private void sendError(WebSocketSession session, String messageId, String message) { + if (session == null || !session.isOpen()) { + logger.warn("尝试向已关闭的WebSocket会话发送错误消息: {}", message); + return; + } + + try { + ObjectNode objectNode = objectMapper.createObjectNode(); + objectNode.put("messageId", messageId); + objectNode.put("success", false); + objectNode.put("message", message); + String errorMessage = objectMapper.writeValueAsString(objectNode); + + // 检查会话状态并尝试发送错误消息 + if (session.isOpen()) { + session.sendMessage(new TextMessage(errorMessage)); + } else { + logger.warn("会话已关闭,无法发送错误消息: {}", message); + } + } catch (Exception e) { + // 捕获所有可能的异常,防止影响主流程 + logger.error("发送错误消息失败 (会话ID: {})", session.getId(), e); + } } @Override diff --git a/server/src/main/java/com/ecep/contract/util/SpecificationUtils.java b/server/src/main/java/com/ecep/contract/util/SpecificationUtils.java index 91e476b..35062ed 100644 --- a/server/src/main/java/com/ecep/contract/util/SpecificationUtils.java +++ b/server/src/main/java/com/ecep/contract/util/SpecificationUtils.java @@ -1,9 +1,11 @@ package com.ecep.contract.util; +import java.util.function.Function; + import org.springframework.data.jpa.domain.Specification; import org.springframework.util.StringUtils; -import java.util.function.Function; +import com.fasterxml.jackson.databind.JsonNode; public class SpecificationUtils { public static Specification and(Specification one, Specification two) { @@ -37,7 +39,8 @@ public class SpecificationUtils { * @param 泛型 * @return 搜索条件为空时返回null,否则返回一个Specification对象 */ - public static Specification andWith(String searchText, Function> buildSearchSpecification) { + public static Specification andWith(String searchText, + Function> buildSearchSpecification) { Specification spec = null; String[] split = null; do { @@ -50,4 +53,27 @@ public class SpecificationUtils { } while (split != null); return spec; } + + public static Specification andParam(Specification spec, JsonNode paramsNode, String... fields) { + for (String field : fields) { + if (!paramsNode.has(field)) { + continue; + } + JsonNode param = paramsNode.get(field); + Integer value = null; + if (param.isInt()) { + value = param.asInt(); + } else if (param.isObject()) { + value = param.get("id").asInt(); + } + if (value == null) { + continue; + } + final int id = value; + spec = SpecificationUtils.and(spec, (root, query, builder) -> { + return builder.equal(root.get(field).get("id"), id); + }); + } + return spec; + } }