package com.zhgd.xmgl.util; import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpGlobalConfig; import cn.hutool.http.HttpRequest; 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.lang3.StringUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @program: wisdomSite * @description: 杭州宇泛智能人脸设备WO平台 * @author: Mr.Peng * @create: 2020-09-22 16:24 **/ @Slf4j public class UniUbiUtil { private static String ufaceUrl ="http://wo-api.uni-ubi.com/"; /** * 获取token * @param appId * @param appKey * @param appSecret * @return */ public static String getToken(String appId,String appKey,String appSecret){ String token=null; Map map=new HashMap(); //map.put("appId", appId); map.put("appKey", appKey); String timestamp=Long.toString(System.currentTimeMillis()); map.put("timestamp", timestamp); map.put("sign", MD5.GetMD5Code(appKey+timestamp+appSecret)); log.info(appKey+timestamp+appSecret); log.info(MD5.GetMD5Code(appKey+appKey+appSecret)); String json= get(ufaceUrl+"/v1/"+appId+"/auth", null,map); log.info(json); if(json!=null&&json.length()>0){ JSONObject obj=JSONObject.parseObject(json); if("WO_SUS1000".equals(obj.get("code").toString())){ token=(String) obj.get("data"); }else{ throw new OpenAlertException((String) obj.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } return token; } //设备录入 public static boolean regDevice(String appId,String appKey,String appSecret,String deviceKey){ String token=getToken(appId,appKey,appSecret); Map headerMap = new HashMap<>(); headerMap.put("token", token); JSONObject map = new JSONObject(); map.put("name", deviceKey); String resJson = post(ufaceUrl + "/v1/" + appId + "/device/"+deviceKey+"/recType/1", map.toJSONString(),headerMap); log.info("---------添加宇泛设备返回结果-----------"+deviceKey+"-----"+resJson); if(resJson!=null&&resJson.length()>0){ JSONObject obj=JSONObject.parseObject(resJson); if("WO_SUS1000".equals(obj.get("code").toString())){ return true; }else{ throw new OpenAlertException((String) obj.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } } //删除设备 public static boolean deleteDevice(String appId,String appKey,String appSecret,String deviceKey){ String token=getToken(appId,appKey,appSecret); Map headerMap = new HashMap<>(); headerMap.put("token", token); log.info("删除设备"+deviceKey); String json = delete(ufaceUrl + "/v1/" + appId + "/device/" + deviceKey, null,headerMap); log.info("-------------删除宇泛设备返回结果---------"+deviceKey+"--------"+json); if(json!=null&&json.length()>0){ JSONObject object=JSONObject.parseObject(json); if("WO_SUS1000".equals(object.get("code").toString())){ return true; }else{ throw new OpenAlertException((String) object.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } } /** * 添加人员 * @param appId * @param appKey * @param appSecret * @param name * @param idNo * @param idcardNo * @param imageUrl * @param deviceKeys * @return */ public static boolean addPerson(String appId,String appKey,String appSecret,String name,String idNo,String idcardNo,String imageUrl,String deviceKeys){ boolean flag=false; String token=getToken(appId,appKey,appSecret); if(StringUtils.isNotEmpty(idcardNo)){ delPerson(token,appId,appKey,appSecret,idcardNo); } if(token!=null){ Map headerMap = new HashMap<>(); headerMap.put("token", token); JSONObject param = new JSONObject(); param.put("cardNo", idNo); param.put("name", name); param.put("idCardNo", idcardNo); String json=post(ufaceUrl+"/v1/"+appId+"/person", param.toJSONString(), headerMap); log.info("-------------宇泛添加人员返回结果--------name-"+name+"----idcardNo-"+idcardNo+"----"+json); if(json!=null&&json.length()>0){ JSONObject object=JSONObject.parseObject(json); if("WO_SUS1000".equals(object.get("code").toString())){ JSONObject object2=(JSONObject) object.get("data"); String guid=String.valueOf(object2.get("guid").toString()); log.info(guid); JSONObject param2=new JSONObject(); param2.put("personGuid", guid); param2.put("base64", Base64Util.getFileToBase64(imageUrl)); String json2=post(ufaceUrl+"/v1/"+appId+"/face", param2.toJSONString(), headerMap); log.info("宇泛添加人员照片"+json2); log.info("------宇泛添加人员照片返回结果--------name-"+name+"----idcardNo-"+idcardNo+"----"+json2); if(json2!=null&&json2.length()>0){ JSONObject obj=JSONObject.parseObject(json2); if("WO_SUS1000".equals(obj.get("code").toString())){ for(String dev:deviceKeys.split(",")){ String json3=put(ufaceUrl+"/v1/"+appId+"/device/"+dev+"/person/"+guid+"/type/1", headerMap); log.info("------宇泛人员授权返回结果--------name-"+name+"----idcardNo-"+idcardNo+"----"+json3); if(json3!=null&&json3.length()>0){ JSONObject obj2=JSONObject.parseObject(json3); if("WO_SUS1000".equals(obj2.get("code").toString())){ flag=true; }else{ throw new OpenAlertException((String) obj2.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } } }else{ throw new OpenAlertException((String) obj.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } }else{ throw new OpenAlertException((String) object.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } return flag; } /** * 删除人员 * @param token * @param appId * @param appKey * @param appSecret * @param idcardNo * @return */ public static boolean delPerson(String token,String appId, String appKey, String appSecret, String idcardNo) { Map result = new HashMap<>(); if(StringUtils.isEmpty(token)){ token = getToken(appId, appKey, appSecret); } Map headerMap = new HashMap<>(); headerMap.put("token", token); Map map = new HashMap<>(); map.put("idCardNo", idcardNo); String resJson = get(ufaceUrl + "/v1/" + appId + "/person", map, headerMap); log.info(resJson); if(resJson!=null&&resJson.length()>0){ JSONObject obj=JSONObject.parseObject(resJson); if("WO_SUS1000".equals(obj.get("code").toString())){ JSONArray arry= JSONArray.parseArray(JSONObject.parseObject(obj.getString("data")).getString("content")); if(arry!=null) { if (arry.size() > 0) { JSONObject json = (JSONObject) arry.get(0); Map parm = new HashMap<>(); parm.put("personGuids", json.getString("guid")); String resJson2 = delete(ufaceUrl + "/v1/" + appId + "/person", parm, headerMap); log.info(resJson2); log.info("-------------宇泛设备删除人员返回结果--------idcardNo---"+idcardNo+"--------"+resJson2); JSONObject json2 = JSONObject.parseObject(resJson2); if (!StringUtils.isEmpty(json2.get("code").toString()) && "WO_SUS1000".equals(json2.getString("code"))) { return true; } else { throw new OpenAlertException((String) json2.get("msg")); } } else { return true; } }else{ return true; } }else{ throw new OpenAlertException((String) obj.get("msg")); } }else{ throw new OpenAlertException(MessageUtil.get("failErr")); } } /** * 设备在线离线情况 * { * "deviceKey": "84E0F420883802FA",// 设备序列号 * "onlineState": true// 在线情况 true:在线 false:离线 * } * @param appId * @param appKey * @param appSecret * @return */ public static List> getDevonlineState(String appId,String appKey,String appSecret){ List> list=new ArrayList<>(); String token=getToken(appId,appKey,appSecret); Map headerMap = new HashMap<>(); headerMap.put("token", token); Map map = new HashMap<>(); String resJson = get(ufaceUrl + "/v1/" + appId + "/device/onlineState", map, headerMap); log.info(resJson); if(resJson!=null&&resJson.length()>0){ JSONObject obj=JSONObject.parseObject(resJson); if("WO_SUS1000".equals(obj.get("code").toString())){ Map dtat= BeanUtil.beanToMap(obj.getString("data")); list= (List>) dtat.get("content"); } } return list; } //识别记录重传 public static void retryAttendance(String appId,String appKey,String appSecret,List deviceList,String startTime,String endTime,String personGuid){ try { String token=getToken(appId,appKey,appSecret); Map headerMap = new HashMap<>(); headerMap.put("token", token); startTime=startTime+"T00:00:00+0000"; endTime=endTime+"T23:59:59+0000"; if(deviceList!=null&&deviceList.size()>0){ for(String deviceKey:deviceList){ JSONObject map = new JSONObject(); map.put("deviceKey", deviceKey); map.put("recognitionType", 1); if(StringUtils.isNotEmpty(personGuid)){ map.put("personGuid", personGuid); } map.put("startTime", startTime); map.put("endTime", endTime); String json = post(ufaceUrl + "/v1/" + appId + "/recognition/retry", map.toJSONString(),headerMap); log.info("宇泛WO识别记录重传:"+json); } } } catch (Exception e) { e.printStackTrace(); } } public static String post(String urlString,String body,Map headerMap) { return HttpRequest.post(urlString).addHeaders(headerMap).body(body).timeout(HttpGlobalConfig.getTimeout()).execute().body(); } public static String get(String urlString,Map paramMap,Map headerMap) { return HttpRequest.get(urlString).addHeaders(headerMap).form(paramMap).timeout(HttpGlobalConfig.getTimeout()).execute().body(); } public static String put(String urlString,Map headerMap) { return HttpRequest.put(urlString).addHeaders(headerMap).timeout(HttpGlobalConfig.getTimeout()).execute().body(); } public static String delete(String urlString, Map paramMap,Map headerMap) { return HttpRequest.delete(urlString).addHeaders(headerMap).form(paramMap).timeout(HttpGlobalConfig.getTimeout()).execute().body(); } public static void main(String[] args) { //String token=getToken("C32A612DB50E41CEA877373E8A25F735","BC6ADC048174459389A23A209875824F","42002457B01D4812866CEB023D31C253"); //boolean s=regDevice("C32A612DB50E41CEA877373E8A25F735","BC6ADC048174459389A23A209875824F","42002457B01D4812866CEB023D31C253","84E0F420242902F8"); //boolean s=deleteDevice("C32A612DB50E41CEA877373E8A25F735","BC6ADC048174459389A23A209875824F","42002457B01D4812866CEB023D31C253","84E0F420242902F8"); //String appId,String appKey,String appSecret,String name,String idNo,String idcardNo,String imageUrl,String deviceKeys //boolean s=addPerson("C32A612DB50E41CEA877373E8A25F735","BC6ADC048174459389A23A209875824F","42002457B01D4812866CEB023D31C253","王五","22222","23210319900926461X","http://129.204.165.94:8080/itbgp/file/4760aef7-f6ad-425a-8823-c1d306b3d1ea.jpg","84E0F420242902F8"); //boolean s=delPerson(null,"C32A612DB50E41CEA877373E8A25F735","BC6ADC048174459389A23A209875824F","42002457B01D4812866CEB023D31C253","410522198607061618"); //List> list=getDevonlineState("C32A612DB50E41CEA877373E8A25F735","BC6ADC048174459389A23A209875824F","42002457B01D4812866CEB023D31C253"); List devList=new ArrayList<>(); devList.add("84E0F428592D51FA"); //retryAttendance("8FBF8823B69141B9887C7A83BAA7ABC7","38824FDDAB2540F68A6016E8B9754FE5","EE8895820EEF4027BE68028C0BD7AF28",devList,"2022-02-18","2022-02-18"); } }