create table 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 '项目进度主表' collate = utf8mb4_general_ci
                           row_format = DYNAMIC;

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 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 '项目进度/付款进度扩展表' collate = utf8mb4_general_ci
                                      row_format = DYNAMIC;

create index idx_progress_id
    on oa_progress_detail (progress_id);

create table oa_project_schedule
(
    schedule_id  bigint auto_increment comment '项目进度主键'
        primary key,
    project_id   bigint                             not null comment '项目ID',
    template_id  bigint                             null comment '引用的进度模板ID',
    current_step int      default 0                 null comment '当前进行到的步骤序号',
    start_time   datetime default CURRENT_TIMESTAMP null comment '进度开始时间',
    end_time     datetime                           null comment '进度完成时间',
    status       int      default 1                 null comment '状态(1进行中 2已完成 0暂停)',
    steward      varchar(64)                        null comment '进度负责人',
    create_by    varchar(64)                        null,
    create_time  datetime default CURRENT_TIMESTAMP null,
    update_by    varchar(64)                        null,
    update_time  datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    del_flag     char     default '0'               null,
    remark       varchar(255)                       null
)
    comment '项目进度主表' row_format = DYNAMIC;

create index fk_project_schedule_tpl
    on oa_project_schedule (template_id);

create index idx_project
    on oa_project_schedule (project_id);

create table oa_project_schedule_delay
(
    delay_id          bigint auto_increment comment '延期记录主键'
        primary key,
    track_id          bigint                                 not null comment '关联的进度步骤跟踪记录主键（关联oa_project_schedule_step.track_id）',
    apply_user_name   varchar(40)                            null comment '申请人姓名',
    apply_time        datetime     default CURRENT_TIMESTAMP not null comment '申请提交时间',
    apply_reason      text                                   not null comment '延期申请原因',
    original_end_time datetime                               not null comment '原计划结束时间',
    expect_end_time   datetime                               not null comment '申请延期后的预计结束时间',
    approve_user_name varchar(40)                            null comment '审批人姓名',
    approve_time      datetime                               null comment '审批完成时间',
    approve_result    tinyint                                null comment '审批结果：0-待审批 1-审批通过 2-审批驳回',
    approve_remark    varchar(500) default ''                null comment '审批备注/驳回原因',
    delay_status      tinyint      default 0                 not null comment '延期记录状态：0-待审批 1-审批通过 2-审批驳回 3-已撤销',
    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 '备注(如需)'
)
    comment '项目进度步骤延期记录表' row_format = DYNAMIC;

create index idx_delay_apply_user
    on oa_project_schedule_delay (apply_user_name);

create index idx_delay_approve_user
    on oa_project_schedule_delay (approve_user_name);

create index idx_delay_status
    on oa_project_schedule_delay (delay_status);

create index idx_delay_track_id
    on oa_project_schedule_delay (track_id);

create table oa_project_schedule_step
(
    track_id          bigint auto_increment comment '跟踪记录主键'
        primary key,
    accessory         varchar(500)                       null comment '文件列表',
    schedule_id       bigint                             not null comment '所属项目进度ID',
    step_order        int                                not null comment '步骤序号',
    step_name         varchar(64)                        null comment '步骤名称(冗余存储模板名称)',
    plan_start        datetime                           null comment '计划开始',
    plan_end          datetime                           null comment '计划完成',
    actual_start      datetime                           null,
    actual_end        datetime                           null,
    status            int      default 0                 null comment '0进行中 1完成 2暂停',
    create_by         varchar(64)                        null,
    create_time       datetime default CURRENT_TIMESTAMP null,
    update_by         varchar(64)                        null,
    update_time       datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
    del_flag          char     default '0'               null,
    header            varchar(40)                        null comment '进度负责人',
    use_flag          int      default 1                 null comment '使用标志 1为使用',
    batch_id          int                                null comment '批次号',
    tab_node          varchar(64)                        null comment 'tab节点',
    first_level_node  varchar(64)                        null comment '一级节点（阶段节点）',
    second_level_node varchar(64)                        null comment '二级节点（关键节点）',
    start_time        datetime                           null comment '开始时间',
    original_end_time datetime                           null comment '原定结束时间',
    end_time          datetime                           null comment '结束时间',
    node_header       varchar(40)                        null comment '节点负责人',
    related_docs      varchar(1000)                      null comment '相关资料',
    related_images    varchar(1000)                      null comment '相关图片',
    supplier_id       bigint                             null comment '供应商ID（关联oa_supplier表主键）',
    requirement_file  text                               null comment '需求文件（多文件用逗号分隔）',
    other             json                               null comment '其他扩展信息（JSON格式存储）',
    specification     text                               null comment '规范说明',
    sort_num          int      default 0                 not null comment '排序字段（前端维护，数值越大排序越靠前）'
)
    comment '项目进度步骤跟踪表' row_format = DYNAMIC;

create table sys_oa_task
(
    task_id            bigint                                   not null comment 'ID'
        primary key,
    project_id         bigint                                   null comment '项目ID',
    track_id           bigint                                   null comment '关联项目进度步骤ID',
    create_user_id     bigint                                   null comment '创建者id',
    worker_id          bigint                                   null comment '被分配者',
    task_title         varchar(126) charset utf8mb4 default ''  null comment '任务主题',
    task_type          varchar(20) charset utf8mb4  default '0' null comment '工作类型(1接待，2沟通 3方案策划等)',
    task_grade         char charset utf8mb4         default '0' null comment '优先级（0一般 1中 2高）',
    collaborator       varchar(64) charset utf8mb4  default ''  null comment '协作人员',
    begin_time         datetime                                 null comment '开始时间',
    finish_time        datetime                                 null comment '结束时间',
    origin_finish_time datetime                                 null comment '最初结束时间',
    postponements      int                          default 0   null comment '推迟次数',
    completed_time     datetime                                 null comment '结束时间',
    temp_time          datetime                                 null comment '上次结束时间',
    content            text charset utf8mb4                     null comment '详细描述',
    state              int                          default 0   null comment '任务状态  15申请延期 0进行中 1完成等待评分 2完成',
    accessory          text charset utf8mb4                     null comment '附件',
    files              varchar(1024) charset utf8mb4            null comment '工人文件列表',
    rank_number        int                          default 10  null comment '任务完成评分',
    remark             varchar(256) charset utf8mb4 default ''  null comment '备注',
    create_by          varchar(32) charset utf8mb4  default ''  null comment '创建者',
    create_time        datetime                                 null comment '创建时间',
    update_by          varchar(32) charset utf8mb4  default ''  null comment '更新者',
    update_time        datetime                                 null comment '更新时间',
    del_flag           tinyint                      default 0   null comment '删除标志',
    task_rank          int                          default 0   not null comment '是否置顶，1为置顶，0为不置顶',
    own_rank           int                          default 0   null comment '我的任务置顶',
    status             int                          default 0   null comment '任务类型0单任务1报工',
    time_gap           int                          default 0   null comment '事件间隔'
)
    comment '任务管理表' collate = utf8mb4_general_ci
                         row_format = DYNAMIC;

create table 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_code         varchar(30)                             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 '结束日期',
    original_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完结）',
    product_status       tinyint      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 '履约保证金',
    closure_files        text                                    null comment '结项文件',
    signing_company      tinyint                                 null comment '签约公司(1、昆山德睿福成套设备有限公司 2、昆山福安德工程技术成套设备有限公司 3、山东福安德信息科技有限公司 4、山东首达特科技工程有限公司 5、西安擎锋智创科技有限公司 6、德讯（济宁）软件开发有限公司)',
    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 '延期至日期',
    postpone_count       int          default 0                  not null comment '延期次数（项目累计延期次数，默认0）',
    color                varchar(20)                             null comment '代表颜色',
    trade_type           int          default 0                  null comment '交易类型',
    pre_pay              double       default 0                  null comment '预付款',
    customer_id          bigint                                  null comment '关联客户id',
    is_top               tinyint      default 0                  not null comment '是否置顶（0：不置顶，1：置顶）'
)
    comment '项目管理表' row_format = DYNAMIC;

