This commit is contained in:
zlwu committed 2026-05-23 14:49:50 +08:00
1 parent fb85230d25
commit 05684ba2a4
56 files changed
+26110 -13601

No files matched your search

@@ -1,19 +0,0 @@
-- 细胞产品库字段重设计迁移
-- 日期: 2026-05-21
-- 设计文档: docs/superpowers/specs/2026-05-21-cell-product-library-design.md
-- 1. 新增 4 个业务字段(放在 storage_slot_id 之后,product_status 之前)
ALTER TABLE biz_cell_product
ADD COLUMN `passage` VARCHAR(8) DEFAULT NULL COMMENT '代次(P1~P8)' AFTER `storage_slot_id`,
ADD COLUMN `freeze_date` DATETIME DEFAULT NULL COMMENT '冻存日期' AFTER `passage`,
ADD COLUMN `expected_cell_count` DECIMAL(18,4) DEFAULT NULL COMMENT '预计细胞数量(单位:亿)' AFTER `freeze_date`,
ADD COLUMN `viability` DECIMAL(5,2) DEFAULT NULL COMMENT '活性(百分比,0~100)' AFTER `expected_cell_count`;
-- 2. 更新 product_status 默认值和注释
ALTER TABLE biz_cell_product
MODIFY COLUMN `product_status` VARCHAR(16) DEFAULT 'frozen' COMMENT '状态: frozen已冻存/sold已售卖/used已使用';
-- 3. 迁移旧状态数据(如有)
UPDATE biz_cell_product SET product_status = 'frozen' WHERE product_status = 'zk';
UPDATE biz_cell_product SET product_status = 'sold' WHERE product_status = 'yc';
UPDATE biz_cell_product SET product_status = 'used' WHERE product_status = 'ysy';
-168
View File
@@ -1,168 +0,0 @@
-- 细胞产品库初始化测试数据(20 条,覆盖各种场景)
-- 日期: 2026-05-21
-- 前提: 已执行 2026-05-21-cell-product-alter.sql 迁移
-- 场景覆盖:
-- 状态: frozen(12条) / sold(5条) / used(3条)
-- 代次: P1~P8 均有覆盖
-- 活性: 70.0 ~ 99.5,含 NULL
-- 预计细胞数量: 0.5 ~ 50.0 亿,含 NULL
-- 冻存日期: 有值 / NULL / 未来日期
-- 有效期: 已过期 / 未过期 / NULL
-- 产品图片: 有值 / NULL
-- 备注: 有值 / NULL
-- 数量/单位: 1~100 份
INSERT INTO biz_cell_product
(id, product_code, product_name, product_type_id, spec_id, batch_no, storage_slot_id,
passage, freeze_date, expected_cell_count, viability,
product_status, source_type, production_task_id,
quantity, unit, expiry_date, product_images,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag)
VALUES
-- ==================== 已冻存 frozen (12条) ====================
-- 1. 典型冻存产品:高活性、P2代次、有图片有备注
('60eaac11fceb4fd6b62e58e8be2c51cc', 'CP20260501000001', '间充质干细胞-MSC-P2-001', NULL, NULL, 'B20260501-001', NULL,
'P2', '2026-05-01 10:30:00', 5.0000, 95.50,
'frozen', 'manual', NULL,
10, '份', '2027-05-01 00:00:00', 'https://minio.example.com/cell-product/msc-p2-001.jpg',
'zkxw', 1, '高活性批次,来源于健康供体', 'admin', '', '2026-05-01 10:30:00', 'admin', '2026-05-01 10:30:00', 0),
-- 2. P1初代产品:数量大、高活性
('5ea198fede454198be443211d2687ab3', 'CP20260502000001', '脐带血造血干细胞-HSC-P1-002', NULL, NULL, 'B20260502-002', NULL,
'P1', '2026-05-02 14:20:00', 10.0000, 98.00,
'frozen', 'manual', NULL,
20, '份', '2027-11-02 00:00:00', NULL,
'zkxw', 2, NULL, 'admin', '', '2026-05-02 14:20:00', 'admin', '2026-05-02 14:20:00', 0),
-- 3. P3代次、低活性、无冻存日期
('661bcbadd41c4f478b16f3b9dd577914', 'CP20260503000001', '脂肪干细胞-ADSC-P3-003', NULL, NULL, 'B20260503-003', NULL,
'P3', NULL, 3.0000, 72.00,
'frozen', 'manual', NULL,
5, '份', '2026-08-03 00:00:00', NULL,
'zkxw', 3, '活性偏低,需进一步检测', 'admin', '', '2026-05-03 09:00:00', 'admin', '2026-05-03 09:00:00', 0),
-- 4. P4、中等活性、无预计细胞数量
('dd8d414f36a244bca611a51a96581a85', 'CP20260505000001', '神经干细胞-NSC-P4-004', NULL, NULL, 'B20260505-004', NULL,
'P4', '2026-05-05 08:15:00', NULL, 88.00,
'frozen', 'manual', NULL,
8, '份', '2027-05-05 00:00:00', 'https://minio.example.com/cell-product/nsc-p4-004.jpg',
'zkxw', 4, NULL, 'admin', '', '2026-05-05 08:15:00', 'admin', '2026-05-05 08:15:00', 0),
-- 5. P5、活性为NULL(未检测)
('815d5312900140c99e453c685c6d81a6', 'CP20260506000001', '诱导多能干细胞-iPSC-P5-005', NULL, NULL, 'B20260506-005', NULL,
'P5', '2026-05-06 16:45:00', 2.5000, NULL,
'frozen', 'manual', NULL,
3, '份', '2027-02-06 00:00:00', NULL,
'zkxw', 5, '待活性检测', 'admin', '', '2026-05-06 16:45:00', 'admin', '2026-05-06 16:45:00', 0),
-- 6. P6、大数量、有效期已过期(异常数据)
('da9b6201f2a74921b475c234e0d72841', 'CP20260507000001', '软骨细胞-CC-P6-006', NULL, NULL, 'B20260507-006', NULL,
'P6', '2026-05-07 11:00:00', 1.2000, 85.00,
'frozen', 'manual', NULL,
15, '份', '2025-05-07 00:00:00', NULL,
'zkxw', 6, '有效期已过,需处理', 'admin', '', '2026-05-07 11:00:00', 'admin', '2026-05-07 11:00:00', 0),
-- 7. P7、极小数量、极高活性
('e26ac18706b84c3da114f24eb50ec7e9', 'CP20260508000001', '心肌细胞-CM-P7-007', NULL, NULL, 'B20260508-007', NULL,
'P7', '2026-05-08 09:30:00', 0.5000, 99.50,
'frozen', 'manual', NULL,
1, '份', '2027-11-08 00:00:00', NULL,
'zkxw', 7, NULL, 'admin', '', '2026-05-08 09:30:00', 'admin', '2026-05-08 09:30:00', 0),
-- 8. P8、最大代次、多张图片
('177e808ce4b8454cb074e5965ed94bb1', 'CP20260509000001', '肝细胞-HC-P8-008', NULL, NULL, 'B20260509-008', NULL,
'P8', '2026-05-09 13:00:00', 8.0000, 80.00,
'frozen', 'manual', NULL,
12, '份', '2027-05-09 00:00:00', 'https://minio.example.com/cell-product/hc-p8-008a.jpg,https://minio.example.com/cell-product/hc-p8-008b.jpg',
'zkxw', 8, '代次较高,建议尽快使用', 'admin', '', '2026-05-09 13:00:00', 'admin', '2026-05-09 13:00:00', 0),
-- 9. P1、大预计细胞数量50亿
('0fe62984ef6c4d3eafa8bcff70c6e151', 'CP20260510000001', 'NK细胞-NK-P1-009', NULL, NULL, 'B20260510-009', NULL,
'P1', '2026-05-10 07:00:00', 50.0000, 96.00,
'frozen', 'manual', NULL,
30, '份', '2027-11-10 00:00:00', 'https://minio.example.com/cell-product/nk-p1-009.jpg',
'zkxw', 9, '大批次生产', 'admin', '', '2026-05-10 07:00:00', 'admin', '2026-05-10 07:00:00', 0),
-- 10. P3、无有效期
('cb8e8ea1581348f18c119e1611fba39f', 'CP20260511000001', 'T细胞-TC-P3-010', NULL, NULL, 'B20260511-010', NULL,
'P3', '2026-05-11 15:30:00', 15.0000, 91.00,
'frozen', 'manual', NULL,
25, '份', NULL, NULL,
'zkxw', 10, NULL, 'admin', '', '2026-05-11 15:30:00', 'admin', '2026-05-11 15:30:00', 0),
-- 11. P2、活性偏低70%
('28c6b50ccd3d4cf8ae9bbbbffef96418', 'CP20260512000001', '树突状细胞-DC-P2-011', NULL, NULL, 'B20260512-011', NULL,
'P2', '2026-05-12 10:00:00', 4.0000, 70.00,
'frozen', 'manual', NULL,
6, '份', '2026-11-12 00:00:00', NULL,
'zkxw', 11, '活性偏低,需复检', 'admin', '', '2026-05-12 10:00:00', 'admin', '2026-05-12 10:00:00', 0),
-- 12. P4、未来冻存日期(计划冻存)
('940c82c006954865adb09e31fae36038', 'CP20260513000001', '表皮细胞-EC-P4-012', NULL, NULL, 'B20260513-012', NULL,
'P4', '2026-06-15 00:00:00', 6.0000, 92.50,
'frozen', 'manual', NULL,
4, '份', '2027-06-15 00:00:00', NULL,
'zkxw', 12, '计划冻存,待入库', 'admin', '', '2026-05-13 08:00:00', 'admin', '2026-05-13 08:00:00', 0),
-- ==================== 已售卖 sold (5条) ====================
-- 13. P2、已售卖、高活性
('338ae843fb4a4914a1eb672fd7a5ee38', 'CP20260420000001', '间充质干细胞-MSC-P2-S01', NULL, NULL, 'B20260420-S01', NULL,
'P2', '2026-04-20 09:00:00', 5.0000, 97.00,
'sold', 'manual', NULL,
10, '份', '2027-04-20 00:00:00', 'https://minio.example.com/cell-product/msc-p2-s01.jpg',
'zkxw', 13, '已出售给合作医院', 'admin', '', '2026-04-20 09:00:00', 'admin', '2026-05-15 14:00:00', 0),
-- 14. P1、已售卖、最大批次
('237d80589852465180706d1f7a3d3586', 'CP20260418000001', '脐带血造血干细胞-HSC-P1-S02', NULL, NULL, 'B20260418-S02', NULL,
'P1', '2026-04-18 11:30:00', 20.0000, 99.00,
'sold', 'manual', NULL,
50, '份', '2027-10-18 00:00:00', NULL,
'zkxw', 14, NULL, 'admin', '', '2026-04-18 11:30:00', 'admin', '2026-05-16 09:30:00', 0),
-- 15. P3、已售卖、中活性
('a6380097234e4c15b04349f27348a9dd', 'CP20260415000001', '脂肪干细胞-ADSC-P3-S03', NULL, NULL, 'B20260415-S03', NULL,
'P3', '2026-04-15 08:00:00', 8.0000, 88.50,
'sold', 'manual', NULL,
15, '份', '2027-04-15 00:00:00', 'https://minio.example.com/cell-product/adsc-p3-s03a.jpg,https://minio.example.com/cell-product/adsc-p3-s03b.jpg',
'zkxw', 15, '科研合作项目使用', 'admin', '', '2026-04-15 08:00:00', 'admin', '2026-05-17 10:00:00', 0),
-- 16. P5、已售卖、低活性
('853e0e67632c4291bf9d111a43a17b71', 'CP20260410000001', '神经干细胞-NSC-P5-S04', NULL, NULL, 'B20260410-S04', NULL,
'P5', '2026-04-10 14:00:00', 2.0000, 75.00,
'sold', 'manual', NULL,
5, '份', '2026-10-10 00:00:00', NULL,
'zkxw', 16, '低价出售,活性一般', 'admin', '', '2026-04-10 14:00:00', 'admin', '2026-05-18 11:00:00', 0),
-- 17. P1、已售卖、未填活性
('ec5309d6870f486695cf5b5f63fd91d1', 'CP20260405000001', 'NK细胞-NK-P1-S05', NULL, NULL, 'B20260405-S05', NULL,
'P1', '2026-04-05 10:00:00', 30.0000, NULL,
'sold', 'manual', NULL,
20, '份', '2027-10-05 00:00:00', NULL,
'zkxw', 17, NULL, 'admin', '', '2026-04-05 10:00:00', 'admin', '2026-05-19 16:00:00', 0),
-- ==================== 已使用 used (3条) ====================
-- 18. P3、已使用(用于生产分化)
('5e1f8cf0bab14e3f964d5a7aafb09d0d', 'CP20260301000001', '间充质干细胞-MSC-P3-U01', NULL, NULL, 'B20260301-U01', NULL,
'P3', '2026-03-01 08:30:00', 10.0000, 93.00,
'used', 'manual', NULL,
8, '份', '2027-03-01 00:00:00', 'https://minio.example.com/cell-product/msc-p3-u01.jpg',
'zkxw', 18, '用于生产分化为软骨细胞', 'admin', '', '2026-03-01 08:30:00', 'admin', '2026-05-10 09:00:00', 0),
-- 19. P4、已使用、来源生产任务
('292c2ec830084ba08daf151845043dba', 'CP20260215000001', '诱导多能干细胞-iPSC-P4-U02', NULL, NULL, 'B20260215-U02', NULL,
'P4', '2026-02-15 12:00:00', 12.0000, 90.00,
'used', 'production', 'task-uuid-placeholder-001',
6, '份', '2027-02-15 00:00:00', NULL,
'zkxw', 19, '生产任务产出的细胞被用于后续分化实验', 'admin', '', '2026-02-15 12:00:00', 'admin', '2026-04-20 15:00:00', 0),
-- 20. P6、已使用、高代次低活性(极限场景)
('e1cb9f8cbe6a40998686a8bb8fb76c9a', 'CP20260201000001', '肝细胞-HC-P6-U03', NULL, NULL, 'B20260201-U03', NULL,
'P6', '2026-02-01 09:00:00', 1.5000, 78.50,
'used', 'manual', NULL,
2, '份', '2026-08-01 00:00:00', 'https://minio.example.com/cell-product/hc-p6-u03.jpg,https://minio.example.com/cell-product/hc-p6-u03-report.pdf',
'zkxw', 20, '高代次细胞,已用于药物毒性测试', 'admin', '', '2026-02-01 09:00:00', 'admin', '2026-03-15 10:00:00', 0);
@@ -1,37 +0,0 @@
-- ============================================================
-- 库位占用记录功能迁移
-- 日期: 2026-05-22
-- ============================================================
-- 1. 新增:库位占用记录表
CREATE TABLE biz_storage_slot_occupancy (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
slot_id VARCHAR(64) NOT NULL COMMENT '储物格ID (FK → biz_storage_facility_slot)',
item_type VARCHAR(32) NOT NULL COMMENT '物品类型: cell_product=细胞产品, other=其他',
item_id VARCHAR(64) NOT NULL COMMENT '物品ID (指向对应业务表主键)',
item_code VARCHAR(64) NULL COMMENT '物品编码 (冗余展示)',
item_name VARCHAR(200) NULL COMMENT '物品名称 (冗余展示)',
item_source VARCHAR(32) NULL COMMENT '来源: production=生产入库, manual=手动入库, transfer=转移',
stored_at DATETIME NULL COMMENT '入库时间',
removed_at DATETIME NULL COMMENT '出库时间 (NULL=当前在库)',
occupancy_status VARCHAR(16) NOT NULL DEFAULT 'stored' COMMENT 'stored=在库, removed=已出库',
tenant_no VARCHAR(64) NULL COMMENT '租户编号',
order_num INT DEFAULT 0 COMMENT '排序',
remark VARCHAR(500) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建者',
create_dept_id VARCHAR(64) NULL COMMENT '创建部门',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新者',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)',
PRIMARY KEY (id),
INDEX idx_sso_slot (slot_id, occupancy_status, del_flag),
INDEX idx_sso_item (item_type, item_id, del_flag),
INDEX idx_sso_tenant (tenant_no, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库位占用记录表';
-- 2. 增强:biz_storage_facility_slot 增加缓存字段
ALTER TABLE biz_storage_facility_slot
ADD COLUMN occupied_count INT DEFAULT 0 COMMENT '当前占用数量',
ADD COLUMN last_item_type VARCHAR(32) NULL COMMENT '最近存储物品类型',
ADD COLUMN last_stored_at DATETIME NULL COMMENT '最近入库时间';
-51
View File
@@ -1,51 +0,0 @@
-- ============================================================
-- 入库放行审核 biz_storage_release_review
-- Date: 2026-05-23
-- ============================================================
SET NAMES utf8mb4;
-- ----------------------------
-- Table structure for biz_storage_release_review
-- ----------------------------
DROP TABLE IF EXISTS `biz_storage_release_review`;
CREATE TABLE `biz_storage_release_review` (
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`sample_code` VARCHAR(64) NOT NULL COMMENT '样本编码(关联键)',
`reception_source` VARCHAR(32) NOT NULL COMMENT '来源:cell_storage=采集/research_donation=捐赠',
`protocol_id` VARCHAR(64) DEFAULT NULL COMMENT '协议单ID',
`reception_id` VARCHAR(64) DEFAULT NULL COMMENT '样本接收记录ID',
`protocol_no` VARCHAR(64) DEFAULT NULL COMMENT '协议编号',
`sample_name` VARCHAR(128) DEFAULT NULL COMMENT '样本名称',
`review_conclusion` VARCHAR(16) DEFAULT NULL COMMENT '审核结论:tg=通过/btg=不通过/NULL=待审核',
`review_remark` VARCHAR(512) DEFAULT NULL COMMENT '审核备注',
`review_attachments` VARCHAR(4000) DEFAULT NULL COMMENT '审核附件(逗号分隔URL)',
`review_by` VARCHAR(64) DEFAULT NULL COMMENT '审核人ID',
`review_by_name` VARCHAR(64) DEFAULT NULL COMMENT '审核人姓名',
`review_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`storage_status` VARCHAR(16) NOT NULL DEFAULT 'drk' COMMENT '入库状态:drk=待入库/yrk=已入库',
`storage_by` VARCHAR(64) DEFAULT NULL COMMENT '入库操作人ID',
`storage_by_name` VARCHAR(64) DEFAULT NULL COMMENT '入库操作人姓名',
`storage_time` DATETIME DEFAULT NULL COMMENT '入库时间',
`tenant_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户编号',
`order_num` INT(11) DEFAULT NULL COMMENT '排序号',
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人ID',
`create_dept_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人ID',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
PRIMARY KEY (`id`),
KEY `idx_srr_sample` (`tenant_no`, `sample_code`, `del_flag`),
KEY `idx_srr_protocol` (`tenant_no`, `protocol_id`, `del_flag`),
KEY `idx_srr_status` (`tenant_no`, `review_conclusion`, `storage_status`, `del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入库放行审核';
-- ----------------------------
-- Menu entry: 入库放行审核 (under 质量检测)
-- ----------------------------
-- 父菜单: 质量检测 id=70000000000000000000000000000001
-- 新菜单 ID: 70000000000000000000000000000011 (递增)
INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`)
VALUES ('70000000000000000000000000000011', '入库放行审核', '70000000000000000000000000000001', 'C', 'storage-release-review', '/quality-inspection/storage-release-review/index', 'biz:storageReleaseReview:list', 1, '1', '1', 'zkxw', 10, NULL, NULL, '', NOW(), NULL, NOW(), 0);
-91
View File
@@ -1,91 +0,0 @@
-- 快递公司初始化(仅国内)
-- 用法:
-- 1) 默认租户为 zkxw,如需其他租户请修改 @tenant_no
-- 2) 可重复执行:按 tenant_no + express_code + del_flag=0 去重插入
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET @tenant_no = 'zkxw';
SET @operator_id = 'd3000000000000000000000000000001';
START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS tmp_express_company_seed;
CREATE TEMPORARY TABLE tmp_express_company_seed (
express_code varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
express_name varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
order_num int(11) DEFAULT NULL,
remark varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=Memory DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO tmp_express_company_seed (express_code, express_name, order_num, remark) VALUES
('sf', '顺丰速运', 1, '国内主流快递'),
('jd', '京东快递', 2, '国内主流快递'),
('zt', '中通快递', 3, '国内主流快递'),
('yt', '圆通速递', 4, '国内主流快递'),
('sto', '申通快递', 5, '国内主流快递'),
('yunda', '韵达速递', 6, '国内主流快递'),
('deppon', '德邦快递', 7, '国内主流快递'),
('ems', 'EMS中国邮政速递物流', 8, '国家邮政体系'),
('youzheng', '中国邮政', 9, '邮政包裹/普邮'),
('jtexpress', '极兔速递', 10, '国内主流快递'),
('zjs', '宅急送', 11, '国内常见快递'),
('anneng', '安能物流', 12, '零担/大件常见'),
('suning', '苏宁物流', 13, '电商体系物流'),
('best', '百世快递', 14, '原百世快递体系'),
('tiantian', '天天快递', 15, '历史常见渠道'),
('guotong', '国通快递', 16, '历史常见渠道'),
('quanfen', '全峰快递', 17, '历史常见渠道'),
('rufengda', '如风达', 18, '历史常见渠道'),
('kuaijie', '快捷快递', 19, '历史常见渠道'),
('huitong', '汇通快运', 20, '区域快运常见'),
('yousu', '优速快递', 21, '国内常见快递'),
('suer', '速尔快递', 22, '国内常见快递'),
('ky', '跨越速运', 23, '企业件/时效件常见'),
('ymdd', '壹米滴答', 24, '零担快运常见'),
('longbang', '龙邦快递', 25, '国内常见快递');
INSERT INTO biz_express_company (
id,
express_code,
express_name,
tenant_no,
order_num,
remark,
create_by,
create_dept_id,
create_time,
update_by,
update_time,
del_flag
)
SELECT
CONCAT(
REPLACE(UUID(), '-', ''),
LPAD(CONV(CRC32(t.express_code), 10, 16), 8, '0')
),
t.express_code,
t.express_name,
@tenant_no,
t.order_num,
t.remark,
@operator_id,
'',
NOW(),
@operator_id,
NOW(),
0
FROM tmp_express_company_seed t
WHERE NOT EXISTS (
SELECT 1
FROM biz_express_company e
WHERE e.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no COLLATE utf8mb4_unicode_ci
AND e.express_code COLLATE utf8mb4_unicode_ci = t.express_code COLLATE utf8mb4_unicode_ci
AND e.del_flag = 0
);
DROP TEMPORARY TABLE IF EXISTS tmp_express_company_seed;
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
-3
View File
@@ -1,3 +0,0 @@
-- 市场物料库:增加预警库存字段(与质检物料库 biz_qc_material.warning_qty 对齐)
ALTER TABLE `biz_material`
ADD COLUMN `warning_qty` decimal(18, 4) NOT NULL DEFAULT 0 COMMENT '预警库存量' AFTER `stock_qty`;
@@ -1,80 +0,0 @@
-- ============================================================
-- 生产物料库存管理 - 数据库迁移脚本
-- 变更: production-material-inventory
-- ============================================================
-- 1. biz_consumable 新增库存字段
ALTER TABLE `biz_consumable`
ADD COLUMN `stock_qty` DECIMAL(18,4) NOT NULL DEFAULT 0.0000 COMMENT '当前库存量' AFTER `description`,
ADD COLUMN `warning_qty` DECIMAL(18,4) NOT NULL DEFAULT 0.0000 COMMENT '预警库存量' AFTER `stock_qty`,
ADD COLUMN `status` CHAR(1) NOT NULL DEFAULT '1' COMMENT '1-启用 0-停用' AFTER `warning_qty`;
-- 2. biz_reagent 新增库存字段
ALTER TABLE `biz_reagent`
ADD COLUMN `stock_qty` DECIMAL(18,4) NOT NULL DEFAULT 0.0000 COMMENT '当前库存量' AFTER `description`,
ADD COLUMN `warning_qty` DECIMAL(18,4) NOT NULL DEFAULT 0.0000 COMMENT '预警库存量' AFTER `stock_qty`,
ADD COLUMN `status` CHAR(1) NOT NULL DEFAULT '1' COMMENT '1-启用 0-停用' AFTER `warning_qty`;
-- 3. 耗材变动记录表
CREATE TABLE `biz_consumable_stock_log` (
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`material_id` VARCHAR(64) NOT NULL COMMENT '耗材ID',
`material_code` VARCHAR(64) DEFAULT NULL COMMENT '耗材编码快照',
`material_name` VARCHAR(200) DEFAULT NULL COMMENT '耗材名称快照',
`change_type` VARCHAR(16) NOT NULL COMMENT '变动类型:in入库 / use使用出库',
`change_qty` DECIMAL(18,4) NOT NULL COMMENT '变动数量(入库正数,出库负数)',
`stock_before` DECIMAL(18,4) NOT NULL COMMENT '变动前库存',
`stock_after` DECIMAL(18,4) NOT NULL COMMENT '变动后库存',
`source_type` VARCHAR(16) NOT NULL COMMENT '来源:manual_in / manual_out / step_save',
`step_id` VARCHAR(64) DEFAULT NULL COMMENT '生产任务步骤ID(step_save时有值)',
`task_id` VARCHAR(64) DEFAULT NULL COMMENT '生产任务ID(step_save时有值)',
`task_no` VARCHAR(32) DEFAULT NULL COMMENT '生产任务编号快照',
`receiver` VARCHAR(64) DEFAULT NULL COMMENT '领用人(手动出库时)',
`purpose` VARCHAR(512) DEFAULT NULL COMMENT '用途/事由(手动出库时)',
`tenant_no` VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人id',
`create_dept_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人id',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
INDEX `idx_csl_material` (`material_id`, `del_flag`),
INDEX `idx_csl_step` (`step_id`, `del_flag`),
INDEX `idx_csl_task` (`task_id`, `del_flag`),
INDEX `idx_csl_tenant_time` (`tenant_no`, `change_type`, `create_time`),
INDEX `idx_csl_source` (`source_type`, `del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='耗材变动记录';
-- 4. 试剂变动记录表
CREATE TABLE `biz_reagent_stock_log` (
`id` VARCHAR(64) NOT NULL COMMENT '主键ID',
`material_id` VARCHAR(64) NOT NULL COMMENT '试剂ID',
`material_code` VARCHAR(64) DEFAULT NULL COMMENT '试剂编码快照',
`material_name` VARCHAR(200) DEFAULT NULL COMMENT '试剂名称快照',
`change_type` VARCHAR(16) NOT NULL COMMENT '变动类型:in入库 / use使用出库',
`change_qty` DECIMAL(18,4) NOT NULL COMMENT '变动数量(入库正数,出库负数)',
`stock_before` DECIMAL(18,4) NOT NULL COMMENT '变动前库存',
`stock_after` DECIMAL(18,4) NOT NULL COMMENT '变动后库存',
`source_type` VARCHAR(16) NOT NULL COMMENT '来源:manual_in / manual_out / step_save',
`step_id` VARCHAR(64) DEFAULT NULL COMMENT '生产任务步骤ID(step_save时有值)',
`task_id` VARCHAR(64) DEFAULT NULL COMMENT '生产任务ID(step_save时有值)',
`task_no` VARCHAR(32) DEFAULT NULL COMMENT '生产任务编号快照',
`receiver` VARCHAR(64) DEFAULT NULL COMMENT '领用人(手动出库时)',
`purpose` VARCHAR(512) DEFAULT NULL COMMENT '用途/事由(手动出库时)',
`tenant_no` VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人id',
`create_dept_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人id',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
INDEX `idx_rsl_material` (`material_id`, `del_flag`),
INDEX `idx_rsl_step` (`step_id`, `del_flag`),
INDEX `idx_rsl_task` (`task_id`, `del_flag`),
INDEX `idx_rsl_tenant_time` (`tenant_no`, `change_type`, `create_time`),
INDEX `idx_rsl_source` (`source_type`, `del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试剂变动记录';
@@ -1,5 +0,0 @@
-- 生产任务表增加任务类型字段
-- 区分入库生产单 (cell_storage) / 出库生产单 (outbound)
ALTER TABLE biz_production_task
ADD COLUMN task_type VARCHAR(20) NOT NULL DEFAULT 'cell_storage' COMMENT '任务类型 cell_storage入库生产单 outbound出库生产单'
AFTER work_order_id;
-109
View File
@@ -1,109 +0,0 @@
-- 质检物料库测试数据(biz_qc_material / biz_qc_material_usage)
--
-- 用法:
-- 1) 默认租户 zkxw,默认操作人 d3000000000000000000000000000001(与 zkxw.sql 演示账号一致)
-- 2) 可重复执行:按物料编码前缀 QC-MAT-DEMO- 清理后重新插入
-- 3) 执行前请确认已建表(见 docs/superpowers/plans/2026-05-20-qc-material-library.md 中 DDL)
--
-- 示例:
-- mysql -u root -p zkxw < docs/sql/qc_material_demo_seed.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET @tenant_no = 'zkxw';
SET @operator_id = 'd3000000000000000000000000000001';
SET @now = NOW();
START TRANSACTION;
-- 清理旧测试数据(先删变动记录,再删物料)
DELETE u
FROM `biz_qc_material_usage` u
INNER JOIN `biz_qc_material` m ON m.`id` = u.`material_id`
WHERE m.`tenant_no` = @tenant_no
AND m.`material_code` LIKE 'QC-MAT-DEMO-%';
DELETE FROM `biz_qc_material`
WHERE `tenant_no` = @tenant_no
AND `material_code` LIKE 'QC-MAT-DEMO-%';
-- ----------------------------
-- 质检物料主数据(10 条)
-- 覆盖:正常库存 / 库存预警 / 零库存 / 停用
-- ----------------------------
INSERT INTO `biz_qc_material` (
`id`,
`material_code`,
`material_name`,
`spec_model`,
`unit`,
`stock_qty`,
`warning_qty`,
`status`,
`tenant_no`,
`order_num`,
`remark`,
`create_by`,
`create_dept_id`,
`create_time`,
`update_by`,
`update_time`,
`del_flag`
) VALUES
('q1000000000000000000000000000001', 'QC-MAT-DEMO-001', 'PCR 扩增引物 Mix', '20× 预混', '支', 120.0000, 50.0000, '1', @tenant_no, 1, '常温避光', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000002', 'QC-MAT-DEMO-002', '核酸提取试剂盒', '96 孔板适用', '盒', 35.0000, 40.0000, '1', @tenant_no, 2, '库存低于预警线', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000003', 'QC-MAT-DEMO-003', '琼脂糖', 'Bio-Rad 常规型', 'g', 8.0000, 10.0000, '1', @tenant_no, 3, '粉末,干燥保存', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000004', 'QC-MAT-DEMO-004', 'TAE 电泳缓冲液', '50× 浓缩', '瓶', 200.0000, 30.0000, '1', @tenant_no, 4, NULL, @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000005', 'QC-MAT-DEMO-005', '无菌吸头', '200μL 滤芯', '盒', 5000.0000, 500.0000, '1', @tenant_no, 5, '每盒 96 支', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000006', 'QC-MAT-DEMO-006', 'EP 离心管', '1.5mL 锥底', '包', 3000.0000, 200.0000, '1', @tenant_no, 6, '每包 500 支', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000007', 'QC-MAT-DEMO-007', '医用丁腈手套', 'M 码 无粉', '盒', 150.0000, 50.0000, '1', @tenant_no, 7, '每盒 100 只', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000008', 'QC-MAT-DEMO-008', '75% 乙醇消毒液', '500ml 喷雾', '瓶', 0.0000, 20.0000, '1', @tenant_no, 8, '零库存,可测入库', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000009', 'QC-MAT-DEMO-009', '质检标准品', '冻干粉 1mg', '支', 25.0000, 10.0000, '1', @tenant_no, 9, '-20℃ 保存', @operator_id, '', @now, @operator_id, @now, 0),
('q1000000000000000000000000000010', 'QC-MAT-DEMO-010', '细胞培养基(旧批次)', '500ml', '瓶', 15.0000, 5.0000, '0', @tenant_no, 10, '停用批次,仅保留档案', @operator_id, '', @now, @operator_id, @now, 0);
-- ----------------------------
-- 物料变动记录(3 条,便于「物料变动记录」页联调)
-- change_type: in=入库 / use=使用;source_type: manual_in / task_complete
-- ----------------------------
INSERT INTO `biz_qc_material_usage` (
`id`,
`material_id`,
`material_code`,
`material_name`,
`change_type`,
`change_qty`,
`stock_after`,
`qc_task_id`,
`qc_task_no`,
`source_type`,
`tenant_no`,
`remark`,
`create_by`,
`create_dept_id`,
`create_time`,
`update_by`,
`update_time`,
`del_flag`
) VALUES
('qu100000000000000000000000000001', 'q1000000000000000000000000000001', 'QC-MAT-DEMO-001', 'PCR 扩增引物 Mix', 'in', 50.0000, 70.0000, NULL, NULL, 'manual_in', @tenant_no, '期初入库', @operator_id, '', DATE_SUB(@now, INTERVAL 7 DAY), @operator_id, DATE_SUB(@now, INTERVAL 7 DAY), 0),
('qu100000000000000000000000000002', 'q1000000000000000000000000000001', 'QC-MAT-DEMO-001', 'PCR 扩增引物 Mix', 'in', 50.0000, 120.0000, NULL, NULL, 'manual_in', @tenant_no, '补货入库', @operator_id, '', DATE_SUB(@now, INTERVAL 2 DAY), @operator_id, DATE_SUB(@now, INTERVAL 2 DAY), 0),
('qu100000000000000000000000000003', 'q1000000000000000000000000000002', 'QC-MAT-DEMO-002', '核酸提取试剂盒', 'use', -5.0000, 35.0000, NULL, 'QC-DEMO-TASK-001', 'task_complete', @tenant_no, '演示任务消耗', @operator_id, '', DATE_SUB(@now, INTERVAL 1 DAY), @operator_id, DATE_SUB(@now, INTERVAL 1 DAY), 0);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
-- 插入结果速览
SELECT
material_code AS `物料编码`,
material_name AS `物料名称`,
stock_qty AS `当前库存`,
warning_qty AS `预警库存`,
CASE WHEN status = '1' THEN '正常' ELSE '停用' END AS `状态`,
CASE WHEN stock_qty <= warning_qty THEN '库存预警' ELSE '正常' END AS `库存状态`
FROM `biz_qc_material`
WHERE `tenant_no` = @tenant_no
AND `material_code` LIKE 'QC-MAT-DEMO-%'
AND `del_flag` = 0
ORDER BY `order_num`;
@@ -1,33 +0,0 @@
-- 质检物料变动记录:出库领用人/用途独立字段,来源类型补充 manual_out
-- 用法:mysql -u root -p zkxw < docs/sql/qc_material_usage_out_fields_alter.sql
SET NAMES utf8mb4;
ALTER TABLE `biz_qc_material_usage`
ADD COLUMN `receiver` varchar(64) DEFAULT NULL COMMENT '领用人(手动出库)' AFTER `qc_task_no`,
ADD COLUMN `purpose` varchar(512) DEFAULT NULL COMMENT '用途/事由(手动出库)' AFTER `receiver`;
ALTER TABLE `biz_qc_material_usage`
MODIFY COLUMN `source_type` varchar(16) NOT NULL COMMENT '来源:task_complete任务完成 / manual_in手动入库 / manual_out手动出库';
-- 历史数据:从备注中回填领用人、用途(格式:领用人:xxx;用途:yyy)
UPDATE `biz_qc_material_usage`
SET
`receiver` = TRIM(
SUBSTRING_INDEX(
SUBSTRING_INDEX(`remark`, '领用人:', -1),
';',
1
)
),
`purpose` = TRIM(
SUBSTRING_INDEX(
SUBSTRING_INDEX(`remark`, '用途:', -1),
';',
1
)
)
WHERE `source_type` = 'manual_out'
AND `del_flag` = 0
AND (`receiver` IS NULL OR `receiver` = '')
AND `remark` LIKE '%领用人:%';
@@ -1,25 +0,0 @@
-- 回填手动出库记录的领用人、用途(从 remark 解析,可重复执行)
SET NAMES utf8mb4;
UPDATE `biz_qc_material_usage`
SET
`receiver` = TRIM(
SUBSTRING_INDEX(
SUBSTRING_INDEX(`remark`, '领用人:', -1),
';',
1
)
),
`purpose` = TRIM(
SUBSTRING_INDEX(
SUBSTRING_INDEX(`remark`, '用途:', -1),
';',
1
)
)
WHERE `source_type` = 'manual_out'
AND `del_flag` = 0
AND `remark` LIKE '%领用人:%'
AND (
`receiver` IS NULL OR `receiver` = '' OR `purpose` IS NULL OR `purpose` = ''
);
@@ -1,18 +0,0 @@
-- 细胞存储管理:菜单更名
-- 物料库 → 市场物料库(id=50000000000000000000000000000009)
-- 物料变动记录 → 市场物料变动记录(id=50000000000000000000000000000010)
-- 用法:mysql -u root -p zkxw < docs/sql/sys_menu_cell_storage_material_rename.sql
SET NAMES utf8mb4;
UPDATE `sys_menu`
SET `menu_name` = '市场物料库',
`update_time` = NOW()
WHERE `id` = '50000000000000000000000000000009'
AND `del_flag` = 0;
UPDATE `sys_menu`
SET `menu_name` = '市场物料变动记录',
`update_time` = NOW()
WHERE `id` = '50000000000000000000000000000010'
AND `del_flag` = 0;
@@ -1,10 +0,0 @@
-- 质量检测:菜单「物料变动记录」更名为「质检物料变动记录」
-- 用法:mysql -u root -p zkxw < docs/sql/sys_menu_qc_material_usage_rename.sql
SET NAMES utf8mb4;
UPDATE `sys_menu`
SET `menu_name` = '质检物料变动记录',
`update_time` = NOW()
WHERE `id` = '70000000000000000000000000000010'
AND `del_flag` = 0;
+3664 -1161
View File
File diff suppressed because it is too large. Load diff