From 4e3c9f759b3c1d2b3b4d98c8849310d096fc2542 Mon Sep 17 00:00:00 2001 From: guo Date: Thu, 11 Apr 2024 10:59:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=AF=BC=E5=85=A5=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E6=9F=90=E4=BA=9B=E5=BF=85=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/call/HikvisionCall.java | 82 ++++++++++++++++++ .../service/impl/WorkerInfoServiceImpl.java | 55 +++++------- .../java/com/zhgd/xmgl/util/IdCardUtils.java | 28 ------ src/main/resources/excel/人员导入模板.xlsx | Bin 12718 -> 12859 bytes 4 files changed, 102 insertions(+), 63 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index f299ab155..cdf9c67fb 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -346,6 +346,88 @@ public class HikvisionCall { return Result.ok(); } + @ApiOperation(value = "服务挂了主动获取查询过车记录", notes = "服务挂了主动获取查询过车记录", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/getCrossRecords") + public Result getCrossRecords(@ApiIgnore @RequestBody HashMap paramMap) { + String startTime = MapUtils.getString(paramMap, "startTime"); + String endTime = MapUtils.getString(paramMap, "endTime"); + DateUtils.checkLegalDate19(startTime); + DateUtils.checkLegalDate19(endTime); + JSONObject param = new JSONObject(); + param.put("startTime", DateUtils.getISO8601Str(DateUtil.parse(startTime))); + param.put("endTime", DateUtils.getISO8601Str(DateUtil.parse(endTime))); + String projectSn = MapUtils.getString(paramMap, "projectSn"); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(Project::getSyncHikvision, 1); + if (StringUtils.isNotBlank(projectSn)) { + queryWrapper.eq(Project::getProjectSn, projectSn); + } + List projects = projectMapper.selectList(queryWrapper); + for (Project project : projects) { + List ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper() + .eq(UfaceDev::getProjectSn, project.getProjectSn())); + for (UfaceDev ufaceDev : ufaceDevs) { + param.put("doorIndexCode", ufaceDev.getDevSn()); + param.put("pageNo", 1); + Integer total = 0; + do { + String rs = getDoorEventsForHttp(project, param); + JSONObject joData = HikvisionUtil.getJSONObjectData(rs); + if (joData != null) { + total = joData.getInteger("total"); + if (!Objects.equals(total, 0)) { + JSONArray listJa = joData.getJSONArray("list"); + for (int i = 0; i < listJa.size(); i++) { + JSONObject listJo = listJa.getJSONObject(i); + String eventTime = listJo.getString("eventTime"); + String personId = listJo.getString("personId"); + String personName = listJo.getString("personName"); + String doorIndexCode = listJo.getString("doorIndexCode"); + String picUri = listJo.getString("picUri"); + String svrIndexCode = listJo.getString("svrIndexCode"); + WorkerInfo workerInfo = workerInfoMapper.selectById(personId); + if (workerInfo == null) { + log.error("未找到该人员信息,personName:{}", personName); + continue; + } + HashMap map = new HashMap<>(); + String time = DateUtil.formatDateTime(DateUtil.parse(eventTime)); + map.put("passTime", time); + map.put("idCard", workerInfo.getIdCard()); + map.put("attendanceNumber", workerInfo.getAttendanceNumber()); + int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time); + map.put("direction", passType); + map.put("passType", 2); + map.put("projectCode", workerInfo.getProjectSn()); + map.put("devCode", doorIndexCode); + + try { + HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq(); + rq.setPicUri(picUri); + rq.setSvrIndexCode(svrIndexCode); + map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()))); + } catch (Exception e) { + e.printStackTrace(); + } + + workerAttendanceService.saveExternalPassRecord(map); + } + param.put("pageNo", param.getIntValue("pageNo") + 1); + } + } + } while (total > 0); + } + workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn); + } + log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成,startTime:{},endTime:{}", startTime, endTime); + return Result.ok(); + } + /** * 测试查询组织 * diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java index 59287c94d..9b7364cb5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.worker.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.map.MapUtil; @@ -1503,21 +1504,26 @@ public class WorkerInfoServiceImpl extends ServiceImpl 10) { - workerInfo.setIdCardEndDate(importInfo.get("*身份证有效日期").substring(0, 10)); - } else { - workerInfo.setIdCardEndDate(importInfo.get("*身份证有效日期")); + workerInfo.setNation(importInfo.get("民族")); + workerInfo.setPhoneNumber(importInfo.get("联系电话")); + workerInfo.setEmergentPerson(importInfo.get("紧急联系人")); + workerInfo.setEmergentPhone(importInfo.get("紧急联系人电话")); + workerInfo.setIssuingAuthorityForIdcard(importInfo.get("签发机构")); + workerInfo.setNativePlace(importInfo.get("籍贯")); + try { + String idCardValidDate = importInfo.get("身份证有效日期"); + if (!"".equals(idCardValidDate)) { + DateTime parse = DateUtil.parse(idCardValidDate); + if (idCardValidDate.length() > 10) { + workerInfo.setIdCardEndDate(idCardValidDate.substring(0, 10)); + } else { + workerInfo.setIdCardEndDate(idCardValidDate); + } + workerInfo.setLongTerm(0); } - workerInfo.setLongTerm(0); + } catch (Exception e) { + e.printStackTrace(); + workerInfo.setLongTerm(1); } if (workerInfo.getPersonType() == 2) { String department = importInfo.get("*部门/班组"); @@ -1637,27 +1643,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl param = new HashMap<>(); - param.put("url", imageurl); - param.put("side", "front"); - String result = HttpRequest.post(url).header("x-auth-token", token).body(JSONUtil.toJsonStr(param)).execute().body(); - log.info(result); - }*/ - /*public static void main(String[] args) { - String username="hqocr"; - String domain="yunhaiyun"; - String password="hq123456"; - String projectid="0c9c4261fa80f43b2fdbc0103360d790"; - String imageurl="http://119.29.110.58:9000/itbgp/file/3b097a48-7e46-407c-9e32-fc725204c485.jpg"; - String JSONSTR=getTokenStr(domain,username,password,"cn-north-4"); - - String token = HttpRequest.postJson("https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens").body(JSONUtil.toJsonStr(JSONSTR)).execute().header("x-subject-token"); - log.info(token); - }*/ public static void main(String[] args) { System.out.println(getBirthdayAgeSex("")); } diff --git a/src/main/resources/excel/人员导入模板.xlsx b/src/main/resources/excel/人员导入模板.xlsx index 14fcb2c438d49d719c697d53fb1f6b859566526b..10576dd7123495f72968fcd82c5e9da0a1505910 100644 GIT binary patch delta 6150 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 z zf4t^#5Zn^_Xsj-3v#N52wzERle2t$<*$ij*L`9zBgb4D;AyGiQd4!N;AQe22eVkX#~>7 z&p`bjMhO6r|EuW#m;H?j!AGNn;0kae%V0vRFexGW0-Q)6AYlT^$a;8xHB!i$03R|7 Q!M{>^LDCn2-2W8#KRUltp8x;=