删除冗余
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
# 添加剂量单位和剂数字段到订单编辑表单
|
||||
|
||||
## 任务概述
|
||||
在处方订单编辑表单中添加 `dose_unit`(剂量单位)和 `dose_count`(剂数)字段,支持用户选择和编辑。
|
||||
|
||||
## 实现内容
|
||||
|
||||
### 1. 前端表单字段(admin/src/views/consumer/prescription/order_list.vue)
|
||||
|
||||
#### 添加的表单项:
|
||||
- **剂量单位** (`dose_unit`): 下拉选择框,7个选项
|
||||
- 剂、丸、袋、盒、瓶、膏、贴
|
||||
- 默认值:剂
|
||||
|
||||
- **剂数** (`dose_count`): 数字输入框
|
||||
- 最小值:1
|
||||
- 默认值:1
|
||||
|
||||
#### 修改位置:
|
||||
- 表单定义:在 `medication_days` 字段后添加
|
||||
- 数据加载:`openEdit()` 函数中加载 `dose_count` 和 `dose_unit`
|
||||
- 数据提交:`submitEdit()` 函数中包含 `dose_count` 和 `dose_unit`
|
||||
|
||||
### 2. 后端逻辑(server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php)
|
||||
|
||||
#### 修改的方法:
|
||||
- `edit()` 方法添加字段处理:
|
||||
```php
|
||||
$order->dose_unit = (string) ($params['dose_unit'] ?? '剂');
|
||||
$order->dose_count = isset($params['dose_count']) && (int)$params['dose_count'] > 0 ? (int)$params['dose_count'] : 1;
|
||||
```
|
||||
|
||||
### 3. 数据库迁移(add_dose_unit_to_prescription_order.sql)
|
||||
|
||||
#### 添加的字段:
|
||||
```sql
|
||||
ALTER TABLE `zyt_tcm_prescription_order`
|
||||
ADD COLUMN `dose_unit` varchar(20) NOT NULL DEFAULT '剂' COMMENT '剂量单位:剂、丸、袋、盒、瓶、膏、贴' AFTER `medication_days`,
|
||||
ADD COLUMN `dose_count` int(11) NOT NULL DEFAULT 1 COMMENT '剂数' AFTER `dose_unit`;
|
||||
```
|
||||
|
||||
## 字段说明
|
||||
|
||||
| 字段名 | 类型 | 默认值 | 说明 |
|
||||
|--------|------|--------|------|
|
||||
| dose_unit | varchar(20) | 剂 | 剂量单位:剂、丸、袋、盒、瓶、膏、贴 |
|
||||
| dose_count | int(11) | 1 | 剂数,最小值为1 |
|
||||
|
||||
## 部署步骤
|
||||
|
||||
1. **执行数据库迁移**:
|
||||
```bash
|
||||
mysql -u用户名 -p数据库名 < add_dose_unit_to_prescription_order.sql
|
||||
```
|
||||
|
||||
2. **部署后端代码**:
|
||||
- 更新 `server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php`
|
||||
|
||||
3. **部署前端代码**:
|
||||
- 更新 `admin/src/views/consumer/prescription/order_list.vue`
|
||||
- 重新构建前端:`npm run build`
|
||||
|
||||
## 测试要点
|
||||
|
||||
- [ ] 创建新订单时,`dose_unit` 默认为"剂",`dose_count` 默认为1
|
||||
- [ ] 编辑订单时,能正确加载已保存的 `dose_unit` 和 `dose_count` 值
|
||||
- [ ] 修改 `dose_unit` 和 `dose_count` 后能正确保存
|
||||
- [ ] 验证 `dose_count` 不能小于1
|
||||
- [ ] 验证所有7个剂量单位选项都能正常选择和保存
|
||||
|
||||
## 相关文件
|
||||
|
||||
- `admin/src/views/consumer/prescription/order_list.vue` - 前端订单列表和编辑表单
|
||||
- `server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php` - 后端订单编辑逻辑
|
||||
- `add_dose_unit_to_prescription_order.sql` - 数据库迁移脚本
|
||||
@@ -0,0 +1,26 @@
|
||||
-- 添加缺失的字段
|
||||
-- 请在数据库管理工具中执行以下SQL
|
||||
|
||||
-- 1. 添加 usage_days(服用天数)- 在 dose_unit 之后
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_days` int(11) NOT NULL DEFAULT 7 COMMENT '服用天数' AFTER `dose_unit`;
|
||||
|
||||
-- 2. 添加 usage_time(服用时间)- 在 usage_instruction 之后
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_time` varchar(50) NOT NULL DEFAULT '饭前' COMMENT '服用时间:饭前、饭后、饭中、空腹、睡前、晨起、随时' AFTER `usage_instruction`;
|
||||
|
||||
-- 3. 添加 usage_way(服用方式)- 在 usage_time 之后
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_way` varchar(50) NOT NULL DEFAULT '温水送服' COMMENT '服用方式:温水送服、开水冲服、黄酒送服等' AFTER `usage_time`;
|
||||
|
||||
-- 4. 添加 dietary_taboo(忌口)- 在 usage_way 之后
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `dietary_taboo` varchar(200) NOT NULL DEFAULT '' COMMENT '忌口(逗号分隔):辛辣食物、生冷食物、油腻食物等' AFTER `usage_way`;
|
||||
|
||||
-- 5. 添加 usage_notes(其他服用说明)- 在 dietary_taboo 之后
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_notes` varchar(200) NOT NULL DEFAULT '' COMMENT '其他服用说明' AFTER `dietary_taboo`;
|
||||
|
||||
-- 6. 添加 is_shared(是否共享)- 在 template_id 之后
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `is_shared` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否共享:0-不共享(仅自己可见) 1-共享(所有人可见)' AFTER `template_id`;
|
||||
|
||||
-- 执行完成后,查看表结构确认
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'zyt' AND TABLE_NAME = 'zyt_tcm_prescription'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -0,0 +1,28 @@
|
||||
-- 最终修复SQL - 根据实际表结构添加字段
|
||||
-- 请在数据库管理工具中执行
|
||||
|
||||
-- 1. 在 dose_unit 后面添加 usage_days(服用天数)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_days` int(11) NOT NULL DEFAULT 7 COMMENT '服用天数' AFTER `dose_unit`;
|
||||
|
||||
-- 2. 在 usage_instruction 后面添加 usage_time(服用时间)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_time` varchar(50) NOT NULL DEFAULT '饭前' COMMENT '服用时间:饭前、饭后、饭中、空腹、睡前、晨起、随时' AFTER `usage_instruction`;
|
||||
|
||||
-- 3. 在 usage_time 后面添加 usage_way(服用方式)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_way` varchar(50) NOT NULL DEFAULT '温水送服' COMMENT '服用方式:温水送服、开水冲服、黄酒送服等' AFTER `usage_time`;
|
||||
|
||||
-- 4. 在 usage_way 后面添加 dietary_taboo(忌口)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `dietary_taboo` varchar(200) NOT NULL DEFAULT '' COMMENT '忌口(逗号分隔)' AFTER `usage_way`;
|
||||
|
||||
-- 5. 在 dietary_taboo 后面添加 usage_notes(其他说明)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_notes` varchar(200) NOT NULL DEFAULT '' COMMENT '其他服用说明' AFTER `dietary_taboo`;
|
||||
|
||||
-- 6. 在 template_id 后面添加 is_shared(是否共享)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `is_shared` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否共享:0-不共享 1-共享' AFTER `template_id`;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'zyt'
|
||||
AND TABLE_NAME = 'zyt_tcm_prescription'
|
||||
AND COLUMN_NAME IN ('usage_days', 'usage_time', 'usage_way', 'dietary_taboo', 'usage_notes', 'is_shared')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -0,0 +1,23 @@
|
||||
-- 快速修复SQL - 只添加缺失的字段
|
||||
-- 如果某个字段已存在会报错,但不影响其他字段的添加,可以忽略错误继续执行
|
||||
|
||||
-- 检查当前表结构
|
||||
-- SHOW COLUMNS FROM `zyt_tcm_prescription`;
|
||||
|
||||
-- 根据错误提示,prescription_type 已存在,所以跳过
|
||||
-- 只添加缺失的字段:
|
||||
|
||||
-- 服用时间(如果不存在)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_time` varchar(50) NOT NULL DEFAULT '饭前' COMMENT '服用时间:饭前、饭后、饭中、空腹、睡前、晨起、随时' AFTER `usage_instruction`;
|
||||
|
||||
-- 服用方式(如果不存在)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_way` varchar(50) NOT NULL DEFAULT '温水送服' COMMENT '服用方式:温水送服、开水冲服、黄酒送服等' AFTER `usage_time`;
|
||||
|
||||
-- 忌口(如果不存在)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `dietary_taboo` varchar(200) NOT NULL DEFAULT '' COMMENT '忌口(逗号分隔):辛辣食物、生冷食物、油腻食物等' AFTER `usage_way`;
|
||||
|
||||
-- 其他服用说明(如果不存在)
|
||||
ALTER TABLE `zyt_tcm_prescription` ADD COLUMN `usage_notes` varchar(200) NOT NULL DEFAULT '' COMMENT '其他服用说明' AFTER `dietary_taboo`;
|
||||
|
||||
-- 完成后查看表结构确认
|
||||
-- SHOW COLUMNS FROM `zyt_tcm_prescription`;
|
||||
@@ -0,0 +1,32 @@
|
||||
-- 测试处方库功能的SQL语句
|
||||
|
||||
-- 1. 查看表结构
|
||||
DESC zyt_prescription_library;
|
||||
|
||||
-- 2. 插入测试数据
|
||||
INSERT INTO `zyt_prescription_library`
|
||||
(`prescription_name`, `herbs`, `is_public`, `creator_id`, `creator_name`, `create_time`, `update_time`)
|
||||
VALUES
|
||||
('六味地黄丸', '[{"name":"熟地黄","dosage":24},{"name":"山茱萸","dosage":12},{"name":"山药","dosage":12},{"name":"泽泻","dosage":9},{"name":"牡丹皮","dosage":9},{"name":"茯苓","dosage":9}]', 1, 1, '测试医生', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('补中益气汤', '[{"name":"黄芪","dosage":15},{"name":"党参","dosage":10},{"name":"白术","dosage":10},{"name":"当归","dosage":10},{"name":"陈皮","dosage":6},{"name":"升麻","dosage":6},{"name":"柴胡","dosage":6},{"name":"甘草","dosage":5}]', 1, 1, '测试医生', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('逍遥散', '[{"name":"柴胡","dosage":10},{"name":"当归","dosage":10},{"name":"白芍","dosage":10},{"name":"白术","dosage":10},{"name":"茯苓","dosage":10},{"name":"薄荷","dosage":6},{"name":"生姜","dosage":6},{"name":"甘草","dosage":5}]', 0, 1, '测试医生', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
||||
|
||||
-- 3. 查询所有处方
|
||||
SELECT * FROM zyt_prescription_library WHERE delete_time IS NULL;
|
||||
|
||||
-- 4. 查询公开的处方
|
||||
SELECT * FROM zyt_prescription_library WHERE is_public = 1 AND delete_time IS NULL;
|
||||
|
||||
-- 5. 查询某个医生创建的处方
|
||||
SELECT * FROM zyt_prescription_library WHERE creator_id = 1 AND delete_time IS NULL;
|
||||
|
||||
-- 6. 统计处方数量
|
||||
SELECT
|
||||
COUNT(*) as total,
|
||||
SUM(CASE WHEN is_public = 1 THEN 1 ELSE 0 END) as public_count,
|
||||
SUM(CASE WHEN is_public = 0 THEN 1 ELSE 0 END) as private_count
|
||||
FROM zyt_prescription_library
|
||||
WHERE delete_time IS NULL;
|
||||
|
||||
-- 7. 清理测试数据(可选)
|
||||
-- DELETE FROM zyt_prescription_library WHERE creator_name = '测试医生';
|
||||
@@ -0,0 +1,18 @@
|
||||
-- 更新旧数据,为新字段设置默认值
|
||||
-- 这样可以确保所有记录都有完整的数据
|
||||
|
||||
UPDATE `zyt_tcm_prescription`
|
||||
SET
|
||||
`usage_days` = COALESCE(`usage_days`, 7),
|
||||
`usage_time` = COALESCE(`usage_time`, '饭前'),
|
||||
`usage_way` = COALESCE(`usage_way`, '温水送服'),
|
||||
`dietary_taboo` = COALESCE(`dietary_taboo`, ''),
|
||||
`usage_notes` = COALESCE(`usage_notes`, ''),
|
||||
`is_shared` = COALESCE(`is_shared`, 0)
|
||||
WHERE `delete_time` IS NULL;
|
||||
|
||||
-- 查看更新结果
|
||||
SELECT id, sn, prescription_name, usage_days, usage_time, usage_way, dietary_taboo, usage_notes, is_shared
|
||||
FROM `zyt_tcm_prescription`
|
||||
WHERE `delete_time` IS NULL
|
||||
LIMIT 5;
|
||||
@@ -0,0 +1,3 @@
|
||||
-- 添加每贴出包数字段到处方表
|
||||
ALTER TABLE `zyt_tcm_prescription`
|
||||
ADD COLUMN `bags_per_dose` TINYINT UNSIGNED NULL DEFAULT 1 COMMENT '每贴出包数(饮片专用,1-9包)' AFTER `need_decoction`;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- 为处方业务订单表添加完单申请字段
|
||||
-- 用于记录补齐支付单时是否申请完成订单
|
||||
|
||||
ALTER TABLE `zyt_tcm_prescription_order`
|
||||
ADD COLUMN `completion_request` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '完单申请:0=未申请,1=已申请' AFTER `payment_slip_audit_remark`,
|
||||
ADD COLUMN `completion_request_time` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '完单申请时间' AFTER `completion_request`,
|
||||
ADD COLUMN `completion_request_by` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '完单申请人ID' AFTER `completion_request_time`,
|
||||
ADD COLUMN `completion_request_by_name` varchar(64) NOT NULL DEFAULT '' COMMENT '完单申请人姓名' AFTER `completion_request_by`;
|
||||
@@ -0,0 +1,13 @@
|
||||
-- 添加剂量单位和剂数字段到处方业务订单表
|
||||
-- 用于记录订单的剂量单位和剂数信息
|
||||
|
||||
ALTER TABLE `zyt_tcm_prescription_order`
|
||||
ADD COLUMN `dose_unit` varchar(20) NOT NULL DEFAULT '剂' COMMENT '剂量单位:剂、丸、袋、盒、瓶、膏、贴' AFTER `medication_days`,
|
||||
ADD COLUMN `dose_count` int(11) NOT NULL DEFAULT 1 COMMENT '剂数' AFTER `dose_unit`;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_prescription_order'
|
||||
AND COLUMN_NAME IN ('dose_unit', 'dose_count');
|
||||
@@ -0,0 +1,12 @@
|
||||
-- 添加甘草订单回调相关字段
|
||||
-- 在 zyt_prescription_order 表中添加
|
||||
|
||||
ALTER TABLE `zyt_prescription_order`
|
||||
ADD COLUMN `gancao_order_state` INT(11) DEFAULT 0 COMMENT '甘草订单状态:10=审核中,11=审核通过,110=制作中,20=物流中,30=完成,90=拦截,91=撤单,92=驳回' AFTER `gancao_submit_time`,
|
||||
ADD COLUMN `gancao_flow_name` VARCHAR(100) DEFAULT '' COMMENT '甘草订单流程名称(如:派单、审方、调配、复核、浸泡、煎药、包装、发货等)' AFTER `gancao_order_state`,
|
||||
ADD COLUMN `gancao_supplier` VARCHAR(100) DEFAULT '' COMMENT '甘草供应商/药房名称' AFTER `gancao_flow_name`,
|
||||
ADD COLUMN `gancao_remark` VARCHAR(500) DEFAULT '' COMMENT '甘草订单备注(拦截原因、驳回原因等)' AFTER `gancao_supplier`;
|
||||
|
||||
-- 添加索引
|
||||
ALTER TABLE `zyt_prescription_order`
|
||||
ADD INDEX `idx_gancao_order_state` (`gancao_order_state`);
|
||||
@@ -0,0 +1,5 @@
|
||||
-- 添加 is_paw 字段到 admin 表
|
||||
-- is_paw: 0=需要修改密码,1=正常(默认值)
|
||||
|
||||
ALTER TABLE `la_admin`
|
||||
ADD COLUMN `is_paw` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否已修改初始密码:0=需要修改,1=正常' AFTER `multipoint_login`;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- 添加处方完整字段(用量、代煎、每天几次)
|
||||
-- 执行前请先备份数据库
|
||||
|
||||
-- 1. 添加用量相关字段(如果不存在)
|
||||
ALTER TABLE `zyt_tcm_prescription`
|
||||
ADD COLUMN IF NOT EXISTS `dosage_amount` decimal(10,2) DEFAULT NULL COMMENT '用量数值' AFTER `prescription_type`,
|
||||
ADD COLUMN IF NOT EXISTS `dosage_unit` varchar(10) NOT NULL DEFAULT '' COMMENT '用量单位(g/ml)' AFTER `dosage_amount`,
|
||||
ADD COLUMN IF NOT EXISTS `need_decoction` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否代煎(0否1是,仅饮片)' AFTER `dosage_unit`;
|
||||
|
||||
-- 2. 添加每天几次字段(如果不存在)
|
||||
ALTER TABLE `zyt_tcm_prescription`
|
||||
ADD COLUMN IF NOT EXISTS `times_per_day` int(11) NOT NULL DEFAULT 2 COMMENT '每天服用次数' AFTER `usage_days`;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_prescription'
|
||||
AND COLUMN_NAME IN ('dosage_amount', 'dosage_unit', 'need_decoction', 'times_per_day')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -0,0 +1,15 @@
|
||||
-- 添加处方用量相关字段
|
||||
-- 用于存储处方类型对应的用量、单位和代煎信息
|
||||
|
||||
ALTER TABLE `zyt_tcm_prescription`
|
||||
ADD COLUMN `dosage_amount` decimal(10,2) DEFAULT NULL COMMENT '用量数值' AFTER `prescription_type`,
|
||||
ADD COLUMN `dosage_unit` varchar(10) NOT NULL DEFAULT '' COMMENT '用量单位(g/ml)' AFTER `dosage_amount`,
|
||||
ADD COLUMN `need_decoction` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否代煎(0否1是,仅饮片)' AFTER `dosage_unit`;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_prescription'
|
||||
AND COLUMN_NAME IN ('dosage_amount', 'dosage_unit', 'need_decoction')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -0,0 +1,5 @@
|
||||
-- 添加省市区字段到处方业务订单表
|
||||
ALTER TABLE `zyt_tcm_prescription_order`
|
||||
ADD COLUMN `shipping_province` varchar(50) NOT NULL DEFAULT '' COMMENT '收货省份' AFTER `recipient_phone`,
|
||||
ADD COLUMN `shipping_city` varchar(50) NOT NULL DEFAULT '' COMMENT '收货城市' AFTER `shipping_province`,
|
||||
ADD COLUMN `shipping_district` varchar(50) NOT NULL DEFAULT '' COMMENT '收货区县' AFTER `shipping_city`;
|
||||
@@ -0,0 +1,208 @@
|
||||
-- 安全添加索引脚本(检查后添加,避免重复)
|
||||
-- 使用方法:在MySQL客户端或phpMyAdmin中执行
|
||||
|
||||
-- ============================================
|
||||
-- 1. 检查现有索引
|
||||
-- ============================================
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
INDEX_NAME,
|
||||
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as COLUMNS
|
||||
FROM
|
||||
INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN (
|
||||
'zyt_appointment',
|
||||
'zyt_tcm_diagnosis',
|
||||
'zyt_admin',
|
||||
'zyt_diagnosis_view_records',
|
||||
'zyt_prescription',
|
||||
'zyt_admin_role'
|
||||
)
|
||||
GROUP BY
|
||||
TABLE_NAME, INDEX_NAME
|
||||
ORDER BY
|
||||
TABLE_NAME, INDEX_NAME;
|
||||
|
||||
-- ============================================
|
||||
-- 2. 安全添加索引(如果不存在)
|
||||
-- ============================================
|
||||
|
||||
-- 预约表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_doctor_id') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_id` (`doctor_id`)',
|
||||
'SELECT "索引 idx_doctor_id 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_patient_id') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_patient_id` (`patient_id`)',
|
||||
'SELECT "索引 idx_patient_id 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_status') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_status` (`status`)',
|
||||
'SELECT "索引 idx_status 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_appointment_date') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_appointment_date` (`appointment_date`)',
|
||||
'SELECT "索引 idx_appointment_date 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_status_date_time') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_status_date_time` (`status`, `appointment_date`, `appointment_time`)',
|
||||
'SELECT "索引 idx_status_date_time 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_doctor_status_date') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_status_date` (`doctor_id`, `status`, `appointment_date`)',
|
||||
'SELECT "索引 idx_doctor_status_date 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 诊断表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_diagnosis'
|
||||
AND INDEX_NAME = 'idx_patient_name') = 0,
|
||||
'ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_patient_name` (`patient_name`(20))',
|
||||
'SELECT "索引 idx_patient_name 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_diagnosis'
|
||||
AND INDEX_NAME = 'idx_assistant_id') = 0,
|
||||
'ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_assistant_id` (`assistant_id`)',
|
||||
'SELECT "索引 idx_assistant_id 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 管理员表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_admin'
|
||||
AND INDEX_NAME = 'idx_name') = 0,
|
||||
'ALTER TABLE `zyt_admin` ADD INDEX `idx_name` (`name`(20))',
|
||||
'SELECT "索引 idx_name 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 诊断查看记录表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_diagnosis_view_records'
|
||||
AND INDEX_NAME = 'idx_diagnosis_confirmed') = 0,
|
||||
'ALTER TABLE `zyt_diagnosis_view_records` ADD INDEX `idx_diagnosis_confirmed` (`diagnosis_id`, `is_confirmed`, `delete_time`)',
|
||||
'SELECT "索引 idx_diagnosis_confirmed 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 处方表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_prescription'
|
||||
AND INDEX_NAME = 'idx_diagnosis_delete') = 0,
|
||||
'ALTER TABLE `zyt_prescription` ADD INDEX `idx_diagnosis_delete` (`diagnosis_id`, `delete_time`)',
|
||||
'SELECT "索引 idx_diagnosis_delete 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 管理员角色表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_admin_role'
|
||||
AND INDEX_NAME = 'idx_admin_role') = 0,
|
||||
'ALTER TABLE `zyt_admin_role` ADD INDEX `idx_admin_role` (`admin_id`, `role_id`)',
|
||||
'SELECT "索引 idx_admin_role 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ============================================
|
||||
-- 3. 再次检查索引是否创建成功
|
||||
-- ============================================
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
INDEX_NAME,
|
||||
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as COLUMNS,
|
||||
INDEX_TYPE,
|
||||
NON_UNIQUE
|
||||
FROM
|
||||
INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN (
|
||||
'zyt_appointment',
|
||||
'zyt_tcm_diagnosis',
|
||||
'zyt_admin',
|
||||
'zyt_diagnosis_view_records',
|
||||
'zyt_prescription',
|
||||
'zyt_admin_role'
|
||||
)
|
||||
GROUP BY
|
||||
TABLE_NAME, INDEX_NAME, INDEX_TYPE, NON_UNIQUE
|
||||
ORDER BY
|
||||
TABLE_NAME, INDEX_NAME;
|
||||
|
||||
SELECT '索引创建完成!' as message;
|
||||
@@ -0,0 +1,28 @@
|
||||
-- 药品库表
|
||||
CREATE TABLE IF NOT EXISTS `la_doctor_medicine` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '药材名称',
|
||||
`supplier` varchar(100) NOT NULL DEFAULT '' COMMENT '供应商名称',
|
||||
`unit` varchar(20) NOT NULL DEFAULT '' COMMENT '单位',
|
||||
`settlement_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '结算价',
|
||||
`retail_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '零售价',
|
||||
`stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存数量',
|
||||
`image` varchar(255) NOT NULL DEFAULT '' COMMENT '药品图片',
|
||||
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:0=停用,1=启用',
|
||||
`remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(11) DEFAULT NULL COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_name` (`name`),
|
||||
KEY `idx_supplier` (`supplier`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品库表';
|
||||
|
||||
-- 插入示例数据
|
||||
INSERT INTO `la_doctor_medicine` (`name`, `supplier`, `unit`, `settlement_price`, `retail_price`, `stock`, `image`, `status`, `remark`, `create_time`, `update_time`) VALUES
|
||||
('当归', '同仁堂', '克', 0.50, 0.80, 1000, '', 1, '补血活血,调经止痛', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('黄芪', '云南白药', '克', 0.30, 0.50, 2000, '', 1, '补气固表,利尿托毒', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('枸杞子', '宁夏枸杞', '克', 0.40, 0.70, 1500, '', 1, '滋补肝肾,益精明目', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('人参', '长白山人参', '克', 5.00, 8.00, 500, '', 1, '大补元气,复脉固脱', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('甘草', '内蒙古甘草', '克', 0.20, 0.35, 3000, '', 1, '补脾益气,清热解毒', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
||||
@@ -0,0 +1,76 @@
|
||||
-- 预约表索引优化
|
||||
-- 用于提升预约列表查询性能
|
||||
|
||||
-- 1. 预约表 (zyt_appointment) 索引
|
||||
-- 主要查询字段:doctor_id, patient_id, status, appointment_date, appointment_time
|
||||
|
||||
-- 医生ID索引(医生角色查询自己的预约)
|
||||
ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_id` (`doctor_id`);
|
||||
|
||||
-- 患者ID索引(关联查询)
|
||||
ALTER TABLE `zyt_appointment` ADD INDEX `idx_patient_id` (`patient_id`);
|
||||
|
||||
-- 状态索引(状态筛选)
|
||||
ALTER TABLE `zyt_appointment` ADD INDEX `idx_status` (`status`);
|
||||
|
||||
-- 预约日期索引(日期范围查询)
|
||||
ALTER TABLE `zyt_appointment` ADD INDEX `idx_appointment_date` (`appointment_date`);
|
||||
|
||||
-- 组合索引:状态+日期+时间(用于排序和筛选)
|
||||
ALTER TABLE `zyt_appointment` ADD INDEX `idx_status_date_time` (`status`, `appointment_date`, `appointment_time`);
|
||||
|
||||
-- 组合索引:医生+状态+日期(医生角色常用查询)
|
||||
ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_status_date` (`doctor_id`, `status`, `appointment_date`);
|
||||
|
||||
-- 2. 诊断表 (zyt_tcm_diagnosis) 索引
|
||||
-- 主要查询字段:patient_name, assistant_id
|
||||
|
||||
-- 患者姓名索引(模糊搜索,使用前缀索引)
|
||||
ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_patient_name` (`patient_name`(20));
|
||||
|
||||
-- 医助ID索引(医助角色查询)
|
||||
ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_assistant_id` (`assistant_id`);
|
||||
|
||||
-- 3. 管理员表 (zyt_admin) 索引
|
||||
-- 主要查询字段:name(医生姓名搜索)
|
||||
|
||||
-- 管理员姓名索引(模糊搜索,使用前缀索引)
|
||||
ALTER TABLE `zyt_admin` ADD INDEX `idx_name` (`name`(20));
|
||||
|
||||
-- 4. 诊断查看记录表 (zyt_diagnosis_view_records) 索引
|
||||
-- 主要查询字段:diagnosis_id, is_confirmed, delete_time
|
||||
|
||||
-- 组合索引:诊断ID+确认状态+删除时间(用于确认诊单查询)
|
||||
ALTER TABLE `zyt_diagnosis_view_records` ADD INDEX `idx_diagnosis_confirmed` (`diagnosis_id`, `is_confirmed`, `delete_time`);
|
||||
|
||||
-- 5. 处方表 (zyt_prescription) 索引
|
||||
-- 主要查询字段:diagnosis_id, delete_time
|
||||
|
||||
-- 组合索引:诊断ID+删除时间(用于开方状态查询)
|
||||
ALTER TABLE `zyt_prescription` ADD INDEX `idx_diagnosis_delete` (`diagnosis_id`, `delete_time`);
|
||||
|
||||
-- 6. 管理员角色表 (zyt_admin_role) 索引
|
||||
-- 主要查询字段:admin_id, role_id
|
||||
|
||||
-- 组合索引:管理员ID+角色ID(用于权限判断)
|
||||
ALTER TABLE `zyt_admin_role` ADD INDEX `idx_admin_role` (`admin_id`, `role_id`);
|
||||
|
||||
-- ============================================
|
||||
-- 查看已创建的索引
|
||||
-- ============================================
|
||||
-- SHOW INDEX FROM `zyt_appointment`;
|
||||
-- SHOW INDEX FROM `zyt_tcm_diagnosis`;
|
||||
-- SHOW INDEX FROM `zyt_admin`;
|
||||
-- SHOW INDEX FROM `zyt_diagnosis_view_records`;
|
||||
-- SHOW INDEX FROM `zyt_prescription`;
|
||||
-- SHOW INDEX FROM `zyt_admin_role`;
|
||||
|
||||
-- ============================================
|
||||
-- 如果索引已存在,先删除再创建(可选)
|
||||
-- ============================================
|
||||
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_doctor_id`;
|
||||
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_patient_id`;
|
||||
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_status`;
|
||||
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_appointment_date`;
|
||||
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_status_date_time`;
|
||||
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_doctor_status_date`;
|
||||
@@ -0,0 +1,23 @@
|
||||
-- 测试首次登录强制修改密码功能
|
||||
|
||||
-- 1. 查看当前所有管理员的 is_paw 状态
|
||||
SELECT id, account, name, is_paw,
|
||||
CASE is_paw
|
||||
WHEN 0 THEN '需要修改密码'
|
||||
WHEN 1 THEN '正常'
|
||||
ELSE '未知'
|
||||
END as status
|
||||
FROM la_admin
|
||||
WHERE delete_time = 0;
|
||||
|
||||
-- 2. 设置指定管理员需要修改密码(将 ID 改为实际的管理员 ID)
|
||||
-- UPDATE la_admin SET is_paw = 0 WHERE id = 1;
|
||||
|
||||
-- 3. 设置所有管理员需要修改密码(谨慎使用)
|
||||
-- UPDATE la_admin SET is_paw = 0 WHERE delete_time = 0;
|
||||
|
||||
-- 4. 恢复指定管理员为正常状态
|
||||
-- UPDATE la_admin SET is_paw = 1 WHERE id = 1;
|
||||
|
||||
-- 5. 恢复所有管理员为正常状态
|
||||
-- UPDATE la_admin SET is_paw = 1 WHERE delete_time = 0;
|
||||
Reference in New Issue
Block a user