diff --git a/pom.xml b/pom.xml index ecb5d06..82594e2 100644 --- a/pom.xml +++ b/pom.xml @@ -21,9 +21,9 @@ - 1.8 - 1.8 - 1.8 + 23 + 23 + 23 UTF-8 diff --git a/src/main/java/com/campus/water/service/MqttSensorReceiver.java b/src/main/java/com/campus/water/service/MqttSensorReceiver.java index 880cf3e..c73df0a 100644 --- a/src/main/java/com/campus/water/service/MqttSensorReceiver.java +++ b/src/main/java/com/campus/water/service/MqttSensorReceiver.java @@ -93,7 +93,7 @@ public class MqttSensorReceiver { entity.setWaterFlow2(sensorData.getWaterFlow2()); entity.setWaterPress(sensorData.getWaterPress()); entity.setFilterLife(sensorData.getFilterLife()); - entity.setLeakage(sensorData.getLeakage() ? 1 : 0); // 数据库存储:1=漏水,0=正常 + entity.setLeakage(sensorData.getLeakage() ? true: false); // 数据库存储:true=漏水,false=正常 entity.setWaterQuality(sensorData.getWaterQuality()); entity.setStatus(WaterMakerRealtimeData.DeviceStatus.valueOf(sensorData.getStatus().toUpperCase())); entity.setRecordTime(sensorData.getRecordTime()); diff --git a/src/main/java/com/campus/water/service/MqttSensorSender.java b/src/main/java/com/campus/water/service/MqttSensorSender.java index e553b73..6ff5c52 100644 --- a/src/main/java/com/campus/water/service/MqttSensorSender.java +++ b/src/main/java/com/campus/water/service/MqttSensorSender.java @@ -34,16 +34,17 @@ public class MqttSensorSender { // 1. 构建模拟数据(符合正常业务范围) WaterMakerSensorData data = new WaterMakerSensorData(); data.setDeviceId(deviceId); - data.setTdsValue(50 + random.nextDouble() * 30); // 50-80(正常范围) - data.setWaterFlow(random.nextDouble() * 2); // 0-2 L/min - data.setWaterPressure(0.2 + random.nextDouble() * 0.3); // 0.2-0.5 MPa + data.setTdsValue1(50 + random.nextDouble() * 30); // 50-80(正常范围) + data.setTdsValue2(50 + random.nextDouble() * 30); + data.setTdsValue3(50 + random.nextDouble() * 30); + data.setWaterFlow1(random.nextDouble() * 2); // 0-2 L/min + data.setWaterFlow2(random.nextDouble() * 2); + data.setWaterPress(0.2 + random.nextDouble() * 0.3); // 0.2-0.5 MPa data.setFilterLife(30 + random.nextInt(70)); // 30-100% data.setLeakage(random.nextBoolean() && random.nextBoolean()); // 漏水概率较低(25%) - data.setTemperature(20 + random.nextDouble() * 5); // 20-25℃ - data.setHumidity(40 + random.nextDouble() * 20); // 40-60%RH data.setWaterQuality("合格"); data.setStatus("normal"); - data.setTimestamp(LocalDateTime.now()); + data.setRecordTime(LocalDateTime.now()); // 2. 序列化JSON(MQTT消息 payload 为JSON字符串) String payload = objectMapper.writeValueAsString(data); @@ -67,14 +68,16 @@ public class MqttSensorSender { // 1. 构建异常数据(超出正常范围) WaterMakerSensorData data = new WaterMakerSensorData(); data.setDeviceId(deviceId); - data.setTdsValue(150 + random.nextDouble() * 50); // 150-200(异常范围) - data.setWaterFlow(0.1 + random.nextDouble() * 0.3); // 流量极低 - data.setWaterPressure(0.1 + random.nextDouble() * 0.1); // 水压过低(0.1-0.2 MPa) + data.setTdsValue1(150 + random.nextDouble() * 50); // 150-200(异常范围) + data.setTdsValue2(150 + random.nextDouble() * 50); + data.setTdsValue3(150 + random.nextDouble() * 50); + data.setWaterFlow1(0.1 + random.nextDouble() * 0.3); // 流量极低 + data.setWaterFlow2(0.1 + random.nextDouble() * 0.3); + data.setWaterPress(0.1 + random.nextDouble() * 0.1); // 水压过低(0.1-0.2 MPa) data.setFilterLife(5 + random.nextInt(10)); // 滤芯寿命低(5-15%) data.setLeakage(true); // 强制漏水 - data.setTemperature(28 + random.nextDouble() * 3); // 水温过高(28-31℃) data.setStatus("error"); - data.setTimestamp(LocalDateTime.now()); + data.setRecordTime(LocalDateTime.now()); // 2. 序列化+发送 String payload = objectMapper.writeValueAsString(data); @@ -96,10 +99,9 @@ public class MqttSensorSender { WaterSupplySensorData data = new WaterSupplySensorData(); data.setDeviceId(deviceId); data.setWaterFlow(random.nextDouble() * 3); // 0-3 L/min - data.setWaterPressure(0.1 + random.nextDouble() * 0.2); // 0.1-0.3 MPa + data.setWaterPress(0.1 + random.nextDouble() * 0.2); // 0.1-0.3 MPa data.setWaterLevel(30 + random.nextDouble() * 50); // 30-80% data.setTemperature(18 + random.nextDouble() * 4); // 18-22℃ - data.setHumidity(35 + random.nextDouble() * 15); // 35-50%RH data.setStatus("normal"); data.setTimestamp(LocalDateTime.now()); diff --git a/src/test/java/com/campus/water/controller/app/WorkOrderControllerTest.java b/src/test/java/com/campus/water/controller/app/WorkOrderControllerTest.java deleted file mode 100644 index 732b7a7..0000000 --- a/src/test/java/com/campus/water/controller/app/WorkOrderControllerTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.campus.water.controller.app; - -import com.campus.water.test.BaseTest; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import java.util.HashMap; -import java.util.Map; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * 工单管理接口测试(抢单/拒单,后端2开发) - * 直接复制粘贴,修改接口路径即可 - */ -public class WorkOrderControllerTest extends BaseTest { - - // 工具:将Map转为JSON字符串 - private final ObjectMapper objectMapper = new ObjectMapper(); - - // 测试1:维修人员抢单(正常场景) - @Test - public void testGrabWorkOrder() throws Exception { - // 构造请求参数 - Map params = new HashMap<>(); - params.put("orderId", "1001"); // 测试工单ID - params.put("repairId", "REPAIR001"); // 测试维修人员ID - - mockMvc.perform( - // 替换为你项目的抢单接口路径,比如/api/app/workOrder/grab - post("/api/app/workOrder/grab") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(params)) // 传入JSON参数 - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(200)) - .andExpect(jsonPath("$.msg").value("抢单成功")); - } - - // 测试2:抢已被抢的工单(异常场景) - @Test - public void testGrabGrabbedOrder() throws Exception { - Map params = new HashMap<>(); - params.put("orderId", "1001"); // 已被抢的工单ID - params.put("repairId", "REPAIR002"); - - mockMvc.perform( - post("/api/app/workOrder/grab") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(params)) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(500)) - .andExpect(jsonPath("$.msg").value("工单已被抢")); - } - - // 测试3:维修人员拒单 - @Test - public void testRejectWorkOrder() throws Exception { - Map params = new HashMap<>(); - params.put("orderId", "1002"); - params.put("repairId", "REPAIR001"); - params.put("reason", "设备位置太远"); // 拒单原因 - - mockMvc.perform( - post("/api/app/workOrder/reject") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(params)) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(200)) - .andExpect(jsonPath("$.msg").value("拒单成功")); - } -} \ No newline at end of file diff --git a/src/test/java/com/campus/water/controller/commen/LoginControllerTest.java b/src/test/java/com/campus/water/controller/commen/LoginControllerTest.java deleted file mode 100644 index 2b5f57f..0000000 --- a/src/test/java/com/campus/water/controller/commen/LoginControllerTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.campus.water.controller.common; - -import com.campus.water.test.BaseTest; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import java.util.HashMap; -import java.util.Map; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * 登录接口测试用例 - */ -public class LoginControllerTest extends BaseTest { - - private final ObjectMapper objectMapper = new ObjectMapper(); - - // 测试1:维修人员正常登录 - @Test - public void testRepairLogin() throws Exception { - Map loginParams = new HashMap<>(); - loginParams.put("username", "REPAIR001"); - loginParams.put("password", "123456"); - loginParams.put("userType", "repairer"); // 必须指定用户类型 - - mockMvc.perform( - post("/api/common/login") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(loginParams)) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(200)) // 正常响应code - .andExpect(jsonPath("$.data.token").isNotEmpty()) - .andExpect(jsonPath("$.data.userType").value("repairer")); - } - - // 测试2:学生登录(密码错误) - @Test - public void testStudentLoginWithWrongPwd() throws Exception { - Map loginParams = new HashMap<>(); - loginParams.put("username", "STUDENT001"); - loginParams.put("password", "wrong123"); - loginParams.put("userType", "user"); - - mockMvc.perform( - post("/api/common/login") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(loginParams)) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(401)) - .andExpect(jsonPath("$.msg").value("密码错误")); - } - - // 测试3:无效用户类型 - @Test - public void testInvalidUserType() throws Exception { - Map loginParams = new HashMap<>(); - loginParams.put("username", "TEST001"); - loginParams.put("password", "123456"); - loginParams.put("userType", "invalid"); - - mockMvc.perform( - post("/api/common/login") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(loginParams)) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(401)) - .andExpect(jsonPath("$.msg").value("无效的用户类型:invalid")); - } -} \ No newline at end of file diff --git a/src/test/java/com/campus/water/controller/web/DeviceDataControllerTest.java b/src/test/java/com/campus/water/controller/web/DeviceDataControllerTest.java deleted file mode 100644 index 02c238e..0000000 --- a/src/test/java/com/campus/water/controller/web/DeviceDataControllerTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.campus.water.controller.web; - -import com.campus.water.test.BaseTest; -import org.junit.jupiter.api.Test; -import org.springframework.http.MediaType; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * 设备数据查询接口测试(后端2开发的接口) - */ -public class DeviceDataControllerTest extends BaseTest { - - // 测试1:按设备ID查询数据(正常场景) - @Test - public void testQueryDeviceDataByDeviceId() throws Exception { - mockMvc.perform( - // 替换为你项目的实际接口路径,比如/api/web/device/data - get("/api/web/device/data") - .param("deviceId", "ZSJ001") // 传入测试设备ID - .contentType(MediaType.APPLICATION_JSON) - ) - .andExpect(status().isOk()) // 断言返回200 - .andExpect(jsonPath("$.code").value(200)) // 断言返回码(如果你的接口有统一返回体) - .andExpect(jsonPath("$.data.deviceId").value("ZSJ001")); // 断言返回的设备ID正确 - } - - // 测试2:按设备ID查询数据(设备ID不存在) - @Test - public void testQueryDeviceDataWithInvalidId() throws Exception { - mockMvc.perform( - get("/api/web/device/data") - .param("deviceId", "INVALID001") - .contentType(MediaType.APPLICATION_JSON) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(404)) // 断言返回404 - .andExpect(jsonPath("$.msg").value("设备不存在")); // 断言提示语 - } - - // 测试3:按时间范围查询数据(正常场景) - @Test - public void testQueryDeviceDataByTime() throws Exception { - mockMvc.perform( - get("/api/web/device/data") - .param("deviceId", "ZSJ001") - .param("startTime", "2025-11-01 00:00:00") - .param("endTime", "2025-11-01 23:59:59") - .contentType(MediaType.APPLICATION_JSON) - ) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value(200)) - .andExpect(jsonPath("$.data").isArray()); // 断言返回数组 - } -} \ No newline at end of file diff --git a/src/test/java/com/campus/water/test/BaseTest.java b/src/test/java/com/campus/water/test/BaseTest.java deleted file mode 100644 index b4f2f44..0000000 --- a/src/test/java/com/campus/water/test/BaseTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.campus.water.test; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.TestInstance; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -/** - * 测试基类,初始化MockMvc - */ -@SpringBootTest(classes = com.campus.water.CampusWaterApplication.class) -@AutoConfigureMockMvc -@TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class BaseTest { - - protected MockMvc mockMvc; - - @Autowired - private WebApplicationContext webApplicationContext; - - @BeforeEach - public void setUp() { - this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); - } -} \ No newline at end of file