batch/1.1/old/loadInseeId.php
2013-06-19 08:24:49 +00:00

312 lines
11 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
define ('TODAY', substr(DATETIME,0,8));
define ('TODAY_FORMAT', substr(DATETIME,0,4).'-'.substr(DATETIME,4,2).'-'.substr(DATETIME,6,2));
define ('NOW_FORMAT', substr(DATETIME,8,2).':'.substr(DATETIME,10,2).':'.substr(DATETIME,12,2));
set_time_limit(0);
$heureDebut=NOW_FORMAT;
$dateJour=TODAY;
$dateJourFormat=TODAY_FORMAT;
echo date ('Y/m/d - H:i:s') . " - Début du traitement\r\n";
flush();
$db_name=$db_table='';
$ligneStart=0;
//Initialistation des variables
$argv=$_SERVER['argv'];
if ($_SERVER['argc']<1) die('Usage : '.basename($argv[0]). " [OPTION]... FICHIER(S)
Charger un fichier au format Notice80 dans une base de données avec création de la table qui aura le nom du fichier chargé..
(*): Valeurs par défaut !
");
for ($i=1,$j=0; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 'i': $ligneStart=substr($argv[$i],3,strlen($argv[$i])-3); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else {
$fichier_csv[$j]=$argv[$i];
$j++;
}
}
$db_name='insee';
$db_table='identite';
$iDb=new WDB($db_name);
$tabFichDate=$fichier_csv;
for ($nbFichiers=0; isset($tabFichDate[$nbFichiers]); $nbFichiers++)
{
$tab_nom_date =explode('|', $tabFichDate[$nbFichiers]);
$nomFichier =$tab_nom_date[0];
$fp=fopen($nomFichier,"r");
if (!$fp) {
echo date ('Y/m/d - H:i:s')." - Impossible d'ouvrir le fichier n°$nbFichiers à traiter : ".$rep.$nomFichier." !\r\n";
echo date ('Y/m/d - H:i:s') . " - Fin du traitement\r\n";
exit();
}
$nbLignes=$nbLignesTot=$nbNotUpdated=0;
$nbInsert=$nbUpdate=0;
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier n°$nbFichiers=$nomFichier !\r\n";
while (!feof($fp))
{
$nbLignesTot++;
$a = fgets($fp, 4096);
// 1200000
}
echo date ('Y/m/d - H:i:s')." - Fichier n°$nbFichiers=$nomFichier, $nbLignesTot à traiter !\r\n";
rewind($fp);
while (!feof($fp))
{
$nbLignes++;
$a = fgets($fp, 4096);
if ($nbLignes>=$ligneStart) {
unset($tabErreur); $nbErr=0;
$insSIREN =substr($a, 0, 9);
$insNIC =substr($a, 9, 5);
$insNOMEN = trim( substr($a, 14,40) );
$insNOMET = trim( substr($a, 54,40) );
$insSIGLE = trim( substr($a, 94,20) );
$insCADR = trim( substr($a,114,26) );
$insNUMVOIE = trim( substr($a,140, 4) );
$insINDREP = trim( substr($a,144, 1) );
$insTYPVOIE = trim( substr($a,145, 3) ); // Répertorié dans 1 tableau
$insLIBVOIE = trim( substr($a,148,26) );
$insDISTSP = trim( substr($a,174,26) );
$insACHPOSTE = trim( substr($a,200,32) );
$insRPET = (int) substr($a,243, 2); // Répertorié dans 1 tableau
$insDEPET = substr($a,245, 2);
$insARRONET = substr($a,247, 2);
$insCTONET = substr($a,249, 3);
$insCOMET = substr($a,252, 3);
$insLIBCOM = trim( substr($a,255,26) );
$insDU = substr($a,281, 2);
$insTU = (int) substr($a,283, 1); // de 0 à 8
$insU7U = substr($a,284, 2); // Champ UU de l'Insee
$insCODPOS = substr($a,286, 5);
$insILOT = trim( substr($a,291, 8)); // toujours vide car tarif spécial !
$insTCD = (int) substr($a,299, 2);
$insZEMET = substr($a,301, 2);
$insCODEVOIE = substr($a,303, 5);
$insAPET700 = substr($a,308, 4);
$insAPET31 = substr($a,312, 2);
$insSIEGE = (int) substr($a,314, 1);
$insTEFET = (int) substr($a,315, 2);
$insEFETCENT = trim( substr($a,317, 6)); // Numérique
if ( $insEFETCENT=='' )
$insEFETCENT='NULL';
elseif (!is_numeric($insEFETCENT))
$insEFETCENT='NULL';
else
$insEFETCENT=(int)$insEFETCENT;
$insORIGINE = (int) substr($a,323, 1); // de 0 à 8
$DCRET = substr($a,324, 6);
$insDCRET = substr($DCRET,2,4).substr($DCRET,0,2).'00';
$insMMINTRET = (int) substr($a,330, 2); // de 0 à 12
$insNATURE = (int) substr($a,332, 2); // Numérique définit dans 1 tableau//
$insSAISONAT = (int) substr($a,334, 1);
$insMODET = (int) substr($a,335, 1); // de 0 à 3
$insDAPET = trim( substr($a,336, 4));
$insDEFET = trim( substr($a,340, 4));
$insSINGT = (int) substr($a,344, 2); // Numérique définit dans 1 tableau
$insAUXILT = (int) substr($a,346, 1); // 0, 1 ou 9
$insEAEANT = trim( substr($a,347, 4));
$insEAEAPET = trim( substr($a,351, 4));
$insEAESEC1T = trim( substr($a,355, 4));
$insEAESEC2T = trim( substr($a,359, 4));
$insCJ = substr($a,363, 4);
$insTEFEN = (int) substr($a,367, 2);
$insEFENCENT = trim( substr($a,369, 6)); // Numérique
if ( $insEFENCENT=='' )
$insEFENCENT='NULL';
elseif (!is_numeric($insEFENCENT))
$insEFENCENT='NULL';
else
$insEFENCENT=(int)$insEFENCENT;
$insAPEN700 = substr($a,375, 4);
$insAPEN31 = substr($a,379, 2);
$insAPRM = trim( substr($a,381, 5));
$insTCA = (int) substr($a,386, 1); // de 0 à 9
$insSEXE = strtoupper( substr($a,387, 1)); // M, F ou blanc
if ($insSEXE=='M') $insSEXE=1;
elseif ($insSEXE=='F') $insSEXE=2;
else $insSEXE=0;
$insRECME = (int) substr($a,388, 1); // 0 ou 1
$insDAPEN = trim( substr($a,389, 4));
$insDEFEN = trim( substr($a,393, 4));
$DCREN = substr($a,397, 6);
$insDCREN = substr($DCREN,2,4).substr($DCREN,0,2).'00';
$insMMINTREN = (int) substr($a,403, 2); // de 0 à 12
$insMONOACT = trim( substr($a,405, 1)); // 0,1,2 ou NULL
if ( $insMONOACT == '' )
$insMONOACT = 'NULL';
else
$insMONOACT=(int)$insMONOACT;
$insMODEN = (int) substr($a,406, 1); // 0,1,2 ou 3
$insORDIN = (int) substr($a,407, 1); // 0 ou 1
$insEAEANN = trim( substr($a,408, 4));
$insEAEAPEN = trim( substr($a,412, 4));
$insEAESEC1N = trim( substr($a,416, 4));
$insEAESEC2N = trim( substr($a,420, 4));
$insEAESEC3N = trim( substr($a,424, 4));
$insEAESEC4N = trim( substr($a,428, 4));
$insNBTOA = (int) substr($a,432, 4); // de 0 à 9999
$insTCAEXPOR = (int) substr($a,436, 1); // 0,1,2,3 ou 4
$insREGIMP = substr($a,437, 2);
$insMONOREG = trim( substr($a,439, 1)); // 0,1,2 ou NULL
if ( $insMONOREG == '' )
$insMONOREG = 'NULL';
else
$insMONOREG=(int)$insMONOREG;
$insRPEN = (int) substr($a,440, 2);
$insDEPCOMEN = substr($a,442, 5);
$bilSPEACT = trim( substr($a,451, 1)); //
$bilSORLJ_N = trim( substr($a,452, 1));
if ($bilSORLJ_N=='O') $bilSORLJ_N=1;
else $bilSORLJ_N=0;
$bilSOEVT = trim( substr($a,453, 2)); //
$bilSODJL_D = trim( substr($a,456, 8)); //
$bilSOEDRQ = trim( substr($a,464, 3)); //
$bilSOEDRN_X= trim( substr($a,467, 60)); //
$bilSOEDRD_D= trim( substr($a,527, 8)); //
$bilSOEDRL_N= trim( substr($a,535, 35)); //
$bilSORSNC = trim( substr($a,570, 1)); //
$bilSORSNO = trim( substr($a,571, 2)); //
$bilSOETEL = trim( substr($a,573, 10)); //
$bilSOEFAX = trim( substr($a,583, 10)); //
$bilSODTEN_D= trim( substr($a,593, 8)); //
$tabDataToUpdate=array(
'NOM' => $insNOMEN,
'ACTIF' => 0,
'ENSEIGNE' => $insNOMET,
'SIGLE' => $insSIGLE,
'ADR_COMP' => $insCADR,
'ADR_NUMVOIE' => $insNUMVOIE,
'ADR_BTQ' => $insINDREP,
'ADR_TYPVOIE' => $insTYPVOIE,
'ADR_LIBVOIE' => $insLIBVOIE,
'ADR_DISTSP' => $insDISTSP,
'ADR_LIBCOM' => $insLIBCOM,
'ADR_CP' => $insCODPOS,
'DCREN' => $insDCREN,
'SIEGE' => $insSIEGE,
'AUXILT' => $insAUXILT,
'SAISONAT' => $insSAISONAT,
'CJ' => $insCJ,
'CIVILITE' => $insSEXE,
'NBETAB' => $insNBTOA,
'APE_ENT' => $insAPEN700,
'APE_ETAB' => $insAPET700,
'PROCOL' => $bilSORLJ_N,
'PROCOL_TYPE' => $bilSOEVT,
'PROCOL_DATE' => $bilSODJL_D,
'EFF_ENT' => $insEFENCENT,
//rc?
'TEL' => $bilSOETEL,
'FAX' => $bilSOEFAX,
'DIR_FCT' => $bilSOEDRQ,
'DIR_IDEN' => $bilSOEDRN_X,
'DIR_DATEN' => $bilSOEDRD_D,
'DIR_LIEUN' => $bilSOEDRL_N,
'DCRET' => $insDCRET,
'TEFF_ENT' => $insTEFEN,
'ADR_DEP' => $insDEPET,
'ADR_COM' => $insCOMET,
'TCA' => $insTCA,
'TCAEXP' => $insTCAEXPOR,
'EFF_ET' => $insEFETCENT,
'TEFF_ET' => $insTEFET,
'CODEVOIE' => $insCODEVOIE,
'DATE_MAJ' => $bilSODTEN_D,
);
$ret2=$iDb->select($db_table, '*', "SIREN=$insSIREN AND NIC=$insNIC");
$cpt=count($ret2);
if ($cpt>1)
$tabSiretDoubles[]=$insSIREN.' '.$insNIC;// RAF
elseif ($cpt==1) {
$ret=$ret2[0];
if ($ret['NOM'] == $insNOMEN &&
$ret['ACTIF'] == 0 &&
$ret['ENSEIGNE'] == $insNOMET &&
$ret['SIGLE'] == $insSIGLE &&
$ret['ADR_COMP'] == $insCADR &&
$ret['ADR_NUMVOIE'] == $insNUMVOIE &&
$ret['ADR_BTQ'] == $insINDREP &&
$ret['ADR_TYPVOIE'] == $insTYPVOIE &&
$ret['ADR_LIBVOIE'] == $insLIBVOIE &&
$ret['ADR_DISTSP'] == $insDISTSP &&
$ret['ADR_LIBCOM'] == $insLIBCOM &&
$ret['ADR_CP'] == $insCODPOS &&
$ret['DCREN'] == $insDCREN &&
$ret['SIEGE'] == $insSIEGE &&
$ret['AUXILT'] == $insAUXILT &&
$ret['SAISONAT'] == $insSAISONAT &&
$ret['CJ'] == $insCJ &&
$ret['CIVILITE'] == $insSEXE &&
$ret['NBETAB'] == $insNBTOA &&
$ret['APE_ENT'] == $insAPEN700 &&
$ret['APE_ETAB'] == $insAPET700 &&
$ret['PROCOL'] == $bilSORLJ_N &&
$ret['PROCOL_TYPE'] == $bilSOEVT &&
$ret['PROCOL_DATE'] == $bilSODJL_D &&
$ret['EFF_ENT'] == $insEFENCENT &&
$ret['TEL'] == $bilSOETEL &&
$ret['FAX'] == $bilSOEFAX &&
$ret['DIR_FCT'] == $bilSOEDRQ &&
$ret['DIR_IDEN'] == $bilSOEDRN_X &&
$ret['DIR_DATEN'] == $bilSOEDRD_D &&
$ret['DIR_LIEUN'] == $bilSOEDRL_N &&
$ret['DCRET'] == $insDCRET &&
$ret['TEFF_ENT'] == $insTEFEN &&
$ret['ADR_DEP'] == $insDEPET &&
$ret['ADR_COM'] == $insCOMET &&
$ret['TCA'] == $insTCA &&
$ret['TCAEXP'] == $insTCAEXPOR &&
$ret['EFF_ET'] == $insEFETCENT &&
$ret['TEFF_ET'] == $insTEFET &&
$ret['CODEVOIE'] == $insCODEVOIE ) {
$nbNotUpdated++;
} else {
$retUpdate=$iDb->update($db_table, $tabDataToUpdate, "SIREN=$insSIREN AND NIC=$insNIC");
if (!$retUpdate) die('Erreur lors de MAJ Mysql n°'. mysql_errno() .' : '.mysql_error());
$nbUpdate++;
}
//echo $insSIREN.' '.$insNIC." : MAJ\n";
} elseif ($cpt==0) {
$tabDataToInsert=array_merge($tabDataToUpdate, array('SIREN'=>$insSIREN,
'NIC' =>$insNIC));
$retInsert=$iDb->insert($db_table, $tabDataToInsert);
if (!$retInsert) die('Erreur Mysql n°'. mysql_errno() .' : '.mysql_error());
unset($tabDataToInsert);
$nbInsert++;
//echo $insSIREN.' '.$insNIC." : Ajout\n";
}
//print_r($tabDataToUpdate);die();
unset($tabDataToUpdate);
}
if ($nbLignes%10000==0) echo date ('Y/m/d - H:i:s')." - $nbLignes/$nbLignesTot lignes traités dont $nbInsert ajout, $nbUpdate modifs et $nbNotUpdated identiques\n";
}
fclose ($fp);
echo date ('Y/m/d - H:i:s')." - Fichier n°$nbFichiers=$nomFichier, $nbLignes traitées/$nbLignesTot dont $nbInsert ajout et $nbUpdate modifs\n";
}
die();
?>