create table if not exists sys_oa_project
(
    project_id      bigint                                  not null comment 'ID'
        primary key,
    project_name    varchar(126) default ''                 null comment '项目名称',
    project_num     varchar(64)  default ''                 null comment '项目编号',
    project_type    char                                    null comment '项目类型(1中标，2其他)',
    address         varchar(126) default ''                 null comment '项目地址',
    funds           decimal(24, 2)                          null comment '项目总款',
    functionary     varchar(32)  default ''                 null comment '项目负责人',
    begin_time      datetime                                null comment '开始日期',
    finish_time     datetime                                null comment '结束日期',
    delivery        varchar(64)                             null comment '交货期',
    guarantee       varchar(64)                             null comment '质保期',
    introduction    varchar(256) default ''                 null comment '项目介绍',
    project_grade   char         default '0'                null comment '优先级（0一般 1中 2高）',
    project_status  char         default '0'                null comment '状态（0进行中 1完结）',
    contract_id     bigint                                  null comment '关联合同ID',
    invoice_name    varchar(64) collate utf8mb4_general_ci  null comment '开票单位名称',
    invoice_number  varchar(32) collate utf8mb4_general_ci  null comment '纳税人识别号',
    invoice_address varchar(128) collate utf8mb4_general_ci null comment '开票地址电话',
    invoice_bank    varchar(128) collate utf8mb4_general_ci null comment '开户行及账号',
    accessory       text                                    null comment '附件',
    bail            json                                    null comment '履约保证金',
    remark          varchar(256)                            null comment '备注',
    create_by       varchar(32)  default ''                 null comment '创建者',
    create_time     datetime                                null comment '创建时间',
    update_by       varchar(32)  default ''                 null comment '更新者',
    update_time     datetime                                null comment '更新时间',
    is_postpone     int          default 0                  null comment '是否延期',
    postpone_reason varchar(1024)                           null comment '延期原因',
    postpone_time   datetime                                null comment '延期至日期',
    color           varchar(20)                             null comment '代表颜色',
    trade_type      int          default 0                  null comment '交易类型',
    pre_pay         double       default 0                  null comment '预付款'
)
    comment '项目管理表' charset = utf8mb4;

create table if not exists oa_progress
(
    progress_id   bigint auto_increment comment '主键ID'
        primary key,
    project_id    bigint       default 0                 not null comment '所属项目ID(可根据实际需要)',
    type          tinyint      default 1                 not null comment '进度类型：1-项目进度；2-付款进度(可根据实际约定)',
    progress_name varchar(200) default ''                not null comment '进度名称',
    parent_id     bigint       default 0                 not null comment '父进度ID，0或NULL表示没有父节点',
    create_by     varchar(40)  default ''                not null comment '创建者',
    create_time   datetime     default CURRENT_TIMESTAMP not null comment '创建时间',
    update_by     varchar(40)  default ''                not null comment '更新者',
    update_time   datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    del_flag      tinyint      default 0                 not null comment '删除标志：0-正常；1-删除',
    sort          int          default 0                 not null comment '排序字段(如需)',
    remark        varchar(500) default ''                not null comment '备注(如需)',
    status        int          default 0                 null comment '状态位',
    amount        int          default 0                 null comment '设备数量',
    time_remark   varchar(200)                           null comment '时间(备注)',
    contact_phone varchar(20)                            null comment '联系人电话'
)
    comment '项目进度主表';

create index idx_parent_id
    on oa_progress (parent_id);

create index idx_project_id
    on oa_progress (project_id);

create index idx_type
    on oa_progress (type);

create table if not exists oa_progress_detail
(
    detail_id         bigint auto_increment comment '主键ID'
        primary key,
    progress_id       bigint                                   not null comment '关联的进度ID，关联 project_progress.id',
    detail_name       varchar(50)                              null comment '子进度名称',
    plan_start_date   date                                     null comment '计划开始日期(项目进度)',
    plan_end_date     date                                     null comment '计划结束日期(项目进度)',
    actual_start_date date                                     null comment '实际开始日期(项目进度)',
    actual_end_date   date                                     null comment '实际结束日期(项目进度)',
    complete_percent  decimal(5, 2)  default 0.00              not null comment '完成百分比(项目进度)',
    plan_pay_date     date                                     null comment '计划付款日期(付款进度)',
    pay_amount        decimal(18, 2) default 0.00              not null comment '应付金额(付款进度)',
    paid_amount       decimal(18, 2) default 0.00              not null comment '已付金额(付款进度)',
    detail_status     int            default 0                 null comment '子进度状态',
    create_by         varchar(40)    default ''                not null comment '创建者',
    create_time       datetime       default CURRENT_TIMESTAMP not null comment '创建时间',
    update_by         varchar(40)    default ''                not null comment '更新者',
    update_time       datetime       default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    del_flag          tinyint        default 0                 not null comment '删除标志：0-正常；1-删除',
    remark            varchar(500)   default ''                not null comment '备注(如需)',
    department        varchar(30)                              null comment '负责部门'
)
    comment '项目进度/付款进度扩展表';

create index idx_progress_id
    on oa_progress_detail (progress_id);

