-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
149 lines (118 loc) · 7.19 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import time
import log
import json
import getopt
from sys import argv
from Score import Score
from DataHandler import DataHandler
from PartialScore import PartialScore
__author__ = 'Thomas'
logger = log.setup_custom_logger("Main")
start_time = time.clock()
logger.info("Main Started at time %i"%start_time)
with open('test.json') as data_file:
data = json.load(data_file)
data_handler = DataHandler(usr=data["usr"], table=data["table"], url=data["url"], pwd=data["pwd"])
myopts, args = getopt.getopt(argv[1:], "c:i:", ["coeffs=", "ids="])
if len(argv) > 1:
for i, j in myopts:
if i == "--ids" or i == "-i":
requested_ids = j.split(",")
elif i == "--coeffs" or i == "-c":
input_coeffs = j.split(",")
coeffs = {}
assert len(input_coeffs) == 12, "User must provide exactly 12 coefficients"
assert len(requested_ids) > 0, "No ids requested"
coeff_list = ["PUISSANCE_PERSONNE", "TAUX_DE_TRANSFORMATION", "PRIX_PERSONNE",
"PRIX_METRE", "PRIX_PUISSANCE", "DELAIS_MOYEN_REPONSE_MESSAGES", "MOYENNE_EVALUATIONS_GLOBALE",
"CO_NAV_UNIQUEMENT", "A_QUAI_UNIQUMENT", "NB_IMAGES", "PHOTO_PROFIL", "ANNEE_CONSTRUCTION_AGREGE"]
for i in range(len(input_coeffs)):
coeffs[coeff_list[i-1]] = float(input_coeffs[i])
print coeffs
request_append = "AND P1.PK_PRODUITS IN ("
for ids in requested_ids:
request_append = request_append + "'" + ids + "' , "
request_append += "'0');"
query = "SELECT P1.PK_PRODUITS, PIS.PUISSANCE_MOTEUR, PIS.LONGUEUR,\
IF (NOT EXISTS (SELECT * FROM LINKS_PRODUITS_TYPES_PILOTES WHERE PK_PRODUITS = P1.PK_PRODUITS AND PK_IX_PRODUITS_TYPES_PILOTES <> 2), 1, 0) CO_NAV_UNIQUEMENT,\
IF (P1.LOCATION_QUAI = 1 AND P1.LOCATION_NAVIGATION = 0, 1, 0) A_QUAI_UNIQUEMENT,\
P1.MOYENNE_EVALUATIONS_GLOBALE NOTE_MOYENNE,\
P1.CAPACITE_NAVIGATION CAPACITE_CONSEILLEE,\
C1.TAUX_MOYEN_REPONSE_MESSAGES,\
D1.ZA1 REGION,\
C1.DELAIS_MOYEN_REPONSE_MESSAGES,\
P1.PK_IX_PRODUITS_TYPES TYPE_BATEAU_ID,\
P1.PRIX_HAUTE_SAISON_JOURNEE,\
PIS.ANNEE ANNEE_CONSTRUCTION,\
(SELECT COUNT(*) FROM CONVERSATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS) NB_INTERLOCUTEURS,\
(SELECT COUNT(*) FROM RESERVATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND PK_IX_RESERVATIONS_ETATS = 2 AND DATE_SUPPRESSION IS NULL) NB_ACCEPTEE,\
(SELECT COUNT(*) FROM PRODUITS_IMAGES WHERE PK_PRODUITS = P1.PK_PRODUITS AND DATE_SUPPRESSION IS NULL) NB_PHOTOS,\
(SELECT AVG(MOYENNE) FROM PRODUITS_EVALUATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS) MOYENNE_EVALUATIONS_GLOBALE, \
(SELECT COUNT(*) FROM PRODUITS_IMAGES WHERE PK_PRODUITS = P1.PK_PRODUITS) NB_IMAGES,\
IF((SELECT COUNT(*) FROM COMPTES_IMAGES WHERE PK_COMPTES = C1.PK_COMPTES), 1, 0) PHOTO_PROFIL,\
P1.AFFICHER \
FROM PRODUITS P1 \
INNER JOIN COMPTES C1 ON C1.PK_COMPTES = P1.PK_COMPTES \
INNER JOIN PRODUITS_INFORMATIONS_SUPPLEMENTAIRES PIS ON PIS.PK_PRODUITS = P1.PK_PRODUITS \
INNER JOIN FILS_ARIANE D1 ON D1.LNG = P1.LOCALISATION_LNG AND D1.LAT = P1.LOCALISATION_LAT AND D1.PK_IX_LANGAGES = 1 \
WHERE P1.DATE_SUPPRESSION IS NULL "
query += request_append
print query
score = PartialScore(coeffs, query, data_handler, requested_ids)
score.print_for_flo()
else:
sql_query1 = "SELECT P1.PK_PRODUITS, PIS.PUISSANCE_MOTEUR, PIS.LONGUEUR,\
IF (NOT EXISTS (SELECT * FROM LINKS_PRODUITS_TYPES_PILOTES WHERE PK_PRODUITS = P1.PK_PRODUITS AND PK_IX_PRODUITS_TYPES_PILOTES <> 2), 1, 0) CO_NAV_UNIQUEMENT,\
IF (P1.LOCATION_QUAI = 1 AND P1.LOCATION_NAVIGATION = 0, 1, 0) A_QUAI_UNIQUEMENT,\
P1.MOYENNE_EVALUATIONS_GLOBALE NOTE_MOYENNE,\
P1.CAPACITE_NAVIGATION CAPACITE_CONSEILLEE,\
C1.TAUX_MOYEN_REPONSE_MESSAGES,\
D1.ZA1 REGION,\
C1.DELAIS_MOYEN_REPONSE_MESSAGES,\
P1.PK_IX_PRODUITS_TYPES TYPE_BATEAU_ID,\
P1.PRIX_HAUTE_SAISON_JOURNEE,\
PIS.ANNEE ANNEE_CONSTRUCTION,\
(SELECT COUNT(*) FROM CONVERSATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS) NB_INTERLOCUTEURS,\
(SELECT COUNT(*) FROM RESERVATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND PK_IX_RESERVATIONS_ETATS = 2 AND DATE_SUPPRESSION IS NULL) NB_ACCEPTEE,\
(SELECT COUNT(*) FROM PRODUITS_IMAGES WHERE PK_PRODUITS = P1.PK_PRODUITS AND DATE_SUPPRESSION IS NULL) NB_PHOTOS,\
(SELECT AVG(MOYENNE) FROM PRODUITS_EVALUATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS) MOYENNE_EVALUATIONS_GLOBALE, \
(SELECT COUNT(*) FROM PRODUITS_IMAGES WHERE PK_PRODUITS = P1.PK_PRODUITS) NB_IMAGES,\
IF((SELECT COUNT(*) FROM COMPTES_IMAGES WHERE PK_COMPTES = C1.PK_COMPTES), 1, 0) PHOTO_PROFIL,\
P1.AFFICHER \
FROM PRODUITS P1 \
INNER JOIN COMPTES C1 ON C1.PK_COMPTES = P1.PK_COMPTES \
INNER JOIN PRODUITS_INFORMATIONS_SUPPLEMENTAIRES PIS ON PIS.PK_PRODUITS = P1.PK_PRODUITS \
INNER JOIN FILS_ARIANE D1 ON D1.LNG = P1.LOCALISATION_LNG AND D1.LAT = P1.LOCALISATION_LAT AND D1.PK_IX_LANGAGES = 1 \
WHERE P1.DATE_SUPPRESSION IS NULL;"
sql_query2 = "SELECT R1.PK_RESERVATIONS ID_TICKET,\
P1.PK_PRODUITS ID_BATEAU,\
P1.PK_IX_PRODUITS_TYPES TYPE_BATEAU_ID,\
PI.LONGUEUR,\
PI.ANNEE ANNEE_CONSTRUCTION,\
P1.CAPACITE_NAVIGATION CAPACITE_CONSEILLEE,\
D1.ZA1 REGION,\
PI.PUISSANCE_MOTEUR,\
R1.DATE_CREATION DATE_CREA_RESERVATION,\
P1.LOCALISATION_ADRESSE,\
C1.DELAIS_MOYEN_REPONSE_MESSAGES,\
ROUND(R1.MONTANT_TOTAL_SANS_CODE_PROMO/NB_JOURS) PRIX_JOURNEE_DATE_TICKET,\
(SELECT COUNT(*) FROM RESERVATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND PK_IX_RESERVATIONS_ETATS = 2 AND DATE_CREATION < R1.DATE_CREATION) NB_RESERVATIONS_DATE_TICKET,\
(SELECT COUNT(*) FROM CONVERSATIONS WHERE PK_COMPTES_PROPRIETAIRE = P1.PK_COMPTES AND DATE_CREATION < R1.DATE_CREATION) NB_INTERLOCUTEURS_DATE_TICKET,\
(SELECT COUNT(*) FROM PRODUITS_IMAGES WHERE PK_PRODUITS = P1.PK_PRODUITS AND DATE_CREATION < R1.DATE_CREATION) NB_PHOTOS_DATE_TICKET,\
(SELECT COUNT(*) FROM RESERVATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND DATE_CREATION < R1.DATE_CREATION) NB_DEMANDES_TOTAL_DATE_TICKET,\
(SELECT COUNT(*) FROM RESERVATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND DATE_CREATION < R1.DATE_CREATION AND PK_IX_RESERVATIONS_ETATS = 2) NB_DEMANDES_ACCEPTE_DATE_TICKET,\
(SELECT AVG(MOYENNE) FROM PRODUITS_EVALUATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND DATE_CREATION < R1.DATE_CREATION) NOTE_MOYENNE_DATE_TICKET \
FROM PRODUITS P1 \
INNER JOIN RESERVATIONS R1 ON R1.PK_PRODUITS = P1.PK_PRODUITS \
INNER JOIN PRODUITS_INFORMATIONS_SUPPLEMENTAIRES PI ON PI.PK_PRODUITS = P1.PK_PRODUITS \
INNER JOIN COMPTES C1 ON C1.PK_COMPTES = P1.PK_COMPTES \
INNER JOIN FILS_ARIANE D1 ON D1.LNG = P1.LOCALISATION_LNG AND D1.LAT = P1.LOCALISATION_LAT AND D1.PK_IX_LANGAGES = 1 \
WHERE (SELECT COUNT(*) FROM RESERVATIONS WHERE PK_PRODUITS = P1.PK_PRODUITS AND PK_IX_RESERVATIONS_ETATS = 2) >= 2;"
sql_query3 = "SELECT * FROM NEW_ALGO_COEFFS"
Score = Score(sql_query1, sql_query2, sql_query3, data_handler)
score = Score.get_score()
data_handler.update_table(score)
end_time = time.clock()
total_time = end_time - start_time
logger.info("Main ended at time %i"%end_time)
logger.info("Total computing time was %i seconds"%total_time)