From c4eec0a9dda5ce7c0c810002301e7cf8c36aef4f Mon Sep 17 00:00:00 2001 From: songqq Date: Thu, 9 Oct 2025 18:27:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(model):=20=E9=87=8D=E6=9E=84=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=B1=BB=E5=8C=85=E7=BB=93=E6=9E=84=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=BA=8F=E5=88=97=E5=8C=96=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构模型类包结构,将模型类按功能模块划分到不同的子包中。优化序列化处理,为VO类添加serialVersionUID并实现Serializable接口。移除部分冗余的serialVersionUID字段,简化模型类代码。同时修复UITools中空值处理的问题,并更新pom版本至0.0.100-SNAPSHOT。 - 将模型类按功能模块划分到ds子包中 - 为VO类添加序列化支持 - 移除冗余的serialVersionUID字段 - 修复UITools空值处理问题 - 更新项目版本号 --- .trae/rules/client_controller_rules.md | 157 ++++ .trae/rules/client_converter_rules.md | 239 ++++++ .trae/rules/client_service_rules.md | 146 ++++ .trae/rules/client_task_rules.md | 0 .trae/rules/entity_rules.md | 69 ++ .trae/rules/project_rules.md | 61 +- .trae/rules/vo_rules.md | 58 ++ client/pom.xml | 6 +- .../ecep/contract/WebSocketClientService.java | 9 +- .../ecep/contract/WebSocketClientSession.java | 3 +- .../controller/OkHttpLoginController.java | 33 - .../cloud/tyc/CloudTycManagerSkin.java | 2 +- .../cloud/u8/YongYouU8ManagerSkin.java | 2 +- .../CompanyContactWindowController.java | 31 +- .../ContractTabSkinExtendVendorInfo.java | 6 +- .../InventoryTabSkinHistoryPrice.java | 5 - .../project/AbstProjectBasedTabSkin.java | 1 - .../controller/project/ProjectTabSkinBid.java | 4 +- .../project/ProjectTabSkinCost.java | 1 - .../project/ProjectTabSkinCustomerInfo.java | 29 +- .../project/ProjectTabSkinFundPlan.java | 2 - .../project/ProjectTabSkinQuotation.java | 2 + .../project/ProjectWindowController.java | 9 - .../cost/ProjectCostExportExcelTasker.java | 1 - .../project/cost/ProjectCostTabSkinBase.java | 1 - .../cost/ProjectCostWindowController.java | 4 - .../tab/CompanyTabSkinBlackReason.java | 1 - .../controller/tab/CompanyTabSkinContact.java | 1 - .../controller/tab/CompanyTabSkinOther.java | 26 +- .../CompanyTabSkinPurchaseBillVoucher.java | 2 - .../tab/ContractTabSkinItemsV2.java | 28 - .../tab/ContractTabSkinPayPlan.java | 11 +- .../tab/ContractTabSkinSaleOrders.java | 3 - .../tab/ContractTabSkinVendorBid.java | 3 +- .../controller/tab/SalesOrderTabSkinBase.java | 2 - .../tab/SalesOrderTabSkinBillVoucher.java | 38 - .../tab/SalesOrderTabSkinItems.java | 28 - .../table/cell/ContractFileTableCell.java | 32 +- .../controller/vendor/VendorTabSkinFile.java | 2 +- .../VendorApprovedListVendorImportTask.java | 2 - .../converter/BankStringConverter.java | 4 +- .../ecep/contract/service/CloudRkService.java | 6 - .../service/CompanyBankAccountService.java | 4 +- .../service/CompanyContactService.java | 3 +- .../service/CompanyCustomerFileService.java | 2 - .../contract/service/CompanyFileService.java | 15 - .../service/CompanyFileTypeService.java | 20 +- .../service/CompanyInvoiceInfoService.java | 8 +- .../service/ContractPayPlanService.java | 7 +- .../service/ExtendVendorInfoService.java | 2 +- .../contract/service/ProductTypeService.java | 1 - .../contract/service/ProjectTypeService.java | 7 + .../contract/service/SaleOrdersService.java | 1 - .../contract/service/VendorEntityService.java | 2 +- .../contract/service/VendorFileService.java | 6 - .../ecep/contract/service/VendorService.java | 6 - .../ecep/contract/task/CloudRkSyncTask.java | 28 +- .../contract/task/CompanyRkUpdateTasker.java | 30 + .../contract/task/ContractVerifyComm.java | 79 +- .../java/com/ecep/contract/util/UITools.java | 4 + .../ecep/contract/vm/CloudRkViewModel.java | 93 ++- .../contract/vm/CloudTycInfoViewModel.java | 51 +- .../contract/vm/CloudYuInfoViewModel.java | 26 +- .../contract/vm/CompanyContactViewModel.java | 8 +- ...CompanyCustomerFileTypeLocalViewModel.java | 34 +- .../vm/CompanyExtendInfoViewModel.java | 7 +- .../contract/vm/CompanyFileViewModel.java | 10 +- .../vm/CompanyInvoiceInfoViewModel.java | 13 +- .../vm/ContractBidVendorViewModel.java | 5 - .../vm/ContractFileTypeLocalViewModel.java | 23 +- .../vm/ContractItemComposeViewModel.java | 2 - .../contract/vm/ContractPayPlanViewModel.java | 2 - .../vm/CustomerFileTypeLocalViewModel.java | 36 +- .../ecep/contract/vm/InventoryViewModel.java | 9 +- .../vm/ProjectFileTypeLocalViewModel.java | 35 +- .../ecep/contract/vm/SalesOrderViewModel.java | 3 - .../contract/vm/VendorEntityViewModel.java | 53 +- .../vm/VendorFileTypeLocalViewModel.java | 36 +- .../contract/vm/VendorTypeLocalViewModel.java | 36 +- client/src/main/resources/ui/home.fxml | 18 +- common/pom.xml | 4 +- .../java/com/ecep/contract/model/Bank.java | 18 +- .../ecep/contract/model/BaseEnumEntity.java | 30 +- .../contract/model/CompanyFileTypeLocal.java | 22 +- .../ecep/contract/model/ContractCatalog.java | 4 +- .../contract/model/ContractFileTypeLocal.java | 25 +- .../ecep/contract/model/ContractGroup.java | 4 +- .../com/ecep/contract/model/ContractKind.java | 4 +- .../com/ecep/contract/model/ContractType.java | 4 +- .../ecep/contract/model/CustomerCatalog.java | 4 +- .../contract/model/CustomerFileTypeLocal.java | 29 +- .../contract/model/DeliverySignMethod.java | 3 +- .../com/ecep/contract/model/Department.java | 4 +- .../com/ecep/contract/model/Employee.java | 4 +- .../ecep/contract/model/EmployeeAuthBind.java | 4 +- .../contract/model/EmployeeLoginHistory.java | 5 +- .../com/ecep/contract/model/EmployeeRole.java | 5 +- .../com/ecep/contract/model/Function.java | 5 +- .../com/ecep/contract/model/HistoryPrice.java | 4 +- .../com/ecep/contract/model/HolidayTable.java | 4 +- .../ecep/contract/model/IdentityEntity.java | 8 + .../com/ecep/contract/model/Inventory.java | 11 +- .../ecep/contract/model/InventoryCatalog.java | 4 +- .../contract/model/InventoryHistoryPrice.java | 4 +- .../com/ecep/contract/model/Permission.java | 4 +- .../java/com/ecep/contract/model/Price.java | 4 +- .../contract/model/ProjectFileTypeLocal.java | 26 +- .../ecep/contract/model/ProjectSaleType.java | 16 +- .../model/ProjectSaleTypeRequireFileType.java | 7 +- .../com/ecep/contract/model/ProjectType.java | 3 +- .../java/com/ecep/contract/model/SysConf.java | 4 +- .../java/com/ecep/contract/model/Unit.java | 4 +- .../ecep/contract/model/VendorApproved.java | 8 +- .../contract/model/VendorApprovedFile.java | 4 +- .../ecep/contract/model/VendorCatalog.java | 4 +- .../contract/model/VendorFileTypeLocal.java | 25 +- .../com/ecep/contract/model/VendorGroup.java | 4 +- .../model/VendorGroupRequireFileType.java | 4 +- .../ecep/contract/model/VendorTypeLocal.java | 27 +- .../com/ecep/contract/model/VolumeSize.java | 1 - .../java/com/ecep/contract/vo/BankVo.java | 17 +- .../com/ecep/contract/vo/CloudBasedVo.java | 8 +- .../java/com/ecep/contract/vo/CloudRkVo.java | 4 +- .../java/com/ecep/contract/vo/CloudTycVo.java | 4 +- .../java/com/ecep/contract/vo/CloudYuVo.java | 4 +- .../contract/vo/CompanyBankAccountVo.java | 4 +- .../contract/vo/CompanyBlackReasonVo.java | 4 +- .../ecep/contract/vo/CompanyContactVo.java | 4 +- .../ecep/contract/vo/CompanyContractVo.java | 4 +- .../contract/vo/CompanyCustomerEntityVo.java | 4 +- .../CompanyCustomerEvaluationFormFileVo.java | 4 +- .../vo/CompanyCustomerFileTypeLocalVo.java | 21 +- .../contract/vo/CompanyCustomerFileVo.java | 4 +- .../ecep/contract/vo/CompanyCustomerVo.java | 4 +- .../ecep/contract/vo/CompanyExtendInfoVo.java | 4 +- .../contract/vo/CompanyFileTypeLocalVo.java | 20 +- .../com/ecep/contract/vo/CompanyFileVo.java | 4 +- .../contract/vo/CompanyInvoiceInfoVo.java | 4 +- .../ecep/contract/vo/CompanyOldNameVo.java | 4 +- .../java/com/ecep/contract/vo/CompanyVo.java | 4 +- .../ecep/contract/vo/ContractBidVendorVo.java | 8 +- .../ecep/contract/vo/ContractCatalogVo.java | 4 +- .../contract/vo/ContractFileTypeLocalVo.java | 20 +- .../com/ecep/contract/vo/ContractFileVo.java | 4 +- .../com/ecep/contract/vo/ContractGroupVo.java | 4 +- .../com/ecep/contract/vo/ContractItemVo.java | 4 +- .../com/ecep/contract/vo/ContractKindVo.java | 4 +- .../ecep/contract/vo/ContractPayPlanVo.java | 4 +- .../com/ecep/contract/vo/ContractTypeVo.java | 4 +- .../java/com/ecep/contract/vo/ContractVo.java | 4 +- .../ecep/contract/vo/CustomerCatalogVo.java | 4 +- .../contract/vo/CustomerFileTypeLocalVo.java | 22 +- .../vo/CustomerSatisfactionSurveyVo.java | 4 +- .../contract/vo/DeliverySignMethodVo.java | 4 +- .../com/ecep/contract/vo/DepartmentVo.java | 4 +- .../ecep/contract/vo/EmployeeAuthBindVo.java | 4 +- .../contract/vo/EmployeeLoginHistoryVo.java | 4 +- .../com/ecep/contract/vo/EmployeeRoleVo.java | 4 +- .../java/com/ecep/contract/vo/EmployeeVo.java | 9 +- .../ecep/contract/vo/ExtendVendorInfoVo.java | 4 +- .../java/com/ecep/contract/vo/FunctionVo.java | 4 +- .../ecep/contract/vo/InventoryCatalogVo.java | 4 +- .../com/ecep/contract/vo/InventoryVo.java | 8 +- .../java/com/ecep/contract/vo/InvoiceVo.java | 4 +- .../com/ecep/contract/vo/PermissionVo.java | 4 +- .../java/com/ecep/contract/vo/PriceVo.java | 4 +- .../com/ecep/contract/vo/ProductTypeVo.java | 5 +- .../com/ecep/contract/vo/ProductUsageVo.java | 6 +- .../com/ecep/contract/vo/ProjectBidVo.java | 4 +- .../ecep/contract/vo/ProjectCostItemVo.java | 4 +- .../com/ecep/contract/vo/ProjectCostVo.java | 11 +- .../contract/vo/ProjectFileTypeLocalVo.java | 20 +- .../com/ecep/contract/vo/ProjectFileVo.java | 4 +- .../ecep/contract/vo/ProjectFundPlanVo.java | 4 +- .../ecep/contract/vo/ProjectIndustryVo.java | 5 +- .../ecep/contract/vo/ProjectQuotationVo.java | 43 +- .../vo/ProjectSaleTypeRequireFileTypeVo.java | 5 +- .../ecep/contract/vo/ProjectSaleTypeVo.java | 9 +- .../com/ecep/contract/vo/ProjectTypeVo.java | 5 +- .../java/com/ecep/contract/vo/ProjectVo.java | 4 +- .../vo/PurchaseBillVoucherItemVo.java | 3 +- .../contract/vo/PurchaseBillVoucherVo.java | 3 +- .../ecep/contract/vo/PurchaseOrderItemVo.java | 3 +- .../com/ecep/contract/vo/PurchaseOrderVo.java | 3 +- .../ecep/contract/vo/PurchaseReceiptVo.java | 4 +- .../vo/PurchaseSettlementVoucherItemVo.java | 4 +- .../vo/PurchaseSettlementVoucherVo.java | 4 +- .../contract/vo/SalesBillVoucherItemVo.java | 4 +- .../ecep/contract/vo/SalesBillVoucherVo.java | 4 +- .../ecep/contract/vo/SalesOrderInvoiceVo.java | 10 +- .../ecep/contract/vo/SalesOrderItemVo.java | 4 +- .../com/ecep/contract/vo/SalesOrderVo.java | 4 +- .../java/com/ecep/contract/vo/SysConfVo.java | 6 +- .../java/com/ecep/contract/vo/UnitVo.java | 30 +- .../contract/vo/VendorApprovedFileVo.java | 25 +- .../contract/vo/VendorApprovedItemVo.java | 28 +- .../ecep/contract/vo/VendorApprovedVo.java | 24 +- .../com/ecep/contract/vo/VendorCatalogVo.java | 25 +- .../com/ecep/contract/vo/VendorEntityVo.java | 40 +- .../contract/vo/VendorFileTypeLocalVo.java | 21 +- .../com/ecep/contract/vo/VendorFileVo.java | 25 +- .../vo/VendorGroupRequireFileTypeVo.java | 14 +- .../com/ecep/contract/vo/VendorGroupVo.java | 34 +- .../ecep/contract/vo/VendorTypeLocalVo.java | 20 +- .../java/com/ecep/contract/vo/VendorVo.java | 4 +- .../com/ecep/contract/vo/VolumeSizeVo.java | 20 +- .../Service缓存非Vo对象分析报告.md | 98 +++ .../ACCEPTANCE_server模块service缓存调整为Vo对象.md | 298 ++++--- .../ALIGNMENT_server模块service缓存调整为Vo对象.md | 66 +- .../ANALYSIS_affected_components.md | 106 +++ .../COMPATIBILITY_report_affected_components.md | 171 ++++ .../CONSENSUS_server模块service缓存调整为Vo对象.md | 175 ++-- .../DESIGN_server模块service缓存调整为Vo对象.md | 767 ++++++++++++------ .../FINAL_server模块service缓存调整为Vo对象.md | 707 ++++++---------- .../MODIFICATION_plan_affected_components.md | 175 ++++ .../SERVICE_CLASS_COMPLIANCE_REPORT.md | 122 ++- .../TASK_entity_vo_conversion.md | 48 +- .../TASK_server_service_cache_vo.md | 44 +- .../TASK_server模块service缓存调整为Vo对象.md | 716 ++++++++-------- .../TODO_server模块service缓存调整为Vo对象.md | 180 ++-- .../ANALYSIS_websocket_components.md | 213 +++++ .../MODIFICATION_plan_websocket_components.md | 285 +++++++ pom.xml | 2 +- server/pom.xml | 6 +- .../java/com/ecep/contract/SpringApp.java | 1 - .../ecep/contract/cloud/CloudBaseInfo.java | 2 +- .../com/ecep/contract/cloud/CloudInfo.java | 3 +- .../cloud/old/CompanyContactUtils.java | 4 +- .../cloud/old/CompanyCustomerFileUtils.java | 2 +- .../cloud/old/CompanyVendorFileUtils.java | 2 +- .../contract/cloud/old/OldVersionService.java | 26 +- .../cloud/old/OldVersionSyncCustomerTask.java | 5 +- .../cloud/old/OldVersionSyncVendorTask.java | 4 +- .../contract/cloud/rk/CloudRkRepository.java | 4 +- .../contract/cloud/rk/CloudRkService.java | 98 ++- .../contract/cloud/rk/CloudRkSyncTask.java | 10 +- .../contract/cloud/rk/EntReportParser.java | 9 +- .../contract/cloud/rk/ctx/CloudRkCtx.java | 72 +- .../cloud/tyc/CloudTycRepository.java | 4 +- .../contract/cloud/tyc/CloudTycService.java | 30 +- .../contract/cloud/u8/CloudYuRepository.java | 4 +- .../cloud/u8/ContractGroupSyncTask.java | 15 +- .../cloud/u8/ContractSyncContext.java | 14 - .../cloud/u8/ContractTypeSyncTask.java | 16 +- .../cloud/u8/CustomerClassSyncTask.java | 15 +- .../contract/cloud/u8/CustomerSyncTask.java | 25 +- .../contract/cloud/u8/DateTransferTask.java | 2 +- .../contract/cloud/u8/VendorSyncTask.java | 25 +- .../contract/cloud/u8/YongYouU8Service.java | 8 +- .../cloud/u8/ctx/AbstractYongYouU8Ctx.java | 64 +- .../cloud/u8/ctx/CompanyBankAccountCtx.java | 2 +- .../contract/cloud/u8/ctx/CompanyCtx.java | 7 +- .../contract/cloud/u8/ctx/ContractCtx.java | 203 +++-- .../contract/cloud/u8/ctx/CustomerCtx.java | 93 ++- .../contract/cloud/u8/ctx/InventoryCtx.java | 38 +- .../contract/cloud/u8/ctx/InvoiceCtx.java | 2 +- .../cloud/u8/ctx/PurchaseBillVoucherCtx.java | 59 +- .../cloud/u8/ctx/PurchaseOrderCtx.java | 6 +- .../u8/ctx/PurchaseSettlementVoucherCtx.java | 4 +- .../cloud/u8/ctx/SalesBillVoucherCtx.java | 112 ++- .../contract/cloud/u8/ctx/SalesOrderCtx.java | 6 +- .../ecep/contract/cloud/u8/ctx/VendorCtx.java | 52 +- .../CustomLocalDateTimeDeserializer.java | 2 +- .../CompanyContactStringConverter.java | 2 +- .../contract/ds/company/CompanyFileUtils.java | 2 +- .../company/controller/CompanyController.java | 2 +- .../contract/ds/company/model/Company.java | 6 +- .../ds/company/model/CompanyBankAccount.java | 6 +- .../ds/company/model/CompanyBasedEntity.java | 2 +- .../ds/company/model/CompanyBlackReason.java | 4 +- .../ds/company/model/CompanyContact.java | 6 +- .../ds/company/model/CompanyExtendInfo.java | 4 +- .../ds/company/model/CompanyFile.java | 4 +- .../ds/company/model/CompanyInvoiceInfo.java | 6 +- .../ds/company/model/CompanyOldName.java | 5 +- .../CompanyBankAccountRepository.java | 4 +- .../CompanyBlackReasonRepository.java | 4 +- .../repository/CompanyContactRepository.java | 4 +- .../repository/CompanyContractRepository.java | 6 +- .../CompanyExtendInfoRepository.java | 5 +- .../repository/CompanyFileRepository.java | 4 +- .../CompanyInvoiceInfoRepository.java | 2 +- .../repository/CompanyOldNameRepository.java | 2 +- .../company/repository/CompanyRepository.java | 6 +- .../company/repository/InvoiceRepository.java | 4 +- .../service/CompanyBankAccountService.java | 4 +- .../company/service/CompanyBasicService.java | 6 +- .../service/CompanyBlackReasonService.java | 4 +- .../service/CompanyContactService.java | 4 +- .../service/CompanyExtendInfoService.java | 40 +- .../company/service/CompanyFileService.java | 9 +- .../service/CompanyInvoiceInfoService.java | 4 +- .../service/CompanyOldNameService.java | 4 +- .../ds/company/service/CompanyService.java | 10 +- .../ds/company/service/InvoiceService.java | 4 +- .../tasker/CompanyFilesRebuildTasker.java | 2 +- .../ds/contract/ContractStringConverter.java | 11 +- .../ds/contract/model/CompanyContract.java | 27 +- .../contract/ds/contract/model/Contract.java | 38 +- .../contract/model/ContractBasedEntity.java | 2 +- .../ds/contract/model/ContractBidVendor.java | 5 +- .../ds/contract/model/ContractFile.java | 3 +- .../ds/contract/model/ContractItem.java | 3 +- .../ds/contract/model/ContractPayPlan.java | 4 +- .../ContractBidVendorRepository.java | 2 +- .../repository/ContractFileRepository.java | 4 +- .../repository/ContractItemRepository.java | 2 +- .../repository/ContractPayPlanRepository.java | 4 +- .../repository/ContractRepository.java | 2 +- .../ExtendVendorInfoRepository.java | 2 +- .../PurchaseBillVoucherItemRepository.java | 2 +- .../PurchaseBillVoucherRepository.java | 13 +- .../PurchaseOrderItemRepository.java | 4 +- .../repository/PurchaseOrderRepository.java | 4 +- .../SalesBillVoucherItemRepository.java | 14 +- .../SalesBillVoucherRepository.java | 8 +- .../repository/SalesOrderItemRepository.java | 8 +- .../repository/SalesOrderRepository.java | 8 +- .../service/ContractBidVendorService.java | 14 +- .../contract/service/ContractFileService.java | 8 +- .../service/ContractGroupService.java | 8 +- .../contract/service/ContractItemService.java | 4 +- .../service/ContractPayPlanService.java | 4 +- .../ds/contract/service/ContractService.java | 65 +- .../contract/service/ContractTypeService.java | 8 +- .../service/ExtendVendorInfoService.java | 14 +- .../PurchaseBillVoucherItemService.java | 2 +- .../service/PurchaseBillVoucherService.java | 32 +- .../service/PurchaseOrderItemService.java | 6 +- .../service/PurchaseOrdersService.java | 13 +- .../contract/service/SaleOrdersService.java | 8 +- .../service/SalesBillVoucherItemService.java | 106 +++ .../service/SalesBillVoucherService.java | 57 +- .../service/SalesOrderItemService.java | 2 +- .../tasker/AbstContractRepairTasker.java | 25 +- .../tasker/ContractFilesRebuildAllTasker.java | 2 +- .../tasker/ContractFilesRebuildTasker.java | 2 +- .../tasker/ContractRepairAllTasker.java | 2 +- .../tasker/ContractRepairByCompanyTask.java | 5 +- .../contract/tasker/ContractRepairComm.java | 37 +- .../contract/tasker/ContractVerifyComm.java | 307 ++++--- .../CustomerContractCostFormUpdateTask.java | 14 +- .../ds/customer/model/CompanyCustomer.java | 8 +- .../customer/model/CompanyCustomerEntity.java | 6 +- .../CompanyCustomerEvaluationFormFile.java | 5 +- .../customer/model/CompanyCustomerFile.java | 4 +- .../model/CompanyCustomerFileTypeLocal.java | 7 +- .../model/CustomerSatisfactionSurvey.java | 7 +- .../ds/customer/model/SalesBillVoucher.java | 7 +- .../customer/model/SalesBillVoucherItem.java | 6 +- .../ds/customer/model/SalesOrder.java | 8 +- .../ds/customer/model/SalesOrderInvoice.java | 4 +- .../ds/customer/model/SalesOrderItem.java | 5 +- .../CompanyCustomerEntityRepository.java | 4 +- ...yCustomerEvaluationFormFileRepository.java | 6 +- .../CompanyCustomerFileRepository.java | 4 +- ...ompanyCustomerFileTypeLocalRepository.java | 2 +- .../repository/CompanyCustomerRepository.java | 4 +- .../repository/CustomerCatalogRepository.java | 6 +- .../service/CompanyCustomerEntityService.java | 24 +- ...panyCustomerEvaluationFormFileService.java | 6 +- .../service/CompanyCustomerFileService.java | 8 +- .../CompanyCustomerFileTypeService.java | 3 +- .../service/CompanyCustomerService.java | 10 +- .../service/CustomerCatalogService.java | 20 +- .../other/controller/CloudRkController.java | 7 +- .../other/controller/CloudTycController.java | 7 +- .../other/controller/CloudYuController.java | 2 +- .../ecep/contract/ds/other/model/CloudRk.java | 19 +- .../contract/ds/other/model/CloudTyc.java | 5 +- .../ecep/contract/ds/other/model/CloudYu.java | 23 +- .../ecep/contract/ds/other/model/Invoice.java | 26 +- .../ds/other/service/EmployeeRoleService.java | 6 +- .../ds/other/service/InventoryService.java | 4 +- .../ecep/contract/ds/project/ProjectCtx.java | 4 +- .../ds/project/model/ProductType.java | 5 +- .../ds/project/model/ProductUsage.java | 6 +- .../contract/ds/project/model/Project.java | 25 +- .../ds/project/model/ProjectBasedEntity.java | 17 +- .../contract/ds/project/model/ProjectBid.java | 6 +- .../ds/project/model/ProjectCost.java | 6 +- .../ds/project/model/ProjectCostItem.java | 3 +- .../ds/project/model/ProjectFile.java | 4 +- .../ds/project/model/ProjectFundPlan.java | 5 +- .../ds/project/model/ProjectIndustry.java | 7 +- .../ds/project/model/ProjectQuotation.java | 6 +- .../CustomerSatisfactionSurveyRepository.java | 2 +- .../repository/ProductTypeRepository.java | 2 +- .../repository/ProductUsageRepository.java | 2 +- .../repository/ProjectBidRepository.java | 4 +- .../repository/ProjectCostItemRepository.java | 4 +- .../repository/ProjectCostRepository.java | 6 +- .../repository/ProjectFileRepository.java | 4 +- .../repository/ProjectFundPlanRepository.java | 4 +- .../repository/ProjectIndustryRepository.java | 2 +- .../ProjectQuotationRepository.java | 4 +- .../project/repository/ProjectRepository.java | 2 +- .../CustomerSatisfactionSurveyService.java | 4 +- .../service/DeliverySignMethodService.java | 13 +- .../project/service/ProductTypeService.java | 6 +- .../project/service/ProductUsageService.java | 6 +- .../ds/project/service/ProjectBidService.java | 4 +- .../service/ProjectCostItemService.java | 4 +- .../project/service/ProjectCostService.java | 36 +- .../project/service/ProjectFileService.java | 4 +- .../service/ProjectFundPlanService.java | 6 +- .../service/ProjectIndustryService.java | 2 +- .../service/ProjectQuotationService.java | 4 +- ...ProjectSaleTypeRequireFileTypeService.java | 18 +- .../ds/project/service/ProjectService.java | 16 +- .../service/ProjectStringConverter.java | 2 +- .../ds/vendor/model/ExtendVendorInfo.java | 6 +- .../ds/vendor/model/PurchaseBillVoucher.java | 8 +- .../vendor/model/PurchaseBillVoucherItem.java | 8 +- .../ds/vendor/model/PurchaseOrder.java | 8 +- .../ds/vendor/model/PurchaseOrderItem.java | 6 +- .../ds/vendor/model/PurchaseReceipt.java | 4 +- .../model/PurchaseSettlementVoucher.java | 6 +- .../model/PurchaseSettlementVoucherItem.java | 19 +- .../ecep/contract/ds/vendor/model/Vendor.java | 8 +- .../ds/vendor/model/VendorApprovedItem.java | 6 +- .../ds/vendor/model/VendorEntity.java | 6 +- .../contract/ds/vendor/model/VendorFile.java | 4 +- .../VendorApprovedItemRepository.java | 4 +- .../repository/VendorEntityRepository.java | 4 +- .../repository/VendorFileRepository.java | 4 +- .../vendor/repository/VendorRepository.java | 4 +- .../service/VendorApprovedItemService.java | 10 +- .../vendor/service/VendorEntityService.java | 12 +- .../ds/vendor/service/VendorFileService.java | 9 +- .../VendorGroupRequireFileTypeService.java | 6 +- .../ds/vendor/service/VendorGroupService.java | 13 +- .../ds/vendor/service/VendorService.java | 25 +- .../ds/vendor/task/VendorVerifyAllTasker.java | 2 +- .../WebSocketServerCallbackManager.java | 21 +- .../tasker/CompanyCompositeUpdateTasker.java | 9 +- ...mpanyCustomerEvaluationFormUpdateTask.java | 10 +- .../CompanyCustomerNextSignDateTask.java | 6 +- .../CompanyCustomerRebuildFilesTasker.java | 4 +- .../service/tasker/CompanyRkUpdateTasker.java | 67 +- .../service/tasker/CompanyVerifyTasker.java | 4 +- .../service/tasker/ContractRepairTasker.java | 2 +- .../service/tasker/ContractVerifyTasker.java | 2 +- .../tasker/CustomerFileMoveTasker.java | 6 +- ...ectCostImportItemsFromContractsTasker.java | 10 +- .../ecep/contract/util/RedisCacheCleaner.java | 204 +++++ server/src/main/resources/tasker_mapper.json | 4 +- .../ContractServiceIntegrationTest.java | 208 +++++ .../contract/service/ContractServiceTest.java | 3 +- .../SaleOrdersServiceIntegrationTest.java | 224 +++-- .../sale/service/SaleOrdersServiceTest.java | 2 +- .../service/SalesBillVoucherServiceTest.java | 2 +- .../service/SalesOrderItemServiceTest.java | 4 +- ...tServerCallbackManagerIntegrationTest.java | 334 ++++++++ .../contract/service/BaseServiceTest.java | 254 ++++++ .../WebSocketServerCallbackManagerTest.java | 505 ++++++++++++ .../contract/util/RedisCacheCleanerTest.java | 256 ++++++ 457 files changed, 8426 insertions(+), 3669 deletions(-) create mode 100644 .trae/rules/client_controller_rules.md create mode 100644 .trae/rules/client_converter_rules.md create mode 100644 .trae/rules/client_service_rules.md create mode 100644 .trae/rules/client_task_rules.md create mode 100644 .trae/rules/entity_rules.md create mode 100644 .trae/rules/vo_rules.md create mode 100644 client/src/main/java/com/ecep/contract/task/CompanyRkUpdateTasker.java create mode 100644 docs/task/non-vo-cache-analysis/Service缓存非Vo对象分析报告.md create mode 100644 docs/task/server模块service缓存调整为Vo对象/ANALYSIS_affected_components.md create mode 100644 docs/task/server模块service缓存调整为Vo对象/COMPATIBILITY_report_affected_components.md create mode 100644 docs/task/server模块service缓存调整为Vo对象/MODIFICATION_plan_affected_components.md create mode 100644 docs/task/websocket_component_analysis/ANALYSIS_websocket_components.md create mode 100644 docs/task/websocket_component_analysis/MODIFICATION_plan_websocket_components.md create mode 100644 server/src/main/java/com/ecep/contract/ds/contract/service/SalesBillVoucherItemService.java create mode 100644 server/src/main/java/com/ecep/contract/util/RedisCacheCleaner.java create mode 100644 server/src/test/java/com/ecep/contract/ds/contract/service/ContractServiceIntegrationTest.java create mode 100644 server/src/test/java/com/ecep/contract/integration/WebSocketServerCallbackManagerIntegrationTest.java create mode 100644 server/src/test/java/com/ecep/contract/service/BaseServiceTest.java create mode 100644 server/src/test/java/com/ecep/contract/service/WebSocketServerCallbackManagerTest.java create mode 100644 server/src/test/java/com/ecep/contract/util/RedisCacheCleanerTest.java diff --git a/.trae/rules/client_controller_rules.md b/.trae/rules/client_controller_rules.md new file mode 100644 index 0000000..cb4933c --- /dev/null +++ b/.trae/rules/client_controller_rules.md @@ -0,0 +1,157 @@ +# 客户端 Controller 类规则 + +## 1. 目录结构 + +客户端控制器位于`client/src/main/java/com/ecep/contract/controller/`目录下,按业务模块组织: + +- **根目录**:包含基础控制器、抽象控制器和主窗口控制器 +- **业务子包**:按业务领域组织,如`company/`、`project/`、`contract/`、`vendor/`等 +- **tab/子包**:包含所有Tab皮肤控制器和相关接口、抽象类 +- **table/子包**:包含表格相关控制器和单元格实现 + +## 2. 命名规范 + +- **基础控制器**:`BaseController.java` +- **抽象控制器**:以`Abst`开头,如`AbstEntityController.java`、`AbstManagerWindowController.java` +- **窗口控制器**:以`WindowController`结尾,如`HomeWindowController.java` +- **管理窗口控制器**:以`ManagerWindowController`结尾,如`CompanyManagerWindowController.java` +- **Tab皮肤控制器**:以`TabSkin`结尾,如`CompanyTabSkinBase.java` +- **管理器皮肤**:以`ManagerSkin`结尾,如`CompanyManagerSkin.java` +- **组件控制器**:如`OkHttpLoginController.java` + +## 3. 继承关系 + +控制器类遵循以下继承层次结构: + +- `BaseController`:所有控制器的基础类,提供窗口显示、异常处理等通用功能 + - `AbstEntityBasedController`:基于实体的控制器抽象类 + - `AbstManagerWindowController`:管理窗口控制器的抽象类,包含搜索、分页等功能 + - `AbstEntityController>`:实体详情窗口控制器的抽象类 + - 具体业务窗口控制器,如`CompanyWindowController`、`ProjectWindowController`等 + +Tab相关控制器继承关系: + +- `Skin`:皮肤接口基础 + - `TabSkin`:Tab皮肤接口 + - `AbstGenericTabSkin`:通用Tab皮肤抽象类 + - `AbstEntityBasedTabSkin, T extends IdentityEntity, V extends IdentityViewModel>`:基于实体的Tab皮肤抽象类 + - 具体业务Tab皮肤控制器,如`CompanyTabSkinBase.java`、`ContractTabSkinFiles.java`等 + +## 4. 注解使用 + +客户端控制器类应使用以下注解: + +- `@Component`:声明为Spring组件,使其可被Spring容器管理 +- `@Scope("prototype")`:设置为原型作用域,确保每次请求创建新实例 +- `@Lazy`:延迟加载,提高应用启动性能 +- `@FxmlPath("/ui/[业务模块]/[文件名].fxml")`:指定对应的FXML文件路径 +- `@Autowired`:自动注入依赖的服务层组件 + +## 5. FXML文件规范 + +- **文件位置**:FXML文件通常位于`/client/src/main/resources/ui/`目录下,按业务模块组织子目录 +- **命名规范**:使用小写字母和下划线,如`home.fxml`、`company/company.fxml` +- **关联方式**:通过`@FxmlPath`注解指定控制器对应的FXML文件路径 +- **组件ID**:FXML文件中组件的id应与控制器中对应的字段名保持一致(驼峰命名法) + +## 6. 控制器方法规范 + +### 6.1 初始化方法 + +- `initialize()`:控制器初始化方法,用于设置UI组件初始状态、绑定事件监听器等 + - 此方法会在FXML加载完成后自动调用 + +### 6.2 窗口生命周期方法 + +- `onShown(WindowEvent windowEvent)`:窗口显示时触发的方法 + - 用于执行窗口显示后的初始化操作,如数据加载、组件状态更新等 + - 通常需要调用`super.onShown(windowEvent)`确保父类逻辑执行 + +### 6.3 窗口显示方法 + +- `public static void show()`:静态方法,用于便捷地显示控制器对应的窗口 + - 通常有多个重载版本,支持不同参数(如viewModel、owner窗口等) + - 内部调用`BaseController.show()`方法实现窗口显示逻辑 + +### 6.4 Tab相关方法 + +Tab皮肤控制器包含以下核心方法: + +- `install()`:安装Tab皮肤,加载FXML并初始化UI组件 +- `initializeUIComponents()`:初始化UI组件,设置数据绑定和事件监听 +- `getTab()`:获取对应的Tab对象 +- `save()`:保存Tab中的数据变更 +- `dispose()`:释放资源,清理监听器等 + +## 7. 字段规范 + +- **UI组件字段**:与FXML文件中的组件id对应,使用`public`访问修饰符 +- **服务依赖字段**:使用`@Autowired`注解注入,通常使用`private`访问修饰符 +- **ViewModel字段**:通常作为控制器的核心数据模型,提供`getter/setter`方法 +- **命名规范**:使用驼峰命名法,如`nameField`、`tabPane`、`saveBtn`等 + +## 8. 数据绑定与更新 + +- **ViewModel绑定**:控制器通常通过ViewModel与实体数据进行绑定 +- **异步数据加载**:使用`CompletableFuture`进行异步数据加载,避免阻塞UI线程 +- **UI更新**:在JavaFX应用线程中更新UI组件,可使用`Platform.runLater()`确保线程安全 + +## 9. 事件处理 + +- **按钮点击事件**:通过`setOnAction()`方法绑定事件处理器 +- **表单字段变更**:可通过JavaFX的属性绑定机制监听字段变更 +- **Tab切换事件**:实现`onTabShown()`方法处理Tab显示事件 + +## 10. 异常处理 + +- 使用`handleException()`方法统一处理异常 +- 异常信息通常会显示在状态栏并记录日志 +- 异步操作中的异常应通过`exceptionally()`或`handle()`方法捕获处理 + +## 11. 最佳实践 + +- **职责分离**:控制器应专注于UI交互和数据展示,业务逻辑应委托给服务层 +- **避免重复代码**:利用抽象类和接口提取通用逻辑 +- **资源管理**:及时释放资源,避免内存泄漏 +- **线程安全**:确保在JavaFX应用线程中更新UI +- **代码可读性**:添加适当的注释,遵循命名规范 + +## 12. 示例代码结构 + +```java +@Lazy +@Scope("prototype") +@Component +@FxmlPath("/ui/[模块名]/[文件名].fxml") +public class [业务]WindowController extends AbstEntityController<[Vo类型], [ViewModel类型]> { + private static final Logger logger = LoggerFactory.getLogger([业务]WindowController.class); + + @Autowired + private [业务]Service [业务]Service; + + // UI组件字段 + public BorderPane root; + public TabPane tabPane; + public TextField nameField; + // ...其他UI组件 + + public static void show([Vo类型] entity, Window window) { + show([ViewModel类型].from(entity), window); + } + + public static void show([ViewModel类型] viewModel, Window window) { + BaseController.show([业务]WindowController.class, viewModel, window); + } + + @Override + public void initialize() { + // 初始化UI组件和事件监听 + } + + @Override + public void onShown(WindowEvent windowEvent) { + super.onShown(windowEvent); + // 窗口显示后的逻辑 + } +} +``` \ No newline at end of file diff --git a/.trae/rules/client_converter_rules.md b/.trae/rules/client_converter_rules.md new file mode 100644 index 0000000..1e70c1f --- /dev/null +++ b/.trae/rules/client_converter_rules.md @@ -0,0 +1,239 @@ +# 客户端转换器类规则 + +## 1. 目录结构 +- 所有类型转换器类必须位于 `com.ecep.contract.converter` 包下 +- 按照实体类型组织,无需进一步分包 + +## 2. 命名规范 +- 类名格式:`[EntityName]StringConverter` +- 例如:`ContractStringConverter`、`CompanyStringConverter`、`VendorStringConverter` + +## 3. 继承关系 +### 3.1 基础转换器类型 +- 直接继承 `javafx.util.StringConverter` 接口 +- 适用于简单的转换场景 +- 例如: +```java +public class ContractStringConverter extends StringConverter { + // 实现代码 +} +``` + +### 3.2 增强转换器类型 +- 继承自定义的 `EntityStringConverter` 抽象类 +- 适用于需要更多功能(如延迟初始化、搜索建议等)的场景 +- 大多数业务实体转换器应使用此类型 +- 例如: +```java +public class CompanyStringConverter extends EntityStringConverter { + // 实现代码 +} +``` + +### 3.3 枚举转换器类型 +- 继承 `EnumEntityStringConverter, T extends BaseEnumEntity>` +- 专门用于处理枚举类型实体 +- 例如: +```java +public class EnumEntityStringConverter, T extends BaseEnumEntity> extends StringConverter { + // 实现代码 +} +``` + +## 4. 核心接口实现 +### 4.1 StringConverter 接口 +- 所有转换器必须实现 `toString(T object)` 方法 +- 所有转换器必须实现 `fromString(String string)` 方法 + +## 5. Spring框架集成 +### 5.1 组件注解 +- 增强转换器类型通常使用 `@Component` 注解标记为Spring组件 +- 结合 `@Lazy` 注解实现延迟加载 +- 例如: +```java +@Lazy +@Component +public class CompanyStringConverter extends EntityStringConverter { + // 实现代码 +} +``` + +### 5.2 依赖注入 +- 使用 `@Autowired` 注解注入对应的Service实例 +- 通常也需要为注入的Service添加 `@Lazy` 注解 +- 例如: +```java +@Lazy +@Autowired +private CompanyService service; +``` + +## 6. 初始化机制 +### 6.1 构造函数 +- 基础转换器通常使用构造函数接收Service实例 +- 例如: +```java +public ContractStringConverter(ContractService service) { + this.service = service; +} +``` + +### 6.2 初始化方法 +- 增强转换器使用 `@PostConstruct` 注解标记初始化方法 +- 在初始化方法中配置转换器的各种功能 +- 例如: +```java +@PostConstruct +private void init() { + setInitialized(project -> service.findById(project.getId())); + setSuggestion(service::search); + setFromString(service::findByName); +} +``` + +## 7. EntityStringConverter 特性配置 +继承自 EntityStringConverter 的增强转换器可以配置以下特性: + +### 7.1 对象初始化 +- 使用 `setInitialized(Function initialized)` 配置对象延迟初始化逻辑 +- 通常调用Service的findById方法 +- 例如:`setInitialized(project -> service.findById(project.getId()))` + +### 7.2 搜索建议 +- 使用 `setSuggestion(Function> suggestion)` 配置自动补全数据提供方法 +- 通常调用Service的search方法 +- 例如:`setSuggestion(service::search)` + +### 7.3 字符串转换 +- 使用 `setFromString(Function fromString)` 配置从字符串到对象的转换逻辑 +- 通常调用Service的findByName方法 +- 例如:`setFromString(service::findByName)` + +### 7.4 格式化器 +- 使用 `setFormater(Function formater)` 配置自定义格式化逻辑 +- 用于自定义对象的字符串表示 +- 例如:`setFormater(contract -> contract.getCode() + " " + contract.getName())` + +## 8. 核心方法实现规范 +### 8.1 toString(T object) 方法 +- 将对象转换为可读的字符串表示 +- 必须处理null情况 +- 通常返回对象的名称、编码或其他关键标识 +- 对于基础转换器: +```java +@Override +public String toString(ContractVo cc) { + return cc.getCode() + " " + cc.getName(); +} +``` +- 对于枚举转换器: +```java +@Override +public String toString(T object) { + return object == null ? "" : object.getValue(); +} +``` + +### 8.2 fromString(String string) 方法 +- 从字符串还原对象实例 +- 通常调用Service的findByName或findByCode方法 +- 例如: +```java +@Override +public ContractVo fromString(String string) { + return service.findByCode(string); +} +``` +- 对于某些场景(如枚举转换器),可能返回null + +## 9. 与Service类的关联 +### 9.1 Service中的转换器创建 +- 在Service类中通常会创建并持有对应的StringConverter实例 +- 实现 `getStringConverter()` 方法返回转换器实例 +- 例如: +```java +@Service +@CacheConfig(cacheNames = "contract-cache") +public class ContractService extends QueryService { + + private final ContractStringConverter stringConverter = new ContractStringConverter(this); + + @Override + public StringConverter getStringConverter() { + return stringConverter; + } +} +``` + +### 9.2 Service方法支持 +- Service需提供 `findByName`、`findById`、`search` 等方法供转换器使用 +- 这些方法通常需要添加缓存注解以提高性能 + +## 10. 使用场景 +StringConverter主要用于以下场景: +- ComboBox、ChoiceBox等选择组件的数据绑定和显示 +- 表单数据的绑定和转换 +- 支持用户输入的自动补全功能 +- 在表格、列表等UI组件中显示对象的可读表示 + +## 11. 最佳实践 +- 对于大多数业务实体,优先使用继承 `EntityStringConverter` 的增强转换器 +- 使用Spring的依赖注入和组件管理功能 +- 正确处理null值和空字符串 +- 为频繁调用的Service方法添加缓存支持 +- 实现合理的toString逻辑,提供有意义的对象表示 + +## 12. 示例代码结构 +### 12.1 基础转换器示例 +```java +package com.ecep.contract.converter; + +import com.ecep.contract.service.ContractService; +import com.ecep.contract.vo.ContractVo; +import javafx.util.StringConverter; + +public class ContractStringConverter extends StringConverter { + private final ContractService service; + + public ContractStringConverter(ContractService service) { + this.service = service; + } + + @Override + public String toString(ContractVo cc) { + return cc == null ? "" : cc.getCode() + " " + cc.getName(); + } + + @Override + public ContractVo fromString(String string) { + return string == null || string.isEmpty() ? null : service.findByCode(string); + } +} +``` + +### 12.2 增强转换器示例 +```java +package com.ecep.contract.converter; + +import com.ecep.contract.service.CompanyService; +import com.ecep.contract.vo.CompanyVo; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +@Lazy +@Component +public class CompanyStringConverter extends EntityStringConverter { + @Lazy + @Autowired + private CompanyService service; + + @PostConstruct + private void init() { + setInitialized(company -> service.findById(company.getId())); + setSuggestion(service::search); + setFromString(service::findByName); + } +} +``` \ No newline at end of file diff --git a/.trae/rules/client_service_rules.md b/.trae/rules/client_service_rules.md new file mode 100644 index 0000000..2b69312 --- /dev/null +++ b/.trae/rules/client_service_rules.md @@ -0,0 +1,146 @@ +# 客户端 Service 类规则 + +## 1. 目录结构 +- 所有客户端 Service 类位于 `client/src/main/java/com/ecep/contract/service/` 目录下 +- 按业务领域组织,直接放置在 service 包下,不进行子包划分 +- 服务类命名与实体类一一对应 + +## 2. 命名规范 +- 服务类命名格式为:`[实体名称]Service.java` +- 例如:`CompanyService.java`、`ContractService.java`、`ProjectService.java` +- 基础服务接口命名为:`IEntityService.java`、`ViewModelService.java` +- 泛型基础服务类命名为:`QueryService.java` + +## 3. 继承关系 +- 业务服务类通常继承自泛型基础服务类 `QueryService` + - `T` 表示 VO 类型(实现了 IdentityEntity 接口) + - `TV` 表示 ViewModel 类型(实现了 IdentityViewModel 接口) +- `QueryService` 实现了 `ViewModelService` 接口 +- `ViewModelService` 继承了 `IEntityService` 接口 +- 特定场景下可以不继承 `QueryService`,直接实现所需接口或创建独立服务类 + +```java +@Service +@CacheConfig(cacheNames = "company") +public class CompanyService extends QueryService { + // 业务方法实现 +} +``` + +## 4. 注解使用 +- **@Service**:标记为 Spring 服务组件,使其可被自动发现和注入 +- **@CacheConfig**:配置缓存名称,通常与服务类名对应 +- **@Cacheable**:标记方法结果可缓存,需指定缓存键(key) +- **@CacheEvict**:标记方法执行后清除缓存,可指定缓存键或清除所有 +- **@Caching**:组合多个缓存操作(如同时清除多个缓存条目) +- **@Autowired**:用于自动注入依赖的其他服务 + +```java +@Service +@CacheConfig(cacheNames = "contract") +public class ContractService extends QueryService { + @Autowired + private SysConfService confService; + + @Cacheable(key = "#p0") + public ContractVo findById(Integer id) { + return super.findById(id); + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'code-'+#p0.code") + }) + public ContractVo save(ContractVo contract) { + return super.save(contract); + } +} +``` + +## 5. 缓存机制 +- 每个服务类应有独立的缓存名称空间 +- 缓存键(key)应具有唯一性,通常使用 ID、代码或名称等唯一标识 +- 保存和删除操作时应清除相关缓存,保持数据一致性 +- 可使用 SpEL 表达式动态生成缓存键 +- 频繁查询的数据应考虑缓存,提高性能 + +## 6. 异步调用机制 +- 使用 `async()` 方法进行异步远程调用 +- 方法参数通常包括:方法名、参数值、参数类型列表 +- 使用 `CompletableFuture` 处理异步结果 +- 使用 `handle()` 方法处理响应和异常 +- 远程调用异常应包装为 RuntimeException 并提供详细错误信息 + +```java +@Cacheable(key = "'code-'+#p0") +public ContractVo findByCode(String code) { + try { + return async("findByCode", code, String.class).handle((response, ex) -> { + if (ex != null) { + throw new RuntimeException("远程方法+findByCode+调用失败", ex); + } + if (response != null) { + return updateValue(createNewEntity(), response); + } + return null; + }).get(); + } catch (Exception e) { + throw new RuntimeException("查询失败: " + code, e); + } +} +``` + +## 7. 基础方法实现 +- 应实现 `IEntityService` 接口定义的核心方法: + - `findById(Integer id)`:根据 ID 查询实体 + - `save(T entity)`:保存实体 + - `delete(T entity)`:删除实体 + - `findAll()`:查询所有实体 + - `findAll(Map params, Pageable pageable)`:条件分页查询 + - `getStringConverter()`:获取类型转换器 +- 通常通过继承 `QueryService` 来复用这些基础方法的实现 +- 可根据业务需求重写或扩展基础方法 + +## 8. 业务方法规范 +- 业务方法应与服务端对应,保持方法名和参数一致 +- 方法命名应清晰表达其功能,如 `findByName`, `findByCode` +- 复杂业务逻辑应封装为独立方法 +- 参数校验应在方法开始处进行 +- 返回值类型应明确,避免使用过于泛化的类型 + +## 9. 类型转换器 +- 实现 `getStringConverter()` 方法,返回对应的 StringConverter 实例 +- 通常创建专用的 Converter 类,如 `CustomerCatalogStringConverter` +- 转换器实例应作为服务类的成员变量,避免重复创建 + +```java +public class CustomerCatalogService extends QueryService { + private final CustomerCatalogStringConverter stringConverter = new CustomerCatalogStringConverter(this); + + @Override + public StringConverter getStringConverter() { + return stringConverter; + } +} +``` + +## 10. 错误处理 +- 远程调用异常应捕获并包装为更具描述性的 RuntimeException +- 提供详细的错误信息,包括调用的方法名和参数 +- 对于可预期的业务异常,可添加专门的处理逻辑 +- 不推荐使用 printStackTrace(),应使用日志记录异常 + +## 11. 工具方法和辅助功能 +- 通用功能可封装为工具方法 +- 配置相关操作可通过 `SysConfService` 实现 +- 文件路径处理应使用 `File` 类和相关工具方法 +- 日期时间处理应使用 Java 8+ 的日期时间 API + +## 12. 最佳实践 +- 遵循单一职责原则,每个服务类专注于一个业务领域 +- 优先使用继承和接口实现来复用代码 +- 合理使用缓存提高性能,但注意缓存一致性 +- 异步调用应正确处理异常和超时情况 +- 服务类之间的依赖应通过 `@Autowired` 注入,避免硬编码 +- 方法实现应简洁明了,复杂逻辑应拆分 +- 为重要方法添加 JavaDoc 注释,说明其功能和参数含义 \ No newline at end of file diff --git a/.trae/rules/client_task_rules.md b/.trae/rules/client_task_rules.md new file mode 100644 index 0000000..e69de29 diff --git a/.trae/rules/entity_rules.md b/.trae/rules/entity_rules.md new file mode 100644 index 0000000..be1e0b4 --- /dev/null +++ b/.trae/rules/entity_rules.md @@ -0,0 +1,69 @@ +# 实体类规则 + +## 1. 目录结构 +- 实体类统一放置在 `common/src/main/java/com/ecep/contract/model/` 目录下 +- 按业务领域组织,不使用子目录 + +## 2. 命名规范 +- 类名:使用驼峰命名法,首字母大写,如 `Contract.java`、`Company.java` +- 表名:通常与类名对应,使用大写字母和下划线,如 `CONTRACT`、`COMPANY` +- 字段名:使用小写字母和驼峰命名法,对应数据库中使用大写字母和下划线的列名 + +## 3. 继承与接口实现 +- 实体类通常实现以下接口: + - `IdentityEntity`:提供主键ID的getter/setter及equals方法实现 + - `BasedEntity`:提供toPrettyString()方法 + - `NamedEntity`:提供name属性的getter/setter(适用于有名称的实体) + - `Voable`:提供toVo()方法,用于将实体转换为对应的VO对象 + - 特定领域接口:如 `CompanyBasedEntity`、`ContractBasedEntity`、`ProjectBasedEntity` 等 + +## 4. 注解规范 +- **JPA注解**: + - `@Entity`:标记为实体类 + - `@Table(name = "表名", schema = "数据库名")`:指定对应的数据库表和数据库 + - `@Id`:标记主键字段 + - `@GeneratedValue(strategy = GenerationType.IDENTITY)`:指定主键生成策略 + - `@Column(name = "列名", nullable = false, length = 长度)`:指定字段对应的数据库列属性 + - `@ManyToOne(fetch = FetchType.LAZY)`:指定多对一关系,通常使用LAZY加载 + - `@JoinColumn(name = "外键列名")`:指定外键列 + - `@Enumerated(EnumType.ORDINAL)`:指定枚举类型的存储方式 + - `@Lob`:指定大对象类型 + - `@Version`:指定乐观锁版本字段 +- **Lombok注解**: + - `@Getter`:生成getter方法 + - `@Setter`:生成setter方法 + - `@ToString`:生成toString方法,复杂关联对象可使用`@ToString.Exclude`排除 + +## 5. 字段规范 +- 主键字段: + - 类型:`Integer` + - 命名:`id` + - 注解:`@Id`、`@GeneratedValue(strategy = GenerationType.IDENTITY)` +- 其他字段: + - 基本类型:使用Java包装类型(如`Integer`、`Boolean`)而不是原始类型 + - 时间类型:使用`java.time.LocalDate`或`java.time.LocalDateTime` + - 布尔类型:使用`boolean`或`Boolean`,对应数据库中的`BIT`或`BOOLEAN`类型 + - 关联关系:使用`@ManyToOne`、`@OneToMany`等注解定义 + +## 6. 方法规范 +- `equals`方法:通常使用`HibernateProxyUtils`工具类处理代理对象的比较 +- `hashCode`方法:通常使用`HibernateProxyUtils.hashCode(this)`实现 +- `toVo`方法:实现`Voable`接口,将实体转换为对应的VO对象 +- `toString`方法:通常使用Lombok的`@ToString`注解生成 + +## 7. 注释规范 +- 类注释:使用JavaDoc格式,描述实体类的用途 +- 字段注释:使用JavaDoc格式,描述字段的含义、数据来源、取值范围等 +- 对于特殊字段,可包含详细的说明表格或示例 + +## 8. 序列化规范 +- **重要**:实体类**不包含**`Serializable`接口和`serialVersionUID`字段 +- 序列化相关功能由对应的VO类实现 + +## 9. 最佳实践 +- 实体类应保持简洁,只包含数据和基本的数据访问方法 +- 业务逻辑应在服务层实现 +- 复杂的查询逻辑应在Repository层或通过Specification实现 +- 避免在实体类中使用复杂的计算逻辑 +- 对于多对多关系,建议使用中间表和两个一对多关系实现 +- 关联关系应使用懒加载(LAZY)以提高性能 \ No newline at end of file diff --git a/.trae/rules/project_rules.md b/.trae/rules/project_rules.md index 3039efa..1e2fb0e 100644 --- a/.trae/rules/project_rules.md +++ b/.trae/rules/project_rules.md @@ -1,4 +1,4 @@ -# Contract-Manager 项目规则 +# 项目规则 ## 技术栈规范 @@ -39,10 +39,61 @@ - SQL文件:表名使用大写和下划线,如 `CONTRACT_TYPE_LOCAL.sql` ## 目录结构规范 -- 源代码位于 `src/main/java` 目录 -- 资源文件位于 `src/main/resources` 目录 -- 测试代码位于 `src/test` 目录 -- 数据库脚本位于 `docs/db` 目录 +### 项目整体结构 +- `client/`: 客户端模块,基于JavaFX实现的桌面应用 +- `server/`: 服务端模块,基于Spring Boot实现的后端服务 +- `common/`: 公共模块,包含客户端和服务端共享的代码 +- `docs/`: 项目文档和数据库脚本目录 +- `.trae/`: Trae IDE相关配置和规则 +- `.mvn/`: Maven包装器配置 +- 根目录下包含Maven构建文件和配置文件 + +### server 模块目录结构 +- `src/main/java/com/ecep/contract/`: 主包路径 + - `api/`: API接口定义 + - `cloud/`: 云服务集成相关代码 + - `config/`: Spring Boot配置类 + - `controller/`: Web控制器 + - `ds/`: 数据访问层,按业务领域组织 + - `company/`: 公司相关业务 + - `contract/`: 合同相关业务 + - `customer/`: 客户相关业务 + - `project/`: 项目相关业务 + - `vendor/`: 供应商相关业务 + - 每个业务领域包含:`model/`(实体类)、`repository/`(数据访问接口)、`service/`(业务逻辑)、`vo/`(视图对象) + - `handler/`: WebSocket处理器 + - `service/`: 服务层,包含一些通用服务和任务处理器 + - `ui/`: UI相关组件 + - `util/`: 工具类 + - 核心服务接口和基类文件直接位于contract包下 +- `src/main/resources/`: 资源文件目录 +- `src/test/`: 测试代码目录 + +### client 模块目录结构 +- `src/main/java/com/ecep/contract/`: 主包路径 + - `controller/`: JavaFX控制器,按业务领域组织, 详细规范见 .trae\rules\client_controller_rules.md + - 包含各种业务窗口控制器和Tab皮肤控制器 + - `converter/`: 类型转换器,详细规范见 .trae\rules\client_converter_rules.md + - `serializer/`: 序列化相关类 + - `service/`: 客户端服务层,与服务端交互, 详细规范见 .trae\rules\client_service_rules.md + - `task/`: 客户端任务类, 详细规范见 .trae\rules\client_task_rules.md + - `util/`: 工具类 + - `vm/`: 视图模型 +- `src/main/resources/ui/`: FXML界面文件目录 +- `src/test/`: 测试代码目录 + +### common 模块目录结构 +- `src/main/java/ecep/contract/`: 包含客户端和服务端共享的代码 + - `constant/`: 常量类,按业务领域组织 + - `model/`: 实体类,按业务领域组织, 不包含Serializable接口和serialVersionUID字段, 详细规范见 .trae\rules\entity_rules.md + - `vo/`: 视图对象,按业务领域组织, 包含Serializable接口和serialVersionUID字段, 详细规范见 .trae\rules\vo_rules.md + - `util/`: 工具类 + +### 文档和资源目录 +- `docs/db/`: 数据库脚本文件 +- `docs/task/`: 任务相关文档和规范 +- `docs/model/`: 数据模型文档 +- 其他项目文档和资源 ## 数据库规范 - 表名使用大写字母和下划线,如 `COMPANY_VENDOR_FILE_TYPE_LOCAL` diff --git a/.trae/rules/vo_rules.md b/.trae/rules/vo_rules.md new file mode 100644 index 0000000..4806e3e --- /dev/null +++ b/.trae/rules/vo_rules.md @@ -0,0 +1,58 @@ +# VO类规则 + +## 1. 目录结构 +- VO类统一放置在 `common/src/main/java/com/ecep/contract/vo/` 目录下 +- 按业务领域组织,不使用子目录 + +## 2. 命名规范 +- 类名:使用驼峰命名法,首字母大写,以Vo结尾,如 `ContractVo.java`、`CompanyVo.java` + +## 3. 继承与接口实现 +- **必须实现** `java.io.Serializable` 接口,用于对象序列化 +- **通常实现** `IdentityEntity` 接口,提供主键ID的getter/setter方法 +- **可能实现** `NamedEntity` 接口,提供name属性的getter/setter方法(适用于有名称的VO) +- **可能实现**特定领域接口,如: + - `CompanyBasedVo`:提供companyId属性的getter/setter方法 + - `ProjectBasedVo`:提供project属性的getter/setter方法 + - `ContractBasedVo`:提供contractId属性的getter/setter方法 + - 其他类似的基于特定实体的接口 + +## 4. 注解规范 +- 通常使用Lombok的 `@Data` 注解,自动生成getter、setter、equals、hashCode和toString方法 + +## 5. 序列化规范 +- **必须包含** `private static final long serialVersionUID = 1L;` 字段,用于版本控制 +- 所有字段类型必须是可序列化的 + +## 6. 字段规范 +- 字段类型: + - 整数类型:可使用 `Integer` 包装类型或 `int` 原始类型 + - 布尔类型:可使用 `Boolean` 包装类型或 `boolean` 原始类型 + - 时间类型:使用 `java.time.LocalDate`(日期)或 `java.time.LocalDateTime`(日期时间) + - 字符串类型:使用 `String` + - 浮点数类型:使用 `double` 或 `Double` +- 关联关系: + - 通常只包含关联实体的ID字段,如 `companyId`、`project`、`contractId` 等 + - 不包含实体对象的直接引用 +- 默认值: + - 布尔类型字段通常有默认值(如 `false`) + - 其他类型根据业务需求设置默认值 + +## 7. 注释规范 +- 类注释:使用JavaDoc格式,描述VO类的用途,如 `/** 项目报价视图对象 */` +- 字段注释:使用JavaDoc格式,描述字段的含义、用途或业务规则 +- 关键字段(如外键、状态字段)应提供清晰的注释说明 + +## 8. 最佳实践 +- VO类应保持简洁,只包含数据和基本的数据访问方法 +- 避免在VO类中包含复杂的业务逻辑 +- 字段命名应与对应的实体类保持一致或有明确的映射关系 +- 确保所有字段都是可序列化的 +- 对于有默认值的字段,应在声明时初始化 + +## 9. 与实体类的区别 +- **序列化**:VO类必须实现 `Serializable` 接口并包含 `serialVersionUID` 字段,而实体类不包含 +- **用途**:VO类主要用于数据传输和展示,实体类主要用于持久化 +- **关联关系**:VO类通常只包含关联实体的ID,实体类包含实体对象的引用 +- **注解**:VO类主要使用Lombok注解,实体类使用JPA注解和Lombok注解 +- **方法**:VO类通常只有getter/setter方法,实体类可能包含更多业务相关方法 \ No newline at end of file diff --git a/client/pom.xml b/client/pom.xml index 5020641..ff40d9f 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -6,12 +6,12 @@ com.ecep.contract Contract-Manager - 0.0.99-SNAPSHOT + 0.0.100-SNAPSHOT com.ecep.contract client - 0.0.99-SNAPSHOT + 0.0.100-SNAPSHOT ${java.version} @@ -22,7 +22,7 @@ com.ecep.contract common - 0.0.99-SNAPSHOT + 0.0.100-SNAPSHOT org.springframework.boot diff --git a/client/src/main/java/com/ecep/contract/WebSocketClientService.java b/client/src/main/java/com/ecep/contract/WebSocketClientService.java index d953150..7ea37bd 100644 --- a/client/src/main/java/com/ecep/contract/WebSocketClientService.java +++ b/client/src/main/java/com/ecep/contract/WebSocketClientService.java @@ -120,7 +120,8 @@ public class WebSocketClientService { if (errorCode == WebSocketConstant.ERROR_CODE_UNAUTHORIZED) { // 调用所有的 callbacks 和 session 失败并且移除 - callbacks.keySet().stream().toList().forEach(key -> callbacks.remove(key).completeExceptionally(new Exception("未授权"))); + callbacks.keySet().stream().toList() + .forEach(key -> callbacks.remove(key).completeExceptionally(new Exception("未授权"))); sessions.values().stream().toList().forEach(session -> { session.updateMessage(java.util.logging.Level.SEVERE, "未授权"); session.close(); @@ -131,11 +132,11 @@ public class WebSocketClientService { // 处理未授权错误,重新登录 OkHttpLoginController controller = new OkHttpLoginController(); + controller.setHttpClient(Desktop.instance.getHttpClient()); controller.setProperties(SpringApp.getBean(MyProperties.class)); - controller.tryLogin(); + controller.tryLogin().get(); // 需要把窗口顶置 - isActive = true; - scheduleReconnect(); + initWebSocket(); } return; } diff --git a/client/src/main/java/com/ecep/contract/WebSocketClientSession.java b/client/src/main/java/com/ecep/contract/WebSocketClientSession.java index ffecd10..e0a18d0 100644 --- a/client/src/main/java/com/ecep/contract/WebSocketClientSession.java +++ b/client/src/main/java/com/ecep/contract/WebSocketClientSession.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.UUID; import java.util.logging.Level; +import javafx.application.Platform; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -120,7 +121,7 @@ public class WebSocketClientSession { private void handleAsMessage(JsonNode args) { String level = args.get(0).asText(); String message = args.get(1).asText(); - updateMessage(java.util.logging.Level.parse(level), "[R] "+message); + updateMessage(java.util.logging.Level.parse(level), "[R] " + message); } public void updateMessage(Level level, String message) { 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 16b8468..520daa0 100644 --- a/client/src/main/java/com/ecep/contract/controller/OkHttpLoginController.java +++ b/client/src/main/java/com/ecep/contract/controller/OkHttpLoginController.java @@ -61,28 +61,10 @@ public class OkHttpLoginController implements MessageHolder { private MyProperties properties; @Setter private OkHttpClient httpClient; - private WebSocket webSocket; private SimpleStringProperty serverUrl = new SimpleStringProperty(); private String webSocketUrl; public OkHttpLoginController() { - this.httpClient = new OkHttpClient().newBuilder().cookieJar(new CookieJar() { - private final List cookies = new java.util.ArrayList<>(); - - @Override - public void saveFromResponse(HttpUrl url, List cookies) { - // 保存服务器返回的Cookie(如JSESSIONID) - this.cookies.addAll(cookies); - System.out.println("保存Cookie: " + cookies); - } - - @Override - public List loadForRequest(HttpUrl url) { - // 请求时自动携带Cookie - return cookies; - } - - }).build(); } @Override @@ -375,21 +357,6 @@ public class OkHttpLoginController implements MessageHolder { }); } - // WebSocket消息发送方法 - public void sendMessage(String message) { - if (webSocket != null) { - webSocket.send(message); - } - } - - // 关闭WebSocket连接 - public void closeWebSocket() { - if (webSocket != null) { - webSocket.close(1000, "正常关闭"); - webSocket = null; - } - } - static class MacIP { String mac; String ip; diff --git a/client/src/main/java/com/ecep/contract/controller/cloud/tyc/CloudTycManagerSkin.java b/client/src/main/java/com/ecep/contract/controller/cloud/tyc/CloudTycManagerSkin.java index 61ba2ae..ff19be8 100644 --- a/client/src/main/java/com/ecep/contract/controller/cloud/tyc/CloudTycManagerSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/cloud/tyc/CloudTycManagerSkin.java @@ -52,7 +52,7 @@ public class CloudTycManagerSkin controller.cloudIdColumn.setCellValueFactory(param -> param.getValue().getCloudId()); - controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatest()); + controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatestUpdate()); controller.latestUpdateColumn.setCellFactory(param -> new LocalDateTimeTableCell<>()); controller.cloudLatestColumn.setCellValueFactory(param -> param.getValue().getCloudLatest()); diff --git a/client/src/main/java/com/ecep/contract/controller/cloud/u8/YongYouU8ManagerSkin.java b/client/src/main/java/com/ecep/contract/controller/cloud/u8/YongYouU8ManagerSkin.java index e117dc1..7aef82f 100644 --- a/client/src/main/java/com/ecep/contract/controller/cloud/u8/YongYouU8ManagerSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/cloud/u8/YongYouU8ManagerSkin.java @@ -41,7 +41,7 @@ public class YongYouU8ManagerSkin controller.cloudIdColumn.setCellValueFactory(param -> param.getValue().getCloudId()); - controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatest()); + controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatestUpdate()); controller.latestUpdateColumn.setCellFactory(param -> new LocalDateTimeTableCell<>()); controller.cloudLatestColumn.setCellValueFactory(param -> param.getValue().getCloudLatest()); diff --git a/client/src/main/java/com/ecep/contract/controller/company/CompanyContactWindowController.java b/client/src/main/java/com/ecep/contract/controller/company/CompanyContactWindowController.java index a63449a..4c19548 100644 --- a/client/src/main/java/com/ecep/contract/controller/company/CompanyContactWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/company/CompanyContactWindowController.java @@ -1,32 +1,13 @@ package com.ecep.contract.controller.company; -import java.lang.reflect.InvocationTargetException; -import java.time.format.DateTimeFormatter; -import java.util.concurrent.CompletableFuture; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - import com.ecep.contract.controller.BaseController; -import com.ecep.contract.model.CompanyContact; import com.ecep.contract.service.CompanyContactService; import com.ecep.contract.util.FxmlUtils; import com.ecep.contract.util.UITools; import com.ecep.contract.vm.CompanyContactViewModel; import com.ecep.contract.vo.CompanyContactVo; - import javafx.application.Platform; -import javafx.scene.control.Button; -import javafx.scene.control.DatePicker; -import javafx.scene.control.Label; -import javafx.scene.control.Tab; -import javafx.scene.control.TabPane; -import javafx.scene.control.TextArea; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import javafx.scene.layout.BorderPane; import javafx.stage.Modality; import javafx.stage.Stage; @@ -35,6 +16,16 @@ import javafx.stage.WindowEvent; import javafx.util.converter.LocalDateStringConverter; import lombok.Getter; import lombok.Setter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.CompletableFuture; @Lazy @Scope("prototype") diff --git a/client/src/main/java/com/ecep/contract/controller/contract/ContractTabSkinExtendVendorInfo.java b/client/src/main/java/com/ecep/contract/controller/contract/ContractTabSkinExtendVendorInfo.java index 8932541..07fdbda 100644 --- a/client/src/main/java/com/ecep/contract/controller/contract/ContractTabSkinExtendVendorInfo.java +++ b/client/src/main/java/com/ecep/contract/controller/contract/ContractTabSkinExtendVendorInfo.java @@ -134,9 +134,9 @@ public class ContractTabSkinExtendVendorInfo extends AbstContractBasedTabSkin { ExtendVendorInfoVo vendorInfo = loadedFuture.join(); if (viewModel.copyTo(vendorInfo)) { // 注意:这里需要根据实际service接口实现调整,可能需要调用不同的方法 - // ExtendVendorInfoVo saved = getExtendVendorInfoService().saveVo(vendorInfo); - // updateViewModel(saved); - // loadedFuture = CompletableFuture.completedFuture(saved); + ExtendVendorInfoVo saved = getExtendVendorInfoService().save(vendorInfo); + updateViewModel(saved); + loadedFuture = CompletableFuture.completedFuture(saved); } } } diff --git a/client/src/main/java/com/ecep/contract/controller/inventory/InventoryTabSkinHistoryPrice.java b/client/src/main/java/com/ecep/contract/controller/inventory/InventoryTabSkinHistoryPrice.java index c45a39d..8f40f13 100644 --- a/client/src/main/java/com/ecep/contract/controller/inventory/InventoryTabSkinHistoryPrice.java +++ b/client/src/main/java/com/ecep/contract/controller/inventory/InventoryTabSkinHistoryPrice.java @@ -11,17 +11,12 @@ import java.util.stream.Collectors; import com.ecep.contract.ContractPayWay; import com.ecep.contract.controller.tab.TabSkin; import com.ecep.contract.controller.table.AbstEntityTableTabSkin; -import com.ecep.contract.model.Contract; -import com.ecep.contract.model.ContractItem; import com.ecep.contract.model.HistoryPrice; -import com.ecep.contract.model.Inventory; -import com.ecep.contract.model.InventoryHistoryPrice; import com.ecep.contract.service.ContractItemService; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.InventoryHistoryPriceService; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.util.ParamUtils; -import com.ecep.contract.util.ProxyUtils; import com.ecep.contract.vm.InventoryHistoryPriceViewModel; import com.ecep.contract.vm.InventoryViewModel; import com.ecep.contract.vo.ContractItemVo; diff --git a/client/src/main/java/com/ecep/contract/controller/project/AbstProjectBasedTabSkin.java b/client/src/main/java/com/ecep/contract/controller/project/AbstProjectBasedTabSkin.java index aec0a1d..f4a5e9b 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/AbstProjectBasedTabSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/project/AbstProjectBasedTabSkin.java @@ -2,7 +2,6 @@ package com.ecep.contract.controller.project; import com.ecep.contract.controller.tab.AbstEntityBasedTabSkin; import com.ecep.contract.controller.tab.TabSkin; -import com.ecep.contract.model.Project; import com.ecep.contract.service.ProjectService; import com.ecep.contract.vm.ProjectViewModel; import com.ecep.contract.vo.ProjectVo; diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBid.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBid.java index a467aeb..77411fc 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBid.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBid.java @@ -12,8 +12,6 @@ import com.ecep.contract.controller.table.EditableEntityTableTabSkin; import com.ecep.contract.controller.table.cell.EmployeeTableCell; import com.ecep.contract.converter.CompanyStringConverter; import com.ecep.contract.converter.EmployeeStringConverter; -import com.ecep.contract.model.CompanyCustomerEvaluationFormFile; -import com.ecep.contract.model.Employee; import com.ecep.contract.service.CompanyCustomerFileService; import com.ecep.contract.service.CompanyCustomerService; import com.ecep.contract.service.CompanyService; @@ -36,7 +34,7 @@ public class ProjectTabSkinBid public TableColumn idColumn; public TableColumn versionColumn; - public TableColumn evaluationFileColumn; + public TableColumn evaluationFileColumn; public TableColumn descriptionColumn; public TableColumn applicantColumn; diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCost.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCost.java index 40da6c1..ad558e3 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCost.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCost.java @@ -7,7 +7,6 @@ import com.ecep.contract.controller.project.cost.ProjectCostWindowController; import com.ecep.contract.controller.tab.TabSkin; import com.ecep.contract.controller.table.cell.EmployeeTableCell; import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell; -import com.ecep.contract.model.ProjectCostItem; import com.ecep.contract.service.ContractItemService; import com.ecep.contract.service.ProjectCostItemService; import com.ecep.contract.service.ProjectCostService; diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCustomerInfo.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCustomerInfo.java index 4d7d676..bc5af97 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCustomerInfo.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinCustomerInfo.java @@ -1,25 +1,12 @@ package com.ecep.contract.controller.project; -import org.controlsfx.control.textfield.AutoCompletionBinding; -import org.springframework.util.StringUtils; - import com.ecep.contract.controller.company.CompanyWindowController; import com.ecep.contract.controller.tab.TabSkin; import com.ecep.contract.converter.EntityStringConverter; -import com.ecep.contract.model.CompanyContact; -import com.ecep.contract.model.CompanyInvoiceInfo; -import com.ecep.contract.service.BankService; -import com.ecep.contract.service.CompanyBankAccountService; -import com.ecep.contract.service.CompanyContactService; -import com.ecep.contract.service.CompanyInvoiceInfoService; -import com.ecep.contract.service.CompanyService; +import com.ecep.contract.service.*; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.util.UITools; -import com.ecep.contract.vo.BankVo; -import com.ecep.contract.vo.CompanyBankAccountVo; -import com.ecep.contract.vo.CompanyContactVo; -import com.ecep.contract.vo.CompanyVo; - +import com.ecep.contract.vo.*; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.StringProperty; import javafx.fxml.FXML; @@ -27,6 +14,8 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Tab; import javafx.scene.control.TextField; +import org.controlsfx.control.textfield.AutoCompletionBinding; +import org.springframework.util.StringUtils; @FxmlPath("/ui/project/project-tab-customer.fxml") public class ProjectTabSkinCustomerInfo @@ -101,7 +90,7 @@ public class ProjectTabSkinCustomerInfo private void initInvoiceInfoField() { invoiceInfoAutoCompletion(invoiceInfoField, invoiceInfoLabel, viewModel.getInvoiceInfo()) .setOnAutoCompleted(event -> { - CompanyInvoiceInfo invoiceInfo = event.getCompletion(); + CompanyInvoiceInfoVo invoiceInfo = event.getCompletion(); viewModel.getInvoiceInfo().set(invoiceInfo.getId()); }); } @@ -199,16 +188,16 @@ public class ProjectTabSkinCustomerInfo return UITools.autoCompletion(textField, property, getBankAccountService()); } - private AutoCompletionBinding invoiceInfoAutoCompletion(TextField textField, Label label, - SimpleObjectProperty property) { - EntityStringConverter converter = new EntityStringConverter<>(); + private AutoCompletionBinding invoiceInfoAutoCompletion(TextField textField, Label label, + SimpleObjectProperty property) { + EntityStringConverter converter = new EntityStringConverter<>(); converter.setInitialized(info -> getInvoiceInfoService().findById(info.getId())); label.textProperty().bind(property.map(infoId -> { if (infoId == null) { return "未选择"; } - CompanyInvoiceInfo info = getInvoiceInfoService().findById(infoId); + CompanyInvoiceInfoVo info = getInvoiceInfoService().findById(infoId); if (info == null) { return "#" + infoId; } diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinFundPlan.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinFundPlan.java index d9c12b2..abb578b 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinFundPlan.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinFundPlan.java @@ -13,8 +13,6 @@ import com.ecep.contract.ContractPayWay; import com.ecep.contract.controller.tab.TabSkin; import com.ecep.contract.controller.table.EditableEntityTableTabSkin; import com.ecep.contract.controller.table.cell.NumberTableCell; -import com.ecep.contract.model.Project; -import com.ecep.contract.model.ProjectFundPlan; import com.ecep.contract.service.ContractPayPlanService; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.ProjectFundPlanService; diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinQuotation.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinQuotation.java index 5aaac9c..8df6a5f 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinQuotation.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinQuotation.java @@ -90,6 +90,8 @@ public class ProjectTabSkinQuotation @Override public void initializeTable() { super.initializeTable(); + + idColumn.setCellValueFactory(param -> param.getValue().getId()); levelColumn.setCellValueFactory(param -> param.getValue().getLevel()); levelColumn.setCellFactory(param -> new LevelTableCell()); standardPayWayColumn.setCellValueFactory(param -> param.getValue().getStandardPayWay() diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectWindowController.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectWindowController.java index 937bc58..c5fbbba 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectWindowController.java @@ -3,7 +3,6 @@ package com.ecep.contract.controller.project; import java.time.format.DateTimeFormatter; import com.ecep.contract.service.ProjectSaleTypeService; -import com.ecep.contract.util.ProxyUtils; import com.ecep.contract.vo.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,15 +11,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import com.ecep.contract.SpringApp; import com.ecep.contract.controller.AbstEntityController; -import com.ecep.contract.model.DeliverySignMethod; -import com.ecep.contract.model.ProductType; -import com.ecep.contract.model.ProductUsage; -import com.ecep.contract.model.Project; -import com.ecep.contract.model.ProjectIndustry; -import com.ecep.contract.model.ProjectSaleType; -import com.ecep.contract.model.ProjectType; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.EmployeeService; import com.ecep.contract.service.ProjectService; diff --git a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostExportExcelTasker.java b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostExportExcelTasker.java index 6cdd16a..b316de3 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostExportExcelTasker.java +++ b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostExportExcelTasker.java @@ -32,7 +32,6 @@ import org.springframework.util.StringUtils; import com.ecep.contract.MessageHolder; import com.ecep.contract.constant.ContractConstant; -import com.ecep.contract.model.ProjectCostItem; import com.ecep.contract.service.ProductTypeService; import com.ecep.contract.service.ProjectCostItemService; import com.ecep.contract.service.ProjectCostService; diff --git a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostTabSkinBase.java b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostTabSkinBase.java index 1ae1ccd..6bd109e 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostTabSkinBase.java +++ b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostTabSkinBase.java @@ -14,7 +14,6 @@ import com.ecep.contract.DesktopUtils; import com.ecep.contract.MyDateTimeUtils; import com.ecep.contract.controller.tab.AbstEntityBasedTabSkin; import com.ecep.contract.controller.tab.TabSkin; -import com.ecep.contract.model.ContractFile; import com.ecep.contract.service.ContractFileService; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.ProjectService; diff --git a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java index 8566857..01ec257 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java @@ -1,16 +1,12 @@ package com.ecep.contract.controller.project.cost; -import com.ecep.contract.util.ProxyUtils; import com.ecep.contract.vo.ProjectCostVo; import com.ecep.contract.vo.ProjectVo; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.ecep.contract.controller.AbstEntityController; -import com.ecep.contract.model.Project; -import com.ecep.contract.model.ProjectCost; import com.ecep.contract.service.ProjectCostService; import com.ecep.contract.service.ProjectService; import com.ecep.contract.util.FxmlPath; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinBlackReason.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinBlackReason.java index 0a2af9f..e1b7619 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinBlackReason.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinBlackReason.java @@ -6,7 +6,6 @@ import com.ecep.contract.BlackReasonType; 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.model.CompanyBlackReason; import com.ecep.contract.service.CloudRkService; import com.ecep.contract.service.CompanyBlackReasonService; import com.ecep.contract.util.FxmlPath; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContact.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContact.java index 87e4eb6..989c1f2 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContact.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContact.java @@ -6,7 +6,6 @@ import com.ecep.contract.controller.company.AbstCompanyTableTabSkin; import com.ecep.contract.controller.company.CompanyContactWindowController; import com.ecep.contract.controller.company.CompanyWindowController; import com.ecep.contract.controller.table.EditableEntityTableTabSkin; -import com.ecep.contract.model.CompanyContact; import com.ecep.contract.service.CompanyContactService; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.vm.CompanyContactViewModel; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinOther.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinOther.java index 946fa16..0aaf913 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinOther.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinOther.java @@ -5,7 +5,6 @@ import java.io.IOException; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; -import java.util.logging.Level; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,16 +13,15 @@ import org.springframework.util.StringUtils; import org.w3c.dom.html.HTMLDocument; import com.ecep.contract.DesktopUtils; -import com.ecep.contract.MessageHolder; import com.ecep.contract.MyDateTimeUtils; import com.ecep.contract.constant.CloudServiceConstant; import com.ecep.contract.controller.company.AbstCompanyBasedTabSkin; import com.ecep.contract.controller.company.CompanyWindowController; -import com.ecep.contract.model.Company; import com.ecep.contract.service.CloudRkService; import com.ecep.contract.service.CloudTycService; import com.ecep.contract.service.CompanyExtendInfoService; import com.ecep.contract.service.YongYouU8Service; +import com.ecep.contract.task.CompanyRkUpdateTasker; import com.ecep.contract.util.DelayOnceExecutor; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.util.UITools; @@ -234,22 +232,18 @@ public class CompanyTabSkinOther * @see #onCloudRkUpdateButtonClickedAction(ActionEvent) */ private void onCloudRkUpdateButtonClicked(ActionEvent actionEvent) throws IOException { - Button button = (Button) actionEvent.getSource(); CompanyVo company = getEntity(); - MessageHolder holder = (level, message) -> { - setStatus(message); - if (level == Level.WARNING) { - logger.warn("{} {}", getEntity().getName(), message); - } - if (level == Level.SEVERE) { - logger.error("{} {}", getEntity().getName(), message); - } - }; - CloudRkVo cloudRk = getCloudRkService().updateCloudRk(company, holder); + CompanyRkUpdateTasker task = new CompanyRkUpdateTasker(); + task.setCompany(getEntity()); Platform.runLater(() -> { + UITools.showTaskDialogAndWait("更新企业信息", task, null); + + CloudRkVo cloudRk = getCloudRkService().findByCompany(company); + rkCloudInfoViewModel.update(cloudRk); }); + } private CloudRkService.EntInfo showEnterpriseChooser(List entInfos) { @@ -384,7 +378,7 @@ public class CompanyTabSkinOther cloudTycIdField.textProperty().bind(tycCloudInfoViewModel.getId().asString()); // 平台编号 cloudTycCloudIdField.textProperty().bindBidirectional(tycCloudInfoViewModel.getCloudId()); - cloudTycLatestField.textProperty().bind(tycCloudInfoViewModel.getLatest().map(MyDateTimeUtils::format)); + cloudTycLatestField.textProperty().bind(tycCloudInfoViewModel.getLatestUpdate().map(MyDateTimeUtils::format)); cloudTycVersionLabel.textProperty().bind(tycCloudInfoViewModel.getVersion().asString("Ver:%s")); TextField cloudIdField = cloudTycCloudIdField; @@ -424,7 +418,7 @@ public class CompanyTabSkinOther cloudYuIdField.textProperty().bind(yuCloudInfoViewModel.getId().asString()); cloudYuCloudIdField.textProperty().bindBidirectional(yuCloudInfoViewModel.getCloudId()); - cloudYuLatestField.textProperty().bind(yuCloudInfoViewModel.getLatest().map(MyDateTimeUtils::format)); + cloudYuLatestField.textProperty().bind(yuCloudInfoViewModel.getLatestUpdate().map(MyDateTimeUtils::format)); cloudYuVersionLabel.textProperty().bind(yuCloudInfoViewModel.getVersion().asString("Ver:%s")); Button button = yuCloudPaneSaveButton; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinPurchaseBillVoucher.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinPurchaseBillVoucher.java index 789d83f..527caf4 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinPurchaseBillVoucher.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinPurchaseBillVoucher.java @@ -10,7 +10,6 @@ import com.ecep.contract.controller.table.cell.EmployeeTableCell; import com.ecep.contract.controller.table.cell.InvoiceTableCell; import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell; import com.ecep.contract.converter.EmployeeStringConverter; -import com.ecep.contract.model.Invoice; import com.ecep.contract.service.InvoiceService; import com.ecep.contract.service.PurchaseBillVoucherService; import com.ecep.contract.service.YongYouU8Service; @@ -23,7 +22,6 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.Tab; import javafx.scene.control.TableColumn; import javafx.scene.control.TextField; -import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.input.KeyCode; import lombok.Setter; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinItemsV2.java b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinItemsV2.java index cf5f8b6..b8fa835 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinItemsV2.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinItemsV2.java @@ -12,7 +12,6 @@ import com.ecep.contract.controller.table.EditableEntityTableTabSkin; import com.ecep.contract.controller.table.cell.EmployeeTableCell; import com.ecep.contract.controller.table.cell.InventoryTableCell; import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell; -import com.ecep.contract.model.Contract; import com.ecep.contract.service.ContractItemService; import com.ecep.contract.service.InventoryService; import com.ecep.contract.util.FxmlPath; @@ -169,33 +168,6 @@ public class ContractTabSkinItemsV2 return inventoryService; } - private void sum(ContractItemComposeViewModel model, Contract contract, - HashMap map) { - double inQuantity = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getQuantity().get()).sum(); - Platform.runLater(() -> model.getIn().getQuantity().set(inQuantity)); - - double inTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getTaxAmount().get()).sum(); - Platform.runLater(() -> model.getIn().getTaxAmount().set(inTaxAmount)); - - double inExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum(); - Platform.runLater(() -> model.getIn().getExclusiveTaxAmount().set(inExclusiveTaxAmount)); - - double outQuantity = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getQuantity().get()).sum(); - Platform.runLater(() -> model.getOut().getQuantity().set(outQuantity)); - - double outTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getTaxAmount().get()).sum(); - Platform.runLater(() -> model.getOut().getTaxAmount().set(outTaxAmount)); - - double outExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum(); - Platform.runLater(() -> model.getOut().getExclusiveTaxAmount().set(outExclusiveTaxAmount)); - } - @Override protected void createContextMenu(ContextMenu contextMenu) { super.createContextMenu(contextMenu); diff --git a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinPayPlan.java b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinPayPlan.java index c357745..a036479 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinPayPlan.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinPayPlan.java @@ -1,19 +1,12 @@ package com.ecep.contract.controller.tab; -import java.text.NumberFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; - import com.ecep.contract.controller.contract.AbstContractTableTabSkin; import com.ecep.contract.controller.contract.ContractWindowController; import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell; -import com.ecep.contract.model.ContractPayPlan; import com.ecep.contract.service.ContractPayPlanService; -import com.ecep.contract.service.ViewModelService; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.vm.ContractPayPlanViewModel; import com.ecep.contract.vo.ContractPayPlanVo; - import javafx.scene.control.ContextMenu; import javafx.scene.control.Tab; import javafx.scene.control.TableColumn; @@ -21,6 +14,10 @@ import javafx.scene.control.cell.TextFieldTableCell; import javafx.util.converter.CurrencyStringConverter; import javafx.util.converter.NumberStringConverter; +import java.text.NumberFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; + @FxmlPath("/ui/contract/contract-tab-pay-plan.fxml") public class ContractTabSkinPayPlan extends AbstContractTableTabSkin { diff --git a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinSaleOrders.java b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinSaleOrders.java index 64a3d91..1fb0304 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinSaleOrders.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinSaleOrders.java @@ -12,8 +12,6 @@ import com.ecep.contract.controller.table.cell.LocalDateFieldTableCell; import com.ecep.contract.converter.EmployeeStringConverter; import com.ecep.contract.service.SaleOrdersService; import com.ecep.contract.vm.SalesOrderViewModel; -import com.ecep.contract.model.Employee; -import com.ecep.contract.model.SalesOrder; import com.ecep.contract.vo.SalesOrderVo; import javafx.scene.control.Button; @@ -21,7 +19,6 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.Tab; import javafx.scene.control.TableColumn; import javafx.scene.control.TextField; -import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.input.KeyCode; import lombok.Setter; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinVendorBid.java b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinVendorBid.java index a2a1cb5..ff07dfe 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinVendorBid.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/ContractTabSkinVendorBid.java @@ -2,6 +2,7 @@ package com.ecep.contract.controller.tab; import java.util.List; +import com.ecep.contract.service.ContractFileService; import org.controlsfx.control.textfield.TextFields; import com.ecep.contract.ContractPayWay; @@ -85,7 +86,7 @@ public class ContractTabSkinVendorBid bidVendorTable_companyColumn.setCellValueFactory(param -> param.getValue().getCompanyId()); bidVendorTable_companyColumn.setCellFactory(CompanyTableCell.forTableColumn(getCompanyService())); bidVendorTable_quotationSheetColumn.setCellValueFactory(param -> param.getValue().getQuotationSheetFileId()); - bidVendorTable_quotationSheetColumn.setCellFactory(ContractFileTableCell.forTableColumn(getContractService())); + bidVendorTable_quotationSheetColumn.setCellFactory(ContractFileTableCell.forTableColumn(SpringApp.getBean(ContractFileService.class))); super.initializeTab(); } diff --git a/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBase.java b/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBase.java index f7d8716..989065f 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBase.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBase.java @@ -6,8 +6,6 @@ import com.ecep.contract.MyDateTimeUtils; import com.ecep.contract.SpringApp; import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController; import com.ecep.contract.converter.EmployeeStringConverter; -import com.ecep.contract.model.Employee; -import com.ecep.contract.model.SalesOrder; import com.ecep.contract.service.CompanyService; import com.ecep.contract.service.ContractFileService; import com.ecep.contract.util.UITools; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBillVoucher.java b/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBillVoucher.java index 51b0b59..5f413d1 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBillVoucher.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinBillVoucher.java @@ -5,33 +5,26 @@ import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowControll import com.ecep.contract.controller.table.AbstEntityTableTabSkin; import com.ecep.contract.controller.table.cell.EmployeeTableCell; import com.ecep.contract.converter.EmployeeStringConverter; -import com.ecep.contract.model.Contract; -import com.ecep.contract.model.ContractItem; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.SaleOrdersService; import com.ecep.contract.service.SalesBillVoucherService; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.util.ParamUtils; -import com.ecep.contract.util.ProxyUtils; -import com.ecep.contract.vm.ContractItemComposeViewModel; import com.ecep.contract.vm.SalesBillVoucherViewModel; import com.ecep.contract.vm.SalesOrderViewModel; import com.ecep.contract.vo.ContractItemVo; import com.ecep.contract.vo.ContractVo; import com.ecep.contract.vo.SalesBillVoucherVo; import com.ecep.contract.vo.SalesOrderVo; -import javafx.application.Platform; import javafx.collections.ObservableList; import javafx.geometry.Pos; import javafx.scene.control.*; -import javafx.scene.control.cell.TextFieldTableCell; import javafx.util.Callback; import javafx.util.Duration; import lombok.Setter; import org.springframework.util.StringUtils; import java.time.LocalDateTime; -import java.util.HashMap; import java.util.function.Function; import java.util.stream.Collectors; @@ -129,37 +122,6 @@ public class SalesOrderTabSkinBillVoucher return getCachedBean(EmployeeStringConverter.class); } - private void sum(ContractItemComposeViewModel model, Contract contract, - HashMap map) { - double inQuantity = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getQuantity().get()).sum(); - Platform.runLater(() -> model.getIn().getQuantity().set(inQuantity)); - - double inTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getTaxAmount().get()).sum(); - Platform.runLater(() -> model.getIn().getTaxAmount().set(inTaxAmount)); - - double inExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum(); - Platform.runLater(() -> model.getIn().getExclusiveTaxAmount().set(inExclusiveTaxAmount)); - - double outQuantity = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getQuantity().get()).sum(); - Platform.runLater(() -> model.getOut().getQuantity().set(outQuantity)); - - double outTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getTaxAmount().get()).sum(); - Platform.runLater(() -> model.getOut().getTaxAmount().set(outTaxAmount)); - - double outExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum(); - Platform.runLater(() -> model.getOut().getExclusiveTaxAmount().set(outExclusiveTaxAmount)); - } - - String makeKey(ContractItem item) { - return item.getTitle() + "-" + item.getSpecification(); - } - static class NumberTableCell extends TableCell { // "%.1f" private final String format; diff --git a/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinItems.java b/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinItems.java index 81b600a..b05f635 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinItems.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/SalesOrderTabSkinItems.java @@ -11,7 +11,6 @@ import org.springframework.util.StringUtils; import com.ecep.contract.SpringApp; import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController; import com.ecep.contract.controller.table.AbstEntityTableTabSkin; -import com.ecep.contract.model.Contract; import com.ecep.contract.service.ContractService; import com.ecep.contract.service.SaleOrdersService; import com.ecep.contract.service.SalesOrderItemService; @@ -193,33 +192,6 @@ public class SalesOrderTabSkinItems contextMenu.getItems().addAll(item2, item3); } - private void sum(ContractItemComposeViewModel model, Contract contract, - HashMap map) { - double inQuantity = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getQuantity().get()).sum(); - Platform.runLater(() -> model.getIn().getQuantity().set(inQuantity)); - - double inTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getTaxAmount().get()).sum(); - Platform.runLater(() -> model.getIn().getTaxAmount().set(inTaxAmount)); - - double inExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn) - .mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum(); - Platform.runLater(() -> model.getIn().getExclusiveTaxAmount().set(inExclusiveTaxAmount)); - - double outQuantity = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getQuantity().get()).sum(); - Platform.runLater(() -> model.getOut().getQuantity().set(outQuantity)); - - double outTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getTaxAmount().get()).sum(); - Platform.runLater(() -> model.getOut().getTaxAmount().set(outTaxAmount)); - - double outExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut) - .mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum(); - Platform.runLater(() -> model.getOut().getExclusiveTaxAmount().set(outExclusiveTaxAmount)); - } - String makeKey(ContractItemVo item) { return item.getTitle() + "-" + item.getSpecification(); } diff --git a/client/src/main/java/com/ecep/contract/controller/table/cell/ContractFileTableCell.java b/client/src/main/java/com/ecep/contract/controller/table/cell/ContractFileTableCell.java index e35732a..4fd4f00 100644 --- a/client/src/main/java/com/ecep/contract/controller/table/cell/ContractFileTableCell.java +++ b/client/src/main/java/com/ecep/contract/controller/table/cell/ContractFileTableCell.java @@ -2,7 +2,9 @@ package com.ecep.contract.controller.table.cell; import static com.ecep.contract.SpringApp.getBean; +import com.ecep.contract.service.ContractFileService; import com.ecep.contract.service.ContractService; +import com.ecep.contract.vo.ContractFileVo; import com.ecep.contract.vo.ContractVo; import javafx.scene.control.TableCell; @@ -11,56 +13,56 @@ import javafx.util.Callback; import lombok.NoArgsConstructor; @NoArgsConstructor -public class ContractFileTableCell extends AsyncUpdateTableCell { +public class ContractFileTableCell extends AsyncUpdateTableCell { /** * 创建一个ContractFileTableCell的TableCell工厂,自动获取ContractService实例 - * + * * @param 表格行类型 * @return TableCell工厂回调 */ public static Callback, TableCell> forTableColumn() { - return forTableColumn(getBean(ContractService.class)); + return forTableColumn(getBean(ContractFileService.class)); } /** - * 创建一个ContractFileTableCell的TableCell工厂,使用提供的ContractService实例 - * + * 创建一个ContractFileTableCell的TableCell工厂,使用提供的ContractFileService实例 + * * @param 表格行类型 * @param service ContractService实例 * @return TableCell工厂回调 */ - public static Callback, TableCell> forTableColumn(ContractService service) { + public static Callback, TableCell> forTableColumn(ContractFileService service) { return param -> new ContractFileTableCell(service); } /** - * 使用指定的ContractService创建ContractFileTableCell实例 - * + * 使用指定的ContractFileService创建ContractFileTableCell实例 + * * @param contractService ContractService实例 */ - public ContractFileTableCell(ContractService contractService) { + public ContractFileTableCell(ContractFileService contractService) { setService(contractService); } /** * 获取ContractService实例 - * + * * @return ContractService实例 */ @Override - protected ContractService getServiceBean() { - return getBean(ContractService.class); + protected ContractFileService getServiceBean() { + return getBean(ContractFileService.class); } /** * 格式化ContractVo对象为显示文本 - * + * * @param entity ContractVo对象 * @return 格式化后的文本 */ @Override - public String format(ContractVo entity) { - return entity.getCode() + " " + entity.getName(); + public String format(ContractFileVo entity) { + return entity.getFileName(); } } \ No newline at end of file diff --git a/client/src/main/java/com/ecep/contract/controller/vendor/VendorTabSkinFile.java b/client/src/main/java/com/ecep/contract/controller/vendor/VendorTabSkinFile.java index b952059..2b4c550 100644 --- a/client/src/main/java/com/ecep/contract/controller/vendor/VendorTabSkinFile.java +++ b/client/src/main/java/com/ecep/contract/controller/vendor/VendorTabSkinFile.java @@ -94,7 +94,7 @@ public class VendorTabSkinFile .observableMap(getCachedBean(VendorFileTypeService.class).findAll(getLocale())); fileTable_typeColumn.setCellValueFactory(param -> Bindings.valueAt(observableMapByLocal, - param.getValue().getType()).map(BaseEnumEntity::getValue)); + param.getValue().getType()).map(VendorFileTypeLocalVo::getValue)); fileTable_filePathColumn.setCellValueFactory(param -> param.getValue().getFilePath()); fileTable_filePathColumn.setCellFactory(param -> new FileTableFilePathTableCell()); diff --git a/client/src/main/java/com/ecep/contract/controller/vendor/approved_list/VendorApprovedListVendorImportTask.java b/client/src/main/java/com/ecep/contract/controller/vendor/approved_list/VendorApprovedListVendorImportTask.java index b35172e..0df9e20 100644 --- a/client/src/main/java/com/ecep/contract/controller/vendor/approved_list/VendorApprovedListVendorImportTask.java +++ b/client/src/main/java/com/ecep/contract/controller/vendor/approved_list/VendorApprovedListVendorImportTask.java @@ -20,7 +20,6 @@ import org.springframework.util.StringUtils; import com.ecep.contract.MessageHolder; import com.ecep.contract.VendorFileType; import com.ecep.contract.VendorType; -import com.ecep.contract.model.Vendor; import com.ecep.contract.service.VendorService; import com.ecep.contract.task.Tasker; import com.ecep.contract.util.ParamUtils; @@ -408,7 +407,6 @@ public class VendorApprovedListVendorImportTask extends Tasker { * @param item 供方名录中供应商的条目 * @param holder 消息输出器 * @return true if qualified - * @see #findAllEvaluationFormFiles(Vendor, LocalDate) */ private boolean checkAsQualifiedVendorByEvaluationFormFiles( VendorVo vendor, VendorApprovedItemVo item, MessageHolder holder) { diff --git a/client/src/main/java/com/ecep/contract/converter/BankStringConverter.java b/client/src/main/java/com/ecep/contract/converter/BankStringConverter.java index 1740efb..56f0935 100644 --- a/client/src/main/java/com/ecep/contract/converter/BankStringConverter.java +++ b/client/src/main/java/com/ecep/contract/converter/BankStringConverter.java @@ -13,8 +13,8 @@ public class BankStringConverter extends StringConverter { } @Override - public String toString(BankVo object) { - return object == null ? "" : object.getCode() + " " + object.getName(); + public String toString(BankVo bank) { + return bank == null ? "" : bank.getCode() + " " + bank.getName(); } @Override diff --git a/client/src/main/java/com/ecep/contract/service/CloudRkService.java b/client/src/main/java/com/ecep/contract/service/CloudRkService.java index a203da7..338c31f 100644 --- a/client/src/main/java/com/ecep/contract/service/CloudRkService.java +++ b/client/src/main/java/com/ecep/contract/service/CloudRkService.java @@ -8,7 +8,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import com.ecep.contract.Desktop; -import com.ecep.contract.MessageHolder; import com.ecep.contract.task.CloudRkSyncTask; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.CloudRkViewModel; @@ -48,11 +47,6 @@ public class CloudRkService extends QueryService { }, 1, TimeUnit.MINUTES); } - public CloudRkVo updateCloudRk(CompanyVo company, MessageHolder holder) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'updateCloudRk'"); - } - public CloudRkVo getOrCreateCloudRk(CompanyVo company) { CloudRkVo cloudRk = findByCompany(company); if (cloudRk == null) { diff --git a/client/src/main/java/com/ecep/contract/service/CompanyBankAccountService.java b/client/src/main/java/com/ecep/contract/service/CompanyBankAccountService.java index dc1cbc4..58deb6b 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyBankAccountService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyBankAccountService.java @@ -4,14 +4,14 @@ import java.util.List; import org.springframework.stereotype.Service; -import com.ecep.contract.model.Company; import com.ecep.contract.vm.CompanyBankAccountViewModel; import com.ecep.contract.vo.CompanyBankAccountVo; +import com.ecep.contract.vo.CompanyVo; @Service public class CompanyBankAccountService extends QueryService { - public List searchByCompany(Company company, String searchText) { + public List searchByCompany(CompanyVo company, String searchText) { throw new UnsupportedOperationException("未实现"); } } diff --git a/client/src/main/java/com/ecep/contract/service/CompanyContactService.java b/client/src/main/java/com/ecep/contract/service/CompanyContactService.java index 4b075c5..9a7499e 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyContactService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyContactService.java @@ -6,7 +6,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import com.ecep.contract.model.Company; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.util.ParamUtils.Builder; import com.ecep.contract.vm.CompanyContactViewModel; @@ -16,7 +15,7 @@ import com.ecep.contract.vo.CompanyVo; @Service public class CompanyContactService extends QueryService { - public List searchByCompany(Company company, String searchText) { + public List searchByCompany(CompanyVo company, String searchText) { Builder params = getSpecification(searchText); params.equals("company", company); List list = findAll(params.build(), Pageable.ofSize(10)).getContent(); diff --git a/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java b/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java index 5766e90..f9d7c16 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java @@ -16,8 +16,6 @@ import com.ecep.contract.CustomerFileType; import com.ecep.contract.MessageHolder; import com.ecep.contract.SpringApp; import com.ecep.contract.constant.CompanyCustomerConstant; -import com.ecep.contract.model.CompanyCustomer; -import com.ecep.contract.model.CompanyCustomerEvaluationFormFile; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.CompanyCustomerFileViewModel; import com.ecep.contract.vo.CompanyCustomerFileVo; diff --git a/client/src/main/java/com/ecep/contract/service/CompanyFileService.java b/client/src/main/java/com/ecep/contract/service/CompanyFileService.java index ca39e3d..94a1216 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyFileService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyFileService.java @@ -1,32 +1,17 @@ package com.ecep.contract.service; -import java.io.File; import java.time.LocalDate; import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.function.Consumer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import com.ecep.contract.vo.CompanyOldNameVo; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; import com.ecep.contract.CompanyFileType; import com.ecep.contract.MessageHolder; import com.ecep.contract.MyDateTimeUtils; -import com.ecep.contract.SpringApp; -import com.ecep.contract.constant.CloudServiceConstant; -import com.ecep.contract.constant.CompanyConstant; -import com.ecep.contract.model.Company; -import com.ecep.contract.model.CompanyFile; -import com.ecep.contract.model.CompanyOldName; -import com.ecep.contract.util.FileUtils; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.CompanyFileViewModel; import com.ecep.contract.vo.CompanyFileVo; diff --git a/client/src/main/java/com/ecep/contract/service/CompanyFileTypeService.java b/client/src/main/java/com/ecep/contract/service/CompanyFileTypeService.java index c1ab3dc..a6dd79f 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyFileTypeService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyFileTypeService.java @@ -6,10 +6,7 @@ import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.CompanyFileTypeLocalViewModel; import com.ecep.contract.vo.CompanyFileTypeLocalVo; import javafx.util.StringConverter; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CachePut; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.cache.annotation.Caching; +import org.springframework.cache.annotation.*; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -36,13 +33,21 @@ public class CompanyFileTypeService extends QueryService { +public class CompanyInvoiceInfoService extends QueryService { - public List searchByCompany(Company company, String searchText) { + public List searchByCompany(CompanyVo company, String searchText) { Map params = new HashMap<>(); params.put("company", company); params.put("searchText", searchText); diff --git a/client/src/main/java/com/ecep/contract/service/ContractPayPlanService.java b/client/src/main/java/com/ecep/contract/service/ContractPayPlanService.java index 4371cd0..dc2302b 100644 --- a/client/src/main/java/com/ecep/contract/service/ContractPayPlanService.java +++ b/client/src/main/java/com/ecep/contract/service/ContractPayPlanService.java @@ -5,7 +5,6 @@ import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import com.ecep.contract.model.Contract; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.ContractPayPlanViewModel; import com.ecep.contract.vo.ContractPayPlanVo; @@ -14,11 +13,7 @@ import com.ecep.contract.vo.ContractVo; @Service public class ContractPayPlanService extends QueryService { - public List findAllByContract(Contract contract) { - return findAll(ParamUtils.builder() - .equals("contract", contract.getId()) - .build(), Pageable.unpaged()).getContent(); - } + public List findAllByContract(ContractVo contract) { return findAll(ParamUtils.builder() diff --git a/client/src/main/java/com/ecep/contract/service/ExtendVendorInfoService.java b/client/src/main/java/com/ecep/contract/service/ExtendVendorInfoService.java index 2bed0c4..fce2c9b 100644 --- a/client/src/main/java/com/ecep/contract/service/ExtendVendorInfoService.java +++ b/client/src/main/java/com/ecep/contract/service/ExtendVendorInfoService.java @@ -21,7 +21,7 @@ public class ExtendVendorInfoService extends QueryService page = findAll(ParamUtils.builder() - .equals("contract", contract).build(), + .equals("contract", contract).build(), Pageable.ofSize(1)); if (page.isEmpty()) { return null; diff --git a/client/src/main/java/com/ecep/contract/service/ProductTypeService.java b/client/src/main/java/com/ecep/contract/service/ProductTypeService.java index e8fd7e7..6c3e400 100644 --- a/client/src/main/java/com/ecep/contract/service/ProductTypeService.java +++ b/client/src/main/java/com/ecep/contract/service/ProductTypeService.java @@ -10,7 +10,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import com.ecep.contract.model.ProductType; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.ProductTypeViewModel; import com.ecep.contract.vo.ProductTypeVo; diff --git a/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java b/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java index 32ffd88..ad47254 100644 --- a/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java +++ b/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java @@ -1,6 +1,7 @@ package com.ecep.contract.service; import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -13,6 +14,12 @@ import com.ecep.contract.vo.ProjectTypeVo; @CacheConfig(cacheNames = "project-type") public class ProjectTypeService extends QueryService { + @Cacheable(key = "#p0") + @Override + public ProjectTypeVo findById(Integer id) { + return super.findById(id); + } + public ProjectTypeVo findByName(String name) { Page page = findAll(ParamUtils.builder().equals("name", name).build(), Pageable.ofSize(1)); if (page.isEmpty()) { diff --git a/client/src/main/java/com/ecep/contract/service/SaleOrdersService.java b/client/src/main/java/com/ecep/contract/service/SaleOrdersService.java index 5412a72..2a90048 100644 --- a/client/src/main/java/com/ecep/contract/service/SaleOrdersService.java +++ b/client/src/main/java/com/ecep/contract/service/SaleOrdersService.java @@ -3,7 +3,6 @@ package com.ecep.contract.service; import com.ecep.contract.vo.SalesOrderVo; import org.springframework.stereotype.Service; -import com.ecep.contract.model.SalesOrder; import com.ecep.contract.vm.SalesOrderViewModel; @Service diff --git a/client/src/main/java/com/ecep/contract/service/VendorEntityService.java b/client/src/main/java/com/ecep/contract/service/VendorEntityService.java index f9f9b68..50f4469 100644 --- a/client/src/main/java/com/ecep/contract/service/VendorEntityService.java +++ b/client/src/main/java/com/ecep/contract/service/VendorEntityService.java @@ -47,6 +47,6 @@ public class VendorEntityService extends QueryService state) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getNextSignDate'"); - } - public Map getFileTypeLocalMap(Locale locale) { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'getFileTypeLocalMap'"); diff --git a/client/src/main/java/com/ecep/contract/service/VendorService.java b/client/src/main/java/com/ecep/contract/service/VendorService.java index e8331a3..05fe7a3 100644 --- a/client/src/main/java/com/ecep/contract/service/VendorService.java +++ b/client/src/main/java/com/ecep/contract/service/VendorService.java @@ -17,7 +17,6 @@ import com.ecep.contract.MessageHolder; import com.ecep.contract.SpringApp; import com.ecep.contract.VendorType; import com.ecep.contract.constant.CompanyVendorConstant; -import com.ecep.contract.model.Vendor; import com.ecep.contract.model.VendorCatalog; import com.ecep.contract.util.CompanyUtils; import com.ecep.contract.util.FileUtils; @@ -71,11 +70,6 @@ public class VendorService extends QueryService + * 定时任务,每30分钟同步一次集团相关方平台的相关方信息 + *

+ * 任务执行时,会调用集团相关方平台的API,获取相关方信息,并更新到数据库中。 */ -public class CloudRkSyncTask extends Tasker { +public class CloudRkSyncTask extends Tasker implements WebSocketClientTasker { private static final Logger logger = LoggerFactory.getLogger(CloudRkSyncTask.class); + @Setter + private CompanyVo company; + @Override protected Object execute(MessageHolder holder) throws Exception { - updateTitle("集团相关方平台"); - updateProgress(1, 1); - return null; + updateTitle(String.format("集团相关方平台同步任务[%s]", company.getName())); + return callRemoteTask(holder, getLocale(), company.getId()); + } + + @Override + public void updateProgress(long workDone, long max) { + super.updateProgress(workDone, max); + } + + @Override + public String getTaskName() { + return "CloudRkSyncTask"; } } diff --git a/client/src/main/java/com/ecep/contract/task/CompanyRkUpdateTasker.java b/client/src/main/java/com/ecep/contract/task/CompanyRkUpdateTasker.java new file mode 100644 index 0000000..ad332fa --- /dev/null +++ b/client/src/main/java/com/ecep/contract/task/CompanyRkUpdateTasker.java @@ -0,0 +1,30 @@ +package com.ecep.contract.task; + +import com.ecep.contract.MessageHolder; +import com.ecep.contract.WebSocketClientTasker; +import com.ecep.contract.vo.CompanyVo; + +import lombok.Setter; + +public class CompanyRkUpdateTasker extends Tasker implements WebSocketClientTasker { + + @Setter + CompanyVo company; + + @Override + public String getTaskName() { + return "CompanyRkUpdateTasker"; + } + + @Override + public void updateProgress(long workDone, long max) { + super.updateProgress(workDone, max); + } + + @Override + protected Object execute(MessageHolder holder) throws Exception { + updateTitle("合并更新 " + company.getName()); + return callRemoteTask(holder, getLocale(), company.getId()); + } + +} diff --git a/client/src/main/java/com/ecep/contract/task/ContractVerifyComm.java b/client/src/main/java/com/ecep/contract/task/ContractVerifyComm.java index c39f741..71f8b79 100644 --- a/client/src/main/java/com/ecep/contract/task/ContractVerifyComm.java +++ b/client/src/main/java/com/ecep/contract/task/ContractVerifyComm.java @@ -1,38 +1,24 @@ package com.ecep.contract.task; +import com.ecep.contract.*; +import com.ecep.contract.controller.project.cost.ProjectCostImportItemsFromContractsTasker; +import com.ecep.contract.model.ContractFileTypeLocal; +import com.ecep.contract.service.*; +import com.ecep.contract.vo.*; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.collections.ObservableMap; +import javafx.util.converter.NumberStringConverter; +import lombok.Data; +import org.springframework.util.StringUtils; + import java.io.File; import java.text.NumberFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.DoubleSummaryStatistics; -import java.util.List; -import java.util.Locale; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; -import com.ecep.contract.service.*; -import com.ecep.contract.vo.*; -import org.springframework.util.StringUtils; - -import com.ecep.contract.CustomerFileType; -import com.ecep.contract.ContractFileType; -import com.ecep.contract.ContractPayWay; -import com.ecep.contract.MessageHolder; -import com.ecep.contract.MyDateTimeUtils; -import com.ecep.contract.SpringApp; -import com.ecep.contract.controller.project.cost.ProjectCostImportItemsFromContractsTasker; -import com.ecep.contract.model.Contract; -import com.ecep.contract.model.ContractFileTypeLocal; -import com.ecep.contract.service.VendorService; - -import javafx.beans.property.SimpleBooleanProperty; -import javafx.collections.ObservableMap; -import javafx.util.converter.NumberStringConverter; -import lombok.Data; - @Data public class ContractVerifyComm { // Project @@ -208,7 +194,6 @@ public class ContractVerifyComm { */ private ObservableMap fileTypeLocalMap = null; private Locale locale = Locale.getDefault(); - private Contract contract; /** * 是否验证企业存储目录 @@ -380,17 +365,15 @@ public class ContractVerifyComm { vendorInfo = getExtendVendorInfoService().save(info); holder.info("创建供应商信息 #" + vendorInfo.getId()); } - Integer groupId = vendorInfo.getGroupId(); - VendorGroupVo group = vendorGroupService.findById(groupId); + VendorGroupVo group = null; + if (vendorInfo.getGroupId() != null) { + group = getVendorGroupService().findById(vendorInfo.getGroupId()); + } boolean assignedProvider = vendorInfo.isAssignedProvider(); if (assignedProvider) { holder.debug("采购信息中设定为指定供应商"); } - if (group != null) { - group = getVendorGroupService().findById(groupId); - vendorInfo.setGroupId(group.getId()); - } if (verifyCustomerSubContractDate.get()) { // 检查子合同日期是否在销售合同之后 if (!vendorInfo.isPrePurchase()) { @@ -424,7 +407,7 @@ public class ContractVerifyComm { ContractFileService fileService = getContractFileService(); List files = fileService.findAllByContract(contract); List list = getVendorGroupRequireFileTypeService().findByGroupId(group.getId()); - if (list != null && !list.isEmpty()) { + if (list != null) { for (VendorGroupRequireFileTypeVo item : list) { ContractFileType fileType = item.getFileType(); if (fileType == null) { @@ -453,26 +436,42 @@ public class ContractVerifyComm { holder.error("未上报供应商比价"); } else { for (ContractBidVendorVo bidVendor : bidVendors) { + if (bidVendor.getCompanyId() == null) { + holder.warn("供应商比价:#" + bidVendor.getId() + " 未关联供应商"); + continue; + } + + CompanyVo company = getCompanyService().findById(bidVendor.getCompanyId()); ContractFileVo contractFile = fileService.findById(bidVendor.getQuotationSheetFileId()); + // 报价表文件不存在 if (contractFile == null) { if (requireQuotation && bidVendor.getCompanyId().equals(contract.getCompanyId())) { holder.debug("供应商类型启用了允许选中供应商不必须要有报价表"); } else { - CompanyVo company = getCompanyService().findById(bidVendor.getCompanyId()); holder.error("供应商比价:" + company.getName() + " 未上传/关联报价表"); loseFile = true; } } else { - contractFile = fileService.findById(contractFile.getId()); ContractFileType type = contractFile.getType(); + if (type == null) { + continue; + } if (type != ContractFileType.QuotationSheet) { holder.error("供应商比价:" + contractFile.getFileName() + " 报价表记录异常,类型错误"); - } - File file = new File(contract.getPath(), contractFile.getFileName()); - if (!file.exists()) { - holder.error("供应商比价:" + file.getName() + " 报价表记录异常,文件不存在"); loseFile = true; + } else { + if (StringUtils.hasText(contractFile.getFileName())) { + File file = new File(contract.getPath(), contractFile.getFileName()); + if (!file.exists()) { + holder.error("供应商比价:" + file.getName() + " 报价表记录异常,文件不存在"); + loseFile = true; + } + } else { + holder.error("供应商比价:" + company.getName() + " 报价表记录异常"); + loseFile = true; + } } + } } } diff --git a/client/src/main/java/com/ecep/contract/util/UITools.java b/client/src/main/java/com/ecep/contract/util/UITools.java index 15007db..ad3b985 100644 --- a/client/src/main/java/com/ecep/contract/util/UITools.java +++ b/client/src/main/java/com/ecep/contract/util/UITools.java @@ -260,6 +260,10 @@ public class UITools { // 监听 property 变化 idProperty.addListener((observable, oldValue, newValue) -> { + if (newValue == null) { + textField.textProperty().set(null); + return; + } T newEntity = queryService.findById(newValue); textField.textProperty().set(converter.toString(newEntity)); }); diff --git a/client/src/main/java/com/ecep/contract/vm/CloudRkViewModel.java b/client/src/main/java/com/ecep/contract/vm/CloudRkViewModel.java index 39c7176..c7d092b 100644 --- a/client/src/main/java/com/ecep/contract/vm/CloudRkViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CloudRkViewModel.java @@ -1,6 +1,7 @@ package com.ecep.contract.vm; import java.time.LocalDateTime; +import java.util.Objects; import com.ecep.contract.vo.CloudRkVo; @@ -95,7 +96,7 @@ public class CloudRkViewModel extends IdentityViewModel { vm.updateFrom(v); return vm; } - + @Override protected void updateFrom(CloudRkVo v) { super.updateFrom(v); @@ -122,24 +123,78 @@ public class CloudRkViewModel extends IdentityViewModel { @Override public boolean copyTo(CloudRkVo v) { boolean result = super.copyTo(v); - v.setCloudId(cloudId.get()); - v.setUpdateDays(updateDays.get()); - v.setAutoUpdate(autoUpdate.get()); - v.setDescription(description.get()); - v.setRank(rank.get()); - v.setRankDescription(rankDescription.get()); - v.setCustomerGrade(customerGrade.get()); - v.setCustomerDescription(customerDescription.get()); - v.setCustomerScore(customerScore.get()); - v.setVendorGrade(vendorGrade.get()); - v.setVendorDescription(vendorDescription.get()); - v.setVendorScore(vendorScore.get()); - v.setCompanyId(company.get()); - v.setLatestUpdate(latestUpdate.get()); - v.setCloudEntUpdate(cloudEntUpdate.get()); - v.setCloudBlackListUpdated(cloudBlackListUpdated.get()); - v.setCloudLatest(cloudLatest.get()); - v.setVersion(version.get()); + if (!Objects.equals(v.getCloudId(), cloudId.get())) { + v.setCloudId(cloudId.get()); + result = true; + } + if (!Objects.equals(v.getUpdateDays(), updateDays.get())) { + v.setUpdateDays(updateDays.get()); + result = true; + } + if (!Objects.equals(v.isAutoUpdate(), autoUpdate.get())) { + v.setAutoUpdate(autoUpdate.get()); + result = true; + } + if (!Objects.equals(v.getDescription(), description.get())) { + v.setDescription(description.get()); + result = true; + } + if (!Objects.equals(v.getRank(), rank.get())) { + v.setRank(rank.get()); + result = true; + } + if (!Objects.equals(v.getRankDescription(), rankDescription.get())) { + v.setRankDescription(rankDescription.get()); + result = true; + } + if (!Objects.equals(v.getCustomerGrade(), customerGrade.get())) { + v.setCustomerGrade(customerGrade.get()); + result = true; + } + if (!Objects.equals(v.getCustomerDescription(), customerDescription.get())) { + v.setCustomerDescription(customerDescription.get()); + result = true; + } + if (!Objects.equals(v.getCustomerScore(), customerScore.get())) { + v.setCustomerScore(customerScore.get()); + result = true; + } + if (!Objects.equals(v.getVendorGrade(), vendorGrade.get())) { + v.setVendorGrade(vendorGrade.get()); + result = true; + } + if (!Objects.equals(v.getVendorDescription(), vendorDescription.get())) { + v.setVendorDescription(vendorDescription.get()); + result = true; + } + if (!Objects.equals(v.getVendorScore(), vendorScore.get())) { + v.setVendorScore(vendorScore.get()); + result = true; + } + if (!Objects.equals(v.getCompanyId(), company.get())) { + v.setCompanyId(company.get()); + result = true; + } + if (!Objects.equals(v.getLatestUpdate(), latestUpdate.get())) { + v.setLatestUpdate(latestUpdate.get()); + result = true; + } + if (!Objects.equals(v.getCloudEntUpdate(), cloudEntUpdate.get())) { + v.setCloudEntUpdate(cloudEntUpdate.get()); + result = true; + } + if (!Objects.equals(v.getCloudBlackListUpdated(), cloudBlackListUpdated.get())) { + v.setCloudBlackListUpdated(cloudBlackListUpdated.get()); + result = true; + } + if (!Objects.equals(v.getCloudLatest(), cloudLatest.get())) { + v.setCloudLatest(cloudLatest.get()); + result = true; + } + if (!Objects.equals(v.getVersion(), version.get())) { + v.setVersion(version.get()); + result = true; + } return result; } } diff --git a/client/src/main/java/com/ecep/contract/vm/CloudTycInfoViewModel.java b/client/src/main/java/com/ecep/contract/vm/CloudTycInfoViewModel.java index bc940f8..d1b3630 100644 --- a/client/src/main/java/com/ecep/contract/vm/CloudTycInfoViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CloudTycInfoViewModel.java @@ -16,57 +16,52 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = false) public class CloudTycInfoViewModel extends IdentityViewModel { - /** - * 云端Id - */ - private SimpleStringProperty cloudId = new SimpleStringProperty(); /** * 公司, Company */ private SimpleObjectProperty company = new SimpleObjectProperty<>(); + /** + * 云端Id + */ + private SimpleStringProperty cloudId = new SimpleStringProperty(); + /** + * 天眼查得分 + */ + private SimpleIntegerProperty score = new SimpleIntegerProperty(); + private SimpleObjectProperty cloudLatest = new SimpleObjectProperty<>(); /** * 最后更新日期 */ - private SimpleObjectProperty latest = new SimpleObjectProperty<>(); + private SimpleObjectProperty latestUpdate = new SimpleObjectProperty<>(); /** * Version */ private SimpleIntegerProperty version = new SimpleIntegerProperty(); - private SimpleIntegerProperty score = new SimpleIntegerProperty(); - private SimpleObjectProperty cloudLatest = new SimpleObjectProperty<>(); @Override protected void updateFrom(CloudTycVo info) { super.updateFrom(info); - update_((CloudTycVo) info); - } - - private void update_(CloudTycVo info) { score.set(info.getScore()); - + cloudId.set(info.getCloudId()); + company.set(info.getCompanyId()); if (info.getCloudLatest() != null) { - ZoneId zone = ZoneId.systemDefault(); - ZonedDateTime zonedDateTime = info.getCloudLatest().atZone(zone); - LocalDateTime localDateTime = zonedDateTime.toLocalDateTime(); - cloudLatest.set(localDateTime); + cloudLatest.set(info.getCloudLatest()); } else { cloudLatest.set(null); } + latestUpdate.set(info.getLatestUpdate()); + version.set(info.getVersion()); } @Override public boolean copyTo(CloudTycVo info) { boolean modified = super.copyTo(info); - if (copyTo_((CloudTycVo) info)) { + if (!Objects.equals(info.getCompanyId(), getCompany().get())) { + info.setCompanyId(getCompany().get()); modified = true; } - return modified; - } - - private boolean copyTo_(CloudTycVo info) { - boolean modified = super.copyTo(info); - if (!Objects.equals(info.getId(), getId().get())) { - info.setId(getId().get()); + if (!Objects.equals(info.getCloudId(), cloudId.get())) { + info.setCloudId(cloudId.get()); modified = true; } @@ -79,6 +74,14 @@ public class CloudTycInfoViewModel extends IdentityViewModel { info.setCloudLatest(cloudLatest.get()); modified = true; } + if (!Objects.equals(info.getLatestUpdate(), latestUpdate.get())) { + info.setLatestUpdate(latestUpdate.get()); + modified = true; + } + if (!Objects.equals(info.getVersion(), version.get())) { + info.setVersion(version.get()); + modified = true; + } return modified; } diff --git a/client/src/main/java/com/ecep/contract/vm/CloudYuInfoViewModel.java b/client/src/main/java/com/ecep/contract/vm/CloudYuInfoViewModel.java index fc03310..121b136 100644 --- a/client/src/main/java/com/ecep/contract/vm/CloudYuInfoViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CloudYuInfoViewModel.java @@ -26,11 +26,8 @@ public class CloudYuInfoViewModel extends IdentityViewModel { /** * 最后更新日期 */ - private SimpleObjectProperty latest = new SimpleObjectProperty<>(); - /** - * Version - */ - private SimpleIntegerProperty version = new SimpleIntegerProperty(); + private SimpleObjectProperty latestUpdate = new SimpleObjectProperty<>(); + private SimpleStringProperty vendorCode = new SimpleStringProperty(); private SimpleStringProperty vendorClassCode = new SimpleStringProperty(); private SimpleObjectProperty vendorDevelopDate = new SimpleObjectProperty<>(); @@ -41,17 +38,20 @@ public class CloudYuInfoViewModel extends IdentityViewModel { private SimpleObjectProperty cloudLatest = new SimpleObjectProperty<>(); + /** + * Version + */ + private SimpleIntegerProperty version = new SimpleIntegerProperty(); + @Override protected void updateFrom(CloudYuVo info) { super.updateFrom(info); - update_((CloudYuVo) info); - } - - private void update_(CloudYuVo info) { vendorCode.set(info.getExceptionMessage()); vendorDevelopDate.set(info.getVendorUpdateDate()); customerDevelopDate.set(info.getCustomerUpdateDate()); cloudLatest.set(info.getCloudLatest()); + latestUpdate.set(info.getLatestUpdate()); + version.set(info.getVersion()); } @Override @@ -82,6 +82,14 @@ public class CloudYuInfoViewModel extends IdentityViewModel { info.setCloudLatest(cloudLatest.get()); modified = true; } + if (!Objects.equals(info.getLatestUpdate(), latestUpdate.get())) { + info.setLatestUpdate(latestUpdate.get()); + modified = true; + } + if (!Objects.equals(info.getVersion(), version.get())) { + info.setVersion(version.get()); + modified = true; + } return modified; } diff --git a/client/src/main/java/com/ecep/contract/vm/CompanyContactViewModel.java b/client/src/main/java/com/ecep/contract/vm/CompanyContactViewModel.java index d372826..aea723c 100644 --- a/client/src/main/java/com/ecep/contract/vm/CompanyContactViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CompanyContactViewModel.java @@ -1,17 +1,15 @@ package com.ecep.contract.vm; -import java.time.LocalDate; -import java.util.Objects; - -import com.ecep.contract.model.CompanyContact; import com.ecep.contract.vo.CompanyContactVo; - import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDate; +import java.util.Objects; + @Data @EqualsAndHashCode(callSuper = false) public class CompanyContactViewModel extends IdentityViewModel { diff --git a/client/src/main/java/com/ecep/contract/vm/CompanyCustomerFileTypeLocalViewModel.java b/client/src/main/java/com/ecep/contract/vm/CompanyCustomerFileTypeLocalViewModel.java index c814e67..6967d76 100644 --- a/client/src/main/java/com/ecep/contract/vm/CompanyCustomerFileTypeLocalViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CompanyCustomerFileTypeLocalViewModel.java @@ -1,13 +1,45 @@ package com.ecep.contract.vm; +import java.util.Objects; + import com.ecep.contract.CustomerFileType; import com.ecep.contract.vo.CustomerFileTypeLocalVo; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class CompanyCustomerFileTypeLocalViewModel extends EnumViewModel { +public class CompanyCustomerFileTypeLocalViewModel extends IdentityViewModel { + private SimpleObjectProperty type = new SimpleObjectProperty<>(); + private SimpleStringProperty lang = new SimpleStringProperty(); + private SimpleStringProperty value = new SimpleStringProperty(); + @Override + protected void updateFrom(CustomerFileTypeLocalVo v) { + super.updateFrom(v); + type.set(v.getType()); + lang.set(v.getLang()); + value.set(v.getValue()); + } + + @Override + public boolean copyTo(CustomerFileTypeLocalVo v) { + boolean ret = super.copyTo(v); + if (!Objects.equals(v.getType(), type.get())) { + v.setType(type.get()); + ret = true; + } + if (!Objects.equals(v.getLang(), lang.get())) { + v.setLang(lang.get()); + ret = true; + } + if (!Objects.equals(v.getValue(), value.get())) { + v.setValue(value.get()); + ret = true; + } + return ret; + } } diff --git a/client/src/main/java/com/ecep/contract/vm/CompanyExtendInfoViewModel.java b/client/src/main/java/com/ecep/contract/vm/CompanyExtendInfoViewModel.java index 787cde2..f9ae14b 100644 --- a/client/src/main/java/com/ecep/contract/vm/CompanyExtendInfoViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CompanyExtendInfoViewModel.java @@ -1,17 +1,14 @@ package com.ecep.contract.vm; -import java.util.Objects; - -import com.ecep.contract.model.CompanyExtendInfo; import com.ecep.contract.vo.CompanyExtendInfoVo; -import com.ecep.contract.vo.CompanyVo; - import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleObjectProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Objects; + @Data @EqualsAndHashCode(callSuper = false) public class CompanyExtendInfoViewModel extends IdentityViewModel { diff --git a/client/src/main/java/com/ecep/contract/vm/CompanyFileViewModel.java b/client/src/main/java/com/ecep/contract/vm/CompanyFileViewModel.java index 94279b7..aa697d1 100644 --- a/client/src/main/java/com/ecep/contract/vm/CompanyFileViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CompanyFileViewModel.java @@ -1,19 +1,17 @@ package com.ecep.contract.vm; -import java.time.LocalDate; -import java.util.Objects; - import com.ecep.contract.CompanyFileType; -import com.ecep.contract.model.CompanyFile; import com.ecep.contract.vo.CompanyFileVo; - import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDate; +import java.util.Objects; + /** - * View Model for {@link CompanyFile} + * View Model for {@link CompanyFileVo} */ @Data @EqualsAndHashCode(callSuper = false) diff --git a/client/src/main/java/com/ecep/contract/vm/CompanyInvoiceInfoViewModel.java b/client/src/main/java/com/ecep/contract/vm/CompanyInvoiceInfoViewModel.java index 5d9a86d..bbc4a9a 100644 --- a/client/src/main/java/com/ecep/contract/vm/CompanyInvoiceInfoViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CompanyInvoiceInfoViewModel.java @@ -1,16 +1,15 @@ package com.ecep.contract.vm; -import java.util.Objects; - -import com.ecep.contract.model.CompanyInvoiceInfo; - +import com.ecep.contract.vo.CompanyInvoiceInfoVo; import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Objects; + @Data @EqualsAndHashCode(callSuper = false) -public class CompanyInvoiceInfoViewModel extends IdentityViewModel { +public class CompanyInvoiceInfoViewModel extends IdentityViewModel { private SimpleStringProperty name = new SimpleStringProperty(); private SimpleStringProperty taxId = new SimpleStringProperty(); private SimpleStringProperty address = new SimpleStringProperty(); @@ -19,7 +18,7 @@ public class CompanyInvoiceInfoViewModel extends IdentityViewModel { +public class ContractFileTypeLocalViewModel extends IdentityViewModel { + private SimpleObjectProperty type = new SimpleObjectProperty<>(); + private SimpleStringProperty lang = new SimpleStringProperty(); + private SimpleStringProperty value = new SimpleStringProperty(); private SimpleStringProperty suggestFileName = new SimpleStringProperty(); @Override protected void updateFrom(ContractFileTypeLocalVo v) { super.updateFrom(v); + type.set(v.getType()); + lang.set(v.getLang()); + value.set(v.getValue()); suggestFileName.set(v.getSuggestFileName()); } @Override public boolean copyTo(ContractFileTypeLocalVo v) { boolean ret = super.copyTo(v); + if (!Objects.equals(type.get(), v.getType())) { + v.setType(type.get()); + ret = true; + } + if (!Objects.equals(lang.get(), v.getLang())) { + v.setLang(lang.get()); + ret = true; + } + if (!Objects.equals(value.get(), v.getValue())) { + v.setValue(value.get()); + ret = true; + } if (!Objects.equals(suggestFileName.get(), v.getSuggestFileName())) { v.setSuggestFileName(suggestFileName.get()); ret = true; diff --git a/client/src/main/java/com/ecep/contract/vm/ContractItemComposeViewModel.java b/client/src/main/java/com/ecep/contract/vm/ContractItemComposeViewModel.java index 8d50793..0356f71 100644 --- a/client/src/main/java/com/ecep/contract/vm/ContractItemComposeViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/ContractItemComposeViewModel.java @@ -1,8 +1,6 @@ package com.ecep.contract.vm; -import com.ecep.contract.model.ContractItem; import com.ecep.contract.vo.ContractItemVo; - import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleListProperty; diff --git a/client/src/main/java/com/ecep/contract/vm/ContractPayPlanViewModel.java b/client/src/main/java/com/ecep/contract/vm/ContractPayPlanViewModel.java index d7df24c..a3f42c6 100644 --- a/client/src/main/java/com/ecep/contract/vm/ContractPayPlanViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/ContractPayPlanViewModel.java @@ -4,8 +4,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects; -import com.ecep.contract.model.Contract; -import com.ecep.contract.model.ContractPayPlan; import com.ecep.contract.vo.ContractPayPlanVo; import javafx.beans.property.SimpleDoubleProperty; diff --git a/client/src/main/java/com/ecep/contract/vm/CustomerFileTypeLocalViewModel.java b/client/src/main/java/com/ecep/contract/vm/CustomerFileTypeLocalViewModel.java index 4a6dbfd..f5b6efe 100644 --- a/client/src/main/java/com/ecep/contract/vm/CustomerFileTypeLocalViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CustomerFileTypeLocalViewModel.java @@ -1,11 +1,45 @@ package com.ecep.contract.vm; +import java.util.Objects; + import com.ecep.contract.CustomerFileType; import com.ecep.contract.vo.CustomerFileTypeLocalVo; + +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class CustomerFileTypeLocalViewModel extends EnumViewModel { +public class CustomerFileTypeLocalViewModel extends IdentityViewModel { + private SimpleObjectProperty type = new SimpleObjectProperty<>(); + private SimpleStringProperty lang = new SimpleStringProperty(); + private SimpleStringProperty value = new SimpleStringProperty(); + + @Override + protected void updateFrom(CustomerFileTypeLocalVo v) { + super.updateFrom(v); + type.set(v.getType()); + lang.set(v.getLang()); + value.set(v.getValue()); + } + + @Override + public boolean copyTo(CustomerFileTypeLocalVo v) { + boolean ret = super.copyTo(v); + if (!Objects.equals(v.getType(), type.get())) { + v.setType(type.get()); + ret = true; + } + if (!Objects.equals(v.getLang(), lang.get())) { + v.setLang(lang.get()); + ret = true; + } + if (!Objects.equals(v.getValue(), value.get())) { + v.setValue(value.get()); + ret = true; + } + return ret; + } } \ No newline at end of file diff --git a/client/src/main/java/com/ecep/contract/vm/InventoryViewModel.java b/client/src/main/java/com/ecep/contract/vm/InventoryViewModel.java index 0fb1155..1a68430 100644 --- a/client/src/main/java/com/ecep/contract/vm/InventoryViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/InventoryViewModel.java @@ -11,6 +11,7 @@ import com.ecep.contract.model.Price; import com.ecep.contract.model.VolumeSize; import com.ecep.contract.vo.InventoryVo; +import com.ecep.contract.vo.VolumeSizeVo; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.property.SimpleFloatProperty; @@ -102,13 +103,13 @@ public class InventoryViewModel extends IdentityViewModel { getWeight().set(v.getWeight()); getPackagedWeight().set(v.getPackagedWeight()); - VolumeSize volumeSize = v.getVolumeSize(); + VolumeSizeVo volumeSize = v.getVolumeSize(); getSizeLength().set(volumeSize.getLength()); getSizeWidth().set(volumeSize.getWidth()); getSizeHeight().set(volumeSize.getHeight()); getVolume().set(volumeSize.getVolume()); - VolumeSize packagedVolumeSize = v.getPackagedVolumeSize(); + VolumeSizeVo packagedVolumeSize = v.getPackagedVolumeSize(); getPackagedSizeLength().set(packagedVolumeSize.getLength()); getPackagedSizeWidth().set(packagedVolumeSize.getWidth()); getPackagedSizeHeight().set(packagedVolumeSize.getHeight()); @@ -208,7 +209,7 @@ public class InventoryViewModel extends IdentityViewModel { modified = true; } - VolumeSize volumeSize = v.getVolumeSize(); + VolumeSizeVo volumeSize = v.getVolumeSize(); if (!Objects.equals(getSizeLength().get(), volumeSize.getLength())) { volumeSize.setLength(getSizeLength().get()); modified = true; @@ -226,7 +227,7 @@ public class InventoryViewModel extends IdentityViewModel { modified = true; } - VolumeSize packagedVolumeSize = v.getPackagedVolumeSize(); + VolumeSizeVo packagedVolumeSize = v.getPackagedVolumeSize(); if (!Objects.equals(getPackagedSizeHeight().get(), packagedVolumeSize.getHeight())) { packagedVolumeSize.setHeight(getPackagedSizeHeight().get()); modified = true; diff --git a/client/src/main/java/com/ecep/contract/vm/ProjectFileTypeLocalViewModel.java b/client/src/main/java/com/ecep/contract/vm/ProjectFileTypeLocalViewModel.java index 4416fe3..ad8b8f7 100644 --- a/client/src/main/java/com/ecep/contract/vm/ProjectFileTypeLocalViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/ProjectFileTypeLocalViewModel.java @@ -1,12 +1,45 @@ package com.ecep.contract.vm; +import java.util.Objects; + import com.ecep.contract.ProjectFileType; import com.ecep.contract.vo.ProjectFileTypeLocalVo; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class ProjectFileTypeLocalViewModel extends EnumViewModel { +public class ProjectFileTypeLocalViewModel extends IdentityViewModel { + private SimpleObjectProperty type = new SimpleObjectProperty<>(); + private SimpleStringProperty lang = new SimpleStringProperty(); + private SimpleStringProperty value = new SimpleStringProperty(); + + @Override + protected void updateFrom(ProjectFileTypeLocalVo v) { + super.updateFrom(v); + type.set(v.getType()); + lang.set(v.getLang()); + value.set(v.getValue()); + } + + @Override + public boolean copyTo(ProjectFileTypeLocalVo v) { + boolean ret = super.copyTo(v); + if (!Objects.equals(v.getType(), type.get())) { + v.setType(type.get()); + ret = true; + } + if (!Objects.equals(v.getLang(), lang.get())) { + v.setLang(lang.get()); + ret = true; + } + if (!Objects.equals(v.getValue(), value.get())) { + v.setValue(value.get()); + ret = true; + } + return ret; + } } \ No newline at end of file diff --git a/client/src/main/java/com/ecep/contract/vm/SalesOrderViewModel.java b/client/src/main/java/com/ecep/contract/vm/SalesOrderViewModel.java index eb51672..2248d8e 100644 --- a/client/src/main/java/com/ecep/contract/vm/SalesOrderViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/SalesOrderViewModel.java @@ -3,9 +3,6 @@ package com.ecep.contract.vm; import java.time.LocalDate; import java.util.Objects; -import com.ecep.contract.model.Contract; -import com.ecep.contract.model.Employee; -import com.ecep.contract.model.SalesOrder; import com.ecep.contract.vo.SalesOrderVo; import javafx.beans.property.SimpleIntegerProperty; diff --git a/client/src/main/java/com/ecep/contract/vm/VendorEntityViewModel.java b/client/src/main/java/com/ecep/contract/vm/VendorEntityViewModel.java index 69db3bd..ef404f3 100644 --- a/client/src/main/java/com/ecep/contract/vm/VendorEntityViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/VendorEntityViewModel.java @@ -1,38 +1,34 @@ package com.ecep.contract.vm; -import java.time.LocalDate; -import java.util.Objects; - -import com.ecep.contract.model.Vendor; -import com.ecep.contract.model.VendorEntity; -import com.ecep.contract.model.Employee; -import com.ecep.contract.model.VendorCatalog; - +import com.ecep.contract.vo.VendorEntityVo; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDate; +import java.util.Objects; + @Data @EqualsAndHashCode(callSuper = false) -public class VendorEntityViewModel extends IdentityViewModel { +public class VendorEntityViewModel extends IdentityViewModel { private SimpleStringProperty name = new SimpleStringProperty(); private SimpleStringProperty abbName = new SimpleStringProperty(); private SimpleStringProperty code = new SimpleStringProperty(); /** * 分组 */ - private SimpleObjectProperty catalog = new SimpleObjectProperty<>(); + private SimpleObjectProperty catalog = new SimpleObjectProperty<>(); /** * 关联的企业 */ - private SimpleObjectProperty vendor = new SimpleObjectProperty<>(); + private SimpleObjectProperty vendor = new SimpleObjectProperty<>(); /** * 发展日期 */ private SimpleObjectProperty developDate = new SimpleObjectProperty<>(); - private SimpleObjectProperty creator = new SimpleObjectProperty<>(); - private SimpleObjectProperty modifier = new SimpleObjectProperty<>(); + private SimpleObjectProperty creator = new SimpleObjectProperty<>(); + private SimpleObjectProperty modifier = new SimpleObjectProperty<>(); private SimpleObjectProperty modifyDate = new SimpleObjectProperty<>(); /** * 从U8系统同步时间 @@ -40,30 +36,29 @@ public class VendorEntityViewModel extends IdentityViewModel { private SimpleObjectProperty updatedDate = new SimpleObjectProperty<>(); - - public static VendorEntityViewModel from(VendorEntity cc) { + public static VendorEntityViewModel from(VendorEntityVo cc) { VendorEntityViewModel model = new VendorEntityViewModel(); model.update(cc); return model; } @Override - protected void updateFrom(VendorEntity v) { + protected void updateFrom(VendorEntityVo v) { super.updateFrom(v); getName().set(v.getName()); getAbbName().set(v.getAbbName()); getCode().set(v.getCode()); - getCatalog().set(v.getCatalog()); - getVendor().set(v.getVendor()); + getCatalog().set(v.getCatalogId()); + getVendor().set(v.getVendorId()); getDevelopDate().set(v.getDevelopDate()); - getCreator().set(v.getCreator()); - getModifier().set(v.getModifier()); + getCreator().set(v.getCreatorId()); + getModifier().set(v.getModifierId()); getModifyDate().set(v.getModifyDate()); getUpdatedDate().set(v.getUpdatedDate()); } @Override - public boolean copyTo(VendorEntity v) { + public boolean copyTo(VendorEntityVo v) { boolean modified = super.copyTo(v); if (!Objects.equals(name.get(), v.getName())) { v.setName(name.get()); @@ -77,24 +72,24 @@ public class VendorEntityViewModel extends IdentityViewModel { v.setCode(code.get()); modified = true; } - if (!Objects.equals(catalog.get(), v.getCatalog())) { - v.setCatalog(catalog.get()); + if (!Objects.equals(catalog.get(), v.getCatalogId())) { + v.setCatalogId(catalog.get()); modified = true; } - if (!Objects.equals(vendor.get(), v.getVendor())) { - v.setVendor(vendor.get()); + if (!Objects.equals(vendor.get(), v.getVendorId())) { + v.setVendorId(vendor.get()); modified = true; } if (!Objects.equals(developDate.get(), v.getDevelopDate())) { v.setDevelopDate(developDate.get()); modified = true; } - if (!Objects.equals(creator.get(), v.getCreator())) { - v.setCreator(creator.get()); + if (!Objects.equals(creator.get(), v.getCreatorId())) { + v.setCreatorId(creator.get()); modified = true; } - if (!Objects.equals(modifier.get(), v.getModifier())) { - v.setModifier(modifier.get()); + if (!Objects.equals(modifier.get(), v.getModifierId())) { + v.setModifierId(modifier.get()); modified = true; } if (!Objects.equals(modifyDate.get(), v.getModifyDate())) { diff --git a/client/src/main/java/com/ecep/contract/vm/VendorFileTypeLocalViewModel.java b/client/src/main/java/com/ecep/contract/vm/VendorFileTypeLocalViewModel.java index f5f5654..91a027c 100644 --- a/client/src/main/java/com/ecep/contract/vm/VendorFileTypeLocalViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/VendorFileTypeLocalViewModel.java @@ -1,11 +1,45 @@ package com.ecep.contract.vm; +import java.util.Objects; + import com.ecep.contract.VendorFileType; import com.ecep.contract.vo.VendorFileTypeLocalVo; + +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class VendorFileTypeLocalViewModel extends EnumViewModel { +public class VendorFileTypeLocalViewModel extends IdentityViewModel { + private SimpleObjectProperty type = new SimpleObjectProperty<>(); + private SimpleStringProperty lang = new SimpleStringProperty(); + private SimpleStringProperty value = new SimpleStringProperty(); + + @Override + protected void updateFrom(VendorFileTypeLocalVo v) { + super.updateFrom(v); + type.set(v.getType()); + lang.set(v.getLang()); + value.set(v.getValue()); + } + + @Override + public boolean copyTo(VendorFileTypeLocalVo v) { + boolean ret = super.copyTo(v); + if (!Objects.equals(v.getType(), type.get())) { + v.setType(type.get()); + ret = true; + } + if (!Objects.equals(v.getLang(), lang.get())) { + v.setLang(lang.get()); + ret = true; + } + if (!Objects.equals(v.getValue(), value.get())) { + v.setValue(value.get()); + ret = true; + } + return ret; + } } diff --git a/client/src/main/java/com/ecep/contract/vm/VendorTypeLocalViewModel.java b/client/src/main/java/com/ecep/contract/vm/VendorTypeLocalViewModel.java index d26c14c..373e844 100644 --- a/client/src/main/java/com/ecep/contract/vm/VendorTypeLocalViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/VendorTypeLocalViewModel.java @@ -1,11 +1,45 @@ package com.ecep.contract.vm; +import java.util.Objects; + import com.ecep.contract.VendorType; import com.ecep.contract.vo.VendorTypeLocalVo; + +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class VendorTypeLocalViewModel extends EnumViewModel { +public class VendorTypeLocalViewModel extends IdentityViewModel { + private SimpleObjectProperty type = new SimpleObjectProperty<>(); + private SimpleStringProperty lang = new SimpleStringProperty(); + private SimpleStringProperty value = new SimpleStringProperty(); + + @Override + protected void updateFrom(VendorTypeLocalVo v) { + super.updateFrom(v); + type.set(v.getType()); + lang.set(v.getLang()); + value.set(v.getValue()); + } + + @Override + public boolean copyTo(VendorTypeLocalVo v) { + boolean ret = super.copyTo(v); + if (!Objects.equals(v.getType(), type.get())) { + v.setType(type.get()); + ret = true; + } + if (!Objects.equals(v.getLang(), lang.get())) { + v.setLang(lang.get()); + ret = true; + } + if (!Objects.equals(v.getValue(), value.get())) { + v.setValue(value.get()); + ret = true; + } + return ret; + } } diff --git a/client/src/main/resources/ui/home.fxml b/client/src/main/resources/ui/home.fxml index 86a082a..8924b73 100644 --- a/client/src/main/resources/ui/home.fxml +++ b/client/src/main/resources/ui/home.fxml @@ -1,4 +1,5 @@ + @@ -29,7 +30,7 @@ + text="同步合同"/> @@ -49,10 +50,9 @@ - - + + + @@ -61,7 +61,7 @@