| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- package com.coffee.bus.service;
- 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.coffee.bus.controller.vo.ClinicStatsVo;
- import com.coffee.bus.entity.BusClinicEntity;
- import com.coffee.bus.entity.BusInfusionHistoryEntity;
- import com.coffee.bus.entity.BusPatientEntity;
- import com.coffee.bus.mapper.BusClinicMapper;
- import com.coffee.bus.registry.patient.PatientOperator;
- import com.coffee.bus.registry.patient.PatientRegistry;
- import com.coffee.bus.service.dto.ClinicQuery;
- import com.coffee.bus.service.dto.ClinicResult;
- import com.coffee.bus.service.dto.ClinicStatsReturnResult;
- import com.coffee.bus.utils.WsPublishUtils;
- import com.coffee.common.crud.BaseService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.Assert;
- import java.util.*;
- /**
- * @author lifang
- * @version 1.0.0
- * @ClassName LocalBusHospitalService.java
- * @Description
- * @createTime 2022年03月19日 09:27:00
- */
- @Service
- @Slf4j
- public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClinicEntity,String> {
- @Autowired
- @Lazy
- private PatientRegistry patientRegistry;
- @Autowired
- @Lazy
- private LocalBusInfusionHistoryService infusionHistoryService;
- @Autowired
- @Lazy
- private LocalBusPatientService patientService;
- @Autowired
- @Lazy
- private WsPublishUtils wsPublishUtils;
- @Override
- public void validateBeforeSave(BusClinicEntity entity) {
- if(entity.getMonitorStartTime()==null){
- entity.setMonitorStartTime(new Date());
- }
- if(entity.getStartTime()==null){
- entity.setStartTime(entity.getMonitorStartTime());
- }
- }
- @Override
- public void validateBeforeUpdate(BusClinicEntity entity) {
- }
- @Override
- public void validateBeforeDelete(String id) {
- }
- /**
- * 结束当前医院病号的临床数据
- * @param clinicId 临床id
- */
- @Transactional(rollbackFor = Exception.class)
- public void finish(String clinicId, String tenantId) {
- this.finish(Collections.singletonList(clinicId),new Date(),tenantId);
- }
- /**
- * 结束当前医院病号的临床数据
- * @param clinicIds 临床id
- * @param finishTime 临床结束时间
- */
- @Transactional(rollbackFor = Exception.class)
- public void finish(List<String> clinicIds,Date finishTime, String tenantId) {
- this.update(new UpdateWrapper<BusClinicEntity>().lambda()
- .in(BusClinicEntity::getId,clinicIds)
- .set(BusClinicEntity::getFinished,true)
- .set(BusClinicEntity::getEndTime,finishTime));
- wsPublishUtils.publishMonitorTotalCount(tenantId);
- }
- /**
- * 找到该病号最近的一场手术
- * @param hospitalId
- * @param patientCode
- */
- public BusClinicEntity recentClinicByPatientCode(String hospitalId, String patientCode) {
- return this.baseMapper.recentClinic(hospitalId,patientCode);
- }
- /**
- * 描述: 对两场手术进行比较,判断名称、时间是否发生了变化
- * @author lifang
- * @date 2022/5/12 9:10
- * @param source his系统拉取的数据
- * @param target 数据库存储的数据
- * @return void
- */
- @Transactional(rollbackFor = Exception.class)
- public void compareFromHis(BusClinicEntity source,BusClinicEntity target){
- Assert.hasText(target.getId(),"LocalBusClinicService.compareFromHis方法调用时,target参数id不能为空");
- Assert.hasText(source.getPatientCode(),"LocalBusClinicService.compareFromHis方法调用时,source参数patientCode不能为空");
- Assert.notNull(source.getStartTime(),"LocalBusClinicService.compareFromHis方法调用时,source参数startTime不能为空");
- Assert.hasText(source.getSurgeryName(),"LocalBusClinicService.compareFromHis方法调用时,source参数surgeName不能为空");
- source.setId(target.getId());
- source.setFinished(target.getFinished());
- this.updateById(source);
- //手术开始时间发生变化,重新计算输注数据
- if(source.getStartTime()!=null&&source.getStartTime()!=target.getStartTime()){
- infusionHistoryService.adjustInfusionByClinic(source.getId(),source.getPatientCode(),source.getTenantId(),source.getStartTime());
- }
- }
- /**
- * 描述: his拉取的新的手术信息,执行插入操作
- * @author lifang
- * @date 2022/5/12 10:27
- * @param source
- * @return void
- */
- @Transactional(rollbackFor = Exception.class)
- public void insertFromHis(BusClinicEntity source){
- Assert.hasText(source.getTenantId(),"LocalBusClinicService.insertFromHis方法调用时,source参数tenantId不能为空");
- Assert.hasText(source.getPatientCode(),"LocalBusClinicService.insertFromHis方法调用时,source参数patientCode不能为空");
- Assert.hasText(source.getSurgeryName(),"LocalBusClinicService.insertFromHis方法调用时,source参数surgeName不能为空");
- this.save(source);
- infusionHistoryService.adjustInfusionByClinic(source.getId(),source.getPatientCode(),source.getTenantId(),source.getStartTime());
- }
- /**
- * 描述: 从his拉去的数据设置为当前临床信息
- * @author lifang
- * @date 2022/5/12 10:31
- * @param source
- * @return void
- */
- @Transactional(rollbackFor = Exception.class)
- public void setCurrentClinicByHis(BusClinicEntity source){
- Assert.hasText(source.getId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数id不能为空");
- Assert.hasText(source.getPatientCode(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数patientCode不能为空");
- Assert.hasText(source.getTenantId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数tenantId不能为空");
- Assert.notNull(source.getStartTime(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数startTime不能为空");
- //处理当前的输注信息
- infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda()
- .eq(BusInfusionHistoryEntity::getPatientCode,source.getPatientCode())
- .eq(BusInfusionHistoryEntity::getTenantId,source.getTenantId())
- .eq(BusInfusionHistoryEntity::getFinished,false)
- .set(BusInfusionHistoryEntity::getClinicId,source.getId()));
- //更新病人信息
- patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
- .eq(BusPatientEntity::getCode,source.getPatientCode())
- .eq(BusPatientEntity::getTenantId,source.getTenantId())
- .set(BusPatientEntity::getClinicId,source.getId()));
- //处理
- List<BusClinicEntity> clinics = this.list(new QueryWrapper<BusClinicEntity>().lambda()
- .eq(BusClinicEntity::getPatientCode, source.getPatientCode())
- .eq(BusClinicEntity::getTenantId, source.getTenantId())
- .eq(BusClinicEntity::getFinished, false)
- .ne(BusClinicEntity::getId, source.getId()));
- //将下一场手术的开始时间作为该场手术监控的结束时间
- clinics.sort(Comparator.comparing(BusClinicEntity::getStartTime));
- for (int i = 0; i < clinics.size(); i++) {
- BusClinicEntity clinic = clinics.get(i);
- clinic.setFinished(true);
- if(i==clinics.size()-1){
- if(clinic.getEndTime()==null){
- clinic.setEndTime(source.getEndTime());
- }
- continue;
- }
- if(clinic.getEndTime()==null){
- clinic.setEndTime(clinics.get(i+1).getStartTime());
- }
- }
- this.updateBatchById(clinics);
- PatientOperator operator = patientRegistry.getOperator(source.getTenantId(), source.getPatientCode());
- operator.setClinicId(source.getId());
- wsPublishUtils.publishPatientMonitor(source.getPatientCode(),source.getTenantId());
- }
- public ClinicStatsReturnResult stats(ClinicStatsVo statsVo) {
- return ClinicStatsReturnResult.of(this.baseMapper.stats(statsVo));
- }
- public IPage<ClinicResult> pageQuery(ClinicQuery query){
- return this.baseMapper.pageQuery(query.getPage(),query);
- }
- /**
- * 描述: 临床是否结束
- * @author lifang
- * @date 2022/5/30 16:25
- * @param clinicId
- * @return boolean
- */
- public boolean isFinished(String clinicId) {
- return Boolean.TRUE.equals(Optional.ofNullable(this.getById(clinicId)).orElse(new BusClinicEntity()).getFinished());
- }
- /**
- * 描述: 重新开启临床
- * @author lifang
- * @date 2022/5/30 16:27
- * @param clinicId
- * @return void
- */
- @Transactional(rollbackFor = Exception.class)
- public void resetClinic(String clinicId) {
- this.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId).set(BusClinicEntity::getFinished,false));
- }
- }
|