Commit 598449f4 authored by JonathanMM's avatar JonathanMM

Ajout des resume des conso

parent cd5be3b5
from resumeLib import debuterCalculResume, debuterCalculResumeOfResume
from resumeLib import debuterCalculResume, debuterCalculResumeConso, debuterCalculResumeOfResume, debuterCalculResumeOfResumeConso
import pymysql, datetime
from config import getMysqlConnection
......@@ -25,8 +25,10 @@ for periode in periodes:
print("Période " + str(periode)+'; date = '+str(dateCourante))
if periode == 5:
debuterCalculResume(periode, dateCourante)
debuterCalculResumeConso(periode, dateCourante)
else:
debuterCalculResumeOfResume(periodePrecedente, periode, dateCourante)
debuterCalculResumeOfResumeConso(periodePrecedente, periode, dateCourante)
dateCourante = dateCourante + datetime.timedelta(minutes=periode)
periodePrecedente = periode
print("-> Fin période "+ str(periode))
\ No newline at end of file
from resumeLib import debuterCalculResumeOfResume
from resumeLib import debuterCalculResumeOfResume, debuterCalculResumeOfResumeConso
import datetime
debuterCalculResumeOfResume(15, 60)
\ No newline at end of file
debuterCalculResumeOfResume(15, 60)
debuterCalculResumeOfResumeConso(15, 60)
\ No newline at end of file
......@@ -159,4 +159,118 @@ def debuterCalculResumeOfResume(periodeOrigine, periodeFinale, dateCourante = da
dateConsoDT = dateCourante - datetime.timedelta(minutes=periodeFinale)
debutPeriodeMinute = (dateConsoDT.hour * 60 + dateConsoDT.minute) % periodeFinale
dateConsoDT = dateConsoDT.replace(microsecond = 0, second = 0) - datetime.timedelta(minutes=debutPeriodeMinute)
calculerResumeOfResume(dateConsoDT, periodeOrigine, periodeFinale)
\ No newline at end of file
calculerResumeOfResume(dateConsoDT, periodeOrigine, periodeFinale)
#StatutConso
def calculerResumeConso(dateConsoDT, dureeConso):
dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
minuteAvant = dateConsoDT - datetime.timedelta(minutes=1)
dateConsoAvant = minuteAvant.strftime("%Y-%m-%d %H:%M:%S")
finConso = dateConsoDT + datetime.timedelta(minutes=dureeConso)
dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")
proprietes = ['nbStation', 'nbBike', 'nbEBike', 'nbFreeEDock', 'nbEDock']
mysql = getMysqlConnection()
requete = mysql.cursor()
requete.execute("SELECT "+', '.join(proprietes)+" \
FROM statusConso \
WHERE (`date` >= '"+dateConso+"' AND `date` < '"+dateConsoFin+"') \
ORDER BY id ASC")
statusConso = requete.fetchall()
bikeList = {}
for row in statusConso:
for i, cle in enumerate(proprietes):
if not row[i] is None:
valeurProp = int(row[i])
if cle in ['nbStation', 'nbEDock']:
if not cle in bikeList:
bikeList[cle] = valeurProp
else:
bikeList[cle] = max(bikeList[cle], valeurProp)
else:
if not cle in bikeList:
bikeList[cle] = {'data': [], 'min': valeurProp, 'max': valeurProp}
else:
bikeList[cle]['max'] = max(bikeList[cle]['max'], valeurProp)
bikeList[cle]['min'] = min(bikeList[cle]['min'], valeurProp)
bikeList[cle]['data'].append(valeurProp)
for cle in bikeList:
info = bikeList[cle]
if type(info) is dict:
data = info['data']
bikeList[cle]['moyenne'] = sum(data) / max(len(data), 1)
if len(bikeList) > 0:
valeurs = bikeList
requete = mysql.cursor()
#nbEDock peut être null
nbEDock = 0
if nbEDock in valeurs:
nbEDock = valeurs['nbEDock']
requete.execute('INSERT INTO `resumeConso` (`id`, `date`, `duree`, `nbStation`, `nbBikeMin`, `nbBikeMax`, `nbBikeMoyenne`, `nbEBikeMin`, `nbEBikeMax`, `nbEBikeMoyenne`, `nbFreeEDockMin`, `nbFreeEDockMax`, `nbFreeEDockMoyenne`, `nbEDock`) VALUES \
(NULL, "'+dateConso+'", '+str(dureeConso)+', '+str(valeurs['nbStation'])+', '+str(valeurs['nbBike']['min'])+', '+str(valeurs['nbBike']['max'])+', '+str(valeurs['nbBike']['moyenne'])+', '+str(valeurs['nbEBike']['min'])+', '+str(valeurs['nbEBike']['max'])+', '+str(valeurs['nbEBike']['moyenne'])+', '+str(valeurs['nbFreeEDock']['min'])+', '+str(valeurs['nbFreeEDock']['max'])+', '+str(valeurs['nbFreeEDock']['moyenne'])+', '+str(nbEDock)+')')
def calculerResumeOfResumeConso(dateConsoDT, dureeConsoOrigine, dureeConsoFinale):
dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
finConso = dateConsoDT + datetime.timedelta(minutes=dureeConsoFinale)
dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")
#On récupère les conso
proprietes = ['nbStation', 'nbBikeMin', 'nbBikeMax', 'nbBikeMoyenne', 'nbEBikeMin', 'nbEBikeMax', 'nbEBikeMoyenne', 'nbFreeEDockMin', 'nbFreeEDockMax', 'nbFreeEDockMoyenne', 'nbEDock']
mysql = getMysqlConnection()
requete = mysql.cursor()
requete.execute("SELECT "+', '.join(proprietes)+" FROM `resumeConso` WHERE duree = "+str(dureeConsoOrigine)+" and date >= '"+dateConso+"' and date < '"+dateConsoFin+"' order by date")
consos = requete.fetchall()
precedentCode = None
infosCourantes = {}
for row in consos:
for i, cle in enumerate(proprietes):
if cle[-7:] == 'Moyenne':
valeurProp = float(row[i])
else:
valeurProp = int(row[i])
if cle in infosCourantes:
if cle[-7:] == 'Moyenne':
infosCourantes[cle].append(valeurProp)
elif cle[-3:] == 'Min':
infosCourantes[cle] = min(infosCourantes[cle], valeurProp)
else:
infosCourantes[cle] = max(infosCourantes[cle], valeurProp)
else:
if cle[-7:] == 'Moyenne':
infosCourantes[cle] = [valeurProp]
else:
infosCourantes[cle] = valeurProp
#Et on enregistre
if infosCourantes != {}:
strValeurs = ""
for i, cle in enumerate(proprietes):
if cle[-7:] == 'Moyenne':
data = infosCourantes[cle]
moyenne = sum(data) / max(len(data), 1)
infosCourantes[cle] = moyenne
if i != 0:
strValeurs += ', '
strValeurs += str(infosCourantes[cle])
requete = mysql.cursor()
requete.execute('INSERT INTO `resumeConso` (`id`, `date`, `duree`, '+', '.join(proprietes)+') VALUES \
(NULL, "'+dateConso+'", '+str(dureeConsoFinale)+', '+strValeurs+')')
def debuterCalculResumeConso(periode, dateCourante = datetime.datetime.now()):
dateConsoDT = dateCourante - datetime.timedelta(minutes=periode)
debutPeriodeMinute = dateConsoDT.minute % periode
dateConsoDT = dateConsoDT.replace(microsecond = 0, second = 0, minute=dateConsoDT.minute - debutPeriodeMinute)
calculerResumeConso(dateConsoDT, periode)
def debuterCalculResumeOfResumeConso(periodeOrigine, periodeFinale, dateCourante = datetime.datetime.now()):
dateConsoDT = dateCourante - datetime.timedelta(minutes=periodeFinale)
debutPeriodeMinute = (dateConsoDT.hour * 60 + dateConsoDT.minute) % periodeFinale
dateConsoDT = dateConsoDT.replace(microsecond = 0, second = 0) - datetime.timedelta(minutes=debutPeriodeMinute)
calculerResumeOfResumeConso(dateConsoDT, periodeOrigine, periodeFinale)
\ No newline at end of file
from resumeLib import debuterCalculResumeOfResume
from resumeLib import debuterCalculResumeOfResume, debuterCalculResumeOfResumeConso
import datetime
debuterCalculResumeOfResume(5, 15)
\ No newline at end of file
debuterCalculResumeOfResume(5, 15)
debuterCalculResumeOfResumeConso(5, 15)
\ No newline at end of file
from resumeLib import debuterCalculResumeOfResume
from resumeLib import debuterCalculResumeOfResume, debuterCalculResumeOfResumeConso
import datetime
debuterCalculResumeOfResume(60, 360)
\ No newline at end of file
debuterCalculResumeOfResume(60, 360)
debuterCalculResumeOfResumeConso(60, 360)
\ No newline at end of file
from resumeLib import debuterCalculResume
from resumeLib import debuterCalculResume,debuterCalculResumeConso
import datetime
debuterCalculResume(5)
\ No newline at end of file
debuterCalculResume(5)
debuterCalculResumeConso(5)
\ No newline at end of file
-- phpMyAdmin SQL Dump
-- version 4.6.6deb4
-- version 4.6.5.2
-- https://www.phpmyadmin.net/
--
-- Client : localhost:3306
-- Généré le : Jeu 11 Janvier 2018 à 07:58
-- Version du serveur : 10.1.25-MariaDB-
-- Version de PHP : 7.0.22-0ubuntu0.17.04.1
-- Client : localhost
-- Généré le : Sam 13 Janvier 2018 à 20:47
-- Version du serveur : 10.1.21-MariaDB
-- Version de PHP : 7.0.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Base de données : `velib`
--
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
-- --------------------------------------------------------
--
-- Base de données : `c6velib`
-- Structure de la table `resumeConso`
--
CREATE TABLE `resumeConso` (
`id` int(11) NOT NULL,
`date` datetime NOT NULL,
`duree` int(4) NOT NULL,
`nbStation` int(11) NOT NULL,
`nbBikeMin` int(11) NOT NULL,
`nbBikeMax` int(11) NOT NULL,
`nbBikeMoyenne` int(11) NOT NULL,
`nbEBikeMin` int(11) NOT NULL,
`nbEBikeMax` int(11) NOT NULL,
`nbEBikeMoyenne` int(11) NOT NULL,
`nbFreeEDockMin` int(11) NOT NULL,
`nbFreeEDockMax` int(11) NOT NULL,
`nbFreeEDockMoyenne` int(11) NOT NULL,
`nbEDock` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
......@@ -56,6 +73,19 @@ CREATE TABLE `resumeStatus` (
-- --------------------------------------------------------
--
-- Structure de la table `signalement`
--
CREATE TABLE `signalement` (
`id` int(11) NOT NULL,
`code` int(11) NOT NULL,
`dateSignalement` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`estFonctionnel` tinyint(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `stations`
--
......@@ -106,21 +136,15 @@ CREATE TABLE `statusConso` (
`nbEDock` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
-- --------------------------------------------------------
--
-- Structure de la table `signalement`
-- Index pour les tables exportées
--
CREATE TABLE `signalement` (
`id` int(11) NOT NULL,
`code` int(11) NOT NULL,
`dateSignalement` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`estFonctionnel` tinyint(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Index pour les tables exportées
-- Index pour la table `resumeConso`
--
ALTER TABLE `resumeConso`
ADD PRIMARY KEY (`id`);
--
-- Index pour la table `resumeStatus`
......@@ -130,6 +154,12 @@ ALTER TABLE `resumeStatus`
ADD KEY `date` (`date`),
ADD KEY `duree` (`duree`);
--
-- Index pour la table `signalement`
--
ALTER TABLE `signalement`
ADD PRIMARY KEY (`id`);
--
-- Index pour la table `stations`
--
......@@ -150,21 +180,25 @@ ALTER TABLE `statusConso`
ADD PRIMARY KEY (`id`);
--
-- Index pour la table `signalement`
-- AUTO_INCREMENT pour les tables exportées
--
ALTER TABLE `signalement`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT pour les tables exportées
-- AUTO_INCREMENT pour la table `resumeConso`
--
ALTER TABLE `resumeConso`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `resumeStatus`
--
ALTER TABLE `resumeStatus`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `signalement`
--
ALTER TABLE `signalement`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `status`
--
ALTER TABLE `status`
......@@ -173,14 +207,4 @@ ALTER TABLE `status`
-- AUTO_INCREMENT pour la table `statusConso`
--
ALTER TABLE `statusConso`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `signalement`
--
ALTER TABLE `signalement`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
\ No newline at end of file
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment