解释这段代码List<Program> params = programService.firstQuery();//查血常规 B超基本信息 List<Long> programIds = new ArrayList<>(); Map<Long, String> programName = new HashMap<>(); for (Program param : params) { programIds.add(param.getId()); programName.put(param.getId(), param.getName()); } PhysicalProgram program = new PhysicalProgram(); program.setProgramIds(programIds); program.setIdCard(physicalProgram.getIdCard()); List<PhysicalProgram> list = physicalProgramService.firstQuery(program);//把没做血常规 B超的人员存进来 if (!CollectionUtils.isEmpty(list)) {//至少有一个没做 for (PhysicalProgram physicalParam : list) { if (list.size() == 2){ Map<String, List<UserPhysical>> queueMap = QueueStrategy.QUEUE_MAP; List<UserPhysical> list1 = queueMap.get("血常规"); List<UserPhysical> list2 = queueMap.get("B超"); if(list1.size()*3 > list2.size()*10){ name="B超"; break; }else { name="血常规"; break; } } name = programName.get(physicalParam.getId()); if (!StringUtils.isEmpty(name)) { break; } } } else { //获取最小排队时间 name = QueueStrategy.waitLess((user.getSex()),strings); } user.setPhysicalType("3");//3是最小等待时间,提示下一个接口需要插队 return name;
时间: 2023-12-20 07:06:13 浏览: 120
这段代码是一个医疗系统中的某个接口实现,大致流程是:
1. 调用 programService 的 firstQuery 方法获取一组检查项目的信息,包括 id 和 name。
2. 构建一个 PhysicalProgram 对象,设置其中的 programIds 和 idCard 属性。
3. 调用 physicalProgramService 的 firstQuery 方法,查询该用户是否做过指定的检查项目。
4. 如果用户没有做过这些项目,则根据一定的策略选择下一个需要做的项目(血常规或B超)。
5. 如果用户已经做过了这些项目,则根据用户的 id 查询对应的检查项目名称。
6. 如果查询到了对应的检查项目名称,则返回该名称,并将用户的 physicalType 属性设置为 3。
7. 如果没有查询到对应的检查项目名称,则根据一定的策略选择下一个需要做的项目,并返回该名称,并将用户的 physicalType 属性设置为 3。
其中,步骤 4 中的选择策略是:统计当前排队中血常规和B超项目的人数,如果B超项目的人数多于血常规项目的三倍,则选择做B超项目,否则选择做血常规项目。而步骤 6 中的查询操作是通过 programName 这个 Map 来实现的,即将查询到的检查项目的 id 和名称存储在一个 Map 中,以便之后查询时快速查找。
阅读全文