package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.DeviceFaultService; import com.yuanchu.mom.service.EnumService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service public class DeviceFaultServiceImpl extends ServiceImpl implements DeviceFaultService { @Autowired private DeviceMapper deviceMapper; @Autowired private QrShowServiceImpl qrShowService; @Autowired private DeviceMaintenanceMapper deviceMaintenanceMapper; @Autowired private StructureItemParameterMapper structureItemParameterMapper; @Autowired private DeviceFaultOneMapper deviceFaultOneMapper; @Autowired private EnumService enumService; @Override public Map findByDeviceId(Integer deviceId) { Map map = new HashMap<>(); if(Objects.isNull(deviceId)){ return map; } //查询设备主表信息 Device device = deviceMapper.selectById(deviceId); if(!Objects.isNull(device)){ //查询设备校准信息 DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(device.getId(), "calibrate"); //查询设备核查信息 DeviceMetricRecord examine = qrShowService.getDeviceMetricRecord(device.getId(), "examine"); //查询设备维护记录 DeviceMaintenance deviceMaintenance = Optional.ofNullable(deviceMaintenanceMapper.selectOne(Wrappers.lambdaQuery() .eq(DeviceMaintenance::getDeviceId, device.getId()) .orderByDesc(DeviceMaintenance::getId) .last("limit 1"))).orElse(new DeviceMaintenance()); //查询设备故障信息 List deviceFaultOneList = Optional.ofNullable(deviceFaultOneMapper.selectList(Wrappers.lambdaQuery() .eq(DeviceFaultOne::getDeviceId, device.getId()) .orderByDesc(DeviceFaultOne::getId))).orElse(new ArrayList<>()); //查询设备状态字典 List deviceStatus = enumService.selectEnumByCategory("设备状态"); Enums findEnum = deviceStatus.stream().filter(e-> Integer.parseInt(e.getValue()) ==device.getDeviceStatus()).findFirst().orElse(new Enums()); map.put("progress",qrShowService.calcDeviceNextCheckRatio(calibrate.getCalibrationDate(),calibrate.getNextCalibrationDate()));//距离下次校准日期的天数百分比 map.put("deviceName",device.getDeviceName());//设备名称 map.put("deviceCode",device.getManagementNumber());//设备编号 map.put("usedYears",qrShowService.calcUsedYears(device.getActivationDate()));//启用时长(年) map.put("deviceStatus",findEnum.getLabel());//设备运行状态 map.put("faultCount",deviceFaultOneList.size());//故障次数 String faultDate = !deviceFaultOneList.isEmpty() ?qrShowService.formatDate(deviceFaultOneList.get(0).getFaultDate(),"yyyy-MM-dd"):""; map.put("faultDate",faultDate);//最近故障日期 map.put("lastCalibrationDate",qrShowService.formatDate(calibrate.getCalibrationDate(),"yyyy-MM-dd"));//最近校准日期 map.put("nextCalibrationDate",qrShowService.formatDate(calibrate.getNextCalibrationDate(),"yyyy-MM-dd"));//下次校准日期 String calibrateStatus = "0yes".equals(calibrate.getStatus())?"合格":"1no".equals(calibrate.getStatus())?"不合格":"其他"; map.put("calibrateStatus",Objects.isNull(calibrate.getCalibrationDate())?"":calibrateStatus);//校准总结论 map.put("lastExamineDate",examine.getCalibrationDate());//最近核查日期 map.put("nextExamineDate",examine.getNextCalibrationDate());//下次核查日期 String examineStatus = "0yes".equals(examine.getStatus())?"合格":"1no".equals(examine.getStatus())?"不合格":"其他"; map.put("examineStatus",Objects.isNull(examine.getCalibrationDate())?"":examineStatus);//核查总结论 map.put("maintenanceDate",deviceMaintenance.getDate());//最近维护日期 map.put("nextMaintenanceDate",deviceMaintenance.getNextDate());//下次维护日期 String maintenanceType = ""; if(!Objects.isNull(deviceMaintenance.getMaintenanceType())){ maintenanceType = 0==deviceMaintenance.getMaintenanceType()?"使用前维护":"使用后维护"; } map.put("maintenanceType",maintenanceType);//维护总结论 //测量项目 String insProduct = ""; if(StringUtils.isNotBlank(device.getInsProductIds())){ String[] ids = device.getInsProductIds().split(","); List parameters = structureItemParameterMapper.selectBatchIds(Arrays.asList(ids)); List itemList = parameters.stream().map(StructureItemParameter::getInspectionItem).distinct().collect(Collectors.toList()); insProduct = String.join(",",itemList); } map.put("insProduct",insProduct);//测量项目 } return map; } }