2023-11-02 14:00:26 +08:00

353 lines
14 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.zhgd.xmgl.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
* @program: wisdomSite
* @description: 芊熠人脸设备
* @author: Mr.Peng
* @create: 2020-11-24 11:54
**/
@Slf4j
public class QYUfaceUtil {
private static String url = "http://qy-rgs.com/api";
/**
* 添加设备
*
* @param appId
* @param appSecret
* @param type 设备类型1未知2人脸识别3人证比对
* @param serial 设备序列号
* @param name 设备名称
* @param inoutFlag 出入标识1:入0:出)
* @param groupId 设备组 ID为空时不属于任何组
* @return
*/
public static String addDevice(String appId, String appSecret, Integer type, String serial, String name,
Integer inoutFlag, String groupId) {
JSONObject body = new JSONObject();
body.put("type", type);
body.put("serial", serial);
body.put("name", name);
body.put("inoutFlag", inoutFlag);
body.put("groupId", groupId);
JSONObject json = createPostBody("DEVICE_CREATE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
JSONObject jsonObject = JSONObject.parseObject(resultJson.getString("body"));
return jsonObject.getString("deviceId");
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
}
/**
* 更新设备
*
* @param appId
* @param appSecret
* @param deviceId 设备id
* @param type 设备类型1未知2人脸识别3人证比对
* @param serial 设备序列号
* @param name 设备名称
* @param inoutFlag 出入标识1:入0:出)
* @param groupId 设备组 ID为空时不属于任何组
* @return
*/
public static Boolean updateDevice(String appId, String appSecret, String deviceId, Integer type, String serial,
String name, Integer inoutFlag, String groupId) {
JSONObject body = new JSONObject();
body.put("deviceId", deviceId);
body.put("type", type);
body.put("serial", serial);
body.put("name", name);
body.put("inoutFlag", inoutFlag);
body.put("groupId", groupId);
JSONObject json = createPostBody("DEVICE_UPDATE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
return true;
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
}
/**
* 删除设备
*
* @param appId
* @param appSecret
* @param deviceId 设备id
* @return
*/
public static Boolean deleteDevice(String appId, String appSecret, String deviceId) {
JSONObject body = new JSONObject();
body.put("deviceId", deviceId);
JSONObject json = createPostBody("DEVICE_DELETE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
return true;
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
}
/**
* @param appId
* @param appSecret
* @param id 回调记录Id
* @return
*/
public static String getUfaceUrl(String appId, String appSecret, String id) {
String img = "";
JSONObject body = new JSONObject();
body.put("id", id);
JSONObject json = createPostBody("RECOGNITION_PICTURE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
//log.info("芊熠人脸识别图片:"+result);
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
JSONObject jsonObject = JSONObject.parseObject(resultJson.getString("body"));
img = jsonObject.getString("snapPic");
}
}
return img;
}
/**
* 添加人员
*
* @param type 人员类型1白名单2黑名单3访客
* @param code 不能为空且必须为唯一。
* @param name 人员名称
* @param groupId 人员组 ID为空时不属于任何组
* @param phone 电话
* @param idNum 证件号
* @param icNum IC 卡号
* @param ethnic 民族
* @param gender 1男 2女 3未知
* @param birthday 出生日期yyyy-MM-dd
* @return
*/
public static JSONObject addOrUpdatePerson(String appId, String appSecret, Integer type, String code, String name,
String groupId, String phone, String idNum, String icNum, String ethnic,
Integer gender, String birthday, String[] deviceIds, String face) {
JSONObject body = new JSONObject();
JSONObject resultJsonStr = new JSONObject();
body.put("type", type);
body.put("code", code);
body.put("name", name);
body.put("groupId", groupId);
body.put("phone", phone);
body.put("idNum", idNum);
body.put("icNum", icNum);
body.put("ethnic", ethnic);
body.put("gender", gender);
body.put("birthday", birthday);
String[] str2 = new String[1];
str2[0] = Base64Util.getFileToBase64(face);
body.put("faces", str2);
JSONObject json = createPostBody("PERSON_CREATE_OR_UPDATE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
JSONObject jsonObject = JSONObject.parseObject(resultJson.getString("body"));
String resultStrEmpower = addEmpower(appId, appSecret, jsonObject.getString("personId"), deviceIds);
if (StringUtils.isNotEmpty(resultStrEmpower)) {
JSONObject jsonObjectEmpower = JSONObject.parseObject(resultStrEmpower);
if (!"SUCCESS".equals(jsonObjectEmpower.getString("code"))) {
throw new OpenAlertException(jsonObjectEmpower.getString("msg"));
} else {
return resultJsonStr;
}
}
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
return null;
}
/**
* 添加授权
*
* @param appId
* @param appSecret
* @param personId 人员 ID
* @param deviceIds 设备 ID 数组
* @return
*/
public static String addEmpower(String appId, String appSecret, String personId, String[] deviceIds) {
JSONObject body = new JSONObject();
body.put("personId", personId);
body.put("deviceIds", deviceIds);
body.put("passMonday", true);
body.put("passTuesday", true);
body.put("passWednesday", true);
body.put("passThursday", true);
body.put("passFriday", true);
body.put("passSaturday", true);
body.put("passSunday", true);
JSONObject json = createPostBody("PERSON_GRANT_DEVICE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
return result;
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
}
public static Boolean deleteNewPerson(String appId, String appSecret, String idCard) {
JSONObject body = new JSONObject();
body.put("currentPage", 0);
body.put("pageSize", 50);
JSONObject condition = new JSONObject();
condition.put("search", idCard);
body.put("condition", condition);
JSONObject json = createPostBody("PERSON_LIST", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
JSONObject jsonObject = JSONObject.parseObject(resultJson.getString("body"));
JSONArray array = (JSONArray) jsonObject.get("persons");
if (array != null && array.size() > 0) {
JSONObject obj = (JSONObject) array.get(0);
return deletePerson(appId, appSecret, obj.getString("id"));
}
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
return false;
}
/**
* 删除人员
*
* @param personId 人员 ID
* @return
*/
public static Boolean deletePerson(String appId, String appSecret, String personId) {
JSONObject body = new JSONObject();
body.put("personId", personId);
JSONObject json = createPostBody("PERSON_DELETE", appId, appSecret, body);
String result = sendHttpPostWithJson(url, json.toJSONString());
if (StringUtils.isNotEmpty(result)) {
JSONObject resultJson = JSONObject.parseObject(result);
if ("SUCCESS".equals(resultJson.getString("code"))) {
return true;
} else {
throw new OpenAlertException(resultJson.getString("msg"));
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
}
}
private static JSONObject createPostBody(String type, String appId, String appSecret, JSONObject body) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", type);
jsonObject.put("appId", appId);
String requestId = UUID.randomUUID().toString().replace("-", "");
jsonObject.put("requestId", requestId);
String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
jsonObject.put("timestamp", timestamp);
String sign = DigestUtils.md5Hex(appId + requestId + type + appSecret + timestamp).toLowerCase();
jsonObject.put("sign", sign);
jsonObject.put("body", body);
return jsonObject;
}
/**
* 发起post Json请求
*
* @param url
* @param json
* @return
*/
public static String sendHttpPostWithJson(String url, String json) {
log.info("sendHttpPostWithJson的url:{}", url);
log.info("sendHttpPostWithJson的请求json:{}", json);
CloseableHttpClient httpClient = null;
try {
httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
StringEntity requestEntity = new StringEntity(json, "utf-8");
requestEntity.setContentEncoding("UTF-8");
httpPost.setHeader("Content-type", "application/json");
//设置token请求参数
// JSONObject jsonObject = buildTokenParam();
//获取token设置在请求头
// String token = getToken("https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens", jsonObject.toJSONString(), 30000, 30000, "application/json");
// log.info("=======>token:" + token);
// httpPost.setHeader("X-Auth-Token", token);
httpPost.setEntity(requestEntity);
HttpResponse resp = httpClient.execute(httpPost);
if (resp.getStatusLine().getStatusCode() == 200) {
HttpEntity he = resp.getEntity();
String s = EntityUtils.toString(he, "UTF-8");
log.info("sendHttpPostWithJson的rs:{}", s);
return s;
}
return null;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}