diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java index e9ca45a..ed17b20 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java @@ -16,6 +16,9 @@ private String startTime; private String endTime; private String order = "asc"; + private String personName; + private String sort; + private Integer inAndOutType; private List personIds; private List doorIndexCodes; private List eventTypes; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java index e9ca45a..ed17b20 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java @@ -16,6 +16,9 @@ private String startTime; private String endTime; private String order = "asc"; + private String personName; + private String sort; + private Integer inAndOutType; private List personIds; private List doorIndexCodes; private List eventTypes; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index b8e29f1..3052339 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -3,6 +3,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; @@ -23,6 +24,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; @@ -97,7 +99,7 @@ * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode */ - @Scheduled(cron = "0 0 0 ? * 2") + @Scheduled(cron = "0 0 0 ? * 1") @Transactional // @PostConstruct // @Scheduled(cron = "0 0/1 * * * ?") @@ -125,7 +127,13 @@ } } } - + if (!CollectionUtils.isEmpty(personList)) { + //删除库中已有人员,保证人员与海康一致 + boolean removeFlag = staffInfoService.remove(new QueryWrapper<>()); + if (removeFlag) { + log.info("---------------------删除管理系统人员数据成功"); + } + } int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); if (i >= 0) { return; @@ -172,8 +180,8 @@ } String orgIndexCode = next.getString("orgIndexCode"); PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); - //物业人员(广州广电城市服务集团股份有限公司) - if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //物业人员(广州广电城市服务集团股份有限公司、广电物业) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode) || "fcbaea08-266d-4064-b190-d6a476de49e2".equals(orgIndexCode)) { //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 JSONObject jsonObject = new JSONObject(); jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java index e9ca45a..ed17b20 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java @@ -16,6 +16,9 @@ private String startTime; private String endTime; private String order = "asc"; + private String personName; + private String sort; + private Integer inAndOutType; private List personIds; private List doorIndexCodes; private List eventTypes; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index b8e29f1..3052339 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -3,6 +3,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; @@ -23,6 +24,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; @@ -97,7 +99,7 @@ * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode */ - @Scheduled(cron = "0 0 0 ? * 2") + @Scheduled(cron = "0 0 0 ? * 1") @Transactional // @PostConstruct // @Scheduled(cron = "0 0/1 * * * ?") @@ -125,7 +127,13 @@ } } } - + if (!CollectionUtils.isEmpty(personList)) { + //删除库中已有人员,保证人员与海康一致 + boolean removeFlag = staffInfoService.remove(new QueryWrapper<>()); + if (removeFlag) { + log.info("---------------------删除管理系统人员数据成功"); + } + } int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); if (i >= 0) { return; @@ -172,8 +180,8 @@ } String orgIndexCode = next.getString("orgIndexCode"); PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); - //物业人员(广州广电城市服务集团股份有限公司) - if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //物业人员(广州广电城市服务集团股份有限公司、广电物业) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode) || "fcbaea08-266d-4064-b190-d6a476de49e2".equals(orgIndexCode)) { //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 JSONObject jsonObject = new JSONObject(); jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java index 89bd933..0d4cdbe 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java @@ -18,4 +18,8 @@ VisitInfo visitInfoDetail(String id); String getVisitorPicture(VisitInfo visitInfo); + + String getOutTime(VisitInfo visitInfo); + + String getVisitorPosition(VisitInfo visitInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java index e9ca45a..ed17b20 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java @@ -16,6 +16,9 @@ private String startTime; private String endTime; private String order = "asc"; + private String personName; + private String sort; + private Integer inAndOutType; private List personIds; private List doorIndexCodes; private List eventTypes; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index b8e29f1..3052339 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -3,6 +3,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; @@ -23,6 +24,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; @@ -97,7 +99,7 @@ * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode */ - @Scheduled(cron = "0 0 0 ? * 2") + @Scheduled(cron = "0 0 0 ? * 1") @Transactional // @PostConstruct // @Scheduled(cron = "0 0/1 * * * ?") @@ -125,7 +127,13 @@ } } } - + if (!CollectionUtils.isEmpty(personList)) { + //删除库中已有人员,保证人员与海康一致 + boolean removeFlag = staffInfoService.remove(new QueryWrapper<>()); + if (removeFlag) { + log.info("---------------------删除管理系统人员数据成功"); + } + } int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); if (i >= 0) { return; @@ -172,8 +180,8 @@ } String orgIndexCode = next.getString("orgIndexCode"); PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); - //物业人员(广州广电城市服务集团股份有限公司) - if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //物业人员(广州广电城市服务集团股份有限公司、广电物业) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode) || "fcbaea08-266d-4064-b190-d6a476de49e2".equals(orgIndexCode)) { //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 JSONObject jsonObject = new JSONObject(); jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java index 89bd933..0d4cdbe 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java @@ -18,4 +18,8 @@ VisitInfo visitInfoDetail(String id); String getVisitorPicture(VisitInfo visitInfo); + + String getOutTime(VisitInfo visitInfo); + + String getVisitorPosition(VisitInfo visitInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index 779aa80..5c90d66 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.config.DeviceLinkageConfig; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.dto.hik.DoorControlRequest; +import com.casic.missiles.modular.dto.hik.EventInfoRequest; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; @@ -372,6 +373,7 @@ Integer inoutType = data.getInteger("ExtEventInOut"); //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 String pictureURL = data.getString("ExtEventPictureURL"); + String svrIndexCode = data.getString("svrIndexCode"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -403,7 +405,18 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); - staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); + // + EventInfoRequest picRequest = new EventInfoRequest(); + picRequest.setPicUri(pictureURL); + picRequest.setSvrIndexCode(svrIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.EVENT_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java index e9ca45a..ed17b20 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java @@ -16,6 +16,9 @@ private String startTime; private String endTime; private String order = "asc"; + private String personName; + private String sort; + private Integer inAndOutType; private List personIds; private List doorIndexCodes; private List eventTypes; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index b8e29f1..3052339 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -3,6 +3,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; @@ -23,6 +24,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; @@ -97,7 +99,7 @@ * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode */ - @Scheduled(cron = "0 0 0 ? * 2") + @Scheduled(cron = "0 0 0 ? * 1") @Transactional // @PostConstruct // @Scheduled(cron = "0 0/1 * * * ?") @@ -125,7 +127,13 @@ } } } - + if (!CollectionUtils.isEmpty(personList)) { + //删除库中已有人员,保证人员与海康一致 + boolean removeFlag = staffInfoService.remove(new QueryWrapper<>()); + if (removeFlag) { + log.info("---------------------删除管理系统人员数据成功"); + } + } int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); if (i >= 0) { return; @@ -172,8 +180,8 @@ } String orgIndexCode = next.getString("orgIndexCode"); PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); - //物业人员(广州广电城市服务集团股份有限公司) - if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //物业人员(广州广电城市服务集团股份有限公司、广电物业) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode) || "fcbaea08-266d-4064-b190-d6a476de49e2".equals(orgIndexCode)) { //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 JSONObject jsonObject = new JSONObject(); jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java index 89bd933..0d4cdbe 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java @@ -18,4 +18,8 @@ VisitInfo visitInfoDetail(String id); String getVisitorPicture(VisitInfo visitInfo); + + String getOutTime(VisitInfo visitInfo); + + String getVisitorPosition(VisitInfo visitInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index 779aa80..5c90d66 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.config.DeviceLinkageConfig; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.dto.hik.DoorControlRequest; +import com.casic.missiles.modular.dto.hik.EventInfoRequest; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; @@ -372,6 +373,7 @@ Integer inoutType = data.getInteger("ExtEventInOut"); //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 String pictureURL = data.getString("ExtEventPictureURL"); + String svrIndexCode = data.getString("svrIndexCode"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -403,7 +405,18 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); - staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); + // + EventInfoRequest picRequest = new EventInfoRequest(); + picRequest.setPicUri(pictureURL); + picRequest.setSvrIndexCode(svrIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.EVENT_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 7f67ae5..2cc4573 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -1248,19 +1248,21 @@ List collect2 = securityScoreDTOs.stream().filter(securityScoreDTO1 -> StringUtils.isNotEmpty(securityScoreDTO1.getPosition()) ).collect(Collectors.toList()); - Map resultMap = new HashMap<>(); - Map resultOneMap = new HashMap<>(); - Map resultTwoMap = new HashMap<>(); - Map resultThreeMap = new HashMap<>(); - Map resultFourMap = new HashMap<>(); + Map resultMap = new HashMap<>(); + Map resultOneMap = new HashMap<>(); + Map resultTwoMap = new HashMap<>(); + Map resultThreeMap = new HashMap<>(); + Map resultFourMap = new HashMap<>(); + Map numberMap = new HashMap<>(); //resultFour中计数使用 //空数据处理 List devicePosition = dictService.findInDictByCode(SecurityEventDict.DEVICE_POSITION); for (Dict dict : devicePosition) { - resultMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultOneMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultTwoMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultThreeMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultFourMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + numberMap.put(dict.getName(), 0); } //楼栋根据事件评分 Map> collect = collect2.stream().collect(Collectors.groupingBy(SecurityScoreDTO::getPosition)); @@ -1268,7 +1270,8 @@ List list = collect.get(key); Double sumValue = list.stream().collect(Collectors.summingDouble(s -> s.getScore().doubleValue())); String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, key); - resultOneMap.put(dictValue, resultOneMap.get(key).subtract(BigDecimal.valueOf(sumValue))); + resultOneMap.put(dictValue, String.valueOf(new BigDecimal(resultOneMap.get(dictValue)).subtract(BigDecimal.valueOf(sumValue)))); + resultOneMap.put(dictValue+"描述", list.size()+"件安防事件未解决;"); }); //各楼栋设备维修次数(发生一次维修减5分) //当天在设备维修期间的设备个数及所在楼栋 @@ -1276,7 +1279,8 @@ if (!CollectionUtils.isEmpty(todayDTOList)) { for (RepairTodayDTO today : todayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); + resultTwoMap.put(dictValue, String.valueOf(new BigDecimal(resultTwoMap.get(dictValue)).subtract(BigDecimal.valueOf(today.getNumber() * 5)))); + resultTwoMap.put(dictValue+"描述", today.getNumber()+"个设备产生维修记录;"); } } @@ -1286,7 +1290,8 @@ if (!CollectionUtils.isEmpty(repairTodayDTOList)) { for (RepairTodayDTO today : repairTodayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); + resultThreeMap.put(dictValue, String.valueOf(new BigDecimal(resultThreeMap.get(dictValue)).subtract(BigDecimal.valueOf(today.getNumber() * 5)))); + resultThreeMap.put(dictValue+"描述", today.getNumber()+"个消防设备超过有效期;"); } } @@ -1298,8 +1303,9 @@ //无离开时间 if (StringUtils.isEmpty(visitorDTO.getOutTime()) && StringUtils.isNotEmpty(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); - BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); - resultFourMap.put(dictValue, bigDecimal); + BigDecimal bigDecimal = new BigDecimal(resultFourMap.get(dictValue)).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); + resultFourMap.put(dictValue, String.valueOf(bigDecimal)); + numberMap.put(dictValue, numberMap.get(dictValue) + 1); } else if (StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())) { DateTime applyOutDateTime = DateUtil.parseDateTime(visitorDTO.getApplyOutTime()); DateTime outDateTime = DateUtil.parseDateTime(visitorDTO.getOutTime()); @@ -1313,30 +1319,50 @@ score = bigDecimal; } String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); - resultFourMap.put(dictValue, resultFourMap.get(dictValue).subtract(score)); + resultFourMap.put(dictValue, String.valueOf(new BigDecimal(resultFourMap.get(dictValue)).subtract(score))); + numberMap.put(dictValue, numberMap.get(dictValue) + 1); } //未在申请区域离开 if (StringUtils.isNotEmpty(visitorDTO.getApplyVisitPosition()) && !visitorDTO.getApplyVisitPosition().equals(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); - BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("singlePointDeduct"))); - resultFourMap.put(dictValue, bigDecimal); + BigDecimal bigDecimal = new BigDecimal(resultFourMap.get(dictValue)).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("singlePointDeduct"))); + resultFourMap.put(dictValue, String.valueOf(bigDecimal)); + numberMap.put(dictValue, numberMap.get(dictValue) + 1); } } } + //封装访客影响分数的描述 + for (String key : numberMap.keySet()) { + if (numberMap.get(key) > 0) { + resultFourMap.put(key+"描述", numberMap.get(key)+"个访客未离开;"); + } + } } - Map finalMap = new HashMap<>(); + Map finalMap = new HashMap<>(); for (String key : resultMap.keySet()) { //安防事件影响占比50%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10%、访客事件影响占比30% - BigDecimal one = resultOneMap.get(key); - BigDecimal two = resultTwoMap.get(key); - BigDecimal three = resultThreeMap.get(key); - BigDecimal four = resultFourMap.get(key); + BigDecimal one = new BigDecimal(resultOneMap.get(key)); + BigDecimal two = new BigDecimal(resultTwoMap.get(key)); + BigDecimal three = new BigDecimal(resultThreeMap.get(key)); + BigDecimal four = new BigDecimal(resultFourMap.get(key)); BigDecimal score = (one.multiply(BigDecimal.valueOf(0.5))).add(two.multiply(BigDecimal.valueOf(0.1))) .add(three.multiply(BigDecimal.valueOf(0.1))).add(four.multiply(BigDecimal.valueOf(0.3))).setScale(2, RoundingMode.HALF_UP); if (score.compareTo(BigDecimal.valueOf(60)) < 0) { score = BigDecimal.valueOf(60); } - finalMap.put(key, score.doubleValue()); + finalMap.put(key, String.valueOf(score.doubleValue())); + if (StringUtils.isNotEmpty(resultOneMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultOneMap.get(key+"描述")); + } + if (StringUtils.isNotEmpty(resultTwoMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultTwoMap.get(key+"描述")); + } + if (StringUtils.isNotEmpty(resultThreeMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultThreeMap.get(key+"描述")); + } + if (StringUtils.isNotEmpty(resultFourMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultFourMap.get(key+"描述")); + } } return ResponseData.success(finalMap); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index c4357b5..be44682 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -77,6 +77,11 @@ //访客照片获取 String pictureUrl = visitService.getVisitorPicture(visitInfo); visitInfo.setPicUri(pictureUrl); + //访客离开时间(当天最新的出闸机时间)、访客访问区域获取 + String outTime = visitService.getOutTime(visitInfo); + String visitorPosition = visitService.getVisitorPosition(visitInfo); + visitInfo.setOutTime(outTime); + visitInfo.setVisitPosition(visitorPosition); }); page.setRecords(visitorApplies); return ResponseData.success(super.packForBT(page)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index 83cf72a..d2cefd9 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -167,10 +167,15 @@ @ResponseBody public Object gateLinkageSwitch(int controlSwitch) { HikServiceImpl.controlSwitch = controlSwitch; - System.out.println(HikServiceImpl.controlSwitch); return ResponseData.success(); } + @GetMapping("/gateLinkage/switchStatus") + @ResponseBody + public Object gateLinkageSwitchStatus() { + return ResponseData.success(HikServiceImpl.controlSwitch); + } + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java index e9ca45a..ed17b20 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/DoorEventsRequest.java @@ -16,6 +16,9 @@ private String startTime; private String endTime; private String order = "asc"; + private String personName; + private String sort; + private Integer inAndOutType; private List personIds; private List doorIndexCodes; private List eventTypes; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index b8e29f1..3052339 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -3,6 +3,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; @@ -23,6 +24,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; @@ -97,7 +99,7 @@ * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode */ - @Scheduled(cron = "0 0 0 ? * 2") + @Scheduled(cron = "0 0 0 ? * 1") @Transactional // @PostConstruct // @Scheduled(cron = "0 0/1 * * * ?") @@ -125,7 +127,13 @@ } } } - + if (!CollectionUtils.isEmpty(personList)) { + //删除库中已有人员,保证人员与海康一致 + boolean removeFlag = staffInfoService.remove(new QueryWrapper<>()); + if (removeFlag) { + log.info("---------------------删除管理系统人员数据成功"); + } + } int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); if (i >= 0) { return; @@ -172,8 +180,8 @@ } String orgIndexCode = next.getString("orgIndexCode"); PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); - //物业人员(广州广电城市服务集团股份有限公司) - if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //物业人员(广州广电城市服务集团股份有限公司、广电物业) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode) || "fcbaea08-266d-4064-b190-d6a476de49e2".equals(orgIndexCode)) { //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 JSONObject jsonObject = new JSONObject(); jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java index 89bd933..0d4cdbe 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitService.java @@ -18,4 +18,8 @@ VisitInfo visitInfoDetail(String id); String getVisitorPicture(VisitInfo visitInfo); + + String getOutTime(VisitInfo visitInfo); + + String getVisitorPosition(VisitInfo visitInfo); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index 779aa80..5c90d66 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -8,6 +8,7 @@ import com.casic.missiles.modular.config.DeviceLinkageConfig; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.dto.hik.DoorControlRequest; +import com.casic.missiles.modular.dto.hik.EventInfoRequest; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; @@ -372,6 +373,7 @@ Integer inoutType = data.getInteger("ExtEventInOut"); //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 String pictureURL = data.getString("ExtEventPictureURL"); + String svrIndexCode = data.getString("svrIndexCode"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -403,7 +405,18 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); - staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); + // + EventInfoRequest picRequest = new EventInfoRequest(); + picRequest.setPicUri(pictureURL); + picRequest.setSvrIndexCode(svrIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.EVENT_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 7f67ae5..2cc4573 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -1248,19 +1248,21 @@ List collect2 = securityScoreDTOs.stream().filter(securityScoreDTO1 -> StringUtils.isNotEmpty(securityScoreDTO1.getPosition()) ).collect(Collectors.toList()); - Map resultMap = new HashMap<>(); - Map resultOneMap = new HashMap<>(); - Map resultTwoMap = new HashMap<>(); - Map resultThreeMap = new HashMap<>(); - Map resultFourMap = new HashMap<>(); + Map resultMap = new HashMap<>(); + Map resultOneMap = new HashMap<>(); + Map resultTwoMap = new HashMap<>(); + Map resultThreeMap = new HashMap<>(); + Map resultFourMap = new HashMap<>(); + Map numberMap = new HashMap<>(); //resultFour中计数使用 //空数据处理 List devicePosition = dictService.findInDictByCode(SecurityEventDict.DEVICE_POSITION); for (Dict dict : devicePosition) { - resultMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultOneMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultTwoMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultThreeMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + resultFourMap.put(dict.getName(), String.valueOf(BigDecimal.valueOf(100))); + numberMap.put(dict.getName(), 0); } //楼栋根据事件评分 Map> collect = collect2.stream().collect(Collectors.groupingBy(SecurityScoreDTO::getPosition)); @@ -1268,7 +1270,8 @@ List list = collect.get(key); Double sumValue = list.stream().collect(Collectors.summingDouble(s -> s.getScore().doubleValue())); String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, key); - resultOneMap.put(dictValue, resultOneMap.get(key).subtract(BigDecimal.valueOf(sumValue))); + resultOneMap.put(dictValue, String.valueOf(new BigDecimal(resultOneMap.get(dictValue)).subtract(BigDecimal.valueOf(sumValue)))); + resultOneMap.put(dictValue+"描述", list.size()+"件安防事件未解决;"); }); //各楼栋设备维修次数(发生一次维修减5分) //当天在设备维修期间的设备个数及所在楼栋 @@ -1276,7 +1279,8 @@ if (!CollectionUtils.isEmpty(todayDTOList)) { for (RepairTodayDTO today : todayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); + resultTwoMap.put(dictValue, String.valueOf(new BigDecimal(resultTwoMap.get(dictValue)).subtract(BigDecimal.valueOf(today.getNumber() * 5)))); + resultTwoMap.put(dictValue+"描述", today.getNumber()+"个设备产生维修记录;"); } } @@ -1286,7 +1290,8 @@ if (!CollectionUtils.isEmpty(repairTodayDTOList)) { for (RepairTodayDTO today : repairTodayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); + resultThreeMap.put(dictValue, String.valueOf(new BigDecimal(resultThreeMap.get(dictValue)).subtract(BigDecimal.valueOf(today.getNumber() * 5)))); + resultThreeMap.put(dictValue+"描述", today.getNumber()+"个消防设备超过有效期;"); } } @@ -1298,8 +1303,9 @@ //无离开时间 if (StringUtils.isEmpty(visitorDTO.getOutTime()) && StringUtils.isNotEmpty(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); - BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); - resultFourMap.put(dictValue, bigDecimal); + BigDecimal bigDecimal = new BigDecimal(resultFourMap.get(dictValue)).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); + resultFourMap.put(dictValue, String.valueOf(bigDecimal)); + numberMap.put(dictValue, numberMap.get(dictValue) + 1); } else if (StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())) { DateTime applyOutDateTime = DateUtil.parseDateTime(visitorDTO.getApplyOutTime()); DateTime outDateTime = DateUtil.parseDateTime(visitorDTO.getOutTime()); @@ -1313,30 +1319,50 @@ score = bigDecimal; } String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); - resultFourMap.put(dictValue, resultFourMap.get(dictValue).subtract(score)); + resultFourMap.put(dictValue, String.valueOf(new BigDecimal(resultFourMap.get(dictValue)).subtract(score))); + numberMap.put(dictValue, numberMap.get(dictValue) + 1); } //未在申请区域离开 if (StringUtils.isNotEmpty(visitorDTO.getApplyVisitPosition()) && !visitorDTO.getApplyVisitPosition().equals(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); - BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("singlePointDeduct"))); - resultFourMap.put(dictValue, bigDecimal); + BigDecimal bigDecimal = new BigDecimal(resultFourMap.get(dictValue)).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("singlePointDeduct"))); + resultFourMap.put(dictValue, String.valueOf(bigDecimal)); + numberMap.put(dictValue, numberMap.get(dictValue) + 1); } } } + //封装访客影响分数的描述 + for (String key : numberMap.keySet()) { + if (numberMap.get(key) > 0) { + resultFourMap.put(key+"描述", numberMap.get(key)+"个访客未离开;"); + } + } } - Map finalMap = new HashMap<>(); + Map finalMap = new HashMap<>(); for (String key : resultMap.keySet()) { //安防事件影响占比50%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10%、访客事件影响占比30% - BigDecimal one = resultOneMap.get(key); - BigDecimal two = resultTwoMap.get(key); - BigDecimal three = resultThreeMap.get(key); - BigDecimal four = resultFourMap.get(key); + BigDecimal one = new BigDecimal(resultOneMap.get(key)); + BigDecimal two = new BigDecimal(resultTwoMap.get(key)); + BigDecimal three = new BigDecimal(resultThreeMap.get(key)); + BigDecimal four = new BigDecimal(resultFourMap.get(key)); BigDecimal score = (one.multiply(BigDecimal.valueOf(0.5))).add(two.multiply(BigDecimal.valueOf(0.1))) .add(three.multiply(BigDecimal.valueOf(0.1))).add(four.multiply(BigDecimal.valueOf(0.3))).setScale(2, RoundingMode.HALF_UP); if (score.compareTo(BigDecimal.valueOf(60)) < 0) { score = BigDecimal.valueOf(60); } - finalMap.put(key, score.doubleValue()); + finalMap.put(key, String.valueOf(score.doubleValue())); + if (StringUtils.isNotEmpty(resultOneMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultOneMap.get(key+"描述")); + } + if (StringUtils.isNotEmpty(resultTwoMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultTwoMap.get(key+"描述")); + } + if (StringUtils.isNotEmpty(resultThreeMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultThreeMap.get(key+"描述")); + } + if (StringUtils.isNotEmpty(resultFourMap.get(key+"描述"))) { + finalMap.put(key+"描述", resultFourMap.get(key+"描述")); + } } return ResponseData.success(finalMap); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitServiceImpl.java index 4a3a0f9..53a6fc5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitServiceImpl.java @@ -1,16 +1,22 @@ package com.casic.missiles.modular.service.impl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.VisitInfoMapper; import com.casic.missiles.modular.dto.VisitorRequest; +import com.casic.missiles.modular.dto.hik.DoorEventsRequest; import com.casic.missiles.modular.dto.hik.PersonInfoRequest; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; +import com.casic.missiles.modular.model.DeviceInfo; import com.casic.missiles.modular.model.VisitInfo; +import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.VisitService; import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; @@ -20,7 +26,12 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Calendar; import java.util.List; +import java.util.Objects; /** * @Description: @@ -32,9 +43,10 @@ public class VisitServiceImpl extends ServiceImpl implements VisitService { @Autowired private VisitInfoMapper visitInfoMapper; - @Resource private AbstractDictService dictService; + @Autowired + private DeviceInfoService deviceInfoService; @Override public List visitInfoListPage(Page page, VisitorRequest visitorRequest) { @@ -88,4 +100,107 @@ return HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); } + + @Override + public String getOutTime(VisitInfo visitInfo) { + DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); + doorEventsRequest.setPageNo(1); + doorEventsRequest.setPageSize(2);//前2条数据一定会有个出门禁数据 + List eventTypes = new ArrayList<>(); +// eventTypes.add(SecurityEventType.CARD_COMPARE_PASS);//刷卡的数据 + eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); + doorEventsRequest.setEventTypes(eventTypes); + doorEventsRequest.setSort("desc"); + doorEventsRequest.setOrder("eventTime"); + DateTime startDateTime = DateUtil.parse(visitInfo.getInTime()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDateTime); + calendar.add(Calendar.DAY_OF_MONTH, 1); // 增加一天 + calendar.set(Calendar.HOUR_OF_DAY, 0); // 设置小时为0点 + calendar.set(Calendar.MINUTE, 0); // 设置分钟为0 + calendar.set(Calendar.SECOND, 0); // 设置秒为0 + calendar.set(Calendar.MILLISECOND, 0); // 设置毫秒为0 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + DateTime endDateTime = DateUtil.parse(sdf.format(calendar.getTime())); + String startTime = DateUtil.format(startDateTime, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); + String endTime = DateUtil.format(endDateTime, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); + doorEventsRequest.setStartTime(startTime); + doorEventsRequest.setEndTime(endTime); + doorEventsRequest.setPersonName(visitInfo.getVisitorName()); + String body1 = JSONObject.toJSONString(doorEventsRequest); + String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + if (!"0".equals(resultJson1.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr1); + } + //门禁点事件结果处理 + String outTime = handleDoorOutTimeResponse(resultJson1); + return outTime; + } + + @Override + public String getVisitorPosition(VisitInfo visitInfo) { + DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); + doorEventsRequest.setPageNo(1); + doorEventsRequest.setPageSize(1); + List eventTypes = new ArrayList<>(); +// eventTypes.add(SecurityEventType.CARD_COMPARE_PASS);//刷卡的数据 + eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); + doorEventsRequest.setEventTypes(eventTypes); + DateTime inTime = DateUtil.parse(visitInfo.getInTime()); + LocalDateTime localDateTime = DateUtil.toLocalDateTime(inTime); + //取进门前后3分钟内的门禁事件数据(ISC中门禁事件数据和访客登记事件的时间有点出入) + LocalDateTime startDateTime = localDateTime.minusMinutes(3); + LocalDateTime endDateTime = localDateTime.plusMinutes(3); + String startTime = DateUtil.format(startDateTime, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); + String endTime = DateUtil.format(endDateTime, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); + doorEventsRequest.setStartTime(startTime); + doorEventsRequest.setEndTime(endTime); + doorEventsRequest.setPersonName(visitInfo.getVisitorName()); + String body1 = JSONObject.toJSONString(doorEventsRequest); + String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + if (!"0".equals(resultJson1.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr1); + } + //门禁点事件结果处理 + String visitorPosition = handleDoorPositionResponse(resultJson1); + return visitorPosition; + } + + private String handleDoorPositionResponse(JSONObject resultJson1) { + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.nonNull(dataJson1)) { + JSONArray list = (JSONArray) dataJson1.get("list"); + if (Objects.nonNull(list)) { + JSONObject json1 = (JSONObject) list.get(0); + Integer inAndOutType = json1.getInteger("inAndOutType"); + //进门禁 + if (inAndOutType == 1) { + String indexCode = json1.getString("doorIndexCode"); + DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(indexCode); + return deviceInfo.getPosition(); + } + } + } + return null; + } + + private String handleDoorOutTimeResponse(JSONObject resultJson1) { + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.nonNull(dataJson1)) { + JSONArray list = (JSONArray) dataJson1.get("list"); + for (Object json : list) { + JSONObject json1 = (JSONObject) json; + Integer inAndOutType = json1.getInteger("inAndOutType"); + //出门禁 + if (inAndOutType == 0) { + DateTime parse = DateUtil.parse(json1.getString("eventTime")); + String outTime = DateUtil.formatDateTime(parse); + return outTime; + } + } + } + return null; + } }