CREATE TABLE product ( product_id INT AUTO_INCREMENT PRIMARY KEY, product_name VARCHAR(50) UNIQUE NOT NULL, description VARCHAR(200) NOT NULL, price DECIMAL(10, 2) NOT NULL, stock INT NOT NULL, category_id INT NOT NULL, is_special BOOLEAN DEFAULT FALSE, FOREIGN KEY (category_id) REFERENCES category(category_id) );CREATE TABLE order ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, total_price DECIMAL(10, 2) NOT NULL, order_time DATETIME NOT NULL, payment_status ENUM('未支付', '已支付') NOT NULL, delivery_status ENUM('未发货', '已发货') NOT NULL, order_status ENUM('新订单', '已支付订单', '已发货订单', '作废订单') NOT NULL, FOREIGN KEY (user_id) REFERENCES user(user_id), FOREIGN KEY (product_id) REFERENCES product(product_id) );就上述两表创建一个联系表

时间: 2024-04-01 12:35:02 浏览: 136
好的,你需要创建一个联系表来建立产品和订单之间的多对多关系。以下是一个可能的联系表的创建语句: CREATE TABLE order_product ( order_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, PRIMARY KEY (order_id, product_id), FOREIGN KEY (order_id) REFERENCES `order`(order_id), FOREIGN KEY (product_id) REFERENCES product(product_id) ); 这个联系表有三个字段:order_id、product_id 和 quantity。它们分别对应订单 ID、产品 ID 和购买数量。这个联系表的主键是 (order_id, product_id),表示一个订单可以包含多个产品,一个产品可以被多个订单包含。同时,这个联系表还定义了两个外键,分别引用了订单表和产品表的主键,以确保数据的一致性和完整性。
相关问题

CREATE TABLE product ( product_id INT AUTO_INCREMENT PRIMARY KEY, product_name VARCHAR(50) UNIQUE NOT NULL, description VARCHAR(200) NOT NULL, price DECIMAL(10, 2) NOT NULL, stock INT NOT NULL, category_id INT NOT NULL, is_special BOOLEAN DEFAULT FALSE, FOREIGN KEY (category_id) REFERENCES category(category_id) );CREATE TABLE cart ( cart_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, FOREIGN KEY (user_id) REFERENCES user(user_id), FOREIGN KEY (product_id) REFERENCES product(product_id) );就上述两表创建一个联系表

好的,你需要创建一个联系表来建立产品和购物车之间的多对多关系。以下是一个可能的联系表的创建语句: CREATE TABLE cart_product ( cart_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, PRIMARY KEY (cart_id, product_id), FOREIGN KEY (cart_id) REFERENCES cart(cart_id), FOREIGN KEY (product_id) REFERENCES product(product_id) ); 这个联系表有三个字段:cart_id、product_id 和 quantity。它们分别对应购物车 ID、产品 ID 和购买数量。这个联系表的主键是 (cart_id, product_id),表示一个购物车可以包含多个产品,一个产品可以被多个购物车包含。同时,这个联系表还定义了两个外键,分别引用了购物车表和产品表的主键,以确保数据的一致性和完整性。

CREATE TABLE `z_product` ( `product_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID', `sku_id` varchar(20) NOT NULL COMMENT 'SKU编码', `product_name` varchar(100) NOT NULL COMMENT '商品名称', `category_id` int unsigned NOT NULL COMMENT '分类ID', `product_code` varchar(50) NOT NULL COMMENT '商品编码(如: FRUIT-APPLE-001)', `spec` json NOT NULL COMMENT '规格参数 例:500g/盒', `unit` varchar(10) NOT NULL COMMENT '单位(如:件/箱/千克)', `storage_condition` enum('常温','冷藏','冷冻') NOT NULL COMMENT '存储条件', `shelf_life_days` int DEFAULT NULL COMMENT '保质期天数', `safety_stock` int unsigned DEFAULT '0' COMMENT '安全库存', `lead_time` smallint unsigned DEFAULT NULL COMMENT '标准采购周期(天)', `supplier_id` int unsigned NOT NULL COMMENT '供应商ID', `batch_number` varchar(50) DEFAULT NULL COMMENT '批次号', `is_cold_chain` tinyint(1) DEFAULT '0' COMMENT '是否需要冷链运输(0-否 1-是)', `status` enum('在售','下架','待审核') DEFAULT '待审核' COMMENT '商品状态', `audit_time` datetime DEFAULT NULL COMMENT '最后审核时间', PRIMARY KEY (`product_id`), UNIQUE KEY `product_code` (`product_code`), KEY `idx_product_name` (`product_name`), KEY `supplier_id` (`supplier_id`), KEY `category_id` (`category_id`), CONSTRAINT `z_product_ibfk_1` FOREIGN KEY (`supplier_id`) REFERENCES `z_supplier` (`supplier_id`), CONSTRAINT `z_product_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `z_product_category` (`category_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='生鲜商品主数据表,生成java实体类

<think>嗯,用户想要根据提供的SQL表结构生成Java实体类。首先,我需要仔细看看用户给的SQL表结构是什么样的。根据用户提供的参考引用[3],商品表的结构包括product_id、product_name、brand、category、price、stock、image、description和listing_time这些字段,类型有INT、VARCHAR、DECIMAL、TIMESTAMP等。 接下来,我得回忆一下Java实体类的基本结构。通常,实体类会有私有字段、Getter和Setter方法,以及构造器。可能还需要用到Lombok注解来简化代码,比如@Data、@NoArgsConstructor、@AllArgsConstructor这些,这样就不用手动写这些方法了。用户提供的引用[1]里提到了@Builder、@NoArgsConstructor、@AllArgsConstructor,这些注解可以用来生成建造者模式和无参、全参构造器。 然后,数据类型映射是关键。比如,SQL中的INT对应Java的Integer或int,VARCHAR对应String,DECIMAL对应BigDecimal,TIMESTAMP对应LocalDateTime或者Date。需要考虑是否使用java.time包里的新日期时间类,还是传统的Date,但推荐使用LocalDateTime,因为它是不可变的且线程安全。 另外,字段的命名习惯需要转换,SQL中的列名通常是下划线分隔的,而Java的字段名是驼峰式。比如,product_id对应productId,listing_time对应listingTime。 还要注意主键的标记,通常会用@Id注解,尤其是在JPA中。如果使用JPA,可能还需要@Entity和@Table注解来指定实体对应的表名。 接下来,自动生成的方法。手动编写虽然可行,但效率低,尤其是表结构复杂的时候。所以,用户可能想知道如何自动化这个过程。想到可以使用IDE的插件,比如IntelliJ的Database Tools,或者MyBatis Generator这样的代码生成工具。另外,如果使用JPA Hibernate,可能通过配置反向工程来自动生成实体类。 另外,用户提到“自动生成”,可能需要具体的步骤,比如使用MyBatis Generator的配置,或者使用在线工具,根据SQL语句生成Java类。例如,用户提供的引用[2]提到了一些提高生产力的工具,可能类似的工具存在用于生成实体类。 最后,还要考虑是否需要添加其他注解或验证,比如JSR-303的@NotNull、@Size等,或者Jackson的注解来处理JSON序列化。不过这可能超出基本实体类的范围,需要根据用户的具体需求来判断。 总结一下步骤应该是:1. 分析SQL表结构,确定字段和类型;2. 创建Java类,使用合适的注解;3. 处理命名规范;4. 使用工具自动化生成。同时,给出示例代码,并推荐相关工具和方法。</think>根据提供的商品表(products)SQL结构,以下是生成Java实体类的步骤和示例: ### 一、基础实体类结构 ```java import java.math.BigDecimal; import java.time.LocalDateTime; public class Product { private Integer productId; private String productName; private String brand; private String category; private BigDecimal price; private Integer stock; private String image; private String description; private LocalDateTime listingTime; // 构造器、getter/setter 略 } ``` ### 二、增强实现(使用Lombok注解) ```java import lombok.Data; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; import lombok.Builder; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Product { private Integer productId; private String productName; private String brand; private String category; private BigDecimal price; private Integer stock; private String image; private String description; private LocalDateTime listingTime; } ``` * 注解说明: - `@Data` 自动生成getter/setter - `@Builder` 支持建造者模式[^1] - `@NoArgsConstructor` 生成无参构造器 - `@AllArgsConstructor` 生成全参构造器 ### 三、数据类型映射对照表 | SQL类型 | Java类型 | 说明 | |----------------|-------------------|---------------------| | INT | Integer | 主键建议使用包装类 | | VARCHAR | String | | | DECIMAL(10,2) | BigDecimal | 精确数值计算必备 | | TIMESTAMP | LocalDateTime | 推荐使用java.time包 | ### 四、自动生成方法 1. **IDE插件**:IntelliJ的Database Tools支持从数据库表直接生成实体类 2. **MyBatis Generator**:通过配置`generatorConfig.xml`自动生成 3. **在线工具**:SQL转Java工具(如tablesgenerator.com) 4. **JPA逆向工程**:Hibernate Tools可根据数据库表生成带注解的实体类
阅读全文

相关推荐

可以发我一个复杂一点的吗-- 用户表 CREATE TABLE user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID', username varchar(50) DEFAULT NULL COMMENT '用户名', phone varchar(11) NOT NULL COMMENT '手机号', password varchar(100) DEFAULT NULL COMMENT '密码', wechat_openid varchar(100) DEFAULT NULL COMMENT '微信OpenID', credit_score int(11) DEFAULT 100 COMMENT '信用评分', is_verified tinyint(1) DEFAULT 0 COMMENT '是否实名认证', verification_type tinyint(1) DEFAULT NULL COMMENT '认证类型(1-身份证,2-营业执照)', verification_number varchar(50) DEFAULT NULL COMMENT '认证号码', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), UNIQUE KEY idx_phone (phone), UNIQUE KEY idx_wechat_openid (wechat_openid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; -- 商品表 CREATE TABLE product ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', seller_id bigint(20) NOT NULL COMMENT '卖家ID', category_id bigint(20) NOT NULL COMMENT '分类ID', title varchar(100) NOT NULL COMMENT '标题', description text COMMENT '描述', original_price decimal(10,2) DEFAULT NULL COMMENT '原价', price decimal(10,2) NOT NULL COMMENT '现价', condition_level tinyint(1) NOT NULL COMMENT '成色等级(1-全新,2-九成新,3-八成新,4-一般)', is_disinfacted tinyint(1) DEFAULT 0 COMMENT '是否消毒', disinfection_certificate varchar(255) DEFAULT NULL COMMENT '消毒证明图片', baby_age_min int(11) DEFAULT NULL COMMENT '适用最小月龄', baby_age_max int(11) DEFAULT NULL COMMENT '适用最大月龄', status tinyint(1) DEFAULT 1 COMMENT '状态(1-上架,2-下架,3-已售出)', views int(11) DEFAULT 0 COMMENT '浏览量', likes int(11) DEFAULT 0 COMMENT '点赞数', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY idx_seller_id (seller_id), KEY idx_category_id (category_id), KEY idx_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'; -- 交易表 CREATE TABLE transaction ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '交易ID', buyer_id bigint(20) NOT NULL COMMENT '买家ID', seller_id bigint(20) NOT NULL COMMENT '卖家ID', product_id bigint(20) NOT NULL COMMENT '商品ID', price decimal(10,2) NOT NULL COMMENT '交易价格', status tinyint(1) DEFAULT 1 COMMENT '状态(1-待支付,2-已支付,3-已发货,4-已收货,5-已完成,6-已取消)', payment_method varchar(20) DEFAULT NULL COMMENT '支付方式', payment_time datetime DEFAULT NULL COMMENT '支付时间', shipping_time datetime DEFAULT NULL COMMENT '发货时间', receive_time datetime DEFAULT NULL COMMENT '收货时间', complete_time datetime DEFAULT NULL COMMENT '完成时间', cancel_reason varchar(255) DEFAULT NULL COMMENT '取消原因', logistics_company varchar(50) DEFAULT NULL COMMENT '物流公司', logistics_number varchar(50) DEFAULT NULL COMMENT '物流单号', is_self_pickup tinyint(1) DEFAULT 0 COMMENT '是否同城自提', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY idx_buyer_id (buyer_id), KEY idx_seller_id (seller_id), KEY idx_product_id (product_id), KEY idx_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易表'; -- 评价表 CREATE TABLE evaluation ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '评价ID', transaction_id bigint(20) NOT NULL COMMENT '交易ID', reviewer_id bigint(20) NOT NULL COMMENT '评价者ID', reviewee_id bigint(20) NOT NULL COMMENT '被评价者ID', product_id bigint(20) NOT NULL COMMENT '商品ID', rating tinyint(1) NOT NULL COMMENT '评分(1-5)', content text COMMENT '评价内容', images varchar(500) DEFAULT NULL COMMENT '评价图片,多个图片用逗号分隔', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (id), UNIQUE KEY idx_transaction_id (transaction_id), KEY idx_reviewer_id (reviewer_id), KEY idx_reviewee_id (reviewee_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评价表'; -- 商品分类表 CREATE TABLE category ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID', parent_id bigint(20) DEFAULT 0 COMMENT '父分类ID', name varchar(50) NOT NULL COMMENT '分类名称', description varchar(255) DEFAULT NULL COMMENT '分类描述', icon varchar(255) DEFAULT NULL COMMENT '分类图标', sort int(11) DEFAULT 0 COMMENT '排序', is_leaf tinyint(1) DEFAULT 0 COMMENT '是否叶子节点', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY idx_parent_id (parent_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表'; -- 收藏表 CREATE TABLE collection ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '收藏ID', user_id bigint(20) NOT NULL COMMENT '用户ID', product_id bigint(20) NOT NULL COMMENT '商品ID', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (id), UNIQUE KEY idx_user_product (user_id,product_id), KEY idx_product_id (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表'; -- 育儿知识表 CREATE TABLE knowledge ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '知识ID', title varchar(100) NOT NULL COMMENT '标题', content text NOT NULL COMMENT '内容', category varchar(50) DEFAULT NULL COMMENT '分类', baby_age_min int(11) DEFAULT NULL COMMENT '适用最小月龄', baby_age_max int(11) DEFAULT NULL COMMENT '适用最大月龄', author varchar(50) DEFAULT NULL COMMENT '作者', source varchar(100) DEFAULT NULL COMMENT '来源', views int(11) DEFAULT 0 COMMENT '浏览量', likes int(11) DEFAULT 0 COMMENT '点赞数', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY idx_category (category), KEY idx_baby_age (baby_age_min,baby_age_max) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='育儿知识表'; 数据库有这些

这是上面的数据库/* Navicat Premium Data Transfer Source Server : Mysql Source Server Type : MySQL Source Server Version : 50729 Source Host : localhost:3306 Source Schema : home_health Target Server Type : MySQL Target Server Version : 50729 File Encoding : 65001 Date: 20/05/2025 12:56:18 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for comment -- ---------------------------- DROP TABLE IF EXISTS comment; CREATE TABLE comment ( id bigint(20) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, post_id bigint(20) NOT NULL, content text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) USING BTREE, INDEX user_id(user_id) USING BTREE, INDEX post_id(post_id) USING BTREE, CONSTRAINT comment_ibfk_1 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT comment_ibfk_2 FOREIGN KEY (post_id) REFERENCES post (id) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of comment -- ---------------------------- -- ---------------------------- -- Table structure for employee -- ---------------------------- DROP TABLE IF EXISTS employee; CREATE TABLE employee ( emp_id int(11) NOT NULL AUTO_INCREMENT COMMENT '员工ID', emp_name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '员工姓名', emp_address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工地址', emp_phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工电话', emp_salary decimal(10, 2) NULL DEFAULT 0.00 COMMENT '员工工资', score decimal(3, 1) NULL DEFAULT 0.0 COMMENT '评分', complaints text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '投诉内容', emp_type varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工类型', emp_date date NULL DEFAULT NULL COMMENT '入职时间', PRIMARY KEY (emp_id) USING BTREE, INDEX idx_emp_name(emp_name) USING BTREE, INDEX idx_emp_type(emp_type) USING BTREE, INDEX idx_emp_date(emp_date) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '员工信息表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of employee -- ---------------------------- -- ---------------------------- -- Table structure for family -- ---------------------------- DROP TABLE IF EXISTS family; CREATE TABLE family ( fid int(11) NOT NULL AUTO_INCREMENT, relationship varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, gender varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, age int(11) NOT NULL, address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, medical varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, avatar varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, PRIMARY KEY (fid) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of family -- ---------------------------- INSERT INTO family VALUES (1, '父子', '解决', '男', 18, '广西', '18897790686', '无', NULL); -- ---------------------------- -- Table structure for health -- ---------------------------- DROP TABLE IF EXISTS health; CREATE TABLE health ( fid int(11) NOT NULL COMMENT '关联的家庭成员 ID', height double NULL DEFAULT NULL COMMENT '身高', weight double NULL DEFAULT NULL COMMENT '体重', BP double NULL DEFAULT NULL COMMENT '血压', HR double NULL DEFAULT NULL COMMENT '心率', SpO2 double NULL DEFAULT NULL COMMENT '血氧', step int(11) NULL DEFAULT NULL COMMENT '步数', PRIMARY KEY (fid) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '健康数据信息表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of health -- ---------------------------- -- ---------------------------- -- Table structure for iot_device -- ---------------------------- DROP TABLE IF EXISTS iot_device; CREATE TABLE iot_device ( id bigint(20) NOT NULL AUTO_INCREMENT, device_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, device_type varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, status varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, user_id bigint(20) NULL DEFAULT NULL, last_data_time datetime NULL DEFAULT NULL, PRIMARY KEY (id) USING BTREE, INDEX idx_user_id(user_id) USING BTREE, CONSTRAINT iot_device_ibfk_1 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of iot_device -- ---------------------------- -- ---------------------------- -- Table structure for news -- ---------------------------- DROP TABLE IF EXISTS news; CREATE TABLE news ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '新闻ID', title varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '新闻标题', content text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '新闻内容', created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (id) USING BTREE, INDEX idx_created_at(created_at) USING BTREE COMMENT '按创建时间索引' ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '新闻信息表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of news -- ---------------------------- -- ---------------------------- -- Table structure for operation_log -- ---------------------------- DROP TABLE IF EXISTS operation_log; CREATE TABLE operation_log ( id bigint(20) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, operation text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, operation_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, ip varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, device varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (id) USING BTREE, INDEX idx_user_id(user_id) USING BTREE, CONSTRAINT operation_log_ibfk_1 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of operation_log -- ---------------------------- -- ---------------------------- -- Table structure for order -- ---------------------------- DROP TABLE IF EXISTS order; CREATE TABLE order ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单 ID', user_id bigint(20) NOT NULL COMMENT '关联的用户 ID', product_id bigint(20) NOT NULL COMMENT '关联的商品 ID', quantity int(11) NOT NULL COMMENT '商品数量', total_price double NOT NULL COMMENT '订单总价', PRIMARY KEY (id) USING BTREE, INDEX user_id(user_id) USING BTREE, INDEX product_id(product_id) USING BTREE, CONSTRAINT order_ibfk_1 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT order_ibfk_2 FOREIGN KEY (product_id) REFERENCES product (id) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单信息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of order -- ---------------------------- -- ---------------------------- -- Table structure for post -- ---------------------------- DROP TABLE IF EXISTS post; CREATE TABLE post ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '帖子ID', user_id bigint(20) NOT NULL COMMENT '发布用户ID', rating decimal(3, 2) NULL DEFAULT 0.00 COMMENT '动态评分', rating_count int(11) NULL DEFAULT 0 COMMENT '评分次数', content text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '帖子内容', title varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '帖子标题', section varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发布板块', created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (id) USING BTREE, INDEX idx_user_id(user_id) USING BTREE, INDEX idx_created_at(created_at) USING BTREE, INDEX idx_section(section) USING BTREE, CONSTRAINT post_ibfk_1 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '帖子信息表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of post -- ---------------------------- -- ---------------------------- -- Table structure for product -- ---------------------------- DROP TABLE IF EXISTS product; CREATE TABLE product ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品 ID', name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品名称', price double NOT NULL COMMENT '商品价格', description text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商品描述', PRIMARY KEY (id) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品信息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of product -- ---------------------------- -- ---------------------------- -- Table structure for tb_posture_record -- ---------------------------- DROP TABLE IF EXISTS tb_posture_record; CREATE TABLE tb_posture_record ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', user_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID', evaluation_result text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '体态评估结果', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (id) USING BTREE, INDEX idx_user_id(user_id) USING BTREE COMMENT '用户ID索引' ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '体态评估记录表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of tb_posture_record -- ---------------------------- -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS user; CREATE TABLE user ( id bigint(20) NOT NULL AUTO_INCREMENT, username varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名(登录账户)', salt varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码盐值', password varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录密码', real_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '真实姓名', phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号', user_type varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户类型(normal/vip/enterprise)', status varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态(normal/disabled/pending)', role int(11) NULL DEFAULT NULL COMMENT '权限级别', create_time datetime NULL DEFAULT NULL COMMENT '创建时间', last_login_time datetime NULL DEFAULT NULL COMMENT '最后登录时间', last_login_ip varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '最后登录IP', last_login_device varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '最后登录设备', PRIMARY KEY (id) USING BTREE, UNIQUE INDEX uk_username(username) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO user VALUES (1, 'mmm', '111', '123456', '庞帅', '18897790686', '普通用户', '1', 1, '2025-05-20 12:07:57', '2025-05-22 12:08:05', '广西', '电脑'); SET FOREIGN_KEY_CHECKS = 1;

/************************************************************************************************** Filename: SampleApp.h Revised: $Date: 2007-10-27 17:22:23 -0700 (Sat, 27 Oct 2007) $ Revision: $Revision: 15795 $ Description: This file contains the Sample Application definitions. Copyright 2007 Texas Instruments Incorporated. All rights reserved. IMPORTANT: Your use of this Software is limited to those specific rights granted under the terms of a software license agreement between the user who downloaded the software, his/her employer (which must be your employer) and Texas Instruments Incorporated (the "License"). You may not use this Software unless you agree to abide by the terms of the License. The License limits your use, and you acknowledge, that the Software may not be modified, copied or distributed unless embedded on a Texas Instruments microcontroller or used solely and exclusively in conjunction with a Texas Instruments radio frequency transceiver, which is integrated into your product. Other than for the foregoing purpose, you may not use, reproduce, copy, prepare derivative works of, modify, distribute, perform, display or sell this Software and/or its documentation for any purpose. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE PROVIDED 揂S IS?WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. Should you have any questions regarding your right to use this Software, contact Texas Instruments Incorporated at www.TI.com. **************************************************************************************************/ #ifndef SAMPLEAPP_H #define SAMPLEAPP_H #ifdef __cplusplus extern "C" { #endif /********************************************************************* * INCLUDES */ #include "ZComDef.h" /********************************************************************* * CONSTANTS */ // These constants are only for example and should be changed to the // device's needs #define SAMPLEAPP_ENDPOINT 20 #define SAMPLEAPP_PROFID 0x0F08 #define SAMPLEAPP_DEVICEID 0x0001 #define SAMPLEAPP_DEVICE_VERSION 0 #define SAMPLEAPP_FLAGS 0 #define SAMPLEAPP_MAX_CLUSTERS 2 #define SAMPLEAPP_PERIODIC_CLUSTERID 1 #define SAMPLEAPP_FLASH_CLUSTERID 2 #define SAMPLEAPP_LEDCTL_CLUSTERID 3 // Send Message Timeout #define SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT 5000 // Every 5 seconds // Application Events (OSAL) - These are bit weighted definitions. #define SAMPLEAPP_SEND_PERIODIC_MSG_EVT 0x0001 // Group ID for Flash Command #define SAMPLEAPP_FLASH_GROUP 0x0001 // Flash Command Duration - in milliseconds #define SAMPLEAPP_FLASH_DURATION 1000 /********************************************************************* * MACROS */ /********************************************************************* * FUNCTIONS */ /* * Task Initialization for the Generic Application */ extern void SampleApp_Init( uint8 task_id ); /* * Task Event Processor for the Generic Application */ extern UINT16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ); /********************************************************************* *********************************************************************/ #ifdef __cplusplus } #endif #endif /* SAMPLEAPP_H */ /************************************************************************************************** Filename: SampleApp.c Revised: $Date: 2009-03-18 15:56:27 -0700 (Wed, 18 Mar 2009) $ Revision: $Revision: 19453 $ Description: Sample Application (no Profile). Copyright 2007 Texas Instruments Incorporated. All rights reserved. IMPORTANT: Your use of this Software is limited to those specific rights granted under the terms of a software license agreement between the user who downloaded the software, his/her employer (which must be your employer) and Texas Instruments Incorporated (the "License"). You may not use this Software unless you agree to abide by the terms of the License. The License limits your use, and you acknowledge, that the Software may not be modified, copied or distributed unless embedded on a Texas Instruments microcontroller or used solely and exclusively in conjunction with a Texas Instruments radio frequency transceiver, which is integrated into your product. Other than for the foregoing purpose, you may not use, reproduce, copy, prepare derivative works of, modify, distribute, perform, display or sell this Software and/or its documentation for any purpose. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE PROVIDED 揂S IS?WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. Should you have any questions regarding your right to use this Software, contact Texas Instruments Incorporated at www.TI.com. **************************************************************************************************/ /********************************************************************* This application isn't intended to do anything useful, it is intended to be a simple example of an application's structure. This application sends it's messages either as broadcast or broadcast filtered group messages. The other (more normal) message addressing is unicast. Most of the other sample applications are written to support the unicast message model. Key control: SW1: Sends a flash command to all devices in Group 1. SW2: Adds/Removes (toggles) this device in and out of Group 1. This will enable and disable the reception of the flash command. *********************************************************************/ /********************************************************************* * INCLUDES */ #include <stdio.h> #include <string.h> #include "OSAL.h" #include "ZGlobals.h" #include "AF.h" #include "aps_groups.h" #include "ZDApp.h" #include "MT_UART.h" //add by 1305106 #include "SampleApp.h" #include "SampleAppHw.h" #include "OnBoard.h" /* HAL */ #include "hal_lcd.h" #include "hal_led.h" #include "hal_key.h" #include"sht11.h" /********************************************************************* * MACROS */ /********************************************************************* * CONSTANTS */ /********************************************************************* * TYPEDEFS */ /********************************************************************* * GLOBAL VARIABLES */ // This list should be filled with Application specific Cluster IDs. const cId_t SampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] = { SAMPLEAPP_PERIODIC_CLUSTERID, SAMPLEAPP_FLASH_CLUSTERID, }; const SimpleDescriptionFormat_t SampleApp_SimpleDesc = { SAMPLEAPP_ENDPOINT, // int Endpoint; SAMPLEAPP_PROFID, // uint16 AppProfId[2]; SAMPLEAPP_DEVICEID, // uint16 AppDeviceId[2]; SAMPLEAPP_DEVICE_VERSION, // int AppDevVer:4; SAMPLEAPP_FLAGS, // int AppFlags:4; SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters; (cId_t *)SampleApp_ClusterList, // uint8 *pAppInClusterList; SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters; (cId_t *)SampleApp_ClusterList // uint8 *pAppInClusterList; }; // This is the Endpoint/Interface description. It is defined here, but // filled-in in SampleApp_Init(). Another way to go would be to fill // in the structure here and make it a "const" (in code space). The // way it's defined in this sample app it is define in RAM. endPointDesc_t SampleApp_epDesc; /********************************************************************* * EXTERNAL VARIABLES */ /********************************************************************* * EXTERNAL FUNCTIONS */ /********************************************************************* * LOCAL VARIABLES */ uint8 SampleApp_TaskID; // Task ID for internal task/event processing // This variable will be received when // SampleApp_Init() is called. devStates_t SampleApp_NwkState; uint8 SampleApp_TransID; // This is the unique message ID (counter) afAddrType_t SampleApp_Periodic_DstAddr; afAddrType_t SampleApp_Flash_DstAddr; aps_Group_t SampleApp_Group; uint8 SampleAppPeriodicCounter = 0; uint8 SampleAppFlashCounter = 0; /********************************************************************* * LOCAL FUNCTIONS */ void SampleApp_HandleKeys( uint8 shift, uint8 keys ); void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); void SampleApp_SendPeriodicMessage( void ); void SampleApp_SendFlashMessage( uint16 flashTime ); /********************************************************************* * NETWORK LAYER CALLBACKS */ /********************************************************************* * PUBLIC FUNCTIONS */ /********************************************************************* * @fn SampleApp_Init * * @brief Initialization function for the Generic App Task. * This is called during initialization and should contain * any application specific initialization (ie. hardware * initialization/setup, table initialization, power up * notificaiton ... ). * * @param task_id - the ID assigned by OSAL. This ID should be * used to send messages and set timers. * * @return none */ void SampleApp_Init( uint8 task_id ) { SampleApp_TaskID = task_id; SampleApp_NwkState = DEV_INIT; SampleApp_TransID = 0; // Device hardware initialization can be added here or in main() (Zmain.c). // If the hardware is application specific - add it here. // If the hardware is other parts of the device add it in main(). #if defined ( BUILD_ALL_DEVICES ) // The "Demo" target is setup to have BUILD_ALL_DEVICES and HOLD_AUTO_START // We are looking at a jumper (defined in SampleAppHw.c) to be jumpered // together - if they are - we will start up a coordinator. Otherwise, // the device will start as a router. if ( readCoordinatorJumper() ) zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR; else zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER; #endif // BUILD_ALL_DEVICES #if defined ( HOLD_AUTO_START ) // HOLD_AUTO_START is a compile option that will surpress ZDApp // from starting the device and wait for the application to // start the device. ZDOInitDevice(0); #endif // Setup for the periodic message's destination address // Broadcast to everyone SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF; // Setup for the flash command's destination address - Group 1 SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP; // Fill out the endpoint description. SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_epDesc.task_id = &SampleApp_TaskID; SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc; SampleApp_epDesc.latencyReq = noLatencyReqs; // Register the endpoint description with the AF afRegister( &SampleApp_epDesc ); // Register for all key events - This app will handle all key events RegisterForKeys( SampleApp_TaskID ); MT_UartRegisterTaskID( SampleApp_TaskID ); //add by 1305106 // By default, all devices start out in Group 1 SampleApp_Group.ID = 0x0001; osal_memcpy( SampleApp_Group.name, "Group 1", 7 ); aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group ); #if defined ( LCD_SUPPORTED ) HalLcdWriteString( "SampleApp", HAL_LCD_LINE_1 ); #endif } /********************************************************************* * @fn SampleApp_ProcessEvent * * @brief Generic Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return none */ uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) { switch ( MSGpkt->hdr.event ) { // Received when a key is pressed case KEY_CHANGE: SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; // Received when a messages is received (OTA) for this endpoint case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break;; // Received whenever the device changes state in the network case ZDO_STATE_CHANGE: SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if ( (SampleApp_NwkState == DEV_ZB_COORD) || (SampleApp_NwkState == DEV_ROUTER) || (SampleApp_NwkState == DEV_END_DEVICE) ) { // Start sending the periodic message in a regular interval. HalLedSet(HAL_LED_1, HAL_LED_MODE_ON); osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else { // Device is no longer in the network } break; default: break; } osal_msg_deallocate( (uint8 *)MSGpkt ); // Release the memory MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); // Next - if one is available } return (events ^ SYS_EVENT_MSG); // return unprocessed events } // Send a message out - This event is generated by a timer // (setup in SampleApp_Init()). if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) { SampleApp_SendPeriodicMessage(); // Send the periodic message // Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) ); return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT); // return unprocessed events } return 0; // Discard unknown events } /********************************************************************* * Event Generation Functions */ /********************************************************************* * @fn SampleApp_HandleKeys * * @brief Handles all key events for this device. * * @param shift - true if in shift/alt. * @param keys - bit field for key events. Valid entries: * HAL_KEY_SW_2 * HAL_KEY_SW_1 * * @return none */ void SampleApp_HandleKeys( uint8 shift, uint8 keys ) { (void)shift; // Intentionally unreferenced parameter if ( keys & HAL_KEY_SW_6 ) { /* This key sends the Flash Command is sent to Group 1. * This device will not receive the Flash Command from this * device (even if it belongs to group 1). */ SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION ); } if ( keys & HAL_KEY_SW_2 ) { /* The Flashr Command is sent to Group 1. * This key toggles this device in and out of group 1. * If this device doesn't belong to group 1, this application * will not receive the Flash command sent to group 1. */ aps_Group_t *grp; grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP ); if ( grp ) { // Remove from the group aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP ); } else { // Add to the flash group aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group ); } } } /********************************************************************* * LOCAL FUNCTIONS */ /********************************************************************* * @fn SampleApp_MessageMSGCB * * @brief Data message processor callback. This function processes * any incoming data - probably from other devices. So, based * on cluster ID, perform the intended action. * * @param none * * @return none */ void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint16 flashTime; unsigned char *buf; switch ( pkt->clusterId ) { case SAMPLEAPP_PERIODIC_CLUSTERID: buf = pkt->cmd.Data; HalUARTWrite(0,"\r\nTemp:", 7); HalUARTWrite(0, buf, 7); HalUARTWrite(0," Humi:", 6); HalUARTWrite(0, buf+7, 7); break; case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } } /********************************************************************* * @fn SampleApp_SendPeriodicMessage * * @brief Send the periodic message. * * @param none * * @return none */ void SampleApp_SendPeriodicMessage( void ) { char temp_buf[7]; char humi_buf[7]; char i; char buf[14]; float humi,temp; if(GetHumiAndTemp(&humi,&temp) == 0) { sprintf(humi_buf, (char *)"%f", humi); sprintf(temp_buf, (char *)"%f", temp); for(i=0; i<7; i++) { buf[i] = temp_buf[i]; buf[i+7] = humi_buf[i]; } AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, 14, (unsigned char*)buf, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); } } /********************************************************************* * @fn SampleApp_SendFlashMessage * * @brief Send the flash message to group 1. * * @param flashTime - in milliseconds * * @return none */ void SampleApp_SendFlashMessage( uint16 flashTime ) { uint8 buffer[3]; buffer[0] = (uint8)(SampleAppFlashCounter++); buffer[1] = LO_UINT16( flashTime ); buffer[2] = HI_UINT16( flashTime ); if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc, SAMPLEAPP_FLASH_CLUSTERID, 3, buffer, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else { // Error occurred in request to send. } } /********************************************************************* *********************************************************************/ 一、系统分层功能 感知层:用实验箱的两个传感器模块 传感器 1:温湿度传感器,采集温度、湿度数据。 传感器 2:红外对射 ,采集触发状态。 网络层: Zigbee 通信:传感器 1、2 的数据,经 Zigbee 节点传给协调器,协调器通过串口发 PC 端。 数据处理:解析串口数据,分主题发 MQTT 网络,或存数据库 。 应用层:用 Python 做终端,实现界面、串口、数据库交互(可加 MQTT),完成这些功能: 二、具体功能 数据上传: 远程设备实时收传感器 1 数据,格式:学号姓名缩写+温度+湿度 。 远程设备实时收传感器 2 数据,格式:学号姓名缩写+传感器名+interrupt 。 Mysql 数据库:建不同数据表存两个传感器数据,表含 学号姓名缩写、传感器名、数据值、传感器状态 等字段 。 命令下发: 发 学号姓名缩写+Num1Led+on ,传感器 1 连的 Zigbee 模块 LED2 亮;发 …+off 则灭 。 发 学号姓名缩写+Num2Led+on ,传感器 2 连的 Zigbee 模块 LED2 亮;发 …+off 则灭 。 数据联动: 传感器 1:温度>25 且湿度>60,其连的 Zigbee 模块 LED2 闪烁,远程设备、数据库表显示 “温湿度异常”;恢复后显示 “异常解除” 。 传感器 2:触发超 5 次,其连的 Zigbee 模块 LED2 闪烁,远程设备、数据库表显示 “传感状态异常”;恢复后显示 “传感异常解除” 。 强制解除:发 学号姓名缩写+Num1Led+relie ,传感器 1 连的 LED2 停闪,设备和表显示 “强制异常解除温湿度” ;发 …+Num2Led+relie 同理。 数据展示:Python 界面里,串口控制,实时显示传感器 1 的 学号姓名缩写、温度、湿度 数据,呈现底层传感器联动状态 。 根据所给代码和要求,完成功能,给出完整的代码

大家在看

recommend-type

超实用zimo21取字模软件.7z

超实用zimo21取字模软件.7z
recommend-type

AAA2.5及汉化补丁

Advanced Aircraft Analysis V2.5.1.53 (3A) 在win7 64位上安装测试。有注册机和安装视频。支持winxp和win732位和64位系统。 Darcorp Advanced Aircraft Analysis V2.5.1.53 (AAA) 软件是一款面向于高级用户的飞机设计和仿真分析软件,目前广泛应用于数十个国家的各种机构,已然成为飞机设计、开发、稳定性分析以及飞行控制的工业标准软件。适用于 FAR23、FAR25、UAV无人驾驶飞机与 Military 规范,为全球飞机公司(如波音公司)、政府部门(如 FAA)与学校采用于飞机初步设计、分析、与 3-D 绘图的一套完整软件工具。 Advanced Aircraft Analysis (AAA) 是行业标准的飞机设计,稳定性和控制分析软件。 安装在超过45个国家,AAA所使用的主要航空工程大学,飞机制造商和世界各地的军事组织。 Advanced Aircraft Analysis(AAA)是行业标准的飞机设计 AAA提供了一个功能强大的框架,以支持飞机初步设计迭代和非独特的过程。 AAA计划允许学生和初步设计工程师从早期的大小通过开环和闭环动态稳定性和灵敏度分析的重量,而该机的配置工作在监管和成本的限制。
recommend-type

MultiModalSA:CMU-MOSEI的多模态情感分析架构

多模态 CMU-MOSEI的多模态情感分析体系结构。 描述 该信息库包含四种多模式体系结构以及用于CMU-MOSEI的情感分析的相关培训和测试功能。 在数据文件夹中,提供了转录和标签,以用于的标准培训,验证和测试语句。 可以通过以下链接下载BERT嵌入(文本模式),COVAREP功能(音频模式)和FACET功能(视频模式): BERT嵌入: ://drive.google.com/file/d/13y2xoO1YlDrJ4Be2X6kjtMzfRBs7tBRg/view?usp COVAREP: ://drive.google.com/file/d/1XpRN8xoEMKxubBHaNyEivgRbnVY2iazu/view usp sharing 脸部表情: ://drive.google.com/file/d/1BSjMfKm7FQM8n3HHG5Gn9-dTifULC
recommend-type

MMC.rar_NEC mmc-1_nec-m

NEC控制芯片,09电子设计大赛必用,很好的资料,虽然不是我写的,但是肯定有用
recommend-type

TI-LP5009.pdf

TI-LP5009.pdf

最新推荐

recommend-type

(完整版)基因工程药物干扰素的制备.ppt

(完整版)基因工程药物干扰素的制备.ppt
recommend-type

Web2.0新特征图解解析

Web2.0是互联网发展的一个阶段,相对于早期的Web1.0时代,Web2.0具有以下显著特征和知识点: ### Web2.0的定义与特点 1. **用户参与内容生产**: - Web2.0的一个核心特征是用户不再是被动接收信息的消费者,而是成为了内容的生产者。这标志着“读写网络”的开始,用户可以在网络上发布信息、评论、博客、视频等内容。 2. **信息个性化定制**: - Web2.0时代,用户可以根据自己的喜好对信息进行个性化定制,例如通过RSS阅读器订阅感兴趣的新闻源,或者通过社交网络筛选自己感兴趣的话题和内容。 3. **网页技术的革新**: - 随着技术的发展,如Ajax、XML、JSON等技术的出现和应用,使得网页可以更加动态地与用户交互,无需重新加载整个页面即可更新数据,提高了用户体验。 4. **长尾效应**: - 在Web2.0时代,即使是小型或专业化的内容提供者也有机会通过互联网获得关注,这体现了长尾理论,即在网络环境下,非主流的小众产品也有机会与主流产品并存。 5. **社交网络的兴起**: - Web2.0推动了社交网络的发展,如Facebook、Twitter、微博等平台兴起,促进了信息的快速传播和人际交流方式的变革。 6. **开放性和互操作性**: - Web2.0时代倡导开放API(应用程序编程接口),允许不同的网络服务和应用间能够相互通信和共享数据,提高了网络的互操作性。 ### Web2.0的关键技术和应用 1. **博客(Blog)**: - 博客是Web2.0的代表之一,它支持用户以日记形式定期更新内容,并允许其他用户进行评论。 2. **维基(Wiki)**: - 维基是另一种形式的集体协作项目,如维基百科,任何用户都可以编辑网页内容,共同构建一个百科全书。 3. **社交网络服务(Social Networking Services)**: - 社交网络服务如Facebook、Twitter、LinkedIn等,促进了个人和组织之间的社交关系构建和信息分享。 4. **内容聚合器(RSS feeds)**: - RSS技术让用户可以通过阅读器软件快速浏览多个网站更新的内容摘要。 5. **标签(Tags)**: - 用户可以为自己的内容添加标签,便于其他用户搜索和组织信息。 6. **视频分享(Video Sharing)**: - 视频分享网站如YouTube,用户可以上传、分享和评论视频内容。 ### Web2.0与网络营销 1. **内容营销**: - Web2.0为内容营销提供了良好的平台,企业可以通过撰写博客文章、发布视频等内容吸引和维护用户。 2. **社交媒体营销**: - 社交网络的广泛使用,使得企业可以通过社交媒体进行品牌传播、产品推广和客户服务。 3. **口碑营销**: - 用户生成内容、评论和分享在Web2.0时代更易扩散,为口碑营销提供了土壤。 4. **搜索引擎优化(SEO)**: - 随着内容的多样化和个性化,SEO策略也必须适应Web2.0特点,注重社交信号和用户体验。 ### 总结 Web2.0是对互联网发展的一次深刻变革,它不仅仅是一个技术变革,更是人们使用互联网的习惯和方式的变革。Web2.0的时代特征与Web1.0相比,更加注重用户体验、社交互动和信息的个性化定制。这些变化为网络营销提供了新的思路和平台,也对企业的市场策略提出了新的要求。通过理解Web2.0的特点和应用,企业可以更好地适应互联网的发展趋势,实现与用户的深度互动和品牌的有效传播。
recommend-type

【C++编程新手必看】:一步步带你制作出风靡全球的“别踩白块儿”游戏

# 摘要 本文全面介绍C++编程在游戏开发中的应用,涵盖了从基础概念到具体实现的多个方面。首先,文章提供了游戏开发环境的搭建指南,包括编译器配置和开发工具的选择。随后,重点介绍了游戏主循环和基本框架的构建,强调了事件处理和渲染技术。在游戏逻辑和交互设计方面,本文阐述了界面布局、事件响应和游戏状态管理的核心实现。为了提升游戏体验,本文还探讨了添加音效和背景音乐以及开发高级游戏特性的方法。最后,文章介绍了性能优化和跨平台发布的过程,包括游戏的打包和针对不同平台的发布策略。本文旨在为C++游戏开发者提供一个实用的开发指南,帮助他们从零开始构建出性能优化、跨平台兼容的游戏。 # 关键字 C++编程;
recommend-type

使用scikit-learn训练模型来预测鸢尾花种类

<think>我们使用scikit-learn库来训练一个分类模型预测鸢尾花种类。鸢尾花数据集是scikit-learn内置的经典数据集,包含三种鸢尾花的四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和对应的类别标签。步骤:1.导入必要的库和数据集2.数据探索(可选,但建议了解数据)3.数据预处理(如划分训练集和测试集、标准化等)4.选择模型(例如KNN、随机森林等)5.训练模型6.模型评估7.使用模型进行预测下面以KNN(K近邻)算法为例,展示完整流程。</think>### 使用 scikit-learn 训练鸢尾花分类模型 以下是基于 scikit-learn 训练鸢尾花分类模型的
recommend-type

WWF工作流设计器C#源码解析及演示

### WWF工作流设计器控件C#源码知识点 #### 1. WWF(Windows Workflow Foundation)概述 WWF是微软公司推出的一个工作流框架,作为.NET Framework的一部分。它提供了一套丰富的API,用于设计、执行和管理工作流。工作流可以用于各种应用程序,包括Web应用、服务和桌面应用,使得开发者能够将复杂的业务逻辑以工作流的形式表现出来,简化业务流程自动化和管理。 #### 2. 工作流设计器控件(Workflow Designer Control) 工作流设计器控件是WWF中的一个组件,主要用于提供可视化设计工作流的能力。它允许用户通过拖放的方式在界面上添加、配置和连接工作流活动,从而构建出复杂的工作流应用。控件的使用大大降低了工作流设计的难度,并使得设计工作流变得直观和用户友好。 #### 3. C#源码分析 在提供的文件描述中提到了两个工程项目,它们均使用C#编写。下面分别对这两个工程进行介绍: - **WorkflowDesignerControl** - 该工程是工作流设计器控件的核心实现。它封装了设计工作流所需的用户界面和逻辑代码。开发者可以在自己的应用程序中嵌入这个控件,为最终用户提供一个设计工作流的界面。 - 重点分析:控件如何加载和显示不同的工作流活动、控件如何响应用户的交互、控件状态的保存和加载机制等。 - **WorkflowDesignerExample** - 这个工程是演示如何使用WorkflowDesignerControl的示例项目。它不仅展示了如何在用户界面中嵌入工作流设计器控件,还展示了如何处理用户的交互事件,比如如何在设计完工作流后进行保存、加载或执行等。 - 重点分析:实例程序如何响应工作流设计师的用户操作、示例程序中可能包含的事件处理逻辑、以及工作流的实例化和运行等。 #### 4. 使用Visual Studio 2008编译 文件描述中提到使用Visual Studio 2008进行编译通过。Visual Studio 2008是微软在2008年发布的集成开发环境,它支持.NET Framework 3.5,而WWF正是作为.NET 3.5的一部分。开发者需要使用Visual Studio 2008(或更新版本)来加载和编译这些代码,确保所有必要的项目引用、依赖和.NET 3.5的特性均得到支持。 #### 5. 关键技术点 - **工作流活动(Workflow Activities)**:WWF中的工作流由一系列的活动组成,每个活动代表了一个可以执行的工作单元。在工作流设计器控件中,需要能够显示和操作这些活动。 - **活动编辑(Activity Editing)**:能够编辑活动的属性是工作流设计器控件的重要功能,这对于构建复杂的工作流逻辑至关重要。 - **状态管理(State Management)**:工作流设计过程中可能涉及保存和加载状态,例如保存当前的工作流设计、加载已保存的工作流设计等。 - **事件处理(Event Handling)**:处理用户交互事件,例如拖放活动到设计面板、双击活动编辑属性等。 #### 6. 文件名称列表解释 - **WorkflowDesignerControl.sln**:解决方案文件,包含了WorkflowDesignerControl和WorkflowDesignerExample两个项目。 - **WorkflowDesignerControl.suo**:Visual Studio解决方案用户选项文件,该文件包含了开发者特有的个性化设置,比如窗口布局、断点位置等。 - **Thumbs.db**:缩略图缓存文件,由Windows自动生成,用于存储文件夹中的图片缩略图,与WWF工作流设计器控件功能无关。 - **WorkflowDesignerExample**:可能是一个文件夹,包含了示例工程相关的所有文件,或者是示例工程的可执行文件。 - **EULA.txt**:最终用户许可协议文本文件,通常说明了软件的版权和使用许可条件。 综上所述,该文件集包含了WWF工作流设计器控件的完整C#源码以及相应的Visual Studio项目文件,开发者可以利用这些资源深入理解WWF工作流设计器控件的工作机制,并将其应用于实际的项目开发中,实现工作流的设计和管理功能。
recommend-type

CAD数据在ANSA中:完美修复几何数据的策略与方法

# 摘要 CAD数据的准确性和几何完整性对于产品设计和工程分析至关重要。本文首先强调了CAD数据和几何修复的重要性,随后介绍了ANSA软件在处理CAD数据中的角色。通过详细的分析,本文探讨了几何数据的常见问题,以及有效的手动和自动修复技术。文中还提供了几何修复在实际应用中的案例分析,并讨论了行业未来对几何修复技术的需求和新兴技术趋势。文章旨在为CAD数据几何修复提供全面的理论知识、诊断方法和修复策略,并
recommend-type

编写verilog代码实现以上的规格化功能

<think>我们有一个16位的二进制数,其格式如下:-a15:尾数符号位(1位)-a14-a5:尾数数值位(10位)-a4:指数符号位(1位)-a3-a0:指数数值位(4位)规格化的目标:确保尾数数值位的最高位a14为1(即尾数的绝对值在[0.5,1)范围内)。步骤:1.提取输入信号的各个部分:尾数符号位、尾数数值位、指数符号位、指数数值位。2.将尾数数值位(10位)视为无符号整数M(范围0到1023),我们需要通过左移操作使得M的最高位为1(即M>=512)。同时记录左移的位数(shift_count)。3.调整指数:新的指数=原指数-shift_count(因为尾数左移相当于乘以2^sh
recommend-type

探索ARM9 2410开发板与wince5.0系统的高级实验

标题中的“周立功ARM (magicarm2410) 高级实验”指明了文档内容涉及周立功品牌下的ARM9 2410开发板的高级使用实验。ARM9 2410是基于ARM920T内核的处理器,广泛应用于嵌入式系统开发。周立功是一家在电子与嵌入式系统领域内具有影响力的公司,提供嵌入式教学和开发解决方案。MagicARM2410是该公司的某型号开发板,可能专为教学和实验设计,携带了特定的实验内容,例如本例中的“eva例程”。 描述提供了额外的背景信息,说明周立功ARM9 2410开发板上预装有Windows CE 5.0操作系统,以及该开发板附带的EVA例程。EVA可能是用于实验教学的示例程序或演示程序。文档中还提到,虽然书店出售的《周立功 ARM9开发实践》书籍中没有包含EVA的源码,但该源码实际上是随开发板提供的。这意味着,EVA例程的源码并不在书籍中公开,而是需要直接从开发板上获取。这对于那些希望深入研究和修改EVA例程的学生和开发者来说十分重要。 标签中的“magicarm2410”和“周立功ARM”是对文档和开发板的分类标识。这些标签有助于在文档管理系统或资料库中对相关文件进行整理和检索。 至于“压缩包子文件的文件名称列表:新建文件夹”,这表明相关文件已经被打包压缩,但具体的文件内容和名称没有在描述中列出。我们仅知道压缩包内至少存在一个“新建文件夹”,这可能意味着用户需要进一步操作来查看或解压出文件夹中的内容。 综合以上信息,知识点主要包括: 1. ARM9 2410开发板:一款基于ARM920T内核的处理器的嵌入式开发板,适用于教学和项目实验。 2. Windows CE 5.0系统:这是微软推出的专为嵌入式应用设计的操作系统,提供了一个可定制、可伸缩的、实时的操作环境。 3. EVA例程:一个嵌入式系统开发的教学或实验示例程序。它可能被设计用于演示特定功能或技术,如显示、控制或通信。 4. 开发实践书籍与源码提供:《周立功 ARM9开发实践》一书可能详细介绍了ARM9 2410开发板的使用方法,但书中的内容不包含EVA例程的源码,源码需要通过其他途径获得。 5. 文件打包压缩:文档可能以压缩包的形式存在,包含了需要的内容,但具体内容未知,需要解压缩之后才能查看。 了解这些知识点后,对于从事嵌入式系统开发的工程师或者学生来说,可以更好地利用周立功 ARM9 2410开发板进行学习和实验,尤其是可以进行更深入的研究和实验设计,通过EVA例程的源码来理解嵌入式系统的运行机制和程序结构。同时,也能够使用Windows CE 5.0系统环境来开发相应的应用程序。
recommend-type

【ANSA网格生成手册】:创建高效高质量网格的6个技巧

# 摘要 ANSA软件作为一款强大的前处理工具,在工程仿真领域扮演着重要角色。本文首先概述了ANSA软件的基本功能以及网格生成技术的基础知识。接着深入探讨了不同网格类型的选择及其优缺点,同时强调了网格密度与质量控制的重要性。文中详细介绍了高级网格生成技巧,包括自适应网格技术和多重网格以及混合网格技术的应用。此外,本文还提供了网格生成在实际应用中的前处理
recommend-type

能否简单一点

<think>我们简化问题:统计从列表第一个字典开始,连续多少个字典的money字段为正数。注意:我们只关心从第一个开始的连续正数,一旦遇到非正数(包括0和负数)或者缺失money字段,就停止计数。简单实现思路:1.遍历列表中的每个字典(从第一个开始)2.对于每个字典,检查是否有'money'键,且其值大于0。3.如果满足条件,计数器加1;否则立即停止遍历并返回当前计数。代码实现:</think>### 简化版:统计连续正数 `money` 字段 #### 解决方案代码 ```python def count_positive_money(dict_list): count = 0