312 lines
11 KiB
PHP
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();
|
||
|
|
||
|
?>
|