SET NAMES utf8mb4;

-- ----------------------------
-- 能源分类
-- ----------------------------
drop table if exists dim_gb_ems_cls;
create table dim_gb_ems_cls (
  `id`            bigint(20)      not null auto_increment    comment '序号',
  `code`          varchar(16)     not null                   comment '能源代码',
  `name`          varchar(32)     not null                   comment '能源种类',
  `desc`          varchar(256)    default null               comment '说明',
  `level`         int(4)          default 0                  comment '分类层级 1-大类，2-中类，3-小类',
  `parent_code`   varchar(16)     default null               comment '父类代码',
  `version`       varchar(64)     default null               comment '数据版本',
  primary key (`id`),
  unique key ux_ems_cls_code(`code`)
) engine=innodb auto_increment=1 comment = '能源分类';

-- 能源分类初始数据
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('10',       '煤炭及煤制品',                 null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('1001',     '无烟煤',                      null, 2, '10', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('1002',     '烟煤',                        null, 2, '10', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100201',	 '贫煤',                        null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100202',	 '贫瘦煤',                      null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100203',	 '瘦煤',                        null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100204',	 '焦煤',                        null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100205',	 '肥煤',                        null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100206',	 '1/3焦煤',                     null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100207',	 '气肥煤',                      null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100208',	 '气煤',                        null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100209',	 '1/2中黏煤',                    null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100210',	 '弱黏煤',                       null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100211',	 '不黏煤',                       null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100212',   '长焰煤',                      null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100299',	 '其他烟煤',                     null, 3, '1002', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('1003',     '褐煤',                        null, 2, '10', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('1004',     '煤制品',                      '指除煤制油以外的煤炭制品',  2, '10', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100401',	 '焦炭',                        '包括焦炉焦炭、煤气焦炭、焦炭渣和半焦炭等0',  3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100402',	 '型煤',                        '包括煤球、煤砖、蜂窝煤等', 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100403',	 '煤制二甲醚',                   null, 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100404',	 '炼焦油',                      null, 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100405',	 '焦炉气',                      null, 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100406',	 '炼厂煤气',                    null, 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100407',	 '再利用煤气',                  '包括高炉煤气、氧化煤气等', 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100408',	 '煤制天然气',                  null, 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100499',	 '其他煤制品',                  null, 3, '1004', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('1005',     '煤制油',                     null, 2, '10', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100501',	 '煤制石脑油',                  null, 3, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100502',	 '煤制汽油',                    null, 3, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100503',	 '煤制柴油',                    null, 3, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100504',	 '煤制航空燃料',                 null, 3, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100505',	 '煤制石蜡',                    null, 3, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('100599',	 '其他煤制油',                  null, 3, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('1099',     '其他煤炭及煤制品',             null, 2, '1005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('15',	     '泥炭及泥炭产物',               '又名“泥煤”、“草煤”、“草碳”，包括泥碳片、碾碎泥炭、泥炭产物等', 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('20',	     '油页岩/油沙',                 null, 1,  '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('2001',     '页岩气',                     '指主体以上吸附或游离状态存在于泥岩、高碳泥岩、页岩及粉砂质岩类夹层中的天然气', 2,  '20', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('2099',     '其他油页岩/油砂',             null, 2, '20', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('25',	     '天然气',                     null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('2501',     '常规天然气',                  '指由常规油器藏开发出的天然气', 2, '25', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250101',	 '纯气田天然气',                '指气藏中以气相存的天然气，通过气井开采出来的非伴生气', 3, '2501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250102',	 '凝析气田天然气',              '指天然气从地层流出井口后，随着压力和温度的下降，分离生成的气相伴生气', 3, '2501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250103',	 '伴生天然气',                 '指与石油伴生的天然气', 3, '2501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250199',	 '其他常规天然气',              null, 3, '2501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('2502',     '非常规天然气',                '指难于用传统油气生成理论解释，在地下的赋存状态和聚集方式与常规天然气藏具有明显差异的天然气聚集', 2, '25', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250201',	 '煤成气',                     '指含煤岩层中有机质在成煤过程中所生成的天然气', 3, '2502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250202',	 '煤层气',                     '又名“煤层甲烷”、“瓦斯”，指赋存在煤层中以甲烷为主要成分、以吸附在煤基质颗粒表面为主、部分游离于煤孔隙中或溶解于煤层水中的烃类气体', 3, '2502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250203',	 '深层气',                     '指深埋层位生成与储集的天然气，即地球沉积层深部层位形成或赋存的天然气', 3, '2502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250204',	 '天然气水合物',                '又名“可燃冰”', 3, '2502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250299',	 '其他非常规天然气',             null, 3, '2502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('2503',     '天然气加工制品',               null, 2, '25', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250301',	 '液化天然气',                  null, 3, '2503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250302',	 '压缩天然气',                  null, 3, '2503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('250399',	 '其他天然气加工制品',           null, 3, '2503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('2599',     '其他天然气',                  null, 2, '25', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('30',	     '石油及石油制品',               null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3001',     '原油',                        null, 2, '30', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3002',     '天然气凝析液',                 null, 2, '30', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3003',     '石油制品',                    null, 2, '30', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300301',	 '汽油',                       '包括航空汽油和车用汽油', 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300302',	 '煤油',                       '包括航空煤油和灯用煤油等', 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300303',	 '柴油',                       null, 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300304',	 '燃料油',                     '包括船用燃料和工业用燃料油等', 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300305',	 '燃料气',                     '包括野花石油气、炼厂干气和甲烷氢等', 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300306',	 '石蜡',                       null, 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300307',	 '沥青',                       '包括煤焦沥青和石油沥青等', 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300308',	 '石焦油',                     null, 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('300399',	 '其他石油制品',                null, 3, '3003', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3099',     '其他石油及石油制品',           null, 2, '30', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('35',	     '生物质能',                   null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3501',     '固态生物燃料',                null, 2, '35', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350101',	 '薪材、木材残渣和副产品',        '包括树皮、薪柴、锯末刨花等', 3, '3501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350102',	 '动物肥料',                    null, 3, '3501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350103',	 '植物材料和剩余物',             '包括玉米棒、稻壳、木索、麻等', 3, '3501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350104',	 '木炭',                       null, 3, '3501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350199',	 '其他固态生物燃料',             null, 3, '3501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3502',     '液态生物燃料',                null, 2, '35', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350201',	 '生物汽油',                   null, 3, '3502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350202',	 '生物柴油',                   null, 3, '3502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350203',	 '生物航空煤油',                null, 3, '3502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350299',	 '其他液体生物燃料',             null, 3, '3502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3503',     '生物气',                     null, 2, '35', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350301',	 '沼气',                       null, 3, '3503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350302',	 '热处理过程中生物气',           null, 3, '3503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('350303',	 '其他生物气',                  null, 3, '3503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('3599',     '其他生物质能',                null, 2, '35', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('40',	     '废料能',                     null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('45',	     '电能',                       null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4501',     '火力发电',                    '指利用煤、石油、天然气等固体、液体、气体燃料燃烧时产生的热能，通过发电动力装置转换成电能的一种发电方式', 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450101',	 '燃煤发电',                    null, 3, '4501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450102',	 '燃油发电',                    null, 3, '4501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450103',	 '燃气发电',                    null, 3, '4501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450199',	 '其他火力发电',                 null, 3, '4501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4502',     '水力发电',                    '指将河流、湖泊或海洋等水体所蕴藏的水能转变为电能的发电方式', 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450201',	 '大型水电站发电',               '指装机容量在300000kw以上的水电站', 3, '4502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450202',	 '中型水电站发电',               '指装机容量在50000kw-300000kw的水电站', 3, '4502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450203',	 '抽水蓄能',                    null, 3, '4502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450299',	 '其他水力发电',                 null, 3, '4502', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4503',     '核能发电',                    null, 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450301',	 '大、中型商用核电',             '指用于电网基荷电源的核电', 3, '4503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450302',	 '小型模块式核电',               '指用于偏远地区、岛屿及专用用户供电的核电', 3, '4503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450303',	 '电热联供核电',                 null, 3, '4503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450304',	 '空间核反应堆电源',              '指航天器与空间站专用电源', 3, '4503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450305',	 '同位素电池',                   null, 3, '4503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450399',	 '其他核能发电',                 null, 3, '4503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4504',     '可再生能源发电',               null, 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450401',	 '风力发电',                    null, 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450402',	 '太阳能发电',                  '包括太阳能光伏发电、太阳能热发电等', 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450403',	 '小型水电站发电',               '指装机容量在50000kw以下的小水电站', 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450404',	 '生物质能发电',                 null, 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450405',	 '地热能发电',                   null, 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450406',	 '海洋能发电',                   '包括海洋温差能发电、潮汐能发电和波浪能发电等', 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('450499',	 '其他可再生能源发电',            null, 3, '4504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4505',     '垃圾发电',                    '指通过特殊的焚烧锅炉和燃烧城市固体垃圾，再通过蒸汽轮机发电机组发电', 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4506',     '余热余压发电',                 '指利用企业生产过程中释放出来多余的副产热能、压差能来发电', 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('4599',     '其他电能',                    null, 2, '45', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('50', 	     '热能',                       null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5001',     '太阳能供热',                  null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5002',     '生物质能供热',                '包括秸秆、薪柴、粪便燃烧取热等', 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5003',     '地热能产热',                  null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5004',     '化石燃烧供热',                null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5005',     '核能直接供热',                null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('500501',	 '高温核供热',                  '指供热温度高于550℃的冶金、化工工艺', 3, '5005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('500502',	 '低温核供热',                  null, 3, '5005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('500503',	 '热电联供核电厂供热',           null, 3, '5005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('500599',	 '其他核能直接供热',             null, 3, '5005', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5006',     '废料燃烧供热',                null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5007',     '电热锅炉供热',                null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5008',     '热泵供热',                   '包括地源、空气源荷水源热泵产热', 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5009',     '余热余压供热',                null, 2, '50', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('55',	     '核能',                      null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5501',     '天然铀矿藏',                 null, 2, '55', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550101',	 '砂岩型矿石',                 null, 3, '5501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550102',	 '碳硅泥岩型矿石',              null, 3, '5501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550103',	 '花岗岩型矿石',                null, 3, '5501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550104',	 '火山岩型矿石',                null, 3, '5501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550105',	 '岩浆岩型矿石',                null, 3, '5501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550199',	 '其他天然铀矿藏',              null, 3, '5501', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5502',     '钍矿藏',                     null, 2, '55', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5503',     '铀矿生产的中间产品',           '指从天然铀到核燃料生产过程中可供销售的产品', 2, '55', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550301',	 '黄饼',                       null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550302',	 '四氟化铀',                    null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550303',	 '六氟化铀',                    null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550304',	 '铀金属及铀合金',               null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550305',	 '低富集铀',                    '指铀-235富集度＜20％的富集铀产品', 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550306',	 '高富集铀',                    '指铀-235富集度>=20%富集铀产品', 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550307',	 '二氧化铀',                    null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550308',	 '钚',                         null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550309',	 '回收铀',                      null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550310',	 '铀钚混合氧化物',               null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550311',	 '贫铀',                        null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550312',	 '铀钍混合氧化物',               null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550313',	 '碳铀化物及氮铀化物',            null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550399',	 '其他铀生产的中间产品',          null, 3, '5503', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5504',     '核聚变反应材料或其原材料',       null, 2, '55', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550401',	 '氘',                         null, 3, '5504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550402',	 '氚',                         null, 3, '5504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550403',	 '锂',                         null, 3, '5504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('550499',   '其他核聚变反应材料或其原材料',    null, 3, '5504', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('5599',     '其他核能',                     null, 2, '55', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('60',	     '氢能',                        null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('99',	     '其他',                        null, 1, '-1', 'GB/T 29870-2013');
INSERT INTO `dim_gb_ems_cls` (`code`, `name`, `desc`, `level`, `parent_code`, `version`) VALUES ('70',          '自来水',                  NULL, 1, '-1', NULL);

-- ----------------------------
-- 能源设施分类
-- ----------------------------
drop table if exists dim_ems_facs_category;
create table dim_ems_facs_category (
  `id`        bigint(20)      not null auto_increment    comment '序号',
  `code`      varchar(8)      not null                   comment '设施系统代码',
  `name`      varchar(16)     not null                   comment '设施系统名称',
  `desc`      varchar(64)     default null               comment '说明',
  `version`   varchar(64)     default null               comment '数据版本',
  primary key (`id`),
  unique key ux_ems_facs_category_code(`code`)
) engine=innodb auto_increment=1 comment = '能源设施分类';

-- 能源设施初始数据
INSERT INTO `dim_ems_facs_category` (`code`, `name`, `desc`, `version`) VALUES ('E', '能源生产系统', '全站码', 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_category` (`code`, `name`, `desc`, `version`) VALUES ('T', '中转系统', '全站码', 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_category` (`code`, `name`, `desc`, `version`) VALUES ('W', '传输系统', '区位码', 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_category` (`code`, `name`, `desc`, `version`) VALUES ('C', '存储系统', '全站码', 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_category` (`code`, `name`, `desc`, `version`) VALUES ('Z', '用能系统', '区位码', 'GB/T 43033-2013');


-- ----------------------------
-- 能源设施子类
-- ----------------------------
drop table if exists dim_ems_facs_subcategory;
create table dim_ems_facs_subcategory (
  `id`            bigint(20)      not null auto_increment    comment '序号',
  `code`          varchar(8)      not null                   comment '设施子类代码',
  `name`          varchar(16)     not null                   comment '设施子类名称',
  `parent_code`   varchar(8)      not null                   comment '所属设施系统分类代码',
  `desc`          varchar(64)     default null               comment '说明',
  `version`       varchar(64)     default null               comment '数据版本',
  primary key (`id`),
  unique key ux_ems_facs_subcategory_code(`code`)
) engine=innodb auto_increment=1 comment = '能源设施子类';

-- 能源设施初始数据
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E1', '天然气分布式供能站', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E2', '生物质发电站', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E3', '分布式风力发电场', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E4', '小型水力发电站', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E5', '分布式光伏发电系统', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E6', '太阳能供热站', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('E7', '锅炉供热站（电、燃气等型式）', 'E', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('T1', '换热站', 'T', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('T2', '制冷/热站', 'T', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('T3', '热泵站', 'T', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('T4', '供氢站', 'T', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('W1', '管网', 'W', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('W2', '配电网', 'W', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('W3', '中继泵站', 'W', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('W4', '能耗监测', 'W', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('C1', '电化学储能站', 'C', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('C2', '飞轮、压缩空气等机械储能站', 'C', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('C3', '蓄冷/热站', 'C', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('C4', '储氢站', 'C', null, 'GB/T 43033-2013');
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('Z010', '照明设施', 'Z', null, null);
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('Z020', '暖通设施', 'Z', null, null);
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('Z030', '安防设施', 'Z', null, null);
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('Z040', '服务设施', 'Z', null, null);
INSERT INTO `dim_ems_facs_subcategory` (`code`, `name`, `parent_code`, `desc`, `version`) VALUES ('Z999', '其他设施', 'Z', null, null);


-- ----------------------------
-- 能源设备工艺标识维表
-- ----------------------------
drop table if exists dim_ems_dev_process;
create table dim_ems_dev_process (
  `id`               bigint(20)      not null auto_increment    comment '序号',
  `ps_code`          varchar(16)     not null                   comment '工艺代码',
  `ps_name`          varchar(64)     not null                   comment '工艺名称',
  `desc`             varchar(128)    default null               comment '工艺系统说明',
  `category_code`    varchar(8)      default null               comment '设施分类代码',
  `subcategory_code` varchar(8)      default null               comment '设施子类代码',
  `version`          varchar(64)     default null               comment '数据版本',
  primary key (`id`),
  unique key ux_ems_facs_facs_process(`ps_code`)
) engine=innodb auto_increment=1 comment = '能源设施工艺系统维表';

-- 能源设备工艺标识维表初始数据
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('T', '变压器', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AA', '高压配电柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AH', '高压开关柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AJ', '高压电容柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AM', '高压计量柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AP', '低压配电柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AL', '低压照明配电柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('APE', '应急电力配电柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('ALE', '应急照明配电柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AF', '低压负荷开关柜', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('ACC', '低压电容补偿柜', null, 'W', 'W2', null);

INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('SM', '智能表', '智能表', 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('QF', '断路器', '空开', 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('QR', '漏电保护器', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('QS', '隔离开关', null, 'W', 'W2', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('AC-EVSE', '交流充电桩', null, 'Z', 'Z040', null);
INSERT INTO `dim_ems_dev_process` (`ps_code`, `ps_name`, `desc`, `category_code`, `subcategory_code`, `version`) VALUES ('DC-EVSE', '直流充电桩', null, 'Z', 'Z040', null);

-- ----------------------------
-- 标签分类
-- ----------------------------
drop table if exists dim_ems_tag;
create table dim_ems_tag (
  `id`            bigint(20)      not null auto_increment    comment '序号',
  `tag_model`     varchar(128)    not null                   comment '标签模型',
  `tag_code`      varchar(64)     not null                   comment '标签代码',
  `tag_name`      varchar(128)    not null                   comment '标签名称',
  `mod_flag`      int             not null                   comment '修改标记',
  `tag_color`     varchar(64)     default null               comment '标签颜色',
  primary key (`id`),
  unique key ux_ems_tag(`tag_code`)
) engine=innodb auto_increment=1 comment = '标签分类';

INSERT INTO dim_ems_tag (`tag_model`, `tag_code`, `tag_name`, `mod_flag`, `tag_color`) VALUES ('Area', 'Area_01', '商户区域', 0, 'rgba(255, 120, 0, 1)');
INSERT INTO dim_ems_tag (`tag_model`, `tag_code`, `tag_name`, `mod_flag`, `tag_color`) VALUES ('MeterDev', 'MeterDev_Gt_45', '公摊电表', 0, 'rgba(255, 120, 0, 1)');
INSERT INTO dim_ems_tag (`tag_model`, `tag_code`, `tag_name`, `mod_flag`, `tag_color`) VALUES ('MeterDev', 'MeterDev_Gt_70', '公摊水表', 0, 'rgba(255, 120, 0, 1)');

-- ----------------------------
-- 电价计量分类
-- ----------------------------
drop table if exists dim_ems_elecprice_type;
create table dim_ems_elecprice_type (
  `id`            bigint(20)      not null auto_increment    comment '序号',
  `code`          int             not null                   comment '分类类型',
  `name`          varchar(16)     not null                   comment '分类名称',
   primary key (`id`),
   unique key ux_elecprice_type_code(`code`)
) engine=innodb auto_increment=1 comment = '电价计量分类';

INSERT INTO `dim_ems_elecprice_type` (`code`, `name`) VALUES ('1', '居民生活用电');
INSERT INTO `dim_ems_elecprice_type` (`code`, `name`) VALUES ('2', '农业用电');
INSERT INTO `dim_ems_elecprice_type` (`code`, `name`) VALUES ('3', '单一制');
INSERT INTO `dim_ems_elecprice_type` (`code`, `name`) VALUES ('4', '两部制');


-- ----------------------------
-- 能源折标准煤维表
-- ----------------------------
drop table if exists dim_ems_discount_scoal;
create table dim_ems_discount_scoal (
  `id`                  bigint(20)      not null auto_increment    comment '序号',
  `energy_code`         varchar(8)      not null                   comment '能源代码',
  `energy_name`         varchar(16)     default null               comment '能源名称',
  `coefficient_value`   double          default null               comment '系数值',
  `coefficient_unit`    varchar(16)     default null               comment '系数单位',
  primary key (`id`),
  unique key ux_ems_discount_scoal(`energy_code`)
) engine=innodb auto_increment=1 comment = '能源折标准煤维表';

INSERT INTO `dim_ems_discount_scoal` (`energy_code`, `energy_name`, `coefficient_value`, `coefficient_unit`) VALUES ('10', '原煤', 0.7143, 'kgce/kg');
INSERT INTO `dim_ems_discount_scoal` (`energy_code`, `energy_name`, `coefficient_value`, `coefficient_unit`) VALUES ('300301', '汽油', 1.4714, 'kgce/kg');
INSERT INTO `dim_ems_discount_scoal` (`energy_code`, `energy_name`, `coefficient_value`, `coefficient_unit`) VALUES ('25', '天然气', 1.33, 'kgce/㎡');
INSERT INTO `dim_ems_discount_scoal` (`energy_code`, `energy_name`, `coefficient_value`, `coefficient_unit`) VALUES ('45', '电能', 0.1229, 'kgce/kW·h');
INSERT INTO `dim_ems_discount_scoal` (`energy_code`, `energy_name`, `coefficient_value`, `coefficient_unit`) VALUES ('70', '新水', 0.7143, 'kgce/kg');

-- ----------------------------
-- 排放因子维表
-- ----------------------------
drop table if exists dim_ems_emission_factor;
create table dim_ems_emission_factor (
  `id`            bigint(20)      not null auto_increment    comment '序号',
  `region_code`   varchar(8)      not null                   comment '地区码',
  `region_name`   varchar(16)     not null                   comment '地区名称',
  `region_type`   int             not null                   comment '地区类型 0：国家，1：地区，2：省份，3：城市',
  `factor_value`  double          default null               comment '因子值 单位: kgCO2/kWh',
  `factor_type`   int             default null               comment '1：电力平均二氧化碳排放因子 2：电力平均二氧化碳排放因子（不含市场化交易的非化石能源电量）3：化石能源电力二氧化碳排放因子,',
  `version`       varchar(64)     default null               comment '数据版本',
  primary key (`id`),
  unique key ux_ems_emission_factor(`region_code`,`region_type`,`factor_type`)
) engine=innodb auto_increment=1 comment = '排放因子维表';

-- 排放因子初始数据
INSERT INTO `dim_ems_emission_factor` (`region_code`, `region_name`, `region_type`, `factor_value`, `factor_type`, `version`) VALUES ('CN', '中国', '0', '0.5366', '1', '2022');

-- ----------------------------
-- 植物碳汇维表
-- ----------------------------
drop table if exists dim_plant_carbon_sink;
create table dim_plant_carbon_sink (
    `id`                bigint(20)      not null auto_increment    comment '序号',
    `plant_method`      varchar(128)    not null                   comment '种植方式',
    `carbon_quantity`   double          not null                   comment '固碳量 kgC02/m2',
    `version`           varchar(64)     default null               comment '数据版本',
    primary key (`id`)
) engine=innodb auto_increment=1 comment = '植物碳汇维表';

-- 植物碳汇维表初始数据
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (1, '大小乔木、灌木、花草密植混种区（乔木平均种植间距）<3.0m，土壤深度>1.0m', '27.5', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (2, '大小乔木密植混种区（平均种植间距）<3.0m，土壤深度>0.9m', '22.5', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (3, '落叶大乔木（土壤深度>1.0m）', '20.2', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (4, '落叶小乔木、针叶木或疏叶性乔木（土壤深度>1.0m）', '14.3', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (5, '小棕榈类（土壤深度>1.0m）', '10.25', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (6, '密植灌木丛（高约1.3m，土壤深度>0.5m）', '10.95', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (7, '密植灌木丛（高约0.9m，土壤深度>0.5m）', '8.15', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (8, '密植灌木丛（高约0.45m，土壤深度>0.5m）', '5.13', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (9, '多年生蔓藤（以立体攀附面积计算，土壤深度>0.5m）', '2.58', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (10, '高草花花圃或高茎野草地（高约1.0m，土壤深度>0.3m）', '1.15', '江苏2023');
INSERT INTO `dim_plant_carbon_sink` (`id`, `plant_method`, `carbon_quantity`, `version`) VALUES (11, '一年生蔓藤、低草花花圃或低茎野草地（高约0.25m，土壤深度>0.3m）', '0.34', '江苏2023');


-- ----------------------------
-- 行政区划表
-- ----------------------------
DROP TABLE IF EXISTS `dim_gb_region`;
CREATE TABLE `dim_gb_region` (
  `adcode` varchar(8) NOT NULL COMMENT '地区编码',
  `name` varchar(64) NOT NULL COMMENT '地区名称',
  `area_type` int(8) DEFAULT NULL COMMENT '1:省，2:直辖市/省会，3：地级市，4：区县/县级市',
  `parent_area` varchar(8) DEFAULT NULL COMMENT '父级地区编码',
  `parent_area_name` varchar(64) DEFAULT NULL COMMENT '父级地区名称',
  PRIMARY KEY (`adcode`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='行政区编码表（GB_T 2260）';


-- ----------------------------
-- 区域对象表
-- ----------------------------
drop table if exists adm_area;
create table adm_area (
  `id`             bigint(20)      not null auto_increment    comment '序号',
  `area_code`      varchar(32)     not null                   comment '区域代码',
  `parent_code`    varchar(32)     default null               comment '上级区域代码',
  `ancestors`      varchar(1024)   default null               comment '祖籍列表',
  `area_name`      varchar(64)     not null                   comment '区域名称',
  `short_name`     varchar(32)     default null               comment '区域简称',
  `desc`           varchar(128)    default null               comment '区域描述',
  `order_num`      int             default null               comment '显示顺序',
  `status`         int             default null               comment '区域状态',
  primary key (`id`),
  unique key ux_area_code(`area_code`)
) engine=innodb auto_increment=1 comment = '区域对象表';


-- ----------------------------
-- 区域对象属性表
-- ----------------------------
drop table if exists adm_area_attr;
create table adm_area_attr (
  `id`             bigint(20)      not null auto_increment    comment '序号',
  `area_code`      varchar(32)     not null                   comment '区域代码',
  `attr_org`       varchar(64)     default null               comment '所有单位',
  `mgr_org`        varchar(64)     default null               comment '管理单位',
  `leader`         varchar(64)     default null               comment '负责人',
  `phone`          varchar(64)     default null               comment '联系电话',
  `open_date`      date            default null               comment '开通时间',
  `floor_area`     double          default null               comment '建筑面积（平方米 m²）',
  `usable_area`    double          default null               comment '使用面积（平方米 m²）',
  `floor`          int             default null               comment '楼层',
  `longitude`      double          default null               comment '经度',
  `latitude`       double          default null               comment '纬度',
  primary key (`id`),
  unique key ux_area_attr_code(`area_code`)
) engine=innodb auto_increment=1 comment = '区域对象属性表';


-- ----------------------------
-- 区域植物配置表
-- ----------------------------
drop table if exists adm_area_plant_rel;
create table adm_area_plant_rel (
    `area_code`                varchar(32)     not null    comment '区域代码',
    `plant_size`               double          not null    comment '种植区域面积m²',
    `carbon_sink_id`           bigint          not null    comment '固碳配置id',
    primary key (`area_code`, `carbon_sink_id`)
) engine=innodb auto_increment=1 comment = '区域植物配置表';


-- ----------------------------
-- 日期属性表
-- ----------------------------
DROP TABLE IF EXISTS `adm_date_attr`;
CREATE TABLE `adm_date_attr` (
  `date`        date NOT NULL COMMENT '日期',
  `week`        INT NOT NULL COMMENT '星期几',
  `week_cn`     VARCHAR(16) NOT NULL COMMENT '星期几(中文)',
  `type`        VARCHAR(64) NOT NULL COMMENT '日期类型',
  `date_name`   VARCHAR(64) NOT NULL COMMENT '日期名称',
  PRIMARY KEY (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日期属性表';


-- ----------------------------
-- 天气状况分类与代码表
-- ----------------------------
DROP TABLE IF EXISTS `dim_ga_weather`;
CREATE TABLE `dim_ga_weather` (
  `key`        varchar(8)  NOT NULL COMMENT '代码',
  `value`      varchar(64)  NOT NULL COMMENT '名称',
  `desc`       varchar(256)  DEFAULT NULL COMMENT '说明',
  PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='天气状况代码表';

INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('1000', '天空状况', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('1100', '云量', '天空中云遮蔽的量');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('1101', '晴', '天空无云，或有零星云层，天空云量小于天空面积的1/10');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('1103', '多云', '天空有4~7成的中、低云或6~10成的高云');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('1106', '阴天', '天空阴暗，密布云层，或天空虽有云隙而仍感到阴暗（总云量8成以上），偶尔从云缝中可见到微弱阳光');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2000', '降水现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2100', '雨', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2101', '小雨', '日降雨量不足10mm');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2102', '中雨', '日降雨总量为10.0mm ~ 24.9mm');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2103', '大雨', '日降雨总量为25.0mm ~ 49.9mm');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2104', '暴雨', '日降雨总量在50.0mm以上');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2111', '阵雨', '开始和停止都比较突然、强度变化大的液态降水');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2121', '雷阵雨', '开始和停止都比较突然、强度变化大的液态降水，并伴有雷暴或闪电现象');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2131', '冬雨', '由过冷水滴组成的，与温度低于0℃的物体');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2200', '雪', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2201', '小雪', '降雪融化成水相当0.1mm ~ 2.4mm降水量');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2202', '中雪', '降雪融化成水相当2.5mm ~ 4.9mm降水量');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2203', '大雪', '降雪融化成水相当5.0mm ~ 9.9mm降水量');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2204', '暴雪', '降雪融化成水相当10mm降水量以上');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2211', '雨夹雪', '半融化的雪（湿雪）或雨和雪同时下降');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2300', '冰雹', '坚硬的球状、锥状或形状不规则的固态降水');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('2900', '其他降水现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('3000', '水汽凝结现象', '云除外');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('3100', '露', '空气中水汽在地面及近地面物体上凝结而成的水珠');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('3200', '霜冻', '空气中水汽在地面和近地面物体上凝华而成的白色松脆的冰晶，或由露冻结而成的水珠');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('3900', '其他水气凝结现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4000', '视程障碍现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4100', '雾', '悬浮在贴近地面的大气中的大量微细水滴（或冰晶）的可见集合体');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4101', '轻雾', '能见度在1km ~ 10km，又称霭');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4102', '大雾', '能见度在1km以下');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4103', '浓雾', '能见度在500m以下');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4200', '霾', '空气中的灰尘、硫酸、硝酸、有机碳氢化合物等粒子非水成物组成的气溶胶系统造成的视程障碍，如果水平能见度小于10km时称为霾或灰霾');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4300', '沙尘', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4301', '浮尘', '尘沙浮游在空中，使水平能见度小于10km');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4302', '扬沙', '风将地面尘、沙吹起，使空气相当浑浊水平能见度在1km ~ 10km');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4303', '沙尘暴', '强风将地面尘、沙吹起，使空气相当浑浊水平能见度小于1km');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4304', '强沙尘暴','大风将地面尘、沙吹起，使空气相当浑浊水平能见度小于500m');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4305', '特强沙尘暴', '狂风将地面尘、沙吹起，使空气相当浑浊水平能见度小于50m');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('4900', '其他视程障碍现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('5000', '雷电现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('5100', '雷电', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('5101', '雷暴', '积雨云云中、云间或云地之间产生的放电现象。表现为闪电兼有雷声，有时亦可只闻雷声而不见闪电');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('5105', '闪电', '积雨云云中、云间或云地之间产生放电时伴随的电光，但不闻雷声');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('5900', '其他雷电现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9000', '其他天气现象', null);
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9100', '风', '风力等级为薄福风力等级');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9101', '1级（软风）', '烟稍斜，风速0.3m/s ~ 1.5m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9102', '2级（轻风）', '感觉有风树叶响，风速1.6m/s ~ 3.3m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9103', '3级（微风）', '旌旗展开树枝摇晃，风速3.4m/s ~ 5.4m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9104', '4级（和风）', '吹起尘土，风速 5.5m/s ~ 7.9m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9105', '5级（清劲风）', '小树摇摆水起波，风速8.0m/s ~ 10.7m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9106', '6级（强风）', '电线有声大树摇，风中撑伞难行，风速10.8m/s~13.8m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9107', '7级（疾风）', '逆风步行困难，风速13.9m/s ~ 17.1m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9108', '8级（大风）', '折毁树枝，迎风差点走不动，风速17.2m/s ~ 20.7m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9109', '9级（烈风）', '小损房屋，风速20.8m/s ~ 24.4m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9110', '10级（狂风）', '拔起树木，风速24.5m/s ~ 28.4m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9111', '11级（暴风）', '水面波峰全呈飞沫，风速28.5m/s ~ 32.6m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9112', '12级（飓风、台风）', '水面波浪滔天，风速 32.7m/s ~ 36.9m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9113', '13级', '风速37.0m/s ~ 41.4m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9114', '14级', '风速41.5m/s ~ 46.1m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9115', '15级', '风速46.2m/s ~ 50.9m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9116', '16级', '风速51.0m/s ~ 56.0m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9117', '17级', '风速56.1m/s ~ 61.2m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9191', '0级（无风）', '静，烟直上，风速0.0m/s ~ 0.2m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9192', '1-6级', '适用于笼统描述1级（含1级）到6级（不含6级）之间的风');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9193', '6-12级', '适用于笼统描述6级（含6级）到12级（不含12级）之间的风');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9194', '12-17级', '适用于笼统描述12级（含12级）到17级（不含17级）之间的风');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9201', '飑', '风向突变，风速剧增的天气现象');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9301', '龙卷', '一种小范围强烈旋风，风速一般为50m/s ~ 150m/s');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9401', '积雪', '雪覆盖地面达到观测点四周能见面积一半以上');
INSERT INTO `dim_ga_weather` (`key`, `value`, `desc`) VALUES ('9501', '结冰', '露天水冻结成冰');


-- ----------------------------
-- 区域天气实况表
-- ----------------------------
DROP TABLE IF EXISTS `adm_area_weather_rt`;
CREATE TABLE `adm_area_weather_rt` (
  `adcode`          varchar(16)  NOT NULL COMMENT '行政区划编码',
  `area_name`       varchar(32)  NOT NULL COMMENT '区域名称',
  `date`            date         NOT NULL COMMENT '日期',
  `weather_type`    varchar(8)   NOT NULL COMMENT '天气代码',
  `weather_cn`      varchar(128) DEFAULT NULL COMMENT '天气描述',
  `temperature`     double       DEFAULT NULL COMMENT '温度',
  `humidity`        int          DEFAULT NULL COMMENT '湿度',
  `wind_power`      varchar(8)   DEFAULT NULL COMMENT '风力级别',
  `wind_direction`  varchar(64)  DEFAULT NULL COMMENT '风向',
  `report_time`     timestamp    DEFAULT NULL COMMENT '数据时间',
  `create_time`     timestamp    DEFAULT NULL COMMENT '采集时间',
  PRIMARY KEY (`adcode`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域天气实况';


-- ----------------------------
-- 区域天气预报
-- ----------------------------
DROP TABLE IF EXISTS `adm_area_weather_forecast`;
CREATE TABLE `adm_area_weather_forecast` (
  `adcode`              varchar(16)    NOT NULL COMMENT '行政区划编码',
  `area_name`           varchar(32)    NOT NULL COMMENT '区域名称',
  `date`                date           NOT NULL COMMENT '日期',
  `day_weather_type`    varchar(8)     DEFAULT NULL COMMENT '日间天气代码',
  `day_weather_cn`      varchar(128)   DEFAULT NULL COMMENT '日间天气描述',
  `night_weather_type`  varchar(8)     DEFAULT NULL COMMENT '夜间天气代码',
  `night_weather_cn`    varchar(128)   DEFAULT NULL COMMENT '夜间天气描述',
  `day_temp`            double         DEFAULT NULL COMMENT '日间气温',
  `night_temp`          double         DEFAULT NULL COMMENT '夜间气温',
  `day_wind_power`      varchar(8)     DEFAULT NULL COMMENT '日间风力',
  `night_wind_power`    varchar(8)     DEFAULT NULL COMMENT '夜间风力',
  `day_wind_dir`        varchar(64)    DEFAULT NULL COMMENT '日间风向',
  `night_wind_dir`      varchar(64)    DEFAULT NULL COMMENT '夜间风向',
  `report_time`     timestamp          DEFAULT NULL COMMENT '数据时间',
  `create_time`     timestamp          DEFAULT NULL COMMENT '采集时间',
  PRIMARY KEY (`adcode`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域天气预报';


-- ----------------------------
-- 定时任务调度表
-- ----------------------------
drop table if exists sys_job;
create table sys_job (
    job_id              bigint(20)    not null auto_increment    comment '任务ID',
    job_name            varchar(64)   default ''                 comment '任务名称',
    job_group           varchar(64)   default 'DEFAULT'          comment '任务组名',
    invoke_target       varchar(500)  not null                   comment '调用目标字符串',
    cron_expression     varchar(255)  default ''                 comment 'cron执行表达式',
    misfire_policy      varchar(20)   default '3'                comment '计划执行错误策略（1立即执行 2执行一次 3放弃执行）',
    concurrent          char(1)       default '1'                comment '是否并发执行（0允许 1禁止）',
    status              char(1)       default '0'                comment '状态（0正常 1暂停）',
    create_by           varchar(64)   default ''                 comment '创建者',
    create_time         datetime                                 comment '创建时间',
    update_by           varchar(64)   default ''                 comment '更新者',
    update_time         datetime                                 comment '更新时间',
    remark              varchar(500)  default ''                 comment '备注信息',
    primary key (job_id, job_name, job_group)
) engine=innodb auto_increment=100 comment = '定时任务调度表';


-- ----------------------------
-- 能源设施表
-- ----------------------------
drop table if exists adm_ems_facs;
create table adm_ems_facs  (
  `id`                bigint(20)      not null auto_increment      comment '序号',
  `facs_code`         varchar(16)     not null                     comment '设施代码',
  `facs_name`         varchar(32)     not null                     comment '设施名称',
  `facs_category`     varchar(32)     not null                     comment '设施分类',
  `facs_subcategory`  varchar(32)     not null                     comment '设施子类',
  `enable`            int             default '0'                  comment '启用状态0-停用，1-启用',
  `ref_area`          varchar(32)     not null                     comment '归属区域代码',
  `create_time`       datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  `update_time`       datetime        default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  unique key ux_ems_facs_code(`facs_code`)
) engine=innodb auto_increment=1 comment = '能源设施表';


-- ----------------------------
-- 能源设备表
-- ----------------------------
drop table if exists adm_ems_device;
create table adm_ems_device  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `device_code`     varchar(64)     not null                     comment '设备代码',
  `device_name`     varchar(32)     not null                     comment '设备名称',
  `device_brand`    varchar(128)    default null                 comment '设备品牌',
  `device_spec`     varchar(128)    default null                 comment '设备型号',
  `device_status`   int             default null                 comment '设备状态',
  `location`        varchar(200)    default null                 comment '安装位置',
  `location_ref`    varchar(64)     default null                 comment '安装位置关联区域',
  `area_code`       varchar(32)     default null                 comment '归属地块代码',
  `device_model`    varchar(32)     default null                 comment '设备模型',
  `ref_facs`        varchar(64)     default null                 comment '归属设施代码',
  `ps_code`         varchar(16)     default null                 comment '工艺标识',
  `subsystem_code`  varchar(16)     default null                 comment '子系统名称',
  `create_time`     datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  `update_time`     datetime        default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  unique key ux_device_code(`device_code`),
  index idx_device_code (device_code)
) engine=innodb auto_increment=1 comment = '能源设备表';


-- ----------------------------
-- 计量设备表
-- ----------------------------
drop table if exists adm_meter_device;
create table adm_meter_device  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `device_code`     varchar(32)     not null                     comment '设备代码',
  `device_model`    varchar(32)     not null                     comment '设备模型',
  `area_code`       varchar(32)     default null                 comment '区域代码',
  `device_name`     varchar(64)     default null                 comment '设备别名',
  `device_enable`   int             not null                     comment '设备启用0：未启用，1：启用',
  `location_ref`    varchar(64)     default null                 comment '归属子区',
  `location`        varchar(128)    default null                 comment '安装位置',
  `meter_cls`       int             not null                     comment '计量类别25-天然气 45-电 70-水',
  `col_cycle`       int             default null                 comment '采集周期',
  `col_mode`        int             default null                 comment '采集方式',
  `magnification`   int             default 1                    comment '倍率',
  `spec_desc`       varchar(128)    default null                 comment '规格描述',
  primary key (`id`),
  unique key ux_meter_device(`device_model`,`device_code`)
) engine=innodb auto_increment=1 comment = '计量设备表';


-- ----------------------------
-- 计量设备绑定边界对象关系表
-- ----------------------------
drop table if exists adm_meter_boundary_rel;
create table adm_meter_boundary_rel  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `obj_type`        int             not null                     comment '对象类型 1-区域，2-设施',
  `boundary_obj`    varchar(64)     not null                     comment '边界对象',
  `meter_cls`       int             not null                     comment '计量介质',
  `meter_device`    varchar(64)     not null                     comment '计量设备',
  primary key (`id`),
  unique key ux_meter_device(`obj_type`,`boundary_obj`,`meter_cls`,`meter_device`)
) engine=innodb auto_increment=1 comment = '计量设备绑定边界对象关系表';


-- ----------------------------
-- 能源对象模型表
-- ----------------------------
drop table if exists adm_ems_obj_model;
create table adm_ems_obj_model  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `model_code`      varchar(64)     not null                     comment '模型code',
  `model_name`      varchar(128)    not null                     comment '模型名称',
  `obj_type`        int             not null                     comment '对象类型',
  `ability_handler` varchar(2048)   default null                 comment '能力处理handler',
  `event_handler`   varchar(2048)   default null                 comment '事件处理handler',
  primary key (`id`),
  unique key ux_ems_obj_attr(`model_code`)
) engine=innodb auto_increment=1 comment = '能源对象模型表';


-- 对象模型初始数据
# INSERT INTO `adm_ems_obj_model` (`model_code`, `model_name`, `obj_type`, `ability_handler`, `event_handler`) VALUES ('M_W2_T', '变压器设备模型', 2, null, null);
# INSERT INTO `adm_ems_obj_model` (`model_code`, `model_name`, `obj_type`, `ability_handler`, `event_handler`) VALUES ('M_W2_AP', '配电柜模型', 2, null, null);
# INSERT INTO `adm_ems_obj_model` (`model_code`, `model_name`, `obj_type`, `ability_handler`, `event_handler`) VALUES ('M_W2_QR', '漏电保护器模型', 2, null, null);
# INSERT INTO `adm_ems_obj_model` (`model_code`, `model_name`, `obj_type`, `ability_handler`, `event_handler`) VALUES ('M_W2_QF', '断路器模型', 2, null, null);


-- ----------------------------
-- 能源对象属性表
-- ----------------------------
drop table if exists adm_ems_obj_attr;
create table adm_ems_obj_attr  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `model_code`      varchar(64)     not null                     comment '模型code',
  `attr_group`      varchar(128)    not null                     comment '属性分组',
  `attr_key`        varchar(128)    not null                     comment '属性标识',
  `attr_name`       varchar(256)    default null                 comment '属性名称',
  `attr_unit`       text            default null                 comment '属性单位',
  `attr_value_type` varchar(32)     default null                 comment '属性单位值类型',
  primary key (`id`),
  unique key ux_ems_obj_attr(`model_code`, `attr_key`)
) engine=innodb auto_increment=1 comment = '能源对象属性表';


-- ----------------------------
-- 能源对象属性值表
-- ----------------------------
drop table if exists adm_ems_obj_attr_enum;
create table adm_ems_obj_attr_enum  (
  `id`               bigint(20)      not null auto_increment      comment '序号',
  `model_code`       varchar(64)     not null                     comment '模型code',
  `attr_key`         varchar(128)    not null                     comment '属性标识',
  `attr_value`       varchar(32)     not null                     comment '属性枚举值',
  `attr_value_name`  varchar(32)     default null                 comment '属性枚举值描述',
  primary key (`id`),
  unique key ux_ems_obj_attr_value(`model_code`, `attr_key`, `attr_value`)
) engine=innodb auto_increment=1 comment = '能源对象属性枚举表';


-- ----------------------------
-- 能源对象属性值表
-- ----------------------------
drop table if exists adm_ems_obj_attr_value;
create table adm_ems_obj_attr_value  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `obj_code`        varchar(64)     not null                     comment '对象代码',
  `model_code`      varchar(64)     not null                     comment '模型code',
  `attr_key`        varchar(128)    not null                     comment '属性标识',
  `attr_value`      text            default null                 comment '属性值',
  `update_time`     datetime        default CURRENT_TIMESTAMP    ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  unique key ux_ems_obj_attr_value(`obj_code`, `model_code`, `attr_key`)
) engine=innodb auto_increment=1 comment = '能源对象属性值表';


-- ----------------------------
-- 能源对象能力表
-- ----------------------------
drop table if exists adm_ems_obj_ability;
create table adm_ems_obj_ability  (
  `id`                 bigint(20)      not null auto_increment      comment '序号',
  `model_code`         varchar(64)     not null                     comment '模型code',
  `ability_key`        varchar(128)    not null                     comment '能力键',
  `ability_name`       varchar(256)    default null                 comment '能力名称',
  `ability_desc`       varchar(1024)   default null                 comment '能力描述',
  `param_definition`   text            default null                 comment '参数定义',
  `hidden_flag`        int             default 0                    comment '隐藏标记',
  primary key (`id`),
  unique key ux_ems_obj_ability(`model_code`, `ability_key`)
) engine=innodb auto_increment=1 comment = '能源对象能力表';


-- ----------------------------
-- 能源对象能力调用日志表
-- ----------------------------
drop table if exists adm_ems_obj_ability_call_log;
create table adm_ems_obj_ability_call_log  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `obj_code`        varchar(64)     not null                     comment '对象代码',
  `model_code`      varchar(64)     not null                     comment '模型code',
  `ability_key`     varchar(128)    not null                     comment '能力键',
  `call_time`       datetime        not null                     comment '调用时间',
  `call_payload`    text            default null                 comment '调用参数',
  `call_status`     int             not null                     comment '调用状态',
  `res_time`        datetime        default null                 comment '响应时间',
  `res_payload`     mediumtext      default null                 comment '响应内容',
  primary key (`id`),
  INDEX idx_covering (model_code,call_time,obj_code,ability_key,call_status, id)
) engine=innodb auto_increment=1 comment = '能源对象能力调用日志表';


-- ----------------------------
-- 能源设施事件表
-- ----------------------------
drop table if exists adm_ems_obj_event;
create table adm_ems_obj_event  (
  `id`              bigint(20)      not null auto_increment      comment '序号',
  `model_code`      varchar(64)     not null                     comment '模型code',
  `event_key`       varchar(128)    not null                     comment '事件名称',
  `event_type`      int             not null                     comment '事件类型',
  `event_name`      varchar(256)    default null                 comment '事件名称',
  `event_desc`      varchar(1024)   default null                 comment '事件名称',
  `event_code`      varchar(128)    default null                 comment '事件代码',
  `ext_event_code`  varchar(128)    default null                 comment '外系统事件代码',
  primary key (`id`),
  unique key ux_ems_obj_event(`model_code`, `event_key`)
) engine=innodb auto_increment=1 comment = '能源对象事件表';


-- ----------------------------
-- 能源对象能力事件日志表
-- ----------------------------
drop table if exists adm_ems_obj_event_log;
create table adm_ems_obj_event_log  (
    `id`              bigint(20)      not null auto_increment      comment '序号',
    `obj_code`        varchar(64)     not null                     comment '对象代码',
    `model_code`      varchar(64)     not null                     comment '模型code',
    `event_key`       varchar(128)    not null                     comment '事件标识',
    `event_time`      datetime        not null                     comment '事件时间',
    `event_detail`    text            default null                 comment '事件详情',
    primary key (`id`),
    key i_obj_event_log(`obj_code`, `event_time`, `event_key`)
) engine=innodb auto_increment=1 comment = '能源对象事件日志表';


-- ----------------------------
-- 能源子系统表
-- ----------------------------
drop table if exists adm_ems_subsystem;
create table adm_ems_subsystem  (
  `id`                 bigint(20)      not null auto_increment      comment '序号',
  `system_code`        varchar(16)     not null                     comment '系统代码',
  `system_name`        varchar(32)     not null                     comment '系统名称',
  `short_name`         varchar(16)     default null                 comment '系统简称',
  `model_code`         varchar(64)     not null                     comment '模型code',
  `man_facturer`       varchar(64)     default null                 comment '厂商',
  `contact_person`     varchar(32)     default null                 comment '联系人',
  `contact_number`     varchar(128)    default null                 comment '联系电话',
  `maintainer_person`  varchar(32)     default null                 comment '维护人',
  `maintainer_number`  varchar(128)    default null                 comment '维护电话',
  `descr`              varchar(1024)   default null                 comment '备注说明',
  primary key (`id`),
  unique key ux_ems_subsystem_code(`system_code`)
) engine=innodb auto_increment=1 comment = '能源子系统表';


-- ----------------------------
-- 能源设施能流关系表
-- ----------------------------
DROP TABLE IF EXISTS adm_ems_flow_rel;
CREATE TABLE adm_ems_flow_rel  (
    `id`                BIGINT(20)      NOT NULL AUTO_INCREMENT      COMMENT '序号',
    `export_obj`        VARCHAR(64)     NOT NULL                     COMMENT '能源输出对象代码',
    `export_obj_name`   VARCHAR(128)    DEFAULT NULL                 COMMENT '能源输出对象名称',
    `export_obj_type`   INT             NOT NULL                     COMMENT '能源输出对象类型 1-设施 2-设备',
    `input_obj`         VARCHAR(64)     NOT NULL                     COMMENT '能源流入对象代码',
    `input_obj_name`    VARCHAR(128)    DEFAULT NULL                 COMMENT '能源流入对象名称',
    `input_obj_type`    INT             NOT NULL                     COMMENT '能源输入对象类型 1-设施 2-设备',
    `ems_cls`           VARCHAR(16)     NOT NULL                     COMMENT '能源流动介质代码',
    `ems_cls_name`      VARCHAR(64)     DEFAULT NULL                 COMMENT '能源流动介质名称',
    `flow_desc`         VARCHAR(256)    DEFAULT NULL                 COMMENT '能流描述',
    `flow_capacity`     DECIMAL(10,2)   DEFAULT NULL                 COMMENT '流动容量/功率',
    `flow_unit`         VARCHAR(16)     DEFAULT NULL                 COMMENT '容量单位',
    `area_code`         VARCHAR(32)     DEFAULT NULL                 COMMENT '所属区域代码',
    `enable_status`     INT             DEFAULT 1                    COMMENT '启用状态 0-禁用 1-启用',
    `create_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP    COMMENT '创建时间',
    `update_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_flow_rel` (`export_obj`, `export_obj_type`, `input_obj`, `input_obj_type`, `ems_cls`),
    KEY `idx_export_obj` (`export_obj`, `export_obj_type`),
    KEY `idx_input_obj` (`input_obj`, `input_obj_type`),
    KEY `idx_area_code` (`area_code`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='能源流动关系表';


-- ----------------------------
-- 能源策略表
-- ----------------------------
drop table if exists adm_op_energy_strategy;
CREATE TABLE adm_op_energy_strategy (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `area_code` VARCHAR(32) NOT NULL COMMENT '地块代码',
  `strategy_code` VARCHAR(64) NOT NULL COMMENT '策略代码',
  `strategy_name` VARCHAR(64) NOT NULL COMMENT '策略名称',
  `scene_type` VARCHAR(32) DEFAULT NULL COMMENT '场景类型：PV_ESS-源网协调，DEMAND_RESP-源荷互动，PEAK_VALLEY-网储互动，EMERGENCY-应急保供，ENERGY_SAVE-节能优化',
  `strategy_category` VARCHAR(32) DEFAULT NULL COMMENT '策略分类：AUTO-自动，MANUAL-手动，SCHEDULE-定时，EVENT-事件',
  `trigger_type` INT DEFAULT NULL COMMENT '触发类型：1-事件触发，2-定时触发，3-手动触发，4-条件触发',
  `trigger_config` TEXT DEFAULT NULL COMMENT '触发配置（JSON）',
  `strategy_state` INT DEFAULT 0 COMMENT '策略状态：0-停用，1-启用，2-调试',
  `priority` INT DEFAULT 50 COMMENT '优先级：0-100，数值越大优先级越高',
  `strategy_desc` VARCHAR(256) DEFAULT NULL COMMENT '策略描述',
  `exec_mode` INT DEFAULT NULL COMMENT '执行模式：1-串行，2-并行，99-手动',
  `timeout` INT DEFAULT 300 COMMENT '超时时间（秒）',
  `retry_times` INT DEFAULT 0 COMMENT '失败重试次数',
  `last_exec_time` DATETIME DEFAULT NULL COMMENT '最后执行时间',
  `last_exec_result` INT DEFAULT NULL COMMENT '最后执行结果：0-成功，1-失败',
  `exec_count` INT DEFAULT 0 COMMENT '执行次数',
  `success_count` INT DEFAULT 0 COMMENT '成功次数',
  `fail_count` INT DEFAULT 0 COMMENT '失败次数',
  `version` INT DEFAULT 1 COMMENT '版本号',
  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_strategy_code` (`strategy_code`),
  KEY `idx_area_code` (`area_code`),
  KEY `idx_trigger_type` (`trigger_type`),
  KEY `idx_strategy_state` (`strategy_state`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='能源策略表';

-- ----------------------------
-- 能源策略模板表
-- ----------------------------
DROP TABLE IF EXISTS adm_op_energy_strategy_template;
CREATE TABLE adm_op_energy_strategy_template (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `template_code` VARCHAR(32) NOT NULL COMMENT '模板代码',
  `template_name` VARCHAR(64) NOT NULL COMMENT '模板名称',
  `scene_type` VARCHAR(32) NOT NULL COMMENT '场景类型',
  `description` VARCHAR(512) DEFAULT NULL COMMENT '模板描述',
  `template_data` LONGTEXT NOT NULL COMMENT '模板数据（JSON，包含触发器、步骤、上下文变量）',
  `icon` VARCHAR(64) DEFAULT NULL COMMENT '图标',
  `cover_image` VARCHAR(256) DEFAULT NULL COMMENT '封面图片',
  `tags` VARCHAR(256) DEFAULT NULL COMMENT '标签（逗号分隔）',
  `applicable_devices` VARCHAR(512) DEFAULT NULL COMMENT '适用设备类型（逗号分隔）',
  `sort_order` INT DEFAULT 0 COMMENT '排序',
  `use_count` INT DEFAULT 0 COMMENT '使用次数',
  `is_system` INT DEFAULT 0 COMMENT '是否系统预置：0-否，1-是',
  `is_public` INT DEFAULT 1 COMMENT '是否公开：0-否，1-是',
  `status` INT DEFAULT 1 COMMENT '状态：0-禁用，1-启用',
  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_template_code` (`template_code`),
  KEY `idx_scene_type` (`scene_type`),
  KEY `idx_is_system` (`is_system`),
  KEY `idx_status` (`status`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='策略模板表';

-- 策略预置模板
-- ----------------------------------------
INSERT INTO adm_op_energy_strategy_template
(template_code, template_name, scene_type, description, template_data, icon, tags, applicable_devices, sort_order, is_system, status)
VALUES
-- 光储联动模板
('TPL_PV_ESS_BASIC', '光储联动-基础模板', 'PV_ESS',
 '当光伏发电功率超过负荷需求时，自动将多余电量存入储能；当光伏发电不足时，从储能放电补充。',
 '{
   "triggers": [
     {"triggerType": "ATTR", "triggerName": "光伏功率变化", "sourceObjType": 2, "attrKey": "activePower", "conditionExpr": "{\"left\":\"activePower\",\"op\":\">\",\"right\":0}"}
   ],
   "steps": [
     {"stepType": "CONDITION", "stepName": "判断光伏功率", "stepIndex": 1, "conditionExpr": "{\"left\":\"pv.activePower\",\"op\":\">\",\"right\":\"load.activePower\"}"},
     {"stepType": "ABILITY", "stepName": "储能充电", "stepIndex": 2, "abilityKey": "charge", "paramSource": "CONTEXT"},
     {"stepType": "ABILITY", "stepName": "储能放电", "stepIndex": 3, "abilityKey": "discharge", "paramSource": "CONTEXT"}
   ],
   "context": [
     {"varKey": "pvPower", "varName": "光伏功率", "varType": "INPUT", "dataType": "NUMBER"},
     {"varKey": "loadPower", "varName": "负荷功率", "varType": "INPUT", "dataType": "NUMBER"},
     {"varKey": "essSoc", "varName": "储能SOC", "varType": "INPUT", "dataType": "NUMBER"}
   ]
 }',
 'el-icon-sunny', '光伏,储能,联动', 'PV,ESS', 1, 1, 1),

-- 削峰填谷模板
('TPL_PEAK_VALLEY', '削峰填谷-定时调度', 'PEAK_VALLEY',
 '根据电价时段自动调度储能充放电：低谷时段充电，高峰时段放电，实现电费优化。',
 '{
   "triggers": [
     {"triggerType": "TIME", "triggerName": "谷时充电", "conditionExpr": "{\"cron\":\"0 0 23 * * ?\"}"},
     {"triggerType": "TIME", "triggerName": "峰时放电", "conditionExpr": "{\"cron\":\"0 0 10 * * ?\"}"}
   ],
   "steps": [
     {"stepType": "CONDITION", "stepName": "检查SOC", "stepIndex": 1, "conditionExpr": "{\"left\":\"ess.soc\",\"op\":\"<\",\"right\":90}"},
     {"stepType": "ABILITY", "stepName": "储能充电", "stepIndex": 2, "abilityKey": "charge", "abilityParam": "{\"power\": 100}"},
     {"stepType": "DELAY", "stepName": "等待充电完成", "stepIndex": 3, "delaySeconds": 3600}
   ],
   "context": [
     {"varKey": "targetSoc", "varName": "目标SOC", "varType": "INPUT", "dataType": "NUMBER", "defaultValue": "90"},
     {"varKey": "chargePower", "varName": "充电功率", "varType": "INPUT", "dataType": "NUMBER", "defaultValue": "100"}
   ]
 }',
 'el-icon-data-analysis', '削峰填谷,电价优化,储能', 'ESS', 2, 1, 1),

-- 需求响应模板
('TPL_DEMAND_RESP', '需求响应-负荷控制', 'DEMAND_RESP',
 '当收到电网需求响应信号时，自动降低非关键负荷用电，并启动储能放电支撑。',
 '{
   "triggers": [
     {"triggerType": "EVENT", "triggerName": "需求响应信号", "sourceObjType": 3, "eventKey": "demandResponse"}
   ],
   "steps": [
     {"stepType": "PARALLEL", "stepName": "并行执行", "stepIndex": 1},
     {"stepType": "ABILITY", "stepName": "降低空调负荷", "stepIndex": 2, "parentStepCode": "STEP_1", "abilityKey": "setTemperature", "abilityParam": "{\"temp\": 26}"},
     {"stepType": "ABILITY", "stepName": "调暗照明", "stepIndex": 3, "parentStepCode": "STEP_1", "abilityKey": "dim", "abilityParam": "{\"level\": 60}"},
     {"stepType": "ABILITY", "stepName": "储能放电", "stepIndex": 4, "abilityKey": "discharge", "paramSource": "STATIC"}
   ],
   "context": [
     {"varKey": "responseLevel", "varName": "响应级别", "varType": "INPUT", "dataType": "NUMBER"},
     {"varKey": "duration", "varName": "响应时长", "varType": "INPUT", "dataType": "NUMBER"}
   ]
 }',
 'el-icon-s-marketing', '需求响应,负荷控制,电网互动', 'ESS,HVAC,LIGHT', 3, 1, 1),

-- 应急保供模板
('TPL_EMERGENCY', '应急保供-电网故障切换', 'EMERGENCY',
 '当检测到电网故障时，自动切换到储能供电模式，保障关键负荷持续运行。',
 '{
   "triggers": [
     {"triggerType": "EVENT", "triggerName": "电网故障", "sourceObjType": 2, "eventKey": "gridFault"}
   ],
   "steps": [
     {"stepType": "ABILITY", "stepName": "切断非关键负荷", "stepIndex": 1, "abilityKey": "disconnect"},
     {"stepType": "DELAY", "stepName": "等待切换", "stepIndex": 2, "delaySeconds": 2},
     {"stepType": "ABILITY", "stepName": "启动储能放电", "stepIndex": 3, "abilityKey": "discharge", "abilityParam": "{\"mode\": \"island\"}"},
     {"stepType": "ABILITY", "stepName": "发送告警通知", "stepIndex": 4, "abilityKey": "sendAlert"}
   ],
   "context": [
     {"varKey": "gridStatus", "varName": "电网状态", "varType": "INPUT", "dataType": "STRING"},
     {"varKey": "essAvailable", "varName": "储能可用", "varType": "INPUT", "dataType": "BOOLEAN"}
   ]
 }',
 'el-icon-warning-outline', '应急,故障切换,保供', 'ESS,GRID', 4, 1, 1),

-- 节能优化模板
('TPL_ENERGY_SAVE', '节能优化-智能照明', 'ENERGY_SAVE',
 '根据环境光照和人员存在情况，自动调节照明亮度，实现节能优化。',
 '{
   "triggers": [
     {"triggerType": "ATTR", "triggerName": "光照变化", "sourceObjType": 2, "attrKey": "illuminance"},
     {"triggerType": "ATTR", "triggerName": "人员检测", "sourceObjType": 2, "attrKey": "occupancy"}
   ],
   "steps": [
     {"stepType": "CONDITION", "stepName": "检查人员存在", "stepIndex": 1, "conditionExpr": "{\"left\":\"sensor.occupancy\",\"op\":\"==\",\"right\":true}"},
     {"stepType": "CONDITION", "stepName": "检查光照不足", "stepIndex": 2, "conditionExpr": "{\"left\":\"sensor.illuminance\",\"op\":\"<\",\"right\":300}"},
     {"stepType": "ABILITY", "stepName": "开启照明", "stepIndex": 3, "abilityKey": "setLevel", "abilityParam": "{\"level\": 80}"}
   ],
   "context": [
     {"varKey": "targetIlluminance", "varName": "目标照度", "varType": "INPUT", "dataType": "NUMBER", "defaultValue": "500"}
   ]
 }',
 'el-icon-odometer', '节能,照明,智能控制', 'LIGHT,SENSOR', 5, 1, 1);

-- ----------------------------
-- 策略触发条件表
-- ----------------------------
drop table if exists adm_op_energy_strategy_trigger;
CREATE TABLE adm_op_energy_strategy_trigger (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `strategy_code` VARCHAR(64) NOT NULL COMMENT '策略代码',
  `trigger_name` VARCHAR(64) NOT NULL COMMENT '触发器名称',
  `trigger_type` VARCHAR(32) NOT NULL COMMENT '触发类型：EVENT-事件，ATTR-属性变化，TIME-时间，CONDITION-条件',
  `source_obj_type` INT DEFAULT NULL COMMENT '源对象类型：2-设备，3-系统',
  `source_obj_code` VARCHAR(64) DEFAULT NULL COMMENT '源对象代码',
  `source_model_code` VARCHAR(64) DEFAULT NULL COMMENT '源对象模型代码',
  `event_key` VARCHAR(128) DEFAULT NULL COMMENT '事件标识',
  `attr_key` VARCHAR(128) DEFAULT NULL COMMENT '属性标识',
  `condition_expr` TEXT DEFAULT NULL COMMENT '条件表达式（JSON）',
  `enable` INT DEFAULT 1 COMMENT '是否启用',
  `priority` INT DEFAULT 50 COMMENT '优先级',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_strategy_code` (`strategy_code`),
  KEY `idx_source_obj` (`source_obj_code`),
  KEY `idx_event_key` (`event_key`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='策略触发条件表';


-- ----------------------------
-- 能源策略参数表
-- ----------------------------
drop table if exists adm_op_energy_strategy_param;
create table adm_op_energy_strategy_param  (
  `id`                  bigint(20)      not null auto_increment      comment '序号',
  `strategy_code`       varchar(64)     not null                     comment '策略代码',
  `param_group`         varchar(128)    not null                     comment '策略分组',
  `param_key`           varchar(128)    not null                     comment '参数键值',
  `param_name`          varchar(256)    not null                     comment '参数名称',
  `param_value`         varchar(1024)   default null                 comment '参数值',
  `param_value_format`  varchar(128)    default null                 comment '参数值格式',
  `edit_enable`         int             default 0                    comment '可编辑',
  primary key (`id`),
  unique key ux_op_energy_strategy_param(`strategy_code`, `param_group`, `param_key`)
) engine=innodb auto_increment=1 comment = '能源策略参数表';


-- ----------------------------
-- 能源策略步骤
-- ----------------------------
drop table if exists adm_op_energy_strategy_step;
CREATE TABLE adm_op_energy_strategy_step (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `strategy_code` VARCHAR(64) NOT NULL COMMENT '策略代码',
  `step_code` VARCHAR(32) NOT NULL COMMENT '步骤代码',
  `step_name` VARCHAR(64) NOT NULL COMMENT '步骤名称',
  `step_type` VARCHAR(32) NOT NULL COMMENT '步骤类型：ABILITY-能力调用，DELAY-延时，CONDITION-条件判断，PARALLEL-并行，LOOP-循环',
  `step_index` INT NOT NULL COMMENT '步骤顺序',
  `parent_step_code` VARCHAR(32) DEFAULT NULL COMMENT '父步骤代码（用于嵌套）',
  `condition_expr` TEXT DEFAULT NULL COMMENT '执行条件（JSON表达式）',
  `target_obj_type` INT DEFAULT NULL COMMENT '目标对象类型：2-设备，3-系统',
  `target_obj_code` VARCHAR(64) DEFAULT NULL COMMENT '目标对象代码',
  `target_model_code` VARCHAR(64) DEFAULT NULL COMMENT '目标模型代码',
  `ability_key` VARCHAR(128) DEFAULT NULL COMMENT '能力标识',
  `ability_param` TEXT DEFAULT NULL COMMENT '能力参数（JSON）',
  `param_source` VARCHAR(32) DEFAULT 'STATIC' COMMENT '参数来源：STATIC-静态，CONTEXT-上下文，ATTR-属性值',
  `param_mapping` TEXT DEFAULT NULL COMMENT '参数映射配置（JSON）',
  `delay_seconds` INT DEFAULT 0 COMMENT '延时秒数',
  `retry_on_fail` INT DEFAULT 0 COMMENT '失败是否重试',
  `retry_times` INT DEFAULT 0 COMMENT '重试次数',
  `retry_interval` INT DEFAULT 5 COMMENT '重试间隔（秒）',
  `continue_on_fail` INT DEFAULT 0 COMMENT '失败是否继续',
  `timeout` INT DEFAULT 60 COMMENT '超时时间（秒）',
  `enable` INT DEFAULT 1 COMMENT '是否启用',
  `remark` VARCHAR(256) DEFAULT NULL COMMENT '备注',
  `loop_max_count` INT DEFAULT 0 COMMENT '最大循环次数(0=无限循环)',
  `loop_interval` INT DEFAULT 1000 COMMENT '循环间隔(毫秒)',
  `loop_condition` TEXT DEFAULT NULL COMMENT '循环跳出条件表达式',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_strategy_step` (`strategy_code`, `step_code`),
  KEY `idx_step_index` (`strategy_code`, `step_index`),
  KEY `idx_parent_step` (`parent_step_code`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='能源策略步骤表';

-- ----------------------------
-- 策略执行日志表
-- ----------------------------
drop table if exists adm_op_energy_strategy_exec_log;
CREATE TABLE adm_op_energy_strategy_exec_log (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `strategy_code` VARCHAR(64) NOT NULL COMMENT '策略代码',
  `exec_id` VARCHAR(64) NOT NULL COMMENT '执行ID（UUID）',
  `trigger_type` VARCHAR(32) DEFAULT NULL COMMENT '触发类型',
  `trigger_source` VARCHAR(128) DEFAULT NULL COMMENT '触发源',
  `exec_status` INT NOT NULL COMMENT '执行状态：0-执行中，1-成功，2-失败，3-超时',
  `start_time` DATETIME NOT NULL COMMENT '开始时间',
  `end_time` DATETIME DEFAULT NULL COMMENT '结束时间',
  `duration` INT DEFAULT NULL COMMENT '执行时长（毫秒）',
  `context_data` TEXT DEFAULT NULL COMMENT '执行上下文（JSON）',
  `result_data` TEXT DEFAULT NULL COMMENT '执行结果（JSON）',
  `error_message` TEXT DEFAULT NULL COMMENT '错误信息',
  `exec_by` VARCHAR(64) DEFAULT NULL COMMENT '执行人',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_exec_id` (`exec_id`),
  KEY `idx_strategy_code` (`strategy_code`),
  KEY `idx_start_time` (`start_time`),
  KEY `idx_exec_status` (`exec_status`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='策略执行日志表';


-- ----------------------------
-- 策略步骤执行日志表
-- ----------------------------
drop table if exists adm_op_energy_strategy_step_log;
CREATE TABLE adm_op_energy_strategy_step_log (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `exec_id` VARCHAR(64) NOT NULL COMMENT '策略执行ID',
  `strategy_code` VARCHAR(64) NOT NULL COMMENT '策略代码',
  `step_code` VARCHAR(32) NOT NULL COMMENT '步骤代码',
  `step_name` VARCHAR(64) NOT NULL COMMENT '步骤名称',
  `step_index` INT NOT NULL COMMENT '步骤顺序',
  `exec_status` INT NOT NULL COMMENT '执行状态：0-执行中，1-成功，2-失败，3-跳过',
  `start_time` DATETIME NOT NULL COMMENT '开始时间',
  `end_time` DATETIME DEFAULT NULL COMMENT '结束时间',
  `duration` INT DEFAULT NULL COMMENT '执行时长（毫秒）',
  `input_param` TEXT DEFAULT NULL COMMENT '输入参数',
  `output_result` TEXT DEFAULT NULL COMMENT '输出结果',
  `error_message` TEXT DEFAULT NULL COMMENT '错误信息',
  `retry_count` INT DEFAULT 0 COMMENT '重试次数',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_exec_id` (`exec_id`),
  KEY `idx_strategy_step` (`strategy_code`, `step_code`)
) ENGINE=INNODB AUTO_INCREMENT=1 COMMENT='策略步骤执行日志表';

-- ----------------------------
-- 碳核算账户配置表
-- ----------------------------
drop table if exists adm_ems_carbon_account_cfg;
create table adm_ems_carbon_account_cfg  (
  `id`                  bigint(20)      not null auto_increment      comment '序号',
  `cfg_code`            varchar(128)    not null                     comment '配置代码',
  `definition`          varchar(32)     not null                     comment '定义',
  `emission_activity`   varchar(32)     not null                     comment '排放活动',
  `emission_source`     varchar(32)     not null                     comment '排放源',
  `gas_category`        varchar(128)    not null                     comment '气体类别',
  `factor_value`        double          default null                 comment '排放因子',
  `create_time`         datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  `update_time`         datetime        default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`)
) engine=innodb auto_increment=1 comment = '碳核算账户配置表';

INSERT INTO `adm_ems_carbon_account_cfg` (`cfg_code`, `definition`, `emission_activity`, `emission_source`, `gas_category`, `factor_value`) VALUES ('direct.gas.statCombustion', '直接温室气体排放', '固定源化石燃料燃烧排放', '柴油发电机', 'CO₂', null);
INSERT INTO `adm_ems_carbon_account_cfg` (`cfg_code`, `definition`, `emission_activity`, `emission_source`, `gas_category`, `factor_value`) VALUES ('direct.gas.movCombustion', '直接温室气体排放', '移动源化石燃料燃烧排放', '柴油发电机', 'CH₄,N₂O', null);
INSERT INTO `adm_ems_carbon_account_cfg` (`cfg_code`, `definition`, `emission_activity`, `emission_source`, `gas_category`, `factor_value`) VALUES ('indirect.gas.electricity', '间接温室气体排放', '外购电力生产消耗排放', '外购电力使用', 'CO₂', null);


-- 1. 巡检计划表（支持手动/自动巡检）
DROP TABLE IF EXISTS adm_op_inspection_plan;
CREATE TABLE adm_op_inspection_plan (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '序号',
    `area_code`         varchar(32)     NOT NULL                   COMMENT '归属区域代码',
    `plan_code`         varchar(64)     NOT NULL                   COMMENT '计划代码',
    `plan_name`         varchar(64)     NOT NULL                   COMMENT '计划名称',
    `plan_type`         tinyint         NOT NULL DEFAULT 1         COMMENT '计划类型 1:手动巡检 2:自动巡检',
    `plan_status`       tinyint         NOT NULL DEFAULT 0         COMMENT '计划状态 0:待执行 1:执行中 2:已完成 3:已取消',
    `target_type`       tinyint         NOT NULL                   COMMENT '巡检目标类型 0:区域 1:设施 2:设备',
    `target_codes`      text            DEFAULT NULL               COMMENT '巡检目标代码(JSON数组)',
    `target_names`      varchar(512)    DEFAULT NULL               COMMENT '巡检目标名称(逗号分隔,用于展示)',
    `cron_expression`   varchar(64)     DEFAULT NULL               COMMENT 'Cron表达式(自动巡检用)',
    `schedule_enabled`  tinyint         DEFAULT 0                  COMMENT '是否启用调度 0:禁用 1:启用',
    `last_exec_time`    datetime        DEFAULT NULL               COMMENT '上次执行时间',
    `next_exec_time`    datetime        DEFAULT NULL               COMMENT '下次执行时间',
    `exec_count`        int             DEFAULT 0                  COMMENT '累计执行次数',
    `plan_time`         datetime        DEFAULT NULL               COMMENT '计划执行时间',
    `executor`          varchar(32)     DEFAULT NULL               COMMENT '执行人(手动巡检)',
    `description`       varchar(256)    DEFAULT NULL               COMMENT '计划描述',
    `create_by`         varchar(64)     DEFAULT NULL               COMMENT '创建者',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    `update_by`         varchar(64)     DEFAULT NULL               COMMENT '更新者',
    `update_time`       datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_plan_code` (`plan_code`),
    KEY `idx_area_code` (`area_code`),
    KEY `idx_plan_status` (`plan_status`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='巡检计划表';

-- 2. 巡检规则表（自动巡检的检查规则配置）
DROP TABLE IF EXISTS adm_op_inspection_rule;
CREATE TABLE adm_op_inspection_rule (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '序号',
    `plan_code`         varchar(64)     NOT NULL                   COMMENT '计划代码',
    `rule_code`         varchar(64)     NOT NULL                   COMMENT '规则代码',
    `rule_name`         varchar(64)     NOT NULL                   COMMENT '规则名称',
    `device_model`      varchar(64)     DEFAULT NULL               COMMENT '设备模型代码(可选,不填则应用于所有设备)',
    `attr_key`          varchar(128)    NOT NULL                   COMMENT '属性标识',
    `attr_name`         varchar(256)    DEFAULT NULL               COMMENT '属性名称',
    `check_type`        tinyint         NOT NULL DEFAULT 1         COMMENT '检查类型 1:范围检查 2:等值检查 3:非空检查 4:在线状态',
    `min_value`         varchar(64)     DEFAULT NULL               COMMENT '最小值(范围检查用)',
    `max_value`         varchar(64)     DEFAULT NULL               COMMENT '最大值(范围检查用)',
    `expect_value`      varchar(64)     DEFAULT NULL               COMMENT '期望值(等值检查用)',
    `rule_order`        int             DEFAULT 0                  COMMENT '规则顺序',
    `enabled`           tinyint         DEFAULT 1                  COMMENT '是否启用 0:禁用 1:启用',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    `update_time`       datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_rule_code` (`rule_code`),
    KEY `idx_plan_code` (`plan_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='巡检规则表';

-- 3. 巡检报告表
DROP TABLE IF EXISTS adm_op_inspection_report;
CREATE TABLE adm_op_inspection_report (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '序号',
    `report_code`       varchar(64)     NOT NULL                   COMMENT '报告代码',
    `plan_code`         varchar(64)     NOT NULL                   COMMENT '计划代码',
    `plan_name`         varchar(64)     DEFAULT NULL               COMMENT '计划名称',
    `plan_type`         tinyint         DEFAULT NULL               COMMENT '计划类型 1:手动巡检 2:自动巡检',
    `area_code`         varchar(32)     DEFAULT NULL               COMMENT '归属区域代码',
    `area_name`         varchar(64)     DEFAULT NULL               COMMENT '归属区域名称',
    `target_type`       tinyint         DEFAULT NULL               COMMENT '巡检目标类型',
    `execute_time`      datetime        DEFAULT NULL               COMMENT '执行时间',
    `finish_time`       datetime        DEFAULT NULL               COMMENT '完成时间',
    `executor`          varchar(32)     DEFAULT NULL               COMMENT '执行人',
    `result_status`     tinyint         NOT NULL DEFAULT 0         COMMENT '结果状态 0:正常 1:异常 2:部分异常',
    `total_count`       int             DEFAULT 0                  COMMENT '检查总数',
    `normal_count`      int             DEFAULT 0                  COMMENT '正常数量',
    `abnormal_count`    int             DEFAULT 0                  COMMENT '异常数量',
    `result_summary`    text            DEFAULT NULL               COMMENT '结果摘要(JSON)',
    `manual_remark`     text            DEFAULT NULL               COMMENT '手动备注(富文本,手动巡检用)',
    `create_by`         varchar(64)     DEFAULT NULL               COMMENT '创建人',
    `update_by`         varchar(64)     DEFAULT NULL               COMMENT '修改人',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    `update_time`       datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_report_code` (`report_code`),
    KEY `idx_plan_code` (`plan_code`),
    KEY `idx_execute_time` (`execute_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='巡检报告表';

-- 4. 巡检报告明细表（记录每个设备的检查结果）
DROP TABLE IF EXISTS adm_op_inspection_report_detail;
CREATE TABLE adm_op_inspection_report_detail (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '序号',
    `report_code`       varchar(64)     NOT NULL                   COMMENT '报告代码',
    `device_code`       varchar(64)     NOT NULL                   COMMENT '设备代码',
    `device_name`       varchar(64)     DEFAULT NULL               COMMENT '设备名称',
    `device_model`      varchar(64)     DEFAULT NULL               COMMENT '设备模型',
    `device_model_name` varchar(128)    DEFAULT NULL               COMMENT '设备模型名称',
    `location`          varchar(200)    DEFAULT NULL               COMMENT '设备位置',
    `area_path`         varchar(512)    DEFAULT NULL               COMMENT '区域路径',
    `result_status`     tinyint         NOT NULL DEFAULT 0         COMMENT '结果状态 0:正常 1:异常',
    `check_items`       text            DEFAULT NULL               COMMENT '检查项结果(JSON数组)',
    `check_time`        datetime        DEFAULT NULL               COMMENT '检查时间',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `idx_report_code` (`report_code`),
    KEY `idx_device_code` (`device_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='巡检报告明细表';


-- ----------------------------
-- 1. 告警规则表（核心配置表，可被巡检复用）
-- ----------------------------
DROP TABLE IF EXISTS adm_op_alarm_rule;
CREATE TABLE adm_op_alarm_rule (
    `id`                BIGINT(20)      NOT NULL AUTO_INCREMENT  COMMENT '序号',
    `rule_code`         VARCHAR(64)     NOT NULL                 COMMENT '规则代码',
    `rule_name`         VARCHAR(128)    NOT NULL                 COMMENT '规则名称',
    `area_code`         VARCHAR(32)     DEFAULT NULL             COMMENT '适用区域代码(空则全局)',
    `target_type`       TINYINT         NOT NULL DEFAULT 2       COMMENT '目标类型 0:区域 1:设施 2:设备',
    `target_scope`      VARCHAR(1024)   DEFAULT NULL             COMMENT '目标范围(JSON数组,指定设备/设施代码,空则该类型全部)',
    `device_model`      VARCHAR(64)     DEFAULT NULL             COMMENT '设备模型代码(空则不限)',
    `attr_key`          VARCHAR(128)    NOT NULL                 COMMENT '监测属性标识',
    `attr_name`         VARCHAR(256)    DEFAULT NULL             COMMENT '属性名称',
    `check_type`        TINYINT         NOT NULL DEFAULT 1       COMMENT '检查类型 1:范围 2:等值 3:非空 4:在线状态 5:变化率',
    `operator`          VARCHAR(16)     DEFAULT NULL             COMMENT '比较操作符 GT/GE/LT/LE/EQ/NE/RANGE/IN',
    `threshold_value`   VARCHAR(128)    DEFAULT NULL             COMMENT '阈值(单值或JSON)',
    `threshold_min`     VARCHAR(64)     DEFAULT NULL             COMMENT '最小阈值(范围检查)',
    `threshold_max`     VARCHAR(64)     DEFAULT NULL             COMMENT '最大阈值(范围检查)',
    `alarm_level`       TINYINT         NOT NULL DEFAULT 1       COMMENT '告警级别 1:一般 2:重要 3:紧急',
    `alarm_code`        VARCHAR(64)     DEFAULT NULL             COMMENT '告警代码(用于分类)',
    `alarm_msg_template` VARCHAR(512)   DEFAULT NULL             COMMENT '告警消息模板(支持变量替换)',
    `recovery_check`    TINYINT         DEFAULT 1                COMMENT '是否检查恢复 0:否 1:是',
    `recovery_threshold` VARCHAR(128)   DEFAULT NULL             COMMENT '恢复阈值(可与告警阈值不同,形成迟滞)',
    `trigger_count`     INT             DEFAULT 1                COMMENT '触发次数(连续N次满足才告警)',
    `trigger_interval`  INT             DEFAULT 0                COMMENT '触发间隔(秒,防抖)',
    `cool_down`         INT             DEFAULT 300              COMMENT '冷却时间(秒,同一规则同一对象)',
    `enabled`           TINYINT         DEFAULT 1                COMMENT '是否启用 0:禁用 1:启用',
    `use_for_inspection` TINYINT        DEFAULT 1                COMMENT '是否用于巡检 0:否 1:是',
    `use_for_realtime`  TINYINT         DEFAULT 1                COMMENT '是否用于实时监测 0:否 1:是',
    `subsystem_code`    VARCHAR(32)     DEFAULT NULL             COMMENT '所属子系统代码',
    `rule_order`        INT             DEFAULT 0                COMMENT '规则优先级(数值小优先)',
    `description`       VARCHAR(512)    DEFAULT NULL             COMMENT '规则描述',
    `create_by`         VARCHAR(64)     DEFAULT NULL             COMMENT '创建者',
    `create_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by`         VARCHAR(64)     DEFAULT NULL             COMMENT '更新者',
    `update_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_rule_code` (`rule_code`),
    KEY `idx_device_model` (`device_model`),
    KEY `idx_area_code` (`area_code`),
    KEY `idx_enabled` (`enabled`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='告警规则表';

-- ----------------------------
-- 2. 告警记录表（重构后）
-- ----------------------------
DROP TABLE IF EXISTS adm_op_alarm;
CREATE TABLE adm_op_alarm (
    `id`                BIGINT(20)      NOT NULL AUTO_INCREMENT  COMMENT '序号',
    `alarm_id`          VARCHAR(64)     NOT NULL                 COMMENT '告警唯一标识',
    `area_code`         VARCHAR(32)     NOT NULL                 COMMENT '区域代码',
    `subsystem_code`    VARCHAR(32)     DEFAULT NULL             COMMENT '子系统代码',
    `target_type`       TINYINT         NOT NULL                 COMMENT '目标类型 0:区域 1:设施 2:设备',
    `target_code`       VARCHAR(64)     NOT NULL                 COMMENT '目标代码',
    `target_name`       VARCHAR(128)    DEFAULT NULL             COMMENT '目标名称',
    `device_model`      VARCHAR(64)     DEFAULT NULL             COMMENT '设备模型',
    `device_model_name` VARCHAR(128)    DEFAULT NULL             COMMENT '设备模型名称',
    `location`          VARCHAR(256)    DEFAULT NULL             COMMENT '位置信息',
    `rule_code`         VARCHAR(64)     DEFAULT NULL             COMMENT '触发规则代码',
    `rule_name`         VARCHAR(128)    DEFAULT NULL             COMMENT '触发规则名称',
    `attr_key`          VARCHAR(128)    DEFAULT NULL             COMMENT '告警属性',
    `attr_name`         VARCHAR(256)    DEFAULT NULL             COMMENT '属性名称',
    `attr_value`        VARCHAR(256)    DEFAULT NULL             COMMENT '告警时属性值',
    `threshold_value`   VARCHAR(128)    DEFAULT NULL             COMMENT '阈值',
    `alarm_level`       TINYINT         NOT NULL DEFAULT 1       COMMENT '告警级别 1:一般 2:重要 3:紧急',
    `alarm_code`        VARCHAR(64)     DEFAULT NULL             COMMENT '告警代码',
    `alarm_msg`         VARCHAR(512)    DEFAULT NULL             COMMENT '告警消息',
    `alarm_source`      TINYINT         DEFAULT 1                COMMENT '告警来源 1:实时监测 2:自动巡检 3:手动上报',
    `source_ref`        VARCHAR(64)     DEFAULT NULL             COMMENT '来源关联(如巡检报告代码)',
    `alarm_time`        DATETIME        NOT NULL                 COMMENT '告警时间',
    `alarm_date`        DATE            NOT NULL                 COMMENT '告警日期(便于分区和查询)',
    `alarm_status`      TINYINT         NOT NULL DEFAULT 0       COMMENT '告警状态 0:活动 1:已确认 2:处置中 3:已解决 4:已关闭 5:已恢复',
    `confirm_time`      DATETIME        DEFAULT NULL             COMMENT '确认时间',
    `confirm_by`        VARCHAR(64)     DEFAULT NULL             COMMENT '确认人',
    `resolve_time`      DATETIME        DEFAULT NULL             COMMENT '解决时间',
    `resolve_by`        VARCHAR(64)     DEFAULT NULL             COMMENT '解决人',
    `resolve_remark`    VARCHAR(512)    DEFAULT NULL             COMMENT '解决备注',
    `recovery_time`     DATETIME        DEFAULT NULL             COMMENT '自动恢复时间',
    `duration`          INT             DEFAULT NULL             COMMENT '持续时长(秒)',
    `repeat_count`      INT             DEFAULT 1                COMMENT '重复次数(聚合)',
    `last_occur_time`   DATETIME        DEFAULT NULL             COMMENT '最后发生时间',
    `is_notified`       TINYINT         DEFAULT 0                COMMENT '是否已通知 0:否 1:是',
    `notify_time`       DATETIME        DEFAULT NULL             COMMENT '通知时间',
    `create_by`         VARCHAR(64)     DEFAULT NULL             COMMENT '创建者',
    `create_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by`         VARCHAR(64)     DEFAULT NULL              COMMENT '更新者',
    `update_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `ux_alarm_id` (`alarm_id`),
    KEY `idx_alarm_date` (`alarm_date`),
    KEY `idx_alarm_time` (`alarm_time`),
    KEY `idx_area_code` (`area_code`),
    KEY `idx_target` (`target_type`, `target_code`),
    KEY `idx_status` (`alarm_status`),
    KEY `idx_level` (`alarm_level`),
    KEY `idx_rule_code` (`rule_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='告警记录表';

-- ----------------------------
-- 3. 告警处置记录表（完整追溯）
-- ----------------------------
DROP TABLE IF EXISTS adm_op_alarm_handle;
CREATE TABLE adm_op_alarm_handle (
    `id`                BIGINT(20)      NOT NULL AUTO_INCREMENT  COMMENT '序号',
    `alarm_id`          VARCHAR(64)     NOT NULL                 COMMENT '告警ID',
    `handle_type`       TINYINT         NOT NULL                 COMMENT '处置类型 1:确认 2:派单 3:处置 4:关闭 5:备注',
    `handle_content`    VARCHAR(1024)   DEFAULT NULL             COMMENT '处置内容',
    `handle_result`     VARCHAR(512)    DEFAULT NULL             COMMENT '处置结果',
    `handle_by`         VARCHAR(64)     NOT NULL                 COMMENT '处置人',
    `handle_time`       DATETIME        NOT NULL                 COMMENT '处置时间',
    `attachments`       VARCHAR(1024)   DEFAULT NULL             COMMENT '附件(JSON)',
    `create_time`       DATETIME        DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `idx_alarm_id` (`alarm_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='告警处置记录表';

-- ----------------------------
-- 设备台账表
-- ----------------------------
drop table if exists adm_ems_device_ledger;
create table adm_ems_device_ledger (
  `id`               bigint(20)      not null auto_increment      comment '序号',
  `record_code`      varchar(32)     not null                     comment '记录编号',
  `area_code`        varchar(32)     not null                     comment '园区代码',
  `obj_type`         int             not null                     comment '对象类型 2：设施 3：设备',
  `obj_code`         varchar(64)     not null                     comment '对象代码',
  `obj_name`         varchar(64)     default null                 comment '对象名称',
  `record_time`      timestamp       not null                     comment '日期 yyyy-MM-dd HH:mm:ss',
  `ins_location`     varchar(128)    default null                 comment '安装位置',
  `maintain_title`   varchar(128)    not null                     comment '维护标题',
  `maintain_content` text            default null                 comment '维护内容',
  `maintain_person`  varchar(32)     default null                 comment '维护人',
  `create_time`      datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  `update_time`      datetime        default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  key inx_ems_device_ledger(`record_code`)
) engine=innodb auto_increment=1 comment = '设备台账表';


-- ----------------------------
-- 对象&标签关系表
-- ----------------------------
drop table if exists adm_obj_tag_rel;
create table adm_obj_tag_rel (
  `tag_code`         varchar(64)     not null                     comment '标签代码',
  `obj_type`         int             not null                     comment '对象类型 1：区域，2：设施，3：设备',
  `obj_code`         varchar(64)     not null                     comment '对象代码',
  unique key inx_obj_tag_rel(`tag_code`, `obj_type`, `obj_code`)
) engine=innodb auto_increment=1 comment = '对象&标签关系表';


-- ----------------------------
-- 抄表记录表
-- ----------------------------
drop table if exists adm_meter_reading;
create table adm_meter_reading (
  `id`               bigint(20)      not null auto_increment      comment '序号',
  `device_code`      varchar(64)     not null                     comment '计量设备code',
  `area_code`        varchar(32)     not null                     comment '服务区代码',
  `year`             varchar(4)      not null                     comment '年份yyyy',
  `meter_month`      varchar(6)      not null                     comment '计量月yyyyMM',
  `last_reading`     int             default null                 comment '上次示数',
  `last_time`        date            default null                 comment '上次抄表日期',
  `meter_reading`    int             not null                     comment '抄表值',
  `meter_time`       date            not null                     comment '本次抄表日期',
  `increase`         int             not null                     comment '增量',
  `create_time`      datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  `update_time`      datetime        default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  key meter_reading_manual(`device_code`)
) engine=innodb auto_increment=1 comment = '抄表记录表';

-- ----------------------------
-- 服务区用电属性表
-- ----------------------------
drop table if exists adm_area_elec_attr;
create table adm_area_elec_attr (
  `id`                   bigint(20)      not null auto_increment       comment '序号',
  `area_code`            varchar(32)     not null                      comment '园区代码',
  `price_code`           varchar(16)     not null                      comment '价格编码',
  `req_capacity_flag`    int             default 0                     comment '容（需）量标识',
  `trans_capacity`       double          default null                  comment '变压器容量（千伏安·月）',
  `req_quantity`         double          default null                  comment '最大需量（千瓦·月）',
  `create_time`         datetime         default CURRENT_TIMESTAMP     comment '创建时间',
  `update_time`         datetime         default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  unique key ux_area_elec_attr(`area_code`)
) engine=innodb auto_increment=1 comment = '服务区用电属性表';


-- ----------------------------
-- 国网电价配置表
-- ----------------------------
drop table if exists adm_gw_elecprice_config;
create table adm_gw_elecprice_config (
  `id`                    bigint(20)      not null auto_increment      comment '序号',
  `cfg_code`              varchar(4)      not null                     comment '配置代码',
  `elec_type`             int             not null                     comment '用电分类 1-居民 2-农业 3-工业单一制 4-工业两部制',
  `voltage_level`         varchar(32)     not null                     comment '电压等级',
  `op_price`              double          not null                     comment '平时段电价',
  `cp_price`              double          default null                 comment '尖峰时段电价',
  `p_price`               double          default null                 comment '峰时段电价',
  `v_price`               double          default null                 comment '谷时段电价',
  `dv_price`              double          default null                 comment '深谷时段电价',
  `max_req_price`         double          default null                 comment '最大需量用电价格',
  `trans_capacity_price`  double          default null                 comment '变压器容量用电价格',
  primary key (`id`),
  unique key ux_gw_elecprice_config(`cfg_code`)
) engine=innodb auto_increment=1 comment = '电价配置表';


-- ----------------------------
-- 非电能源价格配置表
-- ----------------------------
drop table if exists adm_fd_energyprice_config;
create table adm_fd_energyprice_config (
  `id`                    bigint(20)      not null auto_increment      comment '序号',
  `cfg_code`              varchar(4)      not null                     comment '配置代码',
  `area_code`             varchar(32)     default null                 comment '园区代码',
  `meter_cls`             int             not null                     comment '计量介质',
  `unit_price`            double          not null                     comment '单位价格',
  `meter_unit`            varchar(32)     default null                 comment '计量单位',
  primary key (`id`),
  unique key ux_fd_energyprice_config(`cfg_code`)
) engine=innodb auto_increment=1 comment = '非电能源价格配置表';

-- ----------------------------
-- 光伏电价配置表
-- ----------------------------
drop table if exists adm_pv_elecprice_config;
create table adm_pv_elecprice_config (
  `id`                    bigint(20)      not null auto_increment      comment '序号',
  `cfg_code`              varchar(16)      not null                    comment '配置代码',
  `price_name`            varchar(32)     not null                     comment '价格名称',
  `obj_price`             double          default null                 comment '对象价格',
  `state_subsidy`         double          default null                 comment '国家补贴',
  `local_subsidy`         double          default null                 comment '地方补贴',
  primary key (`id`),
  unique key ux_pv_elecprice_config(`cfg_code`)
) engine=innodb auto_increment=1 comment = '光伏电价配置表';

INSERT INTO `adm_pv_elecprice_config` (`cfg_code`, `price_name`, `obj_price`, `state_subsidy`, `local_subsidy`) VALUES ('0000', '默认价格', 0.88, 0.42, 0.3);

-- ----------------------------
-- 电价策略表
-- ----------------------------
drop table if exists adm_elecprice_strategy;
create table adm_elecprice_strategy (
  `id`                   bigint(20)      not null auto_increment      comment '序号',
  `strategy_code`        varchar(32)     not null                     comment '策略代码',
  `strategy_name`        varchar(16)     not null                     comment '策略名称',
  `strategy_desc`        varchar(128)    default null                 comment '策略描述',
  `support_type`         varchar(128)    default null                 comment '支持小时电价类型',
  `exec_month`           varchar(128)    default null                 comment '执行月份',
  `exec_date_type`       int             default null                 comment '执行日期类型',
  `exec_date`            varchar(128)    default null                 comment '执行日期',
  `priority`             int             default 0                    comment '优先级',
  `edit_flag`            int             default 1                    comment '编辑标识',
  `create_time`          datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  `update_time`          datetime        default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
  primary key (`id`),
  unique key ux_elecprice_strategy(`strategy_code`)
) engine=innodb auto_increment=1 comment = '电价策略表';


-- ----------------------------
-- 电价策略小时表
-- ----------------------------
drop table if exists adm_elecprice_strategy_hour;
create table adm_elecprice_strategy_hour (
  `id`                   bigint(20)      not null auto_increment      comment '序号',
  `strategy_code`        varchar(16)     not null                     comment '策略代码',
  `start_time`           time            not null                     comment '开始时间',
  `end_time`             time            not null                     comment '结束时间',
  `type`                 int             not null                     comment '计量类型',
  primary key (`id`)
) engine=innodb auto_increment=1 comment = '电价策略小时表';


-- ----------------------------
-- 商户能源计费配置
-- ----------------------------
drop table if exists adm_co_charging_config;
create table adm_co_charging_config (
  `id`                    bigint(20)      not null auto_increment      comment '序号',
  `area_code`             varchar(32)     not null                     comment '服务区代码',
  `elec_unit_price`       double          not null                     comment '电计量单价 1度',
  `elec_gt_compute_type`  int             not null                     comment '电公摊计算类型',
  `elec_compute_desc`     varchar(200)    default null                 comment '电费计算说明',
  `water_unit_price`      double          not null                     comment '水计量单价 1吨',
  `water_gt_compute_type` int             not null                     comment '水公摊计算类型',
  `water_compute_desc`    varchar(200)    default null                 comment '水费计算说明',
  primary key (`id`),
  unique key ux_co_charging_config(`area_code`)
) engine=innodb auto_increment=1 comment = '商户能源计费配置';

-- ----------------------------
-- 电网供应计量表
-- ----------------------------
drop table if exists adm_ems_pg_supply_h;
create table adm_ems_pg_supply_h (
  `id`                 bigint(20)      not null auto_increment      comment '序号',
  `area_code`          varchar(32)     not null                     comment '园区代码',
  `facs_code`          varchar(16)     not null                     comment '设施代码',
  `record_time`        timestamp       not null                     comment '记录时间',
  `date`               date            not null                     comment '日期 yyyy-MM-dd',
  `time`               time            not null                     comment '时间 HH:mm:ss',
  `time_index`         int             not null                     comment '时间序列',
  `meter_type`         int             default null                 comment '计量类型 -1：低谷电 0：平峰电 1：高峰电 2：尖峰电',
  `meter_unit_price`   double          default null                 comment '单位电价（1度电）',
  `use_elec_quantity`  double          default null                 comment '用电量 单位：kW-h（千瓦时）',
  `use_elec_cost`      double          default null                 comment '用电电费 单位: ￥（元）',
  `create_time`        datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  primary key (`id`),
  unique key ux_ems_pg_supply_h(`area_code`, `facs_code`, `date`, `time`),
  key ix_ems_pg_supply_h_rt(`area_code`, `record_time`)
) engine=innodb auto_increment=1 comment = '电网供应计量表-小时';


-- ----------------------------
-- 光伏并网计量表
-- ----------------------------
drop table if exists adm_ems_pv_supply_h;
create table adm_ems_pv_supply_h (
  `id`                 bigint(20)      not null auto_increment      comment '序号',
  `area_code`          varchar(32)     not null                     comment '园区代码',
  `facs_code`          varchar(16)     not null                     comment '设施代码',
  `record_time`        timestamp       not null                     comment '记录时间',
  `date`               date            not null                     comment '日期 yyyy-MM-dd',
  `time`               time            not null                     comment '时间 HH:mm:ss',
  `time_index`         int             not null                     comment '时间序列',
  `up_unit_price`      double          default null                 comment '单位电价（1度电）',
  `gen_elec_quantity`  double          default null                 comment '发电量 单位：kW-h（千瓦时）',
  `use_elec_quantity`  double          default null                 comment '自用电量 单位：kW-h（千瓦时）',
  `up_elec_quantity`   double          default null                 comment '上网电量 单位：kW-h（千瓦时）',
  `up_elec_earn`       double          default null                 comment '上网收益 单位: ￥（元）',
  `create_time`        datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  primary key (`id`),
  unique key ux_ems_pg_supply_h(`area_code`, `facs_code`, `date`, `time`),
  key ix_ems_pv_supply_h_rt(`area_code`, `record_time`)
) engine=innodb auto_increment=1 comment = '光伏并网计量表光伏并网计量表-小时';


-- ----------------------------
-- 储能计量表
-- ----------------------------
drop table if exists adm_ems_elec_store_h;
create table adm_ems_elec_store_h (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `facs_code`                 varchar(16)     not null                     comment '设施代码',
  `record_time`               timestamp       not null                     comment '记录时间',
  `date`                      date            not null                     comment '日期 yyyy-MM-dd',
  `time`                      time            not null                     comment '时间 HH:mm:ss',
  `time_index`                int             not null                     comment '时间序列',
  `charge_elec_quantity`      double          default null                 comment '充电电量 单位：kW-h（千瓦时）',
  `discharge_elec_quantity`   double          default null                 comment '放电电量 单位：kW-h（千瓦时）',
  `create_time`               datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  primary key (`id`),
  unique key ux_ems_elec_store_h(`area_code`, `facs_code`, `date`, `time`),
  key ix_ems_elec_store_h_rt(`area_code`, `record_time`)
) engine=innodb auto_increment=1 comment = '储能计量表-小时';


-- ----------------------------
-- 用电计量表-小时
-- ----------------------------
drop table if exists adm_elec_meter_h;
create table adm_elec_meter_h (
  `id`                 bigint(20)      not null auto_increment      comment '序号',
  `area_code`          varchar(32)     not null                     comment '园区代码',
  `device_code`        varchar(16)     not null                     comment '计量设备',
  `record_time`        timestamp       not null                     comment '记录时间',
  `date`               date            not null                     comment '日期 yyyy-MM-dd',
  `time`               time            not null                     comment '时间 HH:mm:ss',
  `time_index`         int             not null                     comment '时间序列',
  `elec_quantity`      double          default null                 comment '用电量 单位：kW-h（千瓦时）',
  `meter_type`         int             default null                 comment '计量类型 -1：低谷电 0：平峰电 1：高峰电 2：尖峰电',
  `meter_unit_price`   double          default null                 comment '单位电价（1度电）',
  `use_elec_cost`      double          default null                 comment '小时电费',
  `meter_reading`      double          default null                 comment '抄表示数',
  `create_time`        datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  primary key (`id`),
  unique key ux_elec_meter_h(`device_code`, `record_time`),
  key idx_elec_meter_h_area_dev_date(`area_code`, `device_code`, `date`),
  key idx_elec_meter_h_date(`date`)
) engine=innodb auto_increment=1 comment = '用电计量表-小时';


-- ----------------------------
-- 用水计量表-小时
-- ----------------------------
drop table if exists adm_water_meter_h;
create table adm_water_meter_h (
  `id`                 bigint(20)      not null auto_increment      comment '序号',
  `area_code`          varchar(32)     not null                     comment '园区代码',
  `device_code`        varchar(16)     not null                     comment '计量设备',
  `record_time`        timestamp       not null                     comment '记录时间',
  `date`               date            not null                     comment '日期 yyyy-MM-dd',
  `time`               time            not null                     comment '时间 HH:mm:ss',
  `time_index`         int             not null                     comment '时间序列',
  `water_quantity`     double          default null                 comment '用水量 单位：t（吨）',
  `meter_unit_price`   double          default null                 comment '单位水价（1吨水）',
  `use_water_cost`     double          default null                 comment '小时水费',
  `meter_reading`      double          default null                 comment '抄表示数',
  `create_time`        datetime        default CURRENT_TIMESTAMP    comment '创建时间',
  primary key (`id`),
  unique key ux_water_meter_h(`device_code`, `record_time`),
  key idx_water_meter_h_area_dev_date(`area_code`, `device_code`, `date`),
  key idx_water_meter_h_date(`date`)
) engine=innodb auto_increment=1 comment = '用水计量表-小时';


-- ----------------------------
-- 电能计量日表
-- ----------------------------
drop table if exists adm_ems_elec_meter_d;
create table adm_ems_elec_meter_d (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `date`                      date            not null                     comment '日期 yyyy-MM-dd',
  `total_use_quantity`        double          default null                 comment '总用电量 单位：kW-h（千瓦时）',
  `pg_quantity`               double          default null                 comment '电网供应电量 单位：kW-h（千瓦时）',
  `pv_gen_quantity`           double          default null                 comment '光伏发电电量 单位：kW-h（千瓦时）',
  `pv_online_quantity`        double          default null                 comment '光伏上网电量 单位：kW-h（千瓦时）',
  `pv_oneself_quantity`       double          default null                 comment '光伏自用电量 单位：kW-h（千瓦时）',
  `pg_cost`                   double          default null                 comment '电网电量花费 单位：￥（元）',
  `pv_online_earn`            double          default null                 comment '光伏上网营收 单位：￥（元）',
  `pv_oneself_save_cost`      double          default null                 comment '光伏自用节省支出 单位：￥（元）',
  primary key (`id`),
  unique key ux_ems_elec_meter_d(`area_code`, `date`)
) engine=innodb auto_increment=1 comment = '电能计量日表';


-- ----------------------------
-- 节能计量日表
-- ----------------------------
drop table if exists adm_ems_eco_d;
create table adm_ems_eco_d (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `date`                      date            not null                     comment '日期 yyyy-MM-dd',
  `elec_eco_quantity`         double          default null                 comment '节电量 单位：kW-h（千瓦时）',
  `elec_eco_cost`             double          default null                 comment '节电金额 单位：元',
  `water_eco_quantity`        double          default null                 comment '节水量 单位：t（吨）',
  `water_eco_cost`            double          default null                 comment '节水金额 单位：元',
  primary key (`id`),
  unique key ux_ems_eco_d(`area_code`, `date`)
) engine=innodb auto_increment=1 comment = '节能计量日表';


-- ----------------------------
-- 碳计量日表
-- ----------------------------
drop table if exists adm_ems_ca_meter_d;
create table adm_ems_ca_meter_d (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `date`                      date            not null                     comment '日期 yyyy-MM-dd',
  `ca_emission_quantity`      double          default null                 comment '碳排放量 单位：单位：kg（千克）',
  `ca_sink_quantity`          double          default null                 comment '碳汇量 单位：单位：kg（千克）',
  primary key (`id`),
  unique key ux_ems_elec_meter_d(`area_code`, `date`)
) engine=innodb auto_increment=1 comment = '碳计量日表';

-- ----------------------------
-- 充电交易记录主表
-- ----------------------------
DROP TABLE IF EXISTS adm_charging_transaction;
CREATE TABLE adm_charging_transaction (
    `id`                  BIGINT(20)      NOT NULL AUTO_INCREMENT   COMMENT '序号',
    `transaction_no`      VARCHAR(32)     NOT NULL                  COMMENT '交易流水号(BCD 16字节)',
    `pile_code`           VARCHAR(16)     NOT NULL                  COMMENT '桩编码',
    `gun_no`              VARCHAR(4)      NOT NULL                  COMMENT '枪号',
    `device_code`         VARCHAR(64)     DEFAULT NULL              COMMENT '关联充电枪设备编码',
    `area_code`           VARCHAR(32)     DEFAULT NULL              COMMENT '归属区域代码',
    `start_time`          DATETIME        NOT NULL                  COMMENT '充电开始时间',
    `end_time`            DATETIME        NOT NULL                  COMMENT '充电结束时间',
    `charging_duration`   INT             DEFAULT NULL              COMMENT '充电时长(分钟)',
    `record_date`         DATE            NOT NULL                  COMMENT '记录日期(取结束时间的日期)',
    `meter_start`         DOUBLE          DEFAULT NULL              COMMENT '电表总起值(kWh, 4位小数)',
    `meter_end`           DOUBLE          DEFAULT NULL              COMMENT '电表总止值(kWh, 4位小数)',
    `total_energy`        DOUBLE          DEFAULT 0                 COMMENT '总电量(kWh)',
    `total_energy_loss`   DOUBLE          DEFAULT 0                 COMMENT '计损总电量(kWh)',
    `total_amount`        DOUBLE          DEFAULT 0                 COMMENT '总金额(元)',
    `vin`                 VARCHAR(17)     DEFAULT NULL              COMMENT 'VIN码(ASCII 17字节)',
    `transaction_type`    TINYINT         DEFAULT NULL              COMMENT '交易类型(1:APP 2:刷卡 4:离线卡 5:VIN)',
    `stop_reason`         VARCHAR(4)      DEFAULT NULL              COMMENT '停止原因代码(Hex)',
    `stop_reason_desc`    VARCHAR(128)    DEFAULT NULL              COMMENT '停止原因描述',
    `is_normal_stop`      TINYINT         DEFAULT 1                 COMMENT '是否正常结束(0:异常 1:正常)',
    `physical_card_no`    VARCHAR(32)     DEFAULT NULL              COMMENT '物理卡号',
    `include_in_ems`      TINYINT         DEFAULT 0                 COMMENT '是否纳入能耗统计(0:否 1:是)',
    `create_time`         DATETIME        DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`         DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_transaction_no` (`transaction_no`),
    INDEX `idx_pile_gun` (`pile_code`, `gun_no`),
    INDEX `idx_device_code` (`device_code`),
    INDEX `idx_area_code` (`area_code`),
    INDEX `idx_record_date` (`record_date`),
    INDEX `idx_end_time` (`end_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='充电交易记录主表';


-- ----------------------------
-- 充电计量表-按分时电价拆分
-- ----------------------------
DROP TABLE IF EXISTS adm_charging_meter_h;
CREATE TABLE adm_charging_meter_h (
    `id`                 BIGINT(20)      NOT NULL AUTO_INCREMENT      COMMENT '序号',
    `transaction_no`     VARCHAR(32)     NOT NULL                     COMMENT '关联交易流水号',
    `area_code`          VARCHAR(32)     NOT NULL                     COMMENT '区域代码',
    `device_code`        VARCHAR(64)     NOT NULL                     COMMENT '充电枪设备编码',
    `record_time`        TIMESTAMP       NOT NULL                     COMMENT '记录时间(取交易结束时间)',
    `date`               DATE            NOT NULL                     COMMENT '日期 yyyy-MM-dd',
    `time`               TIME            NOT NULL                     COMMENT '时间 HH:mm:ss',
    `elec_quantity`      DOUBLE          DEFAULT NULL                 COMMENT '电量(kWh)',
    `elec_quantity_loss` DOUBLE          DEFAULT NULL                 COMMENT '计损电量(kWh)',
    `meter_type`         INT             DEFAULT NULL                 COMMENT '计量类型(-1:谷 0:平 1:峰 2:尖)',
    `meter_unit_price`   DOUBLE          DEFAULT NULL                 COMMENT '单位电价(元/kWh, 充电桩上报)',
    `use_elec_cost`      DOUBLE          DEFAULT NULL                 COMMENT '电费(元)',
    `create_time`        DATETIME        DEFAULT CURRENT_TIMESTAMP    COMMENT '创建时间',
    PRIMARY KEY (`id`),
    INDEX `idx_transaction_no` (`transaction_no`),
    INDEX `idx_device_code` (`device_code`),
    INDEX `idx_area_date` (`area_code`, `date`),
    INDEX `idx_record_time` (`record_time`),
    INDEX `idx_meter_type` (`meter_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='充电计量表-分时';

-- ----------------------------
-- 电力产能预测表
-- ----------------------------
drop table if exists adm_ems_elec_prod_forecast;
create table adm_ems_elec_prod_forecast (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `facs_code`                 varchar(16)     not null                     comment '设施代码',
  `date`                      date            not null                     comment '日期 yyyy-MM-dd',
  `elec_prod_quantity`        double          not null                     comment '发电量 单位：kW-h（千瓦·时）',
  `up_elec_quantity`          double          default null                 comment 'sw 单位：kW-h（千瓦·时）',
  `avg_power`                 double          default null                 comment '功率 单位：kW（千瓦）',
  primary key (`id`),
  unique key ux_ems_elec_prod_forecast(`facs_code`, `date`)
) engine=innodb auto_increment=1 comment = '电力产能预测表';


-- ----------------------------
-- 电力消耗预测表
-- ----------------------------
drop table if exists adm_ems_elec_consume_forecast;
create table adm_ems_elec_consume_forecast (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `obj_code`                  varchar(32)     not null                     comment '对象代码',
  `obj_type`                  int             not null                     comment '1-建筑 2-设施 3-设备',
  `date`                      date            not null                     comment '日期 yyyy-MM-dd',
  `elec_use_quantity`         double          default null                 comment '用电量 （kW·h）',
  primary key (`id`),
  unique key ux_ems_elec_expend_forecast(`obj_code`, `date`)
) engine=innodb auto_increment=1 comment = '电力消耗预测表';


-- ----------------------------
-- 碳排放预测表
-- ----------------------------
drop table if exists adm_ems_ca_emission_forecast;
create table adm_ems_ca_emission_forecast (
  `id`                        bigint(20)      not null auto_increment      comment '序号',
  `area_code`                 varchar(32)     not null                     comment '园区代码',
  `month`                     varchar(16)     not null                     comment '日期 yyyy-MM',
  `ca_emission`               double          default null                 comment '单位：kg（千克）',
  primary key (`id`),
  unique key ux_ems_ca_emission_forecast(`area_code`, `month`)
) engine=innodb auto_increment=1 comment = '碳排放预测表';


-- ============================================================================
-- 报表数据源配置表 (主表) - 定义可查询的数据源
-- ============================================================================
DROP TABLE IF EXISTS `adm_report_datasource`;
CREATE TABLE `adm_report_datasource` (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '主键ID',
    `ds_code`           varchar(64)     NOT NULL                   COMMENT '数据源编码(唯一标识)',
    `ds_name`           varchar(128)    NOT NULL                   COMMENT '数据源名称',
    `ds_desc`           varchar(512)    DEFAULT NULL               COMMENT '数据源描述',
    `main_table`        varchar(128)    NOT NULL                   COMMENT '主表名',
    `main_alias`        varchar(32)     DEFAULT 't'                COMMENT '主表别名',
    `base_where`        varchar(1024)   DEFAULT NULL               COMMENT '基础查询条件(固定条件)',
    `default_order`     varchar(256)    DEFAULT NULL               COMMENT '默认排序字段',
    `category`          varchar(64)     DEFAULT NULL               COMMENT '分类(prod-产能,elec-用电,water-用水,store-储能)',
    `icon`              varchar(64)     DEFAULT NULL               COMMENT '图标',
    `sort_order`        int             DEFAULT 0                  COMMENT '排序号',
    `status`            tinyint(1)      DEFAULT 1                  COMMENT '状态(0-禁用,1-启用)',
    `remark`            varchar(512)    DEFAULT NULL               COMMENT '备注',
    `create_by`         varchar(64)     DEFAULT NULL               COMMENT '创建者',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    `update_by`         varchar(64)     DEFAULT NULL               COMMENT '更新者',
    `update_time`       datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_ds_code` (`ds_code`),
    KEY `idx_category` (`category`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='自定义报表-数据源配置表';


-- ============================================================================
-- 报表字段配置表 - 定义数据源的可用字段
-- ============================================================================
DROP TABLE IF EXISTS `adm_report_field`;
CREATE TABLE `adm_report_field` (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '主键ID',
    `ds_code`           varchar(64)     NOT NULL                   COMMENT '数据源编码',
    `field_code`        varchar(64)     NOT NULL                   COMMENT '字段编码(对应数据库列名或别名)',
    `field_name`        varchar(128)    NOT NULL                   COMMENT '字段显示名称',
    `field_alias`       varchar(64)     DEFAULT NULL               COMMENT '字段别名(用于SQL SELECT)',
    `field_expr`        varchar(512)    DEFAULT NULL               COMMENT '字段表达式(复杂计算字段)',
    `field_type`        varchar(32)     NOT NULL                   COMMENT '字段类型(string/number/date/datetime/time)',
    `field_format`      varchar(64)     DEFAULT NULL               COMMENT '显示格式(如日期格式yyyy-MM-dd)',
    `decimals`          int             DEFAULT 2                  COMMENT '小数位数(数值类型)',
    `unit`              varchar(32)     DEFAULT NULL               COMMENT '单位(如kW·h、元、吨)',
    `dict_type`         varchar(64)     DEFAULT NULL               COMMENT '字典类型(用于值转换)',
    `is_default`        tinyint(1)      DEFAULT 0                  COMMENT '是否默认显示(0-否,1-是)',
    `is_required`       tinyint(1)      DEFAULT 0                  COMMENT '是否必选(0-否,1-是)',
    `is_filterable`     tinyint(1)      DEFAULT 1                  COMMENT '是否可筛选(0-否,1-是)',
    `is_sortable`       tinyint(1)      DEFAULT 1                  COMMENT '是否可排序(0-否,1-是)',
    `is_aggregatable`   tinyint(1)      DEFAULT 0                  COMMENT '是否可聚合统计(0-否,1-是)',
    `aggregate_func`    varchar(32)     DEFAULT NULL               COMMENT '默认聚合函数(SUM/AVG/MAX/MIN/COUNT)',
    `group_name`        varchar(64)     DEFAULT NULL               COMMENT '字段分组名称',
    `width`             int             DEFAULT NULL               COMMENT '列宽度(像素)',
    `min_width`         int             DEFAULT 100                COMMENT '最小列宽度',
    `sort_order`        int             DEFAULT 0                  COMMENT '排序号',
    `status`            tinyint(1)      DEFAULT 1                  COMMENT '状态(0-禁用,1-启用)',
    `remark`            varchar(512)    DEFAULT NULL               COMMENT '备注',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    `update_time`       datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_ds_field` (`ds_code`, `field_code`),
    KEY `idx_ds_code` (`ds_code`),
    KEY `idx_field_type` (`field_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='自定义报表-字段配置表';


-- ============================================================================
-- 报表字段条件配置表 - 定义字段支持的查询条件
-- ============================================================================
DROP TABLE IF EXISTS `adm_report_field_condition`;
CREATE TABLE `adm_report_field_condition` (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '主键ID',
    `ds_code`           varchar(64)     NOT NULL                   COMMENT '数据源编码',
    `field_code`        varchar(64)     NOT NULL                   COMMENT '字段编码',
    `condition_type`    varchar(32)     NOT NULL                   COMMENT '条件类型(eq/ne/gt/gte/lt/lte/like/in/between/isNull/isNotNull)',
    `condition_name`    varchar(64)     NOT NULL                   COMMENT '条件显示名称',
    `condition_symbol`  varchar(16)     DEFAULT NULL               COMMENT '条件符号(=/>/>=/</<=/!=)',
    `value_count`       int             DEFAULT 1                  COMMENT '需要的值数量(1-单值,2-双值如between)',
    `default_value`     varchar(256)    DEFAULT NULL               COMMENT '默认值',
    `is_default`        tinyint(1)      DEFAULT 0                  COMMENT '是否默认条件',
    `sort_order`        int             DEFAULT 0                  COMMENT '排序号',
    `status`            tinyint(1)      DEFAULT 1                  COMMENT '状态',
    PRIMARY KEY (`id`),
    KEY `idx_ds_field` (`ds_code`, `field_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='自定义报表-字段条件配置表';


-- ============================================================================
-- 报表关联关系配置表 - 定义表关联(用于code到name的转换等)
-- ============================================================================
DROP TABLE IF EXISTS `adm_report_relation`;
CREATE TABLE `adm_report_relation` (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '主键ID',
    `ds_code`           varchar(64)     NOT NULL                   COMMENT '数据源编码',
    `relation_code`     varchar(64)     NOT NULL                   COMMENT '关联编码',
    `relation_name`     varchar(128)    DEFAULT NULL               COMMENT '关联名称',
    `join_type`         varchar(16)     DEFAULT 'LEFT'             COMMENT '关联类型(LEFT/INNER/RIGHT)',
    `join_table`        varchar(128)    NOT NULL                   COMMENT '关联表名',
    `join_alias`        varchar(32)     NOT NULL                   COMMENT '关联表别名',
    `join_condition`    varchar(512)    NOT NULL                   COMMENT '关联条件(如: t.area_code = a.area_code)',
    `is_auto_join`      tinyint(1)      DEFAULT 1                  COMMENT '是否自动关联(使用相关字段时自动JOIN)',
    `sort_order`        int             DEFAULT 0                  COMMENT '排序号',
    `status`            tinyint(1)      DEFAULT 1                  COMMENT '状态',
    `remark`            varchar(512)    DEFAULT NULL               COMMENT '备注',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_ds_relation` (`ds_code`, `relation_code`),
    KEY `idx_ds_code` (`ds_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='自定义报表-关联关系配置表';


-- ============================================================================
-- 报表关联字段映射表 - 定义哪些字段需要哪个关联
-- ============================================================================
DROP TABLE IF EXISTS `adm_report_field_relation`;
CREATE TABLE `adm_report_field_relation` (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '主键ID',
    `ds_code`           varchar(64)     NOT NULL                   COMMENT '数据源编码',
    `field_code`        varchar(64)     NOT NULL                   COMMENT '字段编码',
    `relation_code`     varchar(64)     NOT NULL                   COMMENT '关联编码',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_field_relation` (`ds_code`, `field_code`, `relation_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='自定义报表-字段关联映射表';


-- ============================================================================
-- 报表用户报表模板表 - 保存用户自定义的报表配置
-- ============================================================================
DROP TABLE IF EXISTS `adm_report_template`;
CREATE TABLE `adm_report_template` (
    `id`                bigint(20)      NOT NULL AUTO_INCREMENT    COMMENT '主键ID',
    `template_code`     varchar(64)     NOT NULL                   COMMENT '模板编码',
    `template_name`     varchar(128)    NOT NULL                   COMMENT '模板名称',
    `template_desc`     varchar(512)    DEFAULT NULL               COMMENT '模板描述',
    `ds_code`           varchar(64)     NOT NULL                   COMMENT '数据源编码',
    `config_json`       text            NOT NULL                   COMMENT '配置JSON(包含字段、条件、排序等)',
    `is_public`         tinyint(1)      DEFAULT 0                  COMMENT '是否公开(0-私有,1-公开)',
    `is_system`         tinyint(1)      DEFAULT 0                  COMMENT '是否系统模板(0-否,1-是)',
    `use_count`         int             DEFAULT 0                  COMMENT '使用次数',
    `user_id`           bigint(20)      DEFAULT NULL               COMMENT '用户ID',
    `user_name`         varchar(64)     DEFAULT NULL               COMMENT '用户名',
    `dept_id`           bigint(20)      DEFAULT NULL               COMMENT '部门ID',
    `status`            tinyint(1)      DEFAULT 1                  COMMENT '状态',
    `create_by`         varchar(64)     DEFAULT NULL               COMMENT '创建者',
    `create_time`       datetime        DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间',
    `update_by`         varchar(64)     DEFAULT NULL               COMMENT '更新者',
    `update_time`       datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_template_code` (`template_code`),
    KEY `idx_ds_code` (`ds_code`),
    KEY `idx_user_id` (`user_id`),
    KEY `idx_is_public` (`is_public`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='自定义报表-用户模板表';