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

851 lines
32 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
/** @todo Si MAJ en annule et remplace prévoir les manips SQL suivantes :
** A. Création d'une table insee.tmp sans aucun index
** B. A la fin du chargement construire les index
** //ALTER TABLE insee ADD PRIMARY KEY (insSIREN, insNIC);
** ALTER TABLE insee ADD INDEX (insSIREN, insNIC);
** ALTER TABLE insee ADD FULLTEXT (insNOMEN);
** ALTER TABLE insee ADD INDEX (insSIEGE);
** ALTER TABLE insee ADD INDEX (insCODPOS);
** ALTER TABLE insee ADD INDEX (insDEPET);
** ALTER TABLE insee ADD INDEX (insAPET700);
** ALTER TABLE insee ADD INDEX (insAPEN700);
** ALTER TABLE insee ADD INDEX (insCJ);
** --- ?
** ALTER TABLE insee ADD FULLTEXT (insNOMET);
** ALTER TABLE insee ADD FULLTEXT (insSIGLE);
** ALTER TABLE insee ADD INDEX (insNOMEN);
** ALTER TABLE insee ADD INDEX (insNOMET);
** ALTER TABLE insee ADD INDEX (insSIGLE);
** --- ?
**
** Si pas d'erreur :
** 1. detruire insee
** 2. Renommer insee.tmp en insee
**/
global $tabSep;
$tabSep=array('"', '|', '#', '+', '-', '=', '_', '/', '\'', '\\', '&', '.', ';', ',', '!', '?', ':', '*', '°', '(', ')', '[', ']', '{', '}');
global $tabInutils;
$tabInutils=array('', 'la', 'le', 'du', 'les', 'aux', 'au', 'des', 'ma', 'mon', 'ton', 'tes', 'nos', 'vos', 'l', 'de', 'ta', 'a', 'et', 'on', 'en');
function specialCharToSpace($str) {
$str=strtr( strtoupper($str),
'àáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ',
// strtoupper('aaaaaaaceeeeiiiionooooouuuuyy'));
strtoupper('AAAAAAACEEEEIIIIONOOOOOUUUUYY'));
$ret='';
for ($i=0; $i<strlen($str); $i++) {
if (ord($str[$i])>64 && ord($str[$i])<91)
$ret.=$str[$i];
else
$ret.=' ';
}
return $ret;
}
function getTabWords($str) {
global $tabInutils;
// Découpe du champ NOMEN
$tabMot=array();
$tabRS=explode(' ', specialCharToSpace($str));
$i=0;
foreach($tabRS as $k => $mot) {
// Si le mot courant n'est pas inutil, on le garde !
if (!in_array(trimAccent($mot), $tabInutils))
{
$tabMot[$i]=$mot;
$i++;
}
}
return $tabMot;
}
/*
include_once('/var/www/_includes/timer.php');
include_once('/var/www/_includes/phonex.php');
include_once('/var/www/_includes/soundex.php');
function soundex2($str) {
$soundex2 = new soundex2;
$soundex2 -> build ($str);
return $soundex2 -> sString;
}
*/
// $ret=mysql_query('ALTER TABLE `insee` RENAME `insee_'. date('Y-m-d') .'`;');
// echo date ('Y/m/d - H:i:s')." - Sauvegarde de l'ancienne base INSEE\n";
/*
$ret=mysql_query('ALTER TABLE `insee_recherche` RENAME `insee_recherche_'. date('Y-m-d') .'`;');
echo date ('Y/m/d - H:i:s')." - Sauvegarde de l'ancienne base de recherche INSEE\n";
$ret=mysql_query("CREATE TABLE IF NOT EXISTS insee_recherche (
insSIREN varchar(9) NOT NULL default '',
insNIC varchar(5) NOT NULL default '',
motNOM varchar(24) default NULL,
shxNOM varchar(4) default NULL,
phxNOM bigint(12) default '0',
motADR varchar(24) default NULL,
shxADR varchar(4) default NULL,
phxADR bigint(12) default '0',
insNUMVOIE int(4) default NULL,
insTYPVOIE char(3) default NULL,
CodeInseeCommune varchar(5) default NULL,
insLIBCOM varchar(26) default NULL,
insSIEGE tinyint(1) NOT NULL default '0',
insAPET700 varchar(4) default NULL,
insAPET31 char(2) default NULL,
insCJ varchar(4) default NULL,
insAPEN700 varchar(4) default NULL,
insAPEN31 char(2) default NULL,
SPEACT char(1) default NULL,
SORLJ_N char(1) default NULL,
SOEVT char(2) default NULL,
SOETEL varchar(10) default NULL,
SOEFAX varchar(10) default NULL,
SODTEN_D varchar(8) default NULL) TYPE=MyISAM COMMENT='Base INSEE de recherche';");
echo date ('Y/m/d - H:i:s')." - Création de la structure de la base de recherche INSEE sans les index\n";
*/
/*,
KEY `insSIREN` (`insSIREN`,`insNIC`),
KEY `insSIEGE` (`insSIEGE`),
KEY `insCODPOS` (`insCODPOS`),
KEY `insDEPET` (`insDEPET`),
KEY `insAPET700` (`insAPET700`),
KEY `insCJ` (`insCJ`),
KEY `insAPEN700` (`insAPEN700`),
KEY `insSIGLE` (`insSIGLE`),
KEY `insNOMEN_2` (`insNOMEN`),
KEY `insNOMET_2` (`insNOMET`),
FULLTEXT KEY `insNOMEN` (`insNOMEN`),
FULLTEXT KEY `insNOMET` (`insNOMET`),
FULLTEXT KEY `insSIGLE_2` (`insSIGLE`)*/
/** On ne prend l'heure qu'une seule fois par script PHP et on initialise des constantes.
*
* DATETIME YmdHis
* DATETIME_LOG Y-m-d H:i:s Date du jour pour les insertions en BDD
* NOW His Heure d'exécution du script
* NOW_FORMAT H:i:s Heure d'exécution du script
* TODAY Ymd Année, Mois, Jour d'exécution du script
* TODAY_FORMAT Y-m-d
* TODAY_AFF d/m/Y
*/
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='';
//Initialistation des variables
$argv=$_SERVER['argv'];
if ($_SERVER['argc']<3) 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é..
Options disponibles:
-d=nom_bdd Nom de la base de données
-t=nom_table Nom de la table
(*): 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 'd': $db_name=substr($argv[$i],3); break;
case 't': $db_table=substr($argv[$i],3); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else {
$fichier_csv[$j]=$argv[$i];
$j++;
}
}
if ($db_name=='') die("Base de données non communiquée !\n");
if ($db_table=='') die("Table non communiquée !\n");
$iDb=new WDB($db_name);
$sql="CREATE TABLE IF NOT EXISTS $db_table (
insSIREN varchar(9) NOT NULL default '',
insNIC varchar(5) NOT NULL default '',
insNOMEN varchar(40) default NULL,
insNOMET varchar(40) default NULL,
insSIGLE varchar(20) default NULL,
insCADR varchar(26) default NULL,
insNUMVOIE varchar(4) default NULL,
`insINDREP` char(1) default NULL,
`insTYPVOIE` char(3) default NULL,
`insLIBVOIE` varchar(26) default NULL,
`insDISTSP` varchar(26) default NULL,
`insACHPOSTE` varchar(32) default NULL,
`insZR` varchar(11) default NULL,
`insRPET` tinyint(2) NOT NULL default '0',
`insDEPET` char(2) default NULL,
`insARRONET` char(2) default NULL,
`insCTONET` char(3) default NULL,
`insCOMET` char(3) default NULL,
`insLIBCOM` varchar(26) default NULL,
`insDU` char(2) default NULL,
`insTU` tinyint(1) NOT NULL default '0',
`insU7U` char(2) default NULL,
`insCODPOS` varchar(5) default NULL,
`insILOT` varchar(8) default NULL,
`insTCD` tinyint(2) NOT NULL default '0',
`insZEMET` char(2) default NULL,
`insCODEVOIE` varchar(5) default NULL,
`insAPET700` varchar(4) default NULL,
`insAPET31` char(2) default NULL,
`insSIEGE` tinyint(1) NOT NULL default '0',
`insTEFET` tinyint(2) NOT NULL default '0',
`insEFETCENT` mediumint(6) default NULL,
`insORIGINE` tinyint(1) NOT NULL default '0',
`insDCRET` varchar(6) default NULL,
`insMMINTRET` tinyint(2) NOT NULL default '0',
`insNATURE` char(2) default NULL,
`insSAISONAT` tinyint(1) NOT NULL default '0',
`insMODET` tinyint(1) NOT NULL default '0',
`insDAPET` varchar(4) default NULL,
`insDEFET` varchar(4) default NULL,
`insSINGT` tinyint(2) NOT NULL default '0',
`insAUXILT` tinyint(1) NOT NULL default '0',
`insEAEANT` varchar(4) default NULL,
`insEAEAPET` varchar(4) default NULL,
`insEAESEC1T` varchar(4) default NULL,
`insEAESEC2T` varchar(4) default NULL,
`insCJ` varchar(4) default NULL,
`insTEFEN` tinyint(2) NOT NULL default '0',
`insEFENCENT` mediumint(6) default NULL,
`insAPEN700` varchar(4) default NULL,
`insAPEN31` char(2) default NULL,
`insAPRM` varchar(5) default NULL,
`insTCA` tinyint(1) NOT NULL default '0',
`insSEXE` enum('M','F','') NOT NULL default 'M',
`insRECME` tinyint(1) NOT NULL default '0',
`insDAPEN` varchar(4) default NULL,
`insDEFEN` varchar(4) default NULL,
`insDCREN` varchar(6) default NULL,
`insMMINTREN` tinyint(2) NOT NULL default '0',
`insMONOACT` tinyint(1) default NULL,
`insMODEN` tinyint(1) NOT NULL default '0',
`insORDIN` tinyint(1) NOT NULL default '0',
`insEAEANN` varchar(4) default NULL,
`insEAEAPEN` varchar(4) default NULL,
`insEAESEC1N` varchar(4) default NULL,
`insEAESEC2N` varchar(4) default NULL,
`insEAESEC3N` varchar(4) default NULL,
`insEAESEC4N` varchar(4) default NULL,
`insNBTOA` SMALLINT(4) UNSIGNED NOT NULL default '0',
`insTCAEXPOR` tinyint(1) NOT NULL default '0',
`insREGIMP` char(2) default NULL,
`insMONOREG` tinyint(1) default NULL,
`insRPEN` tinyint(2) NOT NULL default '0',
`insDEPCOMEN` varchar(5) default NULL,
`insVMAJ` enum('C','E','I','F','S') NOT NULL default 'C',
`insVMAJ1` tinyint(1) NOT NULL default '0',
`insVMAJ2` tinyint(1) NOT NULL default '0',
`insVMAJ3` tinyint(1) NOT NULL default '0',
`SPEACT` char(1) default NULL,
`SORLJ_N` char(1) default NULL,
`SOEVT` char(2) default NULL,
`SOROL` char(1) default NULL,
`SODJL_D` varchar(8) default NULL,
`SOEDRQ` char(3) default NULL,
`SOEDRN_X` varchar(60) default NULL,
`SOEDRD_D` varchar(8) default NULL,
`SOEDRL_N` varchar(35) default NULL,
`SORSNC` char(1) default NULL,
`SORSNO` char(2) default NULL,
`SOETEL` varchar(10) default NULL,
`SOEFAX` varchar(10) default NULL,
`SODTEN_D` varchar(8) default NULL) TYPE=MyISAM COMMENT='Base INSEE courante';";
$ret=$iDb->query($sql, true);
echo date ('Y/m/d - H:i:s')." - Création de la structure de la base '$db_table' sans les index\n";
//echo "$sql\n";
$tabFichDate=$fichier_csv;
$messageInsertion=$messageSuppression='';
for ($nbFichiers=0; isset($tabFichDate[$nbFichiers]); $nbFichiers++)
{
$tab_nom_date =explode('|', $tabFichDate[$nbFichiers]);
$nomFichier =$tab_nom_date[0];
$moisFichier ='200601';//$tab_nom_date[1];
$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";
/* $tabDataToUpdate=array( 'NUM'=>$numScript,
'DATE_JOUR'=>$dateJour,
'HEURE_DEBUT'=>$heureDebut,
'HEURE_FIN'=>$heureFin,
'CODE_RETOUR'=>0,
'NB_MAIL'=>1,
'RESUME_EXEC'=>"Impossible d'ouvrir le fichier n°$nbFichiers à traiter : $nomFichier.");*/
echo date ('Y/m/d - H:i:s') . " - Fin du traitement\r\n";
exit();
}
$nbLignes=0;
$vmajC=0;
$vmajE=0;
$vmajI=0;
$vmajF=0;
$vmajS=0;
$totI=0;
$totS=0;
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier n°$nbFichiers=$nomFichier du mois de $moisFichier !\r\n";
flush();
while (!feof($fp))
{
$nbLignes++;
$a = fgets($fp, 4096);
unset($tabErreur); $nbErr=0;
$insSIREN =substr($a, 0, 9);
$insNIC =substr($a, 9, 5);
$insVMAJ =substr($a,447, 1);
/* if ( $insVMAJ==' ' )
$insVMAJ ='C';
*/
if (!valideSiret($insSIREN.$insNIC)) {
if (trim($a)=='')
$insVMAJ='EOF';
else
$tabErreur[$nbErr++]="SIRET incorrect : $insSIREN.$insNIC";
}
if ( $insVMAJ!='C' && $insVMAJ!='E' && $insVMAJ!='I' && $insVMAJ!='F' && $insVMAJ!='S' && $insVMAJ!='EOF' ) {
if ( $insVMAJ!=' ' && $insVMAJ!=chr(0) ) {
// echo date ('Y/m/d - H:i:s') . " - ATTENTION, ligne $nbLignes, forçage du code VMAJ à C car VMAJ='$insVMAJ' (Code ASCII=".ord($insVMAJ).") inexistant pour le siret $insSIREN $insNIC !!!\r\n";
flush();
}
$insVMAJ='C';
}
switch($insVMAJ)
{
case 'C':
case 'F':
case 'S':
// Requêtes de création ou mise à jour
// ***********************************
$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
// if (!$insee->isTypeVoie($insTYPVOIE))
// $tabErreur[$nbErr++]="TYPVOIE inconnu : '$insTYPVOIE'";
$insLIBVOIE = trim( substr($a,148,26) );
$insDISTSP = trim( substr($a,174,26) );
$insACHPOSTE = trim( substr($a,200,32) );
$insZR = trim( substr($a,232,11) );
$insRPET = (int) substr($a,243, 2); // Répertorié dans 1 tableau
// if ( trim($insee->getLibRegion($insRPET))=='' )
// $tabErreur[$nbErr++]="RPET inconnue : '$insRPET' (Code ASCII=".ord(substr($a,243, 1))." & ".ord(substr($a,244, 1)).")";
$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
// if ($insTU > 8)
// $tabErreur[$nbErr++]="TU non comprise entre 0 et 8 : '$insTU' (Code ASCII=".ord(substr($a,283, 1)).")";
$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)) {
// if ( $insEFETCENT!='N' )
// $tabErreur[$nbErr++]="EFETCENT non numérique : $insEFETCENT";
$insEFETCENT='NULL';
}
else
$insEFETCENT=(int)$insEFETCENT;
$insORIGINE = (int) substr($a,323, 1); // de 0 à 8
// if ($insORIGINE > 8)
// $tabErreur[$nbErr++]="ORIGINE non comprise entre 0 et 8 : $insORIGINE";
$insDCRET = substr($a,324, 6);
$insMMINTRET = (int) substr($a,330, 2); // de 0 à 12
// if ( $insMMINTRET < 0 || $insMMINTRET > 12 )
// $tabErreur[$nbErr++]="MMINTRET non compris entre 0 et 12 : $insMMINTRET (Code ASCII=".ord(substr($a,330, 1))." & ".ord(substr($a,331, 1)).")";
$insNATURE = (int) substr($a,332, 2); // Numérique définit dans 1 tableau//
// if ( !$insee->isNature($insNATURE) )
// $tabErreur[$nbErr++]="NATURE inconnue : $insNATURE (Code ASCII=".ord(substr($a,332, 1))." & ".ord(substr($a,333, 1)).")";
$insSAISONAT = (int) substr($a,334, 1);
$insMODET = (int) substr($a,335, 1); // de 0 à 3
if ($insMODET > 3)
$tabErreur[$nbErr++]="MODET différent de 0,1,2 ou 3 : $insMODET (Code ASCII=".ord(substr($a,335, 1)).")";
$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
// if ( trim($insee->getLibSingularite($insSINGT))=='' )
// $tabErreur[$nbErr++]="SINGT inconnue : $insSINGT (Code ASCII=".ord(substr($a,344, 1))." & ".ord(substr($a,345, 1)).")";
$insAUXILT = (int) substr($a,346, 1); // 0, 1 ou 9
// if ($insAUXILT > 1 && $insAUXILT < 9)
// $tabErreur[$nbErr++]="AUXILT différent de 0, 1 ou 9 : $insAUXILT (Code ASCII=".ord(substr($a,346, 1)).")";
$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)) {
// if ( $insEFENCENT!='N' )
// $tabErreur[$nbErr++]="EFENCENT non numérique : $insEFENCENT (Code ASCII=".ord($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!='F' && $insSEXE!=' ' )
// if ( $insSEXE!=chr(0) )
// $tabErreur[$nbErr++]="SEXE inconnu : $insSEXE (Code ASCII=".ord($insVMAJ).")";
// else
$insSEXE=' ';
$insRECME = (int) substr($a,388, 1); // 0 ou 1
// if ( $insRECME > 1 )
// $tabErreur[$nbErr++]="RECME différent de 0 ou 1 : $insRECME (Code ASCII=".ord(substr($a,388, 1)).")";
$insDAPEN = trim( substr($a,389, 4));
$insDEFEN = trim( substr($a,393, 4));
$insDCREN = substr($a,397, 6);
$insMMINTREN = (int) substr($a,403, 2); // de 0 à 12
// if ( $insMMINTREN < 0 || $insMMINTREN > 12 )
// $tabErreur[$nbErr++]="MMINTREN non compris entre 0 et 12 : $insMMINTREN (Code ASCII=".ord(substr($a,403, 1))." & ".ord(substr($a,404, 1)).")";
$insMONOACT = trim( substr($a,405, 1)); // 0,1,2 ou NULL
if ( $insMONOACT == '' )
$insMONOACT = 'NULL';
else {
// if( $insMONOACT != '0' && $insMONOACT != '1' && $insMONOACT != '2' )
// $tabErreur[$nbErr++]="MONOACT différent de 0,1,2 ou NULL : $insMONOACT (Code ASCII=".ord(substr($a,405, 1)).")";
$insMONOACT=(int)$insMONOACT;
}
$insMODEN = (int) substr($a,406, 1); // 0,1,2 ou 3
// if ($insMODEN > 3)
// $tabErreur[$nbErr++]="MODEN différent de 0,1,2 ou 3 : $insMODEN (Code ASCII=".ord(substr($a,406, 1)).")";
$insORDIN = (int) substr($a,407, 1); // 0 ou 1
// if ($insORDIN > 1)
// $tabErreur[$nbErr++]="ORDIN différent de 0 ou 1 : $insORDIN (Code ASCII=".ord(substr($a,407, 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
// if ($insTCAEXPOR > 4)
// $tabErreur[$nbErr++]="TCAEXPOR différent de 0,1,2,3 ou 4 : $insTCAEXPOR (Code ASCII=".ord(substr($a,436, 1)).")";
$insREGIMP = substr($a,437, 2);
$insMONOREG = trim( substr($a,439, 1)); // 0,1,2 ou NULL
if ( $insMONOREG == '' )
$insMONOREG = 'NULL';
else {
// if( $insMONOREG != '0' && $insMONOREG != '1' && $insMONOREG != '2' )
// $tabErreur[$nbErr++]="MONOREG différent de 0,1,2 ou NULL : $insMONOREG (Code ASCII=".ord(substr($a,439, 1)).")";
$insMONOREG=(int)$insMONOREG;
}
$insRPEN = (int) substr($a,440, 2);
$insDEPCOMEN = substr($a,442, 5);
// $insVMAJ = substr($a,447, 1);
$insVMAJ1 = (int) substr($a,448, 1); // 0 ou 1
// if ($insVMAJ1 > 1)
// $tabErreur[$nbErr++]="VMAJ1 différent de 0 ou 1 : $insVMAJ1 (Code ASCII=".ord(substr($a,448, 1)).")";
$insVMAJ2 = (int) substr($a,449, 1); // 0 ou 1
// if ($insVMAJ2 > 1)
// $tabErreur[$nbErr++]="VMAJ2 différent de 0 ou 1 : $insVMAJ2 (Code ASCII=".ord(substr($a,449, 1)).")";
$insVMAJ3 = (int) substr($a,450, 1); // 0 ou 1
// if ($insVMAJ3 > 1)
// $tabErreur[$nbErr++]="VMAJ3 différent de 0 ou 1 : $insVMAJ3 (Code ASCII=".ord(substr($a,450, 1)).")";
$bilSPEACT = trim( substr($a,451, 1)); //
$bilSORLJ_N = trim( substr($a,452, 1));
$bilSOEVT = trim( substr($a,453, 2)); //
$bilSOROL = trim( substr($a,455, 1)); //
$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)); //
// Traitement du NOM, Enseigne et sigle pour optimiser la recherche
//$tabNOMEN=getTabWords($insNOMEN);
//$tabNOMET=getTabWords($insNOMET);
//$tabSIGLE=getTabWords($insSIGLE);
/*$tabNOM=array_merge($tabNOMEN,
$tabNOMET,
$tabSIGLE);
array_unique($tabNOM);
$nbNOM=count($tabNOM);
$nbLignesRec=$nbNOM;
// Traitement des différents zones d'adresse pour optimiser la recherche
$tabCADR=getTabWords($insCADR);
$tabLIBVOIE=getTabWords($insLIBVOIE);
$tabDISTSP=getTabWords($insDISTSP);
$tabADR=array_merge($tabCADR,
$tabLIBVOIE,
$tabDISTSP);
array_unique($tabADR);
$nbADR=count($tabADR);
if ($nbADR>$nbLignesRec) $nbLignesRec=$nbADR;
$CodeInseeCommune=$insDEPET.$insCOMET;
$insNUMVOIE=(int)$insNUMVOIE;
*/
/*
for ($i_rec=0; $i_rec<$nbLignesRec; $i_rec++) {
$tabDataToInsertR=array('insSIREN' => $insSIREN,
'insNIC' => $insNIC,
'motNOM' => $tabNOM[$i_rec],
'shxNOM' => soundex2($tabNOM[$i_rec]),
'phxNOM' => phonex($tabNOM[$i_rec]),
'motADR' => $tabADR[$i_rec],
'shxADR' => soundex2($tabADR[$i_rec]),
'phxADR' => phonex($tabADR[$i_rec]),
'insNUMVOIE' => $insNUMVOIE,
'insTYPVOIE' => $insTYPVOIE,
'CodeInseeCommune'=> $CodeInseeCommune,
'insLIBCOM' => $insLIBCOM,
'insSIEGE' => $insSIEGE,
'insAPET700' => $insAPET700,
'insAPET31' => $insAPET31,
'insCJ' => $insCJ,
'insAPEN700' => $insAPEN700,
'insAPEN31' => $insAPEN31,
'SPEACT' => $bilSPEACT,
'SORLJ_N' => $bilSORLJ_N,
'SOEVT' => $bilSOEVT,
'SOETEL' => $bilSOETEL,
'SOEFAX' => $bilSOEFAX,
'SODTEN_D' => $bilSODTEN_D );
$ret=mysql_insert('insee_recherche', $tabDataToInsertR);
}
**********/
$tabDataToInsert=array(
'insSIREN' => $insSIREN,
'insNIC' => $insNIC,
'insNOMEN' => $insNOMEN,
'insNOMET' => $insNOMET,
'insSIGLE' => $insSIGLE,
'insCADR' => $insCADR,
'insNUMVOIE' => $insNUMVOIE,
'insINDREP' => $insINDREP,
'insTYPVOIE' => $insTYPVOIE,
'insLIBVOIE' => $insLIBVOIE,
'insDISTSP' => $insDISTSP,
'insACHPOSTE' => $insACHPOSTE,
'insZR' => $insZR,
'insRPET' => $insRPET,
'insDEPET' => $insDEPET,
'insARRONET' => $insARRONET,
'insCTONET' => $insCTONET,
'insCOMET' => $insCOMET,
'insLIBCOM' => $insLIBCOM,
'insDU' => $insDU,
'insTU' => $insTU,
'insU7U' => $insU7U,
'insCODPOS' => $insCODPOS,
'insILOT' => $insILOT,
'insTCD' => $insTCD,
'insZEMET' => $insZEMET,
'insCODEVOIE' => $insCODEVOIE,
'insAPET700' => $insAPET700,
'insAPET31' => $insAPET31,
'insSIEGE' => $insSIEGE,
'insTEFET' => $insTEFET,
'insEFETCENT' => $insEFETCENT,
'insORIGINE' => $insORIGINE,
'insDCRET' => $insDCRET,
'insMMINTRET' => $insMMINTRET,
'insNATURE' => $insNATURE,
'insSAISONAT' => $insSAISONAT,
'insMODET' => $insMODET,
'insDAPET' => $insDAPET,
'insDEFET' => $insDEFET,
'insSINGT' => $insSINGT,
'insAUXILT' => $insAUXILT,
'insEAEANT' => $insEAEANT,
'insEAEAPET' => $insEAEAPET,
'insEAESEC1T' => $insEAESEC1T,
'insEAESEC2T' => $insEAESEC2T,
'insCJ' => $insCJ,
'insTEFEN' => $insTEFEN,
'insEFENCENT' => $insEFENCENT,
'insAPEN700' => $insAPEN700,
'insAPEN31' => $insAPEN31,
'insAPRM' => $insAPRM,
'insTCA' => $insTCA,
'insSEXE' => $insSEXE,
'insRECME' => $insRECME,
'insDAPEN' => $insDAPEN,
'insDEFEN' => $insDEFEN,
'insDCREN' => $insDCREN,
'insMMINTREN' => $insMMINTREN,
'insMONOACT' => $insMONOACT,
'insMODEN' => $insMODEN,
'insORDIN' => $insORDIN,
'insEAEANN' => $insEAEANN,
'insEAEAPEN' => $insEAEAPEN,
'insEAESEC1N' => $insEAESEC1N,
'insEAESEC2N' => $insEAESEC2N,
'insEAESEC3N' => $insEAESEC3N,
'insEAESEC4N' => $insEAESEC4N,
'insNBTOA' => $insNBTOA,
'insTCAEXPOR' => $insTCAEXPOR,
'insREGIMP' => $insREGIMP,
'insMONOREG' => $insMONOREG,
'insRPEN' => $insRPEN,
'insDEPCOMEN' => $insDEPCOMEN,
'insVMAJ' => $insVMAJ,
'insVMAJ1' => $insVMAJ1,
'insVMAJ2' => $insVMAJ2,
'insVMAJ3' => $insVMAJ3,
'SPEACT' => $bilSPEACT,
'SORLJ_N' => $bilSORLJ_N,
'SOEVT' => $bilSOEVT,
'SOROL' => $bilSOROL,
'SODJL_D' => $bilSODJL_D,
'SOEDRQ' => $bilSOEDRQ,
'SOEDRN_X' => $bilSOEDRN_X,
'SOEDRD_D' => $bilSOEDRD_D,
'SOEDRL_N' => $bilSOEDRL_N,
'SORSNC' => $bilSORSNC,
'SORSNO' => $bilSORSNO,
'SOETEL' => $bilSOETEL,
'SOEFAX' => $bilSOEFAX,
'SODTEN_D' => $bilSODTEN_D,
);
$insVMAJ3 = (int) substr($a,450, 1);
switch($insVMAJ)
{
case 'S':
// Annule et remplace le siège précédent
// if ($iinsee->addHisto($insSIREN, $insNIC)) {
// $iinsee->removeInsee($insSIREN, $insNIC);
$vmajS++;
// }
// else {
// echo date ('Y/m/d - H:i:s') . " - ERREUR d'historisation du siret $insSIREN $insNIC !\r\n";
// flush();
// }
break;
case 'C':
// Entrée d'un SIRET - Immatriculation d'un nouvel établissement
$vmajC++;
break;
case 'F':
// Etat final d'un SIRET modifié (après mise à jour)
// if ($iinsee->addHisto($insSIREN, $insNIC)) {
// $iinsee->removeInsee($insSIREN, $insNIC);
// }
$vmajF++;
break;
}
// $resultat=array_merge($resultat, array('Bodacc_Annee_Parution'=>$annee, 'Tri_User_Saisie'=>$_SESSION['user']));
$ret=$iDb->insert($db_table, $tabDataToInsert);
if ($ret!=1) {
echo date ('Y/m/d - H:i:s') . " - ERREUR à l'insertion du siret $insSIREN $insNIC : $ret !\r\n";
flush();
}
break;
case 'E':
case 'I':
// Requête de suppression
// **********************
// if ($iinsee->addHisto($insSIREN, $insNIC))
// $iinsee->removeInsee($insSIREN, $insNIC);
// else {
// echo date ('Y/m/d - H:i:s') . " - ERREUR d'historisation du siret $insSIREN $insNIC !\r\n";
// flush();
// }
switch($insVMAJ)
{
case 'E': // Suppression d'un SIRET - Cessation d'activité d'un établissement
$vmajE++;
break;
case 'I': // Etat initial d'un SIRET modifié (avant mise à jour)
$vmajI++;
break;
}
case 'EOF':
break;
}
/* if ($tabErreur) {
echo date ('Y/m/d - H:i:s') . " - ATTENTION, ligne $nbLignes, problèmes pour le siret $insSIREN $insNIC !!!\r\n";
print_array($tabErreur,0,"txt");
flush();
}
*/
// if ($nbLignes%20==0) sleep(1);
// print_array($tabDataToInsert,0,'txt');
unset($tabDataToInsert);
}
fclose ($fp);
$strUpdate='';
for ($j=$nbFichiers+1; isset($tabFichDate[$j]); $j++)
$strUpdate.=$tabFichDate[$j].';';
$tabDataToUpdate=array( 'VALEUR'=>$strUpdate,
'CLE'=>'INSEE_FICHIERS_MAJ');
// $iparam->setParamValeur($tabDataToUpdate);
$totI=$vmajS+$vmajC+$vmajF;
$totS=$vmajE+$vmajI;
$messageInsertion.="Résumé du traitement du fichier n°$nbFichiers=$nomFichier du mois de $moisFichier !\r\n\r\n";
$messageInsertion.="Nombre de nouvelles insertion: ".$totI."\r\n";
$messageInsertion.=" - dont Changement de siège: ".$vmajS."\r\n";
$messageInsertion.=" - dont Entrée d'un SIRET - Immatriculation d'un nouvel établissement: ".$vmajC."\r\n";
$messageInsertion.=" - dont Etat final d'un SIRET modifié (après mise à jour): ".$vmajF."\r\n";
$messageSuppression.="Nombre de suppression: ".$totS."\r\n";
$messageSuppression.=" - dont Suppression d'un SIRET - Cessation d'activité d'un établissement: ".$vmajE."\r\n";
$messageSuppression.=" - dont Etat initial d'un SIRET modifié (avant mise à jour): ".$vmajI."\r\n\r\n";
echo date ('Y/m/d - H:i:s') ." - Nombre de nouvelles insertion: ".$totI."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Changement de siège: ".$vmajS."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Entrée d'un SIRET ou Immatriculation d'un nouvel établissement: ".$vmajC."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Etat final d'un SIRET modifié (après mise à jour): ".$vmajF."\r\n";
echo date ('Y/m/d - H:i:s') ." - Nombre de suppression: ".$totS."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Suppression d'un SIRET ou Cessation d'activité d'un établissement: ".$vmajE."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Etat initial d'un SIRET modifié (avant mise à jour): ".$vmajI."\r\n";
echo date ('Y/m/d - H:i:s') ." - Fin du traitement du fichier n°$nbFichiers=$nomFichier du mois de $moisFichier !\r\n\r\n";
flush();
}
echo date ('Y/m/d - H:i:s')." - Création des index de recherche...\n";
/*
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`motNOM`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`shxNOM`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`phxNOM`);");
echo date ('Y/m/d - H:i:s')." - Création des index de NOM ok\n";
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`motADR`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`shxADR`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`phxADR`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`insNUMVOIE`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`insTYPVOIE`);");
$ret=mysql_query("ALTER TABLE `insee_recherche` ADD INDEX (`CodeInseeCommune`);");
echo date ('Y/m/d - H:i:s')." - Création des index d'ADRESSE ok\n";
*/
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX idxSiret(insSIREN, insNIC);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insSIEGE);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPET700);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPET31);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insCJ);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPEN700);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPEN31);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SPEACT);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SORLJ_N);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SOEVT);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SOETEL);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SOEFAX);");
echo date ('Y/m/d - H:i:s')." - Création des index de recherche terminée !\n";
// Mise à jour de la table PARAM
// -----------------------------
// 3 - pour la fin d'exécution du traitement en cours
$tabDataToUpdate=array('VALEUR'=>0,
'CLE'=>'INSEE_MAJ_ENCOURS');
// $iparam->setParamValeur($tabDataToUpdate);
$heureFin=date('H:i:s');
$tabDataToUpdateTraitement=array('NUM'=>$numScript,
'DATE_JOUR'=>$dateJour,
'HEURE_DEBUT'=>$heureDebut,
'HEURE_FIN'=>$heureFin,
'CODE_RETOUR'=>1,
'NB_MAIL'=>1,
'RESUME_EXEC'=>"traitement achevé correctement");
// $itraitement->setTraitement($tabDataToUpdateTraitement);
$tabDataMail= array('MAIL_OBJET'=>$sujetMail,
'MAIL_CORPS'=>"Traitement correct: \r\n".$messageInsertion."\r\n ".$messageSuppression."\r\n");
// $emailBatch=new EMailBatch($tabDataMail);
// $emailBatch->mailBatica($numScript);
echo date ('Y/m/d - H:i:s') . " - Fin correcte du traitement.\r\n";
exit();
function ecrireFichier($fichier,$texte){
$fp = fopen($fichier, "a");
fwrite($fp, $texte."\r\n");
fclose ($fp);
}
function valideSiret($SIRET) {
if (!is_numeric($SIRET))
return false;
$somme=0;
for ($i=0; $i<=12; $i+=2) { // Traitement PAIR
$var_tmp=(string)(2*((integer)substr($SIRET,$i,1)));
$som_tmp=0;
for($j=0;$j<strlen($var_tmp);$j++)
$som_tmp+=(integer)substr($var_tmp,$j,1);
$somme+=$som_tmp;
}
for ($i=1; $i<=13; $i+=2) // Traitement IMPAIR
$somme+=(integer)substr($SIRET,$i,1);
if ((integer)($somme/10)!=($somme/10))
return false;
return true;
}
?>