184 lines
10 KiB
Plaintext
184 lines
10 KiB
Plaintext
MATCH (n) DETACH DELETE n;
|
|
|
|
CREATE INDEX ON :JobType(id);
|
|
CREATE INDEX ON :ObjectType(id);
|
|
CREATE INDEX ON :Job(id);
|
|
CREATE INDEX ON :Object(id);
|
|
CREATE INDEX ON :MgmtStatus(id);
|
|
CREATE INDEX ON :Scenario(id);
|
|
|
|
UNWIND [
|
|
{id: 'JT01', name: '터널 입구 굴착', duration: 10, cost: 150},
|
|
{id: 'JT02', name: '숏크리트 타설', duration: 5, cost: 80},
|
|
{id: 'JT03', name: '강지보 설치', duration: 7, cost: 120},
|
|
{id: 'JT04', name: '방수 및 배수시설 설치', duration: 8, cost: 100},
|
|
{id: 'JT05', name: '철근 조립', duration: 6, cost: 90},
|
|
{id: 'JT06', name: '내부 라이닝 콘크리트 타설', duration: 12, cost: 200},
|
|
{id: 'JT07', name: '조명 및 환기시설 설치', duration: 9, cost: 110},
|
|
{id: 'JT08', name: '안전시설물 설치', duration: 4, cost: 60},
|
|
{id: 'JT09', name: '포장 및 차선 도색', duration: 7, cost: 95},
|
|
{id: 'JT10', name: 'TBM 준비', duration: 15, cost: 500},
|
|
{id: 'JT11', name: 'TBM 굴진', duration: 30, cost: 1200},
|
|
{id: 'JT12', name: '세그먼트 조립', duration: 25, cost: 800},
|
|
{id: 'JT13', name: '그라우팅', duration: 10, cost: 150},
|
|
{id: 'JT14', name: 'TBM 해체 및 반출', duration: 12, cost: 300},
|
|
{id: 'JT15', name: '전기/통신 케이블 설치', duration: 8, cost: 130},
|
|
{id: 'JT16', name: 'CCTV 및 VMS 설치', duration: 5, cost: 70},
|
|
{id: 'JT17', name: '소방시설 설치', duration: 6, cost: 85},
|
|
{id: 'JT18', name: '최종 점검', duration: 3, cost: 50},
|
|
{id: 'JT19', name: '개통 준비', duration: 2, cost: 30}
|
|
] AS row
|
|
CREATE (n:JobType {id: row.id, name: row.name, standard_duration: row.duration, standard_cost: row.cost});
|
|
|
|
UNWIND [
|
|
{id: 'OT01', name: '굴착기', category: '장비'},
|
|
{id: 'OT02', name: '숏크리트 펌프', category: '장비'},
|
|
{id: 'OT03', name: '강지보재', category: '자재'},
|
|
{id: 'OT04', name: '방수시트', category: '자재'},
|
|
{id: 'OT05', name: '콘크리트 믹서', category: '장비'},
|
|
{id: 'OT06', name: '철근', category: '자재'},
|
|
{id: 'OT07', name: '조명등', category: '자재'},
|
|
{id: 'OT08', name: '환풍기', category: '장비'},
|
|
{id: 'OT09', name: 'TBM', category: '장비'},
|
|
{id: 'OT10', name: '세그먼트', category: '자재'},
|
|
{id: 'OT11', name: '그라우트 믹서', category: '장비'},
|
|
{id: 'OT12', name: '케이블', category: '자재'},
|
|
{id: 'OT13', name: 'CCTV', category: '장비'},
|
|
{id: 'OT14', name: '소화기', category: '자재'},
|
|
{id: 'OT15', name: '차선도색기', category: '장비'},
|
|
{id: 'OT16', name: '숏크리트', category: '자재'}
|
|
] AS row
|
|
CREATE (n:ObjectType {id: row.id, name: row.name, category: row.category});
|
|
|
|
UNWIND [
|
|
{id: 1, name: '터널 입구 굴착', base_duration: 10, base_cost: 150, job_no: 'JOB-001'},
|
|
{id: 2, name: '1차 숏크리트 타설', base_duration: 5, base_cost: 80, job_no: 'JOB-002'},
|
|
{id: 3, name: '강지보 설치', base_duration: 7, base_cost: 120, job_no: 'JOB-003'},
|
|
{id: 4, name: '2차 숏크리트 타설', base_duration: 5, base_cost: 80, job_no: 'JOB-004'},
|
|
{id: 5, name: '방수 및 배수시설 설치', base_duration: 8, base_cost: 100, job_no: 'JOB-005'},
|
|
{id: 6, name: '철근 조립', base_duration: 6, base_cost: 90, job_no: 'JOB-006'},
|
|
{id: 7, name: '내부 라이닝 콘크리트 타설', base_duration: 12, base_cost: 200, job_no: 'JOB-007'},
|
|
{id: 8, name: '조명 및 환기시설 설치', base_duration: 9, base_cost: 110, job_no: 'JOB-008'},
|
|
{id: 9, name: '안전시설물 설치', base_duration: 4, base_cost: 60, job_no: 'JOB-009'},
|
|
{id: 10, name: '포장 및 차선 도색', base_duration: 7, base_cost: 95, job_no: 'JOB-010'},
|
|
{id: 11, name: 'TBM 준비', base_duration: 15, base_cost: 500, job_no: 'JOB-011'},
|
|
{id: 12, name: 'TBM 굴진', base_duration: 30, base_cost: 1200, job_no: 'JOB-012'},
|
|
{id: 13, name: '세그먼트 조립', base_duration: 25, base_cost: 800, job_no: 'JOB-013'},
|
|
{id: 14, name: '그라우팅', base_duration: 10, base_cost: 150, job_no: 'JOB-014'},
|
|
{id: 15, name: 'TBM 해체 및 반출', base_duration: 12, base_cost: 300, job_no: 'JOB-015'},
|
|
{id: 16, name: '전기/통신 케이블 설치', base_duration: 8, base_cost: 130, job_no: 'JOB-016'},
|
|
{id: 17, name: 'CCTV 및 VMS 설치', base_duration: 5, base_cost: 70, job_no: 'JOB-017'},
|
|
{id: 18, name: '소방시설 설치', base_duration: 6, base_cost: 85, job_no: 'JOB-018'},
|
|
{id: 19, name: '최종 점검', base_duration: 3, base_cost: 50, job_no: 'JOB-019'},
|
|
{id: 20, name: '개통 준비', base_duration: 2, base_cost: 30, job_no: 'JOB-020'}
|
|
] AS row
|
|
CREATE (n:Job {id: row.id, name: row.name, base_duration: row.base_duration, base_cost: row.base_cost, job_no: row.job_no});
|
|
|
|
UNWIND [
|
|
{id: 'OBJ01', name: '굴착기-A01', obj_no: 'EQ-001'},
|
|
{id: 'OBJ02', name: '숏크리트 펌프-A', obj_no: 'EQ-002'},
|
|
{id: 'OBJ03', name: '강지보재-L100', obj_no: 'MTR-001'},
|
|
{id: 'OBJ04', name: '방수시트-S20', obj_no: 'MTR-002'},
|
|
{id: 'OBJ05', name: '콘크리트 믹서-T1', obj_no: 'EQ-003'},
|
|
{id: 'OBJ06', name: '철근-D16', obj_no: 'MTR-003'},
|
|
{id: 'OBJ07', name: '조명등-LED-1', obj_no: 'MTR-004'},
|
|
{id: 'OBJ08', name: '환풍기-F1', obj_no: 'EQ-004'},
|
|
{id: 'OBJ09', name: 'TBM-Shield-1', obj_no: 'EQ-005'},
|
|
{id: 'OBJ10', name: '세그먼트-A타입', obj_no: 'MTR-05'},
|
|
{id: 'OBJ11', name: '그라우트 믹서-G1', obj_no: 'EQ-006'},
|
|
{id: 'OBJ12', name: '전원 케이블-HV-1', obj_no: 'MTR-006'},
|
|
{id: 'OBJ13', name: 'CCTV-001', obj_no: 'EQ-007'},
|
|
{id: 'OBJ14', name: '소화기-P1', obj_no: 'MTR-007'},
|
|
{id: 'OBJ15', name: '차선도색기-Y1', obj_no: 'EQ-008'},
|
|
{id: 'OBJ16', name: '숏크리트-Batch1', obj_no: 'MTR-008'},
|
|
{id: 'OBJ17', name: '숏크리트-Batch2', obj_no: 'MTR-009'}
|
|
] AS row
|
|
CREATE (n:Object {id: row.id, name: row.name, obj_no: row.obj_no});
|
|
|
|
UNWIND [
|
|
{id: 'CS_APP', type: 'Construction', status: 'APPROVED'},
|
|
{id: 'CS_CON', type: 'Construction', status: 'CONFIRMED'},
|
|
{id: 'CS_PLN', type: 'Construction', status: 'PLANNING'},
|
|
{id: 'PS_EXE', type: 'Project', status: 'EXECUTING'},
|
|
{id: 'PS_PLN', type: 'Project', status: 'PLANNING'},
|
|
{id: 'PM_PAID', type: 'Payment', status: 'PAID'},
|
|
{id: 'PM_APL', type: 'Payment', status: 'APPLIED'},
|
|
{id: 'PM_NON', type: 'Payment', status: 'NONE'},
|
|
{id: 'QS_APP', type: 'Quality', status: 'APPROVED'},
|
|
{id: 'QS_CON', type: 'Quality', status: 'CONFIRMED'},
|
|
{id: 'QS_PLN', type: 'Quality', status: 'PLANNING'},
|
|
{id: 'SS_APP', type: 'Safety', status: 'APPROVED'},
|
|
{id: 'SS_CON', type: 'Safety', status: 'CONFIRMED'},
|
|
{id: 'SS_PLN', type: 'Safety', status: 'PLANNING'}
|
|
] AS row
|
|
CREATE (n:MgmtStatus {id: row.id, type: row.type, status: row.status});
|
|
|
|
// Scenario Nodes
|
|
UNWIND [
|
|
{id: 'base', description: '기본 공정 시나리오'},
|
|
{id: 'what-if-1', description: 'TBM 굴진 지연 가정 시나리오'}
|
|
] AS row
|
|
CREATE (n:Scenario {id: row.id, description: row.description});
|
|
|
|
// MODIFIES Relationships (for what-if-1 scenario)
|
|
UNWIND [
|
|
{scenario_id: 'what-if-1', job_id: 12, new_duration: 50, new_cost: 1500}
|
|
] AS delta
|
|
MATCH (s:Scenario {id: delta.scenario_id})
|
|
MATCH (j:Job {id: delta.job_id})
|
|
CREATE (s)-[:MODIFIES {new_duration: delta.new_duration, new_cost: delta.new_cost}]->(j);
|
|
|
|
UNWIND [
|
|
{from: 1, to: 'JT01'}, {from: 2, to: 'JT02'}, {from: 3, to: 'JT03'}, {from: 4, to: 'JT02'}, {from: 5, to: 'JT04'},
|
|
{from: 6, to: 'JT05'}, {from: 7, to: 'JT06'}, {from: 8, to: 'JT07'}, {from: 9, to: 'JT08'}, {from: 10, to: 'JT09'},
|
|
{from: 11, to: 'JT10'}, {from: 12, to: 'JT11'}, {from: 13, to: 'JT12'}, {from: 14, to: 'JT13'}, {from: 15, to: 'JT14'},
|
|
{from: 16, to: 'JT15'}, {from: 17, to: 'JT16'}, {from: 18, to: 'JT17'}, {from: 19, to: 'JT18'}, {from: 20, to: 'JT19'}
|
|
] AS rel
|
|
MATCH (from:Job {id: rel.from})
|
|
MATCH (to:JobType {id: rel.to})
|
|
CREATE (from)-[:IS_A]->(to);
|
|
|
|
UNWIND [
|
|
{from: 'OBJ01', to: 'OT01'}, {from: 'OBJ02', to: 'OT02'}, {from: 'OBJ03', to: 'OT03'}, {from: 'OBJ04', to: 'OT04'},
|
|
{from: 'OBJ05', to: 'OT05'}, {from: 'OBJ06', to: 'OT06'}, {from: 'OBJ07', to: 'OT07'}, {from: 'OBJ08', to: 'OT08'},
|
|
{from: 'OBJ09', to: 'OT09'}, {from: 'OBJ10', to: 'OT10'}, {from: 'OBJ11', to: 'OT11'}, {from: 'OBJ12', to: 'OT12'},
|
|
{from: 'OBJ13', to: 'OT13'}, {from: 'OBJ14', to: 'OT14'}, {from: 'OBJ15', to: 'OT15'}, {from: 'OBJ16', to: 'OT16'},
|
|
{from: 'OBJ17', to: 'OT16'}
|
|
] AS rel
|
|
MATCH (from:Object {id: rel.from})
|
|
MATCH (to:ObjectType {id: rel.to})
|
|
CREATE (from)-[:IS_A]->(to);
|
|
|
|
UNWIND [
|
|
{from: 1, to: 2}, {from: 2, to: 3}, {from: 3, to: 4}, {from: 4, to: 5}, {from: 5, to: 6}, {from: 6, to: 7},
|
|
{from: 7, to: 8}, {from: 8, to: 9}, {from: 9, to: 10}, {from: 11, to: 12}, {from: 12, to: 13}, {from: 13, to: 14},
|
|
{from: 14, to: 15}, {from: 15, to: 16}, {from: 16, to: 17}, {from: 17, to: 18}, {from: 18, to: 19},
|
|
{from: 19, to: 20}
|
|
] AS rel
|
|
MATCH (from:Job {id: rel.from})
|
|
MATCH (to:Job {id: rel.to})
|
|
CREATE (from)-[:PRECEDES]->(to);
|
|
|
|
UNWIND [
|
|
{from: 1, to: 'OBJ01', quantity: 1, unit: 'unit'},
|
|
{from: 2, to: 'OBJ02', quantity: 1, unit: 'unit'},
|
|
{from: 2, to: 'OBJ16', quantity: 50, unit: 'ton'},
|
|
{from: 3, to: 'OBJ03', quantity: 100, unit: 'meter'},
|
|
{from: 4, to: 'OBJ02', quantity: 1, unit: 'unit'},
|
|
{from: 4, to: 'OBJ17', quantity: 40, unit: 'ton'}
|
|
] AS rel
|
|
MATCH (from:Job {id: rel.from})
|
|
MATCH (to:Object {id: rel.to})
|
|
CREATE (from)-[:REQUIRES {quantity: rel.quantity, unit: rel.unit}]->(to);
|
|
|
|
UNWIND [
|
|
{from: 1, to: 'CS_APP'}, {from: 1, to: 'PS_EXE'}, {from: 1, to: 'PM_PAID'}, {from: 1, to: 'QS_APP'}, {from: 1, to: 'SS_APP'},
|
|
{from: 2, to: 'CS_APP'}, {from: 2, to: 'PS_EXE'}, {from: 2, to: 'PM_PAID'}, {from: 2, to: 'QS_APP'}, {from: 2, to: 'SS_APP'},
|
|
{from: 3, to: 'CS_CON'}, {from: 3, to: 'PS_EXE'}, {from: 3, to: 'PM_APL'}, {from: 3, to: 'QS_CON'}, {from: 3, to: 'SS_CON'},
|
|
{from: 4, to: 'CS_PLN'}, {from: 4, to: 'PS_PLN'}, {from: 4, to: 'PM_NON'}, {from: 4, to: 'QS_PLN'}, {from: 4, to: 'SS_PLN'},
|
|
{from: 5, to: 'CS_PLN'}, {from: 5, to: 'PS_PLN'}, {from: 5, to: 'PM_NON'}, {from: 5, to: 'QS_PLN'}, {from: 5, to: 'SS_PLN'}
|
|
] AS rel
|
|
MATCH (from:Job {id: rel.from})
|
|
MATCH (to:MgmtStatus {id: rel.to})
|
|
CREATE (from)-[:HAS_STATUS]->(to);
|