package com.ruoyi.device.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.basic.mapper.StructureItemParameterMapper; import com.ruoyi.basic.service.ProductService; import com.ruoyi.device.mapper.DeviceMapper; import com.ruoyi.device.mapper.DeviceMetricRecordMapper; import com.ruoyi.device.pojo.DeviceMetricRecord; import com.ruoyi.device.service.QrShowService; import com.ruoyi.inspect.mapper.InsOrderMapper; import com.ruoyi.inspect.service.InsOrderService; import com.ruoyi.system.service.CustomService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Objects; import java.util.Optional; @Service public class QrShowServiceImpl implements QrShowService { @Autowired private DeviceMetricRecordMapper deviceMetricRecordMapper; /** * 计算启用时长 * @param activationDate * @return */ public double calcUsedYears(LocalDateTime activationDate) { if(Objects.isNull(activationDate)){ return 0; } BigDecimal defDays = BigDecimal.valueOf(365); BigDecimal usedDays = BigDecimal.valueOf(Duration.between(activationDate,LocalDateTime.now()).toDays()); return usedDays.divide(defDays,2,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP).doubleValue(); } /** * 计算距离下次校准日期的天数百分比 * @param startDate * @param endDate * @return */ public double calcDeviceNextCheckRatio(Date startDate, Date endDate){ if(Objects.isNull(startDate) || Objects.isNull(endDate)){ return 0; } LocalDateTime startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); LocalDateTime endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); long totalDays = Duration.between(startLocalDate, endLocalDate).toDays(); long usedDays = Duration.between(startLocalDate, LocalDateTime.now()).toDays(); BigDecimal calcVal = BigDecimal.valueOf(usedDays).divide(BigDecimal.valueOf(totalDays),2,RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP); if(calcVal.compareTo(BigDecimal.ZERO)<0){ calcVal = BigDecimal.ZERO; }else if(calcVal.compareTo(BigDecimal.valueOf(100))>0){ calcVal = BigDecimal.valueOf(100); } return calcVal.doubleValue(); } /** * 查询设备校准/核查记录 * @param deviceId * @param type * @return */ public DeviceMetricRecord getDeviceMetricRecord(int deviceId, String type){ return Optional.ofNullable( deviceMetricRecordMapper.selectOne(Wrappers.lambdaQuery() .eq(DeviceMetricRecord::getDeviceId, deviceId) .eq(DeviceMetricRecord::getType, type) .orderByDesc(DeviceMetricRecord::getCreateTime) .last("limit 1"))).orElse(new DeviceMetricRecord()); } /** * 格式化日期 * @return */ public String formatDate(Date date,String formatter){ if(Objects.isNull(date)){ return ""; } LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); return localDateTime.format(DateTimeFormatter.ofPattern(formatter)); } /** * 格式化日期 * @return */ public String formatDate(LocalDate date,String formatter){ if(Objects.isNull(date)){ return ""; } return date.format(DateTimeFormatter.ofPattern(formatter)); } }