xiaoyi
2026-10-30 62c601d81f9d04bc5b4e3dbcb58f10fc7e00d438
feat(bi): 新增出勤指标与库存采购图表,放开人资办公大屏菜单
已添加1个文件
129 ■■■■■ 文件已修改
sql/mysql/bi_add_attendance_stock_20261030.sql 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/bi_add_attendance_stock_20261030.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
-- ============================================================
-- 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;