Files
memgraph-poc/import_generated_data.cypher
2025-11-04 16:45:03 +09:00

89 lines
4.6 KiB
Plaintext

// Comprehensive Data Generation Script
// This script deletes all existing data, creates JobTypes from the provided list,
// generates multiple Job instances for each type, and wires them into different scenarios.
// 1. Clean up the database
MATCH (n) DETACH DELETE n;
// 2. Create Indexes
CREATE INDEX ON :JobType(id);
CREATE INDEX ON :Job(id);
CREATE INDEX ON :Scenario(id);
// 3. Create JobType Nodes from the provided examples
UNWIND [
{id: 'JOB1', name: '전단면굴착1#제어발파_굴진장3m초과발파'},
{id: 'JOB2', name: '막장면1#시공계획서작성'},
{id: 'JOB3', name: '막장면1#시공측량'},
{id: 'JOB4', name: '막장면1#측점검측'},
{id: 'JOB5', name: '막장면1#암판정시행'},
{id: 'JOB6', name: '막장면1#천공준비'},
{id: 'JOB7', name: '막장면1#막장면천공'},
{id: 'JOB8', name: '막장면1#막장면천공시행'},
{id: 'JOB9', name: '전단면굴착1#발파준비'},
{id: 'JOB10', name: '전단면굴착1#발파작업'},
{id: 'JOB11', name: '전단면굴착1#환기시행'},
{id: 'JOB12', name: '전단면굴착1#측량및마킹'},
{id: 'JOB13', name: '버력1#버력처리'},
{id: 'JOB14', name: '버력1#부석정리'},
{id: 'JOB15', name: '버력1#버력처리준비'},
{id: 'JOB16', name: '버력1#버력처리시행'},
{id: 'JOB17', name: '버력1#부석제거뒷정리'},
{id: 'JOB18', name: '버력1#운반차입환'},
{id: 'JOB19', name: '강섬유보강숏크리트1#본선부설치'},
{id: 'JOB20', name: '강섬유보강숏크리트1#뜬돌제거'},
{id: 'JOB21', name: '강섬유보강숏크리트1#측량및여굴량확인'},
{id: 'JOB22', name: '강섬유보강숏크리트1#Sealing시행'},
{id: 'JOB23', name: '강섬유보강숏크리트1_1#본선부설치'},
{id: 'JOB24', name: '강섬유보강숏크리트1_1#타설준비'},
{id: 'JOB25', name: '강섬유보강숏크리트1_1#바닥정리및면정리'},
{id: 'JOB26', name: '강섬유보강숏크리트1_1#뿜어붙이기'},
{id: 'JOB27', name: '강섬유보강숏크리트1_1#잔재제거'},
{id: 'JOB28', name: '강섬유보강숏크리트1_1#장비점검'},
{id: 'JOB29', name: '전단면굴착2#제어발파_굴진장3m초과발파'}
] AS jt
CREATE (:JobType {id: jt.id, name: jt.name, base_duration: 10 + toInteger(substring(jt.id, 3)), base_cost: 100 + (10 * toInteger(substring(jt.id, 3)))});
// 4. Create PRECEDES relationships between JobTypes (The "Absolute Rules")
UNWIND [
{from: 'JOB2', to: 'JOB3'}, {from: 'JOB3', to: 'JOB4'}, {from: 'JOB4', to: 'JOB5'},
{from: 'JOB5', to: 'JOB6'}, {from: 'JOB6', to: 'JOB7'}, {from: 'JOB7', to: 'JOB8'},
{from: 'JOB8', to: 'JOB9'}, {from: 'JOB9', to: 'JOB10'}, {from: 'JOB10', to: 'JOB11'},
{from: 'JOB11', to: 'JOB12'}, {from: 'JOB12', to: 'JOB13'}, {from: 'JOB12', to: 'JOB14'}, // Fork
{from: 'JOB14', to: 'JOB15'}, {from: 'JOB15', to: 'JOB16'}, {from: 'JOB16', to: 'JOB17'},
{from: 'JOB17', to: 'JOB18'}, {from: 'JOB18', to: 'JOB19'}, {from: 'JOB18', to: 'JOB20'}, // Fork
{from: 'JOB20', to: 'JOB21'}, {from: 'JOB21', to: 'JOB22'}, {from: 'JOB22', to: 'JOB23'},
{from: 'JOB22', to: 'JOB24'}, // Fork
{from: 'JOB24', to: 'JOB25'}, {from: 'JOB25', to: 'JOB26'}, {from: 'JOB26', to: 'JOB27'},
{from: 'JOB27', to: 'JOB28'}, {from: 'JOB28', to: 'JOB29'}
] AS rel
MATCH (from:JobType {id: rel.from}), (to:JobType {id: rel.to})
CREATE (from)-[:PRECEDES]->(to);
// 5. Generate Job Instances (e.g., 2 instances per JobType)
MATCH (jt:JobType)
UNWIND range(1, 2) AS i
CREATE (:Job {
id: jt.id + '-' + i,
name: jt.name + ' (Instance ' + i + ')',
base_duration: jt.base_duration,
base_cost: jt.base_cost
})-[:IS_A]->(jt);
// 6. Create Scenarios
// Scenario A: Simple Linear Process (Always use instance 1)
CREATE (:Scenario {id: 'linear-process', description: '단순 순차 공정 시나리오'});
MATCH (from_jt:JobType)-[:PRECEDES]->(to_jt:JobType)
MATCH (from_j:Job {id: from_jt.id + '-1'}), (to_j:Job {id: to_jt.id + '-1'})
CREATE (from_j)-[:PRECEDES {scenario: 'linear-process'}]->(to_j);
// Scenario B: Parallel Process (Use instance 2 and model forks)
CREATE (:Scenario {id: 'parallel-process', description: '병렬 공정 시나리오'});
MATCH (from_jt:JobType)-[:PRECEDES]->(to_jt:JobType)
MATCH (from_j:Job {id: from_jt.id + '-2'}), (to_j:Job {id: to_jt.id + '-2'})
CREATE (from_j)-[:PRECEDES {scenario: 'parallel-process'}]->(to_j);
// Add a specific modification for a scenario to test delta logic
CREATE (:Scenario {id: 'what-if-parallel', description: '병렬 공정 중 JOB16 지연 가정'})-[:MODIFIES {new_duration: 99}]->(:Job {id: 'JOB16-2'});