feat(bi): 报警记录和人员定位接口支持分页功能

master
zhaokai 2026-08-07 08:41:20 +08:00
parent 8d74a7b96b
commit 0a705c28ed
4 changed files with 32 additions and 6 deletions

View File

@ -109,7 +109,9 @@ class PositionPersonLocalLookupService {
Map<String, String> result = new LinkedHashMap<>();
for (List<String> batch : batches(idCardNos)) {
for (TerminalBindingSnapshotDO binding : personnelMatchRepository.listTerminalBindingsByIdCardNos(batch)) {
String idCardNo = normalize(binding.getIdCardNo());
String bindingIdCardNo = normalize(binding.getBindingIdCardNo());
String idCardNo = StringUtils.hasText(bindingIdCardNo)
? bindingIdCardNo : normalize(binding.getTerminalIdCardNo());
String terminalNo = normalize(binding.getTerminalNo());
if (StringUtils.hasText(idCardNo) && StringUtils.hasText(terminalNo)) {
result.putIfAbsent(idCardNo, terminalNo);

View File

@ -4,6 +4,7 @@ import lombok.Data;
@Data
public class TerminalBindingSnapshotDO {
private String idCardNo;
private String bindingIdCardNo;
private String terminalIdCardNo;
private String terminalNo;
}

View File

@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -63,6 +64,9 @@ public class PersonnelMatchRepositoryImpl implements PersonnelMatchRepository {
return personnelMatchMapper.listPeopleByTerminalNos(values);
}
@Override public List<TerminalBindingSnapshotDO> listTerminalBindingsByIdCardNos(List<String> values) {
if (values == null || values.isEmpty()) {
return Collections.emptyList();
}
return personnelMatchMapper.listTerminalBindingsByIdCardNos(values);
}
@Override public List<TerminalLocationSnapshotDO> listTerminals(List<String> values) {

View File

@ -123,7 +123,8 @@
ORDER BY t.terminal_no, u.id DESC
</select>
<select id="listTerminalBindingsByIdCardNos" resultType="com.zcloud.personnel.positioning.persistence.dataobject.TerminalBindingSnapshotDO">
SELECT COALESCE(NULLIF(TRIM(tb.id_card_no), ''), NULLIF(TRIM(t.bind_id_card_no), '')) AS id_card_no,
SELECT tb.id_card_no AS binding_id_card_no,
t.bind_id_card_no AS terminal_id_card_no,
t.terminal_no
FROM terminal t
LEFT JOIN terminal_bind tb ON tb.id = (
@ -132,9 +133,27 @@
AND (tb2.delete_enum IS NULL OR tb2.delete_enum = 'FALSE')
ORDER BY tb2.bind_time DESC, tb2.id DESC LIMIT 1)
WHERE (t.delete_enum IS NULL OR t.delete_enum = 'FALSE')
AND COALESCE(NULLIF(TRIM(tb.id_card_no), ''), NULLIF(TRIM(t.bind_id_card_no), '')) IN
<foreach collection="values" item="value" open="(" separator="," close=")">#{value}</foreach>
ORDER BY id_card_no, t.update_time DESC, t.id DESC
<choose>
<when test="values != null and values.size() > 0">
AND (
tb.id_card_no IN
<foreach collection="values" item="value" open="(" separator="," close=")">
#{value}
</foreach>
OR (
(tb.id_card_no IS NULL OR tb.id_card_no = '')
AND t.bind_id_card_no IN
<foreach collection="values" item="value" open="(" separator="," close=")">
#{value}
</foreach>
)
)
</when>
<otherwise>
AND 1 = 0
</otherwise>
</choose>
ORDER BY binding_id_card_no, terminal_id_card_no, t.update_time DESC, t.id DESC
</select>
<select id="listTerminals" resultType="com.zcloud.personnel.positioning.persistence.dataobject.TerminalLocationSnapshotDO">
SELECT terminal_no, device_type, device_status, last_location_time, last_location_name