|
|
|
|
@ -0,0 +1,523 @@
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 数智水管家数据库设计 v2.0
|
|
|
|
|
-- 创建日期:2025-11-13
|
|
|
|
|
-- 适配框架:RuoYi v4.x+
|
|
|
|
|
-- 数据库版本:MySQL 5.7+
|
|
|
|
|
-- 表数量:12张核心表 + 2个视图
|
|
|
|
|
-- =============================================
|
|
|
|
|
|
|
|
|
|
-- 创建数据库
|
|
|
|
|
CREATE DATABASE IF NOT EXISTS `water_manager`
|
|
|
|
|
DEFAULT CHARACTER SET utf8mb4
|
|
|
|
|
DEFAULT COLLATE utf8mb4_general_ci;
|
|
|
|
|
|
|
|
|
|
USE `water_manager`;
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 1. 用户表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_user`;
|
|
|
|
|
CREATE TABLE `water_user` (
|
|
|
|
|
`user_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
|
|
|
|
`phone` VARCHAR(11) DEFAULT NULL COMMENT '手机号',
|
|
|
|
|
`password` VARCHAR(128) DEFAULT NULL COMMENT '密码(BCrypt加密)',
|
|
|
|
|
`nick_name` VARCHAR(50) DEFAULT NULL COMMENT '昵称',
|
|
|
|
|
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
|
|
|
|
|
`gender` CHAR(1) DEFAULT '0' COMMENT '性别(0未知 1男 2女)',
|
|
|
|
|
`openid` VARCHAR(128) DEFAULT NULL COMMENT '微信openid',
|
|
|
|
|
`unionid` VARCHAR(128) DEFAULT NULL COMMENT '微信unionid',
|
|
|
|
|
`balance` DECIMAL(10,2) DEFAULT 0.00 COMMENT '账户余额',
|
|
|
|
|
`total_orders` INT(11) DEFAULT 0 COMMENT '订单总数(冗余)',
|
|
|
|
|
`status` CHAR(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`user_id`),
|
|
|
|
|
UNIQUE KEY `uk_phone` (`phone`),
|
|
|
|
|
UNIQUE KEY `uk_openid` (`openid`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_create_time` (`create_time`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 2. 员工表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_staff`;
|
|
|
|
|
CREATE TABLE `water_staff` (
|
|
|
|
|
`staff_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
|
|
|
|
|
`user_id` BIGINT(20) DEFAULT NULL COMMENT '关联sys_user的user_id',
|
|
|
|
|
`employee_no` VARCHAR(20) NOT NULL COMMENT '工号',
|
|
|
|
|
`staff_name` VARCHAR(50) NOT NULL COMMENT '姓名',
|
|
|
|
|
`phone` VARCHAR(11) NOT NULL COMMENT '手机号',
|
|
|
|
|
`dept_id` BIGINT(20) DEFAULT NULL COMMENT '部门ID(关联sys_dept)',
|
|
|
|
|
`position` VARCHAR(50) DEFAULT NULL COMMENT '职位',
|
|
|
|
|
`status` CHAR(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
|
|
|
|
`total_orders` INT(11) DEFAULT 0 COMMENT '工单总数(冗余)',
|
|
|
|
|
`completed_orders` INT(11) DEFAULT 0 COMMENT '完成工单数(冗余)',
|
|
|
|
|
`avg_rating` DECIMAL(3,2) DEFAULT 5.00 COMMENT '平均评分(冗余)',
|
|
|
|
|
`avg_duration` INT(11) DEFAULT 0 COMMENT '平均服务时长-分钟(冗余)',
|
|
|
|
|
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`staff_id`),
|
|
|
|
|
UNIQUE KEY `uk_employee_no` (`employee_no`),
|
|
|
|
|
UNIQUE KEY `uk_phone` (`phone`),
|
|
|
|
|
KEY `idx_user_id` (`user_id`),
|
|
|
|
|
KEY `idx_dept_id` (`dept_id`),
|
|
|
|
|
KEY `idx_status` (`status`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 3. 设备表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_device`;
|
|
|
|
|
CREATE TABLE `water_device` (
|
|
|
|
|
`device_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '设备ID',
|
|
|
|
|
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
|
|
|
|
|
`sn` VARCHAR(50) NOT NULL COMMENT '设备编号(唯一)',
|
|
|
|
|
`device_name` VARCHAR(100) DEFAULT NULL COMMENT '设备名称',
|
|
|
|
|
`device_type` VARCHAR(50) DEFAULT '智能净水器' COMMENT '设备类型',
|
|
|
|
|
`model` VARCHAR(50) DEFAULT NULL COMMENT '设备型号',
|
|
|
|
|
`status` CHAR(1) DEFAULT '1' COMMENT '状态(0离线 1在线 2故障)',
|
|
|
|
|
`install_address` VARCHAR(255) DEFAULT NULL COMMENT '安装地址',
|
|
|
|
|
`location_lat` DECIMAL(10,7) DEFAULT NULL COMMENT '纬度',
|
|
|
|
|
`location_lng` DECIMAL(10,7) DEFAULT NULL COMMENT '经度',
|
|
|
|
|
`bind_time` DATETIME DEFAULT NULL COMMENT '绑定时间',
|
|
|
|
|
`last_online_time` DATETIME DEFAULT NULL COMMENT '最后在线时间',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`device_id`),
|
|
|
|
|
UNIQUE KEY `uk_sn` (`sn`),
|
|
|
|
|
KEY `idx_user_id` (`user_id`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_bind_time` (`bind_time`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 4. 滤芯表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_filter`;
|
|
|
|
|
CREATE TABLE `water_filter` (
|
|
|
|
|
`filter_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '滤芯ID',
|
|
|
|
|
`device_id` BIGINT(20) NOT NULL COMMENT '设备ID',
|
|
|
|
|
`filter_name` VARCHAR(50) NOT NULL COMMENT '滤芯名称(如:PP棉滤芯)',
|
|
|
|
|
`filter_type` VARCHAR(50) DEFAULT NULL COMMENT '滤芯类型',
|
|
|
|
|
`model` VARCHAR(50) DEFAULT NULL COMMENT '滤芯型号',
|
|
|
|
|
`install_time` DATETIME DEFAULT NULL COMMENT '安装时间',
|
|
|
|
|
`total_days` INT(11) DEFAULT 180 COMMENT '总使用天数(默认180天)',
|
|
|
|
|
`used_days` INT(11) DEFAULT 0 COMMENT '已使用天数',
|
|
|
|
|
`life_percentage` INT(11) DEFAULT 100 COMMENT '剩余寿命百分比',
|
|
|
|
|
`next_replace_time` DATE DEFAULT NULL COMMENT '预计更换时间',
|
|
|
|
|
`status` CHAR(1) DEFAULT '0' COMMENT '状态(0正常 1需更换)',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`filter_id`),
|
|
|
|
|
KEY `idx_device_id` (`device_id`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_life_percentage` (`life_percentage`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='滤芯表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 5. 水质检测记录表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_quality`;
|
|
|
|
|
CREATE TABLE `water_quality` (
|
|
|
|
|
`quality_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '检测ID',
|
|
|
|
|
`device_id` BIGINT(20) NOT NULL COMMENT '设备ID',
|
|
|
|
|
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
|
|
|
|
|
`order_id` BIGINT(20) DEFAULT NULL COMMENT '关联订单ID(如果是服务订单)',
|
|
|
|
|
`test_time` DATETIME NOT NULL COMMENT '检测时间',
|
|
|
|
|
`test_address` VARCHAR(255) DEFAULT NULL COMMENT '检测地址',
|
|
|
|
|
`quality_level` VARCHAR(20) DEFAULT NULL COMMENT '水质等级(优质/良好/一般/较差)',
|
|
|
|
|
`quality_desc` VARCHAR(500) DEFAULT NULL COMMENT '水质描述',
|
|
|
|
|
|
|
|
|
|
-- 检测指标
|
|
|
|
|
`ph_value` DECIMAL(4,2) DEFAULT NULL COMMENT 'pH值(6.5-8.5)',
|
|
|
|
|
`turbidity` DECIMAL(6,2) DEFAULT NULL COMMENT '浊度 NTU(≤1)',
|
|
|
|
|
`residual_chlorine` DECIMAL(6,2) DEFAULT NULL COMMENT '余氯 mg/L(0.05-4)',
|
|
|
|
|
`total_hardness` DECIMAL(8,2) DEFAULT NULL COMMENT '总硬度 mg/L(≤450)',
|
|
|
|
|
`tds` DECIMAL(8,2) DEFAULT NULL COMMENT 'TDS溶解性固体 mg/L(≤1000)',
|
|
|
|
|
`cod` DECIMAL(8,2) DEFAULT NULL COMMENT 'COD化学需氧量 mg/L',
|
|
|
|
|
`ammonia_nitrogen` DECIMAL(6,2) DEFAULT NULL COMMENT '氨氮 mg/L',
|
|
|
|
|
|
|
|
|
|
`report_url` VARCHAR(255) DEFAULT NULL COMMENT '检测报告URL',
|
|
|
|
|
`status` CHAR(1) DEFAULT '0' COMMENT '状态(0检测中 1已完成)',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`quality_id`),
|
|
|
|
|
KEY `idx_device_id` (`device_id`),
|
|
|
|
|
KEY `idx_user_id` (`user_id`),
|
|
|
|
|
KEY `idx_order_id` (`order_id`),
|
|
|
|
|
KEY `idx_test_time` (`test_time`),
|
|
|
|
|
KEY `idx_quality_level` (`quality_level`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='水质检测记录表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 6. 商品表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_product`;
|
|
|
|
|
CREATE TABLE `water_product` (
|
|
|
|
|
`product_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
|
|
|
|
|
`product_name` VARCHAR(100) NOT NULL COMMENT '商品名称',
|
|
|
|
|
`product_desc` VARCHAR(500) DEFAULT NULL COMMENT '商品描述',
|
|
|
|
|
`category` VARCHAR(50) DEFAULT NULL COMMENT '商品分类(purifier净水器/meter水表/parts配件/service服务)',
|
|
|
|
|
`price` DECIMAL(10,2) DEFAULT 0.00 COMMENT '商品价格',
|
|
|
|
|
`stock` INT(11) DEFAULT 0 COMMENT '库存数量',
|
|
|
|
|
`image_url` VARCHAR(255) DEFAULT NULL COMMENT '商品图片URL',
|
|
|
|
|
`icon` VARCHAR(50) DEFAULT NULL COMMENT '图标Emoji',
|
|
|
|
|
`status` CHAR(1) DEFAULT '0' COMMENT '状态(0上架 1下架)',
|
|
|
|
|
`sort_order` INT(11) DEFAULT 0 COMMENT '排序',
|
|
|
|
|
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`product_id`),
|
|
|
|
|
KEY `idx_category` (`category`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_sort_order` (`sort_order`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 7. 服务订单表(核心表)
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_service_order`;
|
|
|
|
|
CREATE TABLE `water_service_order` (
|
|
|
|
|
`order_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
|
|
|
|
|
`order_no` VARCHAR(50) NOT NULL COMMENT '订单号(唯一)',
|
|
|
|
|
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
|
|
|
|
|
`staff_id` BIGINT(20) DEFAULT NULL COMMENT '负责员工ID',
|
|
|
|
|
|
|
|
|
|
-- 订单类型与来源
|
|
|
|
|
`service_type` VARCHAR(50) NOT NULL COMMENT '服务类型(设备安装/滤芯更换/维修/订购/水质检测)',
|
|
|
|
|
`order_source` VARCHAR(20) DEFAULT 'user' COMMENT '订单来源(user用户下单/admin后台派单)',
|
|
|
|
|
|
|
|
|
|
-- 订单状态
|
|
|
|
|
`order_status` VARCHAR(20) DEFAULT 'pending' COMMENT '订单状态(pending待支付/paid已支付/accepted已接单/processing处理中/completed已完成/cancelled已取消)',
|
|
|
|
|
`payment_status` VARCHAR(20) DEFAULT 'unpaid' COMMENT '支付状态(unpaid未支付/paid已支付/refunded已退款)',
|
|
|
|
|
|
|
|
|
|
-- 金额信息
|
|
|
|
|
`amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '订单金额',
|
|
|
|
|
`actual_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '实付金额',
|
|
|
|
|
`discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
|
|
|
|
|
`payment_method` VARCHAR(20) DEFAULT NULL COMMENT '支付方式(wechat微信/balance余额/alipay支付宝)',
|
|
|
|
|
|
|
|
|
|
-- 服务信息
|
|
|
|
|
`contact_name` VARCHAR(50) DEFAULT NULL COMMENT '联系人',
|
|
|
|
|
`contact_phone` VARCHAR(11) DEFAULT NULL COMMENT '联系电话',
|
|
|
|
|
`service_address` VARCHAR(255) DEFAULT NULL COMMENT '服务地址',
|
|
|
|
|
`location_lat` DECIMAL(10,7) DEFAULT NULL COMMENT '纬度',
|
|
|
|
|
`location_lng` DECIMAL(10,7) DEFAULT NULL COMMENT '经度',
|
|
|
|
|
`description` TEXT DEFAULT NULL COMMENT '服务描述/问题描述',
|
|
|
|
|
`priority` VARCHAR(20) DEFAULT 'normal' COMMENT '优先级(normal普通/high紧急)',
|
|
|
|
|
|
|
|
|
|
-- 配送信息
|
|
|
|
|
`delivery_distance` DECIMAL(10,2) DEFAULT NULL COMMENT '配送距离(公里)',
|
|
|
|
|
`estimated_duration` INT(11) DEFAULT NULL COMMENT '预计时长(分钟)',
|
|
|
|
|
`actual_duration` INT(11) DEFAULT NULL COMMENT '实际时长(分钟)',
|
|
|
|
|
|
|
|
|
|
-- 时间轴
|
|
|
|
|
`submit_time` DATETIME DEFAULT NULL COMMENT '提交时间',
|
|
|
|
|
`payment_time` DATETIME DEFAULT NULL COMMENT '支付时间',
|
|
|
|
|
`accept_time` DATETIME DEFAULT NULL COMMENT '接单时间',
|
|
|
|
|
`start_time` DATETIME DEFAULT NULL COMMENT '开始配送时间',
|
|
|
|
|
`complete_time` DATETIME DEFAULT NULL COMMENT '完成时间',
|
|
|
|
|
`cancel_time` DATETIME DEFAULT NULL COMMENT '取消时间',
|
|
|
|
|
|
|
|
|
|
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`order_id`),
|
|
|
|
|
UNIQUE KEY `uk_order_no` (`order_no`),
|
|
|
|
|
KEY `idx_user_id` (`user_id`),
|
|
|
|
|
KEY `idx_staff_id` (`staff_id`),
|
|
|
|
|
KEY `idx_order_status` (`order_status`),
|
|
|
|
|
KEY `idx_service_type` (`service_type`),
|
|
|
|
|
KEY `idx_submit_time` (`submit_time`),
|
|
|
|
|
KEY `idx_staff_status` (`staff_id`, `order_status`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务订单表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 8. 订单商品关联表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_order_product`;
|
|
|
|
|
CREATE TABLE `water_order_product` (
|
|
|
|
|
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
|
|
|
`order_id` BIGINT(20) NOT NULL COMMENT '订单ID',
|
|
|
|
|
`product_id` BIGINT(20) NOT NULL COMMENT '商品ID',
|
|
|
|
|
`product_name` VARCHAR(100) NOT NULL COMMENT '商品名称(冗余)',
|
|
|
|
|
`product_price` DECIMAL(10,2) NOT NULL COMMENT '商品单价(冗余)',
|
|
|
|
|
`quantity` INT(11) DEFAULT 1 COMMENT '购买数量',
|
|
|
|
|
`total_price` DECIMAL(10,2) NOT NULL COMMENT '小计金额',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_order_id` (`order_id`),
|
|
|
|
|
KEY `idx_product_id` (`product_id`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单商品关联表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 9. 订单评价表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_evaluation`;
|
|
|
|
|
CREATE TABLE `water_evaluation` (
|
|
|
|
|
`evaluation_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '评价ID',
|
|
|
|
|
`order_id` BIGINT(20) NOT NULL COMMENT '订单ID',
|
|
|
|
|
`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',
|
|
|
|
|
`staff_id` BIGINT(20) DEFAULT NULL COMMENT '员工ID',
|
|
|
|
|
`rating` DECIMAL(2,1) DEFAULT 5.0 COMMENT '综合评分(1-5星)',
|
|
|
|
|
`service_rating` DECIMAL(2,1) DEFAULT 5.0 COMMENT '服务态度评分',
|
|
|
|
|
`quality_rating` DECIMAL(2,1) DEFAULT 5.0 COMMENT '服务质量评分',
|
|
|
|
|
`speed_rating` DECIMAL(2,1) DEFAULT 5.0 COMMENT '服务速度评分',
|
|
|
|
|
`content` TEXT DEFAULT NULL COMMENT '评价内容',
|
|
|
|
|
`images` VARCHAR(1000) DEFAULT NULL COMMENT '评价图片(JSON数组)',
|
|
|
|
|
`is_anonymous` CHAR(1) DEFAULT '0' COMMENT '是否匿名(0否 1是)',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`evaluation_id`),
|
|
|
|
|
UNIQUE KEY `uk_order_id` (`order_id`),
|
|
|
|
|
KEY `idx_user_id` (`user_id`),
|
|
|
|
|
KEY `idx_staff_id` (`staff_id`),
|
|
|
|
|
KEY `idx_rating` (`rating`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单评价表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 10. 系统消息表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_message`;
|
|
|
|
|
CREATE TABLE `water_message` (
|
|
|
|
|
`message_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '消息ID',
|
|
|
|
|
`user_id` BIGINT(20) DEFAULT NULL COMMENT '用户ID(用户消息)',
|
|
|
|
|
`staff_id` BIGINT(20) DEFAULT NULL COMMENT '员工ID(员工消息)',
|
|
|
|
|
`message_type` VARCHAR(50) DEFAULT NULL COMMENT '消息类型(order订单/device设备/system系统/service服务)',
|
|
|
|
|
`title` VARCHAR(100) NOT NULL COMMENT '消息标题',
|
|
|
|
|
`content` TEXT NOT NULL COMMENT '消息内容',
|
|
|
|
|
`related_id` BIGINT(20) DEFAULT NULL COMMENT '关联ID(如订单ID、设备ID)',
|
|
|
|
|
`is_read` CHAR(1) DEFAULT '0' COMMENT '是否已读(0未读 1已读)',
|
|
|
|
|
`send_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
|
|
|
|
|
`read_time` DATETIME DEFAULT NULL COMMENT '阅读时间',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`message_id`),
|
|
|
|
|
KEY `idx_user_id` (`user_id`),
|
|
|
|
|
KEY `idx_staff_id` (`staff_id`),
|
|
|
|
|
KEY `idx_message_type` (`message_type`),
|
|
|
|
|
KEY `idx_is_read` (`is_read`),
|
|
|
|
|
KEY `idx_send_time` (`send_time`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统消息表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 11. 通知公告表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_notice`;
|
|
|
|
|
CREATE TABLE `water_notice` (
|
|
|
|
|
`notice_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '公告ID',
|
|
|
|
|
`notice_title` VARCHAR(100) NOT NULL COMMENT '公告标题',
|
|
|
|
|
`notice_content` TEXT NOT NULL COMMENT '公告内容',
|
|
|
|
|
`notice_type` VARCHAR(20) DEFAULT 'info' COMMENT '公告类型(info通知/warning警告/urgent紧急)',
|
|
|
|
|
`target_type` VARCHAR(20) DEFAULT 'all' COMMENT '目标对象(all全部/user用户/staff员工)',
|
|
|
|
|
`status` CHAR(1) DEFAULT '0' COMMENT '状态(0发布 1草稿 2下架)',
|
|
|
|
|
`publish_time` DATETIME DEFAULT NULL COMMENT '发布时间',
|
|
|
|
|
`expire_time` DATETIME DEFAULT NULL COMMENT '过期时间',
|
|
|
|
|
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
|
|
|
|
|
PRIMARY KEY (`notice_id`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_target_type` (`target_type`),
|
|
|
|
|
KEY `idx_publish_time` (`publish_time`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 12. 系统配置表
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP TABLE IF EXISTS `water_config`;
|
|
|
|
|
CREATE TABLE `water_config` (
|
|
|
|
|
`config_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '配置ID',
|
|
|
|
|
`config_key` VARCHAR(100) NOT NULL COMMENT '配置键',
|
|
|
|
|
`config_value` VARCHAR(500) NOT NULL COMMENT '配置值',
|
|
|
|
|
`config_type` VARCHAR(50) DEFAULT 'string' COMMENT '配置类型(string/number/boolean/json)',
|
|
|
|
|
`config_desc` VARCHAR(500) DEFAULT NULL COMMENT '配置描述',
|
|
|
|
|
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
PRIMARY KEY (`config_id`),
|
|
|
|
|
UNIQUE KEY `uk_config_key` (`config_key`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 视图1:员工绩效视图
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP VIEW IF EXISTS `v_staff_performance`;
|
|
|
|
|
CREATE OR REPLACE VIEW `v_staff_performance` AS
|
|
|
|
|
SELECT
|
|
|
|
|
s.staff_id,
|
|
|
|
|
s.employee_no,
|
|
|
|
|
s.staff_name,
|
|
|
|
|
s.phone,
|
|
|
|
|
s.dept_id,
|
|
|
|
|
s.position,
|
|
|
|
|
|
|
|
|
|
-- 订单统计
|
|
|
|
|
COUNT(o.order_id) AS total_orders,
|
|
|
|
|
SUM(CASE WHEN o.order_status = 'completed' THEN 1 ELSE 0 END) AS completed_orders,
|
|
|
|
|
SUM(CASE WHEN o.order_status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled_orders,
|
|
|
|
|
ROUND(SUM(CASE WHEN o.order_status = 'completed' THEN 1 ELSE 0 END) * 100.0 / NULLIF(COUNT(o.order_id), 0), 2) AS completion_rate,
|
|
|
|
|
|
|
|
|
|
-- 评价统计
|
|
|
|
|
IFNULL(AVG(e.rating), 5.00) AS avg_rating,
|
|
|
|
|
COUNT(e.evaluation_id) AS evaluation_count,
|
|
|
|
|
|
|
|
|
|
-- 时效统计
|
|
|
|
|
IFNULL(AVG(o.actual_duration), 0) AS avg_duration,
|
|
|
|
|
|
|
|
|
|
-- 服务类型统计
|
|
|
|
|
SUM(CASE WHEN o.service_type = '设备安装' THEN 1 ELSE 0 END) AS install_count,
|
|
|
|
|
SUM(CASE WHEN o.service_type = '滤芯更换' THEN 1 ELSE 0 END) AS filter_count,
|
|
|
|
|
SUM(CASE WHEN o.service_type = '维修' THEN 1 ELSE 0 END) AS repair_count,
|
|
|
|
|
SUM(CASE WHEN o.service_type = '水质检测' THEN 1 ELSE 0 END) AS quality_count,
|
|
|
|
|
|
|
|
|
|
-- 等级评定
|
|
|
|
|
CASE
|
|
|
|
|
WHEN AVG(e.rating) >= 4.8 AND COUNT(o.order_id) >= 50 THEN '金牌员工'
|
|
|
|
|
WHEN AVG(e.rating) >= 4.5 AND COUNT(o.order_id) >= 30 THEN '优秀员工'
|
|
|
|
|
WHEN AVG(e.rating) >= 4.0 THEN '普通员工'
|
|
|
|
|
ELSE '待提升'
|
|
|
|
|
END AS staff_level
|
|
|
|
|
|
|
|
|
|
FROM water_staff s
|
|
|
|
|
LEFT JOIN water_service_order o ON s.staff_id = o.staff_id AND o.del_flag = '0'
|
|
|
|
|
LEFT JOIN water_evaluation e ON o.order_id = e.order_id AND e.del_flag = '0'
|
|
|
|
|
WHERE s.del_flag = '0'
|
|
|
|
|
GROUP BY s.staff_id;
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 视图2:订单统计视图
|
|
|
|
|
-- =============================================
|
|
|
|
|
DROP VIEW IF EXISTS `v_order_statistics`;
|
|
|
|
|
CREATE OR REPLACE VIEW `v_order_statistics` AS
|
|
|
|
|
SELECT
|
|
|
|
|
DATE(submit_time) AS order_date,
|
|
|
|
|
service_type,
|
|
|
|
|
order_status,
|
|
|
|
|
order_source,
|
|
|
|
|
|
|
|
|
|
COUNT(*) AS order_count,
|
|
|
|
|
SUM(amount) AS total_amount,
|
|
|
|
|
SUM(actual_amount) AS total_actual_amount,
|
|
|
|
|
SUM(discount_amount) AS total_discount,
|
|
|
|
|
|
|
|
|
|
AVG(actual_duration) AS avg_duration,
|
|
|
|
|
AVG(delivery_distance) AS avg_distance,
|
|
|
|
|
|
|
|
|
|
COUNT(DISTINCT user_id) AS user_count,
|
|
|
|
|
COUNT(DISTINCT staff_id) AS staff_count
|
|
|
|
|
|
|
|
|
|
FROM water_service_order
|
|
|
|
|
WHERE del_flag = '0'
|
|
|
|
|
GROUP BY DATE(submit_time), service_type, order_status, order_source;
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 初始化系统配置数据
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_config` (`config_key`, `config_value`, `config_type`, `config_desc`, `create_by`, `remark`) VALUES
|
|
|
|
|
('order.auto_complete_hours', '24', 'number', '订单自动完成时间(小时)', 'admin', '订单在处理中状态超过指定小时后自动完成'),
|
|
|
|
|
('filter.warning_threshold', '30', 'number', '滤芯寿命预警阈值(%)', 'admin', '滤芯寿命低于此百分比时发送预警'),
|
|
|
|
|
('service.quality_test_price', '99.00', 'number', '水质检测服务价格', 'admin', '水质检测服务的默认价格'),
|
|
|
|
|
('delivery.base_fee', '5.00', 'number', '配送费起步价', 'admin', '配送服务的起步价格'),
|
|
|
|
|
('filter.pp_days', '180', 'number', 'PP棉滤芯使用天数', 'admin', 'PP棉滤芯的默认使用天数'),
|
|
|
|
|
('filter.cto_days', '180', 'number', '活性炭滤芯使用天数', 'admin', '活性炭滤芯的默认使用天数'),
|
|
|
|
|
('filter.ro_days', '720', 'number', 'RO膜使用天数', 'admin', 'RO反渗透膜的默认使用天数'),
|
|
|
|
|
('device.offline_minutes', '60', 'number', '设备离线判定时间(分钟)', 'admin', '设备超过指定分钟未上线判定为离线');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 初始化商品数据
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_product` (`product_name`, `product_desc`, `category`, `price`, `stock`, `icon`, `status`, `sort_order`, `create_by`) VALUES
|
|
|
|
|
('智能净水器', 'RO反渗透,5级过滤', 'purifier', 1299.00, 100, '', '0', 1, 'admin'),
|
|
|
|
|
('智能水表', '远程抄表,实时监测', 'meter', 299.00, 200, '', '0', 2, 'admin'),
|
|
|
|
|
('净水器滤芯-PP棉', 'PP棉滤芯,5微米过滤', 'parts', 59.00, 500, '', '0', 3, 'admin'),
|
|
|
|
|
('净水器滤芯-活性炭', '前置活性炭滤芯,吸附异味', 'parts', 89.00, 500, '', '0', 4, 'admin'),
|
|
|
|
|
('净水器滤芯-RO膜', 'RO反渗透膜,0.0001微米过滤', 'parts', 199.00, 300, '', '0', 5, 'admin'),
|
|
|
|
|
('水质检测服务', '上门检测,专业报告', 'service', 99.00, 9999, '', '0', 6, 'admin'),
|
|
|
|
|
('前置过滤器', '保护全屋用水安全', 'purifier', 399.00, 80, '', '0', 7, 'admin'),
|
|
|
|
|
('软水机', '去除水垢,软化水质', 'purifier', 2599.00, 50, '', '0', 8, 'admin');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 初始化通知公告数据
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_notice` (`notice_title`, `notice_content`, `notice_type`, `target_type`, `status`, `publish_time`, `create_by`) VALUES
|
|
|
|
|
('欢迎使用数智水管家', '感谢您使用数智水管家系统,我们将为您提供优质的水质管理服务。如有任何问题,请随时联系我们的客服团队。', 'info', 'all', '0', NOW(), 'admin'),
|
|
|
|
|
('关于临时停水通知', '因设备维护需要,部分区域将在本周末(11月16-17日)临时停水,请提前做好储水准备。', 'warning', 'user', '0', NOW(), 'admin'),
|
|
|
|
|
('春节供水保障公告', '春节期间我们将安排员工值班,确保供水服务正常进行。紧急情况请拨打24小时客服热线。', 'info', 'all', '0', NOW(), 'admin');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 示例数据:用户
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_user` (`phone`, `password`, `nick_name`, `gender`, `balance`, `total_orders`, `status`) VALUES
|
|
|
|
|
('13800138000', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE/sXHZWzUzn', '张三', '1', 100.00, 5, '0'),
|
|
|
|
|
('13800138001', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE/sXHZWzUzn', '李四', '2', 50.00, 3, '0'),
|
|
|
|
|
('13800138002', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE/sXHZWzUzn', '王五', '1', 200.00, 8, '0');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 示例数据:员工
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_staff` (`employee_no`, `staff_name`, `phone`, `position`, `status`, `total_orders`, `completed_orders`, `avg_rating`, `create_by`) VALUES
|
|
|
|
|
('EMP001', '工程师张', '13900139000', '高级工程师', '0', 50, 48, 4.8, 'admin'),
|
|
|
|
|
('EMP002', '工程师李', '13900139001', '工程师', '0', 30, 28, 4.5, 'admin'),
|
|
|
|
|
('EMP003', '工程师王', '13900139002', '初级工程师', '0', 20, 18, 4.2, 'admin');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 示例数据:设备
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_device` (`user_id`, `sn`, `device_name`, `device_type`, `model`, `status`, `install_address`, `bind_time`, `last_online_time`) VALUES
|
|
|
|
|
(1, 'JSQ20240115001', '净水器-001', '智能净水器', 'RO-5级复合滤芯', '1', 'XX小区3栋2单元501', '2024-01-10 14:30:00', NOW()),
|
|
|
|
|
(1, 'JSQ20240112002', '净水器-002', '智能净水器', 'RO-5级复合滤芯', '1', 'XX小区3栋2单元501', '2024-01-08 10:15:00', NOW()),
|
|
|
|
|
(2, 'JSQ20240105003', '净水器-003', '智能净水器', 'RO-5级复合滤芯', '0', 'XX路88号', '2024-01-05 09:00:00', '2024-01-14 18:00:00');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 示例数据:滤芯
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_filter` (`device_id`, `filter_name`, `filter_type`, `model`, `install_time`, `total_days`, `used_days`, `life_percentage`, `next_replace_time`, `status`) VALUES
|
|
|
|
|
(1, 'PP棉滤芯', 'PP棉', 'PP-001', '2024-01-10', 180, 35, 65, '2024-06-08', '0'),
|
|
|
|
|
(1, '前置活性炭', '活性炭', 'CTO-001', '2024-01-10', 180, 35, 58, '2024-06-08', '0'),
|
|
|
|
|
(1, 'RO反渗透膜', 'RO膜', 'RO-001', '2024-01-10', 720, 35, 72, '2026-01-05', '0'),
|
|
|
|
|
(1, '后置活性炭', '活性炭', 'GAC-001', '2024-01-10', 180, 35, 61, '2024-06-08', '0'),
|
|
|
|
|
(2, 'PP棉滤芯', 'PP棉', 'PP-001', '2024-01-08', 180, 45, 45, '2024-06-06', '0'),
|
|
|
|
|
(2, '前置活性炭', '活性炭', 'CTO-001', '2024-01-08', 180, 45, 38, '2024-06-06', '0'),
|
|
|
|
|
(2, 'RO反渗透膜', 'RO膜', 'RO-001', '2024-01-08', 720, 45, 52, '2026-01-03', '0'),
|
|
|
|
|
(2, '后置活性炭', '活性炭', 'GAC-001', '2024-01-08', 180, 45, 42, '2024-06-06', '0');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 示例数据:水质检测
|
|
|
|
|
-- =============================================
|
|
|
|
|
INSERT INTO `water_quality` (`device_id`, `user_id`, `test_time`, `test_address`, `quality_level`, `quality_desc`, `ph_value`, `turbidity`, `residual_chlorine`, `total_hardness`, `tds`, `status`) VALUES
|
|
|
|
|
(1, 1, '2024-01-15 10:00:00', 'XX小区3栋2单元501', '优质', '水质指标稳定,符合饮用标准', 7.2, 0.5, 0.3, 150, 220, '1'),
|
|
|
|
|
(2, 1, '2024-01-10 14:00:00', 'XX小区3栋2单元501', '良好', '上次检测显示浊度接近上限,建议再次检测确认', 7.0, 1.2, 0.25, 180, 250, '1'),
|
|
|
|
|
(3, 2, '2024-01-08 09:00:00', 'XX路88号', '较差', '余氯低于安全值,建议暂停饮用并联系工作人员', 6.8, 0.8, 0.04, 200, 300, '1');
|
|
|
|
|
|
|
|
|
|
-- =============================================
|
|
|
|
|
-- 创建完成提示
|
|
|
|
|
-- =============================================
|
|
|
|
|
SELECT '数据库创建完成!' AS message;
|
|
|
|
|
SELECT '核心表数量:12张' AS summary;
|
|
|
|
|
SELECT '视图数量:2个' AS summary;
|
|
|
|
|
SELECT '已初始化示例数据' AS summary;
|
|
|
|
|
|