fix(emergency): addCareUsersToGroup改为员工编号匹配,解决手机号不准的TODO
数据流: 安眼手机号 → AYGC_YWK.EMP_BASIC_INFO查EMPLOYEE_NUM → getUserListByWorkNoList → 本系统用户ID 变更: - LargeScreenDataMapper: 新增selectEmployeeNumsByPhones,INSTR模糊匹配支持多手机号字段 - EmergencyApiServiceImpl: 替换getUserByPhoneList直接匹配,改为两步反查;order_operator匹配同步调整 - 移除旧TODO注释 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+42
-12
@@ -13,6 +13,7 @@ import com.renkang.anyan.client.AnYanClient;
|
|||||||
import com.renkang.anyan.model.dto.EmergencyContactParam;
|
import com.renkang.anyan.model.dto.EmergencyContactParam;
|
||||||
import com.renkang.anyan.model.vo.EmergencyContactVO;
|
import com.renkang.anyan.model.vo.EmergencyContactVO;
|
||||||
import com.renkang.emergency.api.service.EmergencyApiService;
|
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.CallBack;
|
||||||
import com.renkang.emergency.bean.request.EmergencyCall;
|
import com.renkang.emergency.bean.request.EmergencyCall;
|
||||||
import com.renkang.emergency.bean.request.EmergencySocket;
|
import com.renkang.emergency.bean.request.EmergencySocket;
|
||||||
@@ -126,6 +127,8 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
|||||||
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
|
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AnYanClient anYanClient;
|
private AnYanClient anYanClient;
|
||||||
|
@Autowired
|
||||||
|
private LargeScreenDataMapper largeScreenDataMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -989,7 +992,7 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 拉入关爱联络员和急救人员到群聊
|
* 拉入关爱联络员和急救人员到群聊
|
||||||
* <p>通过手机号匹配安眼系统联系人 → 本系统用户ID</p>
|
* <p>通过安眼返回的手机号 → EMP_BASIC_INFO查询员工编号 → 本系统用户ID</p>
|
||||||
*
|
*
|
||||||
* @param userId 发起人ID
|
* @param userId 发起人ID
|
||||||
* @param groupId IM群组ID
|
* @param groupId IM群组ID
|
||||||
@@ -1035,17 +1038,38 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 手机号反查本系统用户ID
|
// 4. 手机号 → EMP_BASIC_INFO 反查员工编号
|
||||||
List<String> phones = new ArrayList<>(phoneRoleMap.keySet());
|
List<String> phones = new ArrayList<>(phoneRoleMap.keySet());
|
||||||
Result<List<SysUser>> userResult = sysBaseAPI.getUserByPhoneList(phones);
|
List<Map<String, String>> empBasicList = largeScreenDataMapper.selectEmployeeNumsByPhones(phones);
|
||||||
if (!userResult.isSuccess() || CollUtil.isEmpty(userResult.getResult())) {
|
if (CollUtil.isEmpty(empBasicList)) {
|
||||||
log.warn("关爱/急救人员手机号均未匹配到本系统用户, phones={}", phones);
|
log.warn("关爱/急救人员手机号均未匹配到EMP_BASIC_INFO, phones={}", phones);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<SysUser> sysUsers = userResult.getResult();
|
// 构建 phone → employeeNum 映射(拆分多手机号字段,\D+匹配任意非数字分隔符)
|
||||||
log.info("关爱/急救人员手机号匹配到{}个系统用户, phones={}", sysUsers.size(), phones);
|
Map<String, String> phoneWorkNoMap = new LinkedHashMap<>();
|
||||||
|
for (Map<String, String> 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<String> workNoList = new ArrayList<>(phoneWorkNoMap.values());
|
||||||
|
List<SysUser> sysUsers = sysBaseAPI.getUserListByWorkNoList(workNoList);
|
||||||
|
if (CollUtil.isEmpty(sysUsers)) {
|
||||||
|
log.warn("关爱/急救人员员工编号均未匹配到本系统用户, workNos={}", workNoList);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log.info("关爱/急救人员员工编号匹配到{}个系统用户, workNos={}", sysUsers.size(), workNoList);
|
||||||
|
|
||||||
|
// 6. 拉入IM群聊
|
||||||
List<String> memberAccounts = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
|
List<String> memberAccounts = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
|
||||||
AddGroupMemberDTO addDto = new AddGroupMemberDTO();
|
AddGroupMemberDTO addDto = new AddGroupMemberDTO();
|
||||||
addDto.setGroupId(groupId);
|
addDto.setGroupId(groupId);
|
||||||
@@ -1064,13 +1088,19 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
|||||||
// IM拉人失败不影响建群流程,继续写入 order_operator
|
// IM拉人失败不影响建群流程,继续写入 order_operator
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. 写入 order_operator 表
|
// 7. 写入 order_operator 表
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
Map<String, Integer> userIdRoleMap = new HashMap<>();
|
Map<String, Integer> userIdRoleMap = new HashMap<>();
|
||||||
for (SysUser sysUser : sysUsers) {
|
for (SysUser sysUser : sysUsers) {
|
||||||
for (Map.Entry<String, Integer> entry : phoneRoleMap.entrySet()) {
|
String sysUserWorkNo = sysUser.getWorkNo();
|
||||||
if (entry.getKey().equals(sysUser.getPhone())) {
|
if (StrUtil.isBlank(sysUserWorkNo)) {
|
||||||
userIdRoleMap.put(sysUser.getId(), entry.getValue());
|
continue;
|
||||||
|
}
|
||||||
|
// 遍历 phoneRoleMap 反查:phone → phoneWorkNoMap.get(phone) → 匹配 workNo
|
||||||
|
for (Map.Entry<String, Integer> roleEntry : phoneRoleMap.entrySet()) {
|
||||||
|
String mappedWorkNo = phoneWorkNoMap.get(roleEntry.getKey());
|
||||||
|
if (sysUserWorkNo.equals(mappedWorkNo)) {
|
||||||
|
userIdRoleMap.put(sysUser.getId(), roleEntry.getValue());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -6,6 +6,9 @@ import com.renkang.emergency.largeScreen.entity.vo.OnePersonCaseVO;
|
|||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: large_screen
|
* @Description: large_screen
|
||||||
* @Author: wang hao
|
* @Author: wang hao
|
||||||
@@ -32,4 +35,13 @@ public interface LargeScreenDataMapper extends MPJBaseMapper<LargeScreenData> {
|
|||||||
*/
|
*/
|
||||||
OnePersonCaseVO selectOnePersonCase(@Param("idCard") String idCard);
|
OnePersonCaseVO selectOnePersonCase(@Param("idCard") String idCard);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据手机号批量查询 EMP_BASIC_INFO 的员工编号
|
||||||
|
* SQL 见同包 xml/LargeScreenDataMapper.xml
|
||||||
|
*
|
||||||
|
* @param phones 手机号集合
|
||||||
|
* @return 手机号→员工编号映射列表 (key: PHONE, EMPLOYEE_NUM)
|
||||||
|
*/
|
||||||
|
List<Map<String, String>> selectEmployeeNumsByPhones(@Param("phones") List<String> phones);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -188,4 +188,20 @@
|
|||||||
FETCH FIRST 1 ROWS ONLY
|
FETCH FIRST 1 ROWS ONLY
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 根据手机号批量查询EMP_BASIC_INFO的员工编号,INSTR模糊匹配支持任意分隔符的多手机号场景 -->
|
||||||
|
<select id="selectEmployeeNumsByPhones" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
b.PHONE AS "phone",
|
||||||
|
b.EMPLOYEE_NUM AS "employeeNum"
|
||||||
|
FROM
|
||||||
|
AYGC_YWK.EMP_BASIC_INFO b
|
||||||
|
WHERE
|
||||||
|
b.DEL_FLAG = '0'
|
||||||
|
AND (
|
||||||
|
<foreach collection="phones" item="phone" separator=" OR " open="(" close=")">
|
||||||
|
INSTR(b.PHONE, #{phone}) > 0
|
||||||
|
</foreach>
|
||||||
|
)
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user