王磊——第十周新增开发工单管理接口,开发扫码用水接口,水质信息查询接口 #26
Merged
hnu202326010106
merged 1 commits from wanglei_branch into develop 1 month ago
@ -0,0 +1,171 @@
|
||||
package com.campus.water.controller;
|
||||
|
||||
import com.campus.water.entity.*;
|
||||
import com.campus.water.mapper.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Controller
|
||||
public class WaterUsageController {
|
||||
|
||||
@Autowired
|
||||
private DeviceTerminalMappingRepository deviceTerminalMappingRepository;
|
||||
|
||||
@Autowired
|
||||
private WaterMakerRealtimeDataRepository waterMakerRealtimeDataRepository;
|
||||
|
||||
@Autowired
|
||||
private WaterQualityHistoryRepository waterQualityHistoryRepository;
|
||||
|
||||
@Autowired
|
||||
private DrinkRecordRepository drinkRecordRepository;
|
||||
|
||||
@Autowired
|
||||
private TerminalUsageStatsRepository terminalUsageStatsRepository;
|
||||
|
||||
// 扫码用水
|
||||
@Transactional
|
||||
public Map<String, Object> scanToDrink(String terminalId, String studentId, Double waterConsumption) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
Optional<DeviceTerminalMapping> mappingOpt = deviceTerminalMappingRepository.findByTerminalId(terminalId);
|
||||
if (mappingOpt.isEmpty()) {
|
||||
result.put("success", false);
|
||||
result.put("message", "终端设备不存在");
|
||||
return result;
|
||||
}
|
||||
|
||||
DeviceTerminalMapping mapping = mappingOpt.get();
|
||||
if (mapping.getTerminalStatus() != DeviceTerminalMapping.TerminalStatus.active) {
|
||||
result.put("success", false);
|
||||
result.put("message", "终端设备未激活");
|
||||
return result;
|
||||
}
|
||||
|
||||
Optional<WaterMakerRealtimeData> realtimeDataOpt =
|
||||
waterMakerRealtimeDataRepository.findLatestByDeviceId(mapping.getDeviceId());
|
||||
|
||||
DrinkRecord drinkRecord = new DrinkRecord();
|
||||
drinkRecord.setStudentId(studentId);
|
||||
drinkRecord.setTerminalId(terminalId);
|
||||
drinkRecord.setDeviceId(mapping.getDeviceId());
|
||||
drinkRecord.setWaterConsumption(waterConsumption);
|
||||
drinkRecord.setDrinkTime(LocalDateTime.now());
|
||||
drinkRecord.setLocation(mapping.getTerminalName());
|
||||
|
||||
if (realtimeDataOpt.isPresent()) {
|
||||
WaterMakerRealtimeData realtimeData = realtimeDataOpt.get();
|
||||
drinkRecord.setTdsValue(realtimeData.getTdsValue3());
|
||||
drinkRecord.setWaterQuality(realtimeData.getWaterQuality());
|
||||
}
|
||||
|
||||
drinkRecordRepository.save(drinkRecord);
|
||||
updateTerminalUsageStats(terminalId, waterConsumption);
|
||||
|
||||
result.put("success", true);
|
||||
result.put("message", "用水成功");
|
||||
result.put("waterConsumption", waterConsumption);
|
||||
result.put("timestamp", LocalDateTime.now());
|
||||
return result;
|
||||
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("message", "用水失败: " + e.getMessage());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新终端使用统计
|
||||
private void updateTerminalUsageStats(String terminalId, Double waterConsumption) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
Optional<TerminalUsageStats> statsOpt = terminalUsageStatsRepository
|
||||
.findByTerminalIdAndStatDate(terminalId, now.toLocalDate());
|
||||
|
||||
TerminalUsageStats stats;
|
||||
if (statsOpt.isPresent()) {
|
||||
stats = statsOpt.get();
|
||||
stats.setUsageCount(stats.getUsageCount() + 1);
|
||||
stats.setTotalWaterOutput(stats.getTotalWaterOutput() + waterConsumption);
|
||||
stats.setAvgWaterPerUse(stats.getTotalWaterOutput() / stats.getUsageCount());
|
||||
} else {
|
||||
stats = new TerminalUsageStats();
|
||||
stats.setTerminalId(terminalId);
|
||||
stats.setStatDate(now.toLocalDate());
|
||||
stats.setUsageCount(1);
|
||||
stats.setTotalWaterOutput(waterConsumption);
|
||||
stats.setAvgWaterPerUse(waterConsumption);
|
||||
stats.setPeakHour(String.format("%02d:00", now.getHour()));
|
||||
}
|
||||
|
||||
stats.setUpdatedTime(now);
|
||||
terminalUsageStatsRepository.save(stats);
|
||||
}
|
||||
|
||||
// 获取水质信息
|
||||
public Map<String, Object> getWaterQualityInfo(String deviceId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
Optional<WaterMakerRealtimeData> realtimeDataOpt =
|
||||
waterMakerRealtimeDataRepository.findLatestByDeviceId(deviceId);
|
||||
|
||||
Optional<WaterQualityHistory> qualityHistoryOpt =
|
||||
waterQualityHistoryRepository.findLatestByDeviceId(deviceId);
|
||||
|
||||
if (realtimeDataOpt.isPresent()) {
|
||||
WaterMakerRealtimeData realtimeData = realtimeDataOpt.get();
|
||||
result.put("deviceId", deviceId);
|
||||
result.put("rawWaterTds", realtimeData.getTdsValue1());
|
||||
result.put("pureWaterTds", realtimeData.getTdsValue2());
|
||||
result.put("mineralWaterTds", realtimeData.getTdsValue3());
|
||||
result.put("waterQuality", realtimeData.getWaterQuality());
|
||||
result.put("filterLife", realtimeData.getFilterLife());
|
||||
result.put("status", realtimeData.getStatus());
|
||||
result.put("updateTime", realtimeData.getRecordTime());
|
||||
}
|
||||
|
||||
if (qualityHistoryOpt.isPresent()) {
|
||||
WaterQualityHistory qualityHistory = qualityHistoryOpt.get();
|
||||
result.put("lastDetectionTime", qualityHistory.getDetectedTime());
|
||||
}
|
||||
|
||||
result.put("success", true);
|
||||
return result;
|
||||
|
||||
} catch (Exception e) {
|
||||
result.put("success", false);
|
||||
result.put("message", "获取水质信息失败: " + e.getMessage());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取终端设备信息
|
||||
public Map<String, Object> getTerminalInfo(String terminalId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
Optional<DeviceTerminalMapping> mappingOpt = deviceTerminalMappingRepository.findByTerminalId(terminalId);
|
||||
if (mappingOpt.isPresent()) {
|
||||
DeviceTerminalMapping mapping = mappingOpt.get();
|
||||
result.put("terminalId", terminalId);
|
||||
result.put("terminalName", mapping.getTerminalName());
|
||||
result.put("deviceId", mapping.getDeviceId());
|
||||
result.put("status", mapping.getTerminalStatus());
|
||||
result.put("success", true);
|
||||
|
||||
Map<String, Object> qualityInfo = getWaterQualityInfo(mapping.getDeviceId());
|
||||
result.putAll(qualityInfo);
|
||||
} else {
|
||||
result.put("success", false);
|
||||
result.put("message", "终端设备不存在");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,118 @@
|
||||
package com.campus.water.controller;
|
||||
|
||||
import com.campus.water.entity.WorkOrder;
|
||||
import com.campus.water.mapper.WorkOrderRepository;
|
||||
import com.campus.water.mapper.RepairmanRepository;
|
||||
import com.campus.water.mapper.AlertRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Controller
|
||||
public class WorkOrderController {
|
||||
|
||||
@Autowired
|
||||
private WorkOrderRepository workOrderRepository;
|
||||
|
||||
@Autowired
|
||||
private RepairmanRepository repairmanRepository;
|
||||
|
||||
@Autowired
|
||||
private AlertRepository alertRepository;
|
||||
|
||||
// 抢单功能
|
||||
@Transactional
|
||||
public boolean grabOrder(String orderId, String repairmanId) {
|
||||
Optional<WorkOrder> orderOpt = workOrderRepository.findById(orderId);
|
||||
if (orderOpt.isPresent()) {
|
||||
WorkOrder order = orderOpt.get();
|
||||
if (order.getStatus() == WorkOrder.OrderStatus.pending) {
|
||||
var repairman = repairmanRepository.findById(repairmanId);
|
||||
if (repairman.isPresent() && repairman.get().getStatus() == repairman.get().getStatus().idle) {
|
||||
order.setStatus(WorkOrder.OrderStatus.grabbed);
|
||||
order.setAssignedRepairmanId(repairmanId);
|
||||
order.setGrabbedTime(LocalDateTime.now());
|
||||
workOrderRepository.save(order);
|
||||
|
||||
var repairmanEntity = repairman.get();
|
||||
repairmanEntity.setStatus(repairmanEntity.getStatus().busy);
|
||||
repairmanRepository.save(repairmanEntity);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 拒单功能
|
||||
@Transactional
|
||||
public boolean rejectOrder(String orderId, String repairmanId, String reason) {
|
||||
Optional<WorkOrder> orderOpt = workOrderRepository.findById(orderId);
|
||||
if (orderOpt.isPresent()) {
|
||||
WorkOrder order = orderOpt.get();
|
||||
if (order.getAssignedRepairmanId() != null &&
|
||||
order.getAssignedRepairmanId().equals(repairmanId) &&
|
||||
order.getStatus() == WorkOrder.OrderStatus.grabbed) {
|
||||
|
||||
order.setStatus(WorkOrder.OrderStatus.pending);
|
||||
order.setAssignedRepairmanId(null);
|
||||
order.setGrabbedTime(null);
|
||||
workOrderRepository.save(order);
|
||||
|
||||
var repairman = repairmanRepository.findById(repairmanId);
|
||||
if (repairman.isPresent()) {
|
||||
var repairmanEntity = repairman.get();
|
||||
repairmanEntity.setStatus(repairmanEntity.getStatus().idle);
|
||||
repairmanRepository.save(repairmanEntity);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 提交维修结果
|
||||
@Transactional
|
||||
public boolean submitRepairResult(String orderId, String repairmanId,
|
||||
String dealNote, String imgUrl) {
|
||||
Optional<WorkOrder> orderOpt = workOrderRepository.findById(orderId);
|
||||
if (orderOpt.isPresent()) {
|
||||
WorkOrder order = orderOpt.get();
|
||||
if (order.getAssignedRepairmanId() != null &&
|
||||
order.getAssignedRepairmanId().equals(repairmanId) &&
|
||||
(order.getStatus() == WorkOrder.OrderStatus.grabbed ||
|
||||
order.getStatus() == WorkOrder.OrderStatus.processing)) {
|
||||
|
||||
order.setStatus(WorkOrder.OrderStatus.completed);
|
||||
order.setCompletedTime(LocalDateTime.now());
|
||||
order.setDealNote(dealNote);
|
||||
order.setImgUrl(imgUrl);
|
||||
workOrderRepository.save(order);
|
||||
|
||||
var repairman = repairmanRepository.findById(repairmanId);
|
||||
if (repairman.isPresent()) {
|
||||
var repairmanEntity = repairman.get();
|
||||
repairmanEntity.setStatus(repairmanEntity.getStatus().idle);
|
||||
repairmanEntity.setWorkCount(repairmanEntity.getWorkCount() + 1);
|
||||
repairmanRepository.save(repairmanEntity);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 获取可抢工单列表
|
||||
public List<WorkOrder> getAvailableOrders(String areaId) {
|
||||
return workOrderRepository.findByAreaIdAndStatus(areaId, WorkOrder.OrderStatus.pending);
|
||||
}
|
||||
|
||||
// 获取维修工自己的工单
|
||||
public List<WorkOrder> getMyOrders(String repairmanId) {
|
||||
return workOrderRepository.findByAssignedRepairmanId(repairmanId);
|
||||
}
|
||||
}
|
||||
@ -1,26 +1,35 @@
|
||||
package com.campus.water.mapper;
|
||||
|
||||
import datebaseclass.business.DrinkRecord;
|
||||
import com.campus.water.entity.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.time.LocalDateTime;
|
||||
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的查询方法
|
||||
// 修正:使用 drink_time 字段进行日期范围查询
|
||||
@Query("SELECT d FROM DrinkRecord d WHERE d.studentId = ?1 AND DATE(d.drinkTime) = ?2")
|
||||
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.drinkTime BETWEEN ?2 AND ?3")
|
||||
List<DrinkRecord> findByStudentIdAndDrinkTimeBetween(String studentId, LocalDateTime start, LocalDateTime end);
|
||||
|
||||
@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);
|
||||
@Query("SELECT SUM(d.waterConsumption) FROM DrinkRecord d WHERE d.studentId = ?1 AND DATE(d.drinkTime) = ?2")
|
||||
Double getTotalWaterConsumptionByStudentIdAndDate(String studentId, LocalDate date);
|
||||
|
||||
@Query("SELECT d FROM DrinkRecord d WHERE d.studentId = ?1 AND d.drinkTime BETWEEN ?2 AND ?3 ORDER BY d.drinkTime DESC")
|
||||
List<DrinkRecord> findByStudentIdAndDrinkTimeBetweenOrdered(String studentId, LocalDateTime start, LocalDateTime end);
|
||||
|
||||
@Query("SELECT d FROM DrinkRecord d WHERE d.terminalId = ?1 AND d.drinkTime BETWEEN ?2 AND ?3")
|
||||
List<DrinkRecord> findByTerminalIdAndDrinkTimeBetween(String terminalId, LocalDateTime start, LocalDateTime end);
|
||||
|
||||
@Query("SELECT COUNT(d) FROM DrinkRecord d WHERE d.terminalId = ?1 AND DATE(d.drinkTime) = ?2")
|
||||
Long countByTerminalIdAndDrinkDate(String terminalId, LocalDate drinkDate);
|
||||
}
|
||||
@ -1,29 +1,45 @@
|
||||
package com.campus.water.mapper;
|
||||
|
||||
import datebaseclass.sensor.WaterQualityHistory;
|
||||
import com.campus.water.entity.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;
|
||||
import java.util.Optional;
|
||||
|
||||
@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("SELECT w FROM WaterQualityHistory w WHERE w.terminalId = ?1 AND w.detectedTime BETWEEN ?2 AND ?3 ORDER BY w.detectedTime DESC")
|
||||
List<WaterQualityHistory> findByTerminalIdAndDetectedTimeBetween(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(value = "SELECT * FROM water_quality_history w WHERE w.terminal_id = ?1 ORDER BY w.detected_time DESC LIMIT 5", nativeQuery = true)
|
||||
List<WaterQualityHistory> findTop5ByTerminalIdOrderByDetectedTimeDesc(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.tdsValue1 > ?1")
|
||||
List<WaterQualityHistory> findByTdsValue1GreaterThan(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);
|
||||
@Query("SELECT w FROM WaterQualityHistory w WHERE w.tdsValue2 > ?1")
|
||||
List<WaterQualityHistory> findByTdsValue2GreaterThan(Double tdsValue);
|
||||
|
||||
@Query("SELECT w FROM WaterQualityHistory w WHERE w.tdsValue3 > ?1")
|
||||
List<WaterQualityHistory> findByTdsValue3GreaterThan(Double tdsValue);
|
||||
|
||||
@Query("SELECT w FROM WaterQualityHistory w WHERE w.deviceId = ?1 AND w.detectedTime BETWEEN ?2 AND ?3 ORDER BY w.detectedTime DESC")
|
||||
List<WaterQualityHistory> findByDeviceIdAndDetectedTimeBetween(String deviceId, LocalDateTime start, LocalDateTime end);
|
||||
|
||||
@Query(value = "SELECT * FROM water_quality_history w WHERE w.terminal_id = ?1 ORDER BY w.detected_time DESC LIMIT 1", nativeQuery = true)
|
||||
Optional<WaterQualityHistory> findLatestByTerminalId(String terminalId);
|
||||
|
||||
@Query(value = "SELECT * FROM water_quality_history w WHERE w.device_id = ?1 ORDER BY w.detected_time DESC LIMIT 1", nativeQuery = true)
|
||||
Optional<WaterQualityHistory> findLatestByDeviceId(String deviceId);
|
||||
|
||||
@Query("SELECT w FROM WaterQualityHistory w WHERE w.detectedTime BETWEEN ?1 AND ?2 ORDER BY w.detectedTime DESC")
|
||||
List<WaterQualityHistory> findByDetectedTimeBetween(LocalDateTime start, LocalDateTime end);
|
||||
}
|
||||
@ -0,0 +1,89 @@
|
||||
package com.campus.water.service.app;
|
||||
|
||||
import com.campus.water.entity.WorkOrder;
|
||||
import com.campus.water.controller.WorkOrderController;
|
||||
import com.campus.water.util.ResultVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class RepairmanAppService {
|
||||
|
||||
@Autowired
|
||||
private WorkOrderController workOrderController;
|
||||
|
||||
// 获取可抢工单列表
|
||||
public ResultVO<List<WorkOrder>> getAvailableOrders(String areaId) {
|
||||
try {
|
||||
List<WorkOrder> orders = workOrderController.getAvailableOrders(areaId);
|
||||
return ResultVO.success(orders);
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "获取工单列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 抢单
|
||||
public ResultVO<Boolean> grabOrder(Map<String, String> request) {
|
||||
try {
|
||||
String orderId = request.get("orderId");
|
||||
String repairmanId = request.get("repairmanId");
|
||||
boolean result = workOrderController.grabOrder(orderId, repairmanId);
|
||||
if (result) {
|
||||
return ResultVO.success(true, "抢单成功");
|
||||
} else {
|
||||
return ResultVO.error(400, "抢单失败,工单可能已被其他人抢走");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "抢单失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 拒单
|
||||
public ResultVO<Boolean> rejectOrder(Map<String, String> request) {
|
||||
try {
|
||||
String orderId = request.get("orderId");
|
||||
String repairmanId = request.get("repairmanId");
|
||||
String reason = request.get("reason");
|
||||
boolean result = workOrderController.rejectOrder(orderId, repairmanId, reason);
|
||||
if (result) {
|
||||
return ResultVO.success(true, "拒单成功");
|
||||
} else {
|
||||
return ResultVO.error(400, "拒单失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "拒单失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 提交维修结果
|
||||
public ResultVO<Boolean> submitRepairResult(Map<String, String> request) {
|
||||
try {
|
||||
String orderId = request.get("orderId");
|
||||
String repairmanId = request.get("repairmanId");
|
||||
String dealNote = request.get("dealNote");
|
||||
String imgUrl = request.get("imgUrl");
|
||||
|
||||
boolean result = workOrderController.submitRepairResult(orderId, repairmanId, dealNote, imgUrl);
|
||||
if (result) {
|
||||
return ResultVO.success(true, "维修结果提交成功");
|
||||
} else {
|
||||
return ResultVO.error(400, "维修结果提交失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "提交失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 获取我的工单
|
||||
public ResultVO<List<WorkOrder>> getMyOrders(String repairmanId) {
|
||||
try {
|
||||
List<WorkOrder> orders = workOrderController.getMyOrders(repairmanId);
|
||||
return ResultVO.success(orders);
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "获取工单失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package com.campus.water.service.app;
|
||||
|
||||
import com.campus.water.controller.WaterUsageController;
|
||||
import com.campus.water.util.ResultVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class StudentAppService {
|
||||
|
||||
@Autowired
|
||||
private WaterUsageController waterUsageController;
|
||||
|
||||
// 扫码获取终端信息
|
||||
public ResultVO<Map<String, Object>> getTerminalInfo(String terminalId) {
|
||||
try {
|
||||
Map<String, Object> result = waterUsageController.getTerminalInfo(terminalId);
|
||||
return ResultVO.success(result);
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "获取终端信息失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 扫码用水
|
||||
public ResultVO<Map<String, Object>> scanToDrink(Map<String, Object> request) {
|
||||
try {
|
||||
String terminalId = (String) request.get("terminalId");
|
||||
String studentId = (String) request.get("studentId");
|
||||
Double waterConsumption = Double.valueOf(request.get("waterConsumption").toString());
|
||||
|
||||
Map<String, Object> result = waterUsageController.scanToDrink(terminalId, studentId, waterConsumption);
|
||||
return ResultVO.success(result);
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "用水操作失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 查询水质信息
|
||||
public ResultVO<Map<String, Object>> getWaterQuality(String deviceId) {
|
||||
try {
|
||||
Map<String, Object> result = waterUsageController.getWaterQualityInfo(deviceId);
|
||||
return ResultVO.success(result);
|
||||
} catch (Exception e) {
|
||||
return ResultVO.error(500, "获取水质信息失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,66 @@
|
||||
package com.campus.water.util;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ResultVO<T> {
|
||||
private Integer code; // 状态码
|
||||
private String message; // 提示信息
|
||||
private T data; // 返回数据
|
||||
private Long timestamp; // 时间戳
|
||||
|
||||
public ResultVO() {
|
||||
this.timestamp = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
// 成功返回(带数据)
|
||||
public static <T> ResultVO<T> success(T data) {
|
||||
ResultVO<T> result = new ResultVO<>();
|
||||
result.setCode(200);
|
||||
result.setMessage("success");
|
||||
result.setData(data);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 成功返回(带数据和自定义消息)
|
||||
public static <T> ResultVO<T> success(T data, String message) {
|
||||
ResultVO<T> result = new ResultVO<>();
|
||||
result.setCode(200);
|
||||
result.setMessage(message);
|
||||
result.setData(data);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 成功返回(无数据)
|
||||
public static <T> ResultVO<T> success() {
|
||||
ResultVO<T> result = new ResultVO<>();
|
||||
result.setCode(200);
|
||||
result.setMessage("success");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 错误返回
|
||||
public static <T> ResultVO<T> error(Integer code, String message) {
|
||||
ResultVO<T> result = new ResultVO<>();
|
||||
result.setCode(code);
|
||||
result.setMessage(message);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 常见的错误状态
|
||||
public static <T> ResultVO<T> error(String message) {
|
||||
return error(500, message);
|
||||
}
|
||||
|
||||
public static <T> ResultVO<T> badRequest(String message) {
|
||||
return error(400, message);
|
||||
}
|
||||
|
||||
public static <T> ResultVO<T> unauthorized(String message) {
|
||||
return error(401, message);
|
||||
}
|
||||
|
||||
public static <T> ResultVO<T> notFound(String message) {
|
||||
return error(404, message);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue