目录修正 #34

Merged
p95fco63j merged 1 commits from junmao_branch into develop 1 month ago

@ -21,9 +21,9 @@
</parent>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>23</java.version>
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

@ -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());

@ -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. 序列化JSONMQTT消息 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());

@ -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<String, String> 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<String, String> 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<String, String> 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("拒单成功"));
}
}

@ -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<String, String> 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<String, String> 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<String, String> 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"));
}
}

@ -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()); // 断言返回数组
}
}

@ -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();
}
}
Loading…
Cancel
Save