feat: 初始化LMS日计划数据结构

This commit is contained in:
zhouz
2026-08-14 13:34:11 +08:00
parent b7cf43a953
commit bd47d6dd25
2 changed files with 196 additions and 0 deletions

View File

@@ -0,0 +1,136 @@
-- LMS 日计划、调度策略、操作日志及基础数据初始化。
CREATE TABLE IF NOT EXISTS `lms_daily_plan` (
`daily_plan_id` bigint NOT NULL COMMENT '日计划ID',
`plan_code` varchar(32) NOT NULL COMMENT '日计划编码',
`source_type` tinyint NOT NULL COMMENT '来源类型1 ERP2 人工',
`erp_order_code` varchar(64) DEFAULT NULL COMMENT 'ERP订单号',
`manual_order_code` varchar(64) DEFAULT NULL COMMENT '人工订单号',
`plan_date` date NOT NULL COMMENT '计划日期',
`material_id` bigint NOT NULL COMMENT '物料ID',
`material_code` varchar(64) NOT NULL COMMENT '物料编码',
`material_name` varchar(128) NOT NULL COMMENT '物料名称',
`material_spec` varchar(255) DEFAULT NULL COMMENT '物料规格',
`plan_qty` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '计划数量',
`append_qty` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '追加数量',
`stocked_qty` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '已备货数量',
`sleeved_qty` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '已套管数量',
`packing_info` varchar(500) DEFAULT NULL COMMENT '包装信息',
`sort_seq` int NOT NULL DEFAULT 0 COMMENT '排序序号',
`weight` int NOT NULL DEFAULT 0 COMMENT '调度权重',
`order_status` tinyint NOT NULL DEFAULT 0 COMMENT '订单状态0未开始1进行中2已结束3已取消',
`stocking_status` tinyint NOT NULL DEFAULT 0 COMMENT '备货状态0未开始1进行中2已结束3已取消',
`sleeving_status` tinyint NOT NULL DEFAULT 0 COMMENT '套管状态0未开始1进行中2已结束3已取消',
`previous_order_status` tinyint DEFAULT NULL COMMENT '前一订单状态',
`previous_stocking_status` tinyint DEFAULT NULL COMMENT '前一备货状态',
`previous_sleeving_status` tinyint DEFAULT NULL COMMENT '前一套管状态',
`order_start_time` datetime DEFAULT NULL COMMENT '订单开始时间',
`order_end_time` datetime DEFAULT NULL COMMENT '订单结束时间',
`stocking_start_time` datetime DEFAULT NULL COMMENT '备货开始时间',
`stocking_end_time` datetime DEFAULT NULL COMMENT '备货结束时间',
`sleeving_start_time` datetime DEFAULT NULL COMMENT '套管开始时间',
`sleeving_end_time` datetime DEFAULT NULL COMMENT '套管结束时间',
`version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
`creator` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`daily_plan_id`),
UNIQUE KEY `uk_plan_code_tenant` (`plan_code`, `tenant_id`),
UNIQUE KEY `uk_erp_order_code_tenant` (`erp_order_code`, `tenant_id`)
) COMMENT='LMS日计划';
CREATE TABLE IF NOT EXISTS `lms_daily_plan_strategy` (
`strategy_id` bigint NOT NULL COMMENT '策略ID',
`strategy_type` tinyint NOT NULL COMMENT '策略类型1备货2套管',
`strategy_mode` tinyint NOT NULL DEFAULT 1 COMMENT '策略模式1顺序2权重',
`cursor_daily_plan_id` bigint DEFAULT NULL COMMENT '当前游标日计划ID',
`version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
`creator` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`strategy_id`),
UNIQUE KEY `uk_strategy_type_tenant` (`strategy_type`, `tenant_id`)
) COMMENT='LMS日计划调度策略';
CREATE TABLE IF NOT EXISTS `lms_daily_plan_operation_log` (
`operation_log_id` bigint NOT NULL COMMENT '操作日志ID',
`daily_plan_id` bigint DEFAULT NULL COMMENT '日计划ID',
`operation_target` varchar(32) NOT NULL COMMENT '操作对象',
`operation_type` varchar(32) NOT NULL COMMENT '操作类型',
`before_value` text COMMENT '操作前值',
`after_value` text COMMENT '操作后值',
`change_qty` decimal(18,4) DEFAULT NULL COMMENT '变更数量',
`operation_reason` varchar(500) DEFAULT NULL COMMENT '操作原因',
`operator` varchar(64) NOT NULL COMMENT '操作人',
`operation_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`operation_log_id`)
) COMMENT='LMS日计划操作日志';
-- 编码格式DP + yyyyMMdd + 4位日流水。
INSERT INTO base_code_rule
(id, rule_name, rule_code, segment_config, code_separator, letter_case, total_length,
seq_strategy, status, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000001, 'LMS日计划编码', 'LMS_DAILY_PLAN_CODE',
JSON_ARRAY(
JSON_OBJECT('type', 'PREFIX', 'value', 'DP', 'format', NULL, 'resetBy', NULL, 'startAt', NULL, 'maxValue', NULL, 'paddingLen', NULL, 'paddingChar', NULL),
JSON_OBJECT('type', 'DATE', 'value', NULL, 'format', 'yyyyMMdd', 'resetBy', NULL, 'startAt', NULL, 'maxValue', NULL, 'paddingLen', NULL, 'paddingChar', NULL),
JSON_OBJECT('type', 'SEQUENCE', 'value', NULL, 'format', NULL, 'resetBy', 'DAY', 'startAt', 1, 'maxValue', 9999, 'paddingLen', 4, 'paddingChar', '0')
), '', 0, 14, 'segment', 0, 'LMS日计划编码格式DPyyyyMMdd0001', '1', NOW(), '1', NOW(), 0
WHERE NOT EXISTS (SELECT 1 FROM base_code_rule WHERE rule_code = 'LMS_DAILY_PLAN_CODE');
-- 字典类型。
INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time)
SELECT 2093000000000000010, 'LMS日计划来源类型', 'lms_daily_plan_source_type', 0, 'LMS日计划来源类型', '1', NOW(), '1', NOW(), b'0', '1970-01-01 00:00:00'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_type WHERE type = 'lms_daily_plan_source_type' AND deleted = b'0');
INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time)
SELECT 2093000000000000020, 'LMS日计划订单状态', 'lms_daily_plan_order_status', 0, 'LMS日计划订单状态', '1', NOW(), '1', NOW(), b'0', '1970-01-01 00:00:00'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_type WHERE type = 'lms_daily_plan_order_status' AND deleted = b'0');
INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time)
SELECT 2093000000000000030, 'LMS日计划作业状态', 'lms_daily_plan_work_status', 0, 'LMS日计划作业状态', '1', NOW(), '1', NOW(), b'0', '1970-01-01 00:00:00'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_type WHERE type = 'lms_daily_plan_work_status' AND deleted = b'0');
INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time)
SELECT 2093000000000000040, 'LMS日计划策略模式', 'lms_daily_plan_strategy_mode', 0, 'LMS日计划策略模式', '1', NOW(), '1', NOW(), b'0', '1970-01-01 00:00:00'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_type WHERE type = 'lms_daily_plan_strategy_mode' AND deleted = b'0');
-- 字典数据。
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000011, 1, 'ERP', '1', 'lms_daily_plan_source_type', 0, 'primary', '', 'ERP订单', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type='lms_daily_plan_source_type' AND value='1' AND deleted=b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000012, 2, '人工', '2', 'lms_daily_plan_source_type', 0, 'success', '', '人工订单', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type='lms_daily_plan_source_type' AND value='2' AND deleted=b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000021 + seq.n, seq.n + 1, seq.label, CAST(seq.n AS CHAR), 'lms_daily_plan_order_status', 0, seq.color_type, '', CONCAT('订单', seq.label), '1', NOW(), '1', NOW(), b'0'
FROM (SELECT 0 n, '未开始' label, 'info' color_type UNION ALL SELECT 1, '进行中', 'primary' UNION ALL SELECT 2, '已结束', 'success' UNION ALL SELECT 3, '已取消', 'danger') seq
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data d WHERE d.dict_type='lms_daily_plan_order_status' AND d.value=CONVERT(seq.n, CHAR) COLLATE utf8mb4_unicode_ci AND d.deleted=b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000031 + seq.n, seq.n + 1, seq.label, CAST(seq.n AS CHAR), 'lms_daily_plan_work_status', 0, seq.color_type, '', CONCAT('作业', seq.label), '1', NOW(), '1', NOW(), b'0'
FROM (SELECT 0 n, '未开始' label, 'info' color_type UNION ALL SELECT 1, '进行中', 'primary' UNION ALL SELECT 2, '已结束', 'success' UNION ALL SELECT 3, '已取消', 'danger') seq
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data d WHERE d.dict_type='lms_daily_plan_work_status' AND d.value=CONVERT(seq.n, CHAR) COLLATE utf8mb4_unicode_ci AND d.deleted=b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000041, 1, '顺序模式', '1', 'lms_daily_plan_strategy_mode', 0, 'primary', '', '按计划顺序调度', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type='lms_daily_plan_strategy_mode' AND value='1' AND deleted=b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000042, 2, '权重轮转', '2', 'lms_daily_plan_strategy_mode', 0, 'warning', '', '按权重轮转调度', '1', NOW(), '1', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type='lms_daily_plan_strategy_mode' AND value='2' AND deleted=b'0');
-- 为全部有效租户分别初始化备货、套管顺序策略。
INSERT INTO lms_daily_plan_strategy
(strategy_id, strategy_type, strategy_mode, cursor_daily_plan_id, version, creator, create_time, updater, update_time, deleted, tenant_id)
SELECT 2093100000000000000 + tenant.id * 10 + strategy.strategy_type,
strategy.strategy_type, 1, NULL, 0, '1', NOW(), '1', NOW(), b'0', tenant.id
FROM system_tenant tenant
CROSS JOIN (SELECT 1 strategy_type UNION ALL SELECT 2) strategy
WHERE tenant.deleted = b'0'
AND NOT EXISTS (
SELECT 1 FROM lms_daily_plan_strategy existing
WHERE existing.tenant_id = tenant.id AND existing.strategy_type = strategy.strategy_type
);

View File

@@ -0,0 +1,60 @@
-- LMS 日计划菜单及按钮权限,按路径、组件和权限编码幂等插入。
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000100, '日计划管理', '', 2, 20, parent.id, 'daily-plan', '',
'lms/dailyplan/index', 'LmsDailyPlan', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
FROM system_menu parent
WHERE parent.path = 'tube-library' AND parent.deleted = b'0'
AND NOT EXISTS (SELECT 1 FROM system_menu WHERE component='lms/dailyplan/index' AND deleted=b'0');
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000101, '日计划作业', '', 2, 30, parent.id, 'daily-plan-work', '',
'lms/dailyplanwork/index', 'LmsDailyPlanWork', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
FROM system_menu parent
WHERE parent.path = 'tube-library' AND parent.deleted = b'0'
AND NOT EXISTS (SELECT 1 FROM system_menu WHERE component='lms/dailyplanwork/index' AND deleted=b'0');
-- 查询、新增、修改、启动和排程权限归属于日计划管理。
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000110 + permission.sort, permission.name, permission.code, 3, permission.sort,
menu.id, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
FROM system_menu menu
CROSS JOIN (
SELECT 1 sort, '日计划查询' name, 'lms:daily-plan:query' code
UNION ALL SELECT 2, '日计划新增', 'lms:daily-plan:create'
UNION ALL SELECT 3, '日计划修改', 'lms:daily-plan:update'
UNION ALL SELECT 4, '日计划启动', 'lms:daily-plan:start'
UNION ALL SELECT 5, '日计划排程', 'lms:daily-plan:schedule'
UNION ALL SELECT 6, '日计划策略', 'lms:daily-plan:strategy'
) permission
WHERE menu.component='lms/dailyplan/index' AND menu.deleted=b'0'
AND NOT EXISTS (SELECT 1 FROM system_menu existing WHERE existing.permission=permission.code AND existing.deleted=b'0');
-- 作业权限归属于日计划作业。
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
SELECT 2093000000000000120, '日计划作业操作', 'lms:daily-plan:operate', 3, 1, menu.id,
'', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
FROM system_menu menu
WHERE menu.component='lms/dailyplanwork/index' AND menu.deleted=b'0'
AND NOT EXISTS (SELECT 1 FROM system_menu WHERE permission='lms:daily-plan:operate' AND deleted=b'0');
-- 已授权管芯库现有子菜单的角色同步获得管芯库父目录权限。
INSERT INTO system_role_menu
(role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id)
SELECT DISTINCT child_role.role_id, parent.id, '1', NOW(), '1', NOW(), b'0', child_role.tenant_id
FROM system_role_menu child_role
JOIN system_menu child ON child.id=child_role.menu_id AND child.deleted=b'0'
JOIN system_menu parent ON parent.id=child.parent_id AND parent.path='tube-library' AND parent.deleted=b'0'
WHERE child_role.deleted=b'0'
AND NOT EXISTS (
SELECT 1 FROM system_role_menu parent_role
WHERE parent_role.role_id=child_role.role_id AND parent_role.menu_id=parent.id
AND parent_role.tenant_id=child_role.tenant_id AND parent_role.deleted=b'0'
);