26年寒假生活指导1.29
-
工作背景 (Context)
为了提升日结单填报的用户体验并确保数据一致性,今日主要任务是实现“关联对象”选择的级联筛选功能。
需求目标:
产品 > 客户:选择“关联产品”后,“关联客户”列表应仅显示购买过该产品的客户。
客户 > 合同:选择“关联客户”后,“关联合同”列表应仅显示属于该客户的合同。
合同 > 事务:选择“关联合同”后,“关联事务”列表应仅显示属于该合同/项目的事务。 -
遇到问题 (Issues)
在开发过程中主要解决了以下技术阻碍:
框架能力缺失:后端基础服务接口BaseService缺失标准统计方法selectCount,导致在 Controller 中无法直接复用 Service 层进行数量统计。
前端参数传递中断:前端通用组件RelatedObjectSelect.vue原本设计仅支持基础搜索,未定义接收级联参数(如productId)的 props,导致父组件的筛选条件无法传递给后端。
后端筛选逻辑缺失:后端搜索接口/relatedobject/search原本只处理关键词模糊查询,未处理级联过滤逻辑。 -
解决方案 (Solutions)
3.1 后端框架扩展 (Infrastructure)
修改文件:[BaseService.java](file:///d:/jslh2/jslhcloud/jslhcloudtenant/jslhcommons/jslhcommonsmybatis/src/main/java/com/jslh/commons/mybatis/service/BaseService.java) & [BaseServiceImpl.java](file:///d:/jslh2/jslhcloud/jslhcloudtenant/jslhcommons/jslhcommonsmybatis/src/main/java/com/jslh/commons/mybatis/service/impl/BaseServiceImpl.java)
实现内容:
在接口中新增 selectCount(Wrapper<T> queryWrapper) 方法定义。
在实现类中通过 SqlHelper.retCount(baseDao.selectCount(queryWrapper)) 完成底层对接。
意义:为所有继承该基类的 Service(如 RjdProductInfoService)赋予了直接统计查询的能力,无需重复编写 DAO 层代码。
3.2 业务逻辑实现 (Business Logic)
修改文件:[RelatedObjectServiceImpl.java](file:///d:/jslh2/jslhcloud/jslhcloudtenant/jslhadmin/jslhadminserver/src/main/java/com/jslh/rjd/service/impl/RelatedObjectServiceImpl.java)
实现内容:
利用 MyBatisPlus 的 inSql 方法实现高效的子查询过滤。
代码示例:
java // 级联筛选:如果选择了产品,只显示购买过该产品的客户 if (productId != null) { wrapper.inSql("customer_id", "SELECT customer_id FROM rjd_contract_order_info WHERE product_id = " + productId + " AND del_flag = 0"); }
3.3 前端组件升级 (Frontend)
修改文件:[RelatedObjectSelect.vue](file:///d:/jslh2/jslhcloud/renrencloudtenantadmin/src/views/sys/RelatedObjectSelect.vue)
实现内容:
新增 productId, customerId, contractId props 定义。
在 performSearch 方法中,将这些 props 作为参数封装到 HTTP 请求中发送给后端。
修改文件:[rjddailyworkrecordaddorupdate.vue](file:///d:/jslh2/jslhcloud/renrencloudtenantadmin/src/views/sys/rjddailyworkrecordaddorupdate.vue)
实现内容:
在模板中实现响应式绑定,将父级字段的值实时传递给子组件。
代码示例:
html <RelatedObjectSelect ... :productId="currentDetail.relatedProductId" @change="handleCustomerChange" />
3.4 数据诊断工具 (Diagnostics)
修改文件:[RjdDailyWorkAnalysisController.java](file:///d:/jslh2/jslhcloud/jslhcloudtenant/jslhadmin/jslhadminserver/src/main/java/com/jslh/rjd/controller/RjdDailyWorkAnalysisController.java)
实现内容:
新增 /checkrelations 接口,用于快速检查数据库中是否存在有效的“产品客户合同”关联数据,辅助验证级联功能是否正常工作。
- 总结与反思 (Summary)
今日完成了日结单级联筛选的全栈实现。核心难点在于打通从前端组件 Props 到后端 SQL 子查询的完整参数传递链路。
经验:在处理级联筛选失效问题时,首先要检查前端请求 Payload 是否携带了预期参数,其次要检查数据库中是否存在满足级联条件的数据(数据完整性)。
收获:通过扩展 BaseService,不仅解决了当前编译报错,也为后续开发提供了便利的统计工具接口。

浙公网安备 33010602011771号