diff --git a/sql/mysql/iotdata.sql b/sql/mysql/iotdata.sql new file mode 100644 index 0000000000..9717dbf894 --- /dev/null +++ b/sql/mysql/iotdata.sql @@ -0,0 +1,257 @@ + +CREATE TABLE `iot_iot_organization` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '组织id', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '组织名称', + `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父组织id', + `sort` int NOT NULL DEFAULT '0' COMMENT '显示顺序', + `worker_user_id` bigint DEFAULT NULL COMMENT '负责人/工人', + `org_id` bigint DEFAULT NULL COMMENT '绑定工位id', + + `status` tinyint NOT NULL COMMENT '组织状态', + `org_class` tinyint NOT NULL COMMENT '组织等级', + `machine_type` tinyint NOT NULL COMMENT '机台类型', + `device_type` tinyint NOT NULL COMMENT '设备类型', + `is_component` tinyint NOT NULL COMMENT '是否关键件', + + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='IOT组织表'; + + +CREATE TABLE `iot_device` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `device_config_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备配置id', + `device_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备编号', + `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备名称', + `device_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备类型', + + `siemens_series` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Siemens系列(S7-300、S7-1500)', + `siemens_connect_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '连接参数(波特率,数据位,停止位,校验位 例如:9600,8,1,N)', + `read_cron_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读取任务方式(0无,1有)', + `read_repeat_value` int DEFAULT NULL COMMENT '读取任务时间间隔', + `read_repeat_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读取任务时间间隔单位', + `read_cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读取任务时间表达式', + `write_cron_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写入任务时间间隔', + `write_repeat_value` int DEFAULT NULL COMMENT '写入任务时间间隔', + `write_repeat_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写入任务时间间隔单位', + `write_cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写入任务时间表达式', + `local_persistent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否持久化(0不持久化,1持久化)', + `upload_rate` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上传方式(1实时,2自定义)', + `rate_count` int DEFAULT NULL COMMENT '上传频率', + + `modbus_protocol` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'modbus协议类型(serial-rtu)', + `modbus_pattern` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'modbus模式(client)', + `port_name` varchar(225) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'modbus串口号', + `modbus_connect_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '连接参数(波特率,数据位,停止位,校验位 例如:9600,8,1,N)', + `modbus_read_addr_gap` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读地址是否连续(0否,1是)', + + `is_upload` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否已下发(0下,1没下)', + `gateway_id` bigint NOT NULL COMMENT '网关id', + `org_id` bigint NOT NULL COMMENT '组织设备id', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='物联设备表'; + +CREATE TABLE `iot_device_attribute` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `attribute_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地址编码', + `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址', + `attribute_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地址名称', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址描述', + `address_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址类型', + `address_offset` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址偏移', + `address2_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址2类型', + `address2_offset` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址2偏移', + `group_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属组', + `group_id` int DEFAULT NULL COMMENT '所属组id', + `security_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '安全类别', + `io_status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读写状态', + `is_linear_transfer` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否线性换算(0是,1否)', + `data_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数据类型', + `unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单位', + `in_min_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输入最小值', + `in_max_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输入最大值', + `out_min_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输出最小值', + `out_max_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输出最大值', + `out_data_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输出数据类型', + + `siemens_field_precision` int DEFAULT '0' COMMENT '精度', + `modbus_slave_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '站号', + `modbus_field_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '寄存器地址', + `modbus_address_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '寄存器类型', + `modbus_field_size` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '个数', + `modbus_field_precision` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '缩放因子(默认值为1,大于0的小数', + `modbus_field_order` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字节顺序', + `dept_id` int DEFAULT NULL COMMENT '组织机构', + `dept_name` varchar(255) DEFAULT NULL COMMENT '组织名称', + `source_data_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'mqtt进制类型binary,octal,hexadecimal,decimal', + `transfer_data_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转化进制类型binary,octal,hexadecimal,decimal', + `cal_addresses` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址合并计算公式', + `factor` varchar(32) DEFAULT NULL COMMENT '系数', + + + `gateway_id` bigint NOT NULL COMMENT '网关id', + `device_id` bigint NOT NULL COMMENT '设备id', + `org_id` bigint NOT NULL COMMENT '组织设备id', + + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='设备属性表'; + + + +CREATE TABLE `iot_formula` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式名称', + `formula_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式编号', + `formula` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式', + `result_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结果类型(产量,电耗,浆耗,水耗,气耗,参数)', + + `data_unit` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单位', + + `machine_id` bigint NOT NULL COMMENT '机台ID', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='计算公式'; + +CREATE TABLE `iot_formula_detail` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `formula_id` bigint NOT NULL COMMENT '计算公式ID', + `formula_code` varchar(255) DEFAULT NULL COMMENT '公式编号', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变量名称', + `device_id` bigint NOT NULL COMMENT '设备ID', + `attribute_id` bigint NOT NULL COMMENT '设备属性ID', + + `attribute_name` varchar(255) DEFAULT NULL, + `address` varchar(64) DEFAULT NULL COMMENT '地址', + + `demo_value` varchar(64) DEFAULT NULL COMMENT '示例值', + `sum_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '累积量类型sum:累加,max-min:最大值-最小值', + `sum_range` varchar(64) DEFAULT NULL COMMENT '计算范围,为空则不计算day:当天,week:当周,month:当月', + + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='计算公式明细'; + +CREATE TABLE `iot_gateway` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `admin_ip` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '管理地址', + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '管理账号', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '管理密码', + `gateway_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '网关编码', + `gateway_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '网关名字', + `topic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '订阅主题', + + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='网关表'; + +CREATE TABLE `iot_kanban` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '编码', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '标题', + `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '缩略图', + + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='物联看板'; + +CREATE TABLE `iot_mqtt_record` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `machine_id` bigint NOT NULL COMMENT '机台ID', + `machine_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '机台', + `device_data_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间', + `device_data` json DEFAULT NULL COMMENT '数据', + `device_id` bigint NOT NULL COMMENT '设备id', + `device_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备编码', + `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备名称', + `worker_id` bigint DEFAULT NULL COMMENT '用户id', + `worker_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户', + `gateway_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '网关', + + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='数采记录'; + +CREATE TABLE `iot_formula_record` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `machine_id` bigint NOT NULL COMMENT '机台ID', + `machine_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '机台', + `worker_id` bigint DEFAULT NULL COMMENT '用户id', + `worker_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户', + `result_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型', + `formula_id` bigint NOT NULL COMMENT '公式ID', + `formula_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式编号', + `data_value` decimal(24, 6) DEFAULT NULL COMMENT '值', + `data_unit` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单位', + + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='变量记录'; diff --git a/sql/mysql/mesdata.sql b/sql/mysql/mesdata.sql index 273f021ad1..e018706014 100644 --- a/sql/mysql/mesdata.sql +++ b/sql/mysql/mesdata.sql @@ -83,215 +83,6 @@ CREATE TABLE `mes_produce_report_detail` PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='生产报工明细'; -CREATE TABLE `iot_iot_organization` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '组织id', - `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '组织名称', - `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父组织id', - `sort` int NOT NULL DEFAULT '0' COMMENT '显示顺序', - `worker_user_id` bigint DEFAULT NULL COMMENT '负责人/工人', - `org_id` bigint DEFAULT NULL COMMENT '绑定工位id', - - `status` tinyint NOT NULL COMMENT '组织状态', - `org_class` tinyint NOT NULL COMMENT '组织等级', - `machine_type` tinyint NOT NULL COMMENT '机台类型', - `device_type` tinyint NOT NULL COMMENT '设备类型', - `is_component` tinyint NOT NULL COMMENT '是否关键件', - - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='IOT组织表'; - - -CREATE TABLE `iot_device` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `device_config_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备配置id', - `device_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备编号', - `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备名称', - `device_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备类型', - - `siemens_series` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Siemens系列(S7-300、S7-1500)', - `siemens_connect_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '连接参数(波特率,数据位,停止位,校验位 例如:9600,8,1,N)', - `read_cron_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读取任务方式(0无,1有)', - `read_repeat_value` int DEFAULT NULL COMMENT '读取任务时间间隔', - `read_repeat_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读取任务时间间隔单位', - `read_cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读取任务时间表达式', - `write_cron_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写入任务时间间隔', - `write_repeat_value` int DEFAULT NULL COMMENT '写入任务时间间隔', - `write_repeat_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写入任务时间间隔单位', - `write_cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写入任务时间表达式', - `local_persistent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否持久化(0不持久化,1持久化)', - `upload_rate` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上传方式(1实时,2自定义)', - `rate_count` int DEFAULT NULL COMMENT '上传频率', - - `modbus_protocol` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'modbus协议类型(serial-rtu)', - `modbus_pattern` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'modbus模式(client)', - `port_name` varchar(225) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'modbus串口号', - `modbus_connect_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '连接参数(波特率,数据位,停止位,校验位 例如:9600,8,1,N)', - `modbus_read_addr_gap` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读地址是否连续(0否,1是)', - - `is_upload` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否已下发(0下,1没下)', - `gateway_id` bigint NOT NULL COMMENT '网关id', - `org_id` bigint NOT NULL COMMENT '组织设备id', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', - `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint DEFAULT NULL COMMENT '租户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='物联设备表'; - -CREATE TABLE `iot_device_attribute` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `attribute_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地址编码', - `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址', - `attribute_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地址名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址描述', - `address_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址类型', - `address_offset` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址偏移', - `address2_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址2类型', - `address2_offset` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址2偏移', - `group_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属组', - `group_id` int DEFAULT NULL COMMENT '所属组id', - `security_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '安全类别', - `io_status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读写状态', - `is_linear_transfer` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否线性换算(0是,1否)', - `data_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数据类型', - `unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单位', - `in_min_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输入最小值', - `in_max_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输入最大值', - `out_min_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输出最小值', - `out_max_value` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输出最大值', - `out_data_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '输出数据类型', - - `siemens_field_precision` int DEFAULT '0' COMMENT '精度', - `modbus_slave_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '站号', - `modbus_field_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '寄存器地址', - `modbus_address_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '寄存器类型', - `modbus_field_size` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '个数', - `modbus_field_precision` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '缩放因子(默认值为1,大于0的小数', - `modbus_field_order` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字节顺序', - `dept_id` int DEFAULT NULL COMMENT '组织机构', - `dept_name` varchar(255) DEFAULT NULL COMMENT '组织名称', - `source_data_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'mqtt进制类型binary,octal,hexadecimal,decimal', - `transfer_data_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转化进制类型binary,octal,hexadecimal,decimal', - `cal_addresses` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址合并计算公式', - `factor` varchar(32) DEFAULT NULL COMMENT '系数', - - - `gateway_id` bigint NOT NULL COMMENT '网关id', - `device_id` bigint NOT NULL COMMENT '设备id', - `org_id` bigint NOT NULL COMMENT '组织设备id', - - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', - `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint DEFAULT NULL COMMENT '租户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='设备属性表'; - - - -CREATE TABLE `iot_formula` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式名称', - `formula_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式编号', - `formula` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公式', -`result_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结果类型(产量,电耗,浆耗,水耗,气耗,参数)', -`machine_id` bigint NOT NULL COMMENT '机台ID', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', - `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint DEFAULT NULL COMMENT '租户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='计算公式'; - -CREATE TABLE `iot_formula_detail` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `formula_id` bigint NOT NULL COMMENT '计算公式ID', - `formula_code` varchar(255) DEFAULT NULL COMMENT '公式编号', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变量名称', - `device_id` bigint NOT NULL COMMENT '设备ID', - `attribute_id` bigint NOT NULL COMMENT '设备属性ID', - - `attribute_name` varchar(255) DEFAULT NULL, - `address` varchar(64) DEFAULT NULL COMMENT '地址', - - `demo_value` varchar(64) DEFAULT NULL COMMENT '示例值', - `sum_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '累积量类型sum:累加,max-min:最大值-最小值', - `sum_range` varchar(64) DEFAULT NULL COMMENT '计算范围,为空则不计算day:当天,week:当周,month:当月', - - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', - `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint DEFAULT NULL COMMENT '租户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='计算公式明细'; - -CREATE TABLE `iot_gateway` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `admin_ip` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '管理地址', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '管理账号', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '管理密码', - `gateway_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '网关编码', - `gateway_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '网关名字', - `topic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '订阅主题', - - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', - `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint DEFAULT NULL COMMENT '租户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='网关表'; - -CREATE TABLE `iot_kanban` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '编码', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '标题', - `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '缩略图', - - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', - `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint DEFAULT NULL COMMENT '租户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='物联看板'; - CREATE TABLE `mes_machine_component` ( diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java index afbcc133ef..73a9aa6eeb 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java @@ -22,5 +22,7 @@ public interface ErrorCodeConstants { ErrorCode ORGANIZATION_PARENT_NOT_EXITS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); ErrorCode ORGANIZATION_PARENT_IS_CHILD = new ErrorCode(1_003_000_000, "GoView 项目不存在"); ErrorCode ORGANIZATION_NAME_DUPLICATE = new ErrorCode(1_003_000_000, "GoView 项目不存在"); + ErrorCode FORMULA_RECORD_NOT_EXISTS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); + ErrorCode MQTT_RECORD_NOT_EXISTS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/FormulaRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/FormulaRecordController.java new file mode 100644 index 0000000000..b3eddb7ef6 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/FormulaRecordController.java @@ -0,0 +1,96 @@ +package cn.iocoder.yudao.module.iot.controller.admin.formula; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.iot.controller.admin.formula.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.formula.FormulaRecordDO; +import cn.iocoder.yudao.module.iot.service.formula.FormulaRecordService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +@Tag(name = "管理后台 - 变量记录") +@RestController +@RequestMapping("/iot/formula-record") +@Validated +public class FormulaRecordController { + + @Resource + private FormulaRecordService formulaRecordService; + + @PostMapping("/create") + @Operation(summary = "创建变量记录") + @PreAuthorize("@ss.hasPermission('iot:formula-record:create')") + public CommonResult createFormulaRecord(@Valid @RequestBody FormulaRecordSaveReqVO createReqVO) { + return success(formulaRecordService.createFormulaRecord(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新变量记录") + @PreAuthorize("@ss.hasPermission('iot:formula-record:update')") + public CommonResult updateFormulaRecord(@Valid @RequestBody FormulaRecordSaveReqVO updateReqVO) { + formulaRecordService.updateFormulaRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除变量记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('iot:formula-record:delete')") + public CommonResult deleteFormulaRecord(@RequestParam("id") Long id) { + formulaRecordService.deleteFormulaRecord(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得变量记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('iot:formula-record:query')") + public CommonResult getFormulaRecord(@RequestParam("id") Long id) { + FormulaRecordDO formulaRecord = formulaRecordService.getFormulaRecord(id); + return success(BeanUtils.toBean(formulaRecord, FormulaRecordRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得变量记录分页") + @PreAuthorize("@ss.hasPermission('iot:formula-record:query')") + public CommonResult> getFormulaRecordPage(@Valid FormulaRecordPageReqVO pageReqVO) { + PageResult pageResult = formulaRecordService.getFormulaRecordPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, FormulaRecordRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出变量记录 Excel") + @PreAuthorize("@ss.hasPermission('iot:formula-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportFormulaRecordExcel(@Valid FormulaRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = formulaRecordService.getFormulaRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "变量记录.xls", "数据", FormulaRecordRespVO.class, + BeanUtils.toBean(list, FormulaRecordRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaPageReqVO.java index 7285bb28ae..e4fce5edd0 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaPageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaPageReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.iot.controller.admin.formula.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -26,6 +27,8 @@ public class FormulaPageReqVO extends PageParam { @Schema(description = "结果类型(产量,电耗,浆耗,水耗,气耗,参数)", example = "1") private String resultType; + @Schema(description = "单位") + private String dataUnit; @Schema(description = "机台ID", example = "12374") private Long machineId; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordPageReqVO.java new file mode 100644 index 0000000000..9be58ffc87 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordPageReqVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.iot.controller.admin.formula.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 变量记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FormulaRecordPageReqVO extends PageParam { + + @Schema(description = "机台", example = "李四") + private String machineName; + + @Schema(description = "用户", example = "李四") + private String workerName; + + @Schema(description = "类型", example = "2") + private String resultType; + + @Schema(description = "公式编号") + private String formulaCode; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + /** + * 采集时间 + */ + @Schema(description = "采集时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deviceDataTime; +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordRespVO.java new file mode 100644 index 0000000000..eba167214a --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordRespVO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.iot.controller.admin.formula.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 变量记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class FormulaRecordRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23175") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "机台", example = "李四") + @ExcelProperty("机台") + private String machineName; + + @Schema(description = "用户", example = "李四") + @ExcelProperty("用户") + private String workerName; + + @Schema(description = "类型", example = "2") + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat("mes_data_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String resultType; + + @Schema(description = "公式编号") + @ExcelProperty("公式编号") + private String formulaCode; + + @Schema(description = "值") + @ExcelProperty("值") + private BigDecimal dataValue; + + @Schema(description = "单位") + @ExcelProperty("单位") + private String dataUnit; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "机台ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25709") + @ExcelProperty("机台ID") + private Long machineId; + @Schema(description = "用户id", example = "3807") + @ExcelProperty("用户id") + private Long workerId; + @Schema(description = "公式ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24943") + @ExcelProperty("公式ID") + private Long formulaId; + /** + * 采集时间 + */ + @Schema(description = "采集时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("采集时间") + private LocalDateTime deviceDataTime; +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordSaveReqVO.java new file mode 100644 index 0000000000..541c15163b --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRecordSaveReqVO.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.iot.controller.admin.formula.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 变量记录新增/修改 Request VO") +@Data +public class FormulaRecordSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23175") + private Long id; + + @Schema(description = "机台ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25709") + @NotNull(message = "机台ID不能为空") + private Long machineId; + + @Schema(description = "机台", example = "李四") + private String machineName; + + @Schema(description = "用户id", example = "3807") + private Long workerId; + + @Schema(description = "用户", example = "李四") + private String workerName; + + @Schema(description = "类型", example = "2") + private String resultType; + + @Schema(description = "公式ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24943") + @NotNull(message = "公式ID不能为空") + private Long formulaId; + + @Schema(description = "公式编号") + private String formulaCode; + + @Schema(description = "值") + private BigDecimal dataValue; + + @Schema(description = "单位") + private String dataUnit; + /** + * 采集时间 + */ + @Schema(description = "采集时间") + private LocalDateTime deviceDataTime; +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRespVO.java index ea16cf2371..0c2b8c5f44 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaRespVO.java @@ -35,6 +35,9 @@ public class FormulaRespVO { @ExcelProperty(value = "结果类型(产量,电耗,浆耗,水耗,气耗,参数)", converter = DictConvert.class) @DictFormat("mes_data_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 private String resultType; + @Schema(description = "单位") + @ExcelProperty("单位") + private String dataUnit; @Schema(description = "机台ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12374") @ExcelProperty("机台ID") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaSaveReqVO.java index e1ab0e7ff2..a432e16b62 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/formula/vo/FormulaSaveReqVO.java @@ -23,6 +23,8 @@ public class FormulaSaveReqVO { @Schema(description = "结果类型(产量,电耗,浆耗,水耗,气耗,参数)", example = "1") private String resultType; + @Schema(description = "单位") + private String dataUnit; @Schema(description = "机台ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12374") @NotNull(message = "机台ID不能为空") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/MqttRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/MqttRecordController.java new file mode 100644 index 0000000000..700f1182d1 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/MqttRecordController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.iot.controller.admin.mqttrecord; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.mqttrecord.MqttRecordDO; +import cn.iocoder.yudao.module.iot.service.mqttrecord.MqttRecordService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +@Tag(name = "管理后台 - 数采记录") +@RestController +@RequestMapping("/iot/mqtt-record") +@Validated +public class MqttRecordController { + + @Resource + private MqttRecordService mqttRecordService; + + @PostMapping("/create") + @Operation(summary = "创建数采记录") + @PreAuthorize("@ss.hasPermission('iot:mqtt-record:create')") + public CommonResult createMqttRecord(@Valid @RequestBody MqttRecordSaveReqVO createReqVO) { + return success(mqttRecordService.createMqttRecord(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新数采记录") + @PreAuthorize("@ss.hasPermission('iot:mqtt-record:update')") + public CommonResult updateMqttRecord(@Valid @RequestBody MqttRecordSaveReqVO updateReqVO) { + mqttRecordService.updateMqttRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除数采记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('iot:mqtt-record:delete')") + public CommonResult deleteMqttRecord(@RequestParam("id") Long id) { + mqttRecordService.deleteMqttRecord(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得数采记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('iot:mqtt-record:query')") + public CommonResult getMqttRecord(@RequestParam("id") Long id) { + MqttRecordDO mqttRecord = mqttRecordService.getMqttRecord(id); + return success(BeanUtils.toBean(mqttRecord, MqttRecordRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得数采记录分页") + @PreAuthorize("@ss.hasPermission('iot:mqtt-record:query')") + public CommonResult> getMqttRecordPage(@Valid MqttRecordPageReqVO pageReqVO) { + PageResult pageResult = mqttRecordService.getMqttRecordPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MqttRecordRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出数采记录 Excel") + @PreAuthorize("@ss.hasPermission('iot:mqtt-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMqttRecordExcel(@Valid MqttRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = mqttRecordService.getMqttRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "数采记录.xls", "数据", MqttRecordRespVO.class, + BeanUtils.toBean(list, MqttRecordRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordPageReqVO.java new file mode 100644 index 0000000000..82f0780c6f --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordPageReqVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 数采记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MqttRecordPageReqVO extends PageParam { + + @Schema(description = "机台", example = "赵六") + private String machineName; + + @Schema(description = "采集时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deviceDataTime; + + @Schema(description = "数据") + private String deviceData; + + @Schema(description = "设备编码") + private String deviceCode; + + @Schema(description = "设备名称", example = "张三") + private String deviceName; + + @Schema(description = "用户", example = "张三") + private String workerName; + + @Schema(description = "网关") + private String gatewayCode; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordRespVO.java new file mode 100644 index 0000000000..3993f88d4b --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordRespVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 数采记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MqttRecordRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22946") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "机台", example = "赵六") + @ExcelProperty("机台") + private String machineName; + + @Schema(description = "采集时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("采集时间") + private LocalDateTime deviceDataTime; + + @Schema(description = "数据") + @ExcelProperty("数据") + private String deviceData; + + @Schema(description = "设备编码") + @ExcelProperty("设备编码") + private String deviceCode; + + @Schema(description = "设备名称", example = "张三") + @ExcelProperty("设备名称") + private String deviceName; + + @Schema(description = "用户", example = "张三") + @ExcelProperty("用户") + private String workerName; + + @Schema(description = "网关") + @ExcelProperty("网关") + private String gatewayCode; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordSaveReqVO.java new file mode 100644 index 0000000000..a275a2a640 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttrecord/vo/MqttRecordSaveReqVO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 数采记录新增/修改 Request VO") +@Data +public class MqttRecordSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22946") + private Long id; + + @Schema(description = "机台ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3561") + @NotNull(message = "机台ID不能为空") + private Long machineId; + + @Schema(description = "机台", example = "赵六") + private String machineName; + + @Schema(description = "采集时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "采集时间不能为空") + private LocalDateTime deviceDataTime; + + @Schema(description = "数据") + private String deviceData; + + @Schema(description = "设备id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31306") + @NotNull(message = "设备id不能为空") + private Long deviceId; + + @Schema(description = "设备编码") + private String deviceCode; + + @Schema(description = "设备名称", example = "张三") + private String deviceName; + + @Schema(description = "用户id", example = "8427") + private Long workerId; + + @Schema(description = "用户", example = "张三") + private String workerName; + + @Schema(description = "网关") + private String gatewayCode; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaDO.java index 390395092f..486c6a1b8c 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaDO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.formula; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -45,6 +46,8 @@ public class FormulaDO extends BaseDO { * 枚举 {@link TODO mes_data_type 对应的类} */ private String resultType; + //@Schema(description = "单位") + private String dataUnit; /** * 机台ID */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaRecordDO.java new file mode 100644 index 0000000000..85a1f50e1b --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/formula/FormulaRecordDO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.iot.dal.dataobject.formula; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 变量记录 DO + * + * @author 内蒙必硕 + */ +@TableName("iot_formula_record") +@KeySequence("iot_formula_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FormulaRecordDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 机台ID + */ + private Long machineId; + /** + * 机台 + */ + private String machineName; + /** + * 用户id + */ + private Long workerId; + /** + * 用户 + */ + private String workerName; + /** + * 类型 + * + * 枚举 {@link TODO mes_data_type 对应的类} + */ + private String resultType; + /** + * 公式ID + */ + private Long formulaId; + /** + * 公式编号 + */ + private String formulaCode; + /** + * 值 + */ + private BigDecimal dataValue; + /** + * 单位 + */ + private String dataUnit; + /** + * 采集时间 + */ + private LocalDateTime deviceDataTime; +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/mqttrecord/MqttRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/mqttrecord/MqttRecordDO.java new file mode 100644 index 0000000000..ccefccdbbc --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/mqttrecord/MqttRecordDO.java @@ -0,0 +1,72 @@ +package cn.iocoder.yudao.module.iot.dal.dataobject.mqttrecord; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 数采记录 DO + * + * @author 内蒙必硕 + */ +@TableName("iot_mqtt_record") +@KeySequence("iot_mqtt_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MqttRecordDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 机台ID + */ + private Long machineId; + /** + * 机台 + */ + private String machineName; + /** + * 采集时间 + */ + private LocalDateTime deviceDataTime; + /** + * 数据 + */ + private String deviceData; + /** + * 设备id + */ + private Long deviceId; + /** + * 设备编码 + */ + private String deviceCode; + /** + * 设备名称 + */ + private String deviceName; + /** + * 用户id + */ + private Long workerId; + /** + * 用户 + */ + private String workerName; + /** + * 网关 + */ + private String gatewayCode; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/formula/FormulaRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/formula/FormulaRecordMapper.java new file mode 100644 index 0000000000..6bcd9a97cd --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/formula/FormulaRecordMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.iot.dal.mysql.formula; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.iot.dal.dataobject.formula.FormulaRecordDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.iot.controller.admin.formula.vo.*; + +/** + * 变量记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface FormulaRecordMapper extends BaseMapperX { + + default PageResult selectPage(FormulaRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(FormulaRecordDO::getMachineName, reqVO.getMachineName()) + .likeIfPresent(FormulaRecordDO::getWorkerName, reqVO.getWorkerName()) + .eqIfPresent(FormulaRecordDO::getResultType, reqVO.getResultType()) + .eqIfPresent(FormulaRecordDO::getFormulaCode, reqVO.getFormulaCode()) + .betweenIfPresent(FormulaRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FormulaRecordDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttrecord/MqttRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttrecord/MqttRecordMapper.java new file mode 100644 index 0000000000..1a04cca443 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttrecord/MqttRecordMapper.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.iot.dal.mysql.mqttrecord; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.iot.dal.dataobject.mqttrecord.MqttRecordDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo.*; + +/** + * 数采记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MqttRecordMapper extends BaseMapperX { + + default PageResult selectPage(MqttRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(MqttRecordDO::getMachineName, reqVO.getMachineName()) + .betweenIfPresent(MqttRecordDO::getDeviceDataTime, reqVO.getDeviceDataTime()) + .eqIfPresent(MqttRecordDO::getDeviceData, reqVO.getDeviceData()) + .eqIfPresent(MqttRecordDO::getDeviceCode, reqVO.getDeviceCode()) + .likeIfPresent(MqttRecordDO::getDeviceName, reqVO.getDeviceName()) + .likeIfPresent(MqttRecordDO::getWorkerName, reqVO.getWorkerName()) + .eqIfPresent(MqttRecordDO::getGatewayCode, reqVO.getGatewayCode()) + .betweenIfPresent(MqttRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MqttRecordDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordService.java new file mode 100644 index 0000000000..fe3a3f2aa2 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.iot.service.formula; + +import cn.iocoder.yudao.module.iot.controller.admin.formula.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.formula.FormulaRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 变量记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface FormulaRecordService { + + /** + * 创建变量记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFormulaRecord(@Valid FormulaRecordSaveReqVO createReqVO); + + /** + * 更新变量记录 + * + * @param updateReqVO 更新信息 + */ + void updateFormulaRecord(@Valid FormulaRecordSaveReqVO updateReqVO); + + /** + * 删除变量记录 + * + * @param id 编号 + */ + void deleteFormulaRecord(Long id); + + /** + * 获得变量记录 + * + * @param id 编号 + * @return 变量记录 + */ + FormulaRecordDO getFormulaRecord(Long id); + + /** + * 获得变量记录分页 + * + * @param pageReqVO 分页查询 + * @return 变量记录分页 + */ + PageResult getFormulaRecordPage(FormulaRecordPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordServiceImpl.java new file mode 100644 index 0000000000..50a20bdd04 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.iot.service.formula; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.iot.controller.admin.formula.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.formula.FormulaRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.iot.dal.mysql.formula.FormulaRecordMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; + +/** + * 变量记录 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class FormulaRecordServiceImpl implements FormulaRecordService { + + @Resource + private FormulaRecordMapper formulaRecordMapper; + + @Override + public Long createFormulaRecord(FormulaRecordSaveReqVO createReqVO) { + // 插入 + FormulaRecordDO formulaRecord = BeanUtils.toBean(createReqVO, FormulaRecordDO.class); + formulaRecordMapper.insert(formulaRecord); + // 返回 + return formulaRecord.getId(); + } + + @Override + public void updateFormulaRecord(FormulaRecordSaveReqVO updateReqVO) { + // 校验存在 + validateFormulaRecordExists(updateReqVO.getId()); + // 更新 + FormulaRecordDO updateObj = BeanUtils.toBean(updateReqVO, FormulaRecordDO.class); + formulaRecordMapper.updateById(updateObj); + } + + @Override + public void deleteFormulaRecord(Long id) { + // 校验存在 + validateFormulaRecordExists(id); + // 删除 + formulaRecordMapper.deleteById(id); + } + + private void validateFormulaRecordExists(Long id) { + if (formulaRecordMapper.selectById(id) == null) { + throw exception(FORMULA_RECORD_NOT_EXISTS); + } + } + + @Override + public FormulaRecordDO getFormulaRecord(Long id) { + return formulaRecordMapper.selectById(id); + } + + @Override + public PageResult getFormulaRecordPage(FormulaRecordPageReqVO pageReqVO) { + return formulaRecordMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordService.java new file mode 100644 index 0000000000..e28cdaa9ea --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.iot.service.mqttrecord; + +import cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.mqttrecord.MqttRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 数采记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MqttRecordService { + + /** + * 创建数采记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMqttRecord(@Valid MqttRecordSaveReqVO createReqVO); + + /** + * 更新数采记录 + * + * @param updateReqVO 更新信息 + */ + void updateMqttRecord(@Valid MqttRecordSaveReqVO updateReqVO); + + /** + * 删除数采记录 + * + * @param id 编号 + */ + void deleteMqttRecord(Long id); + + /** + * 获得数采记录 + * + * @param id 编号 + * @return 数采记录 + */ + MqttRecordDO getMqttRecord(Long id); + + /** + * 获得数采记录分页 + * + * @param pageReqVO 分页查询 + * @return 数采记录分页 + */ + PageResult getMqttRecordPage(MqttRecordPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordServiceImpl.java new file mode 100644 index 0000000000..fc9cc56c49 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.iot.service.mqttrecord; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.mqttrecord.MqttRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.iot.dal.mysql.mqttrecord.MqttRecordMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; + +/** + * 数采记录 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class MqttRecordServiceImpl implements MqttRecordService { + + @Resource + private MqttRecordMapper mqttRecordMapper; + + @Override + public Long createMqttRecord(MqttRecordSaveReqVO createReqVO) { + // 插入 + MqttRecordDO mqttRecord = BeanUtils.toBean(createReqVO, MqttRecordDO.class); + mqttRecordMapper.insert(mqttRecord); + // 返回 + return mqttRecord.getId(); + } + + @Override + public void updateMqttRecord(MqttRecordSaveReqVO updateReqVO) { + // 校验存在 + validateMqttRecordExists(updateReqVO.getId()); + // 更新 + MqttRecordDO updateObj = BeanUtils.toBean(updateReqVO, MqttRecordDO.class); + mqttRecordMapper.updateById(updateObj); + } + + @Override + public void deleteMqttRecord(Long id) { + // 校验存在 + validateMqttRecordExists(id); + // 删除 + mqttRecordMapper.deleteById(id); + } + + private void validateMqttRecordExists(Long id) { + if (mqttRecordMapper.selectById(id) == null) { + throw exception(MQTT_RECORD_NOT_EXISTS); + } + } + + @Override + public MqttRecordDO getMqttRecord(Long id) { + return mqttRecordMapper.selectById(id); + } + + @Override + public PageResult getMqttRecordPage(MqttRecordPageReqVO pageReqVO) { + return mqttRecordMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/formula/FormulaRecordMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/formula/FormulaRecordMapper.xml new file mode 100644 index 0000000000..a342452330 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/formula/FormulaRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/mqttrecord/MqttRecordMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/mqttrecord/MqttRecordMapper.xml new file mode 100644 index 0000000000..b6d9ce568b --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/mqttrecord/MqttRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordServiceImplTest.java b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordServiceImplTest.java new file mode 100644 index 0000000000..aa2b52714c --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/formula/FormulaRecordServiceImplTest.java @@ -0,0 +1,147 @@ +package cn.iocoder.yudao.module.iot.service.formula; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.iot.controller.admin.formula.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.formula.FormulaRecordDO; +import cn.iocoder.yudao.module.iot.dal.mysql.formula.FormulaRecordMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + + +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link FormulaRecordServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(FormulaRecordServiceImpl.class) +public class FormulaRecordServiceImplTest extends BaseDbUnitTest { + + @Resource + private FormulaRecordServiceImpl formulaRecordService; + + @Resource + private FormulaRecordMapper formulaRecordMapper; + + @Test + public void testCreateFormulaRecord_success() { + // 准备参数 + FormulaRecordSaveReqVO createReqVO = randomPojo(FormulaRecordSaveReqVO.class).setId(null); + + // 调用 + Long formulaRecordId = formulaRecordService.createFormulaRecord(createReqVO); + // 断言 + assertNotNull(formulaRecordId); + // 校验记录的属性是否正确 + FormulaRecordDO formulaRecord = formulaRecordMapper.selectById(formulaRecordId); + assertPojoEquals(createReqVO, formulaRecord, "id"); + } + + @Test + public void testUpdateFormulaRecord_success() { + // mock 数据 + FormulaRecordDO dbFormulaRecord = randomPojo(FormulaRecordDO.class); + formulaRecordMapper.insert(dbFormulaRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + FormulaRecordSaveReqVO updateReqVO = randomPojo(FormulaRecordSaveReqVO.class, o -> { + o.setId(dbFormulaRecord.getId()); // 设置更新的 ID + }); + + // 调用 + formulaRecordService.updateFormulaRecord(updateReqVO); + // 校验是否更新正确 + FormulaRecordDO formulaRecord = formulaRecordMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, formulaRecord); + } + + @Test + public void testUpdateFormulaRecord_notExists() { + // 准备参数 + FormulaRecordSaveReqVO updateReqVO = randomPojo(FormulaRecordSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> formulaRecordService.updateFormulaRecord(updateReqVO), FORMULA_RECORD_NOT_EXISTS); + } + + @Test + public void testDeleteFormulaRecord_success() { + // mock 数据 + FormulaRecordDO dbFormulaRecord = randomPojo(FormulaRecordDO.class); + formulaRecordMapper.insert(dbFormulaRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbFormulaRecord.getId(); + + // 调用 + formulaRecordService.deleteFormulaRecord(id); + // 校验数据不存在了 + assertNull(formulaRecordMapper.selectById(id)); + } + + @Test + public void testDeleteFormulaRecord_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> formulaRecordService.deleteFormulaRecord(id), FORMULA_RECORD_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetFormulaRecordPage() { + // mock 数据 + FormulaRecordDO dbFormulaRecord = randomPojo(FormulaRecordDO.class, o -> { // 等会查询到 + o.setMachineName(null); + o.setWorkerName(null); + o.setResultType(null); + o.setFormulaCode(null); + o.setCreateTime(null); + }); + formulaRecordMapper.insert(dbFormulaRecord); + // 测试 machineName 不匹配 + formulaRecordMapper.insert(cloneIgnoreId(dbFormulaRecord, o -> o.setMachineName(null))); + // 测试 workerName 不匹配 + formulaRecordMapper.insert(cloneIgnoreId(dbFormulaRecord, o -> o.setWorkerName(null))); + // 测试 resultType 不匹配 + formulaRecordMapper.insert(cloneIgnoreId(dbFormulaRecord, o -> o.setResultType(null))); + // 测试 formulaCode 不匹配 + formulaRecordMapper.insert(cloneIgnoreId(dbFormulaRecord, o -> o.setFormulaCode(null))); + // 测试 createTime 不匹配 + formulaRecordMapper.insert(cloneIgnoreId(dbFormulaRecord, o -> o.setCreateTime(null))); + // 准备参数 + FormulaRecordPageReqVO reqVO = new FormulaRecordPageReqVO(); + reqVO.setMachineName(null); + reqVO.setWorkerName(null); + reqVO.setResultType(null); + reqVO.setFormulaCode(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = formulaRecordService.getFormulaRecordPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbFormulaRecord, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordServiceImplTest.java b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordServiceImplTest.java new file mode 100644 index 0000000000..6116946b4c --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/mqttrecord/MqttRecordServiceImplTest.java @@ -0,0 +1,153 @@ +package cn.iocoder.yudao.module.iot.service.mqttrecord; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.iot.controller.admin.mqttrecord.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.mqttrecord.MqttRecordDO; +import cn.iocoder.yudao.module.iot.dal.mysql.mqttrecord.MqttRecordMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link MqttRecordServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(MqttRecordServiceImpl.class) +public class MqttRecordServiceImplTest extends BaseDbUnitTest { + + @Resource + private MqttRecordServiceImpl mqttRecordService; + + @Resource + private MqttRecordMapper mqttRecordMapper; + + @Test + public void testCreateMqttRecord_success() { + // 准备参数 + MqttRecordSaveReqVO createReqVO = randomPojo(MqttRecordSaveReqVO.class).setId(null); + + // 调用 + Long mqttRecordId = mqttRecordService.createMqttRecord(createReqVO); + // 断言 + assertNotNull(mqttRecordId); + // 校验记录的属性是否正确 + MqttRecordDO mqttRecord = mqttRecordMapper.selectById(mqttRecordId); + assertPojoEquals(createReqVO, mqttRecord, "id"); + } + + @Test + public void testUpdateMqttRecord_success() { + // mock 数据 + MqttRecordDO dbMqttRecord = randomPojo(MqttRecordDO.class); + mqttRecordMapper.insert(dbMqttRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + MqttRecordSaveReqVO updateReqVO = randomPojo(MqttRecordSaveReqVO.class, o -> { + o.setId(dbMqttRecord.getId()); // 设置更新的 ID + }); + + // 调用 + mqttRecordService.updateMqttRecord(updateReqVO); + // 校验是否更新正确 + MqttRecordDO mqttRecord = mqttRecordMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, mqttRecord); + } + + @Test + public void testUpdateMqttRecord_notExists() { + // 准备参数 + MqttRecordSaveReqVO updateReqVO = randomPojo(MqttRecordSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> mqttRecordService.updateMqttRecord(updateReqVO), MQTT_RECORD_NOT_EXISTS); + } + + @Test + public void testDeleteMqttRecord_success() { + // mock 数据 + MqttRecordDO dbMqttRecord = randomPojo(MqttRecordDO.class); + mqttRecordMapper.insert(dbMqttRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbMqttRecord.getId(); + + // 调用 + mqttRecordService.deleteMqttRecord(id); + // 校验数据不存在了 + assertNull(mqttRecordMapper.selectById(id)); + } + + @Test + public void testDeleteMqttRecord_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> mqttRecordService.deleteMqttRecord(id), MQTT_RECORD_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetMqttRecordPage() { + // mock 数据 + MqttRecordDO dbMqttRecord = randomPojo(MqttRecordDO.class, o -> { // 等会查询到 + o.setMachineName(null); + o.setDeviceDataTime(null); + o.setDeviceData(null); + o.setDeviceCode(null); + o.setDeviceName(null); + o.setWorkerName(null); + o.setGatewayCode(null); + o.setCreateTime(null); + }); + mqttRecordMapper.insert(dbMqttRecord); + // 测试 machineName 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setMachineName(null))); + // 测试 deviceDataTime 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setDeviceDataTime(null))); + // 测试 deviceData 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setDeviceData(null))); + // 测试 deviceCode 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setDeviceCode(null))); + // 测试 deviceName 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setDeviceName(null))); + // 测试 workerName 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setWorkerName(null))); + // 测试 gatewayCode 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setGatewayCode(null))); + // 测试 createTime 不匹配 + mqttRecordMapper.insert(cloneIgnoreId(dbMqttRecord, o -> o.setCreateTime(null))); + // 准备参数 + MqttRecordPageReqVO reqVO = new MqttRecordPageReqVO(); + reqVO.setMachineName(null); + reqVO.setDeviceDataTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDeviceData(null); + reqVO.setDeviceCode(null); + reqVO.setDeviceName(null); + reqVO.setWorkerName(null); + reqVO.setGatewayCode(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = mqttRecordService.getMqttRecordPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbMqttRecord, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/clean.sql b/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/clean.sql index 32bae7e31a..eadba8890a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/clean.sql +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/clean.sql @@ -18,3 +18,9 @@ DELETE FROM "iot_gateway"; DELETE FROM "iot_iot_organization"; -- 将该删表 SQL 语句,添加到 yudao-module-iot-biz 模块的 test/resources/sql/clean.sql 文件里 DELETE FROM "iot_kanban"; + +-- 将该删表 SQL 语句,添加到 yudao-module-iot-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "iot_formula_record"; + +-- 将该删表 SQL 语句,添加到 yudao-module-iot-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "iot_mqtt_record"; \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/create_tables.sql b/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/create_tables.sql index 1dba4572d5..2a3b4f36af 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/create_tables.sql +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/resources/sql/create_tables.sql @@ -42,6 +42,7 @@ CREATE TABLE IF NOT EXISTS "iot_formula" "name" varchar, "formula_code" varchar, "formula" varchar, + "data_unit" varchar, "result_type" varchar, "machine_id" bigint NOT NULL, "remark" varchar, @@ -155,7 +156,7 @@ CREATE TABLE IF NOT EXISTS "iot_iot_organization" "updater" varchar DEFAULT '', "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint , + "tenant_id" bigint, "name" varchar NOT NULL, "parent_id" bigint NOT NULL, "status" int, @@ -170,7 +171,7 @@ CREATE TABLE IF NOT EXISTS "iot_kanban" "code" varchar NOT NULL, "title" varchar NOT NULL, "view_url" varchar, - "tags" varchar, + "tags" varchar, "img" varchar, "remark" varchar, "is_enable" bit NOT NULL, @@ -182,5 +183,46 @@ CREATE TABLE IF NOT EXISTS "iot_kanban" "tenant_id" bigint, PRIMARY KEY ("id") ) COMMENT '物联看板'; +CREATE TABLE IF NOT EXISTS "iot_formula_record" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "machine_id" bigint NOT NULL, + "machine_name" varchar, + "worker_id" bigint, + "worker_name" varchar, + "result_type" varchar, + "formula_id" bigint NOT NULL, + "formula_code" varchar, + "data_value" varchar, + "data_unit" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint, + PRIMARY KEY ("id") +) COMMENT '变量记录'; +CREATE TABLE IF NOT EXISTS "iot_mqtt_record" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "machine_id" bigint NOT NULL, + "machine_name" varchar, + "device_data_time" varchar NOT NULL, + "device_data" varchar, + "device_id" bigint NOT NULL, + "device_code" varchar, + "device_name" varchar, + "worker_id" bigint, + "worker_name" varchar, + "gateway_code" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint, + PRIMARY KEY ("id") +) COMMENT '数采记录';