Esup NFC Tag

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

  • 10 parapluies
  • 40 couteaux "suisses"
  • 100 porte-cartes (multiple)
  • 400 porte-carte simples

A cela, dans le cadre des 20 ans d'ESUP-Portail, on ajoute dans le jeu environ 300 goodies "spécial 20 ans" ESUP 

On souhaite implémenter une loterie par badgeage de cartes pour distribuer ces lots à environ 500 personnes (environ 2000 personnes sont attendues aux JRES pendant 3 jours) :

  • 1 chance sur 60 59 de gagner un parapluie
  • puis 1 chance sur 40 31 de gagner un couteau "suisse"
  • puis 1 chance sur 5 de gagner un porte-cartes (multiple)
  • puis 1 chance sur 3 de gagner un porte-carte simple
  • puis encore 1 chance sur 3 de gagner le goodies "spécial 20 ans" ESUP 

Les chances de gagner doivent donc être fonction de ce nombres de joueurs potentiels et du stock de chaque lot.

...

Via le numéro de série de la carte, on fait une opération de modulo pour attribuer un lot (les modulos ont été choisis arbitrairement) : 

  • (csn % 6059)==32 16 -> parapluie
  • (csn % 4031)==3 2 -> couteau
  • (csn % 5)==2 -> porte-cartes multiple
  • (csn % 3)==0 -> porte-carte simple
  • (csn % 3)==1 -> goodies 20 ans

A chaque badgeage, on garde en mémoire le csn dans un fichier pour indiquer si la carte a déjà été attribuée simplement.

...

Bloc de code
languagepy
themeRDark
#!/usr/bin/python
# -*- coding: utf-8 -*-

import cgi
import re

args = cgi.parse()

print "Content-type: application/json"
print

if 'locations' in args.keys():
    if args['eppn'][0] in ('login@univbonamvin@univ-ville1rouen.fr', 'autrelogin@univlemaida3@univ-ville1rouen.fr', 'login@univesupdem@univ-ville2rouen.fr'):
        print '["Esup Goodies"]'
    else:
        print '[]'

elif 'isTagable' in args.keys():
    print 'OK'

elif 'validateTag' in args.keys():
    print 'OK'

elif 'tagIdCheck' in args.keys():
    csn = args['csn'][0]
    alreadyChecked = False
    file = open('/var/www/log/goodies.txt',"r")
    for line in file:
        if re.search(csn, line):
            alreadyChecked = True
    file.close()

    csnAsInt = int(csn, 16)
    if csnAsInt%60csnAsInt%59==3216:
        print('{"csn":"-", "eppn":"parapluie", "firstname":"%s", "lastname":"Parapluie !", "locations":"esup-goodies"}' % ('Gagné' + ('[RE]' if alreadyChecked else '')))
    elif csnAsInt%40csnAsInt%31==32:
        print('{"csn":"-", "eppn":"couteau", "firstname":"%s", "lastname":"Couteau !", "locations":"esup-goodies"}' % ('Gagné' + ('[RE]' if alreadyChecked else '')))
    elif csnAsInt%5==2:
        print('{"csn":"-", "eppn":"porte-cartes", "firstname":"%s", "lastname":" Porte cartes !", "locations":"esup-goodies"}' % ('Gagné' + ('[RE]' if alreadyChecked else '')))
    elif csnAsInt%3==0:
        print('{"csn":"-", "eppn":"porte-carte-simple", "firstname":"%s", "lastname":"Porte carte simple", "locations":"esup-goodies"}' % ('Gagné' + ('[RE]' if alreadyChecked else '')))
    elif csnAsInt%3==1:
        print('{"csn":"-", "eppn":"mystere", "firstname":"%s", "lastname":"Goodies 20 ans !", "locations":"esup-goodies"}' % ('Gagné' + ('[RE]' if alreadyChecked else '')))
    else:
        print('{"csn":"-", "eppn":"perdu", "firstname":"%s", "lastname":":''-(", "locations":"esup-goodies"}' % ('Perdu' + ('[RE]' if alreadyChecked else '')))

    if not alreadyChecked:
        file = open('/var/www/log/goodies.txt',"a")
        file.write(csn + "\n")
        file.close()

else:
    print '??[]'


On déclare ces 2 implémentations de WS dans la configuration d'esup-nfc-tag ( src/main/resources/META-INF/spring/applicationContext-custom.xml ) : 

...