feat(bi): 新增出勤指标与库存采购图表,放开人资办公大屏菜单
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================ |
| | | -- BI 大屿°å¢ï¼åºå¤ææ ï¼äººèµåå
¬å¤§å±ï¼+ åºåéè´ï¼éè´éå®å¤§å±ï¼ |
| | | -- çææ¶é´ï¼2026-10-30 |
| | | -- |
| | | -- 1. æ¾å¼ã人èµåå
¬å¤§å±ãèåï¼åæ¥ visible=0 éèï¼å¯¼è´çä¸å°ï¼ |
| | | -- 2. 人èµåå
¬å¤§å± å¢å åºå¤ç / è¿å° / ç¼ºå¡ / 请åå·¥æ¶ / åºå¤è¶å¿ |
| | | -- 3. éè´éå®å¤§å± å¢å åºåå¯ç¨é / åºååç§ / å·²å
¥åºé / åºåTOP10 |
| | | -- |
| | | -- å¾è¡¨çº¦å®ï¼number ç±»å SQL è¿ååå valueï¼bar/pie è¿å label + value |
| | | -- å¹çï¼æ name+dashboard_id å¤éï¼å¯é夿§è¡ |
| | | -- ============================================================ |
| | | |
| | | -- ---------- 1. æ¾å¼äººèµåå
¬å¤§å±èå ---------- |
| | | UPDATE system_menu SET visible = b'1', updater = '1', update_time = NOW() |
| | | WHERE id = 1063005 AND deleted = b'0'; |
| | | |
| | | -- ---------- 2. 人èµåå
¬å¤§å±ï¼åºå¤ææ ---------- |
| | | -- å¸å±ï¼number å¡çå ç¨ y=0 è¡ x=12..23ï¼åæ 4 å¼ åªç¨å° x=0..11ï¼ |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'æ¬æåºå¤ç', 'number', NULL, |
| | | 'SELECT ROUND(SUM(actual_days)/NULLIF(SUM(work_days),0)*100,1) AS value FROM hrm_attendance_summary WHERE deleted=0 AND `year_month`=DATE_FORMAT(NOW(),''%Y-%m'')', |
| | | '{"h": 4, "w": 3, "x": 12, "y": 0}', NULL, 30, 20, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'hr_oa' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'æ¬æåºå¤ç' AND c.deleted = b'0'); |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'æ¬æè¿å°æ¬¡æ°', 'number', NULL, |
| | | 'SELECT IFNULL(SUM(late_count),0) AS value FROM hrm_attendance_summary WHERE deleted=0 AND `year_month`=DATE_FORMAT(NOW(),''%Y-%m'')', |
| | | '{"h": 4, "w": 3, "x": 15, "y": 0}', NULL, 30, 21, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'hr_oa' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'æ¬æè¿å°æ¬¡æ°' AND c.deleted = b'0'); |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'æ¬æç¼ºå¡æ¬¡æ°', 'number', NULL, |
| | | 'SELECT IFNULL(SUM(absent_count),0) AS value FROM hrm_attendance_summary WHERE deleted=0 AND `year_month`=DATE_FORMAT(NOW(),''%Y-%m'')', |
| | | '{"h": 4, "w": 3, "x": 18, "y": 0}', NULL, 30, 22, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'hr_oa' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'æ¬æç¼ºå¡æ¬¡æ°' AND c.deleted = b'0'); |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'æ¬æè¯·åå·¥æ¶', 'number', NULL, |
| | | 'SELECT ROUND(IFNULL(SUM(leave_hours),0),1) AS value FROM hrm_attendance_summary WHERE deleted=0 AND `year_month`=DATE_FORMAT(NOW(),''%Y-%m'')', |
| | | '{"h": 4, "w": 3, "x": 21, "y": 0}', NULL, 30, 23, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'hr_oa' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'æ¬æè¯·åå·¥æ¶' AND c.deleted = b'0'); |
| | | |
| | | -- åºå¤è¶å¿ï¼æåº¦åºå¤çæçº¿ï¼å x=12..23 åºåï¼ |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'åºå¤çè¶å¿', 'line', NULL, |
| | | 'SELECT `year_month` AS label, ROUND(SUM(actual_days)/NULLIF(SUM(work_days),0)*100,1) AS value FROM hrm_attendance_summary WHERE deleted=0 GROUP BY `year_month` ORDER BY `year_month`', |
| | | '{"h": 8, "w": 12, "x": 12, "y": 4}', NULL, 60, 24, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'hr_oa' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'åºå¤çè¶å¿' AND c.deleted = b'0'); |
| | | |
| | | -- ---------- 3. éè´éå®å¤§å±ï¼åºåéè´ ---------- |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'åºåå¯ç¨æ»é', 'number', NULL, |
| | | 'SELECT ROUND(IFNULL(SUM(quantity-frozen_quantity-reserved_quantity),0),0) AS value FROM mes_wm_material_stock WHERE deleted=0 AND frozen=0', |
| | | '{"h": 4, "w": 3, "x": 12, "y": 0}', NULL, 60, 20, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'purchase_sales' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'åºåå¯ç¨æ»é' AND c.deleted = b'0'); |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'åºååç§æ°', 'number', NULL, |
| | | 'SELECT COUNT(DISTINCT item_id) AS value FROM mes_wm_material_stock WHERE deleted=0', |
| | | '{"h": 4, "w": 3, "x": 15, "y": 0}', NULL, 60, 21, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'purchase_sales' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'åºååç§æ°' AND c.deleted = b'0'); |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'å»ç»åºåé', 'number', NULL, |
| | | 'SELECT ROUND(IFNULL(SUM(frozen_quantity+reserved_quantity),0),0) AS value FROM mes_wm_material_stock WHERE deleted=0', |
| | | '{"h": 4, "w": 3, "x": 18, "y": 0}', NULL, 60, 22, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'purchase_sales' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'å»ç»åºåé' AND c.deleted = b'0'); |
| | | |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'ä¾åºåå°è´§æ¹æ¬¡', 'number', NULL, |
| | | 'SELECT COUNT(*) AS value FROM mes_wm_material_stock WHERE deleted=0 AND vendor_id IS NOT NULL', |
| | | '{"h": 4, "w": 3, "x": 21, "y": 0}', NULL, 60, 23, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'purchase_sales' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'ä¾åºåå°è´§æ¹æ¬¡' AND c.deleted = b'0'); |
| | | |
| | | -- åºå TOP10ï¼æ¨ªåæ±ç¶ï¼ |
| | | INSERT INTO `bi_chart_config` |
| | | (`dashboard_id`, `name`, `chart_type`, `data_source_id`, `query_sql`, `position`, |
| | | `chart_options`, `refresh_interval`, `sort`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | SELECT d.id, 'åºåæ°é TOP10', 'bar', NULL, |
| | | 'SELECT i.name AS label, ROUND(SUM(s.quantity-s.frozen_quantity-s.reserved_quantity),0) AS value FROM mes_wm_material_stock s JOIN mes_md_item i ON i.id=s.item_id AND i.deleted=0 WHERE s.deleted=0 GROUP BY i.name ORDER BY value DESC LIMIT 10', |
| | | '{"h": 8, "w": 12, "x": 12, "y": 4}', NULL, 120, 24, 1, '1', NOW(), '1', NOW(), b'0' |
| | | FROM `bi_dashboard` d |
| | | WHERE d.`code` = 'purchase_sales' AND d.deleted = b'0' |
| | | AND NOT EXISTS (SELECT 1 FROM `bi_chart_config` c WHERE c.`dashboard_id` = d.id AND c.`name` = 'åºåæ°é TOP10' AND c.deleted = b'0'); |
| | | |
| | | -- ---------- 4. æ ¡éª ---------- |
| | | SELECT d.`code` AS 大å±, COUNT(*) AS å¾è¡¨æ° |
| | | FROM bi_chart_config c JOIN bi_dashboard d ON d.id = c.dashboard_id |
| | | WHERE d.`code` IN ('hr_oa','purchase_sales') AND c.deleted = b'0' |
| | | GROUP BY d.`code`; |
| | | |
| | | SELECT id, name, visible+0 AS vis FROM system_menu WHERE id = 1063005; |