package com.zc.business.domain; import cn.hutool.core.date.DateUtil; import lombok.Getter; import lombok.Setter; import org.apache.commons.codec.digest.DigestUtils; import java.util.Objects; /** * 门架交通特征指数 * @author xiepufeng */ @Getter @Setter public class DcGantryMetricsStatisticsData extends DcStatisticsData { /** * 门架编号 */ private String gantryCode; /** * 拥堵度 * 1-畅通 * 2-基本畅通 * 3-轻度拥堵 * 4-中度拥堵 * 5-重度拥堵 */ private Integer crowdingRate; /** * 交通组成特征指数(大车占比) * 1-低 * 2-中 * 3-高 */ private Integer trafficCompositionRate; /** * 饱和度指数 */ private Double saturationRate; /** * 重写equals方法,用于比较两个DcGantryStatisticsData对象是否相等。 * * @param o 要与当前对象比较的对象。 * @return 如果两个对象相等,则返回true;否则返回false。 */ @Override public boolean equals(Object o) { if (this == o) return true; // 比较是否为同一对象,是则直接返回true if (o == null || getClass() != o.getClass()) return false; // 比较对象是否为空或类型是否不同,是则返回false DcGantryMetricsStatisticsData that = (DcGantryMetricsStatisticsData) o; // 类型转换 // 使用Objects.equals方法比较对象的各个属性值 return Objects.equals(gantryCode, that.getGantryCode()) && Objects.equals(getReportTime(), that.getReportTime()) && Objects.equals(getPeriodType(), that.getPeriodType()); } /** * 重写hashCode方法,基于对象的属性生成哈希码。 * @return 对象的哈希码值。 */ @Override public int hashCode() { return Objects.hash(gantryCode, getReportTime(), getPeriodType()); } /** * 生成唯一标识符。 * 该方法通过将多个属性结合,然后对结合后的字符串进行MD5哈希处理来生成一个唯一标识符。 * 结合的属性包括:门架站点标识、统计日期、道路方向、统计粒度和出入类型。 */ @Override public void generateUniqueId() { // 将多个属性按照指定格式组合成一个字符串 String combinedAttributes = gantryCode + "_" + DateUtil.format(getStatisticalDate(), "yyyyMMdd_HHmmss") + "_" + getPeriodType(); // 对组合后的字符串进行MD5哈希处理,生成唯一标识符,并赋值给当前对象的id属性 this.setId(DigestUtils.md5Hex(combinedAttributes)); } }