shinnosuke
2026-08-13 1515d630f9f67e847d639beaa6ca9d894f22ece6
fix(family-card): 支持持卡人身份证模糊查询
4个文件已修改
22 ■■■■■ 已修改文件
talent-card-admin/src/views/FamilyCardView.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/admin/DependentCardApplyAdminController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/service/DependentCardApplyAdminService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/service/DependentCardApplyAdminServiceTests.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-admin/src/views/FamilyCardView.vue
@@ -179,7 +179,7 @@
          <el-input v-model="filters.familyKeyword" :placeholder="isManagement ? '家属姓名、手机号' : '请输入家属姓名、手机号或身份证号'" clearable />
        </el-form-item>
        <el-form-item label="持卡人" :class="{ 'family-card-filter-talent': isManagement }">
          <el-input v-model="filters.talentKeyword" placeholder="持卡人姓名、手机号、卡号" clearable />
          <el-input v-model="filters.talentKeyword" placeholder="持卡人姓名、手机号、身份证号或卡号" clearable />
        </el-form-item>
        <el-form-item label="卡片等级">
          <el-select v-model="filters.cardLevel" placeholder="全部" clearable>
talent-card-server/src/main/java/com/talentcard/server/business/admin/DependentCardApplyAdminController.java
@@ -40,7 +40,7 @@
    public ApiResponse<PageResult<DependentCardApplyAdminResponse>> page(
            @Parameter(description = "主卡ID") @RequestParam(required = false) Long talentCardId,
            @Parameter(description = "家属姓名、手机号或身份证号") @RequestParam(required = false) String familyKeyword,
            @Parameter(description = "持卡人姓名、手机号或卡号") @RequestParam(required = false) String talentKeyword,
            @Parameter(description = "持卡人姓名、手机号、身份证号或卡号") @RequestParam(required = false) String talentKeyword,
            @Parameter(description = "卡片等级") @RequestParam(required = false) String cardLevel,
            @Parameter(description = "状态:0待审核、1已通过、2已驳回、3已取消") @RequestParam(required = false) Integer status,
            @Parameter(description = "申请开始日期") @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate applyStart,
talent-card-server/src/main/java/com/talentcard/server/service/DependentCardApplyAdminService.java
@@ -82,7 +82,9 @@
                        .or()
                        .like(DependentCardApply::getTalentMobile, talentKeyword.trim())
                        .or()
                        .like(DependentCardApply::getTalentCardNo, talentKeyword.trim()))
                        .like(DependentCardApply::getTalentCardNo, talentKeyword.trim())
                        .or()
                        .apply("exists (select 1 from talent_user u where u.id = dependent_card_apply.talent_id and u.deleted = 0 and u.id_card_no like concat('%', {0}, '%'))", talentKeyword.trim()))
                .ge(applyStart != null, DependentCardApply::getApplyTime, applyStart == null ? null : applyStart.atStartOfDay())
                .lt(applyEnd != null, DependentCardApply::getApplyTime, applyEnd == null ? null : applyEnd.plusDays(1).atStartOfDay());
        long total = mapper.selectCount(query);
talent-card-server/src/test/java/com/talentcard/server/service/DependentCardApplyAdminServiceTests.java
@@ -11,6 +11,7 @@
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.talentcard.server.common.BusinessException;
@@ -86,6 +87,19 @@
                .hasMessageContaining("正常或已解绑");
    }
    @Test
    void talentKeywordIncludesIdCardFuzzySearch() {
        when(mapper.selectCount(any(Wrapper.class))).thenReturn(0L);
        service.page(null, null, "510105", null, null, null, null, false, 1, 10);
        ArgumentCaptor<LambdaQueryWrapper<DependentCardApply>> queryCaptor = ArgumentCaptor.forClass(LambdaQueryWrapper.class);
        verify(mapper).selectCount(queryCaptor.capture());
        LambdaQueryWrapper<DependentCardApply> query = queryCaptor.getValue();
        assertThat(query.getSqlSegment()).contains("talent_user", "id_card_no like concat");
        assertThat(query.getParamNameValuePairs()).containsValue("510105");
    }
    private DependentCardApply applicationWithStatus(int status) {
        DependentCardApply apply = new DependentCardApply(
                "DCA-001", 1L, 2L, "持卡人", "13900000000", "TC-001", "卓越人才卡",