CREATE DATABASE IF NOT EXISTS `fm-scheduling`;

CREATE TABLE
IF
	NOT EXISTS `work_rule` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
-- 	`parent_id` int(8)  COMMENT '上一级规则节点的id 这个主要用于XX岗位/专业在XX时间段的在岗人数 带有复合条件的规则 ',
	`rule_type` int(1) NOT NULL COMMENT '规则类型 1 日排班规则 2 月排班规则 0 特殊日期',
	`rule_operator` int(8)  COMMENT '比较符号 1大于 -1 小于 0 等于  2 大于等于  -2 小于等于',
	`rule_value` double(10, 2)  COMMENT '规则的限定值',
	`rule_content_ids` varchar (255)  COMMENT '规则内容ids',
	`enable` tinyint (1)  NOT NULL DEFAULT 1 COMMENT '规则是否启用',
	`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作规则表';

CREATE TABLE
IF
	NOT EXISTS `work_rule_content` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
	`rule_desc` VARCHAR ( 64 )  COMMENT 'rule描述',
	`rule_value` VARCHAR ( 64 )  COMMENT 'rule的值',
	`filed_ref` int(2)  COMMENT '字段关联 以满足规则内容里的不同类型 这样好做字段层面的条件的判断 1 岗位 2 专业 3 班次 4 领导检查 5 安全日检查 ',
	`filed_ref_value` int(2)  COMMENT '与字段相关联的值',
	`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作规则内容表';

CREATE TABLE
IF
	NOT EXISTS `work_shift` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
	`shift_abbr` VARCHAR ( 5 ) NOT NULL COMMENT '班次的简称',
	`shift_name` VARCHAR ( 255 ) NOT NULL COMMENT '班次的全称',
	`shift_start_time` VARCHAR ( 64 ) NOT NULL COMMENT '班次的开始时间',
	`shift_end_time` VARCHAR ( 64 ) NOT NULL COMMENT '班次的结束时间',
	`positionIds` VARCHAR ( 64 ) NOT NULL COMMENT '班次需要的岗位',
	`shift_type` int(1) NOT NULL COMMENT '班次类型 1 集团统一  0 项目统一',
	`real_work_duration` INT ( 8 ) NOT NULL COMMENT '班次的真实工作时间以分钟后为单位',
	`work_rule_id` INT ( 8 ) NOT NULL COMMENT '班次的真实工作时间以分钟后为单位',
	`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作班次表';


CREATE TABLE
IF
	NOT EXISTS `work_shift_duration` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
	`work_shift_id` VARCHAR ( 64 ) NOT NULL COMMENT '工作班次id',
	`duration_start` date NOT NULL COMMENT '适用时间的开始时间',
	`duration_end` date  NOT NULL COMMENT '适用时间的结束时间',
	`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作班次适用日期表';

CREATE TABLE
IF
	NOT EXISTS `work_shift_rest` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
	`work_shift_id` VARCHAR ( 64 ) NOT NULL COMMENT '班次的id',
	`rest_start_time` VARCHAR ( 64 ) NULL COMMENT '班次的休息开始时间',
	`rest_end_time` VARCHAR ( 64 ) NULL COMMENT '班次的休息结束时间',
	`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作班次休息时间表';


CREATE TABLE
IF
	NOT EXISTS `work_shift_conflict` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
	`source_work_shift_id` VARCHAR ( 64 ) NOT NULL COMMENT '被比较的班次的id',
	`current_work_shift_id` VARCHAR ( 64 ) NULL COMMENT '当前的班次的id',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作班次冲突表';




CREATE TABLE
IF
	NOT EXISTS `work_staff` (
	`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
	`person_id` VARCHAR ( 64 ) NOT NULL COMMENT '工作人员id',
	`dept_id` VARCHAR ( 64) NOT NULL COMMENT '部门id',
	`project_id` VARCHAR ( 64 ) NOT NULL COMMENT '项目id',
	`position_id` VARCHAR ( 64 ) NOT NULL COMMENT '主职位id',
	`position_deputy_ids` VARCHAR ( 64 ) NULL COMMENT '副岗ids',
	`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
	`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
	`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
	`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
    `valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作人员档案表';


CREATE TABLE
IF
	NOT EXISTS `work_schedule` (
		`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
		`year` INT ( 11 ) NOT NULL COMMENT '年',
		`month` INT ( 11 ) NOT NULL COMMENT '月',
		`day` INT ( 11 ) NOT NULL COMMENT '日',
		`work_shift_id` VARCHAR ( 11 ) NOT NULL COMMENT '班次id',
		`work_staff_id` VARCHAR ( 64 ) NOT NULL COMMENT '工作人员id',
		`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
		`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
		`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
		`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
		`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
		`valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
	PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作排班表';
CREATE INDEX idx_year_month_day USING BTREE ON work_schedule ( `year`, `month`, `day` );
CREATE INDEX idx_work_time_type USING HASH ON work_schedule ( `work_time_type` );

CREATE TABLE
IF
	NOT EXISTS `work_time` (
		`id` VARCHAR ( 64 ) NOT NULL COMMENT '主键',
		`work_shift_id` VARCHAR ( 11 ) NOT NULL COMMENT '班次id',
		`work_staff_id` VARCHAR ( 64 ) NOT NULL COMMENT '工作人员id',
		`real_start_time` datetime NOT NULL COMMENT '工作人员的真实上班时间',
		`real_end_time` datetime NOT NULL COMMENT '工作人员真实下班时间',
		`leave` tinyint(1) NOT NULL COMMENT '工作人员是否请假',
		`leave_start_time` datetime default  null COMMENT '工作人员的请假开始时间',
		`leave_end_time` datetime default  null COMMENT '工作人员的请假结束时间',
		`real_work_time` int(8) NOT NULL COMMENT '工作人员的真实工作时长 以分钟计',
		`ts` TIMESTAMP NULL NOT NULL COMMENT '乐观锁',
		`creator` VARCHAR ( 32 ) NOT NULL COMMENT '创建人',
		`creation_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
		`modifier` VARCHAR ( 32 ) NOT NULL COMMENT '最后修改人',
		`modified_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
		`valid` INT ( 11 ) NOT NULL COMMENT '合法标识',
	PRIMARY KEY ( `id` )) ENGINE = INNODB CHARSET = utf8mb4 COMMENT '工作时间表';













