From 949b32b603a930395000f349aee532f24b95f481 Mon Sep 17 00:00:00 2001 From: mashuai Date: Thu, 7 Nov 2024 15:19:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/basic/mapper/TbPeopleMapper.java | 9 ++- .../service/impl/TbPeopleServiceImpl.java | 74 ++++++++++--------- .../mapper/base/basic/TbPeopleMapper.xml | 16 ++++ 3 files changed, 64 insertions(+), 35 deletions(-) diff --git a/bonus-modules/base/src/main/java/com/bonus/base/basic/mapper/TbPeopleMapper.java b/bonus-modules/base/src/main/java/com/bonus/base/basic/mapper/TbPeopleMapper.java index 01b79cd..29f7d70 100644 --- a/bonus-modules/base/src/main/java/com/bonus/base/basic/mapper/TbPeopleMapper.java +++ b/bonus-modules/base/src/main/java/com/bonus/base/basic/mapper/TbPeopleMapper.java @@ -1,11 +1,11 @@ package com.bonus.base.basic.mapper; import com.bonus.base.basic.domain.TbPeople; -import com.bonus.base.basic.domain.TbPeopleDto; import com.bonus.base.screen.vo.PeoplePositionVo; import com.bonus.system.api.domain.SysUser; import org.apache.ibatis.annotations.Param; +import java.util.ArrayList; import java.util.List; /** @@ -80,5 +80,12 @@ public interface TbPeopleMapper { * @return */ SysUser getUserById(Long userId); + + /** + * 根据身份证号查询人员信息 + * @param idCards + * @return + */ + List queryByIdCards(@Param("list") ArrayList idCards); } diff --git a/bonus-modules/base/src/main/java/com/bonus/base/basic/service/impl/TbPeopleServiceImpl.java b/bonus-modules/base/src/main/java/com/bonus/base/basic/service/impl/TbPeopleServiceImpl.java index 5cd7f6a..6f2eed1 100644 --- a/bonus-modules/base/src/main/java/com/bonus/base/basic/service/impl/TbPeopleServiceImpl.java +++ b/bonus-modules/base/src/main/java/com/bonus/base/basic/service/impl/TbPeopleServiceImpl.java @@ -382,45 +382,51 @@ public class TbPeopleServiceImpl implements TbPeopleService { int result = 0; // 使用一个 Set 来记录已经处理过的 idCard,避免重复处理相同的人员数据 Set processedIdCards = new HashSet<>(); + // 提前收集所有的 idCard,减少数据库查询次数 + Set allIdCards = new HashSet<>(); for (TbPeopleDto tbPeople : tbPeopleList) { - // 如果当前记录已经处理过,跳过 + allIdCards.add(tbPeople.getIdCard()); + } + // 批量查询数据库中所有的 idCard 对应的人员 + List existingPeopleList = tbPeopleDao.queryByIdCards(new ArrayList<>(allIdCards)); + // 创建一个 Map 来缓存已查询的人员信息,以 idCard 为 key + Map existingPeopleMap = new HashMap<>(); + for (TbPeople people : existingPeopleList) { + existingPeopleMap.put(Sm4Utils.decode(people.getIdCard()), people); + } + // 遍历 tbPeopleList 进行处理 + for (TbPeopleDto tbPeople : tbPeopleList) { + // 如果该 idCard 已处理,则跳过 if (processedIdCards.contains(tbPeople.getIdCard())) { continue; } - List peopleList = tbPeopleDao.queryByName(tbPeople); - if (CollectionUtils.isNotEmpty(peopleList)) { - for (TbPeople people : peopleList) { - if (StringUtils.isNotBlank(people.getIdCard()) && StringUtils.isNotBlank(tbPeople.getIdCard())) { - if (Objects.equals(Sm4Utils.decode(people.getIdCard()), tbPeople.getIdCard())) { - //进行更新操作 - TbPeople dto = new TbPeople(); - dto.setId(people.getId()); - dto.setUpdateUser(SecurityUtils.getUserId()); - dto.setDelFlag(0); - dto.setRelPhone(Sm4Utils.encode(tbPeople.getRelPhone())); - dto.setIdCard(Sm4Utils.encode(tbPeople.getIdCard())); - dto.setSex(tbPeople.getGender()); - dto.setRelName(tbPeople.getRelName()); - dto.setPostCode(tbPeople.getPostCode()); - result += tbPeopleDao.update(dto); - // 标记该 idCard 已处理 - processedIdCards.add(tbPeople.getIdCard()); - } else { - //新增操作 - TbPeople dto = new TbPeople(); - dto.setCreateUser(SecurityUtils.getUserId()); - dto.setRelPhone(Sm4Utils.encode(tbPeople.getRelPhone())); - dto.setIdCard(Sm4Utils.encode(tbPeople.getIdCard())); - dto.setSex(tbPeople.getGender()); - dto.setRelName(tbPeople.getRelName()); - dto.setPostCode(tbPeople.getPostCode()); - result += tbPeopleDao.insert(dto); - // 标记该 idCard 已处理 - processedIdCards.add(tbPeople.getIdCard()); - } - } - } + // 查找是否已有此人员数据 + TbPeople existingPeople = existingPeopleMap.get(tbPeople.getIdCard()); + if (existingPeople != null) { + // 如果找到相应的人员并且 idCard 匹配,执行更新操作 + TbPeople dto = new TbPeople(); + dto.setId(existingPeople.getId()); + dto.setUpdateUser(SecurityUtils.getUserId()); + dto.setDelFlag(0); + dto.setRelPhone(Sm4Utils.encode(tbPeople.getRelPhone())); + dto.setIdCard(Sm4Utils.encode(tbPeople.getIdCard())); + dto.setSex(tbPeople.getGender()); + dto.setRelName(tbPeople.getRelName()); + dto.setPostCode(tbPeople.getPostCode()); + result += tbPeopleDao.update(dto); + } else { + // 否则进行新增操作 + TbPeople dto = new TbPeople(); + dto.setCreateUser(SecurityUtils.getUserId()); + dto.setRelPhone(Sm4Utils.encode(tbPeople.getRelPhone())); + dto.setIdCard(Sm4Utils.encode(tbPeople.getIdCard())); + dto.setSex(tbPeople.getGender()); + dto.setRelName(tbPeople.getRelName()); + dto.setPostCode(tbPeople.getPostCode()); + result += tbPeopleDao.insert(dto); } + // 标记该 idCard 已处理 + processedIdCards.add(tbPeople.getIdCard()); } if (result > 0) { return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); diff --git a/bonus-modules/base/src/main/resources/mapper/base/basic/TbPeopleMapper.xml b/bonus-modules/base/src/main/resources/mapper/base/basic/TbPeopleMapper.xml index 882dc42..24dcc1d 100644 --- a/bonus-modules/base/src/main/resources/mapper/base/basic/TbPeopleMapper.xml +++ b/bonus-modules/base/src/main/resources/mapper/base/basic/TbPeopleMapper.xml @@ -157,5 +157,21 @@ select user_id as userId, user_name as userName, password as password from sys_user where user_id = #{userId} + +