接收订阅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;@Autowiredprivate 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();}}@Overridepublic void connectionLost(Throwable throwable) {System.out.println(throwable);//连接断掉会执行到这里log.info("连接中断,请重新连接!!!");ClientMQTT clientMQTT = new ClientMQTT();clientMQTT.clientStart();}//接收EMQX上订阅主题的数据@Overridepublic 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());}@Overridepublic void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {//publish可以执行到这里log.info("This is deliveryComplete method----->" + iMqttDeliveryToken.isComplete());}/*** 项目启动时,启动MQTTClint服务*/@PostConstructpublic 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 {@Autowiredprivate IdssMqttMapper idssMqttMapper;@Autowiredprivate 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
);