diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/EmergencyOrderApiService.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/EmergencyOrderApiService.java index cba017c..a4d4278 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/EmergencyOrderApiService.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/EmergencyOrderApiService.java @@ -88,7 +88,7 @@ public interface EmergencyOrderApiService { IPage searchEmployee(String realname, String orgCode, String workNo, String phone, String excludeSessionId, Integer pageNo, Integer pageSize); /** - * 查询当前登录人参与的应急工单列表(sessionNow=1) + * 查询当前登录人参与的应急工单列表 + 自己发起/被救助的应急工单 */ IPage myParticipatedOrders(Integer pageNo, Integer pageSize); diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyOrderApiServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyOrderApiServiceImpl.java index 9e0337c..f13d5b1 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyOrderApiServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyOrderApiServiceImpl.java @@ -923,15 +923,8 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService { @Override public IPage searchExpert(String realname, String centerId, String excludeSessionId, Integer pageNo, Integer pageSize) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(EmergencyProfessionUser::getType, "6"); - if (StrUtil.isNotBlank(realname)) { - query.like(EmergencyProfessionUser::getRealname, realname); - } - if (StrUtil.isNotBlank(centerId)) { - query.eq(EmergencyProfessionUser::getCenterId, centerId); - } - // 排除已在群中的人员 + // ---- 1. 收集需要排除的userId(已在群中的人) ---- + Set excludeUserIds = new HashSet<>(); if (StrUtil.isNotBlank(excludeSessionId)) { Order order = orderMapper.selectOne(new LambdaQueryWrapper() .eq(Order::getSessionId, excludeSessionId)); @@ -939,67 +932,117 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService { List ops = orderOperatorMapper.selectList( new LambdaQueryWrapper() .eq(OrderOperator::getOrderId, order.getId())); - List existUserIds = ops.stream().map(OrderOperator::getUserId).collect(Collectors.toList()); - if (!existUserIds.isEmpty()) { - query.notIn(EmergencyProfessionUser::getUserId, existUserIds); - } + excludeUserIds.addAll(ops.stream().map(OrderOperator::getUserId).collect(Collectors.toList())); } } - Page page = new Page<>(pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10); - IPage result = emergencyProfessionUserMapper.selectPage(page, query); - // 批量查询系统用户信息,填充科室(部门)名称 - List userIds = result.getRecords().stream() + + // ---- 2. 查询 QH_EME_PROFESS_USER(急救专业人员) ---- + LambdaQueryWrapper profQuery = new LambdaQueryWrapper<>(); + profQuery.eq(EmergencyProfessionUser::getType, "6"); + if (StrUtil.isNotBlank(realname)) { + profQuery.like(EmergencyProfessionUser::getRealname, realname); + } + if (StrUtil.isNotBlank(centerId)) { + profQuery.eq(EmergencyProfessionUser::getCenterId, centerId); + } + if (!excludeUserIds.isEmpty()) { + profQuery.notIn(EmergencyProfessionUser::getUserId, excludeUserIds); + } + List profUsers = emergencyProfessionUserMapper.selectList(profQuery); + + // ---- 3. 查询 qh_con_doctor(咨询专家),排除已在 profUsers 或已在群中的 ---- + List skipIds = new ArrayList<>(excludeUserIds); + profUsers.forEach(u -> skipIds.add(u.getUserId())); + List doctorUsers = conDoctorMapper.searchDoctorByName(realname, skipIds); + + // ---- 4. 合并两条结果(profUsers 优先,doctorUsers 追加) ---- + Map mergedMap = new LinkedHashMap<>(); + for (EmergencyProfessionUser u : profUsers) { + mergedMap.put(u.getUserId(), u); + } + // 从 qh_con_doctor 来的记录,不入 mergedMap 时用 doctorName 兜底 realname/avatar + for (EmergencyProfessionUser u : doctorUsers) { + mergedMap.putIfAbsent(u.getUserId(), u); + } + List allRecords = new ArrayList<>(mergedMap.values()); + + // ---- 5. 批量查询 sys_user,统一填充 realname/avatar/phone/deptName ---- + List allUserIds = allRecords.stream() .map(EmergencyProfessionUser::getUserId).collect(Collectors.toList()); - if (!userIds.isEmpty()) { - Map userMap = emergencyCloudManager.listUser(userIds); - result.getRecords().forEach(prof -> { + if (!allUserIds.isEmpty()) { + Map userMap = emergencyCloudManager.listUser(allUserIds); + allRecords.forEach(prof -> { LoginUserNew sysUser = userMap.get(prof.getUserId()); - if (sysUser != null && StrUtil.isNotBlank(sysUser.getOrgCode())) { - prof.setDeptName(emergencyCacheManager.getUserDepart(sysUser.getOrgCode()).getDepartName()); - } if (sysUser != null) { - prof.setPhone(sysUser.getPhone()); + // 兜底:从 qh_con_doctor 来的记录没有 realname/avatar,用 sys_user 填充 + if (StrUtil.isBlank(prof.getRealname())) { + prof.setRealname(sysUser.getRealname()); + } + if (StrUtil.isBlank(prof.getAvatar())) { + prof.setAvatar(sysUser.getAvatar()); + } + if (StrUtil.isNotBlank(sysUser.getOrgCode())) { + prof.setDeptName(emergencyCacheManager.getUserDepart(sysUser.getOrgCode()).getDepartName()); + } + if (StrUtil.isBlank(prof.getPhone())) { + prof.setPhone(sysUser.getPhone()); + } } }); } - // 批量查询 con_doctor 专家资料,补充专家字段 - if (!userIds.isEmpty()) { - List doctorList = conDoctorMapper.selectDoctorByIds(userIds); + + // ---- 6. 对 profUsers 补充 qh_con_doctor 专家字段 ---- + List profUserIds = profUsers.stream() + .map(EmergencyProfessionUser::getUserId).collect(Collectors.toList()); + if (!profUserIds.isEmpty()) { + List doctorList = conDoctorMapper.selectDoctorByIds(profUserIds); if (CollectionUtils.isNotEmpty(doctorList)) { Map doctorMap = doctorList.stream() .collect(Collectors.toMap(EmergencyProfessionUser::getUserId, e -> e, (a, b) -> a)); - result.getRecords().forEach(prof -> { + profUsers.forEach(prof -> { EmergencyProfessionUser doc = doctorMap.get(prof.getUserId()); - if (doc == null) { - return; - } - prof.setDoctorName(doc.getDoctorName()); - prof.setDoctorNo(doc.getDoctorNo()); - prof.setPhoto(doc.getPhoto()); - prof.setResourceName(doc.getResourceName()); - prof.setDepartmentId(doc.getDepartmentId()); - prof.setDepartmentName(doc.getDepartmentName()); - prof.setDoctorTitle(doc.getDoctorTitle()); - prof.setDoctorJob(doc.getDoctorJob()); - prof.setDoctorStatus(doc.getDoctorStatus()); - prof.setIsAccept(doc.getIsAccept()); - prof.setDoctorType(doc.getDoctorType()); - prof.setAudioStatus(doc.getAudioStatus()); - prof.setTfJumpHoliday(doc.getTfJumpHoliday()); - prof.setExperience(doc.getExperience()); - prof.setSort(doc.getSort()); - prof.setTfRecommend(doc.getTfRecommend()); - prof.setIntroduction(doc.getIntroduction()); - // 已有字段,con_doctor 有值时覆盖为更权威的专家资料 - if (StrUtil.isNotBlank(doc.getGoodAt())) prof.setGoodAt(doc.getGoodAt()); - if (StrUtil.isNotBlank(doc.getSchool())) prof.setSchool(doc.getSchool()); - if (StrUtil.isNotBlank(doc.getEdu())) prof.setEdu(doc.getEdu()); + if (doc == null) return; + copyDoctorFields(doc, prof); }); } } + + // ---- 7. 内存分页 ---- + int total = allRecords.size(); + int pn = pageNo != null ? pageNo : 1; + int ps = pageSize != null ? pageSize : 10; + int fromIndex = Math.min((pn - 1) * ps, total); + int toIndex = Math.min(fromIndex + ps, total); + List pageRecords = allRecords.subList(fromIndex, toIndex); + + IPage result = new Page<>(pn, ps, total); + result.setRecords(pageRecords); return result; } + private void copyDoctorFields(EmergencyProfessionUser doc, EmergencyProfessionUser prof) { + prof.setDoctorName(doc.getDoctorName()); + prof.setDoctorNo(doc.getDoctorNo()); + prof.setPhoto(doc.getPhoto()); + prof.setResourceName(doc.getResourceName()); + prof.setDepartmentId(doc.getDepartmentId()); + prof.setDepartmentName(doc.getDepartmentName()); + prof.setDoctorTitle(doc.getDoctorTitle()); + prof.setDoctorJob(doc.getDoctorJob()); + prof.setDoctorStatus(doc.getDoctorStatus()); + prof.setIsAccept(doc.getIsAccept()); + prof.setDoctorType(doc.getDoctorType()); + prof.setAudioStatus(doc.getAudioStatus()); + prof.setTfJumpHoliday(doc.getTfJumpHoliday()); + prof.setExperience(doc.getExperience()); + prof.setSort(doc.getSort()); + prof.setTfRecommend(doc.getTfRecommend()); + prof.setIntroduction(doc.getIntroduction()); + if (StrUtil.isNotBlank(doc.getGoodAt())) prof.setGoodAt(doc.getGoodAt()); + if (StrUtil.isNotBlank(doc.getSchool())) prof.setSchool(doc.getSchool()); + if (StrUtil.isNotBlank(doc.getEdu())) prof.setEdu(doc.getEdu()); + } + @Override public IPage searchEmployee(String realname, String orgCode, String workNo, String phone, String excludeSessionId, Integer pageNo, Integer pageSize) { // 收集需要在结果中排除的用户ID @@ -1045,25 +1088,44 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService { @Override public IPage myParticipatedOrders(Integer pageNo, Integer pageSize) { String userId = GlobalUtils.getLoginUser().getId(); - // 1. 查当前登录人参与的所有工单ID(去重) - List orderIds = orderOperatorMapper.selectList( + // 1. 查当前登录人参与的工单ID(从order_operator表) + List participatedOrderIds = orderOperatorMapper.selectList( new LambdaQueryWrapper() .select(OrderOperator::getOrderId) .eq(OrderOperator::getUserId, userId) ).stream().map(OrderOperator::getOrderId).distinct().collect(Collectors.toList()); - if (CollectionUtils.isEmpty(orderIds)) { + + // 2. 查当前用户自己发起的或被救助的应急工单ID(从order表) + List ownOrderIds = orderMapper.selectList( + new LambdaQueryWrapper() + .select(Order::getId) + .and(w -> w.eq(Order::getInitiatorUserId, userId).or().eq(Order::getSalvageUserId, userId)) + .eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0) + .eq(Order::getStatus, 1) + ).stream().map(Order::getId).distinct().collect(Collectors.toList()); + + // 3. 合并去重 + Set allOrderIds = new LinkedHashSet<>(); + if (CollectionUtils.isNotEmpty(participatedOrderIds)) { + allOrderIds.addAll(participatedOrderIds); + } + if (CollectionUtils.isNotEmpty(ownOrderIds)) { + allOrderIds.addAll(ownOrderIds); + } + if (CollectionUtils.isEmpty(allOrderIds)) { return new Page<>(pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10); } - // 2. 查正在应急的工单 + + // 4. 分页查询正在应急的工单 Page page = new Page<>(pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(Order::getId, orderIds); + wrapper.in(Order::getId, new ArrayList<>(allOrderIds)); wrapper.eq(Order::getSessionNow, true); wrapper.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0); wrapper.eq(Order::getStatus, 1); wrapper.orderByDesc(Order::getCreateTime); IPage srcPage = orderMapper.selectPage(page, wrapper); - // 3. 映射VO + // 5. 映射VO Page targetPage = new Page<>(srcPage.getCurrent(), srcPage.getSize(), srcPage.getTotal()); if (CollectionUtils.isEmpty(srcPage.getRecords())) { return targetPage;