Browse Source

new: 接入mongo

lwh 2 weeks ago
parent
commit
aa9ca05d6b

+ 6 - 0
pig-marketing/pig-marketing-api/pom.xml

@@ -57,5 +57,11 @@
 			<version>4.0.1</version>
 			<scope>compile</scope>
 		</dependency>
+
+		<!-- mongodb -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-mongodb</artifactId>
+		</dependency>
 	</dependencies>
 </project>

+ 33 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/mongo/Device.java

@@ -0,0 +1,33 @@
+package com.pig4cloud.pig.marketing.api.mongo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import java.util.Date;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: 设备信息实体类,对应MongoDB中的devices集合
+ */
+@Data
+@Document(collection = "devices")
+@Schema(description = "设备信息")
+public class Device {
+	@Id
+	@Schema(description = "设备ID")
+	private String id; // MongoDB自动生成的ObjectId
+
+	@Schema(description = "客户端ID")
+	private String clientID; // 客户端唯一标识
+
+	@Schema(description = "设备信息")
+	private String deviceInfo; // 设备信息字符串
+
+	@Schema(description = "创建时间")
+	private Date createTime; // 创建时间
+
+	@Schema(description = "更新时间")
+	private Date updateTime; // 更新时间
+}

+ 22 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/mongo/Message.java

@@ -0,0 +1,22 @@
+package com.pig4cloud.pig.marketing.api.mongo;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import java.util.Date;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: 消息数据实体类
+ */
+@Data
+@Document(collection = "messages") // 对应MongoDB的messages集合
+public class Message {
+	@Id
+	private String id; // MongoDB自动生成的ObjectId
+
+	private String clientID; // 客户端唯一标识
+	private String msgData; // 消息内容字符串
+	private Date reportTime; // 上报时间
+}

+ 5 - 0
pig-marketing/pig-marketing-biz/pom.xml

@@ -99,6 +99,11 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-undertow</artifactId>
 		</dependency>
+		<!-- mongodb -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-mongodb</artifactId>
+		</dependency>
 	</dependencies>
 
 	<profiles>

+ 74 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/controller/TcpDataController.java

@@ -0,0 +1,74 @@
+package com.pig4cloud.pig.marketing.controller;
+
+
+import com.pig4cloud.pig.common.core.util.R;
+import com.pig4cloud.pig.marketing.api.mongo.Device;
+import com.pig4cloud.pig.marketing.api.mongo.Message;
+import com.pig4cloud.pig.marketing.repository.service.DeviceService;
+import com.pig4cloud.pig.marketing.repository.service.MessageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: TCP数据控制器
+ */
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/tcp")
+@Tag(description = "TcpData", name = "TCP数据上报服务")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class TcpDataController {
+	@Autowired
+	private MessageService messageService;
+
+	@Autowired
+	private DeviceService deviceService;
+
+	/************************* 设备 *************************
+	 * 保存或更新设备信息
+	 */
+	@PostMapping("/device/save")
+	@Operation(summary = "保存或更新设备信息")
+	public R<String> saveOrUpdateDevice(@RequestBody Device device) {
+		deviceService.saveOrUpdateDevice(device);
+		return R.ok();
+	}
+
+	/**
+	 * 根据clientID查询设备信息
+	 */
+	@GetMapping("/device/get/{clientID}")
+	@Operation(summary = "根据客户端ID查询设备信息")
+	public R<Device> getDevice(@PathVariable String clientID) {
+		return R.ok(deviceService.getDeviceByClientID(clientID));
+	}
+
+	/************************* 消息 *************************
+	 * 保存消息
+	 */
+	@PostMapping("/msg/save")
+	@Operation(summary = "保存上报数据")
+	public R<String> saveMessage(@RequestBody Message message) {
+		messageService.saveMessage(message);
+		return R.ok();
+	}
+
+	/**
+	 * 根据clientID查询消息列表
+	 */
+	@GetMapping("/msg/get/{clientID}")
+	@Operation(summary = "根据客户端ID查询数据列表")
+	public R<List<Message>> getMessagesByClient(@PathVariable String clientID) {
+		return R.ok(messageService.getMessagesByClientID(clientID));
+	}
+}

+ 19 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/repository/DeviceRepository.java

@@ -0,0 +1,19 @@
+package com.pig4cloud.pig.marketing.repository;
+
+import com.pig4cloud.pig.marketing.api.mongo.Device;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import java.util.Optional;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: 设备信息数据访问接口
+ */
+public interface DeviceRepository extends MongoRepository<Device, String> {
+	/**
+	 * 根据clientID查询设备信息
+	 * @param clientID 客户端ID
+	 * @return Optional<Device>
+	 */
+	Optional<Device> findByClientID(String clientID);
+}

+ 20 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/repository/MessageRepository.java

@@ -0,0 +1,20 @@
+package com.pig4cloud.pig.marketing.repository;
+
+import com.pig4cloud.pig.marketing.api.mongo.Message;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import java.util.List;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: 消息数据访问接口
+ */
+public interface MessageRepository extends MongoRepository<Message, String> {
+
+    /**
+     * 根据clientID查询消息
+     * @param clientID 客户端ID
+     * @return List<Message>
+     */
+    List<Message> findByClientIDOrderByReportTimeDesc(String clientID);
+}

+ 56 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/repository/service/DeviceService.java

@@ -0,0 +1,56 @@
+package com.pig4cloud.pig.marketing.repository.service;
+
+
+import com.pig4cloud.pig.marketing.api.mongo.Device;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: 设备信息服务类
+ */
+
+@Service
+public class DeviceService {
+
+	@Autowired
+	private MongoTemplate mongoTemplate;
+
+	/**
+	 * 保存或更新设备信息
+	 * 对应MongoDB的upsert操作:存在则更新,不存在则插入
+	 */
+	public void saveOrUpdateDevice(Device device) {
+		// 创建查询条件:根据clientID匹配
+		Query query = new Query(Criteria.where("clientID").is(device.getClientID()));
+
+		// 创建更新对象
+		Update update = new Update();
+		// 设置设备信息
+		update.set("deviceInfo", device.getDeviceInfo());
+		// 设置更新时间为当前时间
+		update.set("updateTime", new Date());
+		// 仅在插入新记录时设置创建时间
+		update.setOnInsert("createTime", new Date());
+
+		// 执行upsert操作
+		mongoTemplate.upsert(query, update, Device.class);
+	}
+
+	/**
+	 * 根据clientID查询设备信息
+	 */
+	public Device getDeviceByClientID(String clientID) {
+		return mongoTemplate.findOne(
+				new Query(Criteria.where("clientID").is(clientID)),
+				Device.class
+		);
+	}
+}

+ 41 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/repository/service/MessageService.java

@@ -0,0 +1,41 @@
+package com.pig4cloud.pig.marketing.repository.service;
+
+
+import com.pig4cloud.pig.marketing.api.mongo.Message;
+import com.pig4cloud.pig.marketing.repository.MessageRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: lwh
+ * @date: 2025-08-27
+ * @description: 消息数据服务类
+ */
+
+@Service
+public class MessageService {
+
+	@Autowired
+	private MessageRepository messageRepository;
+
+	/**
+	 * 保存消息数据
+	 */
+	public void saveMessage(Message message) {
+		// 设置上报时间为当前时间
+		if (message.getReportTime() == null) {
+			message.setReportTime(new Date());
+		}
+		messageRepository.save(message);
+	}
+
+	/**
+	 * 根据clientID查询消息列表,按时间倒序
+	 */
+	public List<Message> getMessagesByClientID(String clientID) {
+		return messageRepository.findByClientIDOrderByReportTimeDesc(clientID);
+	}
+}