package com.nb.bus.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; 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.bus.entity.BusDeviceAlarmEntity; import com.nb.bus.entity.BusHospitalEntity; import com.nb.bus.entity.BusInfusionHistoryEntity; import com.nb.bus.enums.DeviceAlarmEnum; import com.nb.bus.enums.FlowStatusEnum; import com.nb.bus.mapper.BusDeviceAlarmMapper; import com.nb.bus.service.dto.*; import com.nb.common.crud.BaseService; import lombok.AllArgsConstructor; 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 java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author lifang * @version 1.0.0 * @ClassName LocalBusHospitalService.java * @Description 临床使用设备 * @createTime 2022年03月19日 09:27:00 */ @Service @Slf4j @AllArgsConstructor public class LocalBusDeviceAlarmService extends BaseService { @Autowired @Lazy private LocalBusHospitalService hospitalService; @Autowired @Lazy private LocalBusInfusionHistoryService infusionHistoryService; @Override public void validateBeforeSave(BusDeviceAlarmEntity entity) { } @Override public boolean save(BusDeviceAlarmEntity entity) { BusInfusionHistoryEntity infusionHistoryEntity = infusionHistoryService.getById(entity.getInfusionId()); if(entity.getDeviceType()==null){ entity.setDeviceType(infusionHistoryEntity.getType()); } if(entity.getAlarmState()==null || ObjectUtil.equal(entity.getAlarmState(),infusionHistoryEntity.getAlarm())){ entity.setAlarmState(DeviceAlarmEnum.None); } if(entity.getWarnAnalgesicPoor()==null || ObjectUtil.equal(entity.getWarnAnalgesicPoor(),infusionHistoryEntity.getWarnAnalgesicPoor())){ entity.setWarnAnalgesicPoor(false); } if(entity.getWarnFlow()==null || ObjectUtil.equal(entity.getWarnFlow(),infusionHistoryEntity.getWarnFlow())){ entity.setWarnFlow(FlowStatusEnum.None); } if(entity.getWarnWillFinished()==null || ObjectUtil.equal(entity.getWarnWillFinished(),infusionHistoryEntity.getWarnWillFinished())){ entity.setWarnWillFinished(false); } if(entity.getWarnLowBattery()==null || ObjectUtil.equal(entity.getWarnLowBattery(),infusionHistoryEntity.getWarnLowBattery())){ entity.setWarnLowBattery(false); } if(entity.getWarnAnalgesicPoor()==null || ObjectUtil.equal(entity.getWarnAnalgesicPoor(),infusionHistoryEntity.getWarnAnalgesicPoor())){ entity.setWarnAnalgesicPoor(false); } if(!entity.alarmOrWarn()){ //无警报信息,存储失败 return false; } BusDeviceAlarmEntity existAlarm = BusDeviceAlarmEntity.parseRunning(infusionHistoryEntity); if (entity.signParm().equalsIgnoreCase(existAlarm.signParm())) { return false; } //再判断是否报警或提示是否发生重复 //满足以上条件进行保存 return super.save(entity); } @Override public void validateBeforeUpdate(BusDeviceAlarmEntity entity) { } @Override public void validateBeforeDelete(String id) { } public IPage pageQuery(AlarmQuery query){ return this.baseMapper.pageQuery(query.getPage(),query); } /** * 添加报警原因 * @param id * @param cause */ @Transactional(rollbackFor = Exception.class) public void addCause(String id, String cause) { BusDeviceAlarmEntity alarm = this.getById(id); if(alarm==null){ return ; } if(StrUtil.isNotEmpty(alarm.getHistoryId())){ //todo 更新历史消息 } this.update(new UpdateWrapper().lambda().eq(BusDeviceAlarmEntity::getId,id).set(BusDeviceAlarmEntity::getCause,cause)); } /** * 查看报警数量 */ @Transactional(rollbackFor = Exception.class) public List selectCountAlarm(DeviceAlarmQuery query){ QueryWrapper busHospitalEntityQueryWrapper = new QueryWrapper<>(); if(busHospitalEntityQueryWrapper.getEntity() == null) { BusHospitalEntity hospitalEntity = new BusHospitalEntity(); busHospitalEntityQueryWrapper.setEntity(hospitalEntity); } if(query.getHositalName()!=null){ busHospitalEntityQueryWrapper.lambda().like(BusHospitalEntity::getName,query.getHositalName()); } if(query.getTenantId()!=null){ busHospitalEntityQueryWrapper.getEntity().setId(query.getTenantId()); } List hospitalEntities = hospitalService.getBaseMapper().selectList(busHospitalEntityQueryWrapper); List deviceUseList = new ArrayList<>(); // 获取 报警所有信息数量 List alarmResults = this.baseMapper.selectAlarmCount(query); //处理报警信息 Map> alarmMap= new HashMap<>(); for (DeviceAlarmCountResult deviceAlarmResult : alarmResults ) { Map map = alarmMap.get(deviceAlarmResult.getTenantId()); if(map == null){ map = new HashMap<>(); for (DeviceAlarmEnum deviceAlarmEnum: DeviceAlarmEnum.values()) { map.put(deviceAlarmEnum.toString(),"0"); } } map.put(deviceAlarmResult.getAlarmState().toString(),deviceAlarmResult.getAlarmCount()); alarmMap.put(deviceAlarmResult.getTenantId(),map); } // 获取告警信息 List warnResults = this.baseMapper.selectWarnCount(query); //处理告警信息 for (DeviceWarnCountResult deviceWarnCountResult : warnResults ) { Map map = alarmMap.get(deviceWarnCountResult.getTenantId()); if(map == null){ map = new HashMap<>(); for (DeviceAlarmEnum deviceAlarmEnum: DeviceAlarmEnum.values()) { map.put(deviceAlarmEnum.toString(),"0"); } } map.put("warnWillFinished",deviceWarnCountResult.getWarnWillFinished()); map.put("warnLowBattery",deviceWarnCountResult.getWarnLowBattery()); map.put("warnAnalgesicPoor",deviceWarnCountResult.getWarnAnalgesicPoor()); alarmMap.put(deviceWarnCountResult.getTenantId(),map); } // 遍历医院 for (BusHospitalEntity hospital:hospitalEntities ) { DeviceUse deviceUse = new DeviceUse(); deviceUse.setTenantId(hospital.getId()); deviceUse.setAddress(hospital.getAddress()); deviceUse.setName(hospital.getName()); Map map = alarmMap.get(hospital.getId()); if (map == null){ map = new HashMap<>(); for (DeviceAlarmEnum deviceAlarmEnum: DeviceAlarmEnum.values()) { map.put(deviceAlarmEnum.toString(),"0"); } map.put("warnWillFinished","0"); map.put("warnLowBattery","0"); map.put("warnAnalgesicPoor","0"); } deviceUse.setMap(map); deviceUseList.add(deviceUse); } return deviceUseList; } /** * 查看报警数量 */ @Transactional(rollbackFor = Exception.class) public List selectUseDetail(BusDeviceAlarmEntity query){ return this.baseMapper.selectDeviceCount(query); } }