From 40c2c237748bd1aadcbaf895f7f10fd216ce6eff Mon Sep 17 00:00:00 2001 From: Daniel Quathamer Date: Sat, 18 Jun 2022 09:33:55 +0200 Subject: [PATCH] Neue Konstante COSTAGE_TSG_GENERATE auswerten #10 --- src-modules/module/costage/conf/costage.xml | 4 +- .../costage_st_studien_aggr_fuellen.sql | 155 +++++++++----- .../costage/rohdaten/costage_unload.xml | 4 +- .../module/costage/rohdaten/sos_v1_unload.x | 132 ++++++++++++ .../module/costage/rohdaten/sos_v1_unload.xml | 190 ++++++++++++++++++ .../schluesseltabellen/konstanten_fuellen.sql | 127 ++++++++++++ 6 files changed, 555 insertions(+), 57 deletions(-) create mode 100755 src-modules/module/costage/rohdaten/sos_v1_unload.x create mode 100644 src-modules/module/costage/rohdaten/sos_v1_unload.xml create mode 100755 src-modules/module/costage/schluesseltabellen/konstanten_fuellen.sql diff --git a/src-modules/module/costage/conf/costage.xml b/src-modules/module/costage/conf/costage.xml index 4a65ea3..7c44325 100644 --- a/src-modules/module/costage/conf/costage.xml +++ b/src-modules/module/costage/conf/costage.xml @@ -1,5 +1,4 @@ - @@ -658,9 +657,10 @@ rightname="CS_BIA_STANDARDREPORTS_ADMIN[CO]" /> - + + diff --git a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql index 0d0cc40..7e4fa6d 100644 --- a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql +++ b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql @@ -67,6 +67,7 @@ and ${COSTAGE_STUDENT_FILTER} --group by 1,2,3,4,5,6,7,8,9,10,11,12,13 ; + update tmp_studien set hrst=H.hoererstatus_kb from costage_st_hoererstatus H @@ -123,44 +124,56 @@ and ST.st_studstamm_nr=tmp_studien2.st_studstamm_nr and M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr and tmp_studien2.studiengangs_typ_kb ='TSG' ; -update tmp_studien2 set studienstatustyp=null; +<#if K_COSTAGE_TSG_GENERATE == 1> ---Ermittlung status bei TSG aus MSG: -update tmp_studien2 set studienstatustyp=T.studienstatustyp +--Start- und Endsemester aller MSG pro Student: +drop table if exists tmp_studien_msg; +select T.st_studiengang_nr as st_studiengang_nr_msg, +T.st_studstamm_nr, +min(T.semester) as startsemester, +max(T.semester) as endsemester +into temp tmp_studien_msg from tmp_studien T -where T.st_studiengang_nr=tmp_studien2.st_studiengang_nr_msg -and T.st_studstamm_nr=tmp_studien2.st_studstamm_nr -and T.st_sem_nr=tmp_studien2.st_sem_nr +where T.studienstatustyp in ('B','E','I','X') --nur tatsächlich eingeschrieben +and T.studiengangs_typ_kb ='MSG'--enthält die MSG and T.status_historie=1 -and tmp_studien2.studiengangs_typ_kb ='TSG' +group by 1,2 ; - - -drop table if exists tmp_fehlend; - ---fehlende TSG nachtragen: -select T.st_studium_nr, -T.studienstatustyp, -T.st_studienstatus_nr, -T.st_studiengang_nr_msg, -T.st_sem_nr, -T.st_studstamm_nr, -T.beginn_datum, -T.gueltig_ab -into temp tmp_fehlend -from tmp_studien T -left outer join tmp_studien2 T2 -on (T2.st_studiengang_nr_msg=T.st_studiengang_nr +--Verknüpfung mit TSG über alle möglichen Semester: +drop table if exists tmp_studien_msg_tsg; +select distinct +M.st_studiengang_nr_msg, +T.st_studiengang_nr as st_studiengang_nr_tsg, +M.st_studstamm_nr, +E.semester_tid as semester, +E.st_sem_nr, +M.startsemester, +M.endsemester +into temp tmp_studien_msg_tsg +from tmp_studien_msg M, tmp_studien2 T,costage_st_semester E +where M.st_studiengang_nr_msg=T.st_studiengang_nr_msg +and M.st_studstamm_nr=T.st_studstamm_nr +and T.semester between M.startsemester and M.endsemester +and E.semester_tid between M.startsemester and M.endsemester +and T.studiengangs_typ_kb ='TSG' +; +--nun fehlende Datensätze ermitteln: +drop table if exists tmp_studien_msg_tsg_fehlend; +select T.* + into temp tmp_studien_msg_tsg_fehlend +from tmp_studien_msg_tsg T --enthält alle tsg +left outer join tmp_studien2 T2 --enthält die TSG +on (T2.st_studiengang_nr_msg=T.st_studiengang_nr_msg +and T2.st_studiengang_nr=T.st_studiengang_nr_tsg and T2.st_studstamm_nr=T.st_studstamm_nr and T2.studiengangs_typ_kb ='TSG' -and T.st_sem_nr=T2.st_sem_nr) -where T2.st_studstamm_nr is null -and T.studienstatustyp in ('B','E','I') --nur tatsächlich eingeschrieben ---and T.st_sem_nr=180 +--and T2.st_studium_nr=T.st_studium_nr +and T.semester=T2.semester) +where T2.st_studstamm_nr is null ; - +--fehlende Semester nachtragen: insert into tmp_studien2(semester, st_absz_nr, st_skz_nr, @@ -171,10 +184,10 @@ st_studium_nr, st_studstamm_nr, st_studiengang_nr, studiengangs_typ_kb, -studienstatustyp, -st_studienstatus_nr, -beginn_datum, -gueltig_ab, +--studienstatustyp, +--st_studienstatus_nr, +--beginn_datum, +--gueltig_ab, matrikelnummer, geschlecht, ca12_staat, @@ -190,20 +203,21 @@ tsg_generated, primaerflag, hzb_art, fachsemester) -select E.semester_tid, + +select M.semester, st_absz_nr, S.st_skz_nr, S.studiengangs_identifikator, S.studiengangs_bezeichnung, -T.st_sem_nr, +M.st_sem_nr, S.st_studium_nr, S.st_studstamm_nr, S.st_studiengang_nr, S.studiengangs_typ_kb, -T.studienstatustyp, -T.st_studienstatus_nr, -T.beginn_datum, -T.gueltig_ab, +--M.studienstatustyp_msg, +--M.st_studienstatus_nr_msg, +--M.beginn_datum, +--M.gueltig_ab, S.matrikelnummer, S.geschlecht, S.ca12_staat, @@ -214,19 +228,45 @@ S.st_studiengang_nr_msg, S.st_studiengang_nr_tsg, S.hrst, S.hssem, -null::char(10) as statustyp_tsg, +null::char(10) as statustyp_tsg, 1 as tsg_generated, S.primaerflag, S.hzb_art, max(S.fachsemester) -from tmp_fehlend T, tmp_studien2 S,costage_st_semester E -where T.st_studiengang_nr_msg=S.st_studiengang_nr_msg -and T.st_studstamm_nr=S.st_studstamm_nr +from tmp_studien_msg_tsg_fehlend M, tmp_studien2 S --,costage_st_semester E +where M.st_studiengang_nr_msg=S.st_studiengang_nr_msg +and M.st_studiengang_nr_tsg=S.st_studiengang_nr +and M.st_studstamm_nr=S.st_studstamm_nr and S.studiengangs_typ_kb ='TSG' -and T.st_sem_nr != S.st_sem_nr -and E.st_sem_nr=T.st_sem_nr -group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28 +and M.semester != S.semester +--and E.st_sem_nr=M.st_sem_nr +--and S.st_studiengang_nr_msg=34454 +--and S.studiengangs_bezeichnung='Bildungswissenschaften' +--and M.semester=20211 +group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24 --, 25,26,27,28 +; + +drop table tmp_studien_msg_tsg_fehlend; +drop table tmp_studien_msg_tsg; +drop table tmp_studien_msg; + + + + +-------------------------------------------------------------------- + +--statustyp nachladen: +update tmp_studien2 set studienstatustyp=S.studienstatustyp +from tmp_studien S +where tmp_studien2.st_studiengang_nr_msg=S.st_studiengang_nr +and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr +and S.studiengangs_typ_kb ='MSG' +and tmp_studien2.tsg_generated=1 +and tmp_studien2.st_sem_nr=S.st_sem_nr +and S.status_historie=1 + ; + --statustyp_stg nachladen: update tmp_studien2 set statustyp_tsg=S.statustyp_tsg from tmp_studien S @@ -241,8 +281,6 @@ and tmp_studien2.fachsemester=S.fachsemester drop table tmp_studien; - - --Ermittlung fach_nr: update tmp_studien2 set fach_nr=M.studienfach_sortierung from costage_st_studiengaenge_mtsg M @@ -267,10 +305,20 @@ from cifx where key=400 and apnr=tmp_studien2.studienstatustyp ); +-- update tmp_studien2 set kz_rueck_beur_ein=(select val(astat) +-- from cifx where key=400 +-- and apnr=tmp_studien2.statustyp_tsg +-- ) +-- where kz_rueck_beur_ein is null; + update tmp_studien2 -set hssem=1 where kz_rueck_beur_ein=1; +set hssem=H.anzahl_hochschulsemester +from costage_st_hochschulsemester H +where H.st_studstamm_nr=tmp_studien2.st_studstamm_nr +and H.st_sem_nr=tmp_studien2.st_sem_nr ; + update tmp_studien2 set studiengang_nr=1 where primaerflag=1; --Wenn Studium mit Primärflag ein TSG ist, wird die studiengang_nr auf alle anderen TSG des MSG ausgedehnt: @@ -375,7 +423,11 @@ select st_studium_nr, dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by primaerflag desc,fach_nr) end) as fach_nr, - unikey, +--TODO probieren: +-- ROW_NUMBER() over (partition by semester, st_studstamm_nr,studiengang_nr +-- order by primaerflag desc,fach_nr) +-- end)+1 as fach_nr, + unikey, beginn_datum as anfdat, (case when studienstatustyp not in ('Z','X') then null::date else gueltig_ab end) as ruebeudat, @@ -530,7 +582,4 @@ and A.st_adresse_typ='H' drop table tmp_studien2; drop table tmp_primaer_msg; drop table temp_tmp_studien2; -drop table tmp_fehlend; - - diff --git a/src-modules/module/costage/rohdaten/costage_unload.xml b/src-modules/module/costage/rohdaten/costage_unload.xml index 7fe6fd8..a377316 100644 --- a/src-modules/module/costage/rohdaten/costage_unload.xml +++ b/src-modules/module/costage/rohdaten/costage_unload.xml @@ -490,6 +490,7 @@ FROM px_bw_zulassungsarten_v SELECT nr, name, statistik_code, + land_kfz_kennzeichen_subregion, st_land_reg_nr FROM px_land_subregionen_v ; @@ -621,13 +622,12 @@ FROM px_st_ersthochschulen_v SELECT H.st_studstamm_nr, H.st_sem_nr, H.anzahl_hochschulsemester -FROM px_st_hochschulsemester_v H,px_st_semester_v S +FROM sx_st_hochschulsemester_v H,px_st_semester_v S where S.st_sem_nr=H.st_sem_nr and H.anzahl_hochschulsemester >0 and to_number('20' || replace(replace(S.semester_id,'S','1'),'W','2')) >= $COSTAGE_start_st_sem and current_date+365 > S.semester_anfang and extract(year from S.semester_anfang) > 2000 -and 1=0 ; ]]> diff --git a/src-modules/module/costage/rohdaten/sos_v1_unload.x b/src-modules/module/costage/rohdaten/sos_v1_unload.x new file mode 100755 index 0000000..1b08e42 --- /dev/null +++ b/src-modules/module/costage/rohdaten/sos_v1_unload.x @@ -0,0 +1,132 @@ +#!/bin/bash +#Extraction Script for SuperX. +#Bitte nicht ändern, diese Datei ist automatisch generiert. + +SRC_PFAD=$SOS_LOAD_PFAD +if [ "$SRC_PFAD" = "" ] +then +SRC_PFAD=. +fi + +. ./$SRC_PFAD/SOS_ENV + + +if [ "$outFormat" = "" ] +then +outFormat=txt +fi + +DATUM=`cat $SRC_PFAD/superx.datum` +ERR=sos_v1_unload.err + +HEUTE=`date +'%d.%m.%Y'` + +echo "Letztes Update-Datum: " $DATUM >$ERR +echo "DATABASE: $DATABASE" >>$ERR +echo "VERSION: $VERSION" >>$ERR +echo "SX_CLIENT: $SX_CLIENT" >>$ERR +echo "1.2b^"$HEUTE"^" >$SRC_PFAD/unl/superx_unload_version.unl + +cd $SRC_PFAD >>$ERR 2>&1 + +CP=".:$JDBC_CLASSPATH:$XML_CLASSPATH" + + +cat /dev/null >unload_params.txt + + +if [ "$SOS_UNL_COMPLETE" = "" ] +then +SOS_UNL_COMPLETE="true" +export SOS_UNL_COMPLETE +fi +echo "Parameter SOS_UNL_COMPLETE: $SOS_UNL_COMPLETE" >>$ERR +echo "\$SOS_UNL_COMPLETE=$SOS_UNL_COMPLETE" >>unload_params.txt + + +if [ "$VERSION" = "" ] +then +VERSION="13" +export VERSION +fi +echo "Parameter VERSION: $VERSION" >>$ERR +echo "\$VERSION=$VERSION" >>unload_params.txt + + +if [ "$start_stud_sem" = "" ] +then +start_stud_sem="19911" +export start_stud_sem +fi +echo "Parameter start_stud_sem: $start_stud_sem" >>$ERR +echo "\$start_stud_sem=$start_stud_sem" >>unload_params.txt + + +if [ "$start_pruef_sem" = "" ] +then +start_pruef_sem="19911" +export start_pruef_sem +fi +echo "Parameter start_pruef_sem: $start_pruef_sem" >>$ERR +echo "\$start_pruef_sem=$start_pruef_sem" >>unload_params.txt + + +if [ "$SOS_UNL_ANON" = "" ] +then +SOS_UNL_ANON="false" +export SOS_UNL_ANON +fi +echo "Parameter SOS_UNL_ANON: $SOS_UNL_ANON" >>$ERR +echo "\$SOS_UNL_ANON=$SOS_UNL_ANON" >>unload_params.txt + + +if [ "$POS_PNR" = "" ] +then +POS_PNR="0" +export POS_PNR +fi +echo "Parameter POS_PNR: $POS_PNR" >>$ERR +echo "\$POS_PNR=$POS_PNR" >>unload_params.txt + + +if [ "$LAB_FILTER" = "" ] +then +LAB_FILTER=" AND (lab.panerk is null or lab.panerk != 'J') " +export LAB_FILTER +fi +echo "Parameter LAB_FILTER: $LAB_FILTER" >>$ERR +echo "\$LAB_FILTER=$LAB_FILTER" >>unload_params.txt + + +if [ "$STUDENT_FILTER" = "" ] +then +STUDENT_FILTER=" AND 1=1 " +export STUDENT_FILTER +fi +echo "Parameter STUDENT_FILTER: $STUDENT_FILTER" >>$ERR +echo "\$STUDENT_FILTER=$STUDENT_FILTER" >>unload_params.txt + + +if [ "$STUDENT_SOSPOS_FILTER" = "" ] +then +STUDENT_SOSPOS_FILTER=" AND 1=1 " +export STUDENT_SOSPOS_FILTER +fi +echo "Parameter STUDENT_SOSPOS_FILTER: $STUDENT_SOSPOS_FILTER" >>$ERR +echo "\$STUDENT_SOSPOS_FILTER=$STUDENT_SOSPOS_FILTER" >>unload_params.txt + + +echo "Parameter SOURCESYSTEM: $SOURCESYSTEM" >>$ERR +echo "\$SOURCESYSTEM=$SOURCESYSTEM" >>unload_params.txt + +#jdbc zum Entladen +if [ "$SX_CLIENT" = "jdbc" ] +then +java $JAVA_OPTS -cp $CP de.superx.bin.SxExtractor -logger:$LOGGER_PROPERTIES -dbproperties:$DB_PROPERTIES -xml:sos_v1_unload.xml -outFormat:$outFormat -delim:$DBDELIMITER -header:$header -database:$DATABASE -version:$VERSION -unload_params:unload_params.txt >>$ERR 2>&1 + +echo "Unload v1 beendet" +exit 0 + +fi + + diff --git a/src-modules/module/costage/rohdaten/sos_v1_unload.xml b/src-modules/module/costage/rohdaten/sos_v1_unload.xml new file mode 100644 index 0000000..c948fea --- /dev/null +++ b/src-modules/module/costage/rohdaten/sos_v1_unload.xml @@ -0,0 +1,190 @@ + + +SOS-Modul + + +Sollen alle Datensätze entladen werden, oder nur die geänderten?(true,false). +SOSPOS-Version, möglich sind 6,7,8,9,10,11,12,13. Bei HISinOne wird sie automatisch gesetzt. +Ab welchem Semester sollen Studierende entladen werden? z.B. 20011 für SS 2001 +Ab welchem Semester sollen Prüfungen entladen werden? z.B. 20021 für SS 2002 +Matrikelnummern pseudonymisieren (true, false). Muss bei Datenquelle HISinOne auf "false" gesetzt sein. +Welche Prüfungsnummern (Vor- Hauptprüfungen) sollen entladen werden? Wird bei Datenquelle HISinOne nicht ausgewertet. +Weiterer Filter für Einzelprüfungen. Standardmäßig werden anerkannte Prüfungen nicht entladen. Wird bei Datenquelle HISinOne nicht ausgewertet. +Filter für Studierende, um z.B. Teststudenten nicht zu entladen (nur HISinOne). +Filter für Studierende, um z.B. Teststudenten nicht zu entladen (nur sospos/co). + + + + + + + + wichtige Konstanten aus SOS entladen, z.B. HISSOS-Version. + + + + + + + + wichtige Konstanten aus SOS entladen, z.B. HISSOS-Version. + + += $start_stud_sem + + ; + +]]> + + + + +Studi-Sätze aus SOS. Die KFZ-Kennzeichen werden erst in SuperX umgeschlüsselt. + + += $start_stud_sem +; + +]]> + + + + +stg-Sätze aus sos + + += $start_stud_sem +; +]]> + + + + +Beendigung + + + + + + + diff --git a/src-modules/module/costage/schluesseltabellen/konstanten_fuellen.sql b/src-modules/module/costage/schluesseltabellen/konstanten_fuellen.sql new file mode 100755 index 0000000..6328f7e --- /dev/null +++ b/src-modules/module/costage/schluesseltabellen/konstanten_fuellen.sql @@ -0,0 +1,127 @@ +--freemarker template +<#if SQLdialect='Postgres'> +<#assign texttype="text" /> +<#else> +EXECUTE PROCEDURE IFX_ALLOW_NEWLINE('T'); +<#assign texttype="lvarchar" /> + +<#assign newline="' +'" /> + + +create table tmp_konstanten + ( + tid serial, + apnr integer, + beschreibung char(255), + defaultvalue integer, + description ${texttype}, + systeminfo_id integer, + doku_link varchar(255), + read_only integer, + wertebereich varchar(250), + ab_version varchar(10), + gruppe varchar(255), + sachgebiete_id integer + ); +insert into tmp_konstanten(apnr, +beschreibung, + defaultvalue, + description, + systeminfo_id, + doku_link, + read_only, + wertebereich, + ab_version, + gruppe, + sachgebiete_id) + values (1, +'COSTAGE_TSG_GENERATE', + 1, +'Teilstudiengänge Status aus MSG ausdehnen', + +310, + '',--doku link +0, +'1,Ja'|| ${newline} || '0,Nein', + '>0.3', + 'Datenquelle, Entladestartzeitpunkt, -umfang', + 310); + + + +--vorhandene Schlüssel Metadaten updaten: + +<#if SQLdialect='Postgres'> +--Postgres Dialekt: +update konstanten set defaultvalue=T.defaultvalue, +description=T.description, +systeminfo_id=T.systeminfo_id , +doku_link=T.doku_link, +read_only=T.read_only , +wertebereich=T.wertebereich, +ab_version=T.ab_version, +gruppe=T.gruppe , +sachgebiete_id=T.sachgebiete_id +from tmp_konstanten T +where T.beschreibung=konstanten.beschreibung; + +<#else> + +--Informix Dialekt: +update konstanten set (defaultvalue, + description, + systeminfo_id, + doku_link, + read_only, + wertebereich, + ab_version, + gruppe, + sachgebiete_id) + = ((select + defaultvalue, + description, + systeminfo_id, + doku_link, + read_only, + wertebereich, + ab_version, + gruppe, + sachgebiete_id +from tmp_konstanten T +where T.beschreibung=konstanten.beschreibung)); + + + + +delete from tmp_konstanten where beschreibung in (select beschreibung from konstanten); + + + +insert into konstanten( apnr ,beschreibung, + defaultvalue, + description, + systeminfo_id, + doku_link, + read_only, + wertebereich, + ab_version, + gruppe, + sachgebiete_id ) +select K.apnr , +K.beschreibung, + K.defaultvalue, + K.description, + K.systeminfo_id, + K.doku_link, + K.read_only, + K.wertebereich, + K.ab_version, + K.gruppe, + K.sachgebiete_id +from tmp_konstanten K, + tmp_hilf H; + + +drop table tmp_konstanten; +