Bladeren bron

update: TCP数据分页查询

lwh 2 weken geleden
bovenliggende
commit
30bbb1a259

+ 60 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/dto/mongo/PageMessageDTO.java

@@ -0,0 +1,60 @@
+package com.pig4cloud.pig.marketing.api.dto.mongo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-28
+ * @description: TODO
+ */
+@Data
+@Schema(description = "分页查询数据列表入参")
+public class PageMessageDTO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 每页显示条数,默认 10
+	 */
+	@Schema(description = "每页显示条数", example = "10")
+	private Integer size = 10;
+
+	/**
+	 * 当前页
+	 */
+	@Schema(description = "当前页", example = "1")
+	private Integer current = 1;
+
+	/**
+	 * 客户端ID
+	 */
+	@NotBlank(message = "客户端ID不能为空")
+	@Schema(description = "客户端ID", example = "e478d52e-c773-45e7-b7f9-20ffeb14e730")
+	private String clientID;
+
+	/**
+	 * 关键字
+	 */
+	@Schema(description = "关键字")
+	private String keyWord;
+
+	/**
+	 * 起始时间
+	 */
+	@Schema(description = "起始时间")
+	private LocalDateTime startTime;
+
+	/**
+	 * 结束时间
+	 */
+	@Schema(description = "结束时间")
+	private LocalDateTime endTime;
+}

+ 2 - 2
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/entity/mongo/Device.java

@@ -28,8 +28,8 @@ public class Device {
 	private String deviceInfo; // 设备信息字符串
 
 	@Schema(description = "创建时间")
-	private LocalDateTime createTime; // 创建时间
+	private String createTime; // 创建时间
 
 	@Schema(description = "更新时间")
-	private LocalDateTime updateTime; // 更新时间
+	private String updateTime; // 更新时间
 }

+ 1 - 1
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/entity/mongo/Message.java

@@ -19,5 +19,5 @@ public class Message {
 
 	private String clientID; // 客户端唯一标识
 	private String msgData; // 消息内容字符串
-	private LocalDateTime reportTime; // 上报时间
+	private String reportTime; // 上报时间
 }

+ 2 - 5
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/controller/TcpDataController.java

@@ -2,9 +2,9 @@ package com.pig4cloud.pig.marketing.controller;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.pig4cloud.pig.common.core.exception.BusinessException;
 import com.pig4cloud.pig.common.core.util.R;
 import com.pig4cloud.pig.marketing.api.dto.mongo.PageDeviceInfoDTO;
+import com.pig4cloud.pig.marketing.api.dto.mongo.PageMessageDTO;
 import com.pig4cloud.pig.marketing.api.dto.mongo.SaveDeviceInfoDTO;
 import com.pig4cloud.pig.marketing.api.dto.mongo.SaveTcpMessageDTO;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Device;
@@ -71,10 +71,7 @@ public class TcpDataController {
 
 	@PostMapping("/msg/page")
 	@Operation(summary = "分页查询数据列表")
-	public R<Page<Message>> PageMsgInfo(@RequestBody PageDeviceInfoDTO reqDto) {
-		if (reqDto.getClientID() ==  null || reqDto.getClientID().isEmpty()){
-			throw new BusinessException("客户端ID不能为空");
-		}
+	public R<Page<Message>> PageMsgInfo(@Valid @RequestBody PageMessageDTO reqDto) {
 		return R.ok(tcpDataService.pageMsgInfo(reqDto));
 	}
 }

+ 2 - 1
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/TcpDataService.java

@@ -3,6 +3,7 @@ package com.pig4cloud.pig.marketing.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.pig4cloud.pig.marketing.api.dto.mongo.PageDeviceInfoDTO;
+import com.pig4cloud.pig.marketing.api.dto.mongo.PageMessageDTO;
 import com.pig4cloud.pig.marketing.api.dto.mongo.SaveDeviceInfoDTO;
 import com.pig4cloud.pig.marketing.api.dto.mongo.SaveTcpMessageDTO;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Device;
@@ -57,5 +58,5 @@ public interface TcpDataService {
 	 * @param reqDto 入参
 	 * @return 数据列表
 	 */
-	Page<Message> pageMsgInfo(PageDeviceInfoDTO reqDto);
+	Page<Message> pageMsgInfo(PageMessageDTO reqDto);
 }

+ 91 - 41
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/impl/TcpDataServiceImpl.java

@@ -3,11 +3,11 @@ package com.pig4cloud.pig.marketing.service.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.pig4cloud.pig.marketing.api.dto.mongo.PageDeviceInfoDTO;
+import com.pig4cloud.pig.marketing.api.dto.mongo.PageMessageDTO;
 import com.pig4cloud.pig.marketing.api.dto.mongo.SaveDeviceInfoDTO;
 import com.pig4cloud.pig.marketing.api.dto.mongo.SaveTcpMessageDTO;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Device;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Message;
-import com.pig4cloud.pig.marketing.repository.DeviceRepository;
 import com.pig4cloud.pig.marketing.repository.MessageRepository;
 import com.pig4cloud.pig.marketing.service.TcpDataService;
 import lombok.AllArgsConstructor;
@@ -22,9 +22,7 @@ import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
-import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -43,6 +41,8 @@ public class TcpDataServiceImpl implements TcpDataService {
 
 	private final MessageRepository messageRepository;
 
+	// 定义时间格式器
+	private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
 	/**
 	 * 保存或更新设备信息
@@ -60,8 +60,10 @@ public class TcpDataServiceImpl implements TcpDataService {
 			Device device = new Device();
 			device.setClientID(reqDto.getClientID());
 			device.setDeviceInfo(reqDto.getDeviceInfo());
-			device.setCreateTime(LocalDateTime.now().withNano(0));
-			device.setUpdateTime(LocalDateTime.now().withNano(0));
+			// 设置创建时间和更新时间为当前时间的字符串格式
+			String currentTime = LocalDateTime.now().format(DATE_TIME_FORMATTER);
+			device.setCreateTime(currentTime);
+			device.setUpdateTime(currentTime);
 			Device insert = mongoTemplate.insert(device);
 			return insert.getId();
 		} else {
@@ -70,7 +72,10 @@ public class TcpDataServiceImpl implements TcpDataService {
 				// 信息不一致则更新
 				Update update = new Update();
 				update.set("deviceInfo", reqDto.getDeviceInfo());
-				update.set("updateTime", LocalDateTime.now().withNano(0));
+
+				// 设置更新时间为当前时间的字符串格式
+				update.set("updateTime", LocalDateTime.now().format(DATE_TIME_FORMATTER));
+
 				mongoTemplate.updateFirst(query, update, Device.class);
 				return existingDevice.getId();
 			}
@@ -98,45 +103,56 @@ public class TcpDataServiceImpl implements TcpDataService {
 	 */
 	@Override
 	public Page<Device> pageDeviceInfo(PageDeviceInfoDTO reqDto) {
-		// 建查询条件
-		Query query = new Query();
+		// 建查询条件
+		Criteria criteria = new Criteria();
 
-		// 模糊匹配clientID
-		if (reqDto.getClientID() != null && !reqDto.getClientID().isEmpty()) {
-			query.addCriteria(Criteria.where("clientID").regex(reqDto.getClientID(), "i"));
+		// 添加clientID条件
+		if (reqDto.getClientID() != null && !reqDto.getClientID().trim().isEmpty()) {
+			criteria.and("clientID").regex(reqDto.getClientID());
 		}
 
-		// 时间范围筛选
-		if (reqDto.getStartTime() != null || reqDto.getEndTime() != null) {
-			Criteria timeCriteria = Criteria.where("createTime");
-			if (reqDto.getStartTime() != null) {
-				Date startDate = Date.from(reqDto.getStartTime().atZone(ZoneId.systemDefault()).toInstant());
-				timeCriteria.gte(startDate);
-			}
+		// 添加时间范围条件
+		LocalDateTime startTime = reqDto.getStartTime();
+		LocalDateTime endTime = reqDto.getEndTime();
 
-			if (reqDto.getEndTime() != null) {
-				Date endDate = Date.from(reqDto.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
-				timeCriteria.lte(endDate);
-			}
-			query.addCriteria(timeCriteria);
+		// 创建时间字段的条件对象
+		Criteria timeCriteria = new Criteria("createTime");
+
+		if (startTime != null) {
+			String startStr = startTime.format(DATE_TIME_FORMATTER);
+			timeCriteria.gte(startStr);
+		}
+
+		if (endTime != null) {
+			String endStr = endTime.format(DATE_TIME_FORMATTER);
+			timeCriteria.lte(endStr);
 		}
 
+		// 只有当存在时间条件时,才将时间条件添加到主条件中
+		if (startTime != null || endTime != null) {
+			criteria.andOperator(timeCriteria);
+		}
 
-		// 构建分页条件
+		// 创建查询对象
+		Query query = new Query(criteria);
+
+		// 计算总记录数
+		long total = mongoTemplate.count(query, Device.class);
+
+		// 设置分页和排序
 		Pageable pageable = PageRequest.of(
-				reqDto.getCurrent() - 1,
+				reqDto.getCurrent() - 1,  // MongoDB页码从0开始
 				reqDto.getSize(),
-				Sort.by(Sort.Direction.DESC, "createTime"));
+				Sort.by(Sort.Direction.DESC, "createTime")
+		);
 		query.with(pageable);
 
 		// 执行查询
-		List<Device> devices = mongoTemplate.find(query, Device.class, "devices");
-		long total = mongoTemplate.count(query.skip(0).limit(0), "devices");
+		List<Device> devices = mongoTemplate.find(query, Device.class);
 
+		// 封装分页结果
 		Page<Device> page = new Page<>(reqDto.getCurrent(), reqDto.getSize(), total);
 		page.setRecords(devices);
-		page.setTotal( total);
-		// 封装分页结果
 		return page;
 	}
 
@@ -150,7 +166,7 @@ public class TcpDataServiceImpl implements TcpDataService {
 		Message message = new Message();
 		message.setClientID(reqDto.getClientID());
 		message.setMsgData(reqDto.getMsgData());
-		message.setReportTime(LocalDateTime.now());
+		message.setReportTime(LocalDateTime.now().format(DATE_TIME_FORMATTER));
 		Message save = messageRepository.save(message);
 		return save.getId();
 	}
@@ -172,25 +188,59 @@ public class TcpDataServiceImpl implements TcpDataService {
 	 * @return 数据列表
 	 */
 	@Override
-	public Page<Message> pageMsgInfo(PageDeviceInfoDTO reqDto) {
-		// 构建查询条件
-		Query query = new Query(Criteria.where("clientID").is(reqDto.getClientID()));
+	public Page<Message> pageMsgInfo(PageMessageDTO reqDto) {
+		// 创建查询条件
+		Criteria criteria = new Criteria();
+
+		// 添加clientID条件
+		criteria.and("clientID").is(reqDto.getClientID());
 
-		// 构建分页条件
+		if (reqDto.getKeyWord() != null && !reqDto.getKeyWord().isEmpty()){
+			criteria.and("msgData").regex(reqDto.getKeyWord());
+		}
+
+		// 添加时间范围条件
+		LocalDateTime startTime = reqDto.getStartTime();
+		LocalDateTime endTime = reqDto.getEndTime();
+
+		// 创建时间字段的条件对象
+		Criteria timeCriteria = new Criteria("reportTime");
+
+		if (startTime != null) {
+			String startStr = startTime.format(DATE_TIME_FORMATTER);
+			timeCriteria.gte(startStr);
+		}
+
+		if (endTime != null) {
+			String endStr = endTime.format(DATE_TIME_FORMATTER);
+			timeCriteria.lte(endStr);
+		}
+
+		// 只有当存在时间条件时,才将时间条件添加到主条件中
+		if (startTime != null || endTime != null) {
+			criteria.andOperator(timeCriteria);
+		}
+
+		// 创建查询对象
+		Query query = new Query(criteria);
+
+		// 计算总记录数
+		long total = mongoTemplate.count(query, Message.class);
+
+		// 设置分页和排序
 		Pageable pageable = PageRequest.of(
-				reqDto.getCurrent() - 1,
+				reqDto.getCurrent() - 1,  // MongoDB页码从0开始
 				reqDto.getSize(),
-				Sort.by(Sort.Direction.DESC, "reportTime"));
+				Sort.by(Sort.Direction.DESC, "reportTime")
+		);
 		query.with(pageable);
 
 		// 执行查询
-		List<Message> messages = mongoTemplate.find(query, Message.class, "messages");
-		long total = mongoTemplate.count(query.skip(0).limit(0), "messages");
+		List<Message> messages = mongoTemplate.find(query, Message.class);
 
+		// 封装分页结果
 		Page<Message> page = new Page<>(reqDto.getCurrent(), reqDto.getSize(), total);
 		page.setRecords(messages);
-		page.setTotal( total);
-		// 封装分页结果
 		return page;
 	}
 }