package com.coffee.bus.service; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.coffee.bus.controller.vo.ClinicStatsVo; import com.coffee.bus.entity.BusClinicEntity; import com.coffee.bus.entity.BusPatientEntity; import com.coffee.bus.mapper.BusClinicMapper; import com.coffee.bus.registry.patient.PatientRegistry; import com.coffee.bus.service.dto.ClinicResult; import com.coffee.bus.service.dto.ClinicStatsQueryResult; import com.coffee.bus.service.dto.ClinicStatsReturnResult; 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.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** * @author lifang * @version 1.0.0 * @ClassName LocalBusHospitalService.java * @Description TODO * @createTime 2022年03月19日 09:27:00 */ @Service @Slf4j public class LocalBusClinicService extends BaseService { @Autowired @Lazy private LocalBusPatientService patientService; @Autowired @Lazy private PatientRegistry patientRegistry; @Override public void validateBeforeSave(BusClinicEntity entity) { } @Override public void validateBeforeUpdate(BusClinicEntity entity) { } @Override public void validateBeforeDelete(String id) { } @Override public boolean save(BusClinicEntity entity) { return super.save(entity); } /** * 结束当前医院病号的临床数据 * @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 clinicIds,Date finishTime, String tenantId) { this.update(new UpdateWrapper().lambda() .in(BusClinicEntity::getId,clinicIds) .set(BusClinicEntity::getFinished,true) .set(BusClinicEntity::getEndTime,finishTime)); //更新病人缓存 this.listByIds(clinicIds).stream() .map(BusClinicEntity::getPatientCode) .map(code->patientRegistry.getOperator(tenantId,code)) .forEach(operator->operator.setFinished(true)); } /** * 找到该病号最近的一场手术 * @param hospitalId * @param patientCode */ public BusClinicEntity recentClinicByPatientCode(String hospitalId, String patientCode) { return this.baseMapper.recentClinic(hospitalId,patientCode); } /** * 从his同步病人数据-异步 * @param hospitalId * @param patientCode */ @Async public void asyncFromHis(String hospitalId, String patientCode) { } public ClinicStatsReturnResult stats(ClinicStatsVo statsVo) { return ClinicStatsReturnResult.of(this.baseMapper.stats(statsVo)); } public IPage pageQuery(Page page){ return this.baseMapper.pageQuery(page); } }