feat: 细胞存储缴费催缴、统一样本信息与协议支付能力增强
汇总近期业务改动:催缴菜单与后端、样本信息快捷登记与进度、运费关联、客户档案扩展、协议优惠/期次与押金划转,并同步 SQL 迁移与管理端页面收敛。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
2d3472f5c4
commit
db31990ebe
235 files changed
+14898
-10196
No files matched your search
@@ -3,7 +3,8 @@
|
||||
-- 说明:
|
||||
-- 1) biz_collection_protocol 增量字段用 information_schema 判断后 ADD,可重复执行
|
||||
-- 2) payment_model_version 默认 2;首次升级将存量行置为 1(已有 version=1 则跳过 UPDATE)
|
||||
-- 3) 新表 CREATE TABLE IF NOT EXISTS
|
||||
-- 3) 新表 CREATE TABLE IF NOT EXISTS,校对规则与存量库一致:utf8mb4_unicode_ci
|
||||
-- 4) 第 9 节 CONVERT 用于已建表纠偏(可重复执行)
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 1) 采集协议单增量字段
|
||||
@@ -75,7 +76,7 @@ CREATE TABLE IF NOT EXISTS `biz_protocol_sample_payment` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_psp_tenant_protocol` (`tenant_no`,`collection_protocol_id`,`del_flag`),
|
||||
KEY `idx_psp_tenant_sample` (`tenant_no`,`sample_code`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采集协议单-按样本缴费方案';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集协议单-按样本缴费方案';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 3) 应缴批次
|
||||
@@ -100,7 +101,7 @@ CREATE TABLE IF NOT EXISTS `biz_protocol_payment_schedule` (
|
||||
`del_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pps_tenant_protocol` (`tenant_no`,`collection_protocol_id`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采集协议单-应缴批次';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集协议单-应缴批次';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 4) 转账笔(无退费字段)
|
||||
@@ -131,7 +132,7 @@ CREATE TABLE IF NOT EXISTS `biz_protocol_payment_transfer` (
|
||||
KEY `idx_ppt_tenant_protocol` (`tenant_no`,`collection_protocol_id`,`del_flag`),
|
||||
KEY `idx_ppt_tenant_sample` (`tenant_no`,`sample_code`,`del_flag`),
|
||||
KEY `idx_ppt_tenant_pay_status` (`tenant_no`,`pay_status`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采集协议单-缴费转账笔';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集协议单-缴费转账笔';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 5) 协议退费登记
|
||||
@@ -155,7 +156,7 @@ CREATE TABLE IF NOT EXISTS `biz_protocol_refund_record` (
|
||||
`del_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_prr_tenant_protocol` (`tenant_no`,`collection_protocol_id`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采集协议单-退费登记';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集协议单-退费登记';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 6) 预签约订单
|
||||
@@ -171,8 +172,9 @@ CREATE TABLE IF NOT EXISTS `biz_presign_order` (
|
||||
`sample_collect_time` datetime DEFAULT NULL COMMENT '采集时间',
|
||||
`pay_mode` varchar(8) DEFAULT NULL COMMENT '整单缴费方式 dj/fq',
|
||||
`contract_amount` decimal(18,2) DEFAULT NULL COMMENT '整单合同金额',
|
||||
`collector_user_id` varchar(64) DEFAULT NULL COMMENT '采集专员用户ID',
|
||||
`sales_user_id` varchar(64) DEFAULT NULL COMMENT '市场专员用户ID',
|
||||
`region_manager_user_id` varchar(64) DEFAULT NULL COMMENT '地区经理用户ID',
|
||||
`region_manager_user_id` varchar(64) DEFAULT NULL COMMENT '采集经理/地区经理用户ID',
|
||||
`order_status` varchar(16) DEFAULT NULL COMMENT '订单状态 draft/active/converted/void',
|
||||
`converted_protocol_id` varchar(64) DEFAULT NULL COMMENT '转成的正式协议ID',
|
||||
`tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
|
||||
@@ -186,7 +188,17 @@ CREATE TABLE IF NOT EXISTS `biz_presign_order` (
|
||||
`del_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_po_tenant_protocol_no` (`tenant_no`,`protocol_no`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预签约订单';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预签约订单';
|
||||
|
||||
-- 已建表环境增量:采集专员
|
||||
SET @col_exists := (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'biz_presign_order' AND COLUMN_NAME = 'collector_user_id'
|
||||
);
|
||||
SET @sql := IF(@col_exists = 0,
|
||||
'ALTER TABLE `biz_presign_order` ADD COLUMN `collector_user_id` VARCHAR(64) DEFAULT NULL COMMENT ''采集专员用户ID'' AFTER `contract_amount`',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 7) 预签约样本类型
|
||||
@@ -206,7 +218,7 @@ CREATE TABLE IF NOT EXISTS `biz_presign_order_sample_type` (
|
||||
`del_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_post_presign` (`tenant_no`,`presign_order_id`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预签约订单-样本类型';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预签约订单-样本类型';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 8) 预签约意向金转账笔
|
||||
@@ -233,4 +245,15 @@ CREATE TABLE IF NOT EXISTS `biz_presign_transfer` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pt_tenant_pay_status` (`tenant_no`,`pay_status`,`del_flag`),
|
||||
KEY `idx_pt_presign` (`tenant_no`,`presign_order_id`,`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预签约订单-意向金转账笔';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预签约订单-意向金转账笔';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 9) 已建表校对规则对齐存量库 utf8mb4_unicode_ci(避免 JOIN 报 1267 mix of collations)
|
||||
-- ---------------------------------------------------------------------------
|
||||
ALTER TABLE `biz_protocol_sample_payment` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE `biz_protocol_payment_schedule` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE `biz_protocol_payment_transfer` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE `biz_protocol_refund_record` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE `biz_presign_order` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE `biz_presign_order_sample_type` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE `biz_presign_transfer` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
@@ -1,18 +0,0 @@
|
||||
-- 菜单更名:细胞采集基础信息维护 → 采集地区及医院
|
||||
-- 对应前端路由/静态菜单:sqxp.ts、backend/app/api/menu.py
|
||||
|
||||
UPDATE `sys_menu`
|
||||
SET
|
||||
`menu_name` = '采集地区及医院',
|
||||
`update_time` = NOW()
|
||||
WHERE `id` = '123'
|
||||
AND `del_flag` = 0;
|
||||
|
||||
-- 兼容按权限标识匹配(若环境环境 id 不同)
|
||||
UPDATE `sys_menu`
|
||||
SET
|
||||
`menu_name` = '采集地区及医院',
|
||||
`update_time` = NOW()
|
||||
WHERE `del_flag` = 0
|
||||
AND `perms` = 'biz:collectionRegion:list'
|
||||
AND `menu_name` <> '采集地区及医院';
|
||||
@@ -1,20 +0,0 @@
|
||||
-- OA 审批实例评论
|
||||
CREATE TABLE IF NOT EXISTS `oa_instance_comment` (
|
||||
`id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键ID',
|
||||
`instance_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属实例ID',
|
||||
`content` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评论正文',
|
||||
`attachment_refs_json` text COLLATE utf8mb4_unicode_ci COMMENT '引用表单附件快照 JSON',
|
||||
`status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'normal' COMMENT 'normal/revoked',
|
||||
`revoked_time` datetime DEFAULT NULL COMMENT '撤回时间',
|
||||
`tenant_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
|
||||
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
|
||||
`remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
|
||||
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人id(评论作者)',
|
||||
`create_dept_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建人部门ID',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人id',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`del_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_oa_comment_tenant_inst_time` (`tenant_no`,`instance_id`,`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OA审批实例评论';
|
||||
@@ -1,97 +0,0 @@
|
||||
-- 评论 @ 用户:查看授权(不写入抄送任务)
|
||||
ALTER TABLE `oa_instance_comment`
|
||||
ADD COLUMN `mention_user_ids_json` text COLLATE utf8mb4_unicode_ci NULL COMMENT '评论@用户ID列表 JSON' AFTER `revoked_time`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `oa_instance_view_grant` (
|
||||
`id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键ID',
|
||||
`instance_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实例ID',
|
||||
`user_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '被授权查看人',
|
||||
`source` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'comment_mention' COMMENT 'comment_mention',
|
||||
`comment_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源评论ID,撤回评论不删除授权',
|
||||
`granted_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '授权人',
|
||||
`tenant_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
|
||||
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
|
||||
`remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
|
||||
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人id',
|
||||
`create_dept_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建人部门ID',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人id',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`del_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_oa_view_grant_user` (`tenant_no`,`instance_id`,`user_id`),
|
||||
KEY `idx_oa_view_grant_user_time` (`tenant_no`,`user_id`,`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OA审批实例查看授权';
|
||||
|
||||
-- 移动端「提到我的」:挂在与「抄送我的」相同的父菜单下,并复制其角色授权
|
||||
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`
|
||||
)
|
||||
SELECT
|
||||
MD5(CONCAT('oa-mention-', s.`tenant_no`, '-', s.`id`)),
|
||||
'提到我的',
|
||||
s.`parent_id`,
|
||||
s.`menu_type`,
|
||||
'/pages/oa/mentions/index',
|
||||
s.`component`,
|
||||
'oa:mention',
|
||||
s.`is_frame`,
|
||||
s.`visible`,
|
||||
s.`status`,
|
||||
s.`tenant_no`,
|
||||
IFNULL(s.`order_num`, 0) + 1,
|
||||
'评论@后可查看的审批单',
|
||||
s.`create_by`,
|
||||
s.`create_dept_id`,
|
||||
NOW(),
|
||||
s.`update_by`,
|
||||
NOW(),
|
||||
0
|
||||
FROM `sys_menu` s
|
||||
WHERE s.`del_flag` = 0
|
||||
AND s.`menu_name` = '抄送我的'
|
||||
AND s.`path` LIKE '%oa/cc%'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `sys_menu` x
|
||||
WHERE x.`del_flag` = 0
|
||||
AND x.`tenant_no` = s.`tenant_no`
|
||||
AND x.`path` LIKE '%oa/mentions%'
|
||||
);
|
||||
|
||||
INSERT INTO `sys_role_menu` (
|
||||
`id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
|
||||
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
|
||||
)
|
||||
SELECT
|
||||
MD5(CONCAT('oa-mention-role-', rm.`role_id`, '-', m.`id`)),
|
||||
rm.`role_id`,
|
||||
m.`id`,
|
||||
m.`tenant_no`,
|
||||
NULL,
|
||||
NULL,
|
||||
rm.`create_by`,
|
||||
IFNULL(rm.`create_dept_id`, ''),
|
||||
NOW(),
|
||||
rm.`update_by`,
|
||||
NOW(),
|
||||
0
|
||||
FROM `sys_menu` m
|
||||
JOIN `sys_menu` cc
|
||||
ON cc.`del_flag` = 0
|
||||
AND cc.`tenant_no` = m.`tenant_no`
|
||||
AND cc.`parent_id` = m.`parent_id`
|
||||
AND cc.`menu_name` = '抄送我的'
|
||||
AND cc.`path` LIKE '%oa/cc%'
|
||||
JOIN `sys_role_menu` rm
|
||||
ON rm.`del_flag` = 0
|
||||
AND rm.`menu_id` = cc.`id`
|
||||
WHERE m.`del_flag` = 0
|
||||
AND m.`path` LIKE '%oa/mentions%'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `sys_role_menu` x
|
||||
WHERE x.`del_flag` = 0
|
||||
AND x.`role_id` = rm.`role_id`
|
||||
AND x.`menu_id` = m.`id`
|
||||
);
|
||||
@@ -1,68 +0,0 @@
|
||||
-- =============================================================================
|
||||
-- 清空 OA 审批「运行时实例」数据(上线前清理测试数据用)
|
||||
--
|
||||
-- 删除范围(物理删除):
|
||||
-- oa_instance_view_grant 评论@产生的查看授权
|
||||
-- oa_instance_comment 实例评论
|
||||
-- oa_relation 关联审批
|
||||
-- oa_instance_event 实例操作事件
|
||||
-- oa_task 待办/已办/抄送任务
|
||||
-- oa_instance 审批实例
|
||||
-- oa_instance_draft 发起审批草稿(非模板设计草稿)
|
||||
--
|
||||
-- 保留(不删除):
|
||||
-- oa_app_group / oa_app / oa_app_version 流程定义与已发布版本
|
||||
-- oa_receive_account 收款账户主数据
|
||||
--
|
||||
-- 使用前请先备份;默认清理全部租户。若只清某一租户,取消下方 @tenant_no 注释并赋值。
|
||||
-- =============================================================================
|
||||
|
||||
-- SET @tenant_no = 'zkxw';
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
-- 1) 评论查看授权
|
||||
DELETE FROM `oa_instance_view_grant`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
-- 2) 实例评论
|
||||
DELETE FROM `oa_instance_comment`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
-- 3) 关联审批
|
||||
DELETE FROM `oa_relation`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
-- 4) 实例事件
|
||||
DELETE FROM `oa_instance_event`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
-- 5) 审批任务
|
||||
DELETE FROM `oa_task`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
-- 6) 审批实例
|
||||
DELETE FROM `oa_instance`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
-- 7) 发起草稿
|
||||
DELETE FROM `oa_instance_draft`
|
||||
-- WHERE `tenant_no` = @tenant_no
|
||||
;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- 执行后核对(期望均为 0)
|
||||
SELECT 'oa_instance_view_grant' AS tbl, COUNT(*) AS cnt FROM `oa_instance_view_grant`
|
||||
UNION ALL SELECT 'oa_instance_comment', COUNT(*) FROM `oa_instance_comment`
|
||||
UNION ALL SELECT 'oa_relation', COUNT(*) FROM `oa_relation`
|
||||
UNION ALL SELECT 'oa_instance_event', COUNT(*) FROM `oa_instance_event`
|
||||
UNION ALL SELECT 'oa_task', COUNT(*) FROM `oa_task`
|
||||
UNION ALL SELECT 'oa_instance', COUNT(*) FROM `oa_instance`
|
||||
UNION ALL SELECT 'oa_instance_draft', COUNT(*) FROM `oa_instance_draft`;
|
||||
@@ -0,0 +1,73 @@
|
||||
-- =============================================================================
|
||||
-- 预签约订单菜单:插入 sys_menu,并授权给已有「采集协议单」的角色
|
||||
-- 测试库 zkxw-sc 已确认原先没有该菜单行。
|
||||
-- 菜单位置:采集协议单 之下、缴费信息/样本信息管理 之上
|
||||
-- id: 50000000000000000000000000000020
|
||||
-- perms: cell-storage:presign-order:list
|
||||
-- =============================================================================
|
||||
|
||||
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
|
||||
)
|
||||
SELECT
|
||||
'50000000000000000000000000000020',
|
||||
'预签约订单',
|
||||
'CEL00000000000000000000000000001',
|
||||
'C',
|
||||
'presign-order',
|
||||
'/cell-storage/presign-order/index',
|
||||
'cell-storage:presign-order:list',
|
||||
1,
|
||||
'1',
|
||||
'1',
|
||||
'zkxw',
|
||||
3,
|
||||
'细胞存储:预签约订单',
|
||||
NULL,
|
||||
'',
|
||||
NOW(),
|
||||
NULL,
|
||||
NOW(),
|
||||
0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_menu m
|
||||
WHERE m.del_flag = 0
|
||||
AND (
|
||||
m.id = '50000000000000000000000000000020'
|
||||
OR m.perms = 'cell-storage:presign-order:list'
|
||||
)
|
||||
);
|
||||
|
||||
-- 已有采集协议单权限的角色补授权(幂等)
|
||||
INSERT INTO sys_role_menu (
|
||||
id, role_id, menu_id, tenant_no, order_num, remark,
|
||||
create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
MD5(CONCAT(r.id, '|50000000000000000000000000000020')),
|
||||
r.id,
|
||||
'50000000000000000000000000000020',
|
||||
IFNULL(NULLIF(r.tenant_no, ''), 'zkxw'),
|
||||
0,
|
||||
'grant presign-order to protocol-audit roles',
|
||||
NULL,
|
||||
'',
|
||||
NOW(),
|
||||
NULL,
|
||||
NOW(),
|
||||
0
|
||||
FROM sys_role r
|
||||
INNER JOIN sys_role_menu rm
|
||||
ON rm.role_id = r.id
|
||||
AND rm.menu_id = '50000000000000000000000000000003'
|
||||
AND rm.del_flag = 0
|
||||
WHERE r.del_flag = 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu x
|
||||
WHERE x.role_id = r.id
|
||||
AND x.menu_id = '50000000000000000000000000000020'
|
||||
AND x.del_flag = 0
|
||||
);
|
||||
@@ -87,11 +87,33 @@ WHERE NOT EXISTS (
|
||||
)
|
||||
);
|
||||
|
||||
-- 3) 可选:为已有角色补授权(将 super_admin 角色 id 替换为实际值后取消注释)
|
||||
-- INSERT INTO sys_role_menu (id, role_id, menu_id, tenant_no, create_time, update_time, del_flag)
|
||||
-- SELECT UUID(), '<role_id>', '904b5173519411f1944300163e3bdd96', 'zkxw', NOW(), NOW(), 0
|
||||
-- FROM DUAL
|
||||
-- WHERE NOT EXISTS (
|
||||
-- SELECT 1 FROM sys_role_menu rm
|
||||
-- WHERE rm.menu_id = '904b5173519411f1944300163e3bdd96' AND rm.role_id = '<role_id>' AND rm.del_flag = 0
|
||||
-- );
|
||||
-- 3) 已有「采集协议单」权限的角色补授权(幂等)
|
||||
INSERT INTO sys_role_menu (
|
||||
id, role_id, menu_id, tenant_no, order_num, remark,
|
||||
create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
MD5(CONCAT(r.id, '|904b5173519411f1944300163e3bdd96')),
|
||||
r.id,
|
||||
'904b5173519411f1944300163e3bdd96',
|
||||
IFNULL(NULLIF(r.tenant_no, ''), 'zkxw'),
|
||||
0,
|
||||
'grant payment-info to protocol-audit roles',
|
||||
NULL,
|
||||
'',
|
||||
NOW(),
|
||||
NULL,
|
||||
NOW(),
|
||||
0
|
||||
FROM sys_role r
|
||||
INNER JOIN sys_role_menu rm
|
||||
ON rm.role_id = r.id
|
||||
AND rm.menu_id = '50000000000000000000000000000003'
|
||||
AND rm.del_flag = 0
|
||||
WHERE r.del_flag = 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu x
|
||||
WHERE x.role_id = r.id
|
||||
AND x.menu_id = '904b5173519411f1944300163e3bdd96'
|
||||
AND x.del_flag = 0
|
||||
);
|
||||
@@ -0,0 +1,29 @@
|
||||
-- =============================================================================
|
||||
-- 下线「科研捐赠 → 样本信息管理」侧栏菜单(2026-10-06)
|
||||
-- =============================================================================
|
||||
--
|
||||
-- 【主路径 — 前端固定菜单】
|
||||
-- 当前 Web 管理端使用 VITE_ACCESS_MODE=frontend,菜单树已从以下两处移除该子项:
|
||||
-- - web-admin/src/router/modules/sqxp.ts
|
||||
-- - backend/app/api/menu.py
|
||||
-- 样本信息仍从「细胞存储 → 样本信息管理」进入(统一页含科研捐赠 Tab)。
|
||||
-- 前端模式环境 **无需执行** 本脚本;保留供 DB 菜单模式同步。
|
||||
--
|
||||
-- 科研捐赠目录 parent_id: RSC00000000000000000000000000001
|
||||
-- 样本信息 id: 60000000000000000000000000000004
|
||||
-- perms: research-donation:sample-info:list
|
||||
-- visible: '0'=隐藏(权限码保留,统一页 Tab / 接口授权仍可用)
|
||||
-- =============================================================================
|
||||
|
||||
UPDATE sys_menu
|
||||
SET visible = '0',
|
||||
update_time = NOW()
|
||||
WHERE del_flag = 0
|
||||
AND (
|
||||
id = '60000000000000000000000000000004'
|
||||
OR perms = 'research-donation:sample-info:list'
|
||||
OR (
|
||||
path = 'sample-info'
|
||||
AND parent_id = 'RSC00000000000000000000000000001'
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,10 @@
|
||||
-- 客户主档:通用个人档案字段
|
||||
-- Spec: docs/superpowers/specs/2026-10-08-customer-profile-expand-sync-design.md
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
ALTER TABLE `biz_customer`
|
||||
ADD COLUMN `birth_ym` char(6) DEFAULT NULL COMMENT '出生年月YYYYMM' AFTER `age`,
|
||||
ADD COLUMN `ethnic` varchar(32) DEFAULT NULL COMMENT '民族' AFTER `birth_ym`,
|
||||
ADD COLUMN `email` varchar(128) DEFAULT NULL COMMENT '邮箱' AFTER `ethnic`,
|
||||
ADD COLUMN `address` varchar(512) DEFAULT NULL COMMENT '家庭住址' AFTER `email`;
|
||||
@@ -0,0 +1,10 @@
|
||||
-- 采集协议 / 科研捐赠:地区经理用户ID
|
||||
-- Spec: docs/superpowers/specs/2026-10-08-protocol-market-specialist-region-manager-design.md
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
ALTER TABLE `biz_protocol_collection_info`
|
||||
ADD COLUMN `region_manager_user_id` varchar(64) DEFAULT NULL COMMENT '地区经理用户ID' AFTER `sales_user_id`;
|
||||
|
||||
ALTER TABLE `biz_research_donation_collection`
|
||||
ADD COLUMN `region_manager_user_id` varchar(64) DEFAULT NULL COMMENT '地区经理用户ID' AFTER `sales_user_id`;
|
||||
@@ -0,0 +1,21 @@
|
||||
-- =============================================================================
|
||||
-- 侧栏二级菜单「细胞存储」更名为「存储服务」
|
||||
-- id: CEL00000000000000000000000000001
|
||||
-- 原因:该目录下统一承载细胞存储与科研捐赠业务入口
|
||||
--
|
||||
-- 【前端固定菜单】同步修改:
|
||||
-- - web-admin/src/router/modules/sqxp.ts
|
||||
-- - backend/app/api/menu.py
|
||||
-- =============================================================================
|
||||
|
||||
UPDATE sys_menu
|
||||
SET menu_name = '存储服务',
|
||||
remark = CASE
|
||||
WHEN remark IS NULL OR TRIM(remark) = '' THEN '存储服务:含细胞存储与科研捐赠统一业务入口'
|
||||
WHEN remark LIKE '%细胞存储%' THEN REPLACE(remark, '细胞存储', '存储服务')
|
||||
ELSE remark
|
||||
END,
|
||||
update_time = NOW()
|
||||
WHERE del_flag = 0
|
||||
AND id = 'CEL00000000000000000000000000001'
|
||||
AND menu_name = '细胞存储';
|
||||
@@ -0,0 +1,30 @@
|
||||
-- 若已按旧规则 YF+YYYY-MM-DD+序号 回填,纠正为 YF+YYYYMMDD+001~999
|
||||
|
||||
SET @grp := '';
|
||||
SET @seq := 0;
|
||||
|
||||
UPDATE biz_sample_freight f
|
||||
INNER JOIN (
|
||||
SELECT
|
||||
id,
|
||||
CONCAT(
|
||||
'YF',
|
||||
DATE_FORMAT(create_time, '%Y%m%d'),
|
||||
LPAD(
|
||||
@seq := IF(
|
||||
@grp = CONCAT(tenant_no, '|', DATE_FORMAT(create_time, '%Y%m%d')),
|
||||
@seq + 1,
|
||||
1
|
||||
),
|
||||
3,
|
||||
'0'
|
||||
)
|
||||
) AS new_no,
|
||||
@grp := CONCAT(tenant_no, '|', DATE_FORMAT(create_time, '%Y%m%d')) AS _grp
|
||||
FROM biz_sample_freight
|
||||
ORDER BY tenant_no ASC, create_time ASC, id ASC
|
||||
) t ON f.id = t.id
|
||||
SET f.freight_no = t.new_no;
|
||||
|
||||
ALTER TABLE biz_sample_freight
|
||||
MODIFY COLUMN freight_no VARCHAR(32) NOT NULL DEFAULT '' COMMENT '运费批次号 YF+YYYYMMDD+序号';
|
||||
@@ -0,0 +1,35 @@
|
||||
-- 运费批次号:YF + YYYYMMDD + 001~999(按租户、按日递增)
|
||||
|
||||
ALTER TABLE biz_sample_freight
|
||||
ADD COLUMN freight_no VARCHAR(32) NOT NULL DEFAULT '' COMMENT '运费批次号 YF+YYYYMMDD+序号' AFTER id;
|
||||
|
||||
-- 按租户 + 创建日回填历史数据
|
||||
SET @grp := '';
|
||||
SET @seq := 0;
|
||||
|
||||
UPDATE biz_sample_freight f
|
||||
INNER JOIN (
|
||||
SELECT
|
||||
id,
|
||||
CONCAT(
|
||||
'YF',
|
||||
DATE_FORMAT(create_time, '%Y%m%d'),
|
||||
LPAD(
|
||||
@seq := IF(
|
||||
@grp = CONCAT(tenant_no, '|', DATE_FORMAT(create_time, '%Y%m%d')),
|
||||
@seq + 1,
|
||||
1
|
||||
),
|
||||
3,
|
||||
'0'
|
||||
)
|
||||
) AS new_no,
|
||||
@grp := CONCAT(tenant_no, '|', DATE_FORMAT(create_time, '%Y%m%d')) AS _grp
|
||||
FROM biz_sample_freight
|
||||
ORDER BY tenant_no ASC, create_time ASC, id ASC
|
||||
) t ON f.id = t.id
|
||||
SET f.freight_no = t.new_no
|
||||
WHERE f.freight_no = '' OR f.freight_no IS NULL;
|
||||
|
||||
ALTER TABLE biz_sample_freight
|
||||
ADD UNIQUE KEY uk_sample_freight_tenant_no (tenant_no, freight_no);
|
||||
@@ -0,0 +1,74 @@
|
||||
-- =============================================================================
|
||||
-- 催缴信息菜单:插在缴费信息之下、样本信息管理之上
|
||||
-- id: 50000000000000000000000000000022
|
||||
-- perms / menuCode: cellStorage:paymentChase:list
|
||||
-- =============================================================================
|
||||
|
||||
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
|
||||
)
|
||||
SELECT
|
||||
'50000000000000000000000000000022',
|
||||
'催缴信息',
|
||||
'CEL00000000000000000000000000001',
|
||||
'C',
|
||||
'payment-chase',
|
||||
'/cell-storage/payment-chase/index',
|
||||
'cellStorage:paymentChase:list',
|
||||
1,
|
||||
'1',
|
||||
'1',
|
||||
'zkxw',
|
||||
5,
|
||||
'细胞存储:催缴信息(逾期∪近30天)',
|
||||
NULL,
|
||||
'',
|
||||
NOW(),
|
||||
NULL,
|
||||
NOW(),
|
||||
0
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_menu m
|
||||
WHERE m.del_flag = 0
|
||||
AND (
|
||||
m.id = '50000000000000000000000000000022'
|
||||
OR m.perms = 'cellStorage:paymentChase:list'
|
||||
)
|
||||
);
|
||||
|
||||
-- 已有缴费信息权限的角色补授权(幂等)
|
||||
INSERT INTO sys_role_menu (
|
||||
id, role_id, menu_id, tenant_no, order_num, remark,
|
||||
create_by, create_dept_id, create_time, update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
MD5(CONCAT(r.id, '|50000000000000000000000000000022')),
|
||||
r.id,
|
||||
'50000000000000000000000000000022',
|
||||
IFNULL(NULLIF(r.tenant_no, ''), 'zkxw'),
|
||||
0,
|
||||
'grant payment-chase to payment-info roles',
|
||||
NULL,
|
||||
'',
|
||||
NOW(),
|
||||
NULL,
|
||||
NOW(),
|
||||
0
|
||||
FROM sys_role r
|
||||
INNER JOIN sys_role_menu rm
|
||||
ON rm.role_id = r.id
|
||||
AND rm.del_flag = 0
|
||||
INNER JOIN sys_menu m
|
||||
ON m.id = rm.menu_id
|
||||
AND m.del_flag = 0
|
||||
AND m.perms = 'cellStorage:paymentInfo:list'
|
||||
WHERE r.del_flag = 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu x
|
||||
WHERE x.del_flag = 0
|
||||
AND x.role_id = r.id
|
||||
AND x.menu_id = '50000000000000000000000000000022'
|
||||
);
|
||||
@@ -0,0 +1,8 @@
|
||||
-- 意向金不落协议侧快照表:正式协议通过 biz_collection_protocol.source_presign_order_id
|
||||
-- 关联预签订单,读写同一份 biz_presign_transfer,保证财务审批/调整两边一致。
|
||||
--
|
||||
-- 若此前已执行过「创建 biz_protocol_deposit_transfer」的旧脚本,执行下方 DROP 清理。
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP TABLE IF EXISTS `biz_protocol_deposit_transfer`;
|
||||
Reference in new issue
Block a user