feat(crm): 添加关键字搜索功能

- 在 CrmContractBo 中添加 keyword 字段支持合同多字段搜索
- 在 CrmCustomerBo 中添加 keyword 字段支持客户多字段搜索
- 在 CrmOrderBo 中添加 keyword 字段支持订单多字段搜索
- 实现合同服务的关键字搜索逻辑,支持合同名称、编号、供应商、客户等多个字段
- 实现客户服务的关键字搜索逻辑,支持客户代码、公司名称、联系人等多个字段
- 实现订单服务的关键字搜索逻辑,支持订单代码、客户ID、业务员等多个字段
- 添加搜索条件的空值校验避免无效查询
This commit is contained in:
2026-04-07 11:42:30 +08:00
parent d67054d891
commit e32739cb09
6 changed files with 56 additions and 0 deletions

View File

@@ -152,5 +152,10 @@ public class CrmContractBo extends BaseEntity {
*/
private String remark;
/**
* 关键字搜索
*/
private String keyword;
}

View File

@@ -72,5 +72,10 @@ public class CrmCustomerBo extends BaseEntity {
*/
private String remark;
/**
* 关键字搜索
*/
private String keyword;
}

View File

@@ -105,5 +105,10 @@ public class CrmOrderBo extends BaseEntity {
*/
private String annexFiles;
/**
* 关键字搜索
*/
private String keyword;
}

View File

@@ -61,6 +61,26 @@ public class CrmContractServiceImpl implements ICrmContractService {
private LambdaQueryWrapper<CrmContract> buildQueryWrapper(CrmContractBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<CrmContract> lqw = Wrappers.lambdaQuery();
if (StringUtils.isNotBlank(bo.getKeyword())) {
lqw.and(w -> w.like(CrmContract::getContractName, bo.getKeyword())
.or().like(CrmContract::getContractNo, bo.getKeyword())
.or().like(CrmContract::getSupplier, bo.getKeyword())
.or().like(CrmContract::getCustomer, bo.getKeyword())
.or().like(CrmContract::getSignLocation, bo.getKeyword())
.or().like(CrmContract::getProductContent, bo.getKeyword())
.or().like(CrmContract::getContractContent, bo.getKeyword())
.or().like(CrmContract::getSupplierAddress, bo.getKeyword())
.or().like(CrmContract::getSupplierPhone, bo.getKeyword())
.or().like(CrmContract::getSupplierBank, bo.getKeyword())
.or().like(CrmContract::getSupplierAccount, bo.getKeyword())
.or().like(CrmContract::getSupplierTaxNo, bo.getKeyword())
.or().like(CrmContract::getCustomerAddress, bo.getKeyword())
.or().like(CrmContract::getCustomerPhone, bo.getKeyword())
.or().like(CrmContract::getCustomerBank, bo.getKeyword())
.or().like(CrmContract::getCustomerAccount, bo.getKeyword())
.or().like(CrmContract::getCustomerTaxNo, bo.getKeyword())
.or().like(CrmContract::getRemark, bo.getKeyword()));
}
lqw.like(StringUtils.isNotBlank(bo.getContractName()), CrmContract::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getContractNo()), CrmContract::getContractNo, bo.getContractNo());
lqw.eq(StringUtils.isNotBlank(bo.getSupplier()), CrmContract::getSupplier, bo.getSupplier());

View File

@@ -61,6 +61,18 @@ public class CrmCustomerServiceImpl implements ICrmCustomerService {
private LambdaQueryWrapper<CrmCustomer> buildQueryWrapper(CrmCustomerBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<CrmCustomer> lqw = Wrappers.lambdaQuery();
if (StringUtils.isNotBlank(bo.getKeyword())) {
lqw.and(w -> w.like(CrmCustomer::getCustomerCode, bo.getKeyword())
.or().like(CrmCustomer::getCompanyName, bo.getKeyword())
.or().like(CrmCustomer::getContactPerson, bo.getKeyword())
.or().like(CrmCustomer::getContactWay, bo.getKeyword())
.or().like(CrmCustomer::getIndustry, bo.getKeyword())
.or().like(CrmCustomer::getCustomerLevel, bo.getKeyword())
.or().like(CrmCustomer::getAddress, bo.getKeyword())
.or().like(CrmCustomer::getBankInfo, bo.getKeyword())
.or().like(CrmCustomer::getTaxNumber, bo.getKeyword())
.or().like(CrmCustomer::getRemark, bo.getKeyword()));
}
lqw.eq(StringUtils.isNotBlank(bo.getCustomerCode()), CrmCustomer::getCustomerCode, bo.getCustomerCode());
lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), CrmCustomer::getCompanyName, bo.getCompanyName());
lqw.like(StringUtils.isNotBlank(bo.getContactPerson()), CrmCustomer::getContactPerson, bo.getContactPerson());

View File

@@ -82,6 +82,15 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
private QueryWrapper<CrmOrder> buildQueryWrapperPlus(CrmOrderBo bo) {
Map<String, Object> params = bo.getParams();
QueryWrapper<CrmOrder> qw = Wrappers.query();
if (StringUtils.isNotBlank(bo.getKeyword())) {
qw.and(w -> w.like("co.order_code", bo.getKeyword())
.or().like("co.customer_id", bo.getKeyword())
.or().like("co.salesman", bo.getKeyword())
.or().like("co.audit_user", bo.getKeyword())
.or().like("co.contract_code", bo.getKeyword())
.or().like("co.annex_files", bo.getKeyword())
.or().like("co.remark", bo.getKeyword()));
}
qw.eq(StringUtils.isNotBlank(bo.getOrderCode()), "co.order_code", bo.getOrderCode());
qw.eq(bo.getOrderType() != null, "co.order_type", bo.getOrderType());
qw.eq(StringUtils.isNotBlank(bo.getCustomerId()), "co.customer_id", bo.getCustomerId());