ad hoc data-importing script

// background (this dictates the web console to execute the following lines of code in the background)
import app.*
def DIR  = 'C:/work4globaldb'//'/var/tmp'
def date = Date.parse('yyyyMMdd', '20120208')
def p, o
def parseDate = {d->
    try{
        if(!d)return null
        switch(d.size()) {
            case 4:return Date.parse('yyyy', d)
            case 6:return Date.parse('yyyyMM', d)
            case 8:return Date.parse('yyyyMMdd', d)
        }
    }catch(x){return null}
}
def storeObject = {objectContainer, object->
    object.id = UUID.randomUUID().toString()
    object.dateCreated = date
    object.createdBy = 'sam.ds.chen@gmail.com'
    objectContainer.store object        
}
System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: Starting..."
[//'GRS_PATIENT_DETAILS_2'// PATIENTs already imported
  'GRS_PATIENT_LABTEST'
, 'GRS_PATIENT_MH'
, 'GRS_PT_CMVIEW'
, 'GRS_PT_PE'
, 'GRS_PT_VS' ].each {view->
    System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: importing data from ${view}"
    def metadata = []
    new File("${DIR}/_final_${view}.dat").eachLine {line, n->
        def sv = line.split('\\|')
        def m = [:]
        if(n == 1) { // get metadata
            sv.each{metadata << it}    
        } else {
            sv.eachWithIndex{v,i->
                m[metadata[i]] = (v == 'null' ? null : v)    
            }
            switch(view) {
                case'GRS_PATIENT_DETAILS_2':
                    p = new Patient(
                        loc        : m.COUNTRY
                      , patientNo  : m.PT
                      , dob        : parseDate(m.DOBDATE)
                      , race       : m.RACE
                      , gender     : m.GENDER
                      , dataSource : "Oracle Clinical: ${m.STUDY} ${m.INVSITE}"
                      , study      : m.STUDY
                      , site       : m.INVSITE)
                    storeObject(oc, p)
                    break
                case'GRS_PATIENT_LABTEST':
                    p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
                    o = new LabTest(
                        patient     : p
                      , dcmDate     : parseDate(m.DCMDATE)
                      , cpEvent     : m.CPEVENT
                      , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
                      , labType     : m.LABTYPE
                      , testName    : m.TESTNAME
                      , lparm       : m.LPARM
                      , result      : m.RESULT
                      , unit        : m.UNIT
                      , significant : m.SIGNIFICANT
                      , resultStd   : m.RESULT_STD
                      , highRange   : m.HIGH_RANGE
                      , lowRange    : m.LOW_RANGE
                    )
                    if(p) {
                        p.hasLabTest = true
                        oc.store p   
                    }
                    storeObject(oc, o)
                    break
                case'GRS_PATIENT_MH':
                    p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
                    o = new MedicalHistory(
                        patient     : p
                      , dcmDate     : parseDate(m.DCMDATE)
                      , cpEvent     : m.CPEVENT
                      , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
                      , bodySystem  : m.BODY_SYSTEM
                      , medTerm     : m.MEDTERM
                      , startDate   : parseDate(m.START_DATE)
                      , active      : m.ACTIVE
                    )
                    if(p) {
                        p.hasMedicalHistory = true
                        oc.store p
                    }
                    storeObject(oc, o)
                    break
                case'GRS_PT_CMVIEW':
                    p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
                    o = new CmView(
                        patient     : p
                      , dcmDate     : parseDate(m.DCMDATE)
                      , cpEvent     : m.CPEVENT
                      , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
                      , cmTerm      : m.CMTERM
                      , startDate   : parseDate(m.START_DATE)
                      , stopDate    : parseDate(m.STOP_DATE)
                      , dose        : m.DOSE
                      , units       : m.UNITES
                      , frequency   : m.FREQUENCY
                      , indication  : m.INDICATION
                      , continuing  : m.CONTINUING
                    )
                    if(p) {
                        p.hasCmView = true
                        oc.store p
                    }
                    storeObject(oc, o)
                    break
                case'GRS_PT_PE':
                    p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
                    o = new Pe(
                        patient     : p
                      , dcmDate     : parseDate(m.DCMDATE)
                      , cpEvent     : m.CPEVENT
                      , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
                      , repeatSn    : m.REPEATSN
                      , bodySystem  : m.BODY_SYSTEM
                      , notDone     : m.NOTDONE
                      , result      : m.RESULT
                      , specify     : m.SPECIFY
                    )
                    if(p) {
                        p.hasPe = true
                        oc.store p
                    }
                    storeObject(oc, o)
                    break
                case'GRS_PT_VS':  
                    p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
                    o = new Vs(
                        patient         : p
                      , cpEvent         : m.CPEVENT
                      , timePeriod      : m.TIME_PERIOD
                      , height          : m.HEIGHT
                      , heightUnit      : m.HEIGHT_UNIT
                      , weight          : m.WEIGHT
                      , weightUnit      : m.WEIGHT_UNIT
                      , heartRate       : m.HEARTRATE
                      , hrUnit          : m.HR_UNIT
                      , respiration     : m.RESPIRATION
                      , respirationUnit : m.RESPIRATION_UNIT
                      , bodyTemperature : m.BODY_TEMPERATURE
                      , temperatureUnit : m.TEMPERATURE_UNIT
                      , bpSystolic      : m.BP_SYSTOLIC
                      , bpSysUnit       : m.BP_SYS_UNIT
                      , bpDiastolic     : m.BP_DIASTOLIC
                      , bpDiaUnit       : m.BP_DIA_UNIT
                      , bmi             : m.BMI
                    )
                    if(p) {
                        p.hasVs = true
                        oc.store p
                    }
                    storeObject(oc, o)
                    break    
            }
        }
           
    }
}
System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: Done."
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值