| @@ -293,12 +293,6 @@ | |||||
| <artifactId>spring-boot-starter-batch</artifactId> | <artifactId>spring-boot-starter-batch</artifactId> | ||||
| </dependency> | </dependency> | ||||
| <dependency> | |||||
| <groupId>org.springframework.boot</groupId> | |||||
| <artifactId>spring-boot-devtools</artifactId> | |||||
| <scope>runtime</scope> | |||||
| <optional>true</optional> | |||||
| </dependency> | |||||
| <dependency> | <dependency> | ||||
| <groupId>com.auth0</groupId> | <groupId>com.auth0</groupId> | ||||
| @@ -313,6 +307,12 @@ | |||||
| <version>3.0.0</version> | <version>3.0.0</version> | ||||
| </dependency> | </dependency> | ||||
| <dependency> | |||||
| <groupId>com.squareup.okhttp3</groupId> | |||||
| <artifactId>okhttp</artifactId> | |||||
| <version>3.14.9</version> | |||||
| </dependency> | |||||
| </dependencies> | </dependencies> | ||||
| @@ -27,14 +27,6 @@ public class AuthMappingItemProcessorService implements ItemProcessor<AuthMappin | |||||
| @Autowired | @Autowired | ||||
| private EmpDao empDao; | private EmpDao empDao; | ||||
| @Autowired | |||||
| private AuthMappingDao authMappingDao; | |||||
| @Autowired | |||||
| private DeviceServiceSupport deviceService; | |||||
| @Autowired | |||||
| private RedisUtils redisUtils; | |||||
| @Override | @Override | ||||
| public AuthMapping process(AuthMapping authMapping) throws Exception { | public AuthMapping process(AuthMapping authMapping) throws Exception { | ||||
| @@ -52,24 +44,7 @@ public class AuthMappingItemProcessorService implements ItemProcessor<AuthMappin | |||||
| int status = jsonObject.getInteger("status"); | int status = jsonObject.getInteger("status"); | ||||
| if (status == 0) { | if (status == 0) { | ||||
| String mis = DateUtils.getMillsSecondsDouble(); | |||||
| authMappingDao.updateTsByEmp(authMapping.getEmpId(), mis); | |||||
| List<AuthMapping> authMappings = authMappingDao.getByEmp(authMapping.getEmpId()); | |||||
| List<String> list = Lists.newArrayList(); | |||||
| authMappings.forEach(am->{ | |||||
| list.add(am.getDevId()); | |||||
| }); | |||||
| deviceService.updateAuthTs(list, mis); | |||||
| for (String a : list) { | |||||
| if (StringUtils.isNotEmpty(a) && Emp.STATUS_NORMAL.equals(emp.getStatus())) { | |||||
| redisUtils.setGroupString(a+":face-latest-ts", mis); | |||||
| } | |||||
| } | |||||
| empService.updAuthMapping(emp); | |||||
| } | } | ||||
| } | } | ||||
| return null; | return null; | ||||
| @@ -629,21 +629,18 @@ public class EmpServiceSupport | |||||
| return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, hasObj.getString("errMsg")); | return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, hasObj.getString("errMsg")); | ||||
| } | } | ||||
| JSONObject obj = faceServiceSupport.hasface(token, id, base64Image); | |||||
| JSONObject faceRectangle = obj.getJSONObject("data"); | |||||
| int status = obj.getInteger("status"); | |||||
| JSONObject obj = faceServiceSupport.getFaceExtraction(token, id, base64Image); | |||||
| if (status != 0) { | |||||
| return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, obj.getString("errMsg")); | |||||
| } | |||||
| if (!ObjectUtils.anyNotNull(faceRectangle) || faceRectangle.getJSONObject("faceRectangle").isEmpty()) { | |||||
| return new ResponseInfo(ResponseCode.CW_FACE_IMG_NO_FACE, "no face"); | |||||
| if (!obj.containsKey("feature")) { | |||||
| return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, obj.getString("errorMessage")); | |||||
| } | } | ||||
| Date date = new Date(); | Date date = new Date(); | ||||
| emp.setUpdateTime(date); | emp.setUpdateTime(date); | ||||
| emp.setFaceImageName(newFileName); | emp.setFaceImageName(newFileName); | ||||
| JSONArray array = faceRectangle.getJSONArray("feature"); | |||||
| JSONArray array = obj.getJSONArray("feature"); | |||||
| EmpFaceFeature empFaceFeature = new EmpFaceFeature(); | EmpFaceFeature empFaceFeature = new EmpFaceFeature(); | ||||
| empFaceFeature.setEmpId(id); | empFaceFeature.setEmpId(id); | ||||
| @@ -671,8 +668,6 @@ public class EmpServiceSupport | |||||
| } | } | ||||
| this.updAuthMapping(emp); | this.updAuthMapping(emp); | ||||
| // } | // } | ||||
| return new ResponseInfo(auditStatus); | return new ResponseInfo(auditStatus); | ||||
| } catch (UnsupportedFormatException e){ | } catch (UnsupportedFormatException e){ | ||||
| @@ -680,6 +675,8 @@ public class EmpServiceSupport | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| return new ResponseInfo(ResponseCode.FILE_UPLOAD_FAIL); | return new ResponseInfo(ResponseCode.FILE_UPLOAD_FAIL); | ||||
| } catch (Exception e) { | |||||
| throw new RuntimeException(e); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1140,19 +1137,15 @@ public class EmpServiceSupport | |||||
| faceImage = faceImage.replaceAll("data:image/jpeg;base64,", ""); | faceImage = faceImage.replaceAll("data:image/jpeg;base64,", ""); | ||||
| JSONObject faceRectangle = faceServiceSupport.hasface("", emp.getId(), faceImage); | |||||
| System.err.println("======face===REG---ssss"); | |||||
| System.err.println(faceRectangle.toJSONString()); | |||||
| System.err.println("======face===REG---eeee"); | |||||
| int status = faceRectangle.getInteger("status"); | |||||
| faceRectangle = faceRectangle.getJSONObject("data"); | |||||
| String userName = emp.getRealName(); | |||||
| if (status != 0) { | |||||
| return "抱歉,您的账号 " + userName + " 注册失败,"+faceRectangle.getString("errMsg"); | |||||
| JSONObject faceRectangle = null; | |||||
| try { | |||||
| faceRectangle = faceServiceSupport.getFaceExtraction("", emp.getId(), faceImage); | |||||
| } catch (Exception e) { | |||||
| return e.getMessage(); | |||||
| } | } | ||||
| if (!ObjectUtils.anyNotNull(faceRectangle) || faceRectangle.getJSONObject("faceRectangle").isEmpty()) { | |||||
| return "抱歉,您的账号 " + userName + " 注册失败,上传的头像未找到人脸!"; | |||||
| String userName = emp.getRealName(); | |||||
| if (!faceRectangle.containsKey("feature")) { | |||||
| return "抱歉,您的账号 " + userName + " 注册失败,"+faceRectangle.getString("errorMessage"); | |||||
| } | } | ||||
| JSONObject json = imageUtil.base64ToStorage(faceImage, true); | JSONObject json = imageUtil.base64ToStorage(faceImage, true); | ||||
| @@ -1219,7 +1212,7 @@ public class EmpServiceSupport | |||||
| int status = getJson.getInteger("status"); | int status = getJson.getInteger("status"); | ||||
| String featureStr = ""; | String featureStr = ""; | ||||
| if (0 == status) { | if (0 == status) { | ||||
| featureStr = getJson.getString("feature"); | |||||
| featureStr = getJson.getJSONArray("feature").toJSONString(); | |||||
| } else { | } else { | ||||
| return getJson; | return getJson; | ||||
| } | } | ||||
| @@ -1253,11 +1246,15 @@ public class EmpServiceSupport | |||||
| faceImage = faceImage.replaceAll("data:image/jpeg;base64,", ""); | faceImage = faceImage.replaceAll("data:image/jpeg;base64,", ""); | ||||
| JSONObject faceRectangle = faceServiceSupport.hasface("", emp.getId(), faceImage); | |||||
| faceRectangle = faceRectangle.getJSONObject("data"); | |||||
| JSONObject faceRectangle = null; | |||||
| try { | |||||
| faceRectangle = faceServiceSupport.getFaceExtraction("", emp.getId(), faceImage); | |||||
| } catch (Exception e) { | |||||
| throw new RuntimeException(e); | |||||
| } | |||||
| JSONObject json = imageUtil.base64ToStorage(faceImage, true); | JSONObject json = imageUtil.base64ToStorage(faceImage, true); | ||||
| if (json.getBoolean("ok")) { | |||||
| if (faceRectangle.containsKey("feature")) { | |||||
| String imgUrl = json.getString("imgUrl"); | String imgUrl = json.getString("imgUrl"); | ||||
| emp.setFaceImageName(imgUrl); | emp.setFaceImageName(imgUrl); | ||||
| @@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONArray; | import com.alibaba.fastjson.JSONArray; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.jeesite.common.config.Global; | import com.jeesite.common.config.Global; | ||||
| import com.jeesite.common.lang.StringUtils; | |||||
| import com.lecoo.kjg.web.sys.utils.ImageUtil; | import com.lecoo.kjg.web.sys.utils.ImageUtil; | ||||
| import com.lecoo.kjg.web.utils.OkHttpUtil; | |||||
| import kong.unirest.HttpResponse; | import kong.unirest.HttpResponse; | ||||
| import kong.unirest.Unirest; | import kong.unirest.Unirest; | ||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
| @@ -24,6 +26,7 @@ import java.io.BufferedReader; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||||
| import java.util.Map; | import java.util.Map; | ||||
| import java.util.UUID; | |||||
| @Slf4j | @Slf4j | ||||
| @Component | @Component | ||||
| @@ -132,189 +135,55 @@ public class FaceServiceSupport { | |||||
| return token;*/ | return token;*/ | ||||
| } | } | ||||
| public JSONObject getFaceExtraction(String token, String imageId, String imgBase64) { | |||||
| /********CURL 请求方式********/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||||
| String res = execCurl(cmds); | |||||
| log.info("----------------"); | |||||
| log.info(faceServer); | |||||
| log.info("----------------"); | |||||
| log.info("Face Engine-detectFace return >> " + res); | |||||
| JSONObject json = JSONObject.parseObject(res); | |||||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||||
| return data;*/ | |||||
| public JSONObject getFaceExtraction(String token, String imageId, String imgBase64) throws Exception { | |||||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||||
| JSONObject j1 = new JSONObject().fluentPut("faceName","faceName").fluentPut("base64Data", imgBase64).fluentPut("detect", true).fluentPut("quality", true); | |||||
| JSONArray jsonArray = new JSONArray().fluentAdd(j1); | |||||
| System.out.println("获取特征值地址:"+faceServer + extractionPath); | |||||
| System.out.println("获取特征值地址参数:"+jsonArray.toJSONString()); | |||||
| String result = OkHttpUtil.postCvJson(faceServer+extractionPath, new JSONObject().fluentPut("images", jsonArray)); | |||||
| System.err.println("获取特征值结果:"+result); | |||||
| /********restTemplate 请求方式*************/ | |||||
| HttpHeaders headers = new HttpHeaders(); | |||||
| headers.setContentType(MediaType.APPLICATION_JSON); | |||||
| headers.set("Authorization", "Bearer "+token); | |||||
| MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); | |||||
| map.add("imageId", imageId); | |||||
| map.add("base64Data", imgBase64); | |||||
| map.add("detect", true); | |||||
| map.add("quality", true); | |||||
| HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map.toSingleValueMap(), headers); | |||||
| // System.err.println(faceServer + extractionPath); | |||||
| String emps = Global.getConfig("face.modeUpdEmps"); | |||||
| String path = faceServer; | |||||
| System.err.println("emps==========1111"); | |||||
| System.err.println(emps); | |||||
| System.err.println(imageId); | |||||
| if (emps.contains(imageId)) { | |||||
| System.err.println("---------------uuuuuuuuu"); | |||||
| path = updFaceServer; | |||||
| } | |||||
| System.err.println(faceServer); | |||||
| System.err.println(updFaceServer); | |||||
| System.err.println(path); | |||||
| System.err.println(path + extractionPath); | |||||
| System.err.println("emps==========2222"); | |||||
| String result = restTemplate.postForObject(path + extractionPath, entity, String.class, "face-detection"); | |||||
| // log.info("Face Engine-detectFace return >> " + result); | |||||
| JSONObject resultJson = JSON.parseObject(result); | JSONObject resultJson = JSON.parseObject(result); | ||||
| if (!resultJson.containsKey("errorCode") && 0==resultJson.getInteger("status")) { | |||||
| return resultJson.getJSONArray("result").getJSONObject(0).getJSONArray("faces").getJSONObject(0); | |||||
| } else { | |||||
| return resultJson; | |||||
| } | |||||
| // System.err.println(resultJson.toJSONString()); | |||||
| return resultJson.getJSONArray("result").getJSONObject(0); | |||||
| /*****Unirest 请求方式*****/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||||
| .header("Authorization", "Bearer "+token) | |||||
| .header("Content-Type", "application/json") | |||||
| .body(content) | |||||
| .asString(); | |||||
| String result = response.getBody(); | |||||
| log.info("Face Engine-detectFace return >> " + result); | |||||
| JSONObject resultJson = JSON.parseObject(result); | |||||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||||
| } | } | ||||
| public JSONObject getFaceCheck(String token, String imageId, String imgBase64) throws Exception{ | public JSONObject getFaceCheck(String token, String imageId, String imgBase64) throws Exception{ | ||||
| /********CURL 请求方式********/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||||
| String res = execCurl(cmds); | |||||
| log.info("----------------"); | |||||
| log.info(faceServer); | |||||
| log.info("----------------"); | |||||
| log.info("Face Engine-detectFace return >> " + res); | |||||
| JSONObject json = JSONObject.parseObject(res); | |||||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||||
| return data;*/ | |||||
| /********restTemplate 请求方式*************/ | |||||
| try { | |||||
| imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||||
| HttpHeaders headers = new HttpHeaders(); | |||||
| headers.setContentType(MediaType.APPLICATION_JSON); | |||||
| headers.set("Authorization", "Bearer "+token); | |||||
| MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); | |||||
| // map.add("imageId", imageId); | |||||
| // map.add("base64Data", imgBase64); | |||||
| JSONArray jsonArray = new JSONArray(); | |||||
| JSONObject jsonObject = new JSONObject(); | |||||
| jsonObject.put("imageId",imageId); | |||||
| jsonObject.put("base64Data",imgBase64); | |||||
| jsonArray.add(jsonObject); | |||||
| map.add("detect", true); | |||||
| map.add("images", jsonArray); | |||||
| HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map.toSingleValueMap(), headers); | |||||
| System.err.println(faceServer + qualityPath); | |||||
| String result = restTemplate.postForObject(faceServer + qualityPath, entity, String.class, "face-detection"); | |||||
| // log.info("Face Engine-detectFace return >> " + result); | |||||
| JSONObject resultJson = JSON.parseObject(result); | |||||
| return resultJson.getJSONArray("result").getJSONObject(0); | |||||
| } catch (Exception e) { | |||||
| System.err.println("8888err"); | |||||
| e.printStackTrace(); | |||||
| throw e; | |||||
| } | |||||
| /*****Unirest 请求方式*****/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||||
| .header("Authorization", "Bearer "+token) | |||||
| .header("Content-Type", "application/json") | |||||
| .body(content) | |||||
| .asString(); | |||||
| String result = response.getBody(); | |||||
| log.info("Face Engine-detectFace return >> " + result); | |||||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||||
| JSONObject jsonObject = new JSONObject(); | |||||
| jsonObject.put("imageId", StringUtils.isEmpty(imageId)? UUID.randomUUID().toString():imageId); | |||||
| jsonObject.put("base64Data",imgBase64); | |||||
| jsonObject.put("detect", true); | |||||
| JSONArray jsonArray = new JSONArray().fluentAdd(jsonObject); | |||||
| System.out.println("获取特征值参数:"+jsonArray.toJSONString()); | |||||
| System.out.println("获取特征值地址:"+faceServer + qualityPath); | |||||
| String result = OkHttpUtil.postCvJson(faceServer+qualityPath, new JSONObject().fluentPut("images", jsonArray)); | |||||
| System.err.println("人脸检测结果:"+result); | |||||
| JSONObject resultJson = JSON.parseObject(result); | JSONObject resultJson = JSON.parseObject(result); | ||||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||||
| return resultJson.getJSONArray("result").getJSONObject(0); | |||||
| } | } | ||||
| public JSONObject hasface(String token, String imageId, String imgBase64) { | public JSONObject hasface(String token, String imageId, String imgBase64) { | ||||
| /********CURL 请求方式********/ | /********CURL 请求方式********/ | ||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||||
| String res = execCurl(cmds); | |||||
| log.info("----------------"); | |||||
| log.info(faceServer); | |||||
| log.info("----------------"); | |||||
| log.info("Face Engine-detectFace return >> " + res); | |||||
| JSONObject json = JSONObject.parseObject(res); | |||||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||||
| return data;*/ | |||||
| JSONObject json = new JSONObject(); | JSONObject json = new JSONObject(); | ||||
| try { | try { | ||||
| imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||||
| JSONObject res = this.getFaceExtraction(token, imageId, imgBase64); | |||||
| JSONObject obj = res.getJSONArray("faces").getJSONObject(0); | |||||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||||
| JSONObject res = this.getFaceCheck(token, imageId, imgBase64); | |||||
| if (!obj.isEmpty()) { | |||||
| if (res != null && res.getBoolean("passed")){ | |||||
| json.put("status", 0); | json.put("status", 0); | ||||
| json.put("data", obj); | |||||
| json.put("data", res); | |||||
| return json; | return json; | ||||
| } else { | } else { | ||||
| json.put("status", 500); | json.put("status", 500); | ||||
| @@ -332,62 +201,17 @@ public class FaceServiceSupport { | |||||
| } | } | ||||
| /*****Unirest 请求方式*****/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||||
| .header("Authorization", "Bearer "+token) | |||||
| .header("Content-Type", "application/json") | |||||
| .body(content) | |||||
| .asString(); | |||||
| String result = response.getBody(); | |||||
| log.info("Face Engine-detectFace return >> " + result); | |||||
| JSONObject resultJson = JSON.parseObject(result); | |||||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||||
| } | } | ||||
| public JSONObject regCheckFace(String token, String imageId, String imgBase64) { | public JSONObject regCheckFace(String token, String imageId, String imgBase64) { | ||||
| /********CURL 请求方式********/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||||
| String res = execCurl(cmds); | |||||
| log.info("----------------"); | |||||
| log.info(faceServer); | |||||
| log.info("----------------"); | |||||
| log.info("Face Engine-detectFace return >> " + res); | |||||
| JSONObject json = JSONObject.parseObject(res); | |||||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||||
| return data;*/ | |||||
| JSONObject json = new JSONObject(); | JSONObject json = new JSONObject(); | ||||
| try { | try { | ||||
| imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||||
| JSONObject res = this.getFaceCheck(token, imageId, imgBase64); | JSONObject res = this.getFaceCheck(token, imageId, imgBase64); | ||||
| Boolean passed = res.getBoolean("passed"); | |||||
| if (!ObjectUtils.anyNotNull(passed)) { | |||||
| json.put("status", 500); | |||||
| json.put("data", null); | |||||
| json.put("errMsg", "所拍摄的照片重人脸不存在"); | |||||
| return json; | |||||
| } | |||||
| if (!passed) { | |||||
| json.put("status", 500); | |||||
| json.put("data", res); | |||||
| if (res == null || !res.getBoolean("passed")){ | |||||
| json.fluentPut("status", 500).fluentPut("data", res); | |||||
| double blur = res.getDouble("blur"); | double blur = res.getDouble("blur"); | ||||
| double pose = res.getDouble("pose"); | double pose = res.getDouble("pose"); | ||||
| double occ = res.getDouble("occ"); | double occ = res.getDouble("occ"); | ||||
| @@ -404,17 +228,12 @@ public class FaceServiceSupport { | |||||
| errMsg = "人脸检测失败,光线太暗,请到明亮点的地方重新拍摄"; | errMsg = "人脸检测失败,光线太暗,请到明亮点的地方重新拍摄"; | ||||
| } | } | ||||
| json.put("errMsg", errMsg); | |||||
| json.put("data", res); | |||||
| json.fluentPut("errMsg", errMsg).fluentPut("data", res); | |||||
| } else { | } else { | ||||
| json.put("status", 0); | |||||
| json.put("data", res); | |||||
| json.put("errMsg", ""); | |||||
| json.fluentPut("status", 0).fluentPut("data", res).fluentPut("errMsg", ""); | |||||
| } | } | ||||
| return json; | return json; | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| json.put("status", 500); | json.put("status", 500); | ||||
| @@ -422,26 +241,6 @@ public class FaceServiceSupport { | |||||
| json.put("errMsg", e.getMessage()); | json.put("errMsg", e.getMessage()); | ||||
| return json; | return json; | ||||
| } | } | ||||
| /*****Unirest 请求方式*****/ | |||||
| /*JSONObject paramJson = new JSONObject(); | |||||
| paramJson.put("imageId", imageId); | |||||
| paramJson.put("base64Data", imgBase64); | |||||
| paramJson.put("detect", 1); | |||||
| String content = paramJson.toJSONString(); | |||||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||||
| .header("Authorization", "Bearer "+token) | |||||
| .header("Content-Type", "application/json") | |||||
| .body(content) | |||||
| .asString(); | |||||
| String result = response.getBody(); | |||||
| log.info("Face Engine-detectFace return >> " + result); | |||||
| JSONObject resultJson = JSON.parseObject(result); | |||||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||||
| } | } | ||||
| @@ -456,17 +255,18 @@ public class FaceServiceSupport { | |||||
| json.put("errMsg", "imagePath不能为空"); | json.put("errMsg", "imagePath不能为空"); | ||||
| return json; | return json; | ||||
| } | } | ||||
| JSONObject faceRectangle = this.hasface("", empId, base64Image); | |||||
| int status = faceRectangle.getInteger("status"); | |||||
| faceRectangle = faceRectangle.getJSONObject("data"); | |||||
| if (status != 0) { | |||||
| json.put("status",status); | |||||
| json.put("errMsg"," 特征值提取失败,"+faceRectangle.getString("errMsg")); | |||||
| JSONObject faceRectangle = null; | |||||
| try { | |||||
| faceRectangle = this.getFaceExtraction("", empId, base64Image); | |||||
| } catch (Exception e) { | |||||
| json.put("status",504); | |||||
| json.put("errMsg",e.getMessage()); | |||||
| return json; | return json; | ||||
| } | } | ||||
| if (!ObjectUtils.anyNotNull(faceRectangle) || faceRectangle.getJSONObject("faceRectangle").isEmpty()) { | |||||
| json.put("status",504); | |||||
| json.put("errMsg"," 特征值提取失败,上传的头像未找到人脸!"); | |||||
| if (!faceRectangle.containsKey("feature")) { | |||||
| json.put("status",500); | |||||
| json.put("errMsg"," 特征值提取失败,"+faceRectangle.getString("errorMessage")); | |||||
| return json; | return json; | ||||
| } | } | ||||
| @@ -19,6 +19,7 @@ import sun.misc.BASE64Encoder; | |||||
| import javax.imageio.ImageIO; | import javax.imageio.ImageIO; | ||||
| import java.awt.image.BufferedImage; | import java.awt.image.BufferedImage; | ||||
| import java.io.*; | import java.io.*; | ||||
| import java.nio.file.Files; | |||||
| import java.util.Base64; | import java.util.Base64; | ||||
| import java.util.Map; | import java.util.Map; | ||||
| import java.util.UUID; | import java.util.UUID; | ||||
| @@ -200,11 +201,23 @@ public class ImageUtil { | |||||
| */ | */ | ||||
| public static String convertFileToBase64(String imgPath) { | public static String convertFileToBase64(String imgPath) { | ||||
| String base64Str = ""; | String base64Str = ""; | ||||
| // 读取图片字节数组 | |||||
| /*// 读取图片字节数组 | |||||
| try { | try { | ||||
| InputStream in = new FileInputStream(imgPath); | InputStream in = new FileInputStream(imgPath); | ||||
| base64Str = convertToBase64(in); | base64Str = convertToBase64(in); | ||||
| in.close(); | in.close(); | ||||
| } catch (IOException e) { | |||||
| e.printStackTrace(); | |||||
| }*/ | |||||
| File imageFile = new File(imgPath); | |||||
| try { | |||||
| // 读取图片文件 | |||||
| byte[] imageBytes = Files.readAllBytes(imageFile.toPath()); | |||||
| // 将图片数据编码为Base64 | |||||
| base64Str = Base64.getEncoder().encodeToString(imageBytes); | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| } | } | ||||
| @@ -505,7 +505,8 @@ public class Account2Controller extends WxBaseController { | |||||
| response.addCookie(cookie); | response.addCookie(cookie); | ||||
| return "themes/default/modules/sys/account/registerEmp"; | |||||
| return "themes/default/modules/sys/account/registerUser"; | |||||
| // return "themes/default/modules/sys/account/registerEmp"; | |||||
| } | } | ||||
| @@ -980,8 +981,6 @@ public class Account2Controller extends WxBaseController { | |||||
| userCode = DesUtils.decode(userCode, secretKey); | userCode = DesUtils.decode(userCode, secretKey); | ||||
| User user = UserUtils.get(userCode); | User user = UserUtils.get(userCode); | ||||
| if (null == user) { | if (null == user) { | ||||
| return outputError(1, "绑定失败,未找到对应账户!"); | return outputError(1, "绑定失败,未找到对应账户!"); | ||||
| } | } | ||||
| @@ -306,20 +306,23 @@ public class CommonApiController extends BaseController { | |||||
| public Object syncFace(@RequestBody JSONObject map, HttpServletRequest request) { | public Object syncFace(@RequestBody JSONObject map, HttpServletRequest request) { | ||||
| String deviceId = map.getString("devId"); | String deviceId = map.getString("devId"); | ||||
| String timestamp = map.getString("timestamp"); | |||||
| String nowTs = map.getString("now_ts"); | |||||
| Double timestamp = map.getDouble("timestamp"); | |||||
| NumberFormat nf = NumberFormat.getInstance(); | |||||
| nf.setGroupingUsed(false); | |||||
| String formatTs = org.apache.commons.lang3.StringUtils.rightPad(nf.format(timestamp), 13, '0'); | |||||
| System.out.println("syncFace: timestamp==" + formatTs); | |||||
| Double nowTs = map.getDouble("now_ts"); | |||||
| String ts = org.apache.commons.lang3.StringUtils.rightPad(nf.format(nowTs), 13, '0'); | |||||
| int maxCnt = map.getInteger("max_cnt"); | int maxCnt = map.getInteger("max_cnt"); | ||||
| String sign = map.getString("sign"); | String sign = map.getString("sign"); | ||||
| MyResponse myResponse = commonCheck(deviceId, timestamp, sign); | |||||
| MyResponse myResponse = commonCheck(deviceId, formatTs, sign); | |||||
| if (myResponse.getStatus() != 0) { | if (myResponse.getStatus() != 0) { | ||||
| return myResponse; | return myResponse; | ||||
| } | } | ||||
| NumberFormat nf = NumberFormat.getInstance(); | |||||
| nf.setGroupingUsed(false); | |||||
| System.err.println(nowTs); | System.err.println(nowTs); | ||||
| String ts = nf.format(Double.parseDouble(nowTs)); | |||||
| AccessControl ac = accessControlDao.findAccessControlByDev(deviceId); | AccessControl ac = accessControlDao.findAccessControlByDev(deviceId); | ||||
| List<AuthMapping> list = authMappingDao.getByDevAndTime(ac.getAccessControlId(), ts, maxCnt); | List<AuthMapping> list = authMappingDao.getByDevAndTime(ac.getAccessControlId(), ts, maxCnt); | ||||
| @@ -379,7 +382,10 @@ public class CommonApiController extends BaseController { | |||||
| String imgbase64 = map.getString("imgbase64"); | String imgbase64 = map.getString("imgbase64"); | ||||
| String sign = map.getString("sign"); | String sign = map.getString("sign"); | ||||
| MyResponse myResponse = commonCheck(deviceId, timestamp, sign); | |||||
| NumberFormat nf = NumberFormat.getInstance(); | |||||
| nf.setGroupingUsed(false); | |||||
| MyResponse myResponse = commonCheck(deviceId, nf.format(Double.parseDouble(timestamp)), sign); | |||||
| if (myResponse.getStatus() != 0) { | if (myResponse.getStatus() != 0) { | ||||
| return myResponse; | return myResponse; | ||||
| } | } | ||||
| @@ -445,7 +451,11 @@ public class CommonApiController extends BaseController { | |||||
| return myResponse; | return myResponse; | ||||
| } | } | ||||
| myResponse = commonCheck(devId, timestamp, sign); | |||||
| NumberFormat nf = NumberFormat.getInstance(); | |||||
| nf.setGroupingUsed(false); | |||||
| myResponse = commonCheck(devId, nf.format(Double.parseDouble(timestamp)), sign); | |||||
| if (myResponse.getStatus() != 0) { | if (myResponse.getStatus() != 0) { | ||||
| return myResponse; | return myResponse; | ||||
| } | } | ||||
| @@ -1335,8 +1345,41 @@ public class CommonApiController extends BaseController { | |||||
| @PostMapping(value = "remoteHandle") | @PostMapping(value = "remoteHandle") | ||||
| @ResponseBody | @ResponseBody | ||||
| @Transactional | @Transactional | ||||
| public String remoteHandle(@RequestParam(value = "devs[]") List<String> devs, @RequestParam(value = "act") String act) { | |||||
| public MyResponse remoteHandle(@RequestParam(value = "devs[]") List<String> devs, @RequestParam(value = "act") String act, HttpServletRequest request) { | |||||
| //将devs拼接成字符串,按逗号分割开 | |||||
| String sign = request.getHeader("sign"); | |||||
| String ts = request.getHeader("ts"); | |||||
| System.err.println("----------sign check start----------"); | |||||
| if (ts == null || ts.isEmpty()) { | |||||
| return new MyResponse(400, "ts is null"); | |||||
| } | |||||
| if (sign == null || sign.isEmpty()) { | |||||
| return new MyResponse(400, "sign is null"); | |||||
| } | |||||
| ts.replace(".", ""); | |||||
| Long tsVal = Long.parseLong(ts); | |||||
| if (ts.length() == 10) { | |||||
| // 将10位时间戳转为13位 | |||||
| tsVal *= 1000; | |||||
| } | |||||
| Long currentTs = System.currentTimeMillis(); | |||||
| System.err.println(currentTs); | |||||
| System.err.println(tsVal); | |||||
| if (currentTs - tsVal > 1000 * 60 || tsVal - currentTs > 1000 * 60){//时间误差正负1分钟内为合法 | |||||
| return new MyResponse(400, "请求时间戳ts非法"); | |||||
| } | |||||
| devs.sort(null); | |||||
| String singStr = String.join("_", devs) + act + ts; | |||||
| System.err.println(singStr); | |||||
| String signStr = DigestUtils.md5DigestAsHex(singStr.getBytes()); | |||||
| System.err.println(signStr); | |||||
| System.err.println(sign); | |||||
| System.err.println("----------sign check end----------"); | |||||
| if (!sign.equals(signStr)) { | |||||
| return output(ResponseCode.AUTH_NOT_PASS); | |||||
| } | |||||
| String act_code = ""; | String act_code = ""; | ||||
| switch (act) { | switch (act) { | ||||
| case "enterOpen": | case "enterOpen": | ||||
| @@ -1362,11 +1405,11 @@ public class CommonApiController extends BaseController { | |||||
| break; | break; | ||||
| } | } | ||||
| List<String> successDev = com.google.common.collect.Lists.newArrayList(); | |||||
| List<String> failMsg = com.google.common.collect.Lists.newArrayList(); | |||||
| List<String> successDev = com.beust.jcommander.internal.Lists.newArrayList(); | |||||
| List<String> failMsg = com.beust.jcommander.internal.Lists.newArrayList(); | |||||
| for (String deviceId : devs) { | for (String deviceId : devs) { | ||||
| Device gate = deviceDao.findByDevId(deviceId); | Device gate = deviceDao.findByDevId(deviceId); | ||||
| List<Device> lists = Lists.newArrayList(); | |||||
| List<Device> lists = com.beust.jcommander.internal.Lists.newArrayList(); | |||||
| if (act_code.equals("netAdbOpen") || act_code.equals("netAdbClose")) { | if (act_code.equals("netAdbOpen") || act_code.equals("netAdbClose")) { | ||||
| lists = deviceService.getPads(gate); | lists = deviceService.getPads(gate); | ||||
| } else { | } else { | ||||
| @@ -1409,11 +1452,9 @@ public class CommonApiController extends BaseController { | |||||
| } | } | ||||
| if (StringUtils.isEmpty(endMsg)) { | if (StringUtils.isEmpty(endMsg)) { | ||||
| return renderResult(Global.TRUE, "指令发送成功"); | |||||
| return outputSuccess("指令发送成功"); | |||||
| } | } | ||||
| return renderResult(Global.TRUE, endMsg); | |||||
| return outputSuccess(endMsg); | |||||
| } | } | ||||
| @PostMapping(value = "remoteDev") | @PostMapping(value = "remoteDev") | ||||
| @@ -84,7 +84,6 @@ public class FaceApiController extends BaseController { | |||||
| String base64Image = ""; | String base64Image = ""; | ||||
| JSONObject json; | JSONObject json; | ||||
| JSONArray obj = new JSONArray(); | JSONArray obj = new JSONArray(); | ||||
| JSONObject faceRectangle = new JSONObject(); | |||||
| EmpFaceFeature empFaceFeature = emp.getEmpFaceFeature(); | EmpFaceFeature empFaceFeature = emp.getEmpFaceFeature(); | ||||
| if (!(ObjectUtils.anyNotNull(empFaceFeature) && StringUtils.isNotEmpty(empFaceFeature.getFaceFeature()))){ | if (!(ObjectUtils.anyNotNull(empFaceFeature) && StringUtils.isNotEmpty(empFaceFeature.getFaceFeature()))){ | ||||
| @@ -103,11 +102,12 @@ public class FaceApiController extends BaseController { | |||||
| json = faceServiceSupport.getFaceExtraction(token, empId, base64Image); | json = faceServiceSupport.getFaceExtraction(token, empId, base64Image); | ||||
| obj = json.getJSONArray("faces").getJSONObject(0).getJSONArray("feature"); | |||||
| faceRectangle = json.getJSONArray("faces").getJSONObject(0).getJSONObject("faceRectangle"); | |||||
| if (!faceRectangle.isEmpty()) { | |||||
| if (json.containsKey("feature")) { | |||||
| obj = json.getJSONArray("feature"); | |||||
| faceFlag = true; | faceFlag = true; | ||||
| } else { | |||||
| return "人脸特征值提取失败!"; | |||||
| } | } | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| @@ -0,0 +1,332 @@ | |||||
| package com.lecoo.kjg.web.utils; | |||||
| /** | |||||
| * @author yk | |||||
| * @description | |||||
| * @date 2024-05-07 18:08 | |||||
| */ | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import okhttp3.Call; | |||||
| import okhttp3.Callback; | |||||
| import okhttp3.FormBody; | |||||
| import okhttp3.MediaType; | |||||
| import okhttp3.OkHttpClient; | |||||
| import okhttp3.Request; | |||||
| import okhttp3.RequestBody; | |||||
| import okhttp3.Response; | |||||
| import javax.net.ssl.SSLContext; | |||||
| import javax.net.ssl.SSLSocketFactory; | |||||
| import javax.net.ssl.TrustManager; | |||||
| import javax.net.ssl.X509TrustManager; | |||||
| import java.io.IOException; | |||||
| import java.net.URLEncoder; | |||||
| import java.security.SecureRandom; | |||||
| import java.security.cert.X509Certificate; | |||||
| import java.util.LinkedHashMap; | |||||
| import java.util.Map; | |||||
| import java.util.concurrent.Semaphore; | |||||
| import java.util.concurrent.TimeUnit; | |||||
| public class OkHttpUtil { | |||||
| private static volatile OkHttpClient okHttpClient = null; | |||||
| private static volatile Semaphore semaphore = null; | |||||
| private Map<String, String> headerMap; | |||||
| private Map<String, String> paramMap; | |||||
| private String url; | |||||
| private Request.Builder request; | |||||
| /** | |||||
| * 初始化okHttpClient,并且允许https访问 | |||||
| */ | |||||
| private OkHttpUtil() { | |||||
| if (okHttpClient == null) { | |||||
| synchronized (OkHttpUtil.class) { | |||||
| if (okHttpClient == null) { | |||||
| TrustManager[] trustManagers = buildTrustManagers(); | |||||
| okHttpClient = new OkHttpClient.Builder() | |||||
| .connectTimeout(15, TimeUnit.SECONDS) | |||||
| .writeTimeout(20, TimeUnit.SECONDS) | |||||
| .readTimeout(20, TimeUnit.SECONDS) | |||||
| .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0]) | |||||
| .hostnameVerifier((hostName, session) -> true) | |||||
| .retryOnConnectionFailure(true) | |||||
| .build(); | |||||
| addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 用于异步请求时,控制访问线程数,返回结果 | |||||
| * | |||||
| * @return | |||||
| */ | |||||
| private static Semaphore getSemaphoreInstance() { | |||||
| //只能1个线程同时访问 | |||||
| synchronized (OkHttpUtil.class) { | |||||
| if (semaphore == null) { | |||||
| semaphore = new Semaphore(0); | |||||
| } | |||||
| } | |||||
| return semaphore; | |||||
| } | |||||
| /** | |||||
| * 创建OkHttpUtil | |||||
| * | |||||
| * @return | |||||
| */ | |||||
| public static OkHttpUtil builder() { | |||||
| return new OkHttpUtil(); | |||||
| } | |||||
| /** | |||||
| * 添加url | |||||
| * | |||||
| * @param url | |||||
| * @return | |||||
| */ | |||||
| public OkHttpUtil url(String url) { | |||||
| this.url = url; | |||||
| return this; | |||||
| } | |||||
| /** | |||||
| * 添加参数 | |||||
| * | |||||
| * @param key 参数名 | |||||
| * @param value 参数值 | |||||
| * @return | |||||
| */ | |||||
| public OkHttpUtil addParam(String key, String value) { | |||||
| if (paramMap == null) { | |||||
| paramMap = new LinkedHashMap<>(16); | |||||
| } | |||||
| paramMap.put(key, value); | |||||
| return this; | |||||
| } | |||||
| /** | |||||
| * 添加请求头 | |||||
| * | |||||
| * @param key 参数名 | |||||
| * @param value 参数值 | |||||
| * @return | |||||
| */ | |||||
| public OkHttpUtil addHeader(String key, String value) { | |||||
| if (headerMap == null) { | |||||
| headerMap = new LinkedHashMap<>(16); | |||||
| } | |||||
| headerMap.put(key, value); | |||||
| return this; | |||||
| } | |||||
| /** | |||||
| * 初始化get方法 | |||||
| * | |||||
| * @return | |||||
| */ | |||||
| public OkHttpUtil get() { | |||||
| request = new Request.Builder().get(); | |||||
| StringBuilder urlBuilder = new StringBuilder(url); | |||||
| if (paramMap != null) { | |||||
| urlBuilder.append("?"); | |||||
| try { | |||||
| for (Map.Entry<String, String> entry : paramMap.entrySet()) { | |||||
| urlBuilder.append(URLEncoder.encode(entry.getKey(), "utf-8")). | |||||
| append("="). | |||||
| append(URLEncoder.encode(entry.getValue(), "utf-8")). | |||||
| append("&"); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| urlBuilder.deleteCharAt(urlBuilder.length() - 1); | |||||
| } | |||||
| request.url(urlBuilder.toString()); | |||||
| return this; | |||||
| } | |||||
| /** | |||||
| * 初始化post方法 | |||||
| * | |||||
| * @param isJsonPost true等于json的方式提交数据,类似postman里post方法的raw | |||||
| * false等于普通的表单提交 | |||||
| * @return | |||||
| */ | |||||
| public OkHttpUtil post(boolean isJsonPost) { | |||||
| RequestBody requestBody; | |||||
| if (isJsonPost) { | |||||
| String json = ""; | |||||
| if (paramMap != null) { | |||||
| json = JSON.toJSONString(paramMap); | |||||
| } | |||||
| requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); | |||||
| } else { | |||||
| FormBody.Builder formBody = new FormBody.Builder(); | |||||
| if (paramMap != null) { | |||||
| paramMap.forEach(formBody::add); | |||||
| } | |||||
| requestBody = formBody.build(); | |||||
| } | |||||
| request = new Request.Builder().post(requestBody).url(url); | |||||
| return this; | |||||
| } | |||||
| /** | |||||
| * 同步请求 | |||||
| * | |||||
| * @return | |||||
| */ | |||||
| public String sync() { | |||||
| setHeader(request); | |||||
| try { | |||||
| Response response = okHttpClient.newCall(request.build()).execute(); | |||||
| assert response.body() != null; | |||||
| return response.body().string(); | |||||
| } catch (IOException e) { | |||||
| e.printStackTrace(); | |||||
| return "请求失败:" + e.getMessage(); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 异步请求,有返回值 | |||||
| */ | |||||
| public String async() { | |||||
| StringBuilder buffer = new StringBuilder(""); | |||||
| setHeader(request); | |||||
| okHttpClient.newCall(request.build()).enqueue(new Callback() { | |||||
| @Override | |||||
| public void onFailure(Call call, IOException e) { | |||||
| buffer.append("请求出错:").append(e.getMessage()); | |||||
| } | |||||
| @Override | |||||
| public void onResponse(Call call, Response response) throws IOException { | |||||
| assert response.body() != null; | |||||
| buffer.append(response.body().string()); | |||||
| getSemaphoreInstance().release(); | |||||
| } | |||||
| }); | |||||
| try { | |||||
| getSemaphoreInstance().acquire(); | |||||
| } catch (InterruptedException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| return buffer.toString(); | |||||
| } | |||||
| /** | |||||
| * 异步请求,带有接口回调 | |||||
| * | |||||
| * @param callBack | |||||
| */ | |||||
| public void async(ICallBack callBack) { | |||||
| setHeader(request); | |||||
| okHttpClient.newCall(request.build()).enqueue(new Callback() { | |||||
| @Override | |||||
| public void onFailure(Call call, IOException e) { | |||||
| callBack.onFailure(call, e.getMessage()); | |||||
| } | |||||
| @Override | |||||
| public void onResponse(Call call, Response response) throws IOException { | |||||
| assert response.body() != null; | |||||
| callBack.onSuccessful(call, response.body().string()); | |||||
| } | |||||
| }); | |||||
| } | |||||
| /** | |||||
| * 为request添加请求头 | |||||
| * | |||||
| * @param request | |||||
| */ | |||||
| private void setHeader(Request.Builder request) { | |||||
| if (headerMap != null) { | |||||
| try { | |||||
| for (Map.Entry<String, String> entry : headerMap.entrySet()) { | |||||
| request.addHeader(entry.getKey(), entry.getValue()); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 生成安全套接字工厂,用于https请求的证书跳过 | |||||
| * | |||||
| * @return | |||||
| */ | |||||
| private static SSLSocketFactory createSSLSocketFactory(TrustManager[] trustAllCerts) { | |||||
| SSLSocketFactory ssfFactory = null; | |||||
| try { | |||||
| SSLContext sc = SSLContext.getInstance("SSL"); | |||||
| sc.init(null, trustAllCerts, new SecureRandom()); | |||||
| ssfFactory = sc.getSocketFactory(); | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| return ssfFactory; | |||||
| } | |||||
| private static TrustManager[] buildTrustManagers() { | |||||
| return new TrustManager[]{ | |||||
| new X509TrustManager() { | |||||
| @Override | |||||
| public void checkClientTrusted(X509Certificate[] chain, String authType) { | |||||
| } | |||||
| @Override | |||||
| public void checkServerTrusted(X509Certificate[] chain, String authType) { | |||||
| } | |||||
| @Override | |||||
| public X509Certificate[] getAcceptedIssuers() { | |||||
| return new X509Certificate[]{}; | |||||
| } | |||||
| } | |||||
| }; | |||||
| } | |||||
| /** | |||||
| * 自定义一个接口回调 | |||||
| */ | |||||
| public interface ICallBack { | |||||
| void onSuccessful(Call call, String data); | |||||
| void onFailure(Call call, String errorMsg); | |||||
| } | |||||
| /** | |||||
| * @Author yangkai | |||||
| * @Description 联想研究院新算法,请求模版 | |||||
| * @Date 2024/5/8 | |||||
| * @Param [url, json] | |||||
| * @return java.lang.String | |||||
| **/ | |||||
| public static String postCvJson(String url, JSONObject json) throws Exception{ | |||||
| OkHttpClient client = new OkHttpClient().newBuilder() | |||||
| .build(); | |||||
| MediaType mediaType = MediaType.parse("application/json"); | |||||
| RequestBody body = RequestBody.create(mediaType, json.toJSONString()); | |||||
| Request request = new Request.Builder() | |||||
| .url(url) | |||||
| .method("POST", body) | |||||
| .addHeader("Content-Type", "application/json") | |||||
| .addHeader("Authorization", "Basic ZmFjZS1tYW5hZ2VtZW50OmZhY2UtbWFuYWdlbWVudA==") | |||||
| .build(); | |||||
| Response response = client.newCall(request).execute(); | |||||
| return response.body().string(); | |||||
| } | |||||
| } | |||||
| @@ -202,15 +202,16 @@ mqttClient: | |||||
| serverPort: 1883 | serverPort: 1883 | ||||
| clientId: mqtt_clientid_dev_2002 | clientId: mqtt_clientid_dev_2002 | ||||
| faceServerII: | faceServerII: | ||||
| ip: 8.131.78.156 | |||||
| ip: 39.105.51.226 | |||||
| port: 5000 | port: 5000 | ||||
| user: lecooai_hw01 | user: lecooai_hw01 | ||||
| password: lecooai@2021 | password: lecooai@2021 | ||||
| hasAuthorize: false | hasAuthorize: false | ||||
| faceServerI: | faceServerI: | ||||
| ip: 39.105.51.226 | |||||
| port: 5000 | |||||
| ip: 123.56.73.158 | |||||
| port: 30306 | |||||
| user: lecooai_hw01 | user: lecooai_hw01 | ||||
| password: lecooai@2021 | password: lecooai@2021 | ||||
| hasAuthorize: false | hasAuthorize: false | ||||
| @@ -36,7 +36,7 @@ spring: | |||||
| devtools: | devtools: | ||||
| restart: | restart: | ||||
| enabled: true | |||||
| enabled: false | |||||
| # # 缓存配置 | # # 缓存配置 | ||||
| # redis: | # redis: | ||||
| # # 缓存及会话共享(专业版) | # # 缓存及会话共享(专业版) | ||||
| @@ -48,7 +48,7 @@ spring: | |||||
| redis: | redis: | ||||
| #host: 39.105.85.176 | #host: 39.105.85.176 | ||||
| host: 127.0.0.1 | host: 127.0.0.1 | ||||
| port: 6379 | |||||
| port: 6381 | |||||
| ssl: false | ssl: false | ||||
| database: 0 | database: 0 | ||||
| #password: lecooai-redis | #password: lecooai-redis | ||||
| @@ -393,10 +393,12 @@ wx: | |||||
| host: 127.0.0.1 | host: 127.0.0.1 | ||||
| port: 6379 | port: 6379 | ||||
| configs: | configs: | ||||
| - appId: wx80dc26b645077e97 # 第一个公众号的appid | |||||
| - appId: wx225662102fc5f39a # 第一个公众号的appid | |||||
| # - appId: wx80dc26b645077e97 # 第一个公众号的appid | |||||
| # - appId: wxcea6b4840efb906e # 第一个公众号的appid | # - appId: wxcea6b4840efb906e # 第一个公众号的appid | ||||
| # - appId: ENC(5ZzYjATZAQK3mSkZKTPuHEqgIQRv8ADix8SsVZdfeAg=) # 第一个公众号的appid | # - appId: ENC(5ZzYjATZAQK3mSkZKTPuHEqgIQRv8ADix8SsVZdfeAg=) # 第一个公众号的appid | ||||
| secret: 5fea919f2cb1b320cebdb9896f697361 # 公众号的appsecret | |||||
| # secret: 5fea919f2cb1b320cebdb9896f697361 # 公众号的appsecret | |||||
| secret: ff4080ff5a16a378bd8804acd507d468 # 公众号的appsecret | |||||
| # secret: ENC(XHPy8rxb7MlPaeBbmPjHZGu9bqRGWY8IKWCmG3NSwygAMXqcqcFNUksMKukd5eHH) # 公众号的appsecret | # secret: ENC(XHPy8rxb7MlPaeBbmPjHZGu9bqRGWY8IKWCmG3NSwygAMXqcqcFNUksMKukd5eHH) # 公众号的appsecret | ||||
| token: 83u4h # 接口配置里的Token值 | token: 83u4h # 接口配置里的Token值 | ||||
| templateSendUrl: http://www.hjkjg.top:49180/sendMsg | templateSendUrl: http://www.hjkjg.top:49180/sendMsg | ||||
| @@ -459,7 +461,7 @@ mqtt: | |||||
| # 心跳 | # 心跳 | ||||
| keepalive: 30 | keepalive: 30 | ||||
| httpServer: http://39.105.85.176:8008 | |||||
| httpServer: http://172.17.0.1:8008 | |||||
| devCmdPath: /api/mqtt_dev_cmd | devCmdPath: /api/mqtt_dev_cmd | ||||
| @@ -467,9 +469,8 @@ face: | |||||
| server: http://${faceServerI.ip}:${faceServerI.port} | server: http://${faceServerI.ip}:${faceServerI.port} | ||||
| updServer: http://${faceServerII.ip}:${faceServerII.port} | updServer: http://${faceServerII.ip}:${faceServerII.port} | ||||
| authorizePath: /authorize | authorizePath: /authorize | ||||
| # extractionPath: /apps/v1/function/cv/face-extraction | |||||
| extractionPath: /cv/feature-extraction-service/1.7 | |||||
| qualityPath: /cv/quality/1.7 | |||||
| extractionPath: /apps/v1/solution/cv/face-extraction | |||||
| qualityPath: /apps/v1/solution/cv/face-quality | |||||
| modeUpdate: true | modeUpdate: true | ||||
| modeUpdEmps: "'beeefac44ef94daca475ff85a5c720cd','65f061754e204484a955aba8154eec14','a0a0f615ec374d9bb1e1ace496e586d7','e83e30d959144a65b83beb3b841c10b5','0601b9fc00204224a671bcd47040be30','7cabfde922354b41ae66841e3d0cc4d3'" | modeUpdEmps: "'beeefac44ef94daca475ff85a5c720cd','65f061754e204484a955aba8154eec14','a0a0f615ec374d9bb1e1ace496e586d7','e83e30d959144a65b83beb3b841c10b5','0601b9fc00204224a671bcd47040be30','7cabfde922354b41ae66841e3d0cc4d3'" | ||||
| @@ -0,0 +1,361 @@ | |||||
| <% layout('/layouts/default.html', {title: '账号注册', libs: ['validate'], bodyClass: 'login-page'}){ %> | |||||
| <% include('/include/upgrade.html'){} // 如果客户浏览器版本过低,则显示浏览器升级提示。 %> | |||||
| <link rel="stylesheet" href="${ctxStatic}/icheck/1.0/square/blue.css?${_version}"> | |||||
| <link rel="stylesheet" href="${ctxStatic}/jquery-toastr/2.0/toastr.min.css?${_version}"> | |||||
| <link rel="stylesheet" href="${ctxStatic}/jquery-plugins/jquery.strength.css?${_version}"> | |||||
| <link rel="stylesheet" href="${ctxStatic}/modules/sys/sysLogin.css?${_version}"> | |||||
| <style> | |||||
| .fa-check{ | |||||
| color: #0BB20C !important; | |||||
| } | |||||
| body .demo-class .layui-layer-btn0{ | |||||
| border-color: #E6E3E6; | |||||
| background-color: #FFF; | |||||
| color: black; | |||||
| } | |||||
| body .demo-class .layui-layer-btn1{ | |||||
| border-color: #4898d5; | |||||
| background-color: #2e8ded; | |||||
| color: #fff; | |||||
| } | |||||
| img { | |||||
| object-fit: cover !important; | |||||
| } | |||||
| </style> | |||||
| <div class="login-box"> | |||||
| <div class="login-logo" style="font-size: 28px;"> | |||||
| <b>人脸面部信息注册</b> | |||||
| </div> | |||||
| <div class="login-box-body"> | |||||
| <form id="registerForm" class="layui-form" action="${ctxPath}/account2/reg" method="post" > | |||||
| <input type="hidden" id="ipt-openid" name="wxOpenid" value="${openid}"/> | |||||
| <input type="hidden" id="avatarImg" name="base64" value=""/> | |||||
| <div class="text-center" style="padding-top: 10px;"> | |||||
| <a id="upload-img" style="text-decoration: none;display: inline-grid;"> | |||||
| <img id="imgObj" src=${isNotEmpty(emp.faceImageName)?"/face01/compress/"+emp.faceImageName:"data:image/jpeg;base64,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"} style="width:120px;height:120px;border-radius: 120px;" onclick="" > | |||||
| <% if (isEmpty(emp.faceImageName)) {%> | |||||
| <div style="position:relative;display:inline-block;width: 120px;background-color: rgb(0 0 0 / 20%);color: #ff0000;top: -69px;">点击添加人脸照片</div> | |||||
| <% } %> | |||||
| </a> | |||||
| </div> | |||||
| <div class="form-group has-feedback"> | |||||
| <select name="officeCode" id="officeCode" class="required"> | |||||
| <option selected="selected" value="" style="display: none;">-----请选择所属公司-----</option> | |||||
| <% | |||||
| for(office in offices){ | |||||
| print('<option value="' + office.officeCode + '">' + office.officeName + '</option>'); | |||||
| } | |||||
| %> | |||||
| </select> | |||||
| </div> | |||||
| <div class="layui-form-item has-feedback"> | |||||
| <span class="fa fa-user form-control-feedback"></span> | |||||
| <input type="text" id="reg_loginCode" name="loginCode" class="layui-input form-control required" lay-verify="" data-msg-required="请填写姓名." placeholder="姓名" /> | |||||
| <!-- <span class="text-red" style="font-size: 12px;">* 姓名提交后不可修改,请谨慎填写,以免无法过审</span>--> | |||||
| </div> | |||||
| <div class="layui-form-item has-feedback"> | |||||
| <span class="fa fa-phone-square form-control-feedback"></span> | |||||
| <input type="text" id="mobile" name="mobile" class="layui-input form-control required isMobile isExsitPhone" lay-verify="" data-msg-required="请填写手机号." placeholder="手机号" /> | |||||
| </div> | |||||
| <div class="layui-form-item" style="border: 1px solid #e8e8e8;display: none;"> | |||||
| <label class="layui-form-label" style="text-align: left;padding-left: 9px;color: #a1a1a1;">性别</label> | |||||
| <div class="layui-input-block" style="text-align: right;"> | |||||
| <input type="radio" name="gender" checked=true id="gender" value="1" title="男" > | |||||
| <input type="radio" name="gender" id="gender" value="2" title="女"> | |||||
| </div> | |||||
| </div> | |||||
| <!--<div class="form-group has-feedback"> | |||||
| <span class="fa fa-lock form-control-feedback"></span> | |||||
| <input type="password" autocomplete="off" id="reg_password" name="password" | |||||
| class="form-control required" data-msg-required="请填写登录密码." | |||||
| rangelength="1,50" data-msg-rangelength="登录密码长度不能小于1并大于50个字符." | |||||
| placeholder="登录密码" /> | |||||
| </div> | |||||
| <div class="form-group has-feedback"> | |||||
| <span class="fa fa-lock form-control-feedback"></span> | |||||
| <input type="password" autocomplete="off" id="reg_confirmPassword" name="confirmPassword" | |||||
| class="form-control required" data-msg-required="请再填一次登录密码." | |||||
| rangelength="3,50" data-msg-rangelength="登录密码长度不能小于3并大于50个字符." | |||||
| equalTo="#reg_password" data-msg-equalTo="填写的密码与登录密码不同." | |||||
| placeholder="再填一次登录密码" /> | |||||
| </div>--> | |||||
| <div class="row"> | |||||
| <div class="col-xs-12"> | |||||
| <button type="button" class="btn btn-primary btn-block btn-flat layui-btn" lay-submit="" id="btnSubmit" onclick="checkOk();">${text('提交')}</button> | |||||
| </div> | |||||
| </div> | |||||
| <div class="clearfix"></div> | |||||
| </form> | |||||
| </div> | |||||
| <!--<iframe id="myFrame" name="myFrame" scrolling="yes" frameborder="0" style="width:100%;height:6.6rem;"></iframe>--> | |||||
| </div> | |||||
| <div id="new_person_layer" class="layui_pop" style="display: none;" > | |||||
| <div class="layui-form-item layui_pop_header" style="margin-bottom: 10px !important;"> | |||||
| <div class="layui_header_title">确认账户</div> | |||||
| <div class="layui_header_close"></div> | |||||
| </div> | |||||
| <form class="layui-form" action="" style="padding: 0 15px 0px 15px;"> | |||||
| <div class="layui-form-item text-center"><p>系统检测到您注册的部门中存在同名账户,这是您吗?</p></div> | |||||
| <div class="layui-form-item text-center"><img id="avtar-img" src=${isNotEmpty(emp.faceImageName)?"/face01/compress/"+emp.faceImageName:"data:image/jpeg;base64,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"} style="width:120px;height:120px;border-radius: 120px;" onclick="" ></div> | |||||
| </form> | |||||
| </div> | |||||
| <style> | |||||
| .layui_pop_header { | |||||
| margin-bottom: 10px !important; | |||||
| } | |||||
| .layui_pop .layui-form { | |||||
| padding: 0 15px 0px 15px; | |||||
| } | |||||
| </style> | |||||
| <% } %> | |||||
| <script>var secretKey = '${@Global.getConfig("shiro.loginSubmit.secretKey")}';</script> | |||||
| <script src="${ctxStatic}/js/jweixin-1.4.0.js?${_version}"></script> | |||||
| <script src="${ctxStatic}/common/des.js?${_version}"></script> | |||||
| <script src="${ctxStatic}/jquery-toastr/2.0/toastr.min.js?${_version}"></script> | |||||
| <script src="${ctxStatic}/jquery-plugins/jquery.strength.js?${_version}"></script> | |||||
| <script src="${ctxStatic}/modules/sys/registerUser.js?${_version}"></script> | |||||
| <script> | |||||
| function checkOk(){ | |||||
| var name = $("#reg_loginCode").val(); | |||||
| var base64 = $("#avatarImg").val(); | |||||
| var phone = $("#mobile").val(); | |||||
| var officeCode = $("#officeCode option:selected").val(); | |||||
| console.log(officeCode==""); | |||||
| if ($("#registerForm").valid() && name && officeCode) { | |||||
| $.ajax('/api/v1/emp/getByName',{ | |||||
| method: "get", dataType: "json", | |||||
| data: { | |||||
| "name": name, | |||||
| "officeCode": officeCode, | |||||
| }, | |||||
| async:false, | |||||
| success: function (res) { | |||||
| if(res.data.length<1) { | |||||
| $("#registerForm").submit(); | |||||
| } else { | |||||
| layerIndex = layer.open({ | |||||
| type: 1 | |||||
| ,title: false | |||||
| ,area: ['90%', '40%'] | |||||
| ,shade: 0.5 | |||||
| ,maxmin: false | |||||
| ,scrollbar: false | |||||
| ,closeBtn: 0 | |||||
| ,content: $('#new_person_layer') | |||||
| ,btn: ["是我", "不是我,继续注册"] | |||||
| ,yes: function (index) { | |||||
| // if ("${openid}" != null && "${openid}" != "") { | |||||
| $.ajax("/account2/updateEmp",{method: "post", dataType: "json", data: {"userCode":DesUtils.encode(res.data[0].jobNumber, secretKey), "openid":"${openid}", "phone":phone,"base64":base64}, success:function (data){ | |||||
| layer.closeAll(); | |||||
| parent.layer.closeAll(); | |||||
| if (data.status == 0) { | |||||
| layer.msg("更新成功", {icon: 6, time: 2000}); | |||||
| setTimeout(function (){ | |||||
| window.location.reload(); | |||||
| }, 2000) | |||||
| } else { | |||||
| layer.msg(data.errMsg, {icon: 5, time: 2000}); | |||||
| } | |||||
| },error:function (err){ | |||||
| console.log(err); | |||||
| }}, | |||||
| ) | |||||
| /*} else { | |||||
| layer.closeAll(); | |||||
| parent.layer.closeAll(); | |||||
| }*/ | |||||
| }, | |||||
| btn2: function (index){ | |||||
| parent.$("#registerForm").submit(); | |||||
| }, | |||||
| success:function () { | |||||
| console.log(res.data); | |||||
| $("#avtar-img").attr("src","/face01/compress/"+res.data[0].faceImageName) | |||||
| } | |||||
| }); | |||||
| } | |||||
| }, | |||||
| error:function (){ | |||||
| } | |||||
| }) | |||||
| } else { | |||||
| layer.msg("信息填写不全或有误,请检查", {icon: 5, time: 2000}); | |||||
| } | |||||
| // $("#registerForm").submit(); | |||||
| return (false); | |||||
| } | |||||
| function openDiv(){ | |||||
| var secretKey = "${@Global.getConfig('shiro.loginSubmit.secretKey')}"; | |||||
| var openid = DesUtils.encode($("#ipt-openid").val(), secretKey); | |||||
| layer.open({ | |||||
| type: 2 | |||||
| , skin: 'demo-class' | |||||
| , title: "新增人脸底库" | |||||
| , area: ['100%', '100%'] | |||||
| , shade: 0.8 | |||||
| , skin: 'layui-layer-lan' | |||||
| , id: 'LAY_layuipro' //设定一个id,防止重复弹出 | |||||
| // , btn: ['提交', '取消'] | |||||
| // , btnAlign: 'c' | |||||
| , close : 0 | |||||
| , moveType: 1 //拖拽模式,0或者1 | |||||
| , content: "${ctxPath}/account2/photo/0/"+openid | |||||
| /*, yes: function () { | |||||
| }*/ | |||||
| }); | |||||
| } | |||||
| function photoCompress(file, w, objDiv) { | |||||
| var ready = new FileReader(); | |||||
| /*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/ | |||||
| ready.readAsDataURL(file); | |||||
| ready.onload = function() { | |||||
| var re = this.result; | |||||
| canvasDataURL(re, w, objDiv); | |||||
| } | |||||
| }; | |||||
| function canvasDataURL(path, obj, callback) { | |||||
| var img = new Image(); | |||||
| img.src = path; | |||||
| img.onload = function() { | |||||
| var that = this; | |||||
| // 默认按比例压缩 | |||||
| var w = that.width, | |||||
| h = that.height, | |||||
| scale = w / h; | |||||
| w = obj.width || w; | |||||
| h = obj.height || (w / scale); | |||||
| var quality = 0.5; // 默认图片质量为0.7 | |||||
| //生成canvas | |||||
| var canvas = document.createElement('canvas'); | |||||
| var ctx = canvas.getContext('2d'); | |||||
| // 创建属性节点 | |||||
| var anw = document.createAttribute("width"); | |||||
| anw.nodeValue = w; | |||||
| var anh = document.createAttribute("height"); | |||||
| anh.nodeValue = h; | |||||
| canvas.setAttributeNode(anw); | |||||
| canvas.setAttributeNode(anh); | |||||
| ctx.drawImage(that, 0, 0, w, h); | |||||
| // 图像质量 | |||||
| if(obj.quality && obj.quality <= 1 && obj.quality > 0) { | |||||
| quality = obj.quality; | |||||
| } | |||||
| // quality值越小,所绘制出的图像越模糊 | |||||
| var base64 = canvas.toDataURL('image/jpeg', quality); | |||||
| // 回调函数返回base64的值 | |||||
| callback(base64); | |||||
| } | |||||
| } | |||||
| function convertBase64UrlToBlob(urlData) { | |||||
| var arr = urlData.split(','), | |||||
| mime = arr[0].match(/:(.*?);/)[1], | |||||
| bstr = atob(arr[1]), | |||||
| n = bstr.length, | |||||
| u8arr = new Uint8Array(n); | |||||
| while(n--) { | |||||
| u8arr[n] = bstr.charCodeAt(n); | |||||
| } | |||||
| return new Blob([u8arr], { | |||||
| type: mime | |||||
| }); | |||||
| } | |||||
| layui.use('upload', function() { | |||||
| var dialog = null; | |||||
| var upload = layui.upload; | |||||
| //执行实例 | |||||
| upload.render({ | |||||
| elem : '#upload-img', | |||||
| // url : '${ctx}/sys/emp/update-face', | |||||
| url : '', | |||||
| data:{}, | |||||
| accept: 'images', | |||||
| acceptMime: 'image/*', | |||||
| field : 'face', | |||||
| number : 1, | |||||
| size: 5100, | |||||
| auto: false , | |||||
| multiple : false, | |||||
| choose: function(obj){ | |||||
| dialog = layer.msg('正在上传', | |||||
| { | |||||
| icon: 16 | |||||
| ,shade: 0.01 | |||||
| }); | |||||
| obj.preview(function (index, file, result) { | |||||
| photoCompress(file, { | |||||
| quality: 0.5, | |||||
| }, function(base64Codes) { | |||||
| $.ajax('/api/reg-check-face',{ | |||||
| method: "post", dataType: "json", | |||||
| data: { | |||||
| "faceImage": base64Codes, | |||||
| }, | |||||
| async:false, | |||||
| success: function (res) { | |||||
| layer.close(dialog); | |||||
| if ( 0 != res.status ) { | |||||
| layer.msg('<p class="text-red">'+res.errMsg+'</p>', {icon: 5, time: 5000}); | |||||
| } else { | |||||
| console.log(base64Codes); | |||||
| $("#avatarImg").val(base64Codes); | |||||
| $("#imgObj").attr("src", base64Codes); | |||||
| $("#imgObj").next("div").css("display", "none"); | |||||
| } | |||||
| },error:function (e){ | |||||
| layer.close(dialog); | |||||
| layer.msg('<p class="text-red">'+e.message+'</p>', {icon: 5, time: 5000}); | |||||
| } | |||||
| } | |||||
| ); | |||||
| }); | |||||
| }); | |||||
| return; | |||||
| } | |||||
| }); | |||||
| }); | |||||
| $(function(){ | |||||
| if(2 == ${type}){ | |||||
| location.href = "/account2/login?type="+${type}; | |||||
| } | |||||
| $(".layui_header_close").on('click',function(){ | |||||
| layer.close(layerIndex); | |||||
| }); | |||||
| }) | |||||
| </script> | |||||