{"id":16,"date":"2025-10-25T09:47:12","date_gmt":"2025-10-25T01:47:12","guid":{"rendered":"https:\/\/wiki.tengwangyun.com\/?p=16"},"modified":"2025-11-12T15:02:10","modified_gmt":"2025-11-12T07:02:10","slug":"%e6%95%b0%e9%87%87%e6%95%b0%e6%8d%ae%e7%94%9f%e6%88%90%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/wiki.tengwangyun.com\/?p=16","title":{"rendered":"\u6570\u91c7\u6570\u636e\u751f\u6210\u6559\u7a0b"},"content":{"rendered":"\n<p class=\"is-style-text-subtitle is-style-text-subtitle--1\">\u6574\u4e2a\u6570\u91c7\u6570\u636e\u6dfb\u52a0\u7684\u95ed\u73af\u5982\u4e0b<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li id=\"\u8bbe\u5907\u6dfb\u52a0\">\u8bbe\u5907\u6dfb\u52a0<\/li>\n\n\n\n<li>\u5728\u5927\u5c4f\u770b\u677f\u4e2d\u6dfb\u52a0\u8bbe\u5907<\/li>\n\n\n\n<li>\u70b9\u4f4d\u6dfb\u52a0<\/li>\n\n\n\n<li>\u70b9\u4f4d\u6570\u636e\u751f\u6210<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-fe9cc265 wp-block-group-is-layout-flex\"><\/div>\n\n\n\n<p>\u6570\u91c7\u6570\u636e\u6dfb\u52a0\u7684\u524d\u63d0\u662f<\/p>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"is-style-text-display is-style-text-display--2\" id=\"\u8bbe\u5907\u6dfb\u52a0\">1.\u8bbe\u5907\u6dfb\u52a0<\/p>\n\n\n\n<p>\u8bbe\u5907\u6dfb\u52a0\u6709\u4e24\u79cd\u65b9\u5f0f\u901a\u8fc7\u7f51\u9875\u6dfb\u52a0\u548c\u6570\u636e\u5e93\u6dfb\u52a0\uff0c\u4e8c\u9009\u4e00\u5373\u53ef<\/p>\n\n\n\n<p class=\"is-style-text-display has-medium-font-size is-style-text-display--3\">\u65b9\u5f0f1 :  \u5728\u9875\u9762\u4e0a\u6dfb\u52a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-1024x560.png\" alt=\"\" class=\"wp-image-24\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-1024x560.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-300x164.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-768x420.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-1536x840.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<p>\u65b0\u589e\u8bbe\u5907\u7684\u65f6\u5019 \u4e0b\u9762\u7684\u201c\u7f51\u5173\u8bbe\u5907\u540d\u201d\u5fc5\u987b\u586b\u5199\uff0c\u5177\u4f53\u7684\u7f51\u5173\u8bbe\u5907\u540d\u627e\u6570\u91c7\u5de5\u7a0b\u5e08\u62ff\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"462\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-2-1024x462.png\" alt=\"\" class=\"wp-image-26\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-2-1024x462.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-2-300x135.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-2-768x347.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-2-1536x693.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-2.png 1921w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u65b9\u5f0f2\uff1a\u76f4\u63a5\u5728\u6570\u636e\u5e93\u6dfb\u52a0\u4f46\u4e00\u5b9a\u8981\u8bb0\u5f97\u6dfb\u52a0gateway_dev_name \u4e5f\u5c31\u662f\u7f51\u5173\u8bbe\u5907\u540d<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-3-1024x412.png\" alt=\"\" class=\"wp-image-27\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-3-1024x412.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-3-300x121.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-3-768x309.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-3-1536x618.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-3-2048x824.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"is-style-text-display is-style-text-display--4\">2.\u5728\u5927\u5c4f\u770b\u677f\u4e2d\u6dfb\u52a0\u8bbe\u5907<\/p>\n\n\n\n<p>\u5982\u679c\u662f\u771f\u5b9e\u6570\u91c7\u4ed6\u4f1a\u81ea\u52a8\u6dfb\u52a0\uff0c\u5982\u679c\u662f\u9700\u8981\u9020\u5047\u6570\u636e\uff0c\u76f4\u63a5\u5230machine_state\u8868\u91cc\u9762\u6dfb\u52a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"254\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-4-1024x254.png\" alt=\"\" class=\"wp-image-30\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-4-1024x254.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-4-300x74.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-4-768x191.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-4-1536x381.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-4-2048x509.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>machine_id   \u5c31\u662f\u524d\u9762\u6211\u4eec\u6dfb\u52a0\u7684\u8bbe\u5907\uff0c\u5728machine\u8868\u91cc\u9762\u53d6\u4ed6\u7684id\u5373\u53ef<\/p>\n\n\n\n<p>state\u5c31\u662f\u8bbe\u5907\u72b6\u6001  1:\u79bb\u7ebf 2:\u5728\u7ebf   3:\u6545\u969c  4:\u5f85\u673a  5:\u505c\u673a  6:\u4fdd\u517b  7:\u7ef4\u4fee<\/p>\n\n\n\n<p>last_update\u5c31\u662f\u8bbe\u5907\u72b6\u6001\u53d8\u66f4\u65f6\u95f4<\/p>\n\n\n\n<p>\u81f3\u4e8e\u201c\u8bbe\u5907\u7f16\u53f7\u201d\u5c31\u662f\u4f60\u5728\u6700\u524d\u9762\u6dfb\u52a0\u7684 \u7f51\u5173\u8bbe\u5907\u540d \u4ed6\u4f1a\u81ea\u52a8\u8c03\u7528<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"is-style-text-display is-style-text-display--5\">1.\u70b9\u4f4d\u6dfb\u52a0<\/p>\n\n\n\n<p>\u76f4\u63a5\u5728\u7f51\u9875\u4e0a\u6dfb\u52a0\uff0c\u5982\u679c\u6ca1\u6709\u70b9\u4f4d\u7ba1\u7406\uff0c\u8bb0\u5f97\u6dfb\u52a0\u6743\u9650<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"542\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-5-1024x542.png\" alt=\"\" class=\"wp-image-37\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-5-1024x542.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-5-300x159.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-5-768x407.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-5-1536x814.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-5.png 1907w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u6ca1\u6709\u70b9\u4f4d\u7ba1\u7406\u7684\u5165\u53e3\u65f6\u6dfb\u52a0\u6743\u9650\u65b9\u5f0f<\/p>\n\n\n\n<p>\u6743\u9650\u540d\u79f0 mes.machine.point_dic<\/p>\n\n\n\n<p>\u8def\u7531 machine.point_dic.index<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"538\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-6-1024x538.png\" alt=\"\" class=\"wp-image-38\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-6-1024x538.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-6-300x158.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-6-768x403.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-6-1536x807.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-6.png 1895w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u4f60\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5728\u6570\u636e\u5e93\u4e2d\u6dfb\u52a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"596\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-7-1024x596.png\" alt=\"\" class=\"wp-image-40\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-7-1024x596.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-7-300x175.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-7-768x447.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-7-1536x894.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-7-2048x1192.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"is-style-text-display is-style-text-display--6\">4.\u70b9\u4f4d\u6570\u636e\u751f\u6210<\/p>\n\n\n\n<p>\u53ef\u4ee5\u624b\u52a8\u5728device_parameter_points \u8868\u91cc\u9762\u6dfb\u52a0\u6570\u636e\uff0c\u5728\u8bbe\u5907\u5b9e\u65f6\u6570\u636e\u770b\u677f\u91cc\u9762\uff0c\u540c\u4e00\u8bbe\u5907\u4e2d\uff0c\u540c\u4e00\u70b9\u4f4d\u53d6\u7684\u662f\u4ed6\u6700\u540e\u4e00\u6761\u4e5f\u5c31\u662f\u6700\u65b0\u7684\u4e00\u6761\u6570\u636e<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"599\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-8-1024x599.png\" alt=\"\" class=\"wp-image-42\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-8-1024x599.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-8-300x176.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-8-768x449.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-8-1536x899.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-8-2048x1198.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u8fd9\u4e2a\u4e5f\u662f\u4e00\u6837\uff0c\u5148\u627e\u5230\u4f60\u8981\u9020\u6570\u636e\u7684\u90a3\u53f0\u8bbe\u5907\u7684machine_id <\/p>\n\n\n\n<p>\u7136\u540e\u5c31\u662f \u70b9\u4f4d\u540dpoint_name  \u6700\u540e\u5c31\u662f \u70b9\u4f4d\u6570\u636epoint_value<\/p>\n\n\n\n<p>\u5176\u4ed6\u7684\u53ef\u586b\u53ef\u4e0d\u586b<\/p>\n\n\n\n<p>\u4e0a\u9762\u662f\u624b\u52a8\u9020\u6570\u636e\u7684\u65b9\u6cd5\uff0c\u4e0b\u9762\u662f\u6279\u91cf\u9020\u6570\u636e\u7684\u65b9\u6cd5<\/p>\n\n\n\n<p>\u9700\u8981\u6267\u884csql<\/p>\n\n\n\n<p>\u7b2c\u4e00\u4e2a \u7528\u4e0e\u5904\u7406\u6d6e\u70b9\u578b\u6570\u636e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DEFINER=`root`@`%` PROCEDURE `generate_device_data_precision_float`(\n    IN p_machine_id INT,\n    IN p_point_name VARCHAR(100),\n    IN p_base_value DECIMAL(10,2),\n    IN p_float_range DECIMAL(10,2),\n    IN p_start_datetime DATETIME,\n    IN p_end_datetime DATETIME\n)\nBEGIN\n    DECLARE v_current_date DATE;\n    DECLARE v_days_count INT DEFAULT 0;\n    DECLARE v_day_index INT DEFAULT 0;\n    DECLARE v_record_index INT;\n    DECLARE v_random_datetime DATETIME;\n    DECLARE v_next_id BIGINT;\n    DECLARE v_random_seconds INT;\n    DECLARE v_random_value DECIMAL(10,2);\n    DECLARE v_min_value DECIMAL(10,2);\n    DECLARE v_max_value DECIMAL(10,2);\n    DECLARE v_start_date DATE;\n    DECLARE v_end_date DATE;\n    DECLARE v_start_seconds INT;\n    DECLARE v_end_seconds INT;\n    DECLARE v_total_seconds INT;\n    DECLARE v_total_records INT DEFAULT 0;\n    \n    -- \u83b7\u53d6\u4e0b\u4e00\u4e2a\u53ef\u7528\u7684ID\n    SELECT COALESCE(MAX(id), 0) + 1 INTO v_next_id FROM device_parameter_points;\n    \n    -- \u8ba1\u7b97\u6570\u503c\u8303\u56f4\n    SET v_min_value = p_base_value;\n    SET v_max_value = p_base_value + p_float_range;\n    \n    -- \u63d0\u53d6\u65e5\u671f\u90e8\u5206\u548c\u79d2\u6570\u90e8\u5206\n    SET v_start_date = DATE(p_start_datetime);\n    SET v_end_date = DATE(p_end_datetime);\n    SET v_start_seconds = TIME_TO_SEC(TIME(p_start_datetime));\n    SET v_end_seconds = TIME_TO_SEC(TIME(p_end_datetime));\n    \n    -- \u8ba1\u7b97\u603b\u5929\u6570\n    SET v_days_count = DATEDIFF(v_end_date, v_start_date);\n    \n    -- \u4e3b\u5faa\u73af\uff1a\u904d\u5386\u6bcf\u4e00\u5929\n    WHILE v_day_index &lt;= v_days_count DO\n        SET v_current_date = DATE_ADD(v_start_date, INTERVAL v_day_index DAY);\n        SET v_record_index = 1;\n        \n        -- \u5185\u5faa\u73af\uff1a\u6bcf\u5929\u751f\u621050\u6761\u8bb0\u5f55\n        WHILE v_record_index &lt;= 50 DO\n            -- \u5904\u7406\u7b2c\u4e00\u5929\u548c\u6700\u540e\u4e00\u5929\u7684\u8fb9\u754c\u65f6\u95f4\n            IF v_day_index = 0 THEN\n                -- \u7b2c\u4e00\u5929\uff1a\u4ece\u6307\u5b9a\u7684\u5f00\u59cb\u65f6\u95f4\u523023:59:59\n                SET v_total_seconds = 86400 - v_start_seconds;\n                IF v_total_seconds &gt; 0 THEN\n                    SET v_random_seconds = v_start_seconds + FLOOR(RAND() * v_total_seconds);\n                ELSE\n                    SET v_random_seconds = v_start_seconds;\n                END IF;\n            ELSEIF v_day_index = v_days_count THEN\n                -- \u6700\u540e\u4e00\u5929\uff1a\u4ece00:00:00\u5230\u6307\u5b9a\u7684\u7ed3\u675f\u65f6\u95f4\n                IF v_end_seconds &gt; 0 THEN\n                    SET v_random_seconds = FLOOR(RAND() * v_end_seconds);\n                ELSE\n                    SET v_random_seconds = 0;\n                END IF;\n            ELSE\n                -- \u4e2d\u95f4\u5929\u6570\uff1a\u5168\u592924\u5c0f\u65f6\n                SET v_random_seconds = FLOOR(RAND() * 86400);\n            END IF;\n            \n            -- \u751f\u6210\u968f\u673a\u65f6\u95f4\n            SET v_random_datetime = TIMESTAMPADD(SECOND, v_random_seconds, v_current_date);\n            \n            -- \u786e\u4fdd\u65f6\u95f4\u5728\u6307\u5b9a\u8303\u56f4\u5185\uff08\u8fb9\u754c\u68c0\u67e5\uff09\n            IF v_random_datetime &gt;= p_start_datetime AND v_random_datetime &lt;= p_end_datetime THEN\n                -- \u751f\u6210\u968f\u673a\u6570\u503c\uff08\u5728\u57fa\u7840\u503c\u5230\u57fa\u7840\u503c+\u6d6e\u52a8\u8303\u56f4\u5185\uff09\n                SET v_random_value = p_base_value + (RAND() * p_float_range);\n                \n                -- \u63d2\u5165\u6570\u636e\n                INSERT INTO device_parameter_points (\n                    id,\n                    machine_id, \n                    point_name, \n                    point_value, \n                    stamp, \n                    unit, \n                    created_at, \n                    updated_at\n                ) VALUES (\n                    v_next_id,\n                    p_machine_id, \n                    p_point_name, \n                    v_random_value,     -- \u4f7f\u7528\u968f\u673a\u751f\u6210\u7684\u503c\n                    v_random_datetime,  -- stamp\u5b57\u6bb5\u4f7f\u7528\u968f\u673a\u751f\u6210\u7684\u65f6\u95f4\n                    '', \n                    v_random_datetime,  -- created_at\u4e5f\u4f7f\u7528\u76f8\u540c\u7684\u65f6\u95f4\u6233\n                    v_random_datetime   -- updated_at\u4e5f\u4f7f\u7528\u76f8\u540c\u7684\u65f6\u95f4\u6233\n                );\n                \n                SET v_next_id = v_next_id + 1;\n                SET v_record_index = v_record_index + 1;\n                SET v_total_records = v_total_records + 1;\n            END IF;\n        END WHILE;\n        \n        SET v_day_index = v_day_index + 1;\n    END WHILE;\n    \n    -- \u8fd4\u56de\u6210\u529f\u4fe1\u606f\n    SELECT CONCAT(\n        '\u6210\u529f\u4e3a\u673a\u5668 ', p_machine_id, \n        ' \u7684\u6570\u636e\u70b9 ''', p_point_name, \n        ''' \u63d2\u5165\u4e86 ', v_total_records, \n        ' \u6761\u8bb0\u5f55\uff0c', \n        '\u57fa\u7840\u503c: ', p_base_value, \n        ', \u6d6e\u52a8\u8303\u56f4: +', p_float_range,\n        ', \u6570\u503c\u8303\u56f4: ', ROUND(v_min_value, 2), ' - ', ROUND(v_max_value, 2),\n        ', \u65f6\u95f4\u8303\u56f4: ', \n        DATE_FORMAT(p_start_datetime, '%Y-%m-%d %H:%i:%s'), \n        ' \u5230 ', \n        DATE_FORMAT(p_end_datetime, '%Y-%m-%d %H:%i:%s')\n    ) AS result;\n    \nEND<\/code><\/pre>\n\n\n\n<p>\u7b2c\u4e8c\u4e2a\u7528\u4e0e\u5904\u7406\u6574\u5f62\u6570\u636e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DEFINER=`root`@`%` PROCEDURE `generate_device_data_precision_int`(\n    IN p_machine_id INT,\n    IN p_point_name VARCHAR(100),\n    IN p_base_value INT,\n    IN p_float_range INT,\n    IN p_start_datetime DATETIME,\n    IN p_end_datetime DATETIME\n)\nBEGIN\n    DECLARE v_current_date DATE;\n    DECLARE v_days_count INT DEFAULT 0;\n    DECLARE v_day_index INT DEFAULT 0;\n    DECLARE v_record_index INT;\n    DECLARE v_random_datetime DATETIME;\n    DECLARE v_next_id BIGINT;\n    DECLARE v_random_seconds INT;\n    DECLARE v_random_value INT;\n    DECLARE v_min_value INT;\n    DECLARE v_max_value INT;\n    DECLARE v_start_date DATE;\n    DECLARE v_end_date DATE;\n    DECLARE v_start_seconds INT;\n    DECLARE v_end_seconds INT;\n    DECLARE v_total_seconds INT;\n    DECLARE v_total_records INT DEFAULT 0;\n    \n    -- \u83b7\u53d6\u4e0b\u4e00\u4e2a\u53ef\u7528\u7684ID\n    SELECT COALESCE(MAX(id), 0) + 1 INTO v_next_id FROM device_parameter_points;\n    \n    -- \u8ba1\u7b97\u6570\u503c\u8303\u56f4\n    SET v_min_value = p_base_value;\n    SET v_max_value = p_base_value + p_float_range;\n    \n    -- \u63d0\u53d6\u65e5\u671f\u90e8\u5206\u548c\u79d2\u6570\u90e8\u5206\n    SET v_start_date = DATE(p_start_datetime);\n    SET v_end_date = DATE(p_end_datetime);\n    SET v_start_seconds = TIME_TO_SEC(TIME(p_start_datetime));\n    SET v_end_seconds = TIME_TO_SEC(TIME(p_end_datetime));\n    \n    -- \u8ba1\u7b97\u603b\u5929\u6570\n    SET v_days_count = DATEDIFF(v_end_date, v_start_date);\n    \n    -- \u4e3b\u5faa\u73af\uff1a\u904d\u5386\u6bcf\u4e00\u5929\n    WHILE v_day_index &lt;= v_days_count DO\n        SET v_current_date = DATE_ADD(v_start_date, INTERVAL v_day_index DAY);\n        SET v_record_index = 1;\n        \n        -- \u5185\u5faa\u73af\uff1a\u6bcf\u5929\u751f\u621050\u6761\u8bb0\u5f55\n        WHILE v_record_index &lt;= 50 DO\n            -- \u5904\u7406\u7b2c\u4e00\u5929\u548c\u6700\u540e\u4e00\u5929\u7684\u8fb9\u754c\u65f6\u95f4\n            IF v_day_index = 0 THEN\n                -- \u7b2c\u4e00\u5929\uff1a\u4ece\u6307\u5b9a\u7684\u5f00\u59cb\u65f6\u95f4\u523023:59:59\n                SET v_total_seconds = 86400 - v_start_seconds;\n                IF v_total_seconds &gt; 0 THEN\n                    SET v_random_seconds = v_start_seconds + FLOOR(RAND() * v_total_seconds);\n                ELSE\n                    SET v_random_seconds = v_start_seconds;\n                END IF;\n            ELSEIF v_day_index = v_days_count THEN\n                -- \u6700\u540e\u4e00\u5929\uff1a\u4ece00:00:00\u5230\u6307\u5b9a\u7684\u7ed3\u675f\u65f6\u95f4\n                IF v_end_seconds &gt; 0 THEN\n                    SET v_random_seconds = FLOOR(RAND() * v_end_seconds);\n                ELSE\n                    SET v_random_seconds = 0;\n                END IF;\n            ELSE\n                -- \u4e2d\u95f4\u5929\u6570\uff1a\u5168\u592924\u5c0f\u65f6\n                SET v_random_seconds = FLOOR(RAND() * 86400);\n            END IF;\n            \n            -- \u751f\u6210\u968f\u673a\u65f6\u95f4\n            SET v_random_datetime = TIMESTAMPADD(SECOND, v_random_seconds, v_current_date);\n            \n            -- \u786e\u4fdd\u65f6\u95f4\u5728\u6307\u5b9a\u8303\u56f4\u5185\uff08\u8fb9\u754c\u68c0\u67e5\uff09\n            IF v_random_datetime &gt;= p_start_datetime AND v_random_datetime &lt;= p_end_datetime THEN\n                -- \u751f\u6210\u968f\u673a\u6570\u503c\uff08\u5728\u57fa\u7840\u503c\u5230\u57fa\u7840\u503c+\u6d6e\u52a8\u8303\u56f4\u5185\uff09\n                SET v_random_value = p_base_value + FLOOR(RAND() * p_float_range);\n                \n                -- \u63d2\u5165\u6570\u636e\n                INSERT INTO device_parameter_points (\n                    id,\n                    machine_id, \n                    point_name, \n                    point_value, \n                    stamp, \n                    unit, \n                    created_at, \n                    updated_at\n                ) VALUES (\n                    v_next_id,\n                    p_machine_id, \n                    p_point_name, \n                    v_random_value,     -- \u4f7f\u7528\u968f\u673a\u751f\u6210\u7684\u503c\n                    v_random_datetime,  -- stamp\u5b57\u6bb5\u4f7f\u7528\u968f\u673a\u751f\u6210\u7684\u65f6\u95f4\n                    '', \n                    v_random_datetime,  -- created_at\u4e5f\u4f7f\u7528\u76f8\u540c\u7684\u65f6\u95f4\u6233\n                    v_random_datetime   -- updated_at\u4e5f\u4f7f\u7528\u76f8\u540c\u7684\u65f6\u95f4\u6233\n                );\n                \n                SET v_next_id = v_next_id + 1;\n                SET v_record_index = v_record_index + 1;\n                SET v_total_records = v_total_records + 1;\n            END IF;\n        END WHILE;\n        \n        SET v_day_index = v_day_index + 1;\n    END WHILE;\n    \n    -- \u8fd4\u56de\u6210\u529f\u4fe1\u606f\n    SELECT CONCAT(\n        '\u6210\u529f\u4e3a\u673a\u5668 ', p_machine_id, \n        ' \u7684\u6570\u636e\u70b9 ''', p_point_name, \n        ''' \u63d2\u5165\u4e86 ', v_total_records, \n        ' \u6761\u8bb0\u5f55\uff0c', \n        '\u57fa\u7840\u503c: ', p_base_value, \n        ', \u6d6e\u52a8\u8303\u56f4: +', p_float_range,\n        ', \u6570\u503c\u8303\u56f4: ', ROUND(v_min_value, 2), ' - ', ROUND(v_max_value, 2),\n        ', \u65f6\u95f4\u8303\u56f4: ', \n        DATE_FORMAT(p_start_datetime, '%Y-%m-%d %H:%i:%s'), \n        ' \u5230 ', \n        DATE_FORMAT(p_end_datetime, '%Y-%m-%d %H:%i:%s')\n    ) AS result;\n    \nEND<\/code><\/pre>\n\n\n\n<p>\u6267\u884c\u65b9\u6cd5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- \u8bbe\u5907id 1\uff1a\u70b9\u4f4dDI2 \uff1a\u503c35.0\uff0c\u6d6e\u52a85.0\uff0c\u6570\u503c\u8303\u56f435.0-40.0\uff0c\u8d77\u6b62\u65f6\u95f4,\u91c7\u96c6\u7684\u503c\u6709\u5c0f\u6570\n\u8bbe\u5907id \u5c31\u662fmachine\u8868\u7684machine_id\n\nCALL generate_device_data_precision_float(1, 'DI2', 35.0, 5.0, '2025-07-25 08:30:00', '2025-08-25 12:45:00');\n\u8fd9\u4ee3\u8868\u7740\u4f60\u6279\u91cf\u751f\u6210\u7684\u662f\u8bbe\u5907id\u4e3a1\uff0c\u70b9\u4f4d\u4e3aDI2 \u4e14\u5e26\u6709\u5c0f\u6570\u7684\u6570\u636e\u65e5\u671f\u662f2025-07-25 08:30:00\u5230 2025-08-25 12:45:00\uff0c\u800c\u4e14\u503c\u4e0d\u4f1a\u4f4e\u4e8e35.0 \u6700\u9ad8\u4e0d\u8d85\u8fc740.0   \u5982\u679c\u4f60\u60f3\u4fdd\u6301\u8fd9\u4e2a\u503c\u4e00\u76f4\u662f35.0 \u90a3\u4e48\u53ef\u4ee5\u628a\u6d6e\u52a8\u503c5.0\u6539\u62100.0 \u8fd9\u6837\u751f\u6210\u7684\u6570\u636e\u5c31\u4e00\u76f4\u662f35.0\n\nCALL generate_device_data_precision_float(1, 'DI2', 35.0, -5.0, '2025-07-25 08:30:00', '2025-08-25 12:45:00');\n\u8fd9\u4ee3\u8868\u7740\u4f60\u6279\u91cf\u751f\u6210\u7684\u662f\u5e26\u6709\u5c0f\u6570\u7684\u6570\u636e\uff0c\u800c\u4e14\u503c\u4e0d\u4f1a\u4f4e\u4e8e30.0 \u6700\u9ad8\u4e0d\u8d85\u8fc735.0\n\n\n\n-- \u8bbe\u5907id 2\uff1a\u70b9\u4f4dDI2 \uff1a \u503c10\uff0c\u6d6e\u52a85\uff0c\u6570\u503c\u8303\u56f410-15\uff0c\u8d77\u6b62\u65f6\u95f4,\u91c7\u96c6\u7684\u503c\u4e3a\u6574\u578b\n\nCALL generate_device_data_precision_int(2, 'DI2', 10, 5, '2025-07-25 08:30:00', '2025-08-25 12:45:00');\n\u8fd9\u4ee3\u8868\u4f60\u751f\u6210\u7684\u662f\u8bbe\u5907id\u4e3a2  \u70b9\u4f4d\u4e3aDI2  \u6700\u4f4e\u503c\u4e3a \u6574\u5f6210 \u6700\u9ad8\u503c\u4e3a\u6574\u5f6215\u7684\u6570\u636e\n\nCALL generate_device_data_precision_int(2, 'DI2', 10, -5, '2025-07-25 08:30:00', '2025-08-25 12:45:00');\n\u8fd9\u4ee3\u8868\u4f60\u751f\u6210\u7684\u662f\u8bbe\u5907id\u4e3a2  \u70b9\u4f4d\u4e3aDI2  \u6700\u4f4e\u503c\u4e3a \u6574\u5f625 \u6700\u9ad8\u503c\u4e3a\u6574\u5f6210\u7684\u6570\u636e<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u662f\u672c\u5730\u6267\u884c\u7684\u65f6\u5019\u53d1\u73b0\u6ca1\u6743\u9650\u53ef\u4ee5\u4fee\u6539\u4e00\u4e0b\u6743\u9650\u5c06\u4e3b\u673a\u6539\u6210%<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"213\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-10-1024x213.png\" alt=\"\" class=\"wp-image-61\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-10-1024x213.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-10-300x62.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-10-768x160.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-10-1536x319.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-10.png 1539w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"712\" src=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-9-1024x712.png\" alt=\"\" class=\"wp-image-60\" srcset=\"https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-9-1024x712.png 1024w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-9-300x209.png 300w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-9-768x534.png 768w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-9-1536x1068.png 1536w, https:\/\/wiki.tengwangyun.com\/wp-content\/uploads\/2025\/10\/image-9.png 1859w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6574\u4e2a\u6570\u91c7\u6570\u636e\u6dfb\u52a0\u7684\u95ed\u73af\u5982\u4e0b \u6570\u91c7\u6570\u636e\u6dfb\u52a0\u7684\u524d\u63d0\u662f<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-16","post","type-post","status-publish","format-standard","hentry","category-twy"],"_links":{"self":[{"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=\/wp\/v2\/posts\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16"}],"version-history":[{"count":38,"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=\/wp\/v2\/posts\/16\/revisions"}],"predecessor-version":[{"id":106,"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=\/wp\/v2\/posts\/16\/revisions\/106"}],"wp:attachment":[{"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wiki.tengwangyun.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}