/*数据库*/
create database if not exists iot;
use iot;

/*用户表*/
create table if not exists user
(
    `id`            int not null auto_increment comment '主键编号',
    `oper_id`       int         default null comment '操作序号',
    `name`          varchar(20) default null comment '用户名',
    `sex`           varchar(1)  default null comment '性别',
    `nation`        varchar(10) default null comment '民族',
    `phone`         varchar(11) default null comment '手机号',
    `id_car_no`     varchar(18) default null comment '身份证号',
    `id_card_back`  tinytext    default null comment '身份证反面照片',
    `id_card_front` tinytext    default null comment '身份证正面照片',
    `face`          tinytext    default null comment '人脸照片',
    `address`       tinytext    default null comment '身份证地址',
    `create_time`   datetime    default null comment '创建时间',
    `create_user`   varchar(20) default null comment '创建用户',
    `modify_time`   datetime    default null comment '更新时间',
    `modify_user`   varchar(20) default null comment '更新用户',
    `deleted`       tinyint(1)  default 0 comment '是否删除',
    `cid`           int         default null comment '所属公司编号',
    primary key (`id`)
    );

/*公司表*/
create table if not exists company
(
    `id`            int not null auto_increment comment '主键编号',
    `oper_id`       int            default null comment '操作序号',
    `org_code`      varchar(18)    default null comment '组织机构代码',
    `name`          varchar(30)    default null comment '公司名称',
    `license_no`    varchar(18)    default null comment '营业执照号',
    `license_pic`   tinytext       default null comment '营业执照照片',
    `address`       varchar(50)    default null comment '公司地址',
    `capital`       varchar(20)    default null comment '注册资金',
    `person`        varchar(20)    default null comment '法定代表人',
    `business`      text       default null comment '经营范围',
    `type`          varchar(20)    default null comment '公司类型',
    `period`        varchar(30)    default null comment '营业期限',
    `registrar`     varchar(20)    default null comment '登记机关',
    `register_date` datetime       default null comment '登记日期',
    `set_date`      varchar(20)    default null comment '成立日期',
    `shop_name`     varchar(30)    default null comment '门店名称',
    `shop_pic`      tinytext       default null comment '门店照片',
    `service_tel`   varchar(30)    default null comment '服务电话',
    `env_pic`       tinytext       default null comment '环境照片',
    `city`          varchar(20)    default null comment '省市',
    `street`        varchar(20)    default null comment '街道',
    `create_time`   datetime       default null comment '创建时间',
    `create_user`   varchar(20)    default null comment '创建用户',
    `modify_time`   datetime       default null comment '更新时间',
    `modify_user`   varchar(20)    default null comment '更新用户',
    `deleted`       tinyint(1)     default 0 comment '是否删除',
    `cid`           int            default null comment '所属公司编号',
    primary key (`id`)
    );

/*公司成员表*/
create table if not exists company_member
(
    `id`            int not null auto_increment comment '主键编号',
    `oper_id`       int            default null comment '操作序号',
    `company_id`    int            default null comment '所属公司编号',
    `uid`           int            default null comment '用户编号',
    `create_time`   datetime       default null comment '创建时间',
    `create_user`   varchar(20)    default null comment '创建用户',
    `modify_time`   datetime       default null comment '更新时间',
    `modify_user`   varchar(20)    default null comment '更新用户',
    `deleted`       tinyint(1)     default 0 comment '是否删除',
    `cid`           int            default null comment '所属公司编号',
    primary key (`id`)
    );


/*标签表*/
create table if not exists tag
(
    `id`          int not null auto_increment comment '主键编号',
    `oper_id`     int         default null comment '操作序号',
    `name`        varchar(10) default null comment '标签名称',
    `type`        varchar(30) default null comment '标签类型',
    `description` tinytext    default null comment '标签描述',
    `pid`         int         default null comment '父标签编号',
    `uid`         int         default null comment '所属用户',
    `company_id`  int         default null comment '所属公司',
    `create_time` datetime    default null comment '创建时间',
    `create_user` varchar(20) default null comment '创建用户',
    `modify_time` datetime    default null comment '更新时间',
    `modify_user` varchar(20) default null comment '更新用户',
    `deleted`     tinyint(1)  default 0 comment '是否删除',
    `cid`         int         default null comment '所属公司编号',
    primary key (`id`)
    );

/*设备表*/
create table if not exists device
(
    `id`          int not null auto_increment comment '主键编号',
    `oper_id`     int         default null comment '操作序号',
    `name`        varchar(30) default null comment '设备名称',
    `model`       varchar(60) default null comment '设备型号',
    `type`        varchar(10) default null comment '设备类型',
    `description` tinytext    default null comment '设备描述',
    `uid`         int         default null comment '所属用户',
    `tag_id`      int         default null comment '所属标签',
    `create_time` datetime    default null comment '创建时间',
    `create_user` varchar(20) default null comment '创建用户',
    `modify_time` datetime    default null comment '更新时间',
    `modify_user` varchar(20) default null comment '更新用户',
    `deleted`     tinyint(1)  DEFAULT 0 COMMENT '是否删除',
    `cid`         int         default null comment '所属公司编号',
    primary key (`id`)
    );


/*设备状态表*/
create table if not exists device_state
(
    `id`          int not null auto_increment comment '主键编号',
    `oper_id`     int         default null comment '操作序号',
    `model`       varchar(60) default null comment '设备型号',
    `type`        varchar(10) default null comment '设备类型',
    `operate`     varchar(30) default null comment '操作码',
    `operate_no`  varchar(30) default null comment '操作序列号',
    `switch`      tinyint     default null comment '设备开关状态',
    `current`     float       default null comment '设备当前电流',
    `voltage`     float       default null comment '设备当前电压',
    `active_power` float       default null comment '设备当前功率',
    `power_factor` float       default null comment '设备当前功率因数',
    `power`       float       default null comment '设备当前功率',
    `hz`          float       default null comment '设备当前频率',
    `create_time` datetime    default null comment '创建时间',
    `create_user` varchar(20) default null comment '创建用户',
    `modify_time` datetime    default null comment '更新时间',
    `modify_user` varchar(20) default null comment '更新用户',
    `deleted`     tinyint(1)  DEFAULT 0 COMMENT '是否删除',
    `cid`         int         default null comment '所属公司编号',
    primary key (`id`)
    );

/*mqtt消息表*/
create table if not exists mqtt_msg
(
    `id`          int not null auto_increment comment '主键编号',
    `oper_id`     int         default null comment '操作序号',
    `req`         json        default null comment '请求报文',
    `req_topic`   tinytext    default null comment '请求主题',
    `res`         json        default null comment '响应报文',
    `res_topic`   tinytext    default null comment '响应主题',
    `create_time` datetime    default null comment '创建时间',
    `create_user` varchar(20) default null comment '创建用户',
    `modify_time` datetime    default null comment '更新时间',
    `modify_user` varchar(20) default null comment '更新用户',
    `deleted`     tinyint(1)  DEFAULT 0 COMMENT '是否删除',
    `cid`         int         default null comment '所属公司编号',
    primary key (`id`)
    );

/*支付配置*/
CREATE TABLE if not exists `pay_config` (
	`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '主键编号',
	`oper_id` INT(10) NULL DEFAULT NULL,
	`wx_app_id` VARCHAR(32) NULL DEFAULT NULL COMMENT '微信公众号ID' COLLATE 'utf8mb3_general_ci',
	`wx_app_secret` VARCHAR(32) NULL DEFAULT NULL COMMENT '微信公众号秘钥' COLLATE 'utf8mb3_general_ci',
	`wx_app_pay_key` VARCHAR(32) NULL DEFAULT NULL COMMENT '微信商户支付APIV2秘钥' COLLATE 'utf8mb3_general_ci',
	`wx_api_cert` VARCHAR(4096) NULL DEFAULT NULL COMMENT '微信支付的API证书（格式：p12）' COLLATE 'utf8mb4_general_ci',
	`mch_id` VARCHAR(32) NULL DEFAULT NULL COMMENT '微信商户号' COLLATE 'utf8mb3_general_ci',
	`wx_enable` INT(10) NOT NULL DEFAULT '1' COMMENT '是否启用微信充值，0-否 1-是',
	`alipay_public_key` VARCHAR(2048) NULL DEFAULT NULL COMMENT '支付宝支付公钥' COLLATE 'utf8mb3_general_ci',
	`alipay_private_key` VARCHAR(2048) NULL DEFAULT NULL COMMENT '支付宝支付私钥' COLLATE 'utf8mb3_general_ci',
	`alipay_app_id` VARCHAR(32) NULL DEFAULT NULL COMMENT '支付宝商户ID' COLLATE 'utf8mb3_general_ci',
	`wx_mp_app_id` VARCHAR(32) NULL DEFAULT NULL COMMENT '微信小程序的appid' COLLATE 'utf8mb4_general_ci',
	`wx_mp_app_secret` VARCHAR(32) NULL DEFAULT NULL COMMENT '小程序密钥' COLLATE 'utf8mb4_general_ci',
	`biz_id` VARCHAR(32) NULL DEFAULT NULL COMMENT '业务ID' COLLATE 'utf8mb3_general_ci',
	`biz_name` VARCHAR(64) NULL DEFAULT NULL COMMENT '业务名称' COLLATE 'utf8mb3_general_ci',
	`callback_url` VARCHAR(255) NULL DEFAULT NULL COMMENT '支付回调地址' COLLATE 'utf8mb3_general_ci',
	`refund_notify_url` VARCHAR(255) NULL DEFAULT NULL COMMENT '退款结果业务回调地址' COLLATE 'utf8mb4_general_ci',
	`app_key` VARCHAR(32) NULL DEFAULT NULL COMMENT '应用key' COLLATE 'utf8mb3_general_ci',
	`alipay_enable` INT(10) NOT NULL DEFAULT '1' COMMENT '否是启用支付宝。0-否 1-是',
	`create_user` VARCHAR(30) NULL DEFAULT NULL COMMENT '创建人' COLLATE 'utf8mb3_general_ci',
	`create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
	`create_remark` VARCHAR(100) NULL DEFAULT NULL COMMENT '创建备注' COLLATE 'utf8mb3_general_ci',
	`modify_user` VARCHAR(30) NULL DEFAULT NULL COMMENT '修改人' COLLATE 'utf8mb3_general_ci',
	`modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
	`modify_remark` VARCHAR(200) NULL DEFAULT NULL COMMENT '修改备注' COLLATE 'utf8mb3_general_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COMMENT='支付配置'
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=1
;

CREATE TABLE if not exists `recharge_order` (
	`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '主键，自动递增',
	`oper_id` INT(10) NULL DEFAULT NULL,
	`order_no` VARCHAR(32) NOT NULL COMMENT '订单号' COLLATE 'utf8mb4_general_ci',
	`uid` INT(10) NOT NULL COMMENT '用户ID',
	`money` DECIMAL(10,2) NULL DEFAULT '0.00' COMMENT '支付金额，单位：元',
	`refund` DECIMAL(10,2) NULL DEFAULT NULL COMMENT '已退金额，单位：元',
	`pay_type` INT(10) NULL DEFAULT NULL COMMENT '支付方式:1-微信 2-支付宝',
	`status` TINYINT(3) NULL DEFAULT '0' COMMENT '订单状态。0-待支付 1-支付中 2-支付成功 3-支付失败 4-超时未支付 5-已退款',
	`remark` VARCHAR(255) NULL DEFAULT NULL COMMENT '备注' COLLATE 'utf8mb3_general_ci',
	`pay_time` DATETIME NULL DEFAULT NULL COMMENT '支付时间',
	`create_user` VARCHAR(30) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	`create_time` DATETIME NULL DEFAULT NULL,
	`create_remark` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	`modify_user` VARCHAR(30) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
	`modify_time` DATETIME NULL DEFAULT NULL,
	`modify_remark` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	PRIMARY KEY (`id`) USING BTREE,
	INDEX `idx_idnum` (`uid`) USING BTREE
)
COMMENT='充值订单'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=1
;

