Пример #1
0
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'该人员未上传照片')
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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'所有指纹已经被登记')
Пример #5
0
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()
Пример #6
0
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)
Пример #7
0
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()
Пример #8
0
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()
Пример #9
0
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})
Пример #10
0
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'
Пример #11
0
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'
Пример #12
0
def delete_dev_face(emp):
    cmd = 'DATA DELETE FACE PIN=%s' % device_pin(emp.PIN)
    append_emp_delface_cmd(emp, cmd)