BusClinicController.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package com.coffee.bus.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.coffee.bus.controller.vo.ClinicStatsVo;
  6. import com.coffee.bus.entity.*;
  7. import com.coffee.bus.registry.device.DeviceRegistry;
  8. import com.coffee.bus.service.*;
  9. import com.coffee.bus.service.dto.*;
  10. import com.coffee.common.exception.CustomException;
  11. import com.coffee.common.result.R;
  12. import io.swagger.annotations.Api;
  13. import io.swagger.annotations.ApiOperation;
  14. import lombok.AllArgsConstructor;
  15. import org.springframework.validation.annotation.Validated;
  16. import org.springframework.web.bind.annotation.*;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.concurrent.CompletableFuture;
  20. import java.util.stream.Collectors;
  21. /**
  22. * @author lifang
  23. * @version 1.0.0
  24. * @ClassName BusHospitalController.java
  25. * @Description TODO
  26. * @createTime 2022年03月19日 09:28:00
  27. */
  28. @RestController
  29. @AllArgsConstructor
  30. @RequestMapping("/bus/clinic")
  31. @Api(tags = "病人临床手术管理",description = "统一权限前缀(bus:clinic),例如新增bus:clinic:add")
  32. public class BusClinicController {
  33. private final LocalBusClinicService clinicService;
  34. private final LocalBusEvaluationService evaluationService;
  35. private final LocalBusInfusionHistoryService infusionHistoryService;
  36. private final LocalBusInfusionModifyService infusionModifyService;
  37. private final LocalBusDeviceHistoryService deviceHistoryService;
  38. private final DeviceRegistry deviceRegistry;
  39. @PostMapping("/stats")
  40. @ApiOperation(value = "临床过程中的数据记录",notes = "权限【无】")
  41. public R<ClinicStatsReturnResult> stats(@RequestBody ClinicStatsVo statsVo) {
  42. return R.success(clinicService.stats(statsVo));
  43. }
  44. @PostMapping("/page")
  45. @SaCheckPermission("bus:clinic:query")
  46. @ApiOperation(value = "临床管理分页查询",notes = "权限【bus:clinic:query】")
  47. public R<IPage<ClinicResult>> page(@RequestBody@Validated ClinicQuery query) {
  48. return R.success(clinicService.pageQuery(query));
  49. }
  50. @PostMapping("/anal/record/{clinicId}")
  51. @SaCheckPermission("bus:clinic:query")
  52. @ApiOperation(value = "查询临床信息的镇痛访视记录单",notes = "权限【bus:clinic:query】")
  53. public R<ClinicAnalRecordResult> analRecord(@PathVariable("clinicId") String clinicId){
  54. ClinicAnalRecordResult result = new ClinicAnalRecordResult();
  55. BusClinicEntity clinic = clinicService.getById(clinicId);
  56. if(clinic==null){
  57. throw new CustomException("该临床信息不存在");
  58. }
  59. //填充临床信息
  60. result.setClinic(ClinicAnalClinicRecord.parse(clinic));
  61. CompletableFuture
  62. .runAsync(()->{
  63. //填充评价记录
  64. result.setEvaluations(evaluationService.list(new QueryWrapper<BusEvaluationEntity>().lambda().eq(BusEvaluationEntity::getClinicId,clinicId).orderByAsc(BusEvaluationEntity::getEvaluateTime)));
  65. })
  66. .thenAcceptAsync(ignore->{
  67. //填充输注记录
  68. List<BusInfusionHistoryEntity> infusionHistories = infusionHistoryService.list(new QueryWrapper<BusInfusionHistoryEntity>().lambda()
  69. .eq(BusInfusionHistoryEntity::getClinicId, clinicId)
  70. .orderByAsc(BusInfusionHistoryEntity::getStartTime));
  71. //添加设备别名
  72. Map<String, List<BusInfusionHistoryEntity>> infusionByDeviceId = infusionHistories.stream().collect(Collectors.groupingBy(BusInfusionHistoryEntity::getDeviceId));
  73. infusionByDeviceId.forEach((deviceId,infusions)->{
  74. String alias = deviceRegistry.getOperator(deviceId).getAlias();
  75. infusions.forEach(infusion->infusion.setAlias(alias));
  76. });
  77. result.fillUndoInfo(infusionHistories);
  78. List<String> infusionIds = infusionHistories.stream().map(BusInfusionHistoryEntity::getId).collect(Collectors.toList());
  79. List<BusInfusionModifyEntity> infusionModifies = infusionModifyService.list(new QueryWrapper<BusInfusionModifyEntity>().lambda()
  80. .in(BusInfusionModifyEntity::getInfusionId, infusionIds));
  81. result.fillInfusionRecords(infusionHistories,infusionModifies);
  82. })
  83. .thenAccept(ignore->{
  84. List<String> infusionIds = result.getInfusionRecords().stream().map(ClinicAnalInfusionRecord::getId).collect(Collectors.toList());
  85. List<BusDeviceHistoryEntity> deviceHistories = deviceHistoryService.list(new QueryWrapper<BusDeviceHistoryEntity>()
  86. .lambda()
  87. .select(BusDeviceHistoryEntity::getInfusionId,BusDeviceHistoryEntity::getPcaValidCount,BusDeviceHistoryEntity::getInfusionModifyId,
  88. BusDeviceHistoryEntity::getPcaInvalidCount,BusDeviceHistoryEntity::getInputDose,BusDeviceHistoryEntity::getUploadTime)
  89. .in(BusDeviceHistoryEntity::getInfusionId, infusionIds)
  90. .eq(BusDeviceHistoryEntity::getMaster, true));
  91. //标记输注
  92. result.markInfusion(deviceHistories);
  93. List<ClinicStatsQueryResult> statsQueryResults = deviceHistories.stream().map(history -> {
  94. ClinicStatsQueryResult statsQueryResult = new ClinicStatsQueryResult();
  95. statsQueryResult.setInputDose(history.getInputDose());
  96. statsQueryResult.setInValidCount(history.getPcaInvalidCount());
  97. statsQueryResult.setValidCount(history.getPcaValidCount());
  98. statsQueryResult.setUploadTime(history.getUploadTime());
  99. return statsQueryResult;
  100. }).collect(Collectors.toList());
  101. //填充统计信息
  102. result.setStats(ClinicStatsReturnResult.of(statsQueryResults));
  103. })
  104. .join();
  105. return R.success(result);
  106. }
  107. }