diff --git a/jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql b/jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql index 6860af1..1d6decc 100644 --- a/jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql @@ -37,19 +37,22 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_downtime_main_type` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000119', @mes_base_pid, '停机主类型', '/xslmes/mesXslDowntimeMainType', 'xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList', NULL, 1, NULL, '1', 18, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000119', @mes_equip_pid, '停机主类型', '/xslmes/mesXslDowntimeMainType', 'xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList', NULL, 1, NULL, '1', 9, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), `is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), -`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`); +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:partition-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:partition-outlined' WHERE `id` = '1860000000000000119' AND `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES ('1860000000000000120', '1860000000000000119', '新增', 2, 'mes:mes_xsl_downtime_main_type:add', '1', '1', 0, 'admin', NOW()), diff --git a/jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql b/jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql index d192626..c61da61 100644 --- a/jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql @@ -45,19 +45,22 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_downtime_type` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000126', @mes_base_pid, '停机类型', '/xslmes/mesXslDowntimeType', 'xslmes/mesXslDowntimeType/MesXslDowntimeTypeList', NULL, 1, NULL, '1', 19, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000126', @mes_equip_pid, '停机类型', '/xslmes/mesXslDowntimeType', 'xslmes/mesXslDowntimeType/MesXslDowntimeTypeList', NULL, 1, NULL, '1', 10, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), `is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), -`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`); +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:pause-circle-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:pause-circle-outlined' WHERE `id` = '1860000000000000126' AND `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES ('1860000000000000127', '1860000000000000126', '新增', 2, 'mes:mes_xsl_downtime_type:add', '1', '1', 0, 'admin', NOW()), diff --git a/jeecg-boot/db/mes-xsl-equipment-category-menu-permission.sql b/jeecg-boot/db/mes-xsl-equipment-category-menu-permission.sql index b3d72fb..0fb7abb 100644 --- a/jeecg-boot/db/mes-xsl-equipment-category-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-equipment-category-menu-permission.sql @@ -56,14 +56,15 @@ WHERE d.`dict_code` = 'xslmes_equipment_maintain_distinct' SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000070', @mes_base_pid, '设备类别', '/xslmes/mesXslEquipmentCategory', 'xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList', NULL, 1, NULL, '1', 10, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000070', @mes_equip_pid, '设备类别', '/xslmes/mesXslEquipmentCategory', 'xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList', NULL, 1, NULL, '1', 2, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), diff --git a/jeecg-boot/db/mes-xsl-equipment-ledger-menu-parent-fix.sql b/jeecg-boot/db/mes-xsl-equipment-ledger-menu-parent-fix.sql new file mode 100644 index 0000000..6fd218c --- /dev/null +++ b/jeecg-boot/db/mes-xsl-equipment-ledger-menu-parent-fix.sql @@ -0,0 +1,31 @@ +-- 设备管理目录:从 MES管理 下迁出,与 MES基础资料 同级(已执行旧版 mes-xsl-equipment-ledger-menu-permission 时用) +SET NAMES utf8mb4; + +SET @mes_equip_root_parent = ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES基础资料' + LIMIT 1 +); +SET @mes_equip_root_parent = IFNULL(@mes_equip_root_parent, ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES资料' + LIMIT 1 +)); + +SET @mes_equip_root_sort = IFNULL(( + SELECT `sort_no` + 1 FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') + ORDER BY `sort_no` DESC + LIMIT 1 +), 51); + +UPDATE `sys_permission` +SET + `parent_id` = @mes_equip_root_parent, + `sort_no` = @mes_equip_root_sort, + `menu_type` = 0, + `is_leaf` = 0, + `hidden` = 0, + `status` = '1', + `del_flag` = 0 +WHERE `id` = '1860000000000000133'; diff --git a/jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql b/jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql new file mode 100644 index 0000000..2fea0db --- /dev/null +++ b/jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql @@ -0,0 +1,131 @@ +-- MES 设备台账:字典 + 建表 + 设备管理目录菜单 + 设备台账菜单 + 按钮 + 租户 admin 授权(可整文件一次执行) +-- 权限前缀:mes:mes_xsl_equipment_ledger:* +-- 父菜单:设备管理(目录,与 MES基础资料 同级,非 MES管理 子级);子菜单:设备台账 +-- 修改租户:改 SET @mes_tenant_id;新环境也可依赖 Flyway V3.9.2_72__mes_xsl_equipment_ledger.sql +SET NAMES utf8mb4; + +INSERT INTO `sys_dict` (`id`, `dict_name`, `dict_code`, `description`, `del_flag`, `create_by`, `create_time`, `type`, `tenant_id`) +SELECT REPLACE(UUID(), '-', ''), 'MES设备台账状态', 'xslmes_equipment_ledger_status', '在用/停用/报废', 0, 'admin', NOW(), 0, 0 +WHERE NOT EXISTS (SELECT 1 FROM `sys_dict` WHERE `dict_code` = 'xslmes_equipment_ledger_status' AND `del_flag` = 0); + +INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `sort_order`, `status`, `create_by`, `create_time`) +SELECT REPLACE(UUID(), '-', ''), d.id, '在用', '0', 1, 1, 'admin', NOW() FROM `sys_dict` d +WHERE d.`dict_code` = 'xslmes_equipment_ledger_status' AND NOT EXISTS (SELECT 1 FROM `sys_dict_item` i WHERE i.`dict_id` = d.id AND i.`item_value` = '0'); +INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `sort_order`, `status`, `create_by`, `create_time`) +SELECT REPLACE(UUID(), '-', ''), d.id, '停用', '1', 2, 1, 'admin', NOW() FROM `sys_dict` d +WHERE d.`dict_code` = 'xslmes_equipment_ledger_status' AND NOT EXISTS (SELECT 1 FROM `sys_dict_item` i WHERE i.`dict_id` = d.id AND i.`item_value` = '1'); +INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `sort_order`, `status`, `create_by`, `create_time`) +SELECT REPLACE(UUID(), '-', ''), d.id, '报废', '2', 3, 1, 'admin', NOW() FROM `sys_dict` d +WHERE d.`dict_code` = 'xslmes_equipment_ledger_status' AND NOT EXISTS (SELECT 1 FROM `sys_dict_item` i WHERE i.`dict_id` = d.id AND i.`item_value` = '2'); + +CREATE TABLE IF NOT EXISTS `mes_xsl_equipment_ledger` ( + `id` varchar(32) NOT NULL COMMENT '主键', + `process_operation_id` varchar(32) NOT NULL COMMENT '所属工序 mes_xsl_process_operation.id', + `process_operation_name` varchar(500) DEFAULT NULL COMMENT '工序名称冗余', + `equipment_name` varchar(500) NOT NULL COMMENT '设备名称(同租户未删除唯一)', + `equipment_code` varchar(128) NOT NULL COMMENT '设备编号(同租户未删除唯一)', + `manufacturer_id` varchar(32) DEFAULT NULL COMMENT '所属设备厂家 mes_xsl_manufacturer.id', + `manufacturer_name` varchar(500) DEFAULT NULL COMMENT '设备厂家名称冗余', + `equipment_category_id` varchar(32) DEFAULT NULL COMMENT '设备类别 mes_xsl_equipment_category.id', + `equipment_category_name` varchar(500) DEFAULT NULL COMMENT '设备类别名称冗余', + `equipment_type_id` varchar(32) DEFAULT NULL COMMENT '设备类型 mes_xsl_equipment_type.id', + `equipment_type_name` varchar(500) DEFAULT NULL COMMENT '设备类型名称冗余', + `factory_id` varchar(32) DEFAULT NULL COMMENT '所属工厂(厂家信息)', + `factory_name` varchar(500) DEFAULT NULL COMMENT '所属工厂名称冗余', + `equipment_model` varchar(500) DEFAULT NULL COMMENT '设备型号', + `equipment_status` varchar(1) NOT NULL DEFAULT '0' COMMENT '设备状态 字典xslmes_equipment_ledger_status:0在用1停用2报废', + `serial_no` varchar(500) DEFAULT NULL COMMENT '序列号', + `nameplate` varchar(500) DEFAULT NULL COMMENT '铭牌', + `maintain_dept_id` varchar(32) DEFAULT NULL COMMENT '维修部门 sys_depart.id', + `maintain_person` varchar(500) DEFAULT NULL COMMENT '维修人员', + `manage_dept_id` varchar(32) DEFAULT NULL COMMENT '主管部门 sys_depart.id', + `doc_file_no` varchar(500) DEFAULT NULL COMMENT '资料文件编号', + `production_date` date DEFAULT NULL COMMENT '生产日期', + `purchase_date` date DEFAULT NULL COMMENT '购买日期', + `use_date` date DEFAULT NULL COMMENT '使用日期', + `vendor_contact` varchar(500) DEFAULT NULL COMMENT '厂商联系人', + `asset_value` varchar(128) DEFAULT NULL COMMENT '价值', + `controlled_pda` varchar(500) DEFAULT NULL COMMENT '受控PDA', + `overproduction_ratio` varchar(128) DEFAULT NULL COMMENT '超产比率', + `effective_volume` varchar(128) DEFAULT NULL COMMENT '有效体积', + `enabled_flag` varchar(1) NOT NULL DEFAULT '1' COMMENT '是否启用 字典yn:1是0否', + `equipment_desc` varchar(1000) DEFAULT NULL COMMENT '设备描述', + `tenant_id` int DEFAULT NULL COMMENT '租户', + `sys_org_code` varchar(500) DEFAULT NULL COMMENT '部门', + `create_by` varchar(500) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(500) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `del_flag` int DEFAULT '0' COMMENT '删除标记(0正常1删除)', + PRIMARY KEY (`id`), + KEY `idx_mel_tenant_code` (`tenant_id`, `equipment_code`), + KEY `idx_mel_tenant_name` (`tenant_id`, `equipment_name`), + KEY `idx_mel_process` (`process_operation_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MES设备台账'; + +SET @mes_tenant_id = 1002; + +-- 与「MES基础资料」同级:取其 parent_id(通常为 NULL,与 MES管理 并列) +SET @mes_equip_root_parent = ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES基础资料' + LIMIT 1 +); +SET @mes_equip_root_parent = IFNULL(@mes_equip_root_parent, ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES资料' + LIMIT 1 +)); + +SET @mes_equip_root_sort = IFNULL(( + SELECT `sort_no` + 1 FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') + ORDER BY `sort_no` DESC + LIMIT 1 +), 51); + +UPDATE `sys_permission` +SET `is_leaf` = 0 +WHERE `id` = '1860000000000000133' AND `del_flag` = 0; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) +VALUES ('1860000000000000133', @mes_equip_root_parent, '设备管理', '/xslmes/equipment', 'layouts/RouteView', 'MesEquipmentLayout', 0, NULL, '1', @mes_equip_root_sort, 1, 0, 0, '1', 0, 0, 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), +`menu_type` = VALUES(`menu_type`), `icon` = 'ant-design:tool-outlined', `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0; + +UPDATE `sys_permission` SET `icon` = 'ant-design:tool-outlined' WHERE `id` = '1860000000000000133' AND `del_flag` = 0; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) +VALUES ('1860000000000000134', '1860000000000000133', '设备台账', '/xslmes/mesXslEquipmentLedger', 'xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList', 'MesXslEquipmentLedgerList', 1, NULL, '1', 1, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), +`is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES +('1860000000000000135', '1860000000000000134', '新增', 2, 'mes:mes_xsl_equipment_ledger:add', '1', '1', 0, 'admin', NOW()), +('1860000000000000136', '1860000000000000134', '编辑', 2, 'mes:mes_xsl_equipment_ledger:edit', '1', '1', 0, 'admin', NOW()), +('1860000000000000137', '1860000000000000134', '删除', 2, 'mes:mes_xsl_equipment_ledger:delete', '1', '1', 0, 'admin', NOW()), +('1860000000000000138', '1860000000000000134', '批量删除', 2, 'mes:mes_xsl_equipment_ledger:deleteBatch', '1', '1', 0, 'admin', NOW()), +('1860000000000000139', '1860000000000000134', '导出', 2, 'mes:mes_xsl_equipment_ledger:exportXls', '1', '1', 0, 'admin', NOW()), +('1860000000000000140', '1860000000000000134', '导入', 2, 'mes:mes_xsl_equipment_ledger:importExcel', '1', '1', 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), +`status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`); + +INSERT INTO `sys_role_permission`(`id`, `role_id`, `permission_id`, `operate_date`, `operate_ip`) +SELECT REPLACE(UUID(), '-', ''), r.`id`, p.`id`, NOW(), '127.0.0.1' +FROM `sys_role` r +CROSS JOIN `sys_permission` p +WHERE r.`tenant_id` = @mes_tenant_id + AND r.`role_code` = 'admin' + AND p.`id` IN ( + '1860000000000000133', + '1860000000000000134', + '1860000000000000135', '1860000000000000136', '1860000000000000137', '1860000000000000138', + '1860000000000000139', '1860000000000000140' + ) + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/jeecg-boot/db/mes-xsl-equipment-ledger.sql b/jeecg-boot/db/mes-xsl-equipment-ledger.sql new file mode 100644 index 0000000..bf49bf8 --- /dev/null +++ b/jeecg-boot/db/mes-xsl-equipment-ledger.sql @@ -0,0 +1,46 @@ +-- MES 设备台账:仅建表(完整初始化请执行 mes-xsl-equipment-ledger-menu-permission.sql) +SET NAMES utf8mb4; + +CREATE TABLE IF NOT EXISTS `mes_xsl_equipment_ledger` ( + `id` varchar(32) NOT NULL COMMENT '主键', + `process_operation_id` varchar(32) NOT NULL COMMENT '所属工序', + `process_operation_name` varchar(500) DEFAULT NULL COMMENT '工序名称冗余', + `equipment_name` varchar(500) NOT NULL COMMENT '设备名称', + `equipment_code` varchar(128) NOT NULL COMMENT '设备编号', + `manufacturer_id` varchar(32) DEFAULT NULL COMMENT '所属设备厂家', + `manufacturer_name` varchar(500) DEFAULT NULL COMMENT '设备厂家名称冗余', + `equipment_category_id` varchar(32) DEFAULT NULL COMMENT '设备类别', + `equipment_category_name` varchar(500) DEFAULT NULL COMMENT '设备类别名称冗余', + `equipment_type_id` varchar(32) DEFAULT NULL COMMENT '设备类型', + `equipment_type_name` varchar(500) DEFAULT NULL COMMENT '设备类型名称冗余', + `factory_id` varchar(32) DEFAULT NULL COMMENT '所属工厂', + `factory_name` varchar(500) DEFAULT NULL COMMENT '所属工厂名称冗余', + `equipment_model` varchar(500) DEFAULT NULL COMMENT '设备型号', + `equipment_status` varchar(1) NOT NULL DEFAULT '0' COMMENT '设备状态', + `serial_no` varchar(500) DEFAULT NULL COMMENT '序列号', + `nameplate` varchar(500) DEFAULT NULL COMMENT '铭牌', + `maintain_dept_id` varchar(32) DEFAULT NULL COMMENT '维修部门', + `maintain_person` varchar(500) DEFAULT NULL COMMENT '维修人员', + `manage_dept_id` varchar(32) DEFAULT NULL COMMENT '主管部门', + `doc_file_no` varchar(500) DEFAULT NULL COMMENT '资料文件编号', + `production_date` date DEFAULT NULL COMMENT '生产日期', + `purchase_date` date DEFAULT NULL COMMENT '购买日期', + `use_date` date DEFAULT NULL COMMENT '使用日期', + `vendor_contact` varchar(500) DEFAULT NULL COMMENT '厂商联系人', + `asset_value` varchar(128) DEFAULT NULL COMMENT '价值', + `controlled_pda` varchar(500) DEFAULT NULL COMMENT '受控PDA', + `overproduction_ratio` varchar(128) DEFAULT NULL COMMENT '超产比率', + `effective_volume` varchar(128) DEFAULT NULL COMMENT '有效体积', + `enabled_flag` varchar(1) NOT NULL DEFAULT '1' COMMENT '是否启用', + `equipment_desc` varchar(1000) DEFAULT NULL COMMENT '设备描述', + `tenant_id` int DEFAULT NULL COMMENT '租户', + `sys_org_code` varchar(500) DEFAULT NULL COMMENT '部门', + `create_by` varchar(500) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(500) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `del_flag` int DEFAULT '0' COMMENT '删除标记', + PRIMARY KEY (`id`), + KEY `idx_mel_tenant_code` (`tenant_id`, `equipment_code`), + KEY `idx_mel_tenant_name` (`tenant_id`, `equipment_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MES设备台账'; diff --git a/jeecg-boot/db/mes-xsl-equipment-menus-icon.sql b/jeecg-boot/db/mes-xsl-equipment-menus-icon.sql new file mode 100644 index 0000000..e7a78fc --- /dev/null +++ b/jeecg-boot/db/mes-xsl-equipment-menus-icon.sql @@ -0,0 +1,10 @@ +-- 设备管理目录及指定子菜单图标(可重复执行) +SET NAMES utf8mb4; + +UPDATE `sys_permission` SET `icon` = 'ant-design:tool-outlined' WHERE `id` = '1860000000000000133' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:apartment-outlined' WHERE `id` = '1860000000000000091' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:tags-outlined' WHERE `id` = '1860000000000000098' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:shopping-outlined' WHERE `id` = '1860000000000000105' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:shop-outlined' WHERE `id` = '1860000000000000112' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:partition-outlined' WHERE `id` = '1860000000000000119' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:pause-circle-outlined' WHERE `id` = '1860000000000000126' AND `del_flag` = 0; diff --git a/jeecg-boot/db/mes-xsl-equipment-part-menu-permission.sql b/jeecg-boot/db/mes-xsl-equipment-part-menu-permission.sql index 24a2dc9..2326928 100644 --- a/jeecg-boot/db/mes-xsl-equipment-part-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-equipment-part-menu-permission.sql @@ -24,14 +24,15 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_equipment_part` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000084', @mes_base_pid, '设备部位', '/xslmes/mesXslEquipmentPart', 'xslmes/mesXslEquipmentPart/MesXslEquipmentPartList', NULL, 1, NULL, '1', 12, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000084', @mes_equip_pid, '设备部位', '/xslmes/mesXslEquipmentPart', 'xslmes/mesXslEquipmentPart/MesXslEquipmentPartList', NULL, 1, NULL, '1', 4, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), diff --git a/jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql b/jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql index d9698f1..ca80c62 100644 --- a/jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql @@ -27,19 +27,22 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_equipment_sub_part` ( SET @mes_tenant_id = 1002; -SET @xslmes_root_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES XSL', 'XSLMES管理', 'XSLMES') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @xslmes_root_pid = IFNULL(@xslmes_root_pid, '1900000000000000300'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000091', @xslmes_root_pid, '设备小部位', '/xslmes/mesXslEquipmentSubPart', 'xslmes/mesXslEquipmentSubPart/MesXslEquipmentSubPartList', NULL, 1, NULL, '1', 14, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000091', @mes_equip_pid, '设备小部位', '/xslmes/mesXslEquipmentSubPart', 'xslmes/mesXslEquipmentSubPart/MesXslEquipmentSubPartList', NULL, 1, NULL, '1', 5, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), `is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), -`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`); +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:apartment-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:apartment-outlined' WHERE `id` = '1860000000000000091' AND `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES ('1860000000000000092', '1860000000000000091', '新增', 2, 'mes:mes_xsl_equipment_sub_part:add', '1', '1', 0, 'admin', NOW()), diff --git a/jeecg-boot/db/mes-xsl-equipment-type-menu-fix.sql b/jeecg-boot/db/mes-xsl-equipment-type-menu-fix.sql index d8e46a4..8b3b5fb 100644 --- a/jeecg-boot/db/mes-xsl-equipment-type-menu-fix.sql +++ b/jeecg-boot/db/mes-xsl-equipment-type-menu-fix.sql @@ -1,26 +1,22 @@ --- 设备类型菜单/按钮补全并挂到 MES基础资料(解决仅 UPDATE 时 id 077 不存在、菜单与权限均不显示) +-- 设备类型菜单/按钮补全并挂到「设备管理」(解决仅 UPDATE 时 id 077 不存在、菜单与权限均不显示) -- 可重复执行;修改租户改 SET @mes_tenant_id SET NAMES utf8mb4; SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( +SET @mes_equip_pid = ( SELECT `id` FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES基础资料' + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES资料' -)); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); UPDATE `sys_permission` SET `is_leaf` = 0 -WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料'); +WHERE `id` = @mes_equip_pid; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000077', @mes_base_pid, '设备类型', '/xslmes/mesXslEquipmentType', 'xslmes/mesXslEquipmentType/MesXslEquipmentTypeList', NULL, 1, NULL, '1', 11, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000077', @mes_equip_pid, '设备类型', '/xslmes/mesXslEquipmentType', 'xslmes/mesXslEquipmentType/MesXslEquipmentTypeList', NULL, 1, NULL, '1', 3, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), @@ -39,7 +35,7 @@ ON DUPLICATE KEY UPDATE `perms_type` = VALUES(`perms_type`), `is_leaf` = 1, `status` = '1', `del_flag` = 0; UPDATE `sys_permission` p -INNER JOIN (SELECT @mes_base_pid AS `pid`) x ON 1 = 1 +INNER JOIN (SELECT @mes_equip_pid AS `pid`) x ON 1 = 1 SET p.`parent_id` = x.`pid`, p.`is_leaf` = 0, p.`url` = '/xslmes/mesXslEquipmentType', diff --git a/jeecg-boot/db/mes-xsl-equipment-type-menu-permission.sql b/jeecg-boot/db/mes-xsl-equipment-type-menu-permission.sql index 45b3551..de933f0 100644 --- a/jeecg-boot/db/mes-xsl-equipment-type-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-equipment-type-menu-permission.sql @@ -23,14 +23,15 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_equipment_type` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000077', @mes_base_pid, '设备类型', '/xslmes/mesXslEquipmentType', 'xslmes/mesXslEquipmentType/MesXslEquipmentTypeList', NULL, 1, NULL, '1', 11, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000077', @mes_equip_pid, '设备类型', '/xslmes/mesXslEquipmentType', 'xslmes/mesXslEquipmentType/MesXslEquipmentTypeList', NULL, 1, NULL, '1', 3, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), diff --git a/jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql b/jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql index 795facf..26141fa 100644 --- a/jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql @@ -1,6 +1,6 @@ -- MES 厂家信息:字典 + 建表 + 菜单 + 按钮 + 租户 admin 授权(可整文件一次执行) -- 权限前缀与 Controller、前端 v-auth 一致:mes:mes_xsl_manufacturer:* --- 父菜单:MES基础资料 / MES资料(与备品件等脚本相同 @mes_base_pid);修改租户改 SET @mes_tenant_id +-- 父菜单:设备管理(@mes_equip_pid);修改租户改 SET @mes_tenant_id -- 新环境也可依赖 Flyway:V3.9.2_63__mes_xsl_manufacturer.sql(与本文内容一致,重复执行幂等) SET NAMES utf8mb4; @@ -47,19 +47,22 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_manufacturer` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000112', @mes_base_pid, '厂家信息', '/xslmes/mesXslManufacturer', 'xslmes/mesXslManufacturer/MesXslManufacturerList', NULL, 1, NULL, '1', 17, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000112', @mes_equip_pid, '厂家信息', '/xslmes/mesXslManufacturer', 'xslmes/mesXslManufacturer/MesXslManufacturerList', NULL, 1, NULL, '1', 8, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), `is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), -`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`); +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:shop-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:shop-outlined' WHERE `id` = '1860000000000000112' AND `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES ('1860000000000000113', '1860000000000000112', '新增', 2, 'mes:mes_xsl_manufacturer:add', '1', '1', 0, 'admin', NOW()), diff --git a/jeecg-boot/db/mes-xsl-move-menus-to-equipment-mgmt.sql b/jeecg-boot/db/mes-xsl-move-menus-to-equipment-mgmt.sql new file mode 100644 index 0000000..08cf9dc --- /dev/null +++ b/jeecg-boot/db/mes-xsl-move-menus-to-equipment-mgmt.sql @@ -0,0 +1,62 @@ +-- 将设备类别/类型/部位/小部位、备品件、厂家、停机类菜单挂到「设备管理」目录下(工序管理仍留 MES基础资料) +-- 前置:已执行 mes-xsl-equipment-ledger-menu-permission.sql 或 Flyway V3.9.2_72 创建「设备管理」目录 id=1860000000000000133 +-- 修改租户:改 SET @mes_tenant_id +SET NAMES utf8mb4; + +SET @mes_tenant_id = 1002; + +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 +); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); + +UPDATE `sys_permission` +SET `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0 +WHERE `id` = @mes_equip_pid; + +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 1, `is_leaf` = 0 WHERE `id` = '1860000000000000134'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 2, `is_leaf` = 0 WHERE `id` = '1860000000000000070'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 3, `is_leaf` = 0 WHERE `id` = '1860000000000000077'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 4, `is_leaf` = 0 WHERE `id` = '1860000000000000084'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 5, `is_leaf` = 0 WHERE `id` = '1860000000000000091'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 6, `is_leaf` = 0 WHERE `id` = '1860000000000000098'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 7, `is_leaf` = 0 WHERE `id` = '1860000000000000105'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 8, `is_leaf` = 0 WHERE `id` = '1860000000000000112'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 9, `is_leaf` = 0 WHERE `id` = '1860000000000000119'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 10, `is_leaf` = 0 WHERE `id` = '1860000000000000126'; + +INSERT INTO `sys_role_permission`(`id`, `role_id`, `permission_id`, `operate_date`, `operate_ip`) +SELECT REPLACE(UUID(), '-', ''), r.`id`, p.`id`, NOW(), '127.0.0.1' +FROM `sys_role` r +CROSS JOIN `sys_permission` p +WHERE r.`tenant_id` = @mes_tenant_id + AND r.`role_code` = 'admin' + AND p.`id` IN ( + @mes_equip_pid, + '1860000000000000134', + '1860000000000000070', + '1860000000000000071', '1860000000000000072', '1860000000000000073', '1860000000000000074', '1860000000000000075', '1860000000000000076', + '1860000000000000077', + '1860000000000000078', '1860000000000000079', '1860000000000000080', '1860000000000000081', '1860000000000000082', '1860000000000000083', + '1860000000000000084', + '1860000000000000085', '1860000000000000086', '1860000000000000087', '1860000000000000088', '1860000000000000089', '1860000000000000090', + '1860000000000000091', + '1860000000000000092', '1860000000000000093', '1860000000000000094', '1860000000000000095', '1860000000000000096', '1860000000000000097', + '1860000000000000098', + '1860000000000000099', '1860000000000000100', '1860000000000000101', '1860000000000000102', '1860000000000000103', '1860000000000000104', + '1860000000000000105', + '1860000000000000106', '1860000000000000107', '1860000000000000108', '1860000000000000109', '1860000000000000110', '1860000000000000111', + '1860000000000000112', + '1860000000000000113', '1860000000000000114', '1860000000000000115', '1860000000000000116', '1860000000000000117', '1860000000000000118', + '1860000000000000119', + '1860000000000000120', '1860000000000000121', '1860000000000000122', '1860000000000000123', '1860000000000000124', '1860000000000000125', + '1860000000000000126', + '1860000000000000127', '1860000000000000128', '1860000000000000129', '1860000000000000130', '1860000000000000131', '1860000000000000132', + '1860000000000000135', '1860000000000000136', '1860000000000000137', '1860000000000000138', '1860000000000000139', '1860000000000000140' + ) + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql b/jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql index ee43800..168063d 100644 --- a/jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql +++ b/jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql @@ -1,4 +1,4 @@ --- 工序管理、设备类别、设备类型:挂到「MES基础资料」下,并修复权限树(is_leaf)与租户 admin 授权 +-- 工序管理挂「MES基础资料」;设备类别、设备类型挂「设备管理」;修复权限树(is_leaf)与租户 admin 授权 -- 适用:菜单曾在 MES XSL 根下或 is_leaf=1 导致角色授权页不显示按钮权限 -- 修改租户:改 SET @mes_tenant_id SET NAMES utf8mb4; @@ -16,10 +16,21 @@ SET @mes_base_pid = IFNULL(@mes_base_pid, ( )); SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 +); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); + UPDATE `sys_permission` SET `is_leaf` = 0 WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料'); +UPDATE `sys_permission` +SET `is_leaf` = 0 +WHERE `id` = @mes_equip_pid; + INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) VALUES ('1860000000000000060', @mes_base_pid, '工序管理', '/xslmes/mesXslProcessOperation', 'xslmes/mesXslProcessOperation/MesXslProcessOperationList', NULL, 1, NULL, '1', 9, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE @@ -37,7 +48,7 @@ ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `perms` = VALUES(`perms`), `is_leaf` = 1, `status` = '1', `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000070', @mes_base_pid, '设备类别', '/xslmes/mesXslEquipmentCategory', 'xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList', NULL, 1, NULL, '1', 10, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000070', @mes_equip_pid, '设备类别', '/xslmes/mesXslEquipmentCategory', 'xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList', NULL, 1, NULL, '1', 2, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `url` = VALUES(`url`), `component` = VALUES(`component`), `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0; @@ -53,7 +64,7 @@ ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `perms` = VALUES(`perms`), `is_leaf` = 1, `status` = '1', `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000077', @mes_base_pid, '设备类型', '/xslmes/mesXslEquipmentType', 'xslmes/mesXslEquipmentType/MesXslEquipmentTypeList', NULL, 1, NULL, '1', 11, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000077', @mes_equip_pid, '设备类型', '/xslmes/mesXslEquipmentType', 'xslmes/mesXslEquipmentType/MesXslEquipmentTypeList', NULL, 1, NULL, '1', 3, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0; diff --git a/jeecg-boot/db/mes-xsl-process-and-category-menu-fix.sql b/jeecg-boot/db/mes-xsl-process-and-category-menu-fix.sql index 54ea575..144e41c 100644 --- a/jeecg-boot/db/mes-xsl-process-and-category-menu-fix.sql +++ b/jeecg-boot/db/mes-xsl-process-and-category-menu-fix.sql @@ -1,4 +1,4 @@ --- 工序管理(060)、设备类别(070):补全菜单/按钮、挂 MES基础资料、修复 is_leaf、租户 admin 授权 +-- 工序管理(060)挂 MES基础资料;设备类别(070)挂设备管理;修复 is_leaf、租户 admin 授权 -- 可重复执行;修改租户改 SET @mes_tenant_id SET NAMES utf8mb4; @@ -15,10 +15,21 @@ SET @mes_base_pid = IFNULL(@mes_base_pid, ( )); SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 +); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); + UPDATE `sys_permission` SET `is_leaf` = 0 WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料'); +UPDATE `sys_permission` +SET `is_leaf` = 0 +WHERE `id` = @mes_equip_pid; + -- 工序管理 INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) VALUES ('1860000000000000060', @mes_base_pid, '工序管理', '/xslmes/mesXslProcessOperation', 'xslmes/mesXslProcessOperation/MesXslProcessOperationList', NULL, 1, NULL, '1', 9, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) @@ -42,7 +53,7 @@ UPDATE `sys_permission` SET `name` = '新增' WHERE `id` = '1860000000000000061' -- 设备类别 INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000070', @mes_base_pid, '设备类别', '/xslmes/mesXslEquipmentCategory', 'xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList', NULL, 1, NULL, '1', 10, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000070', @mes_equip_pid, '设备类别', '/xslmes/mesXslEquipmentCategory', 'xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList', NULL, 1, NULL, '1', 2, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `menu_type` = VALUES(`menu_type`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), diff --git a/jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql b/jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql index d184277..ae98ddd 100644 --- a/jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql @@ -26,19 +26,22 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_spare_part` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000105', @mes_base_pid, '备品件信息', '/xslmes/mesXslSparePart', 'xslmes/mesXslSparePart/MesXslSparePartList', NULL, 1, NULL, '1', 16, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000105', @mes_equip_pid, '备品件信息', '/xslmes/mesXslSparePart', 'xslmes/mesXslSparePart/MesXslSparePartList', NULL, 1, NULL, '1', 7, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), `is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), -`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`); +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:shopping-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:shopping-outlined' WHERE `id` = '1860000000000000105' AND `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES ('1860000000000000106', '1860000000000000105', '新增', 2, 'mes:mes_xsl_spare_part:add', '1', '1', 0, 'admin', NOW()), diff --git a/jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql b/jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql index a0799db..1e608f8 100644 --- a/jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql +++ b/jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql @@ -20,19 +20,22 @@ CREATE TABLE IF NOT EXISTS `mes_xsl_spare_parts_category` ( SET @mes_tenant_id = 1002; -SET @mes_base_pid = ( - SELECT MIN(`id`) FROM `sys_permission` - WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 ); -SET @mes_base_pid = IFNULL(@mes_base_pid, '1860000000000000001'); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) -VALUES ('1860000000000000098', @mes_base_pid, '备品件类别', '/xslmes/mesXslSparePartsCategory', 'xslmes/mesXslSparePartsCategory/MesXslSparePartsCategoryList', NULL, 1, NULL, '1', 15, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +VALUES ('1860000000000000098', @mes_equip_pid, '备品件类别', '/xslmes/mesXslSparePartsCategory', 'xslmes/mesXslSparePartsCategory/MesXslSparePartsCategoryList', NULL, 1, NULL, '1', 6, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) ON DUPLICATE KEY UPDATE `parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), `is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), -`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`); +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:tags-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:tags-outlined' WHERE `id` = '1860000000000000098' AND `del_flag` = 0; INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES ('1860000000000000099', '1860000000000000098', '新增', 2, 'mes:mes_xsl_spare_parts_category:add', '1', '1', 0, 'admin', NOW()), diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslEquipmentLedgerController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslEquipmentLedgerController.java new file mode 100644 index 0000000..3934b73 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslEquipmentLedgerController.java @@ -0,0 +1,319 @@ +package org.jeecg.modules.xslmes.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.xslmes.entity.MesXslEquipmentLedger; +import org.jeecg.modules.xslmes.service.IMesXslEquipmentLedgerService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +/** + * MES 设备台账 + */ +@Tag(name = "MES设备台账") +@RestController +@RequestMapping("/xslmes/mesXslEquipmentLedger") +@Slf4j +public class MesXslEquipmentLedgerController extends JeecgController { + + private static final Set EQUIPMENT_STATUS = Set.of("0", "1", "2"); + private static final Set ENABLED_FLAGS = Set.of("0", "1"); + + @Autowired + private IMesXslEquipmentLedgerService mesXslEquipmentLedgerService; + + @Operation(summary = "MES设备台账-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList( + MesXslEquipmentLedger model, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(model, req.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = mesXslEquipmentLedgerService.page(page, queryWrapper); + return Result.OK(pageList); + } + + @AutoLog(value = "MES设备台账-添加") + @Operation(summary = "MES设备台账-添加") + @RequiresPermissions("mes:mes_xsl_equipment_ledger:add") + @PostMapping(value = "/add") + public Result add(@RequestBody MesXslEquipmentLedger model) { + //update-begin---author:jiangxh ---date:20260518 for:【MES】设备台账保存前校验----------- + String err = validateForSave(model, null); + if (err != null) { + return Result.error(err); + } + //update-end---author:jiangxh ---date:20260518 for:【MES】设备台账保存前校验----------- + mesXslEquipmentLedgerService.save(model); + return Result.OK("添加成功!"); + } + + @AutoLog(value = "MES设备台账-编辑") + @Operation(summary = "MES设备台账-编辑") + @RequiresPermissions("mes:mes_xsl_equipment_ledger:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody MesXslEquipmentLedger model) { + //update-begin---author:jiangxh ---date:20260518 for:【MES】设备台账保存前校验----------- + String err = validateForSave(model, model.getId()); + if (err != null) { + return Result.error(err); + } + //update-end---author:jiangxh ---date:20260518 for:【MES】设备台账保存前校验----------- + mesXslEquipmentLedgerService.updateById(model); + return Result.OK("编辑成功!"); + } + + @AutoLog(value = "MES设备台账-删除") + @Operation(summary = "MES设备台账-通过id删除") + @RequiresPermissions("mes:mes_xsl_equipment_ledger:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + mesXslEquipmentLedgerService.removeById(id); + return Result.OK("删除成功!"); + } + + @AutoLog(value = "MES设备台账-批量删除") + @Operation(summary = "MES设备台账-批量删除") + @RequiresPermissions("mes:mes_xsl_equipment_ledger:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + mesXslEquipmentLedgerService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + @Operation(summary = "MES设备台账-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + MesXslEquipmentLedger entity = mesXslEquipmentLedgerService.getById(id); + if (entity == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(entity); + } + + @Operation(summary = "校验设备编号是否重复") + @GetMapping(value = "/checkEquipmentCode") + public Result checkEquipmentCode( + @RequestParam(name = "equipmentCode", required = true) String equipmentCode, + @RequestParam(name = "dataId", required = false) String dataId) { + if (oConvertUtils.isEmpty(equipmentCode) || equipmentCode.trim().isEmpty()) { + return Result.OK("该值可用!"); + } + MesXslEquipmentLedger ctx = new MesXslEquipmentLedger(); + if (mesXslEquipmentLedgerService.isEquipmentCodeDuplicated(equipmentCode.trim(), dataId, ctx)) { + return Result.error("设备编号不能重复"); + } + return Result.OK("该值可用!"); + } + + @Operation(summary = "校验设备名称是否重复") + @GetMapping(value = "/checkEquipmentName") + public Result checkEquipmentName( + @RequestParam(name = "equipmentName", required = true) String equipmentName, + @RequestParam(name = "dataId", required = false) String dataId) { + if (oConvertUtils.isEmpty(equipmentName) || equipmentName.trim().isEmpty()) { + return Result.OK("该值可用!"); + } + MesXslEquipmentLedger ctx = new MesXslEquipmentLedger(); + if (mesXslEquipmentLedgerService.isEquipmentNameDuplicated(equipmentName.trim(), dataId, ctx)) { + return Result.error("设备名称不能重复"); + } + return Result.OK("该值可用!"); + } + + @RequiresPermissions("mes:mes_xsl_equipment_ledger:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, MesXslEquipmentLedger model) { + return super.exportXls(request, model, MesXslEquipmentLedger.class, "MES设备台账"); + } + + @RequiresPermissions("mes:mes_xsl_equipment_ledger:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry ent : fileMap.entrySet()) { + MultipartFile file = ent.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List list = + ExcelImportUtil.importExcel(file.getInputStream(), MesXslEquipmentLedger.class, params); + if (list == null) { + list = List.of(); + } + Set codesInFile = new HashSet<>(); + Set namesInFile = new HashSet<>(); + for (int i = 0; i < list.size(); i++) { + MesXslEquipmentLedger row = list.get(i); + int rowNo = i + 1; + if (row == null) { + return Result.error("文件导入失败:第 " + rowNo + " 条数据无效(空行)"); + } + String err = validateImportRow(row, rowNo, codesInFile, namesInFile); + if (err != null) { + return Result.error(err); + } + } + long start = System.currentTimeMillis(); + mesXslEquipmentLedgerService.saveBatch(list); + log.info("设备台账Excel导入完成,耗时{}ms,行数={}", System.currentTimeMillis() - start, list.size()); + return Result.ok("文件导入成功!数据行数:" + list.size()); + } catch (Exception e) { + String msg = e.getMessage(); + log.error(msg, e); + if (msg != null && msg.indexOf("Duplicate entry") >= 0) { + return Result.error("文件导入失败: 存在重复数据(设备编号或设备名称不能重复)"); + } + return Result.error("文件导入失败:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + return Result.error("文件导入失败!"); + } + + //update-begin---author:jiangxh ---date:20260518 for:【MES】设备台账保存与导入校验----------- + private String validateForSave(MesXslEquipmentLedger model, String excludeId) { + if (oConvertUtils.isEmpty(model.getProcessOperationId())) { + return "请选择所属工序"; + } + if (oConvertUtils.isEmpty(model.getEquipmentName()) || model.getEquipmentName().trim().isEmpty()) { + return "设备名称不能为空"; + } + String name = model.getEquipmentName().trim(); + model.setEquipmentName(name); + if (mesXslEquipmentLedgerService.isEquipmentNameDuplicated(name, excludeId, model)) { + return "设备名称不能重复"; + } + if (oConvertUtils.isEmpty(model.getEquipmentCode()) || model.getEquipmentCode().trim().isEmpty()) { + return "设备编号不能为空"; + } + String code = model.getEquipmentCode().trim(); + model.setEquipmentCode(code); + if (mesXslEquipmentLedgerService.isEquipmentCodeDuplicated(code, excludeId, model)) { + return "设备编号不能重复"; + } + trimRelationNames(model); + String status = model.getEquipmentStatus(); + if (oConvertUtils.isEmpty(status)) { + model.setEquipmentStatus("0"); + } else { + status = status.trim(); + if (!EQUIPMENT_STATUS.contains(status)) { + return "设备状态无效(须为在用/停用/报废)"; + } + model.setEquipmentStatus(status); + } + String enabled = model.getEnabledFlag(); + if (oConvertUtils.isEmpty(enabled)) { + model.setEnabledFlag("1"); + } else { + enabled = enabled.trim(); + if (!ENABLED_FLAGS.contains(enabled)) { + return "是否启用无效(须为是/否)"; + } + model.setEnabledFlag(enabled); + } + return null; + } + + private String validateImportRow(MesXslEquipmentLedger row, int rowNo, Set codesInFile, Set namesInFile) { + String code = row.getEquipmentCode(); + if (code != null) { + code = code.trim(); + } + if (oConvertUtils.isEmpty(code)) { + return "文件导入失败:第 " + rowNo + " 条设备编号不能为空"; + } + row.setEquipmentCode(code); + if (!codesInFile.add(code)) { + return "文件导入失败:设备编号【" + code + "】在导入文件中重复"; + } + if (mesXslEquipmentLedgerService.isEquipmentCodeDuplicated(code, null, row)) { + return "文件导入失败:第 " + rowNo + " 条设备编号【" + code + "】不能重复"; + } + String name = row.getEquipmentName(); + if (name != null) { + name = name.trim(); + } + if (oConvertUtils.isEmpty(name)) { + return "文件导入失败:第 " + rowNo + " 条设备名称不能为空"; + } + row.setEquipmentName(name); + if (!namesInFile.add(name)) { + return "文件导入失败:设备名称【" + name + "】在导入文件中重复"; + } + if (mesXslEquipmentLedgerService.isEquipmentNameDuplicated(name, null, row)) { + return "文件导入失败:第 " + rowNo + " 条设备名称【" + name + "】不能重复"; + } + trimRelationNames(row); + String status = row.getEquipmentStatus(); + if (oConvertUtils.isEmpty(status)) { + row.setEquipmentStatus("0"); + } else if (!EQUIPMENT_STATUS.contains(status.trim())) { + return "文件导入失败:第 " + rowNo + " 条设备状态无效"; + } else { + row.setEquipmentStatus(status.trim()); + } + String enabled = row.getEnabledFlag(); + if (oConvertUtils.isEmpty(enabled)) { + row.setEnabledFlag("1"); + } else if (!ENABLED_FLAGS.contains(enabled.trim())) { + return "文件导入失败:第 " + rowNo + " 条是否启用无效"; + } else { + row.setEnabledFlag(enabled.trim()); + } + return null; + } + + private static void trimRelationNames(MesXslEquipmentLedger model) { + if (model.getProcessOperationName() != null) { + model.setProcessOperationName(model.getProcessOperationName().trim()); + } + if (model.getManufacturerName() != null) { + model.setManufacturerName(model.getManufacturerName().trim()); + } + if (model.getEquipmentCategoryName() != null) { + model.setEquipmentCategoryName(model.getEquipmentCategoryName().trim()); + } + if (model.getEquipmentTypeName() != null) { + model.setEquipmentTypeName(model.getEquipmentTypeName().trim()); + } + if (model.getFactoryName() != null) { + model.setFactoryName(model.getFactoryName().trim()); + } + } + //update-end---author:jiangxh ---date:20260518 for:【MES】设备台账保存与导入校验----------- +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslEquipmentLedger.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslEquipmentLedger.java new file mode 100644 index 0000000..67f4b85 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslEquipmentLedger.java @@ -0,0 +1,168 @@ +package org.jeecg.modules.xslmes.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * MES 设备台账(表 mes_xsl_equipment_ledger) + */ +@Data +@TableName("mes_xsl_equipment_ledger") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description = "MES设备台账") +public class MesXslEquipmentLedger implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_ID) + private String id; + + @Schema(description = "所属工序主键") + private String processOperationId; + + @Excel(name = "工序名称", width = 20) + @Schema(description = "工序名称冗余") + private String processOperationName; + + @Excel(name = "设备名称", width = 22) + @Schema(description = "设备名称(同租户未删除数据中唯一)") + private String equipmentName; + + @Excel(name = "设备编号", width = 18) + @Schema(description = "设备编号(同租户未删除数据中唯一)") + private String equipmentCode; + + @Schema(description = "所属设备厂家主键") + private String manufacturerId; + + @Excel(name = "设备厂家", width = 20) + @Schema(description = "设备厂家名称冗余") + private String manufacturerName; + + @Schema(description = "设备类别主键") + private String equipmentCategoryId; + + @Excel(name = "设备类别", width = 16) + @Schema(description = "设备类别名称冗余") + private String equipmentCategoryName; + + @Schema(description = "设备类型主键") + private String equipmentTypeId; + + @Excel(name = "设备类型", width = 16) + @Schema(description = "设备类型名称冗余") + private String equipmentTypeName; + + @Schema(description = "所属工厂主键(厂家信息)") + private String factoryId; + + @Excel(name = "所属工厂", width = 20) + @Schema(description = "所属工厂名称冗余") + private String factoryName; + + @Excel(name = "设备型号", width = 16) + @Schema(description = "设备型号") + private String equipmentModel; + + @Excel(name = "设备状态", width = 12, dicCode = "xslmes_equipment_ledger_status") + @Dict(dicCode = "xslmes_equipment_ledger_status") + @Schema(description = "设备状态(字典:在用/停用/报废)") + private String equipmentStatus; + + @Excel(name = "序列号", width = 18) + @Schema(description = "序列号") + private String serialNo; + + @Excel(name = "铭牌", width = 18) + @Schema(description = "铭牌") + private String nameplate; + + @Excel(name = "维修部门", width = 16, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + @Schema(description = "维修部门主键") + private String maintainDeptId; + + @Excel(name = "维修人员", width = 12) + @Schema(description = "维修人员") + private String maintainPerson; + + @Excel(name = "主管部门", width = 16, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + @Schema(description = "主管部门主键") + private String manageDeptId; + + @Excel(name = "资料文件编号", width = 18) + @Schema(description = "资料文件编号") + private String docFileNo; + + @Excel(name = "生产日期", width = 14, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "生产日期") + private Date productionDate; + + @Excel(name = "购买日期", width = 14, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "购买日期") + private Date purchaseDate; + + @Excel(name = "使用日期", width = 14, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "使用日期") + private Date useDate; + + @Excel(name = "厂商联系人", width = 14) + @Schema(description = "厂商联系人") + private String vendorContact; + + @Excel(name = "价值", width = 14) + @Schema(description = "价值") + private String assetValue; + + @Excel(name = "受控PDA", width = 14) + @Schema(description = "受控PDA") + private String controlledPda; + + @Excel(name = "超产比率", width = 12) + @Schema(description = "超产比率") + private String overproductionRatio; + + @Excel(name = "有效体积", width = 12) + @Schema(description = "有效体积") + private String effectiveVolume; + + @Excel(name = "是否启用", width = 10, dicCode = "yn") + @Dict(dicCode = "yn") + @Schema(description = "是否启用(字典yn:1是0否)") + private String enabledFlag; + + @Excel(name = "设备描述", width = 30) + @Schema(description = "设备描述") + private String equipmentDesc; + + private Integer tenantId; + private String sysOrgCode; + private String createBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + private String updateBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + private Integer delFlag; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslEquipmentLedgerMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslEquipmentLedgerMapper.java new file mode 100644 index 0000000..6dbabd1 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslEquipmentLedgerMapper.java @@ -0,0 +1,6 @@ +package org.jeecg.modules.xslmes.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.xslmes.entity.MesXslEquipmentLedger; + +public interface MesXslEquipmentLedgerMapper extends BaseMapper {} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/package-info.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/package-info.java index cadeee7..49c8480 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/package-info.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/package-info.java @@ -1,5 +1,5 @@ /** * MES XSL 业务模块(Maven 工程名:jeecg-module-xslmes)。 - * 包含:客户管理({@link org.jeecg.modules.xslmes.entity.MesXslCustomer})、工序管理({@link org.jeecg.modules.xslmes.entity.MesXslProcessOperation})、设备类别({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentCategory})、设备类型({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentType})、设备部位({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentPart})、设备小部位({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentSubPart})、备品件类别({@link org.jeecg.modules.xslmes.entity.MesXslSparePartsCategory})、备品件信息({@link org.jeecg.modules.xslmes.entity.MesXslSparePart})、厂家信息({@link org.jeecg.modules.xslmes.entity.MesXslManufacturer})、停机主类型({@link org.jeecg.modules.xslmes.entity.MesXslDowntimeMainType})、停机类型({@link org.jeecg.modules.xslmes.entity.MesXslDowntimeType})等。 + * 包含:客户管理({@link org.jeecg.modules.xslmes.entity.MesXslCustomer})、工序管理({@link org.jeecg.modules.xslmes.entity.MesXslProcessOperation})、设备类别({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentCategory})、设备类型({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentType})、设备台账({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentLedger})、设备部位({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentPart})、设备小部位({@link org.jeecg.modules.xslmes.entity.MesXslEquipmentSubPart})、备品件类别({@link org.jeecg.modules.xslmes.entity.MesXslSparePartsCategory})、备品件信息({@link org.jeecg.modules.xslmes.entity.MesXslSparePart})、厂家信息({@link org.jeecg.modules.xslmes.entity.MesXslManufacturer})、停机主类型({@link org.jeecg.modules.xslmes.entity.MesXslDowntimeMainType})、停机类型({@link org.jeecg.modules.xslmes.entity.MesXslDowntimeType})等。 */ package org.jeecg.modules.xslmes; diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslEquipmentLedgerService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslEquipmentLedgerService.java new file mode 100644 index 0000000..40dda4e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslEquipmentLedgerService.java @@ -0,0 +1,11 @@ +package org.jeecg.modules.xslmes.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.xslmes.entity.MesXslEquipmentLedger; + +public interface IMesXslEquipmentLedgerService extends IService { + + boolean isEquipmentCodeDuplicated(String equipmentCode, String excludeId, MesXslEquipmentLedger context); + + boolean isEquipmentNameDuplicated(String equipmentName, String excludeId, MesXslEquipmentLedger context); +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslEquipmentLedgerServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslEquipmentLedgerServiceImpl.java new file mode 100644 index 0000000..31fa8af --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslEquipmentLedgerServiceImpl.java @@ -0,0 +1,72 @@ +package org.jeecg.modules.xslmes.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.config.TenantContext; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.util.TokenUtils; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.xslmes.entity.MesXslEquipmentLedger; +import org.jeecg.modules.xslmes.mapper.MesXslEquipmentLedgerMapper; +import org.jeecg.modules.xslmes.service.IMesXslEquipmentLedgerService; +import org.springframework.stereotype.Service; + +@Service +public class MesXslEquipmentLedgerServiceImpl extends ServiceImpl + implements IMesXslEquipmentLedgerService { + + //update-begin---author:jiangxh ---date:20260518 for:【MES】设备台账编号、名称同租户不可重复----------- + @Override + public boolean isEquipmentCodeDuplicated(String equipmentCode, String excludeId, MesXslEquipmentLedger context) { + return isFieldDuplicated(MesXslEquipmentLedger::getEquipmentCode, equipmentCode, excludeId, context); + } + + @Override + public boolean isEquipmentNameDuplicated(String equipmentName, String excludeId, MesXslEquipmentLedger context) { + return isFieldDuplicated(MesXslEquipmentLedger::getEquipmentName, equipmentName, excludeId, context); + } + + private boolean isFieldDuplicated( + com.baomidou.mybatisplus.core.toolkit.support.SFunction column, + String value, + String excludeId, + MesXslEquipmentLedger context) { + if (oConvertUtils.isEmpty(value)) { + return false; + } + Integer tenantId = resolveTenantId(context); + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(column, value.trim()); + w.and(q -> q.eq(MesXslEquipmentLedger::getDelFlag, CommonConstant.DEL_FLAG_0).or().isNull(MesXslEquipmentLedger::getDelFlag)); + if (oConvertUtils.isNotEmpty(excludeId)) { + w.ne(MesXslEquipmentLedger::getId, excludeId); + } + if (tenantId != null) { + w.eq(MesXslEquipmentLedger::getTenantId, tenantId); + } + return this.count(w) > 0; + } + + private static Integer resolveTenantId(MesXslEquipmentLedger context) { + if (context != null && context.getTenantId() != null) { + return context.getTenantId(); + } + String ts = TenantContext.getTenant(); + if (oConvertUtils.isEmpty(ts)) { + try { + ts = TokenUtils.getTenantIdByRequest(SpringContextUtils.getHttpServletRequest()); + } catch (Exception ignored) { + } + } + if (oConvertUtils.isEmpty(ts)) { + return null; + } + try { + return Integer.parseInt(ts.trim()); + } catch (NumberFormatException e) { + return null; + } + } + //update-end---author:jiangxh ---date:20260518 for:【MES】设备台账编号、名称同租户不可重复----------- +} diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 b/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 index 530281a..be00707 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 @@ -246,6 +246,16 @@ jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_69__mes_xsl_move_process_equipment_menus_to_mes_base.sql -- author:jiangxh---date:20260518--for: 【MES】设备类型菜单补全 INSERT(077 未建时仅 UPDATE 无效)--- jeecg-boot/db/mes-xsl-equipment-type-menu-fix.sql +-- author:jiangxh---date:20260518--for: 【MES】设备管理及子菜单图标 --- +jeecg-boot/db/mes-xsl-equipment-menus-icon.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_75__mes_xsl_equipment_menus_icon.sql +jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql +jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql +jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql +jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql +jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql +jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_70__mes_xsl_equipment_type_menu_ensure.sql -- author:jiangxh---date:20260518--for: 【MES】工序管理/设备类别菜单与按钮权限补全及租户授权 --- jeecg-boot/db/mes-xsl-process-and-category-menu-fix.sql @@ -253,3 +263,49 @@ jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/ jeecg-boot/db/mes-process-operation-menu-permission.sql jeecg-boot/db/mes-xsl-equipment-category-menu-permission.sql jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql +-- author:jiangxh---date:20260518--for: 【MES】设备台账管理(建表、设备管理菜单、CRUD、编号名称唯一校验) --- +jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-ledger.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_72__mes_xsl_equipment_ledger.sql +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslEquipmentLedger.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslEquipmentLedgerMapper.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslEquipmentLedgerService.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslEquipmentLedgerServiceImpl.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslEquipmentLedgerController.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/package-info.java +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.api.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentLedgerModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslManufacturerSelectModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentTypeSelectModal.vue +-- author:jiangxh---date:20260518--for: 【MES】设备管理目录与 MES基础资料 同级(非 MES管理 子菜单) --- +jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-ledger-menu-parent-fix.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_72__mes_xsl_equipment_ledger.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_73__mes_xsl_equipment_mgmt_menu_parent_fix.sql +-- author:jiangxh---date:20260518--for: 【MES】设备类别/类型/部位/小部位、备品件、厂家、停机类菜单挂「设备管理」目录 --- +jeecg-boot/db/mes-xsl-move-menus-to-equipment-mgmt.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_74__mes_xsl_move_menus_to_equipment_mgmt.sql +jeecg-boot/db/mes-xsl-equipment-category-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-type-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-part-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql +jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql +jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql +jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql +jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql +jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql +jeecg-boot/db/mes-xsl-move-process-equipment-menus-to-mes-base.sql +jeecg-boot/db/mes-xsl-process-and-category-menu-fix.sql +jeecg-boot/db/mes-xsl-equipment-type-menu-fix.sql +-- author:jiangxh---date:20260518--for: 【MES】设备管理及子菜单图标 --- +jeecg-boot/db/mes-xsl-equipment-menus-icon.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_75__mes_xsl_equipment_menus_icon.sql +jeecg-boot/db/mes-xsl-equipment-ledger-menu-permission.sql +jeecg-boot/db/mes-xsl-equipment-sub-part-menu-permission.sql +jeecg-boot/db/mes-xsl-spare-parts-category-menu-permission.sql +jeecg-boot/db/mes-xsl-spare-part-menu-permission.sql +jeecg-boot/db/mes-xsl-manufacturer-menu-permission.sql +jeecg-boot/db/mes-xsl-downtime-main-type-menu-permission.sql +jeecg-boot/db/mes-xsl-downtime-type-menu-permission.sql diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_72__mes_xsl_equipment_ledger.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_72__mes_xsl_equipment_ledger.sql new file mode 100644 index 0000000..8bf06bd --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_72__mes_xsl_equipment_ledger.sql @@ -0,0 +1,121 @@ +-- MES 设备台账:字典 + 建表 + 设备管理目录 + 设备台账菜单 + 按钮 + 租户 admin 授权 +SET NAMES utf8mb4; + +INSERT INTO `sys_dict` (`id`, `dict_name`, `dict_code`, `description`, `del_flag`, `create_by`, `create_time`, `type`, `tenant_id`) +SELECT REPLACE(UUID(), '-', ''), 'MES设备台账状态', 'xslmes_equipment_ledger_status', '在用/停用/报废', 0, 'admin', NOW(), 0, 0 +WHERE NOT EXISTS (SELECT 1 FROM `sys_dict` WHERE `dict_code` = 'xslmes_equipment_ledger_status' AND `del_flag` = 0); + +INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `sort_order`, `status`, `create_by`, `create_time`) +SELECT REPLACE(UUID(), '-', ''), d.id, '在用', '0', 1, 1, 'admin', NOW() FROM `sys_dict` d +WHERE d.`dict_code` = 'xslmes_equipment_ledger_status' AND NOT EXISTS (SELECT 1 FROM `sys_dict_item` i WHERE i.`dict_id` = d.id AND i.`item_value` = '0'); +INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `sort_order`, `status`, `create_by`, `create_time`) +SELECT REPLACE(UUID(), '-', ''), d.id, '停用', '1', 2, 1, 'admin', NOW() FROM `sys_dict` d +WHERE d.`dict_code` = 'xslmes_equipment_ledger_status' AND NOT EXISTS (SELECT 1 FROM `sys_dict_item` i WHERE i.`dict_id` = d.id AND i.`item_value` = '1'); +INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `sort_order`, `status`, `create_by`, `create_time`) +SELECT REPLACE(UUID(), '-', ''), d.id, '报废', '2', 3, 1, 'admin', NOW() FROM `sys_dict` d +WHERE d.`dict_code` = 'xslmes_equipment_ledger_status' AND NOT EXISTS (SELECT 1 FROM `sys_dict_item` i WHERE i.`dict_id` = d.id AND i.`item_value` = '2'); + +CREATE TABLE IF NOT EXISTS `mes_xsl_equipment_ledger` ( + `id` varchar(32) NOT NULL COMMENT '主键', + `process_operation_id` varchar(32) NOT NULL COMMENT '所属工序 mes_xsl_process_operation.id', + `process_operation_name` varchar(500) DEFAULT NULL COMMENT '工序名称冗余', + `equipment_name` varchar(500) NOT NULL COMMENT '设备名称(同租户未删除唯一)', + `equipment_code` varchar(128) NOT NULL COMMENT '设备编号(同租户未删除唯一)', + `manufacturer_id` varchar(32) DEFAULT NULL COMMENT '所属设备厂家 mes_xsl_manufacturer.id', + `manufacturer_name` varchar(500) DEFAULT NULL COMMENT '设备厂家名称冗余', + `equipment_category_id` varchar(32) DEFAULT NULL COMMENT '设备类别 mes_xsl_equipment_category.id', + `equipment_category_name` varchar(500) DEFAULT NULL COMMENT '设备类别名称冗余', + `equipment_type_id` varchar(32) DEFAULT NULL COMMENT '设备类型 mes_xsl_equipment_type.id', + `equipment_type_name` varchar(500) DEFAULT NULL COMMENT '设备类型名称冗余', + `factory_id` varchar(32) DEFAULT NULL COMMENT '所属工厂(厂家信息)', + `factory_name` varchar(500) DEFAULT NULL COMMENT '所属工厂名称冗余', + `equipment_model` varchar(500) DEFAULT NULL COMMENT '设备型号', + `equipment_status` varchar(1) NOT NULL DEFAULT '0' COMMENT '设备状态 字典xslmes_equipment_ledger_status:0在用1停用2报废', + `serial_no` varchar(500) DEFAULT NULL COMMENT '序列号', + `nameplate` varchar(500) DEFAULT NULL COMMENT '铭牌', + `maintain_dept_id` varchar(32) DEFAULT NULL COMMENT '维修部门 sys_depart.id', + `maintain_person` varchar(500) DEFAULT NULL COMMENT '维修人员', + `manage_dept_id` varchar(32) DEFAULT NULL COMMENT '主管部门 sys_depart.id', + `doc_file_no` varchar(500) DEFAULT NULL COMMENT '资料文件编号', + `production_date` date DEFAULT NULL COMMENT '生产日期', + `purchase_date` date DEFAULT NULL COMMENT '购买日期', + `use_date` date DEFAULT NULL COMMENT '使用日期', + `vendor_contact` varchar(500) DEFAULT NULL COMMENT '厂商联系人', + `asset_value` varchar(128) DEFAULT NULL COMMENT '价值', + `controlled_pda` varchar(500) DEFAULT NULL COMMENT '受控PDA', + `overproduction_ratio` varchar(128) DEFAULT NULL COMMENT '超产比率', + `effective_volume` varchar(128) DEFAULT NULL COMMENT '有效体积', + `enabled_flag` varchar(1) NOT NULL DEFAULT '1' COMMENT '是否启用 字典yn:1是0否', + `equipment_desc` varchar(1000) DEFAULT NULL COMMENT '设备描述', + `tenant_id` int DEFAULT NULL COMMENT '租户', + `sys_org_code` varchar(500) DEFAULT NULL COMMENT '部门', + `create_by` varchar(500) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(500) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `del_flag` int DEFAULT '0' COMMENT '删除标记(0正常1删除)', + PRIMARY KEY (`id`), + KEY `idx_mel_tenant_code` (`tenant_id`, `equipment_code`), + KEY `idx_mel_tenant_name` (`tenant_id`, `equipment_name`), + KEY `idx_mel_process` (`process_operation_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MES设备台账'; + +SET @mes_tenant_id = 1002; + +SET @mes_equip_root_parent = ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES基础资料' + LIMIT 1 +); +SET @mes_equip_root_parent = IFNULL(@mes_equip_root_parent, ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES资料' + LIMIT 1 +)); + +SET @mes_equip_root_sort = IFNULL(( + SELECT `sort_no` + 1 FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') + ORDER BY `sort_no` DESC + LIMIT 1 +), 51); + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) +VALUES ('1860000000000000133', @mes_equip_root_parent, '设备管理', '/xslmes/equipment', 'layouts/RouteView', 'MesEquipmentLayout', 0, NULL, '1', @mes_equip_root_sort, 1, 0, 0, '1', 0, 0, 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), +`menu_type` = VALUES(`menu_type`), `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) +VALUES ('1860000000000000134', '1860000000000000133', '设备台账', '/xslmes/mesXslEquipmentLedger', 'xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList', 'MesXslEquipmentLedgerList', 1, NULL, '1', 1, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), +`is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES +('1860000000000000135', '1860000000000000134', '新增', 2, 'mes:mes_xsl_equipment_ledger:add', '1', '1', 0, 'admin', NOW()), +('1860000000000000136', '1860000000000000134', '编辑', 2, 'mes:mes_xsl_equipment_ledger:edit', '1', '1', 0, 'admin', NOW()), +('1860000000000000137', '1860000000000000134', '删除', 2, 'mes:mes_xsl_equipment_ledger:delete', '1', '1', 0, 'admin', NOW()), +('1860000000000000138', '1860000000000000134', '批量删除', 2, 'mes:mes_xsl_equipment_ledger:deleteBatch', '1', '1', 0, 'admin', NOW()), +('1860000000000000139', '1860000000000000134', '导出', 2, 'mes:mes_xsl_equipment_ledger:exportXls', '1', '1', 0, 'admin', NOW()), +('1860000000000000140', '1860000000000000134', '导入', 2, 'mes:mes_xsl_equipment_ledger:importExcel', '1', '1', 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), +`status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`); + +INSERT INTO `sys_role_permission`(`id`, `role_id`, `permission_id`, `operate_date`, `operate_ip`) +SELECT REPLACE(UUID(), '-', ''), r.`id`, p.`id`, NOW(), '127.0.0.1' +FROM `sys_role` r +CROSS JOIN `sys_permission` p +WHERE r.`tenant_id` = @mes_tenant_id + AND r.`role_code` = 'admin' + AND p.`id` IN ( + '1860000000000000133', + '1860000000000000134', + '1860000000000000135', '1860000000000000136', '1860000000000000137', '1860000000000000138', + '1860000000000000139', '1860000000000000140' + ) + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_73__mes_xsl_equipment_mgmt_menu_parent_fix.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_73__mes_xsl_equipment_mgmt_menu_parent_fix.sql new file mode 100644 index 0000000..6ad60c6 --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_73__mes_xsl_equipment_mgmt_menu_parent_fix.sql @@ -0,0 +1,31 @@ +-- 设备管理目录与 MES基础资料 同级(修正 V3.9.2_72 曾挂在 MES管理 下) +SET NAMES utf8mb4; + +SET @mes_equip_root_parent = ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES基础资料' + LIMIT 1 +); +SET @mes_equip_root_parent = IFNULL(@mes_equip_root_parent, ( + SELECT `parent_id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = 'MES资料' + LIMIT 1 +)); + +SET @mes_equip_root_sort = IFNULL(( + SELECT `sort_no` + 1 FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` IN ('MES基础资料', 'MES资料') + ORDER BY `sort_no` DESC + LIMIT 1 +), 51); + +UPDATE `sys_permission` +SET + `parent_id` = @mes_equip_root_parent, + `sort_no` = @mes_equip_root_sort, + `menu_type` = 0, + `is_leaf` = 0, + `hidden` = 0, + `status` = '1', + `del_flag` = 0 +WHERE `id` = '1860000000000000133'; diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_74__mes_xsl_move_menus_to_equipment_mgmt.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_74__mes_xsl_move_menus_to_equipment_mgmt.sql new file mode 100644 index 0000000..83e1ecf --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_74__mes_xsl_move_menus_to_equipment_mgmt.sql @@ -0,0 +1,60 @@ +-- 设备相关子菜单挂到「设备管理」目录(与 db/mes-xsl-move-menus-to-equipment-mgmt.sql 一致) +SET NAMES utf8mb4; + +SET @mes_tenant_id = 1002; + +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 +); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); + +UPDATE `sys_permission` +SET `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0 +WHERE `id` = @mes_equip_pid; + +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 1, `is_leaf` = 0 WHERE `id` = '1860000000000000134'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 2, `is_leaf` = 0 WHERE `id` = '1860000000000000070'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 3, `is_leaf` = 0 WHERE `id` = '1860000000000000077'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 4, `is_leaf` = 0 WHERE `id` = '1860000000000000084'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 5, `is_leaf` = 0 WHERE `id` = '1860000000000000091'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 6, `is_leaf` = 0 WHERE `id` = '1860000000000000098'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 7, `is_leaf` = 0 WHERE `id` = '1860000000000000105'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 8, `is_leaf` = 0 WHERE `id` = '1860000000000000112'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 9, `is_leaf` = 0 WHERE `id` = '1860000000000000119'; +UPDATE `sys_permission` SET `parent_id` = @mes_equip_pid, `sort_no` = 10, `is_leaf` = 0 WHERE `id` = '1860000000000000126'; + +INSERT INTO `sys_role_permission`(`id`, `role_id`, `permission_id`, `operate_date`, `operate_ip`) +SELECT REPLACE(UUID(), '-', ''), r.`id`, p.`id`, NOW(), '127.0.0.1' +FROM `sys_role` r +CROSS JOIN `sys_permission` p +WHERE r.`tenant_id` = @mes_tenant_id + AND r.`role_code` = 'admin' + AND p.`id` IN ( + @mes_equip_pid, + '1860000000000000134', + '1860000000000000070', + '1860000000000000071', '1860000000000000072', '1860000000000000073', '1860000000000000074', '1860000000000000075', '1860000000000000076', + '1860000000000000077', + '1860000000000000078', '1860000000000000079', '1860000000000000080', '1860000000000000081', '1860000000000000082', '1860000000000000083', + '1860000000000000084', + '1860000000000000085', '1860000000000000086', '1860000000000000087', '1860000000000000088', '1860000000000000089', '1860000000000000090', + '1860000000000000091', + '1860000000000000092', '1860000000000000093', '1860000000000000094', '1860000000000000095', '1860000000000000096', '1860000000000000097', + '1860000000000000098', + '1860000000000000099', '1860000000000000100', '1860000000000000101', '1860000000000000102', '1860000000000000103', '1860000000000000104', + '1860000000000000105', + '1860000000000000106', '1860000000000000107', '1860000000000000108', '1860000000000000109', '1860000000000000110', '1860000000000000111', + '1860000000000000112', + '1860000000000000113', '1860000000000000114', '1860000000000000115', '1860000000000000116', '1860000000000000117', '1860000000000000118', + '1860000000000000119', + '1860000000000000120', '1860000000000000121', '1860000000000000122', '1860000000000000123', '1860000000000000124', '1860000000000000125', + '1860000000000000126', + '1860000000000000127', '1860000000000000128', '1860000000000000129', '1860000000000000130', '1860000000000000131', '1860000000000000132', + '1860000000000000135', '1860000000000000136', '1860000000000000137', '1860000000000000138', '1860000000000000139', '1860000000000000140' + ) + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_75__mes_xsl_equipment_menus_icon.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_75__mes_xsl_equipment_menus_icon.sql new file mode 100644 index 0000000..c02de18 --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_75__mes_xsl_equipment_menus_icon.sql @@ -0,0 +1,10 @@ +-- 设备管理目录及指定子菜单图标(与 db/mes-xsl-equipment-menus-icon.sql 一致) +SET NAMES utf8mb4; + +UPDATE `sys_permission` SET `icon` = 'ant-design:tool-outlined' WHERE `id` = '1860000000000000133' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:apartment-outlined' WHERE `id` = '1860000000000000091' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:tags-outlined' WHERE `id` = '1860000000000000098' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:shopping-outlined' WHERE `id` = '1860000000000000105' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:shop-outlined' WHERE `id` = '1860000000000000112' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:partition-outlined' WHERE `id` = '1860000000000000119' AND `del_flag` = 0; +UPDATE `sys_permission` SET `icon` = 'ant-design:pause-circle-outlined' WHERE `id` = '1860000000000000126' AND `del_flag` = 0; diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.api.ts b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.api.ts new file mode 100644 index 0000000..38ab84e --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.api.ts @@ -0,0 +1,31 @@ +import { defHttp } from '/@/utils/http/axios'; + +enum Api { + list = '/xslmes/mesXslEquipmentLedger/list', + checkEquipmentCode = '/xslmes/mesXslEquipmentLedger/checkEquipmentCode', + checkEquipmentName = '/xslmes/mesXslEquipmentLedger/checkEquipmentName', + save = '/xslmes/mesXslEquipmentLedger/add', + edit = '/xslmes/mesXslEquipmentLedger/edit', + deleteOne = '/xslmes/mesXslEquipmentLedger/delete', + deleteBatch = '/xslmes/mesXslEquipmentLedger/deleteBatch', + importExcel = '/xslmes/mesXslEquipmentLedger/importExcel', + exportXls = '/xslmes/mesXslEquipmentLedger/exportXls', + queryById = '/xslmes/mesXslEquipmentLedger/queryById', +} + +export const list = (params) => defHttp.get({ url: Api.list, params }); + +export const checkEquipmentCode = (params: { equipmentCode: string; dataId?: string }) => + defHttp.get({ url: Api.checkEquipmentCode, params }, { successMessageMode: 'none', errorMessageMode: 'none' }); + +export const checkEquipmentName = (params: { equipmentName: string; dataId?: string }) => + defHttp.get({ url: Api.checkEquipmentName, params }, { successMessageMode: 'none', errorMessageMode: 'none' }); +export const deleteOne = (params, handleSuccess) => defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => handleSuccess()); +export const batchDelete = (params, handleSuccess) => defHttp.delete({ url: Api.deleteBatch, params }, { joinParamsToUrl: true }).then(() => handleSuccess()); +export const saveOrUpdate = (params, isUpdate) => { + const url = isUpdate ? Api.edit : Api.save; + return defHttp.post({ url, params }); +}; +export const queryById = (params) => defHttp.get({ url: Api.queryById, params }); +export const getExportUrl = Api.exportXls; +export const getImportUrl = Api.importExcel; diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.data.ts b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.data.ts new file mode 100644 index 0000000..f0157f7 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.data.ts @@ -0,0 +1,199 @@ +import { BasicColumn, FormSchema } from '/@/components/Table'; +import { checkEquipmentCode, checkEquipmentName } from './MesXslEquipmentLedger.api'; + +const colHalf = { span: 12 }; + +export const columns: BasicColumn[] = [ + { title: '设备编号', align: 'center', dataIndex: 'equipmentCode', width: 130 }, + { title: '设备名称', align: 'center', dataIndex: 'equipmentName', width: 160 }, + { title: '工序', align: 'center', dataIndex: 'processOperationName', width: 120 }, + { title: '设备类别', align: 'center', dataIndex: 'equipmentCategoryName', width: 110 }, + { title: '设备类型', align: 'center', dataIndex: 'equipmentTypeName', width: 110 }, + { title: '设备厂家', align: 'center', dataIndex: 'manufacturerName', width: 120 }, + { title: '所属工厂', align: 'center', dataIndex: 'factoryName', width: 120 }, + { title: '设备状态', align: 'center', dataIndex: 'equipmentStatus_dictText', width: 90 }, + { title: '是否启用', align: 'center', dataIndex: 'enabledFlag_dictText', width: 90 }, + { title: '设备型号', align: 'center', dataIndex: 'equipmentModel', width: 110, defaultHidden: true }, + { title: '创建时间', align: 'center', dataIndex: 'createTime', width: 165, defaultHidden: true }, +]; + +export const searchFormSchema: FormSchema[] = [ + { label: '设备编号', field: 'equipmentCode', component: 'Input', colProps: { span: 6 } }, + { label: '设备名称', field: 'equipmentName', component: 'Input', colProps: { span: 6 } }, + { label: '工序名称', field: 'processOperationName', component: 'Input', colProps: { span: 6 } }, + { + label: '设备状态', + field: 'equipmentStatus', + component: 'JDictSelectTag', + componentProps: { dictCode: 'xslmes_equipment_ledger_status' }, + colProps: { span: 6 }, + }, + { + label: '是否启用', + field: 'enabledFlag', + component: 'JDictSelectTag', + componentProps: { dictCode: 'yn' }, + colProps: { span: 6 }, + }, +]; + +export const formSchema: FormSchema[] = [ + { label: '', field: 'id', component: 'Input', show: false }, + { label: '', field: 'processOperationId', component: 'Input', show: false }, + { label: '', field: 'manufacturerId', component: 'Input', show: false }, + { label: '', field: 'equipmentCategoryId', component: 'Input', show: false }, + { label: '', field: 'equipmentTypeId', component: 'Input', show: false }, + { label: '', field: 'factoryId', component: 'Input', show: false }, + { + label: '所属工序', + field: 'processOperationName', + component: 'Input', + slot: 'processOperationPicker', + colProps: colHalf, + dynamicRules: () => [{ required: true, message: '请选择所属工序' }], + }, + { + label: '设备编号', + field: 'equipmentCode', + component: 'Input', + colProps: colHalf, + componentProps: { placeholder: '同租户内不可重复' }, + dynamicRules: ({ model }) => [ + { required: true, message: '请输入设备编号' }, + { + validator: async (_rule, value) => { + const v = value == null ? '' : String(value).trim(); + if (!v) return Promise.resolve(); + try { + await checkEquipmentCode({ equipmentCode: v, dataId: model?.id }); + return Promise.resolve(); + } catch (e: any) { + return Promise.reject(e?.response?.data?.message || e?.message || '设备编号不能重复'); + } + }, + trigger: 'blur', + }, + ], + }, + { + label: '设备名称', + field: 'equipmentName', + component: 'Input', + colProps: colHalf, + componentProps: { placeholder: '同租户内不可重复' }, + dynamicRules: ({ model }) => [ + { required: true, message: '请输入设备名称' }, + { + validator: async (_rule, value) => { + const v = value == null ? '' : String(value).trim(); + if (!v) return Promise.resolve(); + try { + await checkEquipmentName({ equipmentName: v, dataId: model?.id }); + return Promise.resolve(); + } catch (e: any) { + return Promise.reject(e?.response?.data?.message || e?.message || '设备名称不能重复'); + } + }, + trigger: 'blur', + }, + ], + }, + { + label: '所属设备厂家', + field: 'manufacturerName', + component: 'Input', + slot: 'manufacturerPicker', + colProps: colHalf, + }, + { + label: '设备类别', + field: 'equipmentCategoryName', + component: 'Input', + slot: 'equipmentCategoryPicker', + colProps: colHalf, + }, + { + label: '设备类型', + field: 'equipmentTypeName', + component: 'Input', + slot: 'equipmentTypePicker', + colProps: colHalf, + }, + { + label: '所属工厂', + field: 'factoryName', + component: 'Input', + slot: 'factoryPicker', + colProps: colHalf, + }, + { label: '设备型号', field: 'equipmentModel', component: 'Input', colProps: colHalf }, + { + label: '设备状态', + field: 'equipmentStatus', + component: 'JDictSelectTag', + defaultValue: '0', + componentProps: { dictCode: 'xslmes_equipment_ledger_status' }, + colProps: colHalf, + required: true, + }, + { label: '序列号', field: 'serialNo', component: 'Input', colProps: colHalf }, + { label: '铭牌', field: 'nameplate', component: 'Input', colProps: colHalf }, + { + label: '维修部门', + field: 'maintainDeptId', + component: 'JSelectDept', + componentProps: { checkStrictly: true, multiple: false }, + colProps: colHalf, + }, + { label: '维修人员', field: 'maintainPerson', component: 'Input', colProps: colHalf }, + { + label: '主管部门', + field: 'manageDeptId', + component: 'JSelectDept', + componentProps: { checkStrictly: true, multiple: false }, + colProps: colHalf, + }, + { label: '资料文件编号', field: 'docFileNo', component: 'Input', colProps: colHalf }, + { + label: '生产日期', + field: 'productionDate', + component: 'DatePicker', + componentProps: { valueFormat: 'YYYY-MM-DD', style: { width: '100%' } }, + colProps: colHalf, + }, + { + label: '购买日期', + field: 'purchaseDate', + component: 'DatePicker', + componentProps: { valueFormat: 'YYYY-MM-DD', style: { width: '100%' } }, + colProps: colHalf, + }, + { + label: '使用日期', + field: 'useDate', + component: 'DatePicker', + componentProps: { valueFormat: 'YYYY-MM-DD', style: { width: '100%' } }, + colProps: colHalf, + }, + { label: '厂商联系人', field: 'vendorContact', component: 'Input', colProps: colHalf }, + { label: '价值', field: 'assetValue', component: 'Input', colProps: colHalf }, + { label: '受控PDA', field: 'controlledPda', component: 'Input', colProps: colHalf }, + { label: '超产比率', field: 'overproductionRatio', component: 'Input', colProps: colHalf }, + { label: '有效体积', field: 'effectiveVolume', component: 'Input', colProps: colHalf }, + { + label: '是否启用', + field: 'enabledFlag', + component: 'JDictSelectTag', + defaultValue: '1', + componentProps: { dictCode: 'yn' }, + colProps: colHalf, + required: true, + }, + { + label: '设备描述', + field: 'equipmentDesc', + component: 'InputTextArea', + componentProps: { rows: 3 }, + colProps: { span: 24 }, + }, +]; diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList.vue b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList.vue new file mode 100644 index 0000000..11fe9a1 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList.vue @@ -0,0 +1,127 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentLedgerModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentLedgerModal.vue new file mode 100644 index 0000000..7aa32de --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentLedgerModal.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentTypeSelectModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentTypeSelectModal.vue new file mode 100644 index 0000000..9ce6537 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslEquipmentTypeSelectModal.vue @@ -0,0 +1,94 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslManufacturerSelectModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslManufacturerSelectModal.vue new file mode 100644 index 0000000..3c5b008 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/components/MesXslManufacturerSelectModal.vue @@ -0,0 +1,95 @@ + + +