推送项目重构代码

This commit is contained in:
2026-05-29 19:52:32 +08:00
parent 95141d0e1f
commit 3dafaceef2
65 changed files with 3762 additions and 583 deletions

View File

@@ -0,0 +1,22 @@
-- ----------------------------
-- 用户工作台个性化布局表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_dashboard`;
CREATE TABLE `sys_user_dashboard` (
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`layout_json` longtext NOT NULL COMMENT '布局 JSON: [{i,x,y,w,h,widgetKey,config}]',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户工作台布局';
-- ----------------------------
-- 默认工作台布局(存到 sys_config前端在用户没有自定义布局时回退到此
-- ----------------------------
INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `remark`)
SELECT (SELECT IFNULL(MAX(config_id), 0) + 1 FROM `sys_config` AS t),
'默认工作台布局', 'sys.dashboard.defaultLayout',
'[{"i":"announcements","x":0,"y":0,"w":6,"h":8,"widgetKey":"announcements"},{"i":"projectManagement","x":6,"y":0,"w":6,"h":8,"widgetKey":"projectManagement"},{"i":"ownerTaskList","x":0,"y":8,"w":6,"h":8,"widgetKey":"ownerTaskList"},{"i":"financialCharts","x":6,"y":8,"w":6,"h":8,"widgetKey":"financialCharts"},{"i":"miniCalendar","x":0,"y":16,"w":4,"h":8,"widgetKey":"miniCalendar"},{"i":"quickEntry","x":4,"y":16,"w":8,"h":4,"widgetKey":"quickEntry"}]',
'Y', 'admin', NOW(), '工作台默认布局,用户首次进入或重置时使用'
FROM dual
WHERE NOT EXISTS (SELECT 1 FROM `sys_config` WHERE `config_key` = 'sys.dashboard.defaultLayout');

View File

@@ -0,0 +1,4 @@
-- 把默认工作台改成三列布局w:4 占 1/3
UPDATE `sys_config`
SET `config_value` = '[{"i":"announcements","x":0,"y":0,"w":4,"h":8,"widgetKey":"announcements"},{"i":"projectManagement","x":4,"y":0,"w":4,"h":8,"widgetKey":"projectManagement"},{"i":"ownerTaskList","x":8,"y":0,"w":4,"h":8,"widgetKey":"ownerTaskList"},{"i":"financialCharts","x":0,"y":8,"w":4,"h":8,"widgetKey":"financialCharts"},{"i":"feedbackList","x":4,"y":8,"w":4,"h":8,"widgetKey":"feedbackList"},{"i":"miniCalendar","x":8,"y":8,"w":4,"h":8,"widgetKey":"miniCalendar"},{"i":"quickEntry","x":0,"y":16,"w":12,"h":4,"widgetKey":"quickEntry"}]'
WHERE `config_key` = 'sys.dashboard.defaultLayout';

74
sql/sys_user_im_bind.sql Normal file
View File

@@ -0,0 +1,74 @@
-- ----------------------------
-- OA 用户 ↔ OpenIM 用户 绑定表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_im_bind`;
CREATE TABLE `sys_user_im_bind` (
`user_id` bigint(20) NOT NULL COMMENT 'OA 用户ID (sys_user.user_id)',
`phone` varchar(20) NOT NULL COMMENT '手机号(绑定时记录的)',
`im_user_id` varchar(64) NOT NULL COMMENT 'OpenIM userIDchat 生成的字符串)',
`bind_status` tinyint(1) DEFAULT 1 COMMENT '1=正常 0=禁用',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`) USING BTREE,
KEY `idx_phone` (`phone`),
KEY `idx_im_user_id` (`im_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-OpenIM 用户绑定';
-- ----------------------------
-- 一次性回填:从 IM 侧 mongo 导出的 phone→userID 映射表
-- 与 sys_user.phonenumber 关联,命中即绑定
-- ----------------------------
DROP TEMPORARY TABLE IF EXISTS `tmp_im_phone_map`;
CREATE TEMPORARY TABLE `tmp_im_phone_map` (
`phone` varchar(20) NOT NULL,
`im_user_id` varchar(64) NOT NULL,
PRIMARY KEY (`phone`)
);
INSERT INTO `tmp_im_phone_map` (`phone`, `im_user_id`) VALUES
('15690169553','5546292033'),
('19932047759','2756281826'),
('15075462410','2553281144'),
('18915343363','5026155910'),
('18324818443','2877251793'),
('15383265119','8330802909'),
('18940843511','4349480400'),
('17714433303','2999550914'),
('13390839803','2181055021'),
('18803235354','7658449575'),
('13700303346','1663065057'),
('17783455912','2152870750'),
('17829506825','3477330474'),
('15591903178','8576556261'),
('15109286032','8251618343'),
('15615500565','1050079788'),
('13630266330','5347384098'),
('15956900268','2642329050'),
('18728390370','7870875282'),
('18976589764','5165937678'),
('15092755532','4952160908'),
('15380239551','2739756387'),
('18354752253','3394331602'),
('17692304283','4265596684'),
('13572086005','3585749899'),
('15081674433','1492306574'),
('13861602746','8736597942'),
('19711921991','3259846354'),
('15330091963','1537622221');
INSERT INTO `sys_user_im_bind` (`user_id`, `phone`, `im_user_id`)
SELECT u.user_id, u.phonenumber, m.im_user_id
FROM `sys_user` u
JOIN `tmp_im_phone_map` m ON m.phone = u.phonenumber
WHERE u.del_flag = '0'
ON DUPLICATE KEY UPDATE
`phone` = VALUES(`phone`),
`im_user_id` = VALUES(`im_user_id`);
-- 校验结果
SELECT COUNT(*) AS bound_count FROM `sys_user_im_bind`;
SELECT u.user_id, u.user_name, u.phonenumber, b.im_user_id
FROM `sys_user` u
LEFT JOIN `sys_user_im_bind` b ON b.user_id = u.user_id
WHERE u.del_flag = '0' AND u.phonenumber IS NOT NULL AND u.phonenumber <> ''
ORDER BY b.im_user_id IS NULL DESC;

View File

@@ -0,0 +1,58 @@
-- ==========================================================
-- 库房重构 Phase 0建审计日志表 + 修正历史状态
-- 全部为新增/数据修正,零影响现有功能
-- ==========================================================
-- ----------------------------------------------------------
-- 1. 旧 log 表留底(结构残缺,只有 20 行)
-- ----------------------------------------------------------
RENAME TABLE `sys_oa_warehouse_log` TO `_deprecated_sys_oa_warehouse_log`;
-- ----------------------------------------------------------
-- 2. 统一审计日志表
-- ----------------------------------------------------------
DROP TABLE IF EXISTS `sys_oa_warehouse_audit_log`;
CREATE TABLE `sys_oa_warehouse_audit_log` (
`log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`op_type` varchar(32) NOT NULL COMMENT '操作类型REQ_CREATE/REQ_DONE/REQ_CANCEL/TASK_CREATE/TASK_DONE/IN/OUT/RETURN/STOCK_ADJUST 等',
`ref_type` varchar(32) DEFAULT NULL COMMENT '关联实体类型requirement/task/master/warehouse',
`ref_id` bigint DEFAULT NULL COMMENT '关联实体ID',
`project_id` bigint DEFAULT NULL COMMENT '所属项目ID可选便于按项目筛日志',
`warehouse_id` bigint DEFAULT NULL COMMENT '关联物料ID可选便于按物料筛日志',
`summary` varchar(500) NOT NULL COMMENT '一句话摘要(前端列表直接展示)',
`before_json` text COMMENT '变更前快照JSON可选',
`after_json` text COMMENT '变更后快照JSON可选',
`op_user_id` bigint DEFAULT NULL COMMENT '操作人ID',
`op_user_name` varchar(64) DEFAULT NULL COMMENT '操作人昵称(冗余便于展示)',
`op_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`log_id`),
KEY `idx_op_type` (`op_type`),
KEY `idx_ref` (`ref_type`, `ref_id`),
KEY `idx_project_id` (`project_id`),
KEY `idx_warehouse_id` (`warehouse_id`),
KEY `idx_op_time` (`op_time`),
KEY `idx_op_user_id` (`op_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库房统一操作日志';
-- ----------------------------------------------------------
-- 3. 修正历史退库单状态(去审批化前的尾巴)
-- type=2 且 status=0 的 8 条历史单子,本意是"已批准的退库",统一改成 status=1
-- ----------------------------------------------------------
UPDATE `sys_oa_warehouse_master`
SET `status` = 1,
`update_time`= NOW(),
`update_by` = 'system_migration'
WHERE `type` = 2
AND `status` = 0
AND `del_flag` = 0;
SELECT ROW_COUNT() AS type2_status0_fixed;
-- ----------------------------------------------------------
-- 4. 给 oa_requirements 补可读注释(之前没注释也没乱码,但 status 含义不明)
-- ----------------------------------------------------------
ALTER TABLE `oa_requirements`
MODIFY COLUMN `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '完成情况0=未采购 1=采购中 2=完成 3=取消)',
COMMENT = '采购需求(项目大件/特殊件,对应"采购需求"菜单)';

View File

@@ -0,0 +1,69 @@
-- ==========================================================
-- 库房菜单调整(无权限控制版)
-- ==========================================================
-- ----------------------------------------------------------
-- 1. 复活并修正"采购需求"菜单
-- ----------------------------------------------------------
UPDATE sys_menu
SET menu_name = '采购需求',
path = 'requirement',
component = 'oa/task/requirement/index',
perms = NULL,
visible = '0',
status = '0',
order_num = 30,
icon = 'tool'
WHERE menu_id = 1968929776643162114;
-- ----------------------------------------------------------
-- 2. 新增"出库明细"菜单
-- ----------------------------------------------------------
INSERT INTO sys_menu
(menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES
(2059900000000000001, '出库明细', 1852933620281430018, 65,
'outDetail', 'oa/oaOutWarehouse/detail', 'C', '0', '0',
NULL, 'detail', 'admin', NOW());
-- ----------------------------------------------------------
-- 3. 新增"操作日志"菜单
-- ----------------------------------------------------------
INSERT INTO sys_menu
(menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES
(2059900000000000002, '操作日志', 1852933620281430018, 90,
'auditLog', 'oa/oaWarehouse/auditLog', 'C', '0', '0',
NULL, 'log', 'admin', NOW());
-- ----------------------------------------------------------
-- 4. 隐藏过时/测试菜单visible='1' = 隐藏)
-- ----------------------------------------------------------
UPDATE sys_menu SET visible = '1'
WHERE menu_id IN (
1920003824857874433, -- 测试页面
1938799329876361217, -- 退库日志
1906233436477644801 -- 采购计划
);
-- ----------------------------------------------------------
-- 5. 重排库房一级菜单顺序
-- ----------------------------------------------------------
UPDATE sys_menu SET order_num = 10 WHERE menu_id = 1925143921102114818; -- 智慧库房
UPDATE sys_menu SET order_num = 20 WHERE menu_id = 1852933963887202305; -- 库存管理
UPDATE sys_menu SET order_num = 30 WHERE menu_id = 1968929776643162114; -- 采购需求
UPDATE sys_menu SET order_num = 40 WHERE menu_id = 1906249355421573121; -- 车间采购
UPDATE sys_menu SET order_num = 50 WHERE menu_id = 1902604787711459329; -- 入库明细
UPDATE sys_menu SET order_num = 60 WHERE menu_id = 1853343196679536641; -- 仓库出库
UPDATE sys_menu SET order_num = 65 WHERE menu_id = 2059900000000000001; -- 出库明细
UPDATE sys_menu SET order_num = 70 WHERE menu_id = 1938787785255927809; -- 退库管理
UPDATE sys_menu SET order_num = 90 WHERE menu_id = 2059900000000000002; -- 操作日志
-- ----------------------------------------------------------
-- 6. 校验
-- ----------------------------------------------------------
SELECT menu_id, menu_name, path, component, visible, order_num
FROM sys_menu
WHERE parent_id = 1852933620281430018
AND status = '0'
ORDER BY order_num;

View File

@@ -0,0 +1,159 @@
-- ==========================================================
-- 库房模块简化迁移
-- 目的:删除冗余表、修复乱码注释、补关键索引
-- 注意:所有 ALTER 在 MySQL 8 上为 in-place / instant业务低峰执行
-- ==========================================================
-- 强烈建议执行前做一次备份:
-- mysqldump -uroot -p fad_oa_dev \
-- sys_oa_warehouse sys_oa_warehouse_master sys_oa_warehouse_detail \
-- sys_oa_warehouse_task sys_oa_warehouse_log sys_oa_warehouse_request \
-- > warehouse_backup_$(date +%Y%m%d).sql
-- ==========================================================
-- ----------------------------------------------------------
-- 1. 删除完全未使用的表
-- ----------------------------------------------------------
-- request 表 0 行,前端没接入,确认废弃
-- ----------------------------------------------------------
-- 2. 修复字段注释(数据库中是 ? 乱码,重新设置为可读中文)
-- ----------------------------------------------------------
-- 2.1 sys_oa_warehouse 物料档案 / 实时库存
ALTER TABLE `sys_oa_warehouse`
MODIFY COLUMN `id` bigint NOT NULL AUTO_INCREMENT COMMENT '物料ID',
MODIFY COLUMN `inventory` bigint DEFAULT NULL COMMENT '当前库存数量',
MODIFY COLUMN `model` varchar(50) DEFAULT NULL COMMENT '型号',
MODIFY COLUMN `price` decimal(18,2) DEFAULT '0.00' COMMENT '加权平均单价',
MODIFY COLUMN `unit` varchar(5) DEFAULT NULL COMMENT '单位',
MODIFY COLUMN `name` varchar(50) DEFAULT NULL COMMENT '物料名称',
MODIFY COLUMN `brand` varchar(200) DEFAULT NULL COMMENT '品牌',
MODIFY COLUMN `specifications` varchar(125) DEFAULT NULL COMMENT '规格',
MODIFY COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注',
MODIFY COLUMN `create_time` datetime DEFAULT NULL COMMENT '创建时间',
MODIFY COLUMN `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
MODIFY COLUMN `update_time` datetime DEFAULT NULL COMMENT '更新时间',
MODIFY COLUMN `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
MODIFY COLUMN `del_flag` tinyint DEFAULT '0' COMMENT '删除标志0=正常 2=删除)',
MODIFY COLUMN `threshold` bigint NOT NULL DEFAULT '5' COMMENT '库存预警阈值',
COMMENT = '物料档案/实时库存';
-- 2.2 sys_oa_warehouse_master 出入库单据头
ALTER TABLE `sys_oa_warehouse_master`
MODIFY COLUMN `master_id` bigint NOT NULL AUTO_INCREMENT COMMENT '单据ID',
MODIFY COLUMN `master_num` varchar(296) DEFAULT NULL COMMENT '单据编号',
MODIFY COLUMN `type` int DEFAULT NULL COMMENT '类型0=出库 1=入库 2=归还)',
MODIFY COLUMN `project_id` bigint DEFAULT NULL COMMENT '关联项目ID',
MODIFY COLUMN `requirement_id` bigint DEFAULT NULL COMMENT '关联需求ID',
MODIFY COLUMN `sign_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '签收/操作时间',
MODIFY COLUMN `sign_user` varchar(20) DEFAULT NULL COMMENT '签收人',
MODIFY COLUMN `is_like` int DEFAULT '0' COMMENT '是否收藏0=否 1=是)',
MODIFY COLUMN `status` int DEFAULT '0' COMMENT '单据状态',
MODIFY COLUMN `return_type` int DEFAULT '0' COMMENT '归还类型0=否 1=部分归还)',
MODIFY COLUMN `withdraw_lock` tinyint NOT NULL DEFAULT '0' COMMENT '撤回锁定1=锁定)',
MODIFY COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注',
MODIFY COLUMN `del_flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除标志',
COMMENT = '出入库单据头';
-- 2.3 sys_oa_warehouse_detail 出入库单据行
ALTER TABLE `sys_oa_warehouse_detail`
MODIFY COLUMN `id` bigint NOT NULL AUTO_INCREMENT COMMENT '明细ID',
MODIFY COLUMN `master_id` bigint DEFAULT NULL COMMENT '所属单据IDsys_oa_warehouse_master',
MODIFY COLUMN `warehouse_id` bigint NOT NULL COMMENT '物料IDsys_oa_warehouse',
MODIFY COLUMN `amount` bigint DEFAULT NULL COMMENT '本次出入库数量',
MODIFY COLUMN `sign_price` decimal(18,2) DEFAULT '0.00' COMMENT '签收单价',
MODIFY COLUMN `project_id` bigint DEFAULT NULL COMMENT '所属项目ID',
MODIFY COLUMN `father_id` bigint DEFAULT NULL COMMENT '父任务IDtask 派生明细使用)',
MODIFY COLUMN `remark` varchar(255) DEFAULT NULL COMMENT '备注',
MODIFY COLUMN `del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志',
COMMENT = '出入库单据行';
-- 2.4 sys_oa_warehouse_task 库房任务(采购/补货)
ALTER TABLE `sys_oa_warehouse_task`
MODIFY COLUMN `task_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID',
MODIFY COLUMN `master_id` bigint DEFAULT NULL COMMENT '完成后写回的单据ID',
MODIFY COLUMN `warehouse_id` bigint DEFAULT NULL COMMENT '关联物料ID新采购可空',
MODIFY COLUMN `name` varchar(50) DEFAULT NULL COMMENT '物料名称(快照)',
MODIFY COLUMN `model` varchar(20) DEFAULT NULL COMMENT '型号',
MODIFY COLUMN `brand` varchar(20) DEFAULT NULL COMMENT '品牌',
MODIFY COLUMN `specifications` varchar(40) DEFAULT NULL COMMENT '规格',
MODIFY COLUMN `unit` varchar(50) DEFAULT NULL COMMENT '单位',
MODIFY COLUMN `task_inventory` int DEFAULT NULL COMMENT '任务数量(采购量/补货量)',
MODIFY COLUMN `task_status` int DEFAULT '0' COMMENT '任务状态0=待处理 1=进行中 2=完成 3=取消)',
MODIFY COLUMN `end_time` datetime DEFAULT NULL COMMENT '期望完成时间',
MODIFY COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注',
MODIFY COLUMN `del_flag` int DEFAULT '0' COMMENT '删除标志',
COMMENT = '库房任务(采购/补货)';
-- 2.5 sys_oa_warehouse_log 库房操作日志
ALTER TABLE `sys_oa_warehouse_log`
MODIFY COLUMN `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID',
MODIFY COLUMN `master_id` bigint DEFAULT NULL COMMENT '关联单据ID',
MODIFY COLUMN `warehouse_id` bigint DEFAULT NULL COMMENT '关联物料ID',
MODIFY COLUMN `num` int DEFAULT NULL COMMENT '变更数量',
MODIFY COLUMN `del_flag` int NOT NULL DEFAULT '0' COMMENT '删除标志',
COMMENT = '库房操作日志';
-- ----------------------------------------------------------
-- 3. 补关键索引(之前所有表只有主键,查询慢的根因)
-- ----------------------------------------------------------
-- master 单据头:按项目、状态、类型查
ALTER TABLE `sys_oa_warehouse_master`
ADD INDEX `idx_project_id` (`project_id`),
ADD INDEX `idx_type_status` (`type`, `status`),
ADD INDEX `idx_sign_time` (`sign_time`);
-- detail 单据行:按单据、物料、项目查(最高频)
ALTER TABLE `sys_oa_warehouse_detail`
ADD INDEX `idx_master_id` (`master_id`),
ADD INDEX `idx_warehouse_id` (`warehouse_id`),
ADD INDEX `idx_project_id` (`project_id`);
-- warehouse 物料:按名称、型号搜
ALTER TABLE `sys_oa_warehouse`
ADD INDEX `idx_name` (`name`),
ADD INDEX `idx_model` (`model`),
ADD INDEX `idx_del_flag` (`del_flag`);
-- task 任务:按状态、物料、单据
ALTER TABLE `sys_oa_warehouse_task`
ADD INDEX `idx_task_status` (`task_status`),
ADD INDEX `idx_warehouse_id` (`warehouse_id`),
ADD INDEX `idx_master_id` (`master_id`);
-- log按单据、物料查
ALTER TABLE `sys_oa_warehouse_log`
ADD INDEX `idx_master_id` (`master_id`),
ADD INDEX `idx_warehouse_id` (`warehouse_id`);
-- ----------------------------------------------------------
-- 4. 数据健康检查(运行后看看)
-- ----------------------------------------------------------
-- 4.1 库存为负数的物料(数据错乱)
SELECT id, name, model, inventory FROM sys_oa_warehouse
WHERE del_flag = 0 AND inventory < 0;
-- 4.2 detail 指向已删除/不存在物料的孤儿行
SELECT d.id, d.master_id, d.warehouse_id
FROM sys_oa_warehouse_detail d
LEFT JOIN sys_oa_warehouse w ON w.id = d.warehouse_id
WHERE w.id IS NULL AND d.del_flag = 0
LIMIT 50;
-- 4.3 detail 指向已删除/不存在单据的孤儿行
SELECT d.id, d.master_id
FROM sys_oa_warehouse_detail d
LEFT JOIN sys_oa_warehouse_master m ON m.master_id = d.master_id
WHERE m.master_id IS NULL AND d.del_flag = 0
LIMIT 50;
-- 4.4 task 中超过 90 天还在进行中的(疑似遗留)
SELECT task_id, name, task_status, create_time
FROM sys_oa_warehouse_task
WHERE task_status IN (0, 1)
AND create_time < DATE_SUB(NOW(), INTERVAL 90 DAY)
AND del_flag = 0;