spring boot 项目对接MQTT,并且使用mysql数据库
接收订阅M MQTT的消息相关代码:
package com.xxl.job.executor.mqtt.mq;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xxl.job.executor.utils.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* 接收订阅的消息
*/
@Component
@Slf4j
public class ClientMQTT implements MqttCallback {
public static final String HOST = "tcp://10.32.53.235:1883";//(127.0.0.1也就是EMQX的ip地址)
// private static final String clientID = "clientIDSS";//(这个clientXX 可以随便写)
private String TOPIC = "idsstopic";//(这个testtopic 是EMQX的订阅主题,如果你对接别的数据,别人给了你主题,改这个就行)
private MqttClient client;
private MqttConnectOptions options;
@Autowired
private ClientMQTTService clientMQTTService;
/*连接MQtt*/
public void clientStart() {
try {
String clientID ="idsstopic"+ System.currentTimeMillis();
// String clientID ="idsstopic";
client = new MqttClient(HOST, clientID, new MemoryPersistence());
options = new MqttConnectOptions();
options.setCleanSession(true);
options.setKeepAliveInterval(10);
options.setConnectionTimeout(50);
options.setAutomaticReconnect(true); // 启用自动重连
client.setCallback(this);
// MqttTopic topic = client.getTopic(TOPIC);
//setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
// options.setWill(topic, "close".getBytes(), 1, true);
log.info("连接到 " + HOST+":"+clientID);
client.connect(options);
log.info("连接成功");
int[] Qos = {1};
String[] topic1 = {TOPIC};
client.subscribe(topic1, Qos);
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void connectionLost(Throwable throwable) {
System.out.println(throwable);
//连接断掉会执行到这里
log.info("连接中断,请重新连接!!!");
ClientMQTT clientMQTT = new ClientMQTT();
clientMQTT.clientStart();
}
//接收EMQX上订阅主题的数据
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
//获取消息返回格式
String msg = new String(mqttMessage.getPayload());
if (msg.equals("close")) {
return;
}
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(msg);
String info = jsonNode.get("values").toString();
//按照对方返回过来的格式接收数据
JsonNode infoList = objectMapper.readTree(info);
log.info("infoList:" + infoList.toString());
//插入数据
clientMQTTService= SpringUtils.getBean("clientMQTTService");
clientMQTTService.insertMQTTValue(infoList);
//subscribe后会执行到这里
log.info("订阅消息的主题是:" + s);
log.info("消息的ID是:" + mqttMessage.getId());
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
//publish可以执行到这里
log.info("This is deliveryComplete method----->" + iMqttDeliveryToken.isComplete());
}
/**
* 项目启动时,启动MQTTClint服务
*/
@PostConstruct
public void init()
{
ClientMQTT clientMQTT = new ClientMQTT();
clientMQTT.clientStart();
}
}
数据处理类
package com.xxl.job.executor.mqtt.mq;
import com.fasterxml.jackson.databind.JsonNode;
import com.xxl.job.executor.local.index.dao.IdssMqttMapper;
import com.xxl.job.executor.local.index.dao.IndexBaseMapper;
import com.xxl.job.executor.local.index.model.IdssMqttBase;
import com.xxl.job.executor.local.index.model.IdssMqttHistory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* MQTT消息插入
*/
@Component
@Slf4j
public class ClientMQTTService {
@Autowired
private IdssMqttMapper idssMqttMapper;
@Autowired
private IndexBaseMapper indexBaseMapper;
public void insertMQTTValue(JsonNode infoList) {
//获取需要的tag列表
List<IdssMqttBase> MQTTTagList = idssMqttMapper.getMQTTBaseTagList();
//插入数据结果集
List<IdssMqttHistory> idssMqttHistoryList = new ArrayList<>();
// 实际收卷长度之外的点位数据处理
for (JsonNode dataJsonNode : infoList) {
// 点位数据
String tag = dataJsonNode.get("id").asText();
for (IdssMqttBase idssMqttBase : MQTTTagList) {
// 实际收卷长度外的点位信息直接插入
if (idssMqttBase.getServerTag().equals(tag) ) {
// 实际值
Double value = dataJsonNode.get("v").asDouble();
// 若值为0则不存
if(isZero(value)){
continue;
}
long timestamp = dataJsonNode.get("t").asLong();
// 使用Date类将时间戳转换为日期
Date date = new Date(timestamp);
IdssMqttHistory idssMqttHistory = new IdssMqttHistory(tag, date, value);
idssMqttHistoryList.add(idssMqttHistory);
}
}
}
for (IdssMqttHistory idssMqttHistory : idssMqttHistoryList) {
// 不使用批量插入是防止重复数据导致一段数据均失败
try{
idssMqttMapper.insert(idssMqttHistory);
}catch (Exception e){
log.info("插入信息错误:"+idssMqttHistory.toString());
System.out.println("插入错误信息:" + e);
}
}
}
private Boolean isZero(Double value){
return value == null || value.doubleValue() == 0.0 || Math.abs(value.doubleValue()) < 1e-10;
}
}
MySQL数据库分区建表
项目因需要对接MQTT 的点位数据,数据更新频率很高,所以mysql数据表采用分区的形式进行创建,提高查询效率
以下为建表实例:
CREATE TABLE `cy_lab_real_data` (
`send_time` datetime(3) NOT NULL COMMENT '发送时间',
`receive_time` datetime(3) DEFAULT NULL COMMENT '接收时间',
`device_id` int(11) NOT NULL COMMENT '设备id',
`version` smallint(4) DEFAULT NULL COMMENT '版本号',
`barcode` varchar(64) DEFAULT NULL COMMENT '条码',
`product_name` varchar(64) DEFAULT NULL COMMENT '名称',
`c_str1` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '字符串1',
`c_num1` decimal(16,4) DEFAULT NULL COMMENT '数字1',
`c_num2` decimal(16,4) DEFAULT NULL COMMENT '数字2',
PRIMARY KEY (`send_time`,`device_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
PARTITION BY RANGE (TO_DAYS(send_time) ) (
PARTITION p20241127 VALUES LESS THAN ( TO_DAYS('20241127') ),
PARTITION p20241128 VALUES LESS THAN ( TO_DAYS('20241128') ),
PARTITION p20241129 VALUES LESS THAN ( TO_DAYS('20241129') ),
PARTITION p20241130 VALUES LESS THAN ( TO_DAYS('20241130') ),
PARTITION p20241201 VALUES LESS THAN ( TO_DAYS('20241201') ),
PARTITION p20241202 VALUES LESS THAN ( TO_DAYS('20241202') ),
PARTITION p20241203 VALUES LESS THAN ( TO_DAYS('20241203') ),
PARTITION p20241204 VALUES LESS THAN ( TO_DAYS('20241204') ),
PARTITION p20241205 VALUES LESS THAN ( TO_DAYS('20241205') ),
PARTITION p20241206 VALUES LESS THAN ( TO_DAYS('20241206') ),
PARTITION p20241207 VALUES LESS THAN ( TO_DAYS('20241207') ),
PARTITION p20241208 VALUES LESS THAN ( TO_DAYS('20241208') ),
PARTITION p20241209 VALUES LESS THAN ( TO_DAYS('20241209') ),
PARTITION p20241210 VALUES LESS THAN ( TO_DAYS('20241210') ),
PARTITION p20241211 VALUES LESS THAN ( TO_DAYS('20241211') ),
PARTITION p20241212 VALUES LESS THAN ( TO_DAYS('20241212') ),
PARTITION p20241213 VALUES LESS THAN ( TO_DAYS('20241213') ),
PARTITION p20241214 VALUES LESS THAN ( TO_DAYS('20241214') ),
PARTITION p20241215 VALUES LESS THAN ( TO_DAYS('20241215') ),
PARTITION p20241216 VALUES LESS THAN ( TO_DAYS('20241216') ),
PARTITION p20241217 VALUES LESS THAN ( TO_DAYS('20241217') ),
PARTITION p20241218 VALUES LESS THAN ( TO_DAYS('20241218') ),
PARTITION p20241219 VALUES LESS THAN ( TO_DAYS('20241219') ),
PARTITION p20241220 VALUES LESS THAN ( TO_DAYS('20241220') ),
PARTITION p20241221 VALUES LESS THAN ( TO_DAYS('20241221') ),
PARTITION p20241222 VALUES LESS THAN ( TO_DAYS('20241222') ),
PARTITION p20241223 VALUES LESS THAN ( TO_DAYS('20241223') ),
PARTITION p20241224 VALUES LESS THAN ( TO_DAYS('20241224') ),
PARTITION p20241225 VALUES LESS THAN ( TO_DAYS('20241225') ),
PARTITION p20241226 VALUES LESS THAN ( TO_DAYS('20241226') ),
PARTITION p20241227 VALUES LESS THAN ( TO_DAYS('20241227') ),
PARTITION p20241228 VALUES LESS THAN ( TO_DAYS('20241228') ),
PARTITION p20241229 VALUES LESS THAN ( TO_DAYS('20241229') ),
PARTITION p20241230 VALUES LESS THAN ( TO_DAYS('20241230') ),
PARTITION p20241231 VALUES LESS THAN ( TO_DAYS('20241231') ),
PARTITION p20250101 VALUES LESS THAN ( TO_DAYS('20250101') ),
PARTITION p20250102 VALUES LESS THAN ( TO_DAYS('20250102') ),
PARTITION p20250103 VALUES LESS THAN ( TO_DAYS('20250103') ),
PARTITION p20250104 VALUES LESS THAN ( TO_DAYS('20250104') ),
PARTITION p20250105 VALUES LESS THAN ( TO_DAYS('20250105') ),
PARTITION p20250106 VALUES LESS THAN ( TO_DAYS('20250106') ),
PARTITION p20250107 VALUES LESS THAN ( TO_DAYS('20250107') ),
PARTITION p20250108 VALUES LESS THAN ( TO_DAYS('20250108') ),
PARTITION p20250109 VALUES LESS THAN ( TO_DAYS('20250109') ),
PARTITION p20250110 VALUES LESS THAN ( TO_DAYS('20250110') ),
PARTITION p20250111 VALUES LESS THAN ( TO_DAYS('20250111') ),
PARTITION p20250112 VALUES LESS THAN ( TO_DAYS('20250112') ),
PARTITION p20250113 VALUES LESS THAN ( TO_DAYS('20250113') ),
PARTITION p20250114 VALUES LESS THAN ( TO_DAYS('20250114') ),
PARTITION p20250115 VALUES LESS THAN ( TO_DAYS('20250115') ),
PARTITION p20250116 VALUES LESS THAN ( TO_DAYS('20250116') ),
PARTITION p20250117 VALUES LESS THAN ( TO_DAYS('20250117') ),
PARTITION p20250118 VALUES LESS THAN ( TO_DAYS('20250118') ),
PARTITION p20250119 VALUES LESS THAN ( TO_DAYS('20250119') ),
PARTITION p20250120 VALUES LESS THAN ( TO_DAYS('20250120') ),
PARTITION p20250121 VALUES LESS THAN ( TO_DAYS('20250121') ),
PARTITION p20250122 VALUES LESS THAN ( TO_DAYS('20250122') ),
PARTITION p20250123 VALUES LESS THAN ( TO_DAYS('20250123') ),
PARTITION p20250124 VALUES LESS THAN ( TO_DAYS('20250124') ),
PARTITION p20250125 VALUES LESS THAN ( TO_DAYS('20250125') ),
PARTITION p20250126 VALUES LESS THAN ( TO_DAYS('20250126') ),
PARTITION p20250127 VALUES LESS THAN ( TO_DAYS('20250127') ),
PARTITION p20250128 VALUES LESS THAN ( TO_DAYS('20250128') ),
PARTITION p20250129 VALUES LESS THAN ( TO_DAYS('20250129') ),
PARTITION p20250130 VALUES LESS THAN ( TO_DAYS('20250130') ),
PARTITION p20250131 VALUES LESS THAN ( TO_DAYS('20250131') ),
PARTITION p20250201 VALUES LESS THAN ( TO_DAYS('20250201') ),
PARTITION p20250202 VALUES LESS THAN ( TO_DAYS('20250202') ),
PARTITION p20250203 VALUES LESS THAN ( TO_DAYS('20250203') ),
PARTITION p20250204 VALUES LESS THAN ( TO_DAYS('20250204') ),
PARTITION p20250205 VALUES LESS THAN ( TO_DAYS('20250205') ),
PARTITION p20250206 VALUES LESS THAN ( TO_DAYS('20250206') ),
PARTITION p20250207 VALUES LESS THAN ( TO_DAYS('20250207') ),
PARTITION p20250208 VALUES LESS THAN ( TO_DAYS('20250208') ),
PARTITION p20250209 VALUES LESS THAN ( TO_DAYS('20250209') ),
PARTITION p20250210 VALUES LESS THAN ( TO_DAYS('20250210') ),
PARTITION p20250211 VALUES LESS THAN ( TO_DAYS('20250211') ),
PARTITION p20250212 VALUES LESS THAN ( TO_DAYS('20250212') ),
PARTITION p20250213 VALUES LESS THAN ( TO_DAYS('20250213') ),
PARTITION p20250214 VALUES LESS THAN ( TO_DAYS('20250214') ),
PARTITION p20250215 VALUES LESS THAN ( TO_DAYS('20250215') ),
PARTITION p20250216 VALUES LESS THAN ( TO_DAYS('20250216') ),
PARTITION p20250217 VALUES LESS THAN ( TO_DAYS('20250217') ),
PARTITION p20250218 VALUES LESS THAN ( TO_DAYS('20250218') ),
PARTITION p20250219 VALUES LESS THAN ( TO_DAYS('20250219') ),
PARTITION p20250220 VALUES LESS THAN ( TO_DAYS('20250220') ),
PARTITION p20250221 VALUES LESS THAN ( TO_DAYS('20250221') ),
PARTITION p20250222 VALUES LESS THAN ( TO_DAYS('20250222') ),
PARTITION p20250223 VALUES LESS THAN ( TO_DAYS('20250223') ),
PARTITION p20250224 VALUES LESS THAN ( TO_DAYS('20250224') ),
PARTITION p20250225 VALUES LESS THAN ( TO_DAYS('20250225') ),
PARTITION p20250226 VALUES LESS THAN ( TO_DAYS('20250226') ),
PARTITION p20250227 VALUES LESS THAN ( TO_DAYS('20250227') ),
PARTITION p20250228 VALUES LESS THAN ( TO_DAYS('20250228') ),
PARTITION p20250301 VALUES LESS THAN ( TO_DAYS('20250301') ),
PARTITION p20250302 VALUES LESS THAN ( TO_DAYS('20250302') ),
PARTITION p20250303 VALUES LESS THAN ( TO_DAYS('20250303') ),
PARTITION p20250304 VALUES LESS THAN ( TO_DAYS('20250304') ),
PARTITION p20250305 VALUES LESS THAN ( TO_DAYS('20250305') ),
PARTITION p20250306 VALUES LESS THAN ( TO_DAYS('20250306') ),
PARTITION p20250307 VALUES LESS THAN ( TO_DAYS('20250307') ),
PARTITION p20250308 VALUES LESS THAN ( TO_DAYS('20250308') ),
PARTITION p20250309 VALUES LESS THAN ( TO_DAYS('20250309') ),
PARTITION p20250310 VALUES LESS THAN ( TO_DAYS('20250310') ),
PARTITION p20250311 VALUES LESS THAN ( TO_DAYS('20250311') ),
PARTITION p20250312 VALUES LESS THAN ( TO_DAYS('20250312') ),
PARTITION p20250313 VALUES LESS THAN ( TO_DAYS('20250313') ),
PARTITION p20250314 VALUES LESS THAN ( TO_DAYS('20250314') ),
PARTITION p20250315 VALUES LESS THAN ( TO_DAYS('20250315') ),
PARTITION p20250316 VALUES LESS THAN ( TO_DAYS('20250316') ),
PARTITION p20250317 VALUES LESS THAN ( TO_DAYS('20250317') ),
PARTITION p20250318 VALUES LESS THAN ( TO_DAYS('20250318') ),
PARTITION p20250319 VALUES LESS THAN ( TO_DAYS('20250319') ),
PARTITION p20250320 VALUES LESS THAN ( TO_DAYS('20250320') ),
PARTITION p20250321 VALUES LESS THAN ( TO_DAYS('20250321') ),
PARTITION p20250322 VALUES LESS THAN ( TO_DAYS('20250322') ),
PARTITION p20250323 VALUES LESS THAN ( TO_DAYS('20250323') ),
PARTITION p20250324 VALUES LESS THAN ( TO_DAYS('20250324') ),
PARTITION p20250325 VALUES LESS THAN ( TO_DAYS('20250325') ),
PARTITION p20250326 VALUES LESS THAN ( TO_DAYS('20250326') ),
PARTITION p20250327 VALUES LESS THAN ( TO_DAYS('20250327') ),
PARTITION p20250328 VALUES LESS THAN ( TO_DAYS('20250328') ),
PARTITION p20250329 VALUES LESS THAN ( TO_DAYS('20250329') ),
PARTITION p20250330 VALUES LESS THAN ( TO_DAYS('20250330') ),
PARTITION p20250331 VALUES LESS THAN ( TO_DAYS('20250331') ),
PARTITION p20250401 VALUES LESS THAN ( TO_DAYS('20250401') ),
PARTITION p20250402 VALUES LESS THAN ( TO_DAYS('20250402') ),
PARTITION p20250403 VALUES LESS THAN ( TO_DAYS('20250403') ),
PARTITION p20250404 VALUES LESS THAN ( TO_DAYS('20250404') ),
PARTITION p20250405 VALUES LESS THAN ( TO_DAYS('20250405') ),
PARTITION p20250406 VALUES LESS THAN ( TO_DAYS('20250406') ),
PARTITION p20250407 VALUES LESS THAN ( TO_DAYS('20250407') ),
PARTITION p20250408 VALUES LESS THAN ( TO_DAYS('20250408') ),
PARTITION p20250409 VALUES LESS THAN ( TO_DAYS('20250409') ),
PARTITION p20250410 VALUES LESS THAN ( TO_DAYS('20250410') ),
PARTITION p20250411 VALUES LESS THAN ( TO_DAYS('20250411') ),
PARTITION p20250412 VALUES LESS THAN ( TO_DAYS('20250412') ),
PARTITION p20250413 VALUES LESS THAN ( TO_DAYS('20250413') ),
PARTITION p20250414 VALUES LESS THAN ( TO_DAYS('20250414') ),
PARTITION p20250415 VALUES LESS THAN ( TO_DAYS('20250415') ),
PARTITION p20250416 VALUES LESS THAN ( TO_DAYS('20250416') ),
PARTITION p20250417 VALUES LESS THAN ( TO_DAYS('20250417') ),
PARTITION p20250418 VALUES LESS THAN ( TO_DAYS('20250418') ),
PARTITION p20250419 VALUES LESS THAN ( TO_DAYS('20250419') ),
PARTITION p20250420 VALUES LESS THAN ( TO_DAYS('20250420') ),
PARTITION p20250421 VALUES LESS THAN ( TO_DAYS('20250421') ),
PARTITION p20250422 VALUES LESS THAN ( TO_DAYS('20250422') ),
PARTITION p20250423 VALUES LESS THAN ( TO_DAYS('20250423') ),
PARTITION p20250424 VALUES LESS THAN ( TO_DAYS('20250424') ),
PARTITION p20250425 VALUES LESS THAN ( TO_DAYS('20250425') ),
PARTITION p20250426 VALUES LESS THAN ( TO_DAYS('20250426') ),
PARTITION p20250427 VALUES LESS THAN ( TO_DAYS('20250427') ),
PARTITION p20250428 VALUES LESS THAN ( TO_DAYS('20250428') ),
PARTITION p20250429 VALUES LESS THAN ( TO_DAYS('20250429') ),
PARTITION p20250430 VALUES LESS THAN ( TO_DAYS('20250430') ),
PARTITION p20250501 VALUES LESS THAN ( TO_DAYS('20250501') ),
PARTITION p20250502 VALUES LESS THAN ( TO_DAYS('20250502') ),
PARTITION p20250503 VALUES LESS THAN ( TO_DAYS('20250503') ),
PARTITION p20250504 VALUES LESS THAN ( TO_DAYS('20250504') ),
PARTITION p20250505 VALUES LESS THAN ( TO_DAYS('20250505') ),
PARTITION p20250506 VALUES LESS THAN ( TO_DAYS('20250506') ),
PARTITION p20250507 VALUES LESS THAN ( TO_DAYS('20250507') ),
PARTITION p20250508 VALUES LESS THAN ( TO_DAYS('20250508') ),
PARTITION p20250509 VALUES LESS THAN ( TO_DAYS('20250509') ),
PARTITION p20250510 VALUES LESS THAN ( TO_DAYS('20250510') ),
PARTITION p20250511 VALUES LESS THAN ( TO_DAYS('20250511') ),
PARTITION p20250512 VALUES LESS THAN ( TO_DAYS('20250512') ),
PARTITION p20250513 VALUES LESS THAN ( TO_DAYS('20250513') ),
PARTITION p20250514 VALUES LESS THAN ( TO_DAYS('20250514') ),
PARTITION p20250515 VALUES LESS THAN ( TO_DAYS('20250515') ),
PARTITION p20250516 VALUES LESS THAN ( TO_DAYS('20250516') ),
PARTITION p20250517 VALUES LESS THAN ( TO_DAYS('20250517') ),
PARTITION p20250518 VALUES LESS THAN ( TO_DAYS('20250518') ),
PARTITION p20250519 VALUES LESS THAN ( TO_DAYS('20250519') ),
PARTITION p20250520 VALUES LESS THAN ( TO_DAYS('20250520') ),
PARTITION p20250521 VALUES LESS THAN ( TO_DAYS('20250521') ),
PARTITION p20250522 VALUES LESS THAN ( TO_DAYS('20250522') ),
PARTITION p20250523 VALUES LESS THAN ( TO_DAYS('20250523') ),
PARTITION p20250524 VALUES LESS THAN ( TO_DAYS('20250524') ),
PARTITION p20250525 VALUES LESS THAN ( TO_DAYS('20250525') ),
PARTITION p20250526 VALUES LESS THAN ( TO_DAYS('20250526') ),
PARTITION p20250527 VALUES LESS THAN ( TO_DAYS('20250527') ),
PARTITION p20250528 VALUES LESS THAN ( TO_DAYS('20250528') ),
PARTITION p20250529 VALUES LESS THAN ( TO_DAYS('20250529') ),
PARTITION p20250530 VALUES LESS THAN ( TO_DAYS('20250530') ),
PARTITION p20250531 VALUES LESS THAN ( TO_DAYS('20250531') ),
PARTITION p20250601 VALUES LESS THAN ( TO_DAYS('20250601') ),
PARTITION p20250602 VALUES LESS THAN ( TO_DAYS('20250602') ),
PARTITION p20250603 VALUES LESS THAN ( TO_DAYS('20250603') ),
PARTITION p20250604 VALUES LESS THAN ( TO_DAYS('20250604') ),
PARTITION p20250605 VALUES LESS THAN ( TO_DAYS('20250605') ),
PARTITION p20250606 VALUES LESS THAN ( TO_DAYS('20250606') ),
PARTITION p20250607 VALUES LESS THAN ( TO_DAYS('20250607') ),
PARTITION p20250608 VALUES LESS THAN ( TO_DAYS('20250608') ),
PARTITION p20250609 VALUES LESS THAN ( TO_DAYS('20250609') ),
PARTITION p20250610 VALUES LESS THAN ( TO_DAYS('20250610') ),
PARTITION p20250611 VALUES LESS THAN ( TO_DAYS('20250611') ),
PARTITION p20250612 VALUES LESS THAN ( TO_DAYS('20250612') ),
PARTITION p20250613 VALUES LESS THAN ( TO_DAYS('20250613') ),
PARTITION p20250614 VALUES LESS THAN ( TO_DAYS('20250614') ),
PARTITION p20250615 VALUES LESS THAN ( TO_DAYS('20250615') ),
PARTITION p20250616 VALUES LESS THAN ( TO_DAYS('20250616') ),
PARTITION p20250617 VALUES LESS THAN ( TO_DAYS('20250617') ),
PARTITION p20250618 VALUES LESS THAN ( TO_DAYS('20250618') ),
PARTITION p20250619 VALUES LESS THAN ( TO_DAYS('20250619') ),
PARTITION p20250620 VALUES LESS THAN ( TO_DAYS('20250620') ),
PARTITION p20250621 VALUES LESS THAN ( TO_DAYS('20250621') ),
PARTITION p20250622 VALUES LESS THAN ( TO_DAYS('20250622') ),
PARTITION p20250623 VALUES LESS THAN ( TO_DAYS('20250623') ),
PARTITION p20250624 VALUES LESS THAN ( TO_DAYS('20250624') ),
PARTITION p20250625 VALUES LESS THAN ( TO_DAYS('20250625') ),
PARTITION p20250626 VALUES LESS THAN ( TO_DAYS('20250626') ),
PARTITION p20250627 VALUES LESS THAN ( TO_DAYS('20250627') ),
PARTITION p20250628 VALUES LESS THAN ( TO_DAYS('20250628') ),
PARTITION p20250629 VALUES LESS THAN ( TO_DAYS('20250629') ),
PARTITION p20250630 VALUES LESS THAN ( TO_DAYS('20250630') ),
PARTITION p20250701 VALUES LESS THAN ( TO_DAYS('20250701') ),
PARTITION p20250702 VALUES LESS THAN ( TO_DAYS('20250702') ),
PARTITION p20250703 VALUES LESS THAN ( TO_DAYS('20250703') ),
PARTITION p20250704 VALUES LESS THAN ( TO_DAYS('20250704') ),
PARTITION p20250705 VALUES LESS THAN ( TO_DAYS('20250705') ),
PARTITION p20250706 VALUES LESS THAN ( TO_DAYS('20250706') ),
PARTITION p20250707 VALUES LESS THAN ( TO_DAYS('20250707') ),
PARTITION p20250708 VALUES LESS THAN ( TO_DAYS('20250708') ),
PARTITION p20250709 VALUES LESS THAN ( TO_DAYS('20250709') ),
PARTITION p20250710 VALUES LESS THAN ( TO_DAYS('20250710') ),
PARTITION p20250711 VALUES LESS THAN ( TO_DAYS('20250711') ),
PARTITION p20250712 VALUES LESS THAN ( TO_DAYS('20250712') ),
PARTITION p20250713 VALUES LESS THAN ( TO_DAYS('20250713') ),
PARTITION p20250714 VALUES LESS THAN ( TO_DAYS('20250714') ),
PARTITION p20250715 VALUES LESS THAN ( TO_DAYS('20250715') ),
PARTITION p20250716 VALUES LESS THAN ( TO_DAYS('20250716') ),
PARTITION p20250717 VALUES LESS THAN ( TO_DAYS('20250717') ),
PARTITION p20250718 VALUES LESS THAN ( TO_DAYS('20250718') ),
PARTITION p20250719 VALUES LESS THAN ( TO_DAYS('20250719') ),
PARTITION p20250720 VALUES LESS THAN ( TO_DAYS('20250720') ),
PARTITION p20250721 VALUES LESS THAN ( TO_DAYS('20250721') ),
PARTITION p20250722 VALUES LESS THAN ( TO_DAYS('20250722') ),
PARTITION p20250723 VALUES LESS THAN ( TO_DAYS('20250723') ),
PARTITION p20250724 VALUES LESS THAN ( TO_DAYS('20250724') ),
PARTITION p20250725 VALUES LESS THAN ( TO_DAYS('20250725') ),
PARTITION p20250726 VALUES LESS THAN ( TO_DAYS('20250726') ),
PARTITION p20250727 VALUES LESS THAN ( TO_DAYS('20250727') ),
PARTITION p20250728 VALUES LESS THAN ( TO_DAYS('20250728') ),
PARTITION p20250729 VALUES LESS THAN ( TO_DAYS('20250729') ),
PARTITION p20250730 VALUES LESS THAN ( TO_DAYS('20250730') ),
PARTITION p20250731 VALUES LESS THAN ( TO_DAYS('20250731') ),
PARTITION p20250801 VALUES LESS THAN ( TO_DAYS('20250801') ),
PARTITION p20250802 VALUES LESS THAN ( TO_DAYS('20250802') ),
PARTITION p20250803 VALUES LESS THAN ( TO_DAYS('20250803') ),
PARTITION p20250804 VALUES LESS THAN ( TO_DAYS('20250804') ),
PARTITION p20250805 VALUES LESS THAN ( TO_DAYS('20250805') ),
PARTITION p20250806 VALUES LESS THAN ( TO_DAYS('20250806') ),
PARTITION p20250807 VALUES LESS THAN ( TO_DAYS('20250807') ),
PARTITION p20250808 VALUES LESS THAN ( TO_DAYS('20250808') ),
PARTITION p20250809 VALUES LESS THAN ( TO_DAYS('20250809') ),
PARTITION p20250810 VALUES LESS THAN ( TO_DAYS('20250810') ),
PARTITION p20250811 VALUES LESS THAN ( TO_DAYS('20250811') ),
PARTITION p20250812 VALUES LESS THAN ( TO_DAYS('20250812') ),
PARTITION p20250813 VALUES LESS THAN ( TO_DAYS('20250813') ),
PARTITION p20250814 VALUES LESS THAN ( TO_DAYS('20250814') ),
PARTITION p20250815 VALUES LESS THAN ( TO_DAYS('20250815') ),
PARTITION p20250816 VALUES LESS THAN ( TO_DAYS('20250816') ),
PARTITION p20250817 VALUES LESS THAN ( TO_DAYS('20250817') ),
PARTITION p20250818 VALUES LESS THAN ( TO_DAYS('20250818') ),
PARTITION p20250819 VALUES LESS THAN ( TO_DAYS('20250819') ),
PARTITION p20250820 VALUES LESS THAN ( TO_DAYS('20250820') ),
PARTITION p20250821 VALUES LESS THAN ( TO_DAYS('20250821') ),
PARTITION p20250822 VALUES LESS THAN ( TO_DAYS('20250822') ),
PARTITION p20250823 VALUES LESS THAN ( TO_DAYS('20250823') ),
PARTITION p20250824 VALUES LESS THAN ( TO_DAYS('20250824') ),
PARTITION p20250825 VALUES LESS THAN ( TO_DAYS('20250825') ),
PARTITION p20250826 VALUES LESS THAN ( TO_DAYS('20250826') ),
PARTITION p20250827 VALUES LESS THAN ( TO_DAYS('20250827') ),
PARTITION p20250828 VALUES LESS THAN ( TO_DAYS('20250828') ),
PARTITION p20250829 VALUES LESS THAN ( TO_DAYS('20250829') ),
PARTITION p20250830 VALUES LESS THAN ( TO_DAYS('20250830') ),
PARTITION p20250831 VALUES LESS THAN ( TO_DAYS('20250831') ),
PARTITION p20250901 VALUES LESS THAN ( TO_DAYS('20250901') ),
PARTITION p20250902 VALUES LESS THAN ( TO_DAYS('20250902') ),
PARTITION p20250903 VALUES LESS THAN ( TO_DAYS('20250903') ),
PARTITION p20250904 VALUES LESS THAN ( TO_DAYS('20250904') ),
PARTITION p20250905 VALUES LESS THAN ( TO_DAYS('20250905') ),
PARTITION p20250906 VALUES LESS THAN ( TO_DAYS('20250906') ),
PARTITION p20250907 VALUES LESS THAN ( TO_DAYS('20250907') ),
PARTITION p20250908 VALUES LESS THAN ( TO_DAYS('20250908') ),
PARTITION p20250909 VALUES LESS THAN ( TO_DAYS('20250909') ),
PARTITION p20250910 VALUES LESS THAN ( TO_DAYS('20250910') ),
PARTITION p20250911 VALUES LESS THAN ( TO_DAYS('20250911') ),
PARTITION p20250912 VALUES LESS THAN ( TO_DAYS('20250912') ),
PARTITION p20250913 VALUES LESS THAN ( TO_DAYS('20250913') ),
PARTITION p20250914 VALUES LESS THAN ( TO_DAYS('20250914') ),
PARTITION p20250915 VALUES LESS THAN ( TO_DAYS('20250915') ),
PARTITION p20250916 VALUES LESS THAN ( TO_DAYS('20250916') ),
PARTITION p20250917 VALUES LESS THAN ( TO_DAYS('20250917') ),
PARTITION p20250918 VALUES LESS THAN ( TO_DAYS('20250918') ),
PARTITION p20250919 VALUES LESS THAN ( TO_DAYS('20250919') ),
PARTITION p20250920 VALUES LESS THAN ( TO_DAYS('20250920') ),
PARTITION p20250921 VALUES LESS THAN ( TO_DAYS('20250921') ),
PARTITION p20250922 VALUES LESS THAN ( TO_DAYS('20250922') ),
PARTITION p20250923 VALUES LESS THAN ( TO_DAYS('20250923') ),
PARTITION p20250924 VALUES LESS THAN ( TO_DAYS('20250924') ),
PARTITION p20250925 VALUES LESS THAN ( TO_DAYS('20250925') ),
PARTITION p20250926 VALUES LESS THAN ( TO_DAYS('20250926') ),
PARTITION p20250927 VALUES LESS THAN ( TO_DAYS('20250927') ),
PARTITION p20250928 VALUES LESS THAN ( TO_DAYS('20250928') ),
PARTITION p20250929 VALUES LESS THAN ( TO_DAYS('20250929') ),
PARTITION p20250930 VALUES LESS THAN ( TO_DAYS('20250930') ),
PARTITION p20251001 VALUES LESS THAN ( TO_DAYS('20251001') ),
PARTITION p20251002 VALUES LESS THAN ( TO_DAYS('20251002') ),
PARTITION p20251003 VALUES LESS THAN ( TO_DAYS('20251003') ),
PARTITION p20251004 VALUES LESS THAN ( TO_DAYS('20251004') ),
PARTITION p20251005 VALUES LESS THAN ( TO_DAYS('20251005') ),
PARTITION p20251006 VALUES LESS THAN ( TO_DAYS('20251006') ),
PARTITION p20251007 VALUES LESS THAN ( TO_DAYS('20251007') ),
PARTITION p20251008 VALUES LESS THAN ( TO_DAYS('20251008') ),
PARTITION p20251009 VALUES LESS THAN ( TO_DAYS('20251009') ),
PARTITION p20251010 VALUES LESS THAN ( TO_DAYS('20251010') ),
PARTITION p20251011 VALUES LESS THAN ( TO_DAYS('20251011') ),
PARTITION p20251012 VALUES LESS THAN ( TO_DAYS('20251012') ),
PARTITION p20251013 VALUES LESS THAN ( TO_DAYS('20251013') ),
PARTITION p20251014 VALUES LESS THAN ( TO_DAYS('20251014') ),
PARTITION p20251015 VALUES LESS THAN ( TO_DAYS('20251015') ),
PARTITION p20251016 VALUES LESS THAN ( TO_DAYS('20251016') ),
PARTITION p20251017 VALUES LESS THAN ( TO_DAYS('20251017') ),
PARTITION p20251018 VALUES LESS THAN ( TO_DAYS('20251018') ),
PARTITION p20251019 VALUES LESS THAN ( TO_DAYS('20251019') ),
PARTITION p20251020 VALUES LESS THAN ( TO_DAYS('20251020') ),
PARTITION p20251021 VALUES LESS THAN ( TO_DAYS('20251021') ),
PARTITION p20251022 VALUES LESS THAN ( TO_DAYS('20251022') ),
PARTITION p20251023 VALUES LESS THAN ( TO_DAYS('20251023') ),
PARTITION p20251024 VALUES LESS THAN ( TO_DAYS('20251024') ),
PARTITION p20251025 VALUES LESS THAN ( TO_DAYS('20251025') ),
PARTITION p20251026 VALUES LESS THAN ( TO_DAYS('20251026') ),
PARTITION p20251027 VALUES LESS THAN ( TO_DAYS('20251027') ),
PARTITION p20251028 VALUES LESS THAN ( TO_DAYS('20251028') ),
PARTITION p20251029 VALUES LESS THAN ( TO_DAYS('20251029') ),
PARTITION p20251030 VALUES LESS THAN ( TO_DAYS('20251030') ),
PARTITION p20251031 VALUES LESS THAN ( TO_DAYS('20251031') ),
PARTITION p20251101 VALUES LESS THAN ( TO_DAYS('20251101') ),
PARTITION p20251102 VALUES LESS THAN ( TO_DAYS('20251102') ),
PARTITION p20251103 VALUES LESS THAN ( TO_DAYS('20251103') ),
PARTITION p20251104 VALUES LESS THAN ( TO_DAYS('20251104') ),
PARTITION p20251105 VALUES LESS THAN ( TO_DAYS('20251105') ),
PARTITION p20251106 VALUES LESS THAN ( TO_DAYS('20251106') ),
PARTITION p20251107 VALUES LESS THAN ( TO_DAYS('20251107') ),
PARTITION p20251108 VALUES LESS THAN ( TO_DAYS('20251108') ),
PARTITION p20251109 VALUES LESS THAN ( TO_DAYS('20251109') ),
PARTITION p20251110 VALUES LESS THAN ( TO_DAYS('20251110') ),
PARTITION p20251111 VALUES LESS THAN ( TO_DAYS('20251111') ),
PARTITION p20251112 VALUES LESS THAN ( TO_DAYS('20251112') ),
PARTITION p20251113 VALUES LESS THAN ( TO_DAYS('20251113') ),
PARTITION p20251114 VALUES LESS THAN ( TO_DAYS('20251114') ),
PARTITION p20251115 VALUES LESS THAN ( TO_DAYS('20251115') ),
PARTITION p20251116 VALUES LESS THAN ( TO_DAYS('20251116') ),
PARTITION p20251117 VALUES LESS THAN ( TO_DAYS('20251117') ),
PARTITION p20251118 VALUES LESS THAN ( TO_DAYS('20251118') ),
PARTITION p20251119 VALUES LESS THAN ( TO_DAYS('20251119') ),
PARTITION p20251120 VALUES LESS THAN ( TO_DAYS('20251120') ),
PARTITION p20251121 VALUES LESS THAN ( TO_DAYS('20251121') ),
PARTITION p20251122 VALUES LESS THAN ( TO_DAYS('20251122') ),
PARTITION p20251123 VALUES LESS THAN ( TO_DAYS('20251123') ),
PARTITION p20251124 VALUES LESS THAN ( TO_DAYS('20251124') ),
PARTITION p20251125 VALUES LESS THAN ( TO_DAYS('20251125') ),
PARTITION p20251126 VALUES LESS THAN ( TO_DAYS('20251126') ),
PARTITION pmax VALUES LESS THAN MAXVALUE
);