原材料入库

This commit is contained in:
2026-05-15 11:34:12 +08:00
parent f5ba828eff
commit 70dced7d2c
1700 changed files with 24156 additions and 33 deletions

View File

@@ -46,7 +46,7 @@ public class MesMixerMaterial implements Serializable {
@Excel(name = "物料别名", width = 15)
private String aliasName;
@Excel(name = "状态", width = 12, replace = {"在投管_1", "未投管_0"})
@Excel(name = "状态", width = 12, replace = {"在投管_1", "未投管_0"})
private Integer feedManageStatus;
@Excel(name = "使用状态", width = 12, replace = {"使用中_1", "停用_0"})
private Integer useStatus;

View File

@@ -39,7 +39,7 @@ public class JeecgSystemApplication extends SpringBootServletInitializer {
SpringApplication app = new SpringApplication(JeecgSystemApplication.class);
Map<String, Object> defaultProperties = new HashMap<>();
defaultProperties.put("management.health.elasticsearch.enabled", false);
app.setDefaultProperties(defaultProperties);
app.setDefaultProperties(defaultProperties);
log.info("[JEECG] Elasticsearch Health Check Enabled: false" );
ConfigurableApplicationContext application = app.run(args);;

View File

@@ -0,0 +1,45 @@
-- 原材料库存建表 + 菜单权限幂等
-- ===================== 1. 建表 =====================
CREATE TABLE IF NOT EXISTS `mes_xsl_raw_material_inventory` (
`id` varchar(32) NOT NULL COMMENT '主键',
`warehouse_name` varchar(200) DEFAULT NULL COMMENT '所在仓库',
`material_name` varchar(200) DEFAULT NULL COMMENT '物料名称',
`material_code` varchar(100) DEFAULT NULL COMMENT '物料编码',
`test_result` varchar(10) DEFAULT NULL COMMENT '状态检验字典 xslmes_test_result',
`total_packages` decimal(18,3) DEFAULT 0 COMMENT '总包数',
`total_weight` decimal(18,3) DEFAULT 0 COMMENT '总重量',
`create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`tenant_id` int DEFAULT 1002 COMMENT '租户ID',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_rmi_wh_mat_result` (`warehouse_name`, `material_code`, `test_result`),
KEY `idx_rmi_material_code` (`material_code`),
KEY `idx_rmi_test_result` (`test_result`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='原材料库存';
-- ===================== 2. 菜单权限 =====================
INSERT INTO `sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`, `hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`)
SELECT '1900000000000000600', '1900000000000000300', '原材料库存', '/xslmes/mesXslRawMaterialInventory', 'xslmes/mesXslRawMaterialInventory/MesXslRawMaterialInventoryList', 1, NULL, NULL, 1, NULL, '0', 12.00, 0, 'ant-design:inbox-outlined', 0, 1, 0, 0, '原材料库存', 'admin', NOW(), 'admin', NOW(), 0, 0, '1', 0
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1900000000000000600');
INSERT INTO `sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`, `hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`)
SELECT '1900000000000000601', '1900000000000000600', '导出', NULL, NULL, 0, NULL, NULL, 2, 'xslmes:mes_xsl_raw_material_inventory:exportXls', '1', 1.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', NOW(), 'admin', NOW(), 0, 0, '1', 0
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1900000000000000601');
-- 默认管理员角色授权
INSERT INTO `sys_role_permission` (`id`, `role_id`, `permission_id`, `data_rule_ids`, `operate_date`, `operate_ip`)
SELECT REPLACE(UUID(), '-', ''), 'f6817f48af4fb3af11b9e8bf182f618b', '1900000000000000600', NULL, NOW(), '127.0.0.1'
WHERE NOT EXISTS (
SELECT 1 FROM `sys_role_permission`
WHERE `role_id` = 'f6817f48af4fb3af11b9e8bf182f618b' AND `permission_id` = '1900000000000000600'
);
INSERT INTO `sys_role_permission` (`id`, `role_id`, `permission_id`, `data_rule_ids`, `operate_date`, `operate_ip`)
SELECT REPLACE(UUID(), '-', ''), 'f6817f48af4fb3af11b9e8bf182f618b', '1900000000000000601', NULL, NOW(), '127.0.0.1'
WHERE NOT EXISTS (
SELECT 1 FROM `sys_role_permission`
WHERE `role_id` = 'f6817f48af4fb3af11b9e8bf182f618b' AND `permission_id` = '1900000000000000601'
);

View File

@@ -0,0 +1,53 @@
-- 原材料库存改为保存物料ID关联 mes_mixer_material.id并调整唯一键口径
-- 1) 新增 material_id 字段若不存在
SET @col_exists := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND COLUMN_NAME = 'material_id'
);
SET @ddl := IF(@col_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD COLUMN `material_id` varchar(32) DEFAULT NULL COMMENT ''物料ID关联 mes_mixer_material.id'' AFTER `warehouse_name`',
'SELECT 1'
);
PREPARE s1 FROM @ddl; EXECUTE s1; DEALLOCATE PREPARE s1;
-- 2) 删除旧唯一键若存在
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wh_mat_result'
);
SET @ddl := IF(@idx_exists > 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` DROP INDEX `uk_rmi_wh_mat_result`',
'SELECT 1'
);
PREPARE s2 FROM @ddl; EXECUTE s2; DEALLOCATE PREPARE s2;
-- 3) 新唯一键所在仓库 + 物料ID + 状态检验
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wh_mid_result'
);
SET @ddl := IF(@idx_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD UNIQUE KEY `uk_rmi_wh_mid_result` (`warehouse_name`, `material_id`, `test_result`)',
'SELECT 1'
);
PREPARE s3 FROM @ddl; EXECUTE s3; DEALLOCATE PREPARE s3;
-- 4) 查询索引material_id
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'idx_rmi_material_id'
);
SET @ddl := IF(@idx_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD KEY `idx_rmi_material_id` (`material_id`)',
'SELECT 1'
);
PREPARE s4 FROM @ddl; EXECUTE s4; DEALLOCATE PREPARE s4;

View File

@@ -0,0 +1,72 @@
-- 原材料库存历史数据回填 material_id material_code 关联 mes_mixer_material
-- 处理策略
-- 1) material_id 为空且可按编码匹配的库存行先聚合后写入遇唯一键冲突自动累加
-- 2) 删除已迁移的旧空 material_id 避免重复数据
-- 3) 对已有 material_id 但编码/名称为空的数据做展示字段补齐
DROP TEMPORARY TABLE IF EXISTS `tmp_rmi_backfill`;
CREATE TEMPORARY TABLE `tmp_rmi_backfill` AS
SELECT
i.warehouse_name,
m.id AS material_id,
i.test_result,
MAX(COALESCE(NULLIF(i.material_code, ''), m.material_code)) AS material_code,
MAX(COALESCE(NULLIF(i.material_name, ''), m.material_name)) AS material_name,
SUM(IFNULL(i.total_packages, 0)) AS total_packages,
SUM(IFNULL(i.total_weight, 0)) AS total_weight,
MAX(i.tenant_id) AS tenant_id
FROM mes_xsl_raw_material_inventory i
INNER JOIN mes_mixer_material m
ON m.material_code = i.material_code
AND (m.del_flag = 0 OR m.del_flag IS NULL)
WHERE (i.material_id IS NULL OR i.material_id = '')
AND i.material_code IS NOT NULL
AND i.material_code <> ''
GROUP BY i.warehouse_name, m.id, i.test_result;
INSERT INTO mes_xsl_raw_material_inventory
(`id`, `warehouse_name`, `material_id`, `material_name`, `material_code`, `test_result`, `total_packages`, `total_weight`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`)
SELECT
REPLACE(UUID(), '-', ''),
t.warehouse_name,
t.material_id,
t.material_name,
t.material_code,
t.test_result,
t.total_packages,
t.total_weight,
'admin',
NOW(),
'admin',
NOW(),
IFNULL(t.tenant_id, 1002)
FROM tmp_rmi_backfill t
ON DUPLICATE KEY UPDATE
total_packages = IFNULL(total_packages, 0) + VALUES(total_packages),
total_weight = IFNULL(total_weight, 0) + VALUES(total_weight),
material_code = CASE WHEN material_code IS NULL OR material_code = '' THEN VALUES(material_code) ELSE material_code END,
material_name = CASE WHEN material_name IS NULL OR material_name = '' THEN VALUES(material_name) ELSE material_name END,
update_by = 'admin',
update_time = NOW();
DELETE i
FROM mes_xsl_raw_material_inventory i
INNER JOIN mes_mixer_material m
ON m.material_code = i.material_code
AND (m.del_flag = 0 OR m.del_flag IS NULL)
WHERE (i.material_id IS NULL OR i.material_id = '')
AND i.material_code IS NOT NULL
AND i.material_code <> '';
UPDATE mes_xsl_raw_material_inventory i
INNER JOIN mes_mixer_material m
ON m.id = i.material_id
AND (m.del_flag = 0 OR m.del_flag IS NULL)
SET
i.material_code = CASE WHEN i.material_code IS NULL OR i.material_code = '' THEN m.material_code ELSE i.material_code END,
i.material_name = CASE WHEN i.material_name IS NULL OR i.material_name = '' THEN m.material_name ELSE i.material_name END,
i.update_by = 'admin',
i.update_time = NOW()
WHERE (i.material_code IS NULL OR i.material_code = '' OR i.material_name IS NULL OR i.material_name = '');
DROP TEMPORARY TABLE IF EXISTS `tmp_rmi_backfill`;

View File

@@ -0,0 +1,63 @@
-- 原材料库存改为保存 warehouse_id关联 mes_xsl_warehouse.id并调整唯一键口径
-- 1) 新增 warehouse_id 字段若不存在
SET @col_exists := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND COLUMN_NAME = 'warehouse_id'
);
SET @ddl := IF(@col_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD COLUMN `warehouse_id` varchar(32) DEFAULT NULL COMMENT ''所在仓库ID关联 mes_xsl_warehouse.id'' AFTER `warehouse_name`',
'SELECT 1'
);
PREPARE s1 FROM @ddl; EXECUTE s1; DEALLOCATE PREPARE s1;
-- 2) 回填 warehouse_id按仓库名称关联
UPDATE mes_xsl_raw_material_inventory i
INNER JOIN mes_xsl_warehouse w
ON w.warehouse_name = i.warehouse_name
AND (w.del_flag = 0 OR w.del_flag IS NULL)
SET i.warehouse_id = w.id
WHERE (i.warehouse_id IS NULL OR i.warehouse_id = '')
AND i.warehouse_name IS NOT NULL
AND i.warehouse_name <> '';
-- 3) 删除旧唯一键若存在
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wh_mid_result'
);
SET @ddl := IF(@idx_exists > 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` DROP INDEX `uk_rmi_wh_mid_result`',
'SELECT 1'
);
PREPARE s2 FROM @ddl; EXECUTE s2; DEALLOCATE PREPARE s2;
-- 4) 新唯一键仓库ID + 物料ID + 状态检验
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wid_mid_result'
);
SET @ddl := IF(@idx_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD UNIQUE KEY `uk_rmi_wid_mid_result` (`warehouse_id`, `material_id`, `test_result`)',
'SELECT 1'
);
PREPARE s3 FROM @ddl; EXECUTE s3; DEALLOCATE PREPARE s3;
-- 5) 查询索引warehouse_id
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'idx_rmi_warehouse_id'
);
SET @ddl := IF(@idx_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD KEY `idx_rmi_warehouse_id` (`warehouse_id`)',
'SELECT 1'
);
PREPARE s4 FROM @ddl; EXECUTE s4; DEALLOCATE PREPARE s4;

View File

@@ -0,0 +1,86 @@
-- 原材料库存所属仓库 + 物料唯一数量/重量累计
-- 处理内容
-- 1) 删除旧唯一键 test_result 维度
-- 2) 合并历史重复行同仓库同物料累计 total_packages/total_weight
-- 3) 新建唯一键warehouse_id + material_id
-- 1) 删除旧唯一键若存在
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wid_mid_result'
);
SET @ddl := IF(@idx_exists > 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` DROP INDEX `uk_rmi_wid_mid_result`',
'SELECT 1'
);
PREPARE s1 FROM @ddl; EXECUTE s1; DEALLOCATE PREPARE s1;
-- 兼容旧脚本里的唯一键名
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wh_mid_result'
);
SET @ddl := IF(@idx_exists > 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` DROP INDEX `uk_rmi_wh_mid_result`',
'SELECT 1'
);
PREPARE s2 FROM @ddl; EXECUTE s2; DEALLOCATE PREPARE s2;
-- 2) 合并历史数据
DROP TEMPORARY TABLE IF EXISTS `tmp_rmi_merge`;
CREATE TEMPORARY TABLE `tmp_rmi_merge` AS
SELECT
-- 用空串承载未回填ID避免唯一键上的 NULL 语义导致重复
COALESCE(NULLIF(MAX(NULLIF(warehouse_id, '')), ''), '') AS warehouse_id,
COALESCE(NULLIF(MAX(NULLIF(material_id, '')), ''), '') AS material_id,
MAX(COALESCE(NULLIF(warehouse_name, ''), '')) AS warehouse_name,
MAX(COALESCE(NULLIF(material_code, ''), '')) AS material_code,
MAX(COALESCE(NULLIF(material_name, ''), '')) AS material_name,
MAX(COALESCE(NULLIF(test_result, ''), '')) AS test_result,
SUM(IFNULL(total_packages, 0)) AS total_packages,
SUM(IFNULL(total_weight, 0)) AS total_weight,
MAX(tenant_id) AS tenant_id
FROM mes_xsl_raw_material_inventory
GROUP BY
COALESCE(NULLIF(warehouse_id, ''), CONCAT('NAME:', IFNULL(warehouse_name, ''))),
COALESCE(NULLIF(material_id, ''), CONCAT('CODE:', IFNULL(material_code, '')));
TRUNCATE TABLE mes_xsl_raw_material_inventory;
INSERT INTO mes_xsl_raw_material_inventory
(`id`, `warehouse_name`, `warehouse_id`, `material_id`, `material_name`, `material_code`, `test_result`, `total_packages`, `total_weight`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`)
SELECT
REPLACE(UUID(), '-', ''),
warehouse_name,
warehouse_id,
material_id,
material_name,
material_code,
test_result,
total_packages,
total_weight,
'admin',
NOW(),
'admin',
NOW(),
IFNULL(tenant_id, 1002)
FROM tmp_rmi_merge;
DROP TEMPORARY TABLE IF EXISTS `tmp_rmi_merge`;
-- 3) 新唯一键warehouse_id + material_id
SET @idx_exists := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mes_xsl_raw_material_inventory'
AND INDEX_NAME = 'uk_rmi_wid_mid'
);
SET @ddl := IF(@idx_exists = 0,
'ALTER TABLE `mes_xsl_raw_material_inventory` ADD UNIQUE KEY `uk_rmi_wid_mid` (`warehouse_id`, `material_id`)',
'SELECT 1'
);
PREPARE s3 FROM @ddl; EXECUTE s3; DEALLOCATE PREPARE s3;