王磊——数据库类和接口 #23

Merged
hnu202326010106 merged 1 commits from wanglei_branch into develop 2 months ago

@ -0,0 +1,45 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "admin")
public class Admin {
@Id
@Column(name = "admin_id", length = 50)
private String adminId;
@Column(name = "admin_name", length = 50)
private String adminName;
@Column(name = "password", length = 200)
private String password;
@Column(name = "phone", length = 20)
private String phone;
@Enumerated(EnumType.STRING)
@Column(name = "role", length = 50)
private AdminRole role = AdminRole.area_admin;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private AdminStatus status = AdminStatus.active;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
public enum AdminRole {
super_admin, area_admin, viewer
}
public enum AdminStatus {
active, inactive
}
}

@ -0,0 +1,58 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "alert")
public class Alert {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "alert_id")
private Long alertId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "alert_type", length = 50)
private String alertType;
@Enumerated(EnumType.STRING)
@Column(name = "alert_level", length = 50)
private AlertLevel alertLevel;
@Column(name = "alert_message", columnDefinition = "TEXT")
private String alertMessage;
@Column(name = "area_id", length = 20)
private String areaId;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private AlertStatus status = AlertStatus.pending;
@Column(name = "timestamp")
private LocalDateTime timestamp = LocalDateTime.now();
@Column(name = "resolved_time")
private LocalDateTime resolvedTime;
@Column(name = "resolved_by", length = 50)
private String resolvedBy;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
public enum AlertLevel {
info, warning, error, critical
}
public enum AlertStatus {
pending, processing, resolved, closed
}
}

@ -0,0 +1,43 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "area")
public class Area {
@Id
@Column(name = "area_id", length = 20)
private String areaId;
@Column(name = "area_name", length = 100)
private String areaName;
@Enumerated(EnumType.STRING)
@Column(name = "area_type", length = 50)
private AreaType areaType;
@Column(name = "parent_area_id", length = 20)
private String parentAreaId;
@Column(length = 200)
private String address;
@Column(length = 50)
private String manager;
@Column(name = "manager_phone", length = 20) // 确保这个字段存在
private String managerPhone;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
public enum AreaType {
campus, building, zone
}
}

@ -0,0 +1,46 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "device")
public class Device {
@Id
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "device_name", length = 100)
private String deviceName;
@Enumerated(EnumType.STRING)
@Column(name = "device_type", length = 50)
private DeviceType deviceType;
@Column(name = "area_id", length = 20) // 确保这个字段存在
private String areaId;
@Column(name = "install_location", length = 200)
private String installLocation;
@Column(name = "install_date")
private LocalDate installDate;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private DeviceStatus status = DeviceStatus.online;
@Column(name = "create_time")
private LocalDateTime createTime = LocalDateTime.now();
public enum DeviceType {
water_maker, water_supply
}
public enum DeviceStatus {
online, offline, fault
}
}

@ -0,0 +1,36 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "device_terminal_mapping")
public class DeviceTerminalMapping {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mapping_id")
private Integer mappingId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "terminal_id", length = 20)
private String terminalId;
@Column(name = "terminal_name", length = 100)
private String terminalName;
@Enumerated(EnumType.STRING)
@Column(name = "terminal_status", length = 50)
private TerminalStatus terminalStatus;
@Column(name = "install_date")
private LocalDate installDate;
public enum TerminalStatus {
active, inactive
}
}

@ -0,0 +1,31 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "drink_recommendation")
public class DrinkRecommendation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "recommendation_id")
private Integer recommendationId;
@Column(name = "student_id", length = 50)
private String studentId;
@Column(name = "daily_target", precision = 6, scale = 2)
private Double dailyTarget;
@Column(name = "current_progress", precision = 6, scale = 2)
private Double currentProgress;
@Column(name = "recommendation_date")
private LocalDate recommendationDate;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
}

@ -0,0 +1,47 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "drink_record")
public class DrinkRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "record_id")
private Long recordId;
@Column(name = "student_id", length = 50)
private String studentId;
@Column(name = "terminal_id", length = 20)
private String terminalId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "volume", precision = 6, scale = 2)
private Double volume;
@Column(name = "water_quality", length = 50)
private String waterQuality;
@Column(name = "tds_value", precision = 8, scale = 2)
private Double tdsValue;
@Column(name = "drink_date")
private LocalDate drinkDate;
@Column(name = "drink_time")
private LocalTime drinkTime;
@Column(name = "location", length = 200)
private String location;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
}

@ -0,0 +1,44 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "inspection_record")
public class InspectionRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "inspection_id")
private Integer inspectionId;
@Column(name = "order_id", length = 30)
private String orderId;
@Column(name = "repairman_id", length = 50)
private String repairmanId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Enumerated(EnumType.STRING)
@Column(name = "inspection_status", length = 50)
private InspectionStatus inspectionStatus;
@Column(name = "abnormal_description", columnDefinition = "LONGTEXT")
private String abnormalDescription;
@Column(name = "inspection_photo", columnDefinition = "LONGTEXT")
private String inspectionPhoto;
@Column(name = "inspection_time")
private LocalDateTime inspectionTime;
@Column(name = "submitted_at")
private LocalDateTime submittedAt = LocalDateTime.now();
public enum InspectionStatus {
normal, abnormal
}
}

@ -0,0 +1,42 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "maintenance_plan")
public class MaintenancePlan {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "plan_id")
private Integer planId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "maintenance_type", length = 50)
private String maintenanceType;
@Column(name = "cycle_days")
private Integer cycleDays;
@Column(name = "last_maintenance_date")
private LocalDate lastMaintenanceDate;
@Column(name = "next_maintenance_date")
private LocalDate nextMaintenanceDate;
@Enumerated(EnumType.STRING)
@Column(name = "plan_status", length = 50)
private PlanStatus planStatus;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
public enum PlanStatus {
effective, expired, closed
}
}

@ -0,0 +1,48 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "message_push")
public class MessagePush {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "message_id")
private Integer messageId;
@Column(name = "student_id", length = 50)
private String studentId;
@Column(name = "admin_id", length = 50)
private String adminId;
@Column(name = "repairman_id", length = 50)
private String repairmanId;
@Column(name = "user_id", length = 50)
private String userId;
@Column(name = "user_type", length = 50)
private String userType;
@Column(name = "message_type", length = 50)
private String messageType;
@Column(name = "title", length = 200)
private String title;
@Column(name = "content", columnDefinition = "LONGTEXT")
private String content;
@Column(name = "is_read")
private Boolean isRead = false;
@Column(name = "push_time")
private LocalDateTime pushTime = LocalDateTime.now();
@Column(name = "related_id", length = 50)
private String relatedId;
}

@ -0,0 +1,41 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "repairer_auth")
public class RepairerAuth {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "auth_id")
private Long authId;
@Column(name = "repairman_id", length = 50)
private String repairmanId;
@Column(name = "username", length = 50)
private String username;
@Column(name = "password", length = 200)
private String password;
@Enumerated(EnumType.STRING)
@Column(name = "account_status", length = 50)
private AccountStatus accountStatus = AccountStatus.active;
@Column(name = "last_login")
private LocalDateTime lastLogin;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
public enum AccountStatus {
active, inactive, locked
}
}

@ -0,0 +1,43 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "repairman")
public class Repairman {
@Id
@Column(name = "repairman_id", length = 50)
private String repairmanId;
@Column(name = "repairman_name", length = 100)
private String repairmanName;
@Column(length = 20)
private String phone;
@Column(name = "area_id", length = 20)
private String areaId;
@Column(name = "skills", length = 200)
private String skills;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private RepairmanStatus status = RepairmanStatus.idle;
@Column(name = "work_count")
private Integer workCount = 0;
@Column(name = "rating", precision = 3, scale = 2)
private Double rating = 5.0;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
public enum RepairmanStatus {
idle, busy, vacation
}
}

@ -0,0 +1,40 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "terminal_usage_stats")
public class TerminalUsageStats {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "stat_id")
private Long statId;
@Column(name = "terminal_id", length = 20)
private String terminalId;
@Column(name = "stat_date")
private LocalDate statDate;
@Column(name = "usage_count")
private Integer usageCount = 0;
@Column(name = "total_water_output", precision = 10, scale = 2)
private Double totalWaterOutput = 0.0;
@Column(name = "avg_water_per_use", precision = 6, scale = 2)
private Double avgWaterPerUse = 0.0;
@Column(name = "peak_hour", length = 5)
private String peakHour;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
}

@ -0,0 +1,40 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "student_id", length = 50)
private String studentId;
@Column(name = "student_name", length = 50)
private String studentName;
@Column(name = "password", length = 200)
private String password;
@Column(name = "phone", length = 20)
private String phone;
@Column(name = "email", length = 100)
private String email;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private UserStatus status = UserStatus.active;
@Column(name = "create_time")
private LocalDateTime createTime = LocalDateTime.now();
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
public enum UserStatus {
active, inactive
}
}

@ -0,0 +1,55 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "water_maker_realtime_data")
public class WaterMakerRealtimeData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "tds_value", precision = 8, scale = 2)
private Double tdsValue;
@Column(name = "water_flow", precision = 8, scale = 2)
private Double waterFlow;
@Column(name = "water_pressure", precision = 8, scale = 2)
private Double waterPressure;
@Column(name = "filter_life")
private Integer filterLife;
@Column(name = "leakage")
private Boolean leakage = false;
@Column(name = "temperature", precision = 5, scale = 2)
private Double temperature;
@Column(name = "humidity", precision = 5, scale = 2)
private Double humidity;
@Column(name = "water_quality", length = 50)
private String waterQuality;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private DeviceStatus status = DeviceStatus.normal;
@Column(name = "timestamp")
private LocalDateTime timestamp = LocalDateTime.now();
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
public enum DeviceStatus {
normal, warning, error
}
}

@ -0,0 +1,35 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "water_quality_history")
public class WaterQualityHistory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "terminal_id", length = 20)
private String terminalId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "tds_value", precision = 8, scale = 2)
private Double tdsValue;
@Column(name = "water_quality", length = 50)
private String waterQuality;
@Column(name = "temperature", precision = 5, scale = 2)
private Double temperature;
@Column(name = "timestamp")
private LocalDateTime timestamp = LocalDateTime.now();
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
}

@ -0,0 +1,46 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "water_supply_realtime_data")
public class WaterSupplyRealtimeData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "water_flow", precision = 8, scale = 2)
private Double waterFlow;
@Column(name = "water_pressure", precision = 8, scale = 2)
private Double waterPressure;
@Column(name = "water_level", precision = 8, scale = 2)
private Double waterLevel;
@Column(name = "temperature", precision = 5, scale = 2)
private Double temperature;
@Column(name = "humidity", precision = 5, scale = 2)
private Double humidity;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private DeviceStatus status = DeviceStatus.normal;
@Column(name = "timestamp")
private LocalDateTime timestamp = LocalDateTime.now();
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
public enum DeviceStatus {
normal, warning, error
}
}

@ -0,0 +1,77 @@
package com.campus.water.entity;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "work_order")
public class WorkOrder {
@Id
@Column(name = "order_id", length = 30)
private String orderId;
@Column(name = "alert_id")
private Long alertId;
@Column(name = "device_id", length = 20)
private String deviceId;
@Column(name = "area_id", length = 20)
private String areaId;
@Enumerated(EnumType.STRING)
@Column(name = "order_type", length = 50)
private OrderType orderType;
@Column(name = "description", columnDefinition = "TEXT")
private String description;
@Enumerated(EnumType.STRING)
@Column(name = "priority", length = 50)
private OrderPriority priority;
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 50)
private OrderStatus status = OrderStatus.pending;
@Column(name = "assigned_repairman_id", length = 50)
private String assignedRepairmanId;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@Column(name = "grabbed_time")
private LocalDateTime grabbedTime;
@Column(name = "deadline")
private LocalDateTime deadline;
@Column(name = "completed_time")
private LocalDateTime completedTime;
@Column(name = "deal_note", columnDefinition = "TEXT")
private String dealNote;
@Column(name = "img_url", length = 500)
private String imgUrl;
@Column(name = "created_by", length = 50)
private String createdBy;
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
public enum OrderType {
repair, maintenance, inspection
}
public enum OrderPriority {
low, medium, high, urgent
}
public enum OrderStatus {
pending, grabbed, processing, completed, closed, timeout
}
}

@ -0,0 +1,23 @@
package com.campus.water.mapper;
import datebaseclass.system.Admin;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface AdminRepository extends JpaRepository<Admin, String> {
Optional<Admin> findByAdminId(String adminId);
List<Admin> findByAdminNameContaining(String adminName);
List<Admin> findByRole(Admin.AdminRole role);
List<Admin> findByStatus(Admin.AdminStatus status);
Optional<Admin> findByPhone(String phone);
@Query("SELECT a FROM Admin a WHERE a.role = ?1 AND a.status = ?2")
List<Admin> findByRoleAndStatus(Admin.AdminRole role, Admin.AdminStatus status);
boolean existsByAdminId(String adminId);
boolean existsByPhone(String phone);
}

@ -0,0 +1,20 @@
package com.campus.water.mapper;
import datebaseclass.sensor.Alert;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface AlertRepository extends JpaRepository<Alert, Long> {
List<Alert> findByDeviceId(String deviceId);
List<Alert> findByAlertType(String alertType);
List<Alert> findByStatus(Alert.AlertStatus status);
List<Alert> findByAlertLevel(Alert.AlertLevel alertLevel);
List<Alert> findByAreaId(String areaId);
List<Alert> findByTimestampBetween(LocalDateTime start, LocalDateTime end);
List<Alert> findByStatusAndAlertLevel(Alert.AlertStatus status, Alert.AlertLevel level);
List<Alert> findByTimestampAfter(LocalDateTime timestamp);
List<Alert> findByResolvedBy(String resolvedBy);
}

@ -0,0 +1,20 @@
package com.campus.water.mapper;
import datebaseclass.system.Area;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface AreaRepository extends JpaRepository<Area, String> {
List<Area> findByAreaType(Area.AreaType areaType);
List<Area> findByParentAreaId(String parentAreaId);
List<Area> findByManager(String manager);
// 修复:使用正确的字段名 managerPhone
List<Area> findByManagerPhone(String managerPhone);
@Query("SELECT a FROM Area a WHERE a.areaType = ?1 AND a.parentAreaId IS NULL")
List<Area> findRootAreasByType(Area.AreaType areaType);
}

@ -0,0 +1,18 @@
package com.campus.water.mapper;
import datebaseclass.system.Device;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface DeviceRepository extends JpaRepository<Device, String> {
List<Device> findByAreaId(String areaId);
List<Device> findByDeviceType(Device.DeviceType deviceType);
List<Device> findByStatus(Device.DeviceStatus status);
// 修复确保areaId字段存在
List<Device> findByAreaIdAndDeviceType(String areaId, Device.DeviceType deviceType);
List<Device> findByInstallLocationContaining(String location);
}

@ -0,0 +1,15 @@
package com.campus.water.mapper;
import datebaseclass.system.DeviceTerminalMapping;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface DeviceTerminalMappingRepository extends JpaRepository<DeviceTerminalMapping, Integer> {
Optional<DeviceTerminalMapping> findByTerminalId(String terminalId);
List<DeviceTerminalMapping> findByDeviceId(String deviceId);
List<DeviceTerminalMapping> findByTerminalStatus(DeviceTerminalMapping.TerminalStatus status);
Optional<DeviceTerminalMapping> findByDeviceIdAndTerminalId(String deviceId, String terminalId);
}

@ -0,0 +1,28 @@
package com.campus.water.mapper;
import datebaseclass.business.DrinkRecommendation;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
@Repository
public interface DrinkRecommendationRepository extends JpaRepository<DrinkRecommendation, Long> {
List<DrinkRecommendation> findByStudentId(String studentId);
List<DrinkRecommendation> findByRecommendationDate(LocalDate recommendationDate);
List<DrinkRecommendation> findByRecommendationDateBetween(LocalDate start, LocalDate end);
@Query("SELECT d FROM DrinkRecommendation d WHERE d.studentId = ?1 AND d.recommendationDate = ?2")
Optional<DrinkRecommendation> findByStudentIdAndRecommendationDate(String studentId, LocalDate date);
@Query("SELECT d FROM DrinkRecommendation d WHERE d.studentId = ?1 AND d.recommendationDate BETWEEN ?2 AND ?3 ORDER BY d.recommendationDate DESC")
List<DrinkRecommendation> findByStudentIdAndRecommendationDateBetween(String studentId, LocalDate start, LocalDate end);
@Query("SELECT SUM(d.currentProgress) FROM DrinkRecommendation d WHERE d.studentId = ?1 AND d.recommendationDate = ?2")
Double getTotalProgressByStudentIdAndDate(String studentId, LocalDate date);
@Query("SELECT AVG(d.dailyTarget) FROM DrinkRecommendation d WHERE d.studentId = ?1 AND d.recommendationDate BETWEEN ?2 AND ?3")
Double getAverageDailyTargetByStudentIdAndPeriod(String studentId, LocalDate start, LocalDate end);
}

@ -0,0 +1,26 @@
package com.campus.water.mapper;
import datebaseclass.business.DrinkRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
@Repository
public interface DrinkRecordRepository extends JpaRepository<DrinkRecord, Long> {
// 现有方法...
List<DrinkRecord> findByStudentId(String studentId);
List<DrinkRecord> findByTerminalId(String terminalId);
List<DrinkRecord> findByDeviceId(String deviceId);
// 新增基于drinkDate的查询方法
List<DrinkRecord> findByStudentIdAndDrinkDate(String studentId, LocalDate drinkDate);
List<DrinkRecord> findByStudentIdAndDrinkDateBetween(String studentId, LocalDate start, LocalDate end);
@Query("SELECT SUM(d.volume) FROM DrinkRecord d WHERE d.studentId = ?1 AND d.drinkDate = ?2")
Double getTotalVolumeByStudentIdAndDate(String studentId, LocalDate date);
@Query("SELECT d FROM DrinkRecord d WHERE d.studentId = ?1 AND d.drinkDate BETWEEN ?2 AND ?3 ORDER BY d.drinkDate DESC, d.drinkTime DESC")
List<DrinkRecord> findByStudentIdAndDrinkDateBetweenOrdered(String studentId, LocalDate start, LocalDate end);
}

@ -0,0 +1,18 @@
package com.campus.water.mapper;
import datebaseclass.business.InspectionRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface InspectionRecordRepository extends JpaRepository<InspectionRecord, Long> {
List<InspectionRecord> findByOrderId(String orderId);
List<InspectionRecord> findByRepairmanId(String repairmanId);
List<InspectionRecord> findByDeviceId(String deviceId);
List<InspectionRecord> findByInspectionStatus(InspectionRecord.InspectionStatus status);
List<InspectionRecord> findByInspectionTimeBetween(LocalDateTime start, LocalDateTime end);
List<InspectionRecord> findByRepairmanIdAndInspectionTimeBetween(String repairmanId, LocalDateTime start, LocalDateTime end);
List<InspectionRecord> findBySubmittedAtBetween(LocalDateTime start, LocalDateTime end);
}

@ -0,0 +1,21 @@
package com.campus.water.mapper;
import datebaseclass.business.MaintenancePlan;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
@Repository
public interface MaintenancePlanRepository extends JpaRepository<MaintenancePlan, Long> {
List<MaintenancePlan> findByDeviceId(String deviceId);
List<MaintenancePlan> findByPlanStatus(MaintenancePlan.PlanStatus planStatus);
List<MaintenancePlan> findByMaintenanceType(String maintenanceType);
List<MaintenancePlan> findByNextMaintenanceDateBefore(LocalDate date);
List<MaintenancePlan> findByNextMaintenanceDateBetween(LocalDate start, LocalDate end);
List<MaintenancePlan> findByDeviceIdAndPlanStatus(String deviceId, MaintenancePlan.PlanStatus planStatus);
@Query("SELECT mp FROM MaintenancePlan mp WHERE mp.nextMaintenanceDate <= ?1 AND mp.planStatus = 'active'")
List<MaintenancePlan> findDueMaintenancePlans(LocalDate date);
}

@ -0,0 +1,30 @@
package com.campus.water.mapper;
import datebaseclass.business.MessagePush;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface MessagePushRepository extends JpaRepository<MessagePush, Integer> {
List<MessagePush> findByStudentId(String studentId);
List<MessagePush> findByAdminId(String adminId);
List<MessagePush> findByRepairmanId(String repairmanId);
List<MessagePush> findByUserType(String userType);
List<MessagePush> findByMessageType(String messageType);
List<MessagePush> findByIsRead(Boolean isRead);
@Query("SELECT m FROM MessagePush m WHERE m.userId = ?1 AND m.userType = ?2")
List<MessagePush> findByUserIdAndUserType(String userId, String userType);
@Query("SELECT m FROM MessagePush m WHERE m.pushTime BETWEEN ?1 AND ?2")
List<MessagePush> findByPushTimeBetween(LocalDateTime start, LocalDateTime end);
@Query("SELECT m FROM MessagePush m WHERE m.relatedId = ?1")
List<MessagePush> findByRelatedId(String relatedId);
@Query("SELECT COUNT(m) FROM MessagePush m WHERE m.userId = ?1 AND m.isRead = false")
Long countUnreadMessagesByUserId(String userId);
}

@ -0,0 +1,21 @@
package com.campus.water.mapper;
import datebaseclass.system.RepairerAuth;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface RepairerAuthRepository extends JpaRepository<RepairerAuth, Long> {
Optional<RepairerAuth> findByUsername(String username);
Optional<RepairerAuth> findByRepairmanId(String repairmanId);
List<RepairerAuth> findByAccountStatus(RepairerAuth.AccountStatus accountStatus);
@Query("SELECT ra FROM RepairerAuth ra WHERE ra.username = ?1 AND ra.accountStatus = 'active'")
Optional<RepairerAuth> findActiveByUsername(String username);
boolean existsByUsername(String username);
boolean existsByRepairmanId(String repairmanId);
}

@ -0,0 +1,15 @@
package com.campus.water.mapper;
import datebaseclass.system.Repairman;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface RepairmanRepository extends JpaRepository<Repairman, String> {
List<Repairman> findByAreaId(String areaId);
List<Repairman> findByStatus(Repairman.RepairmanStatus status);
List<Repairman> findBySkillsContaining(String skill);
List<Repairman> findByAreaIdAndStatus(String areaId, Repairman.RepairmanStatus status);
List<Repairman> findByRatingGreaterThanEqual(Double minRating);
}

@ -0,0 +1,28 @@
package com.campus.water.mapper;
import datebaseclass.business.TerminalUsageStats;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
@Repository
public interface TerminalUsageStatsRepository extends JpaRepository<TerminalUsageStats, Long> {
List<TerminalUsageStats> findByTerminalId(String terminalId);
List<TerminalUsageStats> findByStatDate(LocalDate statDate);
List<TerminalUsageStats> findByStatDateBetween(LocalDate start, LocalDate end);
@Query("SELECT t FROM TerminalUsageStats t WHERE t.terminalId = ?1 AND t.statDate BETWEEN ?2 AND ?3")
List<TerminalUsageStats> findByTerminalIdAndStatDateBetween(String terminalId, LocalDate start, LocalDate end);
@Query("SELECT t FROM TerminalUsageStats t WHERE t.usageCount > ?1")
List<TerminalUsageStats> findByUsageCountGreaterThan(Integer usageCount);
@Query("SELECT t FROM TerminalUsageStats t WHERE t.totalWaterOutput > ?1")
List<TerminalUsageStats> findByTotalWaterOutputGreaterThan(Double totalWaterOutput);
@Query("SELECT t FROM TerminalUsageStats t WHERE t.terminalId = ?1 AND t.statDate = ?2")
Optional<TerminalUsageStats> findByTerminalIdAndStatDate(String terminalId, LocalDate statDate);
}

@ -0,0 +1,24 @@
package com.campus.water.mapper;
import datebaseclass.business.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<User, String> {
Optional<User> findByStudentId(String studentId);
List<User> findByStudentNameContaining(String studentName);
List<User> findByStatus(User.UserStatus status);
Optional<User> findByPhone(String phone);
Optional<User> findByEmail(String email);
@Query("SELECT u FROM User u WHERE u.studentName LIKE %?1% AND u.status = ?2")
List<User> findByStudentNameContainingAndStatus(String studentName, User.UserStatus status);
boolean existsByStudentId(String studentId);
boolean existsByPhone(String phone);
boolean existsByEmail(String email);
}

@ -0,0 +1,31 @@
package com.campus.water.mapper;
import datebaseclass.sensor.WaterMakerRealtimeData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface WaterMakerRealtimeDataRepository extends JpaRepository<WaterMakerRealtimeData, Long> {
List<WaterMakerRealtimeData> findByDeviceId(String deviceId);
@Query("SELECT w FROM WaterMakerRealtimeData w WHERE w.timestamp BETWEEN ?1 AND ?2 ORDER BY w.timestamp DESC")
List<WaterMakerRealtimeData> findByTimestampBetween(LocalDateTime start, LocalDateTime end);
@Query("SELECT w FROM WaterMakerRealtimeData w WHERE w.deviceId = ?1 AND w.timestamp BETWEEN ?2 AND ?3 ORDER BY w.timestamp DESC")
List<WaterMakerRealtimeData> findByDeviceIdAndTimestampBetween(String deviceId, LocalDateTime start, LocalDateTime end);
@Query(value = "SELECT * FROM water_maker_realtime_data w WHERE w.device_id = ?1 ORDER BY w.timestamp DESC LIMIT 10", nativeQuery = true)
List<WaterMakerRealtimeData> findTop10ByDeviceIdOrderByTimestampDesc(String deviceId);
List<WaterMakerRealtimeData> findByLeakage(Boolean leakage);
List<WaterMakerRealtimeData> findByStatus(WaterMakerRealtimeData.DeviceStatus status);
@Query("SELECT w FROM WaterMakerRealtimeData w WHERE w.filterLife < ?1")
List<WaterMakerRealtimeData> findByFilterLifeLessThan(Integer filterLife);
@Query("SELECT w FROM WaterMakerRealtimeData w WHERE w.tdsValue > ?1")
List<WaterMakerRealtimeData> findByTdsValueGreaterThan(Double tdsValue);
}

@ -0,0 +1,29 @@
package com.campus.water.mapper;
import datebaseclass.sensor.WaterQualityHistory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface WaterQualityHistoryRepository extends JpaRepository<WaterQualityHistory, Long> {
List<WaterQualityHistory> findByTerminalId(String terminalId);
List<WaterQualityHistory> findByDeviceId(String deviceId);
@Query("SELECT w FROM WaterQualityHistory w WHERE w.terminalId = ?1 AND w.timestamp BETWEEN ?2 AND ?3 ORDER BY w.timestamp DESC")
List<WaterQualityHistory> findByTerminalIdAndTimestampBetween(String terminalId, LocalDateTime start, LocalDateTime end);
@Query(value = "SELECT * FROM water_quality_history w WHERE w.terminal_id = ?1 ORDER BY w.timestamp DESC LIMIT 5", nativeQuery = true)
List<WaterQualityHistory> findTop5ByTerminalIdOrderByTimestampDesc(String terminalId);
@Query("SELECT w FROM WaterQualityHistory w WHERE w.waterQuality = ?1")
List<WaterQualityHistory> findByWaterQuality(String waterQuality);
@Query("SELECT w FROM WaterQualityHistory w WHERE w.tdsValue > ?1")
List<WaterQualityHistory> findByTdsValueGreaterThan(Double tdsValue);
@Query("SELECT w FROM WaterQualityHistory w WHERE w.deviceId = ?1 AND w.timestamp BETWEEN ?2 AND ?3 ORDER BY w.timestamp DESC")
List<WaterQualityHistory> findByDeviceIdAndTimestampBetween(String deviceId, LocalDateTime start, LocalDateTime end);
}

@ -0,0 +1,33 @@
package com.campus.water.mapper;
import datebaseclass.sensor.WaterSupplyRealtimeData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface WaterSupplyRealtimeDataRepository extends JpaRepository<WaterSupplyRealtimeData, Long> {
List<WaterSupplyRealtimeData> findByDeviceId(String deviceId);
@Query("SELECT w FROM WaterSupplyRealtimeData w WHERE w.timestamp BETWEEN ?1 AND ?2 ORDER BY w.timestamp DESC")
List<WaterSupplyRealtimeData> findByTimestampBetween(LocalDateTime start, LocalDateTime end);
@Query("SELECT w FROM WaterSupplyRealtimeData w WHERE w.deviceId = ?1 AND w.timestamp BETWEEN ?2 AND ?3 ORDER BY w.timestamp DESC")
List<WaterSupplyRealtimeData> findByDeviceIdAndTimestampBetween(String deviceId, LocalDateTime start, LocalDateTime end);
@Query(value = "SELECT * FROM water_supply_realtime_data w WHERE w.device_id = ?1 ORDER BY w.timestamp DESC LIMIT 10", nativeQuery = true)
List<WaterSupplyRealtimeData> findTop10ByDeviceIdOrderByTimestampDesc(String deviceId);
List<WaterSupplyRealtimeData> findByStatus(WaterSupplyRealtimeData.DeviceStatus status);
@Query("SELECT w FROM WaterSupplyRealtimeData w WHERE w.waterLevel < ?1")
List<WaterSupplyRealtimeData> findByWaterLevelLessThan(Double waterLevel);
@Query("SELECT w FROM WaterSupplyRealtimeData w WHERE w.temperature > ?1")
List<WaterSupplyRealtimeData> findByTemperatureGreaterThan(Double temperature);
@Query("SELECT w FROM WaterSupplyRealtimeData w WHERE w.waterPressure < ?1")
List<WaterSupplyRealtimeData> findByWaterPressureLessThan(Double waterPressure);
}

@ -0,0 +1,23 @@
package com.campus.water.mapper;
import datebaseclass.business.WorkOrder;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface WorkOrderRepository extends JpaRepository<WorkOrder, String> {
List<WorkOrder> findByAreaId(String areaId);
List<WorkOrder> findByStatus(WorkOrder.OrderStatus status);
List<WorkOrder> findByAssignedRepairmanId(String assignedRepairmanId);
List<WorkOrder> findByAreaIdAndStatus(String areaId, WorkOrder.OrderStatus status);
List<WorkOrder> findByPriority(WorkOrder.OrderPriority priority);
List<WorkOrder> findByDeviceId(String deviceId);
List<WorkOrder> findByOrderType(WorkOrder.OrderType orderType);
List<WorkOrder> findByCreatedTimeBetween(LocalDateTime start, LocalDateTime end);
List<WorkOrder> findByDeadlineBeforeAndStatusNot(LocalDateTime deadline, WorkOrder.OrderStatus status);
List<WorkOrder> findByAssignedRepairmanIdAndStatus(String assignedRepairmanId, WorkOrder.OrderStatus status);
List<WorkOrder> findByAlertId(Long alertId);
List<WorkOrder> findByCreatedBy(String createdBy);
}
Loading…
Cancel
Save