package com.coffee.bus.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.coffee.bus.controller.vo.ClinicStatsVo; import com.coffee.bus.entity.*; import com.coffee.bus.registry.device.DeviceRegistry; import com.coffee.bus.service.*; import com.coffee.bus.service.dto.*; import com.coffee.common.exception.CustomException; import com.coffee.common.result.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** * @author lifang * @version 1.0.0 * @ClassName BusHospitalController.java * @Description TODO * @createTime 2022年03月19日 09:28:00 */ @RestController @AllArgsConstructor @RequestMapping("/bus/clinic") @Api(tags = "病人临床手术管理",description = "统一权限前缀(bus:clinic),例如新增bus:clinic:add") public class BusClinicController { private final LocalBusClinicService clinicService; private final LocalBusEvaluationService evaluationService; private final LocalBusInfusionHistoryService infusionHistoryService; private final LocalBusInfusionModifyService infusionModifyService; private final LocalBusDeviceHistoryService deviceHistoryService; private final DeviceRegistry deviceRegistry; @PostMapping("/stats") @ApiOperation(value = "临床过程中的数据记录",notes = "权限【无】") public R stats(@RequestBody ClinicStatsVo statsVo) { return R.success(clinicService.stats(statsVo)); } @PostMapping("/page") @SaCheckPermission("bus:clinic:query") @ApiOperation(value = "临床管理分页查询",notes = "权限【bus:clinic:query】") public R> page(@RequestBody@Validated ClinicQuery query) { return R.success(clinicService.pageQuery(query)); } @PostMapping("/anal/record/{clinicId}") @SaCheckPermission("bus:clinic:query") @ApiOperation(value = "查询临床信息的镇痛访视记录单",notes = "权限【bus:clinic:query】") public R analRecord(@PathVariable("clinicId") String clinicId){ ClinicAnalRecordResult result = new ClinicAnalRecordResult(); BusClinicEntity clinic = clinicService.getById(clinicId); if(clinic==null){ throw new CustomException("该临床信息不存在"); } //填充临床信息 result.setClinic(ClinicAnalClinicRecord.parse(clinic)); CompletableFuture .runAsync(()->{ //填充评价记录 result.setEvaluations(evaluationService.list(new QueryWrapper().lambda().eq(BusEvaluationEntity::getClinicId,clinicId).orderByAsc(BusEvaluationEntity::getEvaluateTime))); }) .thenAcceptAsync(ignore->{ //填充输注记录 List infusionHistories = infusionHistoryService.list(new QueryWrapper().lambda() .eq(BusInfusionHistoryEntity::getClinicId, clinicId) .orderByAsc(BusInfusionHistoryEntity::getStartTime)); //添加设备别名 Map> infusionByDeviceId = infusionHistories.stream().collect(Collectors.groupingBy(BusInfusionHistoryEntity::getDeviceId)); infusionByDeviceId.forEach((deviceId,infusions)->{ String alias = deviceRegistry.getOperator(deviceId).getAlias(); infusions.forEach(infusion->infusion.setAlias(alias)); }); result.fillUndoInfo(infusionHistories); List infusionIds = infusionHistories.stream().map(BusInfusionHistoryEntity::getId).collect(Collectors.toList()); List infusionModifies = infusionModifyService.list(new QueryWrapper().lambda() .in(BusInfusionModifyEntity::getInfusionId, infusionIds)); result.fillInfusionRecords(infusionHistories,infusionModifies); }) .thenAccept(ignore->{ List infusionIds = result.getInfusionRecords().stream().map(ClinicAnalInfusionRecord::getId).collect(Collectors.toList()); List deviceHistories = deviceHistoryService.list(new QueryWrapper() .lambda() .select(BusDeviceHistoryEntity::getInfusionId,BusDeviceHistoryEntity::getPcaValidCount,BusDeviceHistoryEntity::getInfusionModifyId, BusDeviceHistoryEntity::getPcaInvalidCount,BusDeviceHistoryEntity::getInputDose,BusDeviceHistoryEntity::getUploadTime) .in(BusDeviceHistoryEntity::getInfusionId, infusionIds) .eq(BusDeviceHistoryEntity::getMaster, true)); //标记输注 result.markInfusion(deviceHistories); List statsQueryResults = deviceHistories.stream().map(history -> { ClinicStatsQueryResult statsQueryResult = new ClinicStatsQueryResult(); statsQueryResult.setInputDose(history.getInputDose()); statsQueryResult.setInValidCount(history.getPcaInvalidCount()); statsQueryResult.setValidCount(history.getPcaValidCount()); statsQueryResult.setUploadTime(history.getUploadTime()); return statsQueryResult; }).collect(Collectors.toList()); //填充统计信息 result.setStats(ClinicStatsReturnResult.of(statsQueryResults)); }) .join(); return R.success(result); } }