create table t_dm_module
(
  id              varchar(36) not null,
  modulename      varchar(50),
  moduletype      varchar(30),
  cycle           decimal(5, 0),
  modulenavconfig varchar(3072),
  predicttime     datetime,
  collecttime     datetime,
  create_time     datetime default current_timestamp,
  update_time     datetime default current_timestamp,
  traintime       datetime,
  primary key (id),
  UNIQUE INDEX idx_moduletype (moduletype)
) engine = innodb default character set utf8mb4 COMMENT = '管网表';


create table t_dm_module_item
(
  id         varchar(36) not null,
  moduleid   varchar(36),
  itemid     varchar(36),
  itemorder  bigint,
  status     bigint,
  categoryid varchar(64),
  primary key (id),
  key idx_moduleid (moduleid)
) engine = innodb default character set utf8mb4 COMMENT = '管网预测项关系表';

create table t_mm_item_output
(
  id            varchar(36) not null,
  itemid        varchar(36),
  pointid       varchar(36),
  resulttableid varchar(36),
  tagname       varchar(50),
  outputorder   decimal(5, 0),
  primary key (id),
  INDEX idx_itemid (itemid)
) engine = innodb default character set utf8mb4 COMMENT = '预测项输出表';

create table t_mm_item_result
(
  id        varchar(36) not null,
  outputid  varchar(36),
  datatime  datetime,
  datavalue decimal(19, 3),
  primary key (id),
  INDEX idx_outputid (outputid),
  INDEX idx_datatime (datatime)
) engine = innodb
  default character set utf8mb4 COMMENT = '预测结果表';

create table t_mm_item_type
(
  id            varchar(36) not null,
  itemtypename  varchar(50),
  itemclasstype varchar(100),
  assemblyname  varchar(64),
  primary key (id)
) engine = innodb default character set utf8mb4 COMMENT = '预测项类型表';

create table t_mm_model_arith_settings
(
  id        varchar(36) not null,
  modelid   varchar(36),
  `key`     varchar(36),
  value     varchar(256),
  name      varchar(36),
  valuetype varchar(36),
  primary key (id),
  INDEX idx_modelid (modelid)
) engine = innodb default character set utf8mb4 COMMENT = '预测模型设置参数表';

create table t_mm_model_param
(
  id                  varchar(36) not null,
  modelid             varchar(36),
  modelparamname      varchar(36),
  modelparamid        varchar(36),
  modelparamorder     integer,
  modelparamportorder integer,
  datalength          integer,
  modelparamtype      varchar(36),
  primary key (id),
  INDEX idx_modelid (modelid)
) engine = innodb default character set utf8mb4 COMMENT = '预测模型输入参数表';

create table t_mm_model_resultstr
(
  id        varchar(64) not null,
  resultstr varchar(64),
  primary key (id)
) engine = innodb default character set utf8mb4 COMMENT = '预测模型结果字符串表';

create table
  t_mm_predict_item
(
  id              varchar(36) not null,
  itemno          varchar(16),
  itemname        varchar(50),
  caltypeid       varchar(36),
  itemtypeid      varchar(36),
  predictlength   decimal(5, 0),
  granularity     decimal(5, 0),
  status          decimal(5, 0),
  isfuse          decimal(5, 0),
  predictphase    decimal(5, 0),
  workchecked     decimal(5, 0),
  unittransfactor decimal(31, 6),
  create_time     datetime default current_timestamp,
  update_time     datetime default current_timestamp,
  saveindex       varchar(16),
  primary key (id),
  UNIQUE INDEX uk_itemno (itemno)
) engine = innodb default character set utf8mb4 COMMENT = '预测模型结果字符串表';

create table
  t_mm_predict_merge_item
(
  id         varchar(36) not null,
  itemid     varchar(36),
  expression varchar(255),
  num        integer,
  primary key (id),
  UNIQUE INDEX uk_itemid (itemid)
) engine = innodb default character set utf8mb4 COMMENT = '合并预测项表';

create table
  t_mm_predict_model
(
  id                  varchar(36) not null,
  modelno             varchar(32),
  modelname           varchar(50),
  itemid              varchar(36),
  arithid             varchar(36),
  trainsamplength     decimal(5, 0),
  predictsamplength   decimal(5, 0),
  isonlinetrain       decimal(5, 0),
  modelpath           varchar(256),
  isnormal            decimal(5, 0),
  normalmax           decimal(19, 3),
  normalmin           decimal(19, 3),
  status              decimal(5, 0),
  classname           varchar(256),
  methodname          varchar(64),
  modelparamstructure varchar(128),
  resultstrid         varchar(64),
  settingmap          varchar(256),
  trainmodelpath      varchar(256),
  pathstatus          decimal(5, 0),
  pdim                smallint,
  traninip            varchar(16),
  comparisonclassname varchar(256),
  primary key (id),
  INDEX idx_modelno (modelno),
  UNIQUE INDEX idx_itemid (itemid)
) engine = innodb
  default character set utf8mb4 COMMENT = '预测项模型表';

create table t_mm_result_table
(
  id        varchar(36) not null,
  tablename varchar(30),
  primary key (id)
) engine = innodb default character set utf8mb4 COMMENT = '预测结果存放表';


create table t_mm_item_result_json
(
  id          varchar(36) not null,
  outputid    varchar(36),
  predicttime datetime,
  jsonvalue   varchar(6400),
  cumulant    varchar(36),
  primary key (id),
  INDEX idx_outputid (outputid),
  INDEX idx_predicttime (predicttime)
) engine = innodb default character set utf8mb4 COMMENT = '预测JSON数据表';

create table
  t_mm_item_result_last_point
(
  id        varchar(36) not null,
  outputid  varchar(36),
  datatime  datetime,
  datavalue decimal(19, 3),
  primary key (id),
  INDEX idx_outputid (outputid),
  INDEX idx_datatime (datatime)
) engine = innodb default character set utf8mb4 COMMENT = '预测T+L数据表';

create table t_mm_item_accuracy_rate
(
  id                varchar(36) not null,
  item_id           varchar(36) not null COMMENT '预测项ID',
  sample_length     integer COMMENT '样本长度',
  value_type        integer COMMENT '值类型',
  in_deviation      decimal(8, 3) COMMENT '精准误差',
  in_accuracy_rate  decimal(6, 4) COMMENT '精准度',
  out_deviation     decimal(8, 3) COMMENT '不可信误差',
  out_accuracy_rate decimal(6, 4) COMMENT '不可信率',
  is_enable         tinyint,
  update_time       datetime,
  begin_time        datetime,
  primary key (id),
  INDEX idx_item_id (item_id)
) engine = innodb
  default character set utf8mb4 COMMENT = '预测精准度表';

create table t_mm_predict_alarm_config
(
  id            varchar(36) not null,
  title         varchar(20) COMMENT '消息标题',
  alarm_obj     varchar(36) COMMENT '监控对象',
  item_id       varchar(36) COMMENT '预测项ID',
  comp_length   int COMMENT '比较长度',
  upper_limit   decimal(10, 4) COMMENT '上限',
  lower_limit   decimal(10, 4) COMMENT '下限',
  unit          varchar(10) COMMENT '单位',
  coefficient   decimal(10, 4) COMMENT '转换系数',
  model_id      varchar(36) COMMENT '调度建议模型',
  is_enable     tinyint     NOT NULL COMMENT '是否启用（0禁用 1启用）',
  `creator`     varchar(64) NOT NULL DEFAULT '' COMMENT '创建者',
  `create_time` datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater`     varchar(64)          DEFAULT '' COMMENT '更新者',
  `update_time` datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  primary key (id)
) engine = innodb
  default character set utf8mb4 COMMENT = '预警配置表';

create table t_mm_predict_alarm_message
(
  id            varchar(36) not null,
  title         varchar(36) COMMENT '消息标题',
  content       varchar(128) COMMENT '消息内容',
  alarm_obj     varchar(36) COMMENT '监控对象',
  point_id      varchar(36) COMMENT '监控点位ID',
  item_id       varchar(36) COMMENT '预测项ID',
  current_value decimal(18, 4) COMMENT '当前值',
  out_time      datetime COMMENT '超出时间',
  out_value     decimal(18, 4) COMMENT '超出值',
  alarm_type    varchar(10) COMMENT '预警类型',
  alarm_time    datetime COMMENT '预警时间',
  create_time   datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  primary key (id),
  INDEX idx_item_id (item_id),
  INDEX idx_alarm_obj (alarm_obj),
  INDEX idx_alarm_time (alarm_time)
) engine = innodb
  default character set utf8mb4 COMMENT = '预警消息表';


-- 调度模块

create table t_st_schedule_scheme
(
  `id`                varchar(36) not null COMMENT 'ID',
  `code`              varchar(20) not null COMMENT '编号',
  `name`              varchar(20) not null COMMENT '名称',
  `trigger_method`    varchar(20) COMMENT '触发方式',
  `trigger_condition` varchar(20) COMMENT '触发条件',
  `schedule_obj`      varchar(20) COMMENT '调整对象',
  `schedule_type`     varchar(20) COMMENT '调整类型',
  `schedule_strategy` varchar(20) COMMENT '调整策略',
  `model_id`          varchar(36) COMMENT '调度模型',
  `schedule_time`     datetime COMMENT '调度时间',
  `status`            tinyint     NOT NULL DEFAULT 0 COMMENT '方案状态（0正常 1停用）',
  `remark`            varchar(100) COMMENT '备注',
  `creator`           varchar(64) NOT NULL DEFAULT '' COMMENT '创建者',
  `create_time`       datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater`           varchar(64) NULL     DEFAULT '' COMMENT '更新者',
  `update_time`       datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  primary key (id),
  UNIQUE INDEX `uk_code` (`code` ASC) USING BTREE
) engine = innodb
  default character set utf8mb4 COMMENT = '调度方案表';

create table t_st_schedule_model
(
  `id`              varchar(36) not null COMMENT 'ID',
  `model_code`      varchar(64) not null COMMENT '模型编号',
  `model_name`      varchar(64) not null COMMENT '模型名称',
  `model_type`      varchar(64) COMMENT '模型类型',
  `class_name`      varchar(128) COMMENT '类名',
  `method_name`     varchar(64) COMMENT '方法名',
  `port_length`     integer COMMENT '输入数量',
  `param_structure` varchar(256) COMMENT '参数构造',
  `model_path`      varchar(256) COMMENT '路径',
  `result_str_id`   varchar(64) COMMENT '结果ID',
  `invocation`      varchar(64) COMMENT '调用方式',
  `status`          tinyint     NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
  `creator`         varchar(64) NOT NULL DEFAULT '' COMMENT '创建者',
  `create_time`     datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater`         varchar(64) NULL     DEFAULT '' COMMENT '更新者',
  `update_time`     datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  primary key (id),
  UNIQUE INDEX `uk_model_code` (`model_code` ASC) USING BTREE
) engine = innodb default character set utf8mb4 COMMENT = '调度模型表';

create table
  t_st_schedule_model_param
(
  id                  varchar(36) not null,
  modelid             varchar(64) not null,
  modelparamname      varchar(64),
  modelparamid        varchar(64),
  modelparamorder     integer,
  modelparamportorder integer,
  datalength          integer,
  modelparamtype      varchar(64),
  primary key (id)
) engine = innodb
  default character set utf8mb4 COMMENT = '调度模型输入参数表';


create table
  t_st_schedule_model_setting
(
  `id`        varchar(36) not null,
  `modelid`   varchar(64) not null,
  `key`       varchar(64),
  `value`     varchar(64),
  `valuetype` varchar(64),
  `name`      varchar(64),
  `sort`      integer,
  primary key (id),
  key idx_modelid (modelid)
) engine = innodb
  default character set utf8mb4 COMMENT = '调度模型设置参数表';

create table
  t_st_schedule_suggest
(
  id                varchar(36) not null,
  title             varchar(50) COMMENT '标题',
  content           varchar(256) COMMENT '内容',
  sort              integer COMMENT '排序',
  scheme_id         varchar(36) COMMENT '方案ID',
  alarm_id          varchar(36) COMMENT '预警ID',
  item_id           varchar(36) COMMENT '预测项ID',
  model_id          varchar(36) COMMENT '模型ID',
  schedule_obj      varchar(20) COMMENT '调整对象',
  schedule_type     varchar(20) COMMENT '调整类型',
  schedule_strategy varchar(20) COMMENT '调整策略',
  adjust_mode       varchar(20) COMMENT '调整方式',
  adjust_value      decimal(18, 4) COMMENT '调整值',
  adjust_unit       varchar(20) COMMENT '调整单位',
  adjust_times      decimal(18, 4) COMMENT '持续时长',
  adjust_start      datetime COMMENT '调整开始时间',
  adjust_end        datetime COMMENT '调整结束时间',
  schedule_time     datetime COMMENT '调度时间',
  status            tinyint     NOT NULL COMMENT '状态（0未处理 1已采纳 2已忽略）',
  handler           varchar(36) COMMENT '处理人',
  handle_time       datetime COMMENT '处理时间',
  create_time       datetime default current_timestamp COMMENT '创建时间',
  primary key (id),
  INDEX idx_scheme_id (scheme_id),
  INDEX idx_alarm_id (alarm_id),
  INDEX idx_item_id (item_id),
  INDEX idx_model_id (model_id),
  INDEX idx_schedule_obj (schedule_obj),
  INDEX idx_schedule_type (schedule_type)
) engine = innodb
  default character set utf8mb4 COMMENT = '调度建议表';


create table
  t_st_schedule_record
(
  `id`            varchar(36) not null,
  `scheme_id`     varchar(36) COMMENT '方案ID',
  `model_id`      varchar(36) COMMENT '模型ID',
  `model_name`    varchar(64) COMMENT '模型名称',
  `schedule_time` datetime COMMENT '调度时间',
  `create_time`   datetime default current_timestamp COMMENT '创建时间',
  primary key (id),
  INDEX idx_scheme_id (scheme_id),
  INDEX idx_model_id (model_id),
  INDEX idx_schedule_time (schedule_time)
) engine = innodb
  default character set utf8mb4 COMMENT = '调度记录表';


create table
  t_st_schedule_record_detail
(
  `id`            varchar(36) not null,
  `record_id`     varchar(36),
  `scheme_id`     varchar(64),
  `model_id`      varchar(36) COMMENT '模型ID',
  `result_key`    varchar(64),
  `result_value`  text,
  `schedule_time` datetime COMMENT '调度时间',
  primary key (id),
  key idx_record_id (record_id),
  key idx_scheme_id (scheme_id),
  key idx_model_id (model_id)
) engine = innodb
  default character set utf8mb4 COMMENT = '调度记录详情表';
