feat: project skeleton + DB migrations V1-V12 + ga-common framework
- Gradle multi-module: ga-common, ga-core, ga-api, ga-batch, ga-admin - Flyway V1-V12: org/product/rule/receive/ledger/settle/batch/code/menu/system + seed - ga-common (complete): - model: ApiResponse, PageResponse, SearchParam, TreeNode - exception: ErrorCode, BizException, GlobalExceptionHandler - annotation + aop: @RequirePermission, @DataChangeLog, ApiLog - auth + security: JWT, SecurityConfig - mybatis: BaseMapper, EncryptTypeHandler, JsonTypeHandler, AuditInterceptor - code (Redis cached) / menu (RBAC tree) / file / system / notification - excel: SXSSF+Cursor export, SAX+batch import (1M/700K rows) - util: Date/Money/Mask/Encrypt/Security
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
-- V1: 조직 / 인사 (직급, 조직, 설계사, 이력)
|
||||
|
||||
CREATE TABLE grade (
|
||||
grade_id SERIAL PRIMARY KEY,
|
||||
grade_name VARCHAR(50) NOT NULL,
|
||||
grade_level INT NOT NULL,
|
||||
grade_group VARCHAR(20),
|
||||
description VARCHAR(200),
|
||||
is_active CHAR(1) NOT NULL DEFAULT 'Y',
|
||||
sort_order INT NOT NULL DEFAULT 0
|
||||
);
|
||||
COMMENT ON TABLE grade IS '직급';
|
||||
|
||||
CREATE TABLE organization (
|
||||
org_id SERIAL PRIMARY KEY,
|
||||
parent_org_id BIGINT REFERENCES organization(org_id),
|
||||
org_name VARCHAR(100) NOT NULL,
|
||||
org_type VARCHAR(10) NOT NULL, -- HQ / BR / TM
|
||||
org_level INT NOT NULL,
|
||||
region VARCHAR(50),
|
||||
effective_from DATE NOT NULL,
|
||||
effective_to DATE,
|
||||
is_active CHAR(1) NOT NULL DEFAULT 'Y',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP,
|
||||
created_by BIGINT
|
||||
);
|
||||
COMMENT ON TABLE organization IS '조직';
|
||||
CREATE INDEX idx_org_parent ON organization(parent_org_id);
|
||||
CREATE INDEX idx_org_type ON organization(org_type, is_active);
|
||||
|
||||
CREATE TABLE agent (
|
||||
agent_id SERIAL PRIMARY KEY,
|
||||
org_id BIGINT NOT NULL REFERENCES organization(org_id),
|
||||
grade_id BIGINT NOT NULL REFERENCES grade(grade_id),
|
||||
agent_name VARCHAR(50) NOT NULL,
|
||||
resident_no VARCHAR(200), -- AES 암호화
|
||||
license_no VARCHAR(50),
|
||||
phone VARCHAR(20),
|
||||
email VARCHAR(100),
|
||||
bank_code VARCHAR(10),
|
||||
account_no VARCHAR(200), -- AES 암호화
|
||||
status VARCHAR(10) NOT NULL DEFAULT 'ACTIVE', -- ACTIVE / LEAVE / SUSPEND
|
||||
join_date DATE,
|
||||
leave_date DATE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP
|
||||
);
|
||||
COMMENT ON TABLE agent IS '설계사';
|
||||
CREATE INDEX idx_agent_org ON agent(org_id, status);
|
||||
CREATE INDEX idx_agent_lic ON agent(license_no);
|
||||
CREATE INDEX idx_agent_status ON agent(status);
|
||||
|
||||
CREATE TABLE agent_org_history (
|
||||
history_id SERIAL PRIMARY KEY,
|
||||
agent_id BIGINT NOT NULL REFERENCES agent(agent_id),
|
||||
from_org_id BIGINT,
|
||||
to_org_id BIGINT,
|
||||
from_grade_id BIGINT,
|
||||
to_grade_id BIGINT,
|
||||
change_type VARCHAR(20) NOT NULL, -- TRANSFER / PROMOTE / DEMOTE / JOIN / LEAVE
|
||||
change_date DATE NOT NULL,
|
||||
change_reason VARCHAR(200),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
created_by BIGINT
|
||||
);
|
||||
CREATE INDEX idx_aoh_agent ON agent_org_history(agent_id, change_date);
|
||||
Reference in New Issue
Block a user