From 45eed8281f0d9b7aff73e135200b281d98ea145b Mon Sep 17 00:00:00 2001 From: songqq Date: Wed, 24 Sep 2025 00:11:21 +0800 Subject: [PATCH] docs --- .trae/rules/project_rules.md | 78 ++++++++++++++----- .../customer/CompanyCustomerManagerSkin.java | 7 +- ...ompanyCustomerManagerWindowController.java | 2 +- .../CustomerTabSkinSatisfactionSurvey.java | 2 +- .../contract/vm/CompanyCustomerViewModel.java | 7 ++ .../customer-tab-satisfaction-survey.fxml | 5 +- .../ecep/contract/model/CompanyCustomer.java | 9 +++ .../ecep/contract/vo/CompanyCustomerVo.java | 1 + .../CustomerSatisfactionSurveyService.java | 12 ++- 9 files changed, 98 insertions(+), 25 deletions(-) diff --git a/.trae/rules/project_rules.md b/.trae/rules/project_rules.md index 06e3a7a..d9dae67 100644 --- a/.trae/rules/project_rules.md +++ b/.trae/rules/project_rules.md @@ -1,26 +1,68 @@ +# Contract-Manager 项目规则 +## 技术栈规范 -# server 模块 -Java 21 -Spring Boot 3.3.7 -Spring Data JPA 3.3.7 -MySQL 8.0.33 -Lombok 1.18.32 -POI 5.2.5 -PDFBox 3.0.1 -Redis +### server 模块 +- Java 21 +- Spring Boot 3.3.7 +- Spring Data JPA 3.3.7 +- MySQL 8.0.33 +- Lombok 1.18.32 +- POI 5.2.5 +- PDFBox 3.0.1 +- Redis -# client 模块 -Java 21 -JavaFX 21 -ControlsFX 11.1.2 -Lombok 1.18.32 -caffeine 3.1.8 -.fxml 界面UI, /client/src/main/resources/ui/ 目录下 -websocket 与 server 模块通信 +### client 模块 +- Java 21 +- JavaFX 21 +- ControlsFX 11.1.2 +- Lombok 1.18.32 +- caffeine 3.1.8 +- .fxml 界面UI, 放置于 /client/src/main/resources/ui/ 目录下 +- websocket 与 server 模块通信 -# common 模块 +### common 模块 +- Java 21 +- Lombok 1.18.32 +## 文件命名规范 +- Java类名:使用驼峰命名法,首字母大写,如 `ContractService.java` +- 接口名:使用驼峰命名法,首字母大写,以I开头,如 `IContractService.java` +- 控制器类名:以Controller结尾,如 `ContractController.java` +- 服务类名:以Service结尾,如 `ContractService.java` +- 实体类名:使用驼峰命名法,首字母大写,如 `Contract.java` +- FXML文件:使用小写字母和下划线,如 `contract_view.fxml` +- SQL文件:表名使用大写和下划线,如 `CONTRACT_TYPE_LOCAL.sql` + +## 目录结构规范 +- 源代码位于 `src/main/java` 目录 +- 资源文件位于 `src/main/resources` 目录 +- 测试代码位于 `src/test` 目录 +- 数据库脚本位于 `docs/db` 目录 + +## 数据库规范 +- 表名使用大写字母和下划线,如 `COMPANY_VENDOR_FILE_TYPE_LOCAL` +- 字段名使用大写字母和下划线,如 `CREATE_DATE` +- 主键命名为 `ID` +- 外键命名格式为 `[关联表名]_ID` +- 唯一约束命名格式为 `UK_[表名缩写]_[字段名]` + +## 代码规范 +- 使用Lombok注解简化代码,如 `@Data`、`@Slf4j` 等 +- 类和方法应有适当的JavaDoc注释 +- 变量命名应清晰表达其含义 +- 避免魔法数字,使用常量替代 +- 异常处理使用统一的异常处理机制 + +## 忽略文件 ignore: - .idea - target + - *.iml + - .gitignore + - .gitattributes + - out/ + - *.log + - build/ + - .DS_Store + - *.class diff --git a/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerSkin.java b/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerSkin.java index 86221f6..60b6e69 100644 --- a/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerSkin.java +++ b/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerSkin.java @@ -3,8 +3,10 @@ package com.ecep.contract.controller.customer; import com.ecep.contract.MyDateTimeUtils; import com.ecep.contract.controller.AbstEntityManagerSkin; import com.ecep.contract.controller.table.cell.CompanyTableCell; +import com.ecep.contract.controller.table.cell.CustomerCatalogTableCell; import com.ecep.contract.service.CompanyCustomerService; import com.ecep.contract.service.CompanyService; +import com.ecep.contract.service.CustomerCatalogService; import com.ecep.contract.vm.CompanyCustomerViewModel; import com.ecep.contract.vo.CompanyCustomerVo; import com.ecep.contract.vo.CompanyVo; @@ -31,7 +33,10 @@ public class CompanyCustomerManagerSkin public void initializeTable() { controller.idColumn.setCellValueFactory(param -> param.getValue().getId()); controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany()); - controller.companyColumn.setCellFactory(param -> new CompanyTableCell<>(getCompanyService())); + controller.companyColumn.setCellFactory(CompanyTableCell.forTableColumn(getCompanyService())); + + controller.catalogColumn.setCellValueFactory(param -> param.getValue().getCatalog()); + controller.catalogColumn.setCellFactory(CustomerCatalogTableCell.forTableColumn(getBean(CustomerCatalogService.class))); controller.developDateColumn.setCellValueFactory(param -> param.getValue().getDevelopDate()); controller.pathColumn.setCellValueFactory(param -> param.getValue().getPath()); diff --git a/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerWindowController.java b/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerWindowController.java index 9da0731..598604c 100644 --- a/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerManagerWindowController.java @@ -52,7 +52,7 @@ public class CompanyCustomerManagerWindowController * 客户所属公司,Company */ public TableColumn companyColumn; - public TableColumn catalogColumn; + public TableColumn catalogColumn; public TableColumn developDateColumn; public TableColumn pathColumn; public TableColumn createdColumn; diff --git a/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinSatisfactionSurvey.java b/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinSatisfactionSurvey.java index 06b084c..72b6a5d 100644 --- a/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinSatisfactionSurvey.java +++ b/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinSatisfactionSurvey.java @@ -68,7 +68,7 @@ public class CustomerTabSkinSatisfactionSurvey bindLocalDateColumn(dateColumn, CustomerSatisfactionSurveyViewModel::getDate); bindNumberColumn(totalScoreColumn, CustomerSatisfactionSurveyViewModel::getTotalScore); applicantColumn.setCellValueFactory(param -> param.getValue().getApplicant()); - applicantColumn.setCellFactory(cell -> new EmployeeTableCell<>(getEmployeeService())); + applicantColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService())); bindLocalDateTimeColumn(applyTimeColumn, CustomerSatisfactionSurveyViewModel::getApplyTime); bindColumn(descriptionColumn, CustomerSatisfactionSurveyViewModel::getDescription); diff --git a/client/src/main/java/com/ecep/contract/vm/CompanyCustomerViewModel.java b/client/src/main/java/com/ecep/contract/vm/CompanyCustomerViewModel.java index 9146873..0ea622c 100644 --- a/client/src/main/java/com/ecep/contract/vm/CompanyCustomerViewModel.java +++ b/client/src/main/java/com/ecep/contract/vm/CompanyCustomerViewModel.java @@ -20,6 +20,8 @@ public class CompanyCustomerViewModel extends IdentityViewModel company = new SimpleObjectProperty<>(); + + private SimpleObjectProperty catalog = new SimpleObjectProperty<>(); /** * 发展日期 */ @@ -46,6 +48,7 @@ public class CompanyCustomerViewModel extends IdentityViewModel + fx:controller="com.ecep.contract.controller.customer.CustomerTabSkinSatisfactionSurvey"> @@ -41,7 +41,8 @@ - diff --git a/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java b/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java index fe63581..d793230 100644 --- a/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java +++ b/common/src/main/java/com/ecep/contract/model/CompanyCustomer.java @@ -43,6 +43,14 @@ public class CompanyCustomer implements IdentityEntity, CompanyBasedEntity, Seri @ToString.Exclude private Company company; + /** + * 客户分组 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "CUS_CLS") + @ToString.Exclude + private CustomerCatalog catalog; + /** * 发展日期 */ @@ -97,6 +105,7 @@ public class CompanyCustomer implements IdentityEntity, CompanyBasedEntity, Seri CompanyCustomerVo vo = new CompanyCustomerVo(); vo.setId(id); vo.setCompanyId(company != null ? company.getId() : null); + vo.setCatalogId(catalog != null ? catalog.getId() : null); vo.setDevelopDate(developDate); vo.setPath(path); vo.setContactId(contact != null ? contact.getId() : null); diff --git a/common/src/main/java/com/ecep/contract/vo/CompanyCustomerVo.java b/common/src/main/java/com/ecep/contract/vo/CompanyCustomerVo.java index 71cfdcd..580d277 100644 --- a/common/src/main/java/com/ecep/contract/vo/CompanyCustomerVo.java +++ b/common/src/main/java/com/ecep/contract/vo/CompanyCustomerVo.java @@ -14,6 +14,7 @@ public class CompanyCustomerVo implements IdentityEntity, CompanyBasedVo { * 公司 */ private Integer companyId; + private Integer catalogId; private LocalDate developDate; private String path; /** diff --git a/server/src/main/java/com/ecep/contract/ds/project/service/CustomerSatisfactionSurveyService.java b/server/src/main/java/com/ecep/contract/ds/project/service/CustomerSatisfactionSurveyService.java index 95496c7..5600328 100644 --- a/server/src/main/java/com/ecep/contract/ds/project/service/CustomerSatisfactionSurveyService.java +++ b/server/src/main/java/com/ecep/contract/ds/project/service/CustomerSatisfactionSurveyService.java @@ -3,6 +3,7 @@ package com.ecep.contract.ds.project.service; import java.util.List; import com.ecep.contract.QueryService; +import com.ecep.contract.constant.ServiceConstant; import com.ecep.contract.model.CompanyBankAccount; import com.ecep.contract.util.SpecificationUtils; import com.fasterxml.jackson.databind.JsonNode; @@ -94,8 +95,15 @@ public class CustomerSatisfactionSurveyService @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSpecification(paramsNode.get("searchText").asText()); + if (paramsNode.has(ServiceConstant.KEY_SEARCH_TEXT)) { + spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); + } + + if (paramsNode.has("project.customer")) { + int customerId = paramsNode.get("project.customer").asInt(); + spec = SpecificationUtils.and(spec, (root, query, builder) -> { + return builder.equal(root.get("project").get("customer").get("id"), customerId); + }); } // field spec = SpecificationUtils.andParam(spec, paramsNode, "project", "applicant");