|
|
@@ -4,10 +4,12 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
|
import cn.dev33.satoken.annotation.SaMode;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import com.aliyun.oss.ServiceException;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.nb.web.api.entity.*;
|
|
|
+import com.nb.web.service.bus.controller.vo.ClinicExportVo;
|
|
|
import com.nb.web.service.bus.controller.vo.ClinicStatsVo;
|
|
|
import com.nb.web.service.bus.controller.vo.ClinicEditVo;
|
|
|
import com.nb.web.service.bus.controller.vo.VisitRecord;
|
|
|
@@ -18,11 +20,14 @@ import com.nb.core.annotation.Log;
|
|
|
import com.nb.core.entity.GenericEntity;
|
|
|
import com.nb.core.exception.CustomException;
|
|
|
import com.nb.core.result.R;
|
|
|
+import com.nb.web.service.bus.utils.AnalExportUtils;
|
|
|
import io.swagger.annotations.*;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
@@ -85,84 +90,27 @@ public class BusClinicController {
|
|
|
return R.success(clinicService.latestQueryPage(query));
|
|
|
}
|
|
|
|
|
|
+ @ApiOperation("导出镇痛访视记录单")
|
|
|
+ @PostMapping("/export/record")
|
|
|
+ @SaCheckPermission(value = {"bus:clinic:query","device:patient:query"},mode = SaMode.OR)
|
|
|
+ public void exportRecord(HttpServletResponse response, @RequestBody@Validated ClinicExportVo source,@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId) {
|
|
|
+ ClinicAnalRecordResult recordResult = lookAnalRecord(source.getClinicId(), true, tenantId);
|
|
|
+ try {
|
|
|
+ AnalExportUtils.export(response,recordResult,source.getBase64());
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("[BusClinicController.exportRecord] 镇痛访视单导出失败,clinicId:{},",source.getClinicId());
|
|
|
+ throw new CustomException("系统繁忙,导出失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
@Log(title = "查询临床信息的镇痛访视记录单")
|
|
|
@PostMapping("/anal/record/{clinicId}/{after}")
|
|
|
@SaCheckPermission(value = {"bus:clinic:query","device:patient:query"},mode = SaMode.OR)
|
|
|
@ApiOperation(value = "查询临床信息的镇痛访视记录单",notes = "权限【bus:clinic:query】或【device:patient:query】")
|
|
|
public R<ClinicAnalRecordResult> analRecord(@PathVariable("clinicId") String clinicId,@PathVariable("after")@ApiParam("0、术前 1、术后") Boolean after,@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId){
|
|
|
log.info("查询临床访视单【{}】",clinicId);
|
|
|
- ClinicAnalRecordResult result = new ClinicAnalRecordResult();
|
|
|
- BusClinicEntity clinic = clinicService.getById(clinicId);
|
|
|
- if(clinic==null){
|
|
|
- throw new CustomException("该临床信息不存在");
|
|
|
- }
|
|
|
- if(Boolean.TRUE.equals(clinic.getMonitorType())){
|
|
|
- clinic.setPatientCode(patientService.getById(clinic.getPatientId()).getCode());
|
|
|
- }
|
|
|
- ClinicAnalClinicRecord record = ClinicAnalClinicRecord.parse(clinic);
|
|
|
- record.setTenantName(hospitalService.getName(tenantId));
|
|
|
- //填充临床信息
|
|
|
- result.setClinic(record);
|
|
|
- if(Boolean.TRUE.equals(after)){
|
|
|
- //填充评价记录
|
|
|
- result.setEvaluations(evaluationService.list(new QueryWrapper<BusEvaluationEntity>().lambda().eq(BusEvaluationEntity::getClinicId,clinicId).orderByAsc(BusEvaluationEntity::getEvaluateTime)));
|
|
|
-
|
|
|
- if(Boolean.TRUE.equals(clinic.getMonitorType())){
|
|
|
- //填充输注记录
|
|
|
- List<BusInfusionHistoryEntity> infusionHistories = infusionHistoryService.list(new QueryWrapper<BusInfusionHistoryEntity>().lambda()
|
|
|
- .eq(BusInfusionHistoryEntity::getClinicId, clinicId)
|
|
|
- .orderByAsc(BusInfusionHistoryEntity::getStartTime));
|
|
|
- log.debug("《《《《《《《《《《《《《《《《《填充输注记录结束》》》》》》》》》》》》》》》》");
|
|
|
- if(CollUtil.isNotEmpty(infusionHistories)){
|
|
|
- result.fillUndoInfo(infusionHistories);
|
|
|
- //添加设备别名
|
|
|
- Map<String, List<BusInfusionHistoryEntity>> infusionByDeviceId = infusionHistories.stream().collect(Collectors.groupingBy(BusInfusionHistoryEntity::getDeviceId));
|
|
|
- if(CollUtil.isNotEmpty(infusionByDeviceId)){
|
|
|
- Set<String> deviceIds = infusionByDeviceId.keySet();
|
|
|
- List<BusDeviceEntity> devices
|
|
|
- = deviceService.list(new QueryWrapper<BusDeviceEntity>().lambda().select(BusDeviceEntity::getId, BusDeviceEntity::getDeviceId, BusDeviceEntity::getAlias).in(BusDeviceEntity::getId, deviceIds));
|
|
|
- Map<String, List<BusDeviceEntity>> aliasByDeviceId = devices.stream().collect(Collectors.groupingBy(BusDeviceEntity::getDeviceId));
|
|
|
- if(CollUtil.isNotEmpty(aliasByDeviceId)){
|
|
|
- infusionByDeviceId.forEach((deviceId,infusions)->{
|
|
|
- aliasByDeviceId.computeIfPresent(deviceId,(k,alias)->{
|
|
|
- infusions.forEach(infusion->infusion.setAlias(alias.get(0).getAlias()));
|
|
|
- return alias;
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- log.debug("《《《《《《《《《《《《《《《《《添加设备别名结束》》》》》》》》》》》》》》》》");
|
|
|
- List<String> infusionIds = infusionHistories.stream().map(BusInfusionHistoryEntity::getId).collect(Collectors.toList());
|
|
|
- List<BusInfusionModifyEntity> infusionModifies = infusionModifyService.list(new QueryWrapper<BusInfusionModifyEntity>().lambda()
|
|
|
- .in(BusInfusionModifyEntity::getInfusionId, infusionIds));
|
|
|
- result.fillInfusionRecords(infusionHistories,infusionModifies);
|
|
|
-
|
|
|
- List<BusDeviceHistoryEntity> deviceHistories = deviceHistoryService.list(new QueryWrapper<BusDeviceHistoryEntity>()
|
|
|
- .lambda()
|
|
|
- .select(BusDeviceHistoryEntity::getInfusionId,BusDeviceHistoryEntity::getPcaValidCount,BusDeviceHistoryEntity::getInfusionModifyId,
|
|
|
- BusDeviceHistoryEntity::getPcaInvalidCount,BusDeviceHistoryEntity::getInputDose,BusDeviceHistoryEntity::getUploadTime)
|
|
|
- .in(BusDeviceHistoryEntity::getInfusionId, infusionIds)
|
|
|
- .eq(BusDeviceHistoryEntity::getMaster, true));
|
|
|
- log.debug("《《《《《《《《《《《《《《《《《查询设备历史结束》》》》》》》》》》》》》》》》");
|
|
|
- //标记输注
|
|
|
- result.markInfusion(deviceHistories);
|
|
|
- List<ClinicStatsQueryResult> 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));
|
|
|
- log.debug("《《《《《《《《《《《《《《《《《填充统计信息结束》》》》》》》》》》》》》》》》");
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return R.success(result);
|
|
|
+ return R.success(lookAnalRecord(clinicId,after,tenantId));
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -244,4 +192,77 @@ public class BusClinicController {
|
|
|
return clinicService.updateById(payload)?R.success(payload):R.fail("更新失败");
|
|
|
}
|
|
|
|
|
|
+ private ClinicAnalRecordResult lookAnalRecord(String clinicId,Boolean after,String tenantId) {
|
|
|
+ ClinicAnalRecordResult result = new ClinicAnalRecordResult();
|
|
|
+ BusClinicEntity clinic = clinicService.getById(clinicId);
|
|
|
+ if (clinic == null) {
|
|
|
+ throw new CustomException("该临床信息不存在");
|
|
|
+ }
|
|
|
+ if (Boolean.TRUE.equals(clinic.getMonitorType())) {
|
|
|
+ clinic.setPatientCode(patientService.getById(clinic.getPatientId()).getCode());
|
|
|
+ }
|
|
|
+ ClinicAnalClinicRecord record = ClinicAnalClinicRecord.parse(clinic);
|
|
|
+ record.setTenantName(hospitalService.getName(tenantId));
|
|
|
+ //填充临床信息
|
|
|
+ result.setClinic(record);
|
|
|
+ if (Boolean.TRUE.equals(after)) {
|
|
|
+ //填充评价记录
|
|
|
+ result.setEvaluations(evaluationService.list(new QueryWrapper<BusEvaluationEntity>().lambda().eq(BusEvaluationEntity::getClinicId, clinicId).orderByAsc(BusEvaluationEntity::getEvaluateTime)));
|
|
|
+
|
|
|
+ if (Boolean.TRUE.equals(clinic.getMonitorType())) {
|
|
|
+ //填充输注记录
|
|
|
+ List<BusInfusionHistoryEntity> infusionHistories = infusionHistoryService.list(new QueryWrapper<BusInfusionHistoryEntity>().lambda()
|
|
|
+ .eq(BusInfusionHistoryEntity::getClinicId, clinicId)
|
|
|
+ .orderByAsc(BusInfusionHistoryEntity::getStartTime));
|
|
|
+ log.debug("《《《《《《《《《《《《《《《《《填充输注记录结束》》》》》》》》》》》》》》》》");
|
|
|
+ if (CollUtil.isNotEmpty(infusionHistories)) {
|
|
|
+ result.fillUndoInfo(infusionHistories);
|
|
|
+ //添加设备别名
|
|
|
+ Map<String, List<BusInfusionHistoryEntity>> infusionByDeviceId = infusionHistories.stream().collect(Collectors.groupingBy(BusInfusionHistoryEntity::getDeviceId));
|
|
|
+ if (CollUtil.isNotEmpty(infusionByDeviceId)) {
|
|
|
+ Set<String> deviceIds = infusionByDeviceId.keySet();
|
|
|
+ List<BusDeviceEntity> devices
|
|
|
+ = deviceService.list(new QueryWrapper<BusDeviceEntity>().lambda().select(BusDeviceEntity::getId, BusDeviceEntity::getDeviceId, BusDeviceEntity::getAlias).in(BusDeviceEntity::getId, deviceIds));
|
|
|
+ Map<String, List<BusDeviceEntity>> aliasByDeviceId = devices.stream().collect(Collectors.groupingBy(BusDeviceEntity::getDeviceId));
|
|
|
+ if (CollUtil.isNotEmpty(aliasByDeviceId)) {
|
|
|
+ infusionByDeviceId.forEach((deviceId, infusions) -> {
|
|
|
+ aliasByDeviceId.computeIfPresent(deviceId, (k, alias) -> {
|
|
|
+ infusions.forEach(infusion -> infusion.setAlias(alias.get(0).getAlias()));
|
|
|
+ return alias;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.debug("《《《《《《《《《《《《《《《《《添加设备别名结束》》》》》》》》》》》》》》》》");
|
|
|
+ List<String> infusionIds = infusionHistories.stream().map(BusInfusionHistoryEntity::getId).collect(Collectors.toList());
|
|
|
+ List<BusInfusionModifyEntity> infusionModifies = infusionModifyService.list(new QueryWrapper<BusInfusionModifyEntity>().lambda()
|
|
|
+ .in(BusInfusionModifyEntity::getInfusionId, infusionIds));
|
|
|
+ result.fillInfusionRecords(infusionHistories, infusionModifies);
|
|
|
+
|
|
|
+ List<BusDeviceHistoryEntity> deviceHistories = deviceHistoryService.list(new QueryWrapper<BusDeviceHistoryEntity>()
|
|
|
+ .lambda()
|
|
|
+ .select(BusDeviceHistoryEntity::getInfusionId, BusDeviceHistoryEntity::getPcaValidCount, BusDeviceHistoryEntity::getInfusionModifyId,
|
|
|
+ BusDeviceHistoryEntity::getPcaInvalidCount, BusDeviceHistoryEntity::getInputDose, BusDeviceHistoryEntity::getUploadTime)
|
|
|
+ .in(BusDeviceHistoryEntity::getInfusionId, infusionIds)
|
|
|
+ .eq(BusDeviceHistoryEntity::getMaster, true));
|
|
|
+ log.debug("《《《《《《《《《《《《《《《《《查询设备历史结束》》》》》》》》》》》》》》》》");
|
|
|
+ //标记输注
|
|
|
+ result.markInfusion(deviceHistories);
|
|
|
+ List<ClinicStatsQueryResult> 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));
|
|
|
+ log.debug("《《《《《《《《《《《《《《《《《填充统计信息结束》》》》》》》》》》》》》》》》");
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|