Files
test_OgureNG/backend-django/backend/utils_calcul.py
2022-11-08 21:19:51 +01:00

193 lines
8.7 KiB
Python

"""
Ce module contient la fonction permettant de démarrer le scoring sur le sous-vivier désiré
"""
import time
from django.utils import timezone
from .models import Calcul
from .models import StatutCalculChoices as StatutCalcul
from .utils.logging import get_logger
from .utils_extraction import to_table_liste_preference, to_table_liste_preference_selectif
from .utils_insertion import (insert_liste_preference, insert_matching,
insert_Notation)
from .utils_matching import (matching_parfait, preprocess_matching,
preprocess_matchingSelectif)
from .utils_scoring import notations, notations_liste
logger = get_logger(__name__)
# Fonction de lancement du scoring
def lancer_calculs(pam_id,sv_id):
"""
Fonction de lancement du calcul du scoring
:param sv_id: L'id de sous vivier étudié
:type sv_id: char
"""
Statut = StatutCalcul
statut = Statut.TERMINE
pourcentage_incr = 16.67
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
start_time = time.time()
logger.info('---------------------Scoring beginning------------------------')
notations_list = notations(pam_id,sv_id)
logger.info('---------------------Scoring ending---------------------------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Scoring time -- %d seconds -----------------", time.time() - start_time)
start_time_insert = time.time()
logger.info('---------------------insert scoring results begining-----------')
insert_Notation(notations_list,pam_id,sv_id)
logger.info('---------------------insert scoring results ending-----------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
start_time2 = time.time()
logger.info('---------------------Preference list creation beginning-----------------')
df_preference = to_table_liste_preference(pam_id,sv_id)
logger.info('---------------------Preference list creation ending-------------------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
try:
start_time3 = time.time()
logger.info('---------------------Matching beginning------------------------')
proposant, disposant, capacite = preprocess_matching(pam_id, sv_id, df_preference)
results = matching_parfait(proposant, disposant, capacite)
logger.info('---------------------Matching ending---------------------------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Matching time -- %d seconds -----------------", time.time() - start_time3)
start_time_insert = time.time()
logger.info('---------------------insert matching results begining-----------')
insert_matching(results, pam_id)
logger.info('---------------------insert matching results ending-----------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage = 100
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
except Exception as e:
logger.warning('Arret du scoring, veuillez renseigner au moins un département',e)
# Fonction de lancement du scoring sélectif
def lancer_calculSelectif(sv_id, pam_id, l_a_id, l_p_id):
"""
Fonction de lancement du calcul du scoring sélectif
:param sv_id: L'id de sous vivier étudié
:param l_a_id: Liste d'ids d'administrés
:param l_p_id: Liste d'ids de postes
:type sv_id: char
"""
Statut = StatutCalcul
pourcentage_incr = 16.67
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
start_time = time.time()
logger.info('---------------------Scoring beginning------------------------')
notations_list = notations_liste(sv_id, pam_id, l_a_id, l_p_id)
logger.info('---------------------Scoring ending---------------------------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Scoring time -- %d seconds -----------------", time.time() - start_time)
start_time_insert = time.time()
logger.info('---------------------insert scoring results begining-----------')
insert_Notation(notations_list, pam_id, sv_id)
logger.info('---------------------insert scoring results ending-----------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
start_time2 = time.time()
logger.info('---------------------Preference list creation beginning-----------------')
df_preference = to_table_liste_preference_selectif(sv_id, pam_id,l_a_id,l_p_id)
logger.info('---------------------Preference list creation ending-------------------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
try:
start_time3 = time.time()
logger.info('---------------------Matching beginning------------------------')
proposant, disposant, capacite = preprocess_matchingSelectif(sv_id, pam_id,l_a_id,l_p_id, df_preference)
results = matching_parfait(proposant, disposant, capacite)
logger.info('---------------------Matching ending---------------------------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage += pourcentage_incr
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Matching time -- %d seconds -----------------", time.time() - start_time3)
start_time_insert = time.time()
logger.info('---------------------insert matching results begining-----------')
insert_matching(results, pam_id)
logger.info('---------------------insert matching results ending-----------')
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
calcul.ca_statut_pourcentage = 100
calcul.save()
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
raise Exception('Arret du calcul')
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
except Exception as e:
logger.warning('Arret du scoring, veuillez renseigner au moins un département',e)
return