Ukutshintsha useto lwenkqubo ngelixa ugcina iiparamitha zobuqu

ukubuzwa

Omnye umbutho wezonyango uphumeze izisombululo ezisekelwe kwiiseva ze-Orthanc PACS kunye nomxhasi we-Radiant DICOM. Ngexesha lokuseta, sifumanise ukuba umxhasi ngamnye weDICOM kufuneka achazwe kwiiseva zePACS ngolu hlobo lulandelayo:

  • Igama lomthengi
  • Igama le-AE (kufuneka libe lodwa)
  • Izibuko le-TCP elivula ngokuzenzekelayo kwicala lomxhasi kwaye lifumana uphando lwe-DICOM kwiseva ye-PACS (oko kukuthi, umncedisi ubatyhalela kumxhasi-ukuqala uxhulumaniso kuqala)
  • Idilesi ye-IP

Emva kokuseta iRadiant, abathengi bafumana oku kukutya okulandelayo okucingayo: kumxhasi ngamnye, ukuseta isoftware ngezi parameters ezingentla kubangele ukuba ifayile igcwaliswe. iipacs.xml, ebibekwe kwiprofayile yomsebenzisi (indlela: %APPDATA%RadiantViewerpacs.xml). Ngaxeshanye, uqwalaselo lomnye umxhasi lohlukile komnye ubuncinane kwiparameters ezimbini (igama leAE lahlukile kumntu wonke, kwaye izibuko liyafana, ngaphandle kwabaxhasi besiphelo ababalekayo kumncedisi omnye - apho amazibuko ayenawo. ukwabelwa ngokwahlukileyo).

Umzekelo pacs.xml ifayile nge unxibelelwano:

Kangangeenyanga ezintandathu yonke into yayilungile, inkqubo yaqalisa ukusebenza... yaza ke yafika kuthi β€œngaphantsi kwamanzi amatye"

  • Kufuneka sisebenzise iiseva ezininzi ze-PACS eziza kuthatha indawo yezindala (apho isithuba sedisk siqalisile ukuphelelwa). Iiseva ze-PACS kumatshini obonakalayo, kodwa ayisiyiyo le nto sithetha ngayo;
  • Kufuneka ngandlela-thile sitshintshe ulungelelwaniso olulodwa (kunye neeparitha ezimbini ezahlukeneyo) koomatshini abangama-200 (inani labo lalikhula rhoqo);
  • Ukuqwalasela izinga lokukhula kwemithamo yesaveyi, isisombululo asifuneki nje kanye, kodwa siphindaphindwe kwaye rhoqo (umzekelo, kanye emva kweenyanga ezi-1-3).

Isisombululo singezantsi.

Ukukhetha izixhobo zokusombulula ingxaki

Ekuqaleni, bekukho iinzame zokufumana isisombululo esiya kuguqula ifayile ye-pacs.xml kwicala lomxhasi kwaye yenze utshintsho kuluhlu lwabancedisi be-PACS ngaphandle kokuchaphazela igama le-AE kunye nezicwangciso zezibuko ze-TCP. Abathengi beWindows ngelo xesha babesekwe kuzo zombini iiWindows XP kunye neWindows 7 - ke bekukho iinzame zokubhala into enje ngokusekwe kwiVBScript. Kodwa yeha, kwakungenakwenzeka ukwenza umsebenzi onjalo, ngenxa yokunqongophala ngokupheleleyo kwamava ekubhaleni nayiphi na into enzima kwaye ebanzi ngolu lwimi. Imizamo yokufumana nokubhala kwakhona ayiphumelelanga (kufuneka kuqatshelwe ukuba sele ndinesicwangciso esahlukileyo entlokweni yam, ngoko andizange ndifake i-VBScript ngaphezu kweeyure ze-3-4).

Ekugqibeleni, ndilungiselele isisombululo esilandelayo:

  • Ukusebenzisa umgaqo-nkqubo weqela, qokelela zonke iifayile ze-pacs.xml kwindawo enye kuyo nayiphi na iseva kumthombo wothungelwano;
  • Guqula iifayile ngobuninzi (besele ndinamava ekusombululeni iingxaki ezinjalo usebenzisa iPerl);
  • Kwakhona sebenzisa imigaqo-nkqubo yeqela ukuhlaziya useto lwabathengi.

Ukuqokelela iifayile kusetyenziswa uMgaqo-nkqubo weQela

Elona candelo lilula kukuba xa umxhasi engena kwiprofayile yakhe, yena, ngamalungelo akhe, aphumeze ifayile ethile .bat, ethi:

echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml

Ngaloo ndlela, iifayile ze-pacs.xml ziya kuqokelelwa kumncedisi kumthombo ofihliweyo, igama eliqulethe ulwazi olusuka kweyiphi ikhompyutha kwaye ikopi yomsebenzisi ikhutshelwe.

Eyona nto yayinzima yayikukulinda de lo mgaqo-nkqubo usebenze kubo bonke abasebenzisi.

Ukutshintsha ulungelelwaniso usebenzisa i-Perl script

Siza kudinga Perl esebenzayo yeWindows esuka kwi-ActiveState, kunye ne-XML::imodyuli yoMbhali, enokufakwa kusetyenziswa umyalelo ppm fakela XML-Umbhali.

Iskripthi ngokwaso siye sabonakala silula:

use XML::Writer;
 
# ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡƒ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ссписок (удаляСм лишнСС):
	$report_dir = "C:Perl64WORKPACS-xml3";
	opendir(DIR, "$report_dir") or die "НС ΠΌΠΎΠ³Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ!";
	@report_files = readdir DIR;
	shift (@report_files); # удаляСм Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ· элСмСнтов массива (.)
	shift (@report_files); # удаляСм Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΠ· элСмСнтов массива (..)
#	print "@report_files";
	closedir(DIR);
 
# НачинаСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ - ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° Ρ€Π°Π·. НуТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ AET ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
foreach $analiz_file (@report_files) 
{
	$full_path_to_file="C:Perl64WORKPACS-xml3".$analiz_file;
	open (INFO, $full_path_to_file);
 
	while ($line = <INFO>)
	{
		# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $aet ΠΈ $port содСрТат ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ XML Ρ„Π°ΠΉΠ»Π°:
		my ($other1, $aet, $other2, $port, $other3) = split /"/, $line, 5;
		# Если встрСчаСтся строка listener - Ρ‚ΠΎ ΠΌΡ‹ дошли Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ строчки ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ XML:
		if ($other1 =~ 'listener')
			{
				# Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ XML c Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ полями ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:
				my $writer = XML::Writer->new(OUTPUT => 'self', DATA_MODE => 1, DATA_INDENT => 2, );
				$writer->xmlDecl('utf-8');
				$writer->startTag('pacs');
				$writer->startTag('listener', ae => $aet, port => $port);
				$writer->endTag();
				$writer->startTag('hosts');
				$writer->startTag('host', name => 'MRT', ae => 'ORTHANC', ip => 'XX.YY.214.17', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT', ae => 'ORTHANC2', ip => 'XX.YY.215.253', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'R', ae => 'ORTHANC3', ip => 'XX.YY.215.252', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT-20180501-20180831', ae => 'ORTHANC4', ip => 'XX.YY.215.251', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT-20180901-20181130', ae => 'ORTHANC5', ip => 'XX.YY.215.250', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->endTag('hosts');
				$writer->startTag('presets');
				$writer->endTag();
				$writer->startTag('lastsearch', dt => '4', mfid => '1048592');
				$writer->endTag();
				$writer->endTag('pacs');
 
				# ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ XML Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:
				my $xml = $writer->end();
				# ΠŸΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» для пСрСзаписи:
				$rewritexml = $full_path_to_file;
				# ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ XML Ρ„Π°ΠΉΠ»Ρ‹ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:
				open (NEWXML, ">$rewritexml");
				print NEWXML $xml;
				close (NEWXML);				
			}
	}
 
}

Umgaqo wokusebenza kwayo:

  • Sivula uvimba weefayili apho siqokelele ulungelelwaniso lwe-pacs.xml kubathengi kwaye sibeke uluhlu lweefayile kuluhlu lwee-scalars (@report_files);
  • Kwi-loop, siqhuba ifayile enye ngexesha kwaye sifunde umgca ngomgca;
  • Ukusebenzisa ukuhlukana, sahlula umgca ngamnye ube ngamacandelo ama-5, sisebenzisa iingcaphuno njengesahluli;
  • Sifumana umgca kunye negama lomphulaphuli kunye nedatha yendawo ekhethekileyo kwifayile nganye (igama lomxhasi we-AE kunye nenombolo ye-port ye-TCP) kwiinguqu ezimbini;
  • Emva koku, sivelisa ngokulula ifayile entsha ye-XML, faka iiparamitha ezizodwa kuyo kwaye emva koko ufake inani elifunekayo leeseva ze-PACS ngeeparamitha zazo - abo. iqale ngantoni)
  • Siphinda sibhala ifayile entsha yeXML ngaphezulu kwendala.

Kufuneka kuqatshelwe ukuba eneneni, andisisebenzisi esi script ngokuzenzekelayo ngokuzenzekelayo - enyanisweni, ndikhuphela uqwalaselo oluqokelelweyo kuluhlu olwahlukileyo kwaye emva koko ndiqhube iskripthi kwaye nditshintshe zonke ngobuninzi. Okulandelayo, ukujonga okungahleliwe - kunye noqwalaselo lunokuhanjiswa emva koomatshini.

Ukusasaza iifayile ze-pacs.xml ezilungisiweyo kubathengi

Eyona nto ilula ethe yafika engqondweni kukwenza utshintsho kwifayile esele isebenza .bat eqokelela ubumbeko kubathengi kwaye yongeze umgca:

If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

Ifayile ye.bat yokugqibela ibonakala ngolu hlobo:

@echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

isiphelo

Iyafana nale"idolo"isisombululo. Sele sizame kabini (ngoSeptemba 2018 kunye noFebruwari 2019), ukuza kuthi ga ngoku indiza iqhelekile. Ewe, hayi i-100% yohlaziyo lwabathengi, kodwa isondele kweli xabiso - sigqibezela ukuphumla ukude. Ishicilelwe ngu unxibelelwano.

umthombo: www.habr.com

Yongeza izimvo