From 145cf89a89526ffd63770d367e0573143a151d8d Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Thu, 16 Jul 2026 09:43:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(emergency):=20addCareUsersToGroup=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=91=98=E5=B7=A5=E7=BC=96=E5=8F=B7=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=EF=BC=8C=E8=A7=A3=E5=86=B3=E6=89=8B=E6=9C=BA=E5=8F=B7=E4=B8=8D?= =?UTF-8?q?=E5=87=86=E7=9A=84TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据流: 安眼手机号 → AYGC_YWK.EMP_BASIC_INFO查EMPLOYEE_NUM → getUserListByWorkNoList → 本系统用户ID 变更: - LargeScreenDataMapper: 新增selectEmployeeNumsByPhones,INSTR模糊匹配支持多手机号字段 - EmergencyApiServiceImpl: 替换getUserByPhoneList直接匹配,改为两步反查;order_operator匹配同步调整 - 移除旧TODO注释 Co-Authored-By: Claude --- .../service/impl/EmergencyApiServiceImpl.java | 54 ++++++++++++++----- .../mapper/LargeScreenDataMapper.java | 12 +++++ .../mapper/xml/LargeScreenDataMapper.xml | 16 ++++++ 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java index 9c071a9..c491646 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java @@ -13,6 +13,7 @@ import com.renkang.anyan.client.AnYanClient; import com.renkang.anyan.model.dto.EmergencyContactParam; import com.renkang.anyan.model.vo.EmergencyContactVO; import com.renkang.emergency.api.service.EmergencyApiService; +import com.renkang.emergency.largeScreen.mapper.LargeScreenDataMapper; import com.renkang.emergency.bean.request.CallBack; import com.renkang.emergency.bean.request.EmergencyCall; import com.renkang.emergency.bean.request.EmergencySocket; @@ -126,6 +127,8 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { private EmergencyProfessionUserMapper emergencyProfessionUserMapper; @Autowired private AnYanClient anYanClient; + @Autowired + private LargeScreenDataMapper largeScreenDataMapper; @Override @@ -989,7 +992,7 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { /** * 拉入关爱联络员和急救人员到群聊 - *

通过手机号匹配安眼系统联系人 → 本系统用户ID

+ *

通过安眼返回的手机号 → EMP_BASIC_INFO查询员工编号 → 本系统用户ID

* * @param userId 发起人ID * @param groupId IM群组ID @@ -1035,17 +1038,38 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { return; } - // 4. 手机号反查本系统用户ID + // 4. 手机号 → EMP_BASIC_INFO 反查员工编号 List phones = new ArrayList<>(phoneRoleMap.keySet()); - Result> userResult = sysBaseAPI.getUserByPhoneList(phones); - if (!userResult.isSuccess() || CollUtil.isEmpty(userResult.getResult())) { - log.warn("关爱/急救人员手机号均未匹配到本系统用户, phones={}", phones); + List> empBasicList = largeScreenDataMapper.selectEmployeeNumsByPhones(phones); + if (CollUtil.isEmpty(empBasicList)) { + log.warn("关爱/急救人员手机号均未匹配到EMP_BASIC_INFO, phones={}", phones); return; } - List sysUsers = userResult.getResult(); - log.info("关爱/急救人员手机号匹配到{}个系统用户, phones={}", sysUsers.size(), phones); + // 构建 phone → employeeNum 映射(拆分多手机号字段,\D+匹配任意非数字分隔符) + Map phoneWorkNoMap = new LinkedHashMap<>(); + for (Map row : empBasicList) { + String phoneField = row.get("phone"); + String employeeNum = row.get("employeeNum"); + if (StrUtil.isNotBlank(phoneField) && StrUtil.isNotBlank(employeeNum)) { + for (String singlePhone : phoneField.split("\\D+")) { + if (StrUtil.isNotBlank(singlePhone)) { + phoneWorkNoMap.put(singlePhone, employeeNum); + } + } + } + } + log.info("手机号匹配到{}个EMP_BASIC_INFO员工编号, phones={}", phoneWorkNoMap.size(), phones); - // 5. 拉入IM群聊 + // 5. 员工编号 → 本系统用户ID + List workNoList = new ArrayList<>(phoneWorkNoMap.values()); + List sysUsers = sysBaseAPI.getUserListByWorkNoList(workNoList); + if (CollUtil.isEmpty(sysUsers)) { + log.warn("关爱/急救人员员工编号均未匹配到本系统用户, workNos={}", workNoList); + return; + } + log.info("关爱/急救人员员工编号匹配到{}个系统用户, workNos={}", sysUsers.size(), workNoList); + + // 6. 拉入IM群聊 List memberAccounts = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()); AddGroupMemberDTO addDto = new AddGroupMemberDTO(); addDto.setGroupId(groupId); @@ -1064,13 +1088,19 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { // IM拉人失败不影响建群流程,继续写入 order_operator } - // 6. 写入 order_operator 表 + // 7. 写入 order_operator 表 Date now = new Date(); Map userIdRoleMap = new HashMap<>(); for (SysUser sysUser : sysUsers) { - for (Map.Entry entry : phoneRoleMap.entrySet()) { - if (entry.getKey().equals(sysUser.getPhone())) { - userIdRoleMap.put(sysUser.getId(), entry.getValue()); + String sysUserWorkNo = sysUser.getWorkNo(); + if (StrUtil.isBlank(sysUserWorkNo)) { + continue; + } + // 遍历 phoneRoleMap 反查:phone → phoneWorkNoMap.get(phone) → 匹配 workNo + for (Map.Entry roleEntry : phoneRoleMap.entrySet()) { + String mappedWorkNo = phoneWorkNoMap.get(roleEntry.getKey()); + if (sysUserWorkNo.equals(mappedWorkNo)) { + userIdRoleMap.put(sysUser.getId(), roleEntry.getValue()); break; } } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/LargeScreenDataMapper.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/LargeScreenDataMapper.java index bb0737f..2375d3a 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/LargeScreenDataMapper.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/LargeScreenDataMapper.java @@ -6,6 +6,9 @@ import com.renkang.emergency.largeScreen.entity.vo.OnePersonCaseVO; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; +import java.util.Map; + /** * @Description: large_screen * @Author: wang hao @@ -32,4 +35,13 @@ public interface LargeScreenDataMapper extends MPJBaseMapper { */ OnePersonCaseVO selectOnePersonCase(@Param("idCard") String idCard); + /** + * 根据手机号批量查询 EMP_BASIC_INFO 的员工编号 + * SQL 见同包 xml/LargeScreenDataMapper.xml + * + * @param phones 手机号集合 + * @return 手机号→员工编号映射列表 (key: PHONE, EMPLOYEE_NUM) + */ + List> selectEmployeeNumsByPhones(@Param("phones") List phones); + } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/xml/LargeScreenDataMapper.xml b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/xml/LargeScreenDataMapper.xml index 3e1cc48..550b7d1 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/xml/LargeScreenDataMapper.xml +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/largeScreen/mapper/xml/LargeScreenDataMapper.xml @@ -188,4 +188,20 @@ FETCH FIRST 1 ROWS ONLY + + +