Ejemplo n.º 1
0
def cdata(request):
    '''
    设备向服务器的http:://xxx/cdata请求
    '''
    network_monitor(request)
    try:
        from mysite import authorize_fun
        language=request.REQUEST.get('language',None)   #---获得语言参数
        authorize_fun.check_push_device(language)   #---连接设备数量控制
        device = check_device(request, True)    #---检测、验证当前发出请求的设备
        if device is None: 
            return unknown_device_response()
        else:
            if device.deviceType==POSDEVICE:#消费机
                from mysite.pos.posdevview import pos_cdata
                ret = pos_cdata(request)
                return device_response_write(ret)
            elif device.deviceType in ['ACP', 'ACD']:#控制器or一体机:
                from mysite.iaccess.push_comm_center import acc_cdata
                ret = acc_cdata(request)
                return device_response_write(ret)
            
            if request.REQUEST.has_key('action'):
                return ok_response(device)
            elif request.method == 'GET':
                return cdata_get(request,device)
            elif request.method == 'POST':
                try:
                    return cdata_post(request, device)
#                    resp =cdata_post(request, device)
#                    return device_response_write(resp)
                except Exception, e:
                    return erro_response(e)
            else:
Ejemplo n.º 2
0
def getreq(request):
    '''
    http://xxx/getrequest
    设备读取服务器上存储的命令
    '''
    network_monitor(request)
    try:
        resp = ""  #---要直接发送的内容
        device = check_device(request, True)  #---检测、验证当前发出请求的设备
        if device is None:
            return unknown_device_response()
        else:
            if request.method == 'GET':
                if SYNC_MODEL:
                    return sync_getreq_get(request, device)
                else:
                    return getreq_get(request, device)
            elif request.method == 'POST':
                pass
            else:
                return unknown_data_response(device)
        # 自动升级固件功能
        # ......
    except Exception, e:
        import traceback
        traceback.print_exc()
        resp = u"%s" % e
        return device_response_write(resp)
Ejemplo n.º 3
0
def devpost(request):
    '''
    http://xxx/devicecmd
    设备返回设备命令执行结果的请求
    '''
    from commen_utils import parse_posts
    network_monitor(request)
    
    device = check_device(request)    #---检测、验证当前发出请求的设备
    if device is None: 
        return unknown_device_response()
    else:        
        if request.method == 'GET':
            pass
        elif request.method == 'POST':
            try:
                rd = request.raw_post_data
                if settings.ENCRYPT:    #---解密
                    try:
                        import lzo
                        rawData = lzo.bufferDecrypt(rd, device.sn)
                    except:
                        rawData = rd
                else:
                    rawData = rd
                    
                try:
                    data0 = rawData.decode("gb18030")   #---解码
                except:
                    data0 = rawData
                rets = {}
                pdata = parse_posts(data0)  #---解析,结果为字典的数组
                for apost in pdata: #[CMD,ID,Return]
                    id = int(apost["ID"])   # 命令ID
                    ret = apost["Return"]   #命令执行返回值
                    if apost["CMD"] == "INFO":#更新设备信息
                        parse_dev_info(device, apost['Content'])
                        device.save()
                        rets[id] = ret
                    elif (apost["CMD"] == "GetFile" or apost["CMD"] == "Shell") and ret > 0:
                        check_upload_file(request, apost)
                        rets[id] = ret
                    elif apost["CMD"] == "VERIFY SUM" and ret > 0:  #考勤校对
                        check_att_sum(apost,device)
                        rets[id] = ret
                    elif apost["CMD"] == "PutFile":
                        check_upgradefile(id,apost,device,ret)
                        post_check_update(device,[ret]) #立即单独更新此处理的开始指针
                        #rets[id] = ret
                    else:#默认情况下CMD为DATA
                        rets[id] = ret
                if len(rets) > 0:
                    update_cmds(device, rets)
                return device_response_write("OK")
            except:
                device_response_write("")
        else:
            return unknown_data_response(device)
Ejemplo n.º 4
0
def post_photo(request):
    '''
    http://xxx/fdata
    设备采集现场图片并上传到服务器
    '''
    network_monitor(request)
    device = check_device(request)
    if device is None:
        return unknown_device_response()
    else:
        try:
            pin = request.REQUEST.get("PIN", "")

            pin = pin.split(".")[0].split("-")
            dt = pin[0]
            if len(pin) == 2:  #Success Picture
                pin = pin[1]
            else:
                pin = ""
            d = request.raw_post_data
            if "CMD=uploadphoto" in d: d = d.split("CMD=uploadphoto")[1][1:]
            if "CMD=realupload" in d: d = d.split("CMD=realupload")[1][1:]
            if len(d) > 0:
                if 0 and SYNC_MODEL:
                    save_attphoto(
                        "%s/%s/%s" % (device.sn, dt[:4], dt[4:8]) + "/" +
                        format_pin(pin) + "_" + dt[8:] + ".jpg", d, "picture")
                else:
                    from mysite.iclock.models import Transaction
                    save_model_file(
                        Transaction,
                        "%s/%s/%s" % (device.sn, dt[:4], dt[4:8]) + "/" +
                        format_pin(pin) + "_" + dt[8:] + ".jpg", d, "picture")
            else:
                return device_response_write("No photo data!\n")

            if request.REQUEST.has_key('PhotoStamp'):
                if SYNC_MODEL:
                    device.photo_stamp = request.REQUEST['PhotoStamp']
                    device.set('photo_stamp')  #####更新考勤照片时间戳
                else:
                    DevLog(SN=device,
                           Cnt=1,
                           OP=u"PICTURE",
                           Object=pin,
                           OpTime=datetime.datetime.now()).save()
                    device.photo_stamp = request.REQUEST['PhotoStamp']
                    device.save()

            #check_and_save_cache(device)
        except:
            pass
        return device_response_write("OK\n")
Ejemplo n.º 5
0
def cdata(request):
    '''
    设备向服务器的http:://xxx/cdata请求
    '''
    from protocol_content import POSDEVICE
    network_monitor(request)
    try:
        device_type = request.REQUEST.get('devicetype')  #设备类型参数
        pos_device_type = request.REQUEST.get('device_type',
                                              None)  #兼容ID消费固件,后期统一使用devicetype
        if (device_type == POSDEVICE or pos_device_type == POSDEVICE):  #ID消费机
            from mysite.pos.pos_id.posdevview import pos_cdata
            if get_option("POS_ID"):
                resp = pos_cdata(request)
            else:  #防止IC消费软件,连接ID消费机
                from protocol_content import pos_return
                resp = pos_return()
            return device_response_write(resp)
        else:
            device = check_device(request, True, True)  #---检测、验证当前发出请求的设备
            if device is None:
                return unknown_device_response()
            else:
                if device.deviceType in ['ACP', 'ACD']:  #控制器or一体机:
                    from mysite.iaccess.push_comm_center import acc_cdata
                    ret = acc_cdata(request)
                    return device_response_write(ret)

                if request.REQUEST.has_key('action'):
                    return ok_response(device)
                elif request.method == 'GET':
                    return cdata_get(request, device)
                elif request.method == 'POST':
                    try:
                        return cdata_post(request, device)
    #                    resp =cdata_post(request, device)
    #                    return device_response_write(resp)
                    except Exception, e:
                        return erro_response(e)
                else:
                    return unknown_data_response(device)
Ejemplo n.º 6
0
def getreq(request):
    '''
    http://xxx/getrequest
    设备读取服务器上存储的命令
    '''
    network_monitor(request)
    try:
        resp = "" #---要直接发送的内容
        device = check_device(request, True)    #---检测、验证当前发出请求的设备
        if device is None: 
            return unknown_device_response()
        else:        
            if request.method == 'GET':
                return getreq_get(request,device)
            elif request.method == 'POST':
                pass
            else:
                return unknown_data_response(device)    
        # 自动升级固件功能
        # ......
    except  Exception, e:
        import traceback;traceback.print_exc()
        resp = u"%s" % e
        return device_response_write(resp)