广联达考勤对接
版本修改
- 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接口