Skip to content

广联达考勤对接

版本修改

  • 1.1.0-SNAPSHOT
    • 修改mqttToken获取
  • 1.0.3-SNAPSHOT
    • 修改上报白名单间隔
  • 1.0.2-SNAPSHOT
    • 修改大屏联动不显示BUG
  • 1.0.1-SNAPSHOT
    • 修复头像和近照相同的BUG
  • 1.0.0-SNAPSHOT
    • 封装考勤上传

对接需要的jar

现在以jar的形式提供。可以放到工程的libs目录下,然后添加依赖

dependencies {
    compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.2'
    compile 'com.squareup.okhttp3:okhttp:3.10.0'
    compile 'com.alibaba:fastjson:1.2.46'
    compile 'ch.qos.logback:logback-core:1.2.3'
    compile 'ch.qos.logback:logback-classic:1.2.3'
    compile files('libs/client-face-1.1.0-SNAPSHOT.jar') (需要根据具体的路径)
}

步骤

  • 广联达申请appid和秘钥
String appId = "广联达申请";
String secret = "广联达申请";
String deviceCode = "设备的SN号,需要提前导入到广联达的后台系统";
//true:测试环境
boolean testEnv = true;
  • 定义回调类(连接成功、断开、白名单变更会回调)
class DefaultConnectCallBack extends AbstractConnectCallBack {
    /**
    * 当项目上发生白名单修改的时候会调用该方法、只会返回有信息变更的人员、因此需要把变更的白名单保存起来。
    * 根据syncState判断是新增(ADD)还是删除(DELETE)、删除状态的人是没有权限通过的。
    * 白名单详细信息参考 https://glm.glodon.com/dev/api -> 硬件相关接口 ->4.获取白名单V3接口
    */
    @Override
    public WhiteListUpdateResult onWhiteListChange(WorkerInfo workerInfo) {
        //TODO begin 
        //----------硬件保存白名单信息----
        //TODO end

        WhiteListUpdateResult result = new WhiteListUpdateResult();
        result.setSuccess(true);
        //设置本地白名单数量(不包含syncState是DELETE),如果本地的数量和workerInfo的count不一样,说明发生了数据不一致,需要触发一下全量白名单
        //把人员信息保存到本地。
        result.setLocalWorkerCount(workerInfo.getTotalCount());
        return result;
    }

    /**
    * 连接成功后上报GPS位置
    * @return
    */
    @Override
    public GpsEvent uploadGpsLocationCallBack() {
        return null;
    }

    /**
    * 连接完成,可用于界面显示连接状态,不做过多处理,不抛出任何异常
    * @param currentMillisecond
    * @return
    */
    @Override
    public boolean connectComplete(long currentMillisecond) {
        return true;
    }

    /**
    * 连接断开,可用于界面显示连接状体,不要做过多处理,不抛出任何异常
    * @param throwable
    * @return
    */
    @Override
    public boolean connectionLost(Throwable throwable) {
        return true;
    }
}
  • 连接MQTT
ClientConfig clientConfig = new ClientConfig(appId, secret, deviceCode, testEnv);

/**
    * 创建并连接
*/
MQTTClient client = new MQTTClient(clientConfig, new DefaultConnectCallBack());
client.start();
  • 上传照片
/**
* 上传照片
* 文件名格式: 当前系统纳秒数 + "-" + "白名单中whitelistId" + ".png";
*/
String fileName = System.nanoTime() + "-" + "白名单中whitelistId" + ".png";
String filePath = "/xx/xxx/" + fileName;
File file = new File(filePath);
String base64 = FileUtils.readBytesAndEncodeToBase64String(file);

/**
* key:是上传成功后的完整的OSSkey.
* 如果要下载上传的照片可以使用 client.fullPhotoUrl(key),如果使用的http客户端不支持跟随重定向,需要先获取重定向后的地址
*/
String key = client.uploadPhoto(fileName, base64);
  • 上传考勤
/**
* 上传考勤
*/
Attendance attendance = new Attendance();

/**
* 照片的base64,如果有大屏的话会把base64同步给大屏
*/
attendance.setBase64(base64);

//0:出,1:进
attendance.setInOut((short) 1);

/**
*
*下载的白名单中的objectId
*
*/
attendance.setScanId("5013723");

/**
* 3:人脸
*/
attendance.setScanType((short) 3);

/**
* 当前刷卡记录产生的毫秒
*/
attendance.setTs(System.currentTimeMillis() + "");

/**
* 下载的白名单中的objectId
*/
attendance.setWorkerId(5013723L);

/**
* 闸机是否开门。0:没有开门,1:开门
*/
attendance.setOpen((short) 1);

/**
* 设置考勤中的照片(使用照片名称即可,文件之前已经上传)
*/
attendance.getScanData().put("scanPhoto", fileName);

/**
* 上传考勤:true 上传成功,false:上传失败
*
* 失败后要重传
*/
boolean uploadResult = client.uploadAttendance(attendance);
  • 全量拉取白名单 正常走白名单回调的增量获取。只有在本地白名单数量和白名单回调中的totalCount不一致的情形,需要异步的触发全量获取白名单,获取频率一小时一次。
WorkerInfo workerInfo = client.fetchAllWhiteList();
// 白名单详细信息参考 https://glm.glodon.com/dev/api -> 硬件相关接口 ->4.获取白名单V3接口