def sendphoto_deive(user): u''' 下发人员相片到设备---传值过来的是人员对象 ''' from mysite.iclock.models import DevCmd import base64 e = user #Employee.objects.filter(PIN=pin)[0] if e.photo: f = open(e.photo.file.name, 'rb') #base64.b64encode(f.read()) base64_photo = base64.b64encode(f.read()) f.close() len_photo = len(base64_photo) if len_photo > 16 * 1024 / 0.75: return _(u'人员照片大小不能超过16Kb') attarea = e.attarea.all() data = "DATA UPDATE USERPIC PIN=%s\tSize=%s\tContent=%s\t" % ( device_pin(e.PIN), str(len_photo), base64_photo) if attarea: for atta in attarea: dvs = atta.device_set.all() if dvs: for dv in dvs: if dv.push_status[0] == '1' and dv.push_status[ 3] == '1': devcmd = DevCmd( SN=dv, CmdContent=data, CmdCommitTime=datetime.datetime.now()) devcmd.save(force_insert=True) return None else: return _(u'该人员未上传照片')
def create_emp_cmd(device,PIN=None): if PIN: data = 'DATA QUERY USERINFO PIN=%s'%device_pin(PIN) else: data = 'DATA QUERY USERINFO' if data: append_devcmd(device,data)
def send_dev_face(emp, dvs=None): if dev is None: dvs = get_device_from_emp(emp) faces = get_face_from_emp(emp) faces_count = len(faces) for face in faces: if faces_count > 0: line = "PIN=%s\tFID=%d\tSIZE=%d\tValid=%d\tTMP=%s" % (device_pin( face.user.PIN), face.faceid, len( face.facetemp), face.valid, face.facetemp) CMD = "DATA UPDATE FACE %s" % (line) append_emp_face_cmd(emp, CMD, face)
def enrollAEmp(dev, emp): from mysite.iclock.models import Template from mysite.personnel.models.model_emp import device_pin if not dev: dev = emp.Device() if not dev: return _(u"没有指定登记设备") fids = Template.objects.filter(UserID=emp).values_list('FingerID') for i in range(10): if (i, ) not in fids: append_dev_cmd( dev, "ENROLL_FP PIN=%s\tFID=%d\tRETRY=%d\tOVERWRITE=0" % (device_pin(emp.PIN), i, 3)) return return _(u'所有指纹已经被登记')
def DataPostCheck(sender, **kwargs): from mysite.personnel.models.model_emp import device_pin, Employee from mysite.iclock.models.modelproc import getEmpCmdStr oldObj = kwargs['oldObj'] newObj = kwargs['newObj'] request = sender if isinstance(newObj, Employee): try: for i in request.FILES: print i if "fileUpload" in request.FILES: from dbapp.additionfile import save_model_image_from_request f = device_pin(newObj.PIN) + ".jpg" print "upload:", f save_model_image_from_request(request, "fileUpload", Employee, f) except: errorLog() pass #errorLog() if oldObj: #修改人员数据 old_dev = oldObj.device() if int(oldObj.PIN) <> int( newObj.PIN): #changed the PIN, 需要把原来的PIN从设备中删除 if old_dev: delEmpFromDev(None, oldObj, None) dev = newObj.device() if dev: #需要把新的人员指纹传送到设备上 if not oldObj or (int(oldObj.PIN) <> int( newObj.PIN)): #changed the PIN, 需要把指纹等都传送一遍 append_emp_to_dev(dev, newObj) else: #只需要传送人员信息 cmdStr = getEmpCmdStr(newObj) append_dev_cmd(dev, cmdStr) backDev = dev.backup_device() if backDev: #把新的数据传送到登记考勤机的备份机上 append_dev_cmd(backDev, cmdStr) elif isinstance(newObj, Device): append_dev_cmd(newObj, "CHECK") #命令设备读取服务器上的配置信息 sn = request.POST["BackupDev"] if oldObj is not None: oldsn = oldObj.BackupDev if sn and oldsn != sn: #设置了一个新的备份设备,则把该设备登记的指纹复制到新的备份设备上 copyDevEmpToDev(get_device(sn), oldObj) if sn != newObj.BackupDev: newObj.BackupDev = sn newObj.save()
def delete_dev_user_photo(emp): ''' 下发删除设备上的人员照片 ''' from mysite.iclock.models import DevCmd e = emp data = "DATA DELETE USERPIC PIN=%s\t" % (device_pin(e.PIN)) attarea = e.attarea.all() if attarea: for arra in attarea: dvs = arra.device_set.all() if dvs: for dv in dvs: if dv.push_status[0] == '1' and dv.push_status[3] == '1': devcmd = DevCmd(SN=dv, CmdContent=data, CmdCommitTime=datetime.datetime.now()) devcmd.save(force_insert=True)
def sync_set_notice(code, context, startdatetime, min, user=None, device=None): data = "DATA UPDATE SMS MSG=%s\tTAG=%s\tUID=%s\tMIN=%s\tStartTime=%s" % ( context, user and '254' or '253', code, min, startdatetime) try: if user: user_data = "DATA UPDATE USER_SMS PIN=%s\tUID=%s" % (device_pin( user.PIN), code) device_list = get_user_device(user) #---得到用户对应的设备 if device_list: for dev in device_list: append_devcmd(dev, data) append_devcmd(dev, user_data) else: pass elif device: append_devcmd(device, data) except: print_exc()
def DataPostCheck(sender, **kwargs): from mysite.personnel.models.model_emp import device_pin,Employee from mysite.iclock.models.modelproc import getEmpCmdStr oldObj=kwargs['oldObj'] newObj=kwargs['newObj'] request=sender if isinstance(newObj, Employee): try: for i in request.FILES: print i if "fileUpload" in request.FILES: from dbapp.file_handler import save_model_image_from_request f=device_pin(newObj.PIN)+".jpg" print "upload:", f save_model_image_from_request(request, "fileUpload", Employee, f) except: errorLog() pass #errorLog() if oldObj: #修改人员数据 old_dev=oldObj.device() if int(oldObj.PIN)<>int(newObj.PIN): #changed the PIN, 需要把原来的PIN从设备中删除 if old_dev: delEmpFromDev(None, oldObj, None) dev=newObj.device() if dev: #需要把新的人员指纹传送到设备上 if not oldObj or (int(oldObj.PIN)<>int(newObj.PIN)): #changed the PIN, 需要把指纹等都传送一遍 append_emp_to_dev(dev, newObj) else: #只需要传送人员信息 cmdStr=getEmpCmdStr(newObj) append_dev_cmd(dev, cmdStr) backDev=dev.backup_device() if backDev: #把新的数据传送到登记考勤机的备份机上 append_dev_cmd(backDev, cmdStr) elif isinstance(newObj, Device): append_dev_cmd(newObj, "CHECK") #命令设备读取服务器上的配置信息 sn=request.POST["BackupDev"] if oldObj is not None: oldsn=oldObj.BackupDev if sn and oldsn!=sn: #设置了一个新的备份设备,则把该设备登记的指纹复制到新的备份设备上 copyDevEmpToDev(get_device(sn), oldObj) if sn!=newObj.BackupDev: newObj.BackupDev = sn newObj.save()
def save_area(eid, epin): ''' 将人员的redis区域信息保存到数据库 ''' from mysite.iclock.models import Area from base.sync_api import get_area from mysite.personnel.models.model_emp import device_pin from mysite.sql_utils import p_query, p_execute pin = device_pin(epin) m_list = get_area(pin) delete_sql = """ delete userinfo_attarea where employee_id = %s """ insert_sql = """ if not exists(select id from userinfo_attarea where employee_id = %(employee_id)s and area_id= %(area_id)s) insert into userinfo_attarea (employee_id,area_id) values(%(employee_id)s,%(area_id)s) """ sqlList = [] p_execute(delete_sql % eid) for a in m_list: p_execute(insert_sql % {'employee_id': eid, 'area_id': a})
def verification(request, device, Auty): ''' 后台验证(后台比对)的几个方式 ''' rawData = request.raw_post_data xx = rawData.split("\t") data_dict = {} for x in xx: d = x.split("=", 1) data_dict[d[0]] = d[1] devpin = data_dict["PIN"] tmp = data_dict["TMP"] size = data_dict["Size"] if int(size) != len(tmp): return 'AUTH=Failed\n' re_succ = "AUTH=Success\tPIN=%s\tName=%s\tPri=%s\tGrp=%s\tTZ=%s" if Auty == 'CARD': ####################卡比对 emp = Employee.objects.filter(Card=tmp) if len(emp) > 0: emp = emp[0] else: emp = None if devpin == '0': if emp: re_succ = re_succ % (device_pin( emp.PIN), emp.EName, str(emp.Privilege), str( emp.AccGroup), str(emp.TimeZones)) return get_photo(emp.photo, re_succ) else: if emp.PIN == format_pin(devpin): re_succ = re_succ % (device_pin( emp.PIN), emp.EName, str(emp.Privilege), str( emp.AccGroup), str(emp.TimeZones)) return get_photo(emp.photo, re_succ) elif Auty == 'FP': ####################指纹比对 if devpin == '0': emp = compare_cache_bio_emp(tmp) if emp: re_succ = re_succ % (device_pin( emp.PIN), emp.EName, str(emp.Privilege), str( emp.AccGroup), str(emp.TimeZones)) return get_photo(emp.photo, re_succ) # emps = Employee.objects.all() # mathpro = windll.LoadLibrary("match.dll") # send_tmp = create_string_buffer(tmp.decode()) # for emp in emps: # tmps =emp.template_set.all() # if tmps: # for t in tmps: # try: # user_tep = create_string_buffer(t.Template) # math_result = mathpro.process10(user_tep, send_tmp) # if math_result == FP_IDENTIFY_SUCCESS: # re_succ = re_succ%(device_pin(emp.PIN),emp.EName,str(emp.Privilege),str(emp.AccGroup),str(emp.TimeZones)) # return get_photo(emp.photo,re_succ) # except: # print_exc() else: emps = Employee.objects.filter(PIN=format_pin(devpin)) if emps and len(emps) > 0: emp = emps[0] else: return 'AUTH=Failed\t' tmps = Template.objects.filter(UserID=emp, Fpversion=device.Fpversion) mathpro = windll.LoadLibrary("match.dll") send_tmp = create_string_buffer(tmp.decode()) for t in tmps: source_tmp = create_string_buffer(t.Template) if device.Fpversion == '10': math_result = mathpro.process10(source_tmp, send_tmp) else: math_result = mathpro.process(source_tmp, send_tmp) if math_result == FP_IDENTIFY_SUCCESS: re_succ = re_succ % (device_pin(emp.PIN), emp.EName, str(emp.Privilege), str( emp.AccGroup), str(emp.TimeZones)) return get_photo(emp.photo, re_succ) elif Auty == 'Face': ####################面部模板比对 pass else: pass return 'AUTH=Failed\t'
def verification(request,device,Auty): ''' 后台验证(后台比对)的几个方式 ''' rawData = request.raw_post_data xx=rawData.split("\t") data_dict={} for x in xx: d=x.split("=",1) data_dict[d[0]]=d[1] devpin=data_dict["PIN"] tmp = data_dict["TMP"] size = data_dict["Size"] if int(size) !=len(tmp): return 'AUTH=Failed\n' re_succ="AUTH=Success\tPIN=%s\tName=%s\tPri=%s\tGrp=%s\tTZ=%s" if Auty == 'CARD':####################卡比对 emp = Employee.objects.filter(Card=tmp) if len(emp)>0: emp = emp[0] else: emp = None if devpin=='0': if emp: re_succ = re_succ%(device_pin(emp.PIN),emp.EName,str(emp.Privilege),str(emp.AccGroup),str(emp.TimeZones)) return get_photo(emp.photo,re_succ) else: if emp.PIN==format_pin(devpin): re_succ = re_succ%(device_pin(emp.PIN),emp.EName,str(emp.Privilege),str(emp.AccGroup),str(emp.TimeZones)) return get_photo(emp.photo,re_succ) elif Auty == 'FP':####################指纹比对 if devpin=='0': emp = compare_cache_bio_emp(tmp) if emp: re_succ = re_succ%(device_pin(emp.PIN),emp.EName,str(emp.Privilege),str(emp.AccGroup),str(emp.TimeZones)) return get_photo(emp.photo,re_succ) # emps = Employee.objects.all() # mathpro = windll.LoadLibrary("match.dll") # send_tmp = create_string_buffer(tmp.decode()) # for emp in emps: # tmps =emp.template_set.all() # if tmps: # for t in tmps: # try: # user_tep = create_string_buffer(t.Template) # math_result = mathpro.process10(user_tep, send_tmp) # if math_result == FP_IDENTIFY_SUCCESS: # re_succ = re_succ%(device_pin(emp.PIN),emp.EName,str(emp.Privilege),str(emp.AccGroup),str(emp.TimeZones)) # return get_photo(emp.photo,re_succ) # except: # print_exc() else: emps = Employee.objects.filter(PIN=format_pin(devpin)) if emps and len(emps)>0: emp = emps[0] else: return 'AUTH=Failed\t' tmps =Template.objects.filter(UserID=emp,Fpversion=device.Fpversion) mathpro = windll.LoadLibrary("match.dll") send_tmp = create_string_buffer(tmp.decode()) for t in tmps: source_tmp = create_string_buffer(t.Template) if device.Fpversion=='10': math_result = mathpro.process10(source_tmp, send_tmp) else: math_result = mathpro.process(source_tmp, send_tmp) if math_result == FP_IDENTIFY_SUCCESS: re_succ = re_succ%(device_pin(emp.PIN),emp.EName,str(emp.Privilege),str(emp.AccGroup),str(emp.TimeZones)) return get_photo(emp.photo,re_succ) elif Auty == 'Face':####################面部模板比对 pass else: pass return 'AUTH=Failed\t'
def delete_dev_face(emp): cmd = 'DATA DELETE FACE PIN=%s' % device_pin(emp.PIN) append_emp_delface_cmd(emp, cmd)