diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java index ef39665..de0f4ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java @@ -32,4 +32,12 @@ //该访客累计访问次数 @TableField(exist = false) private Integer frequency; + @TableField(exist = false) + private String applyInTime; + @TableField(exist = false) + private String applyOutTime; + @TableField(exist = false) + private String applyVisitPosition; + @TableField(exist = false) + private boolean checkPass = true; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java index ef39665..de0f4ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java @@ -32,4 +32,12 @@ //该访客累计访问次数 @TableField(exist = false) private Integer frequency; + @TableField(exist = false) + private String applyInTime; + @TableField(exist = false) + private String applyOutTime; + @TableField(exist = false) + private String applyVisitPosition; + @TableField(exist = false) + private boolean checkPass = true; } 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 c676f2a..ad9dee9 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 @@ -7,16 +7,20 @@ import com.casic.missiles.core.application.service.AbstractDictService; 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.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.HashMap; @@ -67,25 +71,25 @@ log.info("接收到黑名单事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return caseInfo; } -// //发生黑名单事件,若匹配联动配置,常闭指定闸机 -// HashMap> configMap = deviceLinkageConfig.getConfigMap(); -// if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ -// List list = configMap.get(srcIndex); -// //海康门禁点反控 -// DoorControlRequest doorControlRequest = new DoorControlRequest(); -// //需根据设备编号获取到对应的门禁点唯一标识 -// doorControlRequest.setDoorIndexCodes(list); -// //常闭 -// doorControlRequest.setControlType(3); -// String body = JSONObject.toJSONString(doorControlRequest); -// String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); -// JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); -// if (!"0".equals(resultJson.get("code"))) { -// log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); -// }else{ -// log.info("发生黑名单事件,请求海康,门禁点反控成功"); -// } -// } + //发生黑名单事件,若匹配联动配置,常闭指定闸机 + HashMap> configMap = deviceLinkageConfig.getConfigMap(); + if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ + List list = configMap.get(srcIndex); + //海康门禁点反控 + DoorControlRequest doorControlRequest = new DoorControlRequest(); + //需根据设备编号获取到对应的门禁点唯一标识 + doorControlRequest.setDoorIndexCodes(list); + //常闭 + doorControlRequest.setControlType(3); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); + }else{ + log.info("发生黑名单事件,请求海康,门禁点反控成功"); + } + } caseInfo.setIndexCode(srcIndex); caseInfo.setDeviceCode(deviceInfo.getDevCode()); //设备code @@ -154,7 +158,8 @@ JSONObject data = event.getJSONObject("data"); if(!Objects.isNull(data)){ JSONArray group = data.getJSONArray("group"); - if(StringUtils.isNotEmpty(group.getString(0))){ +// if(StringUtils.isNotEmpty(group.getString(0))){ + if(!Objects.isNull(group.getJSONObject(0))){ JSONObject jsonObject = group.getJSONObject(0); String imageUrl = jsonObject.getString("imageUrl"); caseInfo.setEventPicture(imageUrl); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java index ef39665..de0f4ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java @@ -32,4 +32,12 @@ //该访客累计访问次数 @TableField(exist = false) private Integer frequency; + @TableField(exist = false) + private String applyInTime; + @TableField(exist = false) + private String applyOutTime; + @TableField(exist = false) + private String applyVisitPosition; + @TableField(exist = false) + private boolean checkPass = true; } 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 c676f2a..ad9dee9 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 @@ -7,16 +7,20 @@ import com.casic.missiles.core.application.service.AbstractDictService; 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.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.HashMap; @@ -67,25 +71,25 @@ log.info("接收到黑名单事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return caseInfo; } -// //发生黑名单事件,若匹配联动配置,常闭指定闸机 -// HashMap> configMap = deviceLinkageConfig.getConfigMap(); -// if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ -// List list = configMap.get(srcIndex); -// //海康门禁点反控 -// DoorControlRequest doorControlRequest = new DoorControlRequest(); -// //需根据设备编号获取到对应的门禁点唯一标识 -// doorControlRequest.setDoorIndexCodes(list); -// //常闭 -// doorControlRequest.setControlType(3); -// String body = JSONObject.toJSONString(doorControlRequest); -// String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); -// JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); -// if (!"0".equals(resultJson.get("code"))) { -// log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); -// }else{ -// log.info("发生黑名单事件,请求海康,门禁点反控成功"); -// } -// } + //发生黑名单事件,若匹配联动配置,常闭指定闸机 + HashMap> configMap = deviceLinkageConfig.getConfigMap(); + if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ + List list = configMap.get(srcIndex); + //海康门禁点反控 + DoorControlRequest doorControlRequest = new DoorControlRequest(); + //需根据设备编号获取到对应的门禁点唯一标识 + doorControlRequest.setDoorIndexCodes(list); + //常闭 + doorControlRequest.setControlType(3); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); + }else{ + log.info("发生黑名单事件,请求海康,门禁点反控成功"); + } + } caseInfo.setIndexCode(srcIndex); caseInfo.setDeviceCode(deviceInfo.getDevCode()); //设备code @@ -154,7 +158,8 @@ JSONObject data = event.getJSONObject("data"); if(!Objects.isNull(data)){ JSONArray group = data.getJSONArray("group"); - if(StringUtils.isNotEmpty(group.getString(0))){ +// if(StringUtils.isNotEmpty(group.getString(0))){ + if(!Objects.isNull(group.getJSONObject(0))){ JSONObject jsonObject = group.getJSONObject(0); String imageUrl = jsonObject.getString("imageUrl"); caseInfo.setEventPicture(imageUrl); 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 cf61c40..1225895 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 @@ -613,7 +613,11 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); + }else { + hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + } }); List> resultList = new ArrayList<>(); @@ -1429,7 +1433,11 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); + }else { + assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + } }); //构造结果 List> resultList = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java index ef39665..de0f4ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java @@ -32,4 +32,12 @@ //该访客累计访问次数 @TableField(exist = false) private Integer frequency; + @TableField(exist = false) + private String applyInTime; + @TableField(exist = false) + private String applyOutTime; + @TableField(exist = false) + private String applyVisitPosition; + @TableField(exist = false) + private boolean checkPass = true; } 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 c676f2a..ad9dee9 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 @@ -7,16 +7,20 @@ import com.casic.missiles.core.application.service.AbstractDictService; 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.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.HashMap; @@ -67,25 +71,25 @@ log.info("接收到黑名单事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return caseInfo; } -// //发生黑名单事件,若匹配联动配置,常闭指定闸机 -// HashMap> configMap = deviceLinkageConfig.getConfigMap(); -// if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ -// List list = configMap.get(srcIndex); -// //海康门禁点反控 -// DoorControlRequest doorControlRequest = new DoorControlRequest(); -// //需根据设备编号获取到对应的门禁点唯一标识 -// doorControlRequest.setDoorIndexCodes(list); -// //常闭 -// doorControlRequest.setControlType(3); -// String body = JSONObject.toJSONString(doorControlRequest); -// String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); -// JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); -// if (!"0".equals(resultJson.get("code"))) { -// log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); -// }else{ -// log.info("发生黑名单事件,请求海康,门禁点反控成功"); -// } -// } + //发生黑名单事件,若匹配联动配置,常闭指定闸机 + HashMap> configMap = deviceLinkageConfig.getConfigMap(); + if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ + List list = configMap.get(srcIndex); + //海康门禁点反控 + DoorControlRequest doorControlRequest = new DoorControlRequest(); + //需根据设备编号获取到对应的门禁点唯一标识 + doorControlRequest.setDoorIndexCodes(list); + //常闭 + doorControlRequest.setControlType(3); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); + }else{ + log.info("发生黑名单事件,请求海康,门禁点反控成功"); + } + } caseInfo.setIndexCode(srcIndex); caseInfo.setDeviceCode(deviceInfo.getDevCode()); //设备code @@ -154,7 +158,8 @@ JSONObject data = event.getJSONObject("data"); if(!Objects.isNull(data)){ JSONArray group = data.getJSONArray("group"); - if(StringUtils.isNotEmpty(group.getString(0))){ +// if(StringUtils.isNotEmpty(group.getString(0))){ + if(!Objects.isNull(group.getJSONObject(0))){ JSONObject jsonObject = group.getJSONObject(0); String imageUrl = jsonObject.getString("imageUrl"); caseInfo.setEventPicture(imageUrl); 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 cf61c40..1225895 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 @@ -613,7 +613,11 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); + }else { + hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + } }); List> resultList = new ArrayList<>(); @@ -1429,7 +1433,11 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); + }else { + assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + } }); //构造结果 List> resultList = new ArrayList<>(); 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 42e68ab..4a3a0f9 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,5 +1,6 @@ package com.casic.missiles.modular.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,6 +14,7 @@ import com.casic.missiles.modular.service.VisitService; import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -41,6 +43,27 @@ pageList.forEach(visitInfo ->{ visitInfo.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitInfo.getVisitReason())); visitInfo.setVisitPosition(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitInfo.getVisitPosition())); + if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition())){ + visitInfo.setApplyVisitPosition(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitInfo.getApplyVisitPosition())); + } + //记录标红判断,false为标红 + if(StringUtils.isEmpty(visitInfo.getApplyVisitPosition()) || StringUtils.isEmpty(visitInfo.getApplyInTime()) + || StringUtils.isEmpty(visitInfo.getApplyOutTime())){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyOutTime()) && StringUtils.isEmpty(visitInfo.getOutTime()) + && DateUtil.now().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyOutTime()) && StringUtils.isNotEmpty(visitInfo.getOutTime()) + && visitInfo.getOutTime().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition()) && StringUtils.isNotEmpty(visitInfo.getVisitPosition()) + && !visitInfo.getApplyVisitPosition().equals(visitInfo.getVisitPosition())){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition()) && StringUtils.isEmpty(visitInfo.getVisitPosition()) + && DateUtil.now().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + } + }); return pageList; } catch (DataAccessException ex) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java index ef39665..de0f4ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java @@ -32,4 +32,12 @@ //该访客累计访问次数 @TableField(exist = false) private Integer frequency; + @TableField(exist = false) + private String applyInTime; + @TableField(exist = false) + private String applyOutTime; + @TableField(exist = false) + private String applyVisitPosition; + @TableField(exist = false) + private boolean checkPass = true; } 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 c676f2a..ad9dee9 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 @@ -7,16 +7,20 @@ import com.casic.missiles.core.application.service.AbstractDictService; 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.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.HashMap; @@ -67,25 +71,25 @@ log.info("接收到黑名单事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return caseInfo; } -// //发生黑名单事件,若匹配联动配置,常闭指定闸机 -// HashMap> configMap = deviceLinkageConfig.getConfigMap(); -// if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ -// List list = configMap.get(srcIndex); -// //海康门禁点反控 -// DoorControlRequest doorControlRequest = new DoorControlRequest(); -// //需根据设备编号获取到对应的门禁点唯一标识 -// doorControlRequest.setDoorIndexCodes(list); -// //常闭 -// doorControlRequest.setControlType(3); -// String body = JSONObject.toJSONString(doorControlRequest); -// String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); -// JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); -// if (!"0".equals(resultJson.get("code"))) { -// log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); -// }else{ -// log.info("发生黑名单事件,请求海康,门禁点反控成功"); -// } -// } + //发生黑名单事件,若匹配联动配置,常闭指定闸机 + HashMap> configMap = deviceLinkageConfig.getConfigMap(); + if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ + List list = configMap.get(srcIndex); + //海康门禁点反控 + DoorControlRequest doorControlRequest = new DoorControlRequest(); + //需根据设备编号获取到对应的门禁点唯一标识 + doorControlRequest.setDoorIndexCodes(list); + //常闭 + doorControlRequest.setControlType(3); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); + }else{ + log.info("发生黑名单事件,请求海康,门禁点反控成功"); + } + } caseInfo.setIndexCode(srcIndex); caseInfo.setDeviceCode(deviceInfo.getDevCode()); //设备code @@ -154,7 +158,8 @@ JSONObject data = event.getJSONObject("data"); if(!Objects.isNull(data)){ JSONArray group = data.getJSONArray("group"); - if(StringUtils.isNotEmpty(group.getString(0))){ +// if(StringUtils.isNotEmpty(group.getString(0))){ + if(!Objects.isNull(group.getJSONObject(0))){ JSONObject jsonObject = group.getJSONObject(0); String imageUrl = jsonObject.getString("imageUrl"); caseInfo.setEventPicture(imageUrl); 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 cf61c40..1225895 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 @@ -613,7 +613,11 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); + }else { + hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + } }); List> resultList = new ArrayList<>(); @@ -1429,7 +1433,11 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); + }else { + assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + } }); //构造结果 List> resultList = new ArrayList<>(); 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 42e68ab..4a3a0f9 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,5 +1,6 @@ package com.casic.missiles.modular.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,6 +14,7 @@ import com.casic.missiles.modular.service.VisitService; import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -41,6 +43,27 @@ pageList.forEach(visitInfo ->{ visitInfo.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitInfo.getVisitReason())); visitInfo.setVisitPosition(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitInfo.getVisitPosition())); + if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition())){ + visitInfo.setApplyVisitPosition(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitInfo.getApplyVisitPosition())); + } + //记录标红判断,false为标红 + if(StringUtils.isEmpty(visitInfo.getApplyVisitPosition()) || StringUtils.isEmpty(visitInfo.getApplyInTime()) + || StringUtils.isEmpty(visitInfo.getApplyOutTime())){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyOutTime()) && StringUtils.isEmpty(visitInfo.getOutTime()) + && DateUtil.now().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyOutTime()) && StringUtils.isNotEmpty(visitInfo.getOutTime()) + && visitInfo.getOutTime().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition()) && StringUtils.isNotEmpty(visitInfo.getVisitPosition()) + && !visitInfo.getApplyVisitPosition().equals(visitInfo.getVisitPosition())){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition()) && StringUtils.isEmpty(visitInfo.getVisitPosition()) + && DateUtil.now().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + } + }); return pageList; } catch (DataAccessException ex) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java index 9764e9c..96fdd55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java @@ -147,7 +147,8 @@ result.add(sdf.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } - result.add(endTime.substring(0, endTime.indexOf(" "))); +// result.add(endTime.substring(0, endTime.indexOf(" "))); + result.add(endTime); return result; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index 6beaceb..f94adfd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -24,7 +24,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @Description: 设备管理Controller @@ -276,23 +279,19 @@ List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); - //需根据设备编号获取到对应的门禁点唯一标识 - doorControlRequest.setDoorIndexCodes(indexCodes); doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus())); - String body = JSONObject.toJSONString(doorControlRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); - JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); - if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); - return ResponseData.error("门禁点反控失败"); - } - List hikDataList = (List) resultJson.get("data"); + List failControlList = new ArrayList<>(); - hikDataList.forEach(data -> { - if(0 != (Integer)data.get("controlResultCode")){ - failControlList.add(String.valueOf(data.get("doorIndexCode"))); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; } - }); + List newList = indexCodes.subList(i, i + toIndex); + List list = queryDoorControl(doorControlRequest, newList); + failControlList.addAll(list); + } + if(!CollectionUtils.isEmpty(failControlList)){ return ResponseData.error("门禁点:" + failControlList + "反控失败"); } @@ -304,4 +303,25 @@ return ResponseData.success(); } + private List queryDoorControl(DoorControlRequest doorControlRequest, List indexCodes){ + doorControlRequest.setDoorIndexCodes(indexCodes); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + List failControlList = new ArrayList<>(); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,门禁点反控失败,海康response:{}", resultStr); + failControlList.add("ALL"); + return failControlList; + } + List hikDataList = (List) resultJson.get("data"); + + hikDataList.forEach(data -> { + if(0 != (Integer)data.get("controlResultCode")){ + failControlList.add(String.valueOf(data.get("doorIndexCode"))); + } + }); + return failControlList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 711b9d9..1523f24 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -151,7 +151,7 @@ private void caseHandle(HikRecvEvent hikRecvEvent, Number eventType, CaseInfo caseInfo) { JSONArray eventArray = hikRecvEvent.getEventArray(); - log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); +// log.info("接收到的安防事件的数据为:{}", JSONObject.toJSONString(eventArray)); List caseInfos = new ArrayList<>(); Iterator iterator = eventArray.iterator(); while (iterator.hasNext()) { @@ -281,28 +281,30 @@ String cameraIndexCode = json1.getString("cameraIndexCode"); if(StringUtils.isNotEmpty(cameraIndexCode)){ DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); - SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); - searchPicturesResponse.setDevName(deviceInfo.getDevName()); - searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); - searchPicturesResponse.setPosition(deviceInfo.getPosition()); - searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); - searchPicturesResponse.setArea(deviceInfo.getArea()); - searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); - String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); - String s = StringUtils.substringBefore(facePicUrlAfter, "&"); - byte[] facePicUrl = Base64.getDecoder().decode(s); - searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); - String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); - String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); - byte[] bkgPicUrl = Base64.getDecoder().decode(s1); - searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); - searchPicturesResponse.setSimilarity(json1.getString("similarity")); - DateTime parse = DateUtil.parse(json1.getString("captureTime")); - String time = DateUtil.formatDateTime(parse); - searchPicturesResponse.setTime(time); - searchPicturesResponse.setSex(json1.getString("sex")); - searchPicturesResponse.setRect(json1.getString("rect")); - responseList.add(searchPicturesResponse); + if(!Objects.isNull(deviceInfo)){ + SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); + searchPicturesResponse.setDevName(deviceInfo.getDevName()); + searchPicturesResponse.setDrawNo(deviceInfo.getDrawNo()); + searchPicturesResponse.setPosition(deviceInfo.getPosition()); + searchPicturesResponse.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, deviceInfo.getPosition())); + searchPicturesResponse.setArea(deviceInfo.getArea()); + searchPicturesResponse.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, deviceInfo.getArea())); + String facePicUrlAfter = StringUtils.substringAfter(json1.getString("facePicUrl"), "?imgSrc="); + String s = StringUtils.substringBefore(facePicUrlAfter, "&"); + byte[] facePicUrl = Base64.getDecoder().decode(s); + searchPicturesResponse.setFacePicUrl(new String(facePicUrl)); + String bkgPicUrlAfter = StringUtils.substringAfter(json1.getString("bkgPicUrl"), "?imgSrc="); + String s1 = StringUtils.substringBefore(bkgPicUrlAfter, "&"); + byte[] bkgPicUrl = Base64.getDecoder().decode(s1); + searchPicturesResponse.setBkgPicUrl(new String(bkgPicUrl)); + searchPicturesResponse.setSimilarity(json1.getString("similarity")); + DateTime parse = DateUtil.parse(json1.getString("captureTime")); + String time = DateUtil.formatDateTime(parse); + searchPicturesResponse.setTime(time); + searchPicturesResponse.setSex(json1.getString("sex")); + searchPicturesResponse.setRect(json1.getString("rect")); + responseList.add(searchPicturesResponse); + } } }); //按时间正序排序 @@ -452,14 +454,12 @@ @PostMapping("/hik/search/doorInout") @ResponseBody public Object doorInout(@RequestBody DoorInoutRequest doorInoutRequest) { - //通过分组id获取闸机编号列表 - List deviceCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); - if(CollectionUtils.isEmpty(deviceCodes)){ + //通过分组id获取闸机编号(门禁点唯一标识)列表 + List indexCodes = deviceInfoService.selectDeviceCodesById(doorInoutRequest.getId()); + if(CollectionUtils.isEmpty(indexCodes)){ log.info("门禁今日进出人数统计:不存在分组的闸机编号,分组id:{}", doorInoutRequest.getId()); return ResponseData.error("不存在分组下的闸机编号"); } - //根据闸机编号列表获取门禁点唯一标识列表 - List indexCodes = deviceInfoService.selectIndexCodesByCodes(deviceCodes); List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); @@ -469,61 +469,28 @@ DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - //海康该接口仅支持查10个门禁点,更改为查全量后筛选 -// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当前 - String body = JSONObject.toJSONString(doorEventsRequest); - String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); - JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); - if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson = (JSONObject) resultJson.get("data"); - if (Objects.isNull(dataJson)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray = (JSONArray) dataJson.get("list"); - if (Objects.isNull(dataArray)) { - return ResponseData.error("门禁今日进出人数统计失败!"); + + JSONArray dataArray = new JSONArray(); + for (int i = 0; i < indexCodes.size(); i+=10) { + Integer toIndex = 10; + if(i + 10 > indexCodes.size()){ + toIndex = indexCodes.size() - i; + } + List newList =indexCodes.subList(i, i + toIndex); + JSONArray jsonArray = queryDoorEvents(doorEventsRequest, newList); + dataArray.addAll(jsonArray); } - //海康分页限制,需循环请求数据 - if ((Integer) dataJson.get("totalPage") > 1) { - for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { - doorEventsRequest.setPageNo(i); - 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"))) { - return ResponseData.error("门禁今日进出人数统计失败"); - } - JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); - if (Objects.isNull(dataJson1)) { - return ResponseData.error("门禁今日进出人数统计失败."); - } - JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); - if (Objects.isNull(dataArray1)) { - return ResponseData.error("门禁今日进出人数统计失败!"); - } - dataArray.addAll(dataArray1); - } - } - JSONArray arrays = new JSONArray(); - dataArray.stream().forEach(o -> { - JSONObject jsonObject = (JSONObject) o; - if (indexCodes.contains(jsonObject.getString("doorIndexCode"))) { - arrays.add(jsonObject); - } - }); - if (Objects.isNull(arrays)) { + if (Objects.isNull(dataArray)) { log.error("请求海康,查询海康门禁点事件v2,结果list为null,分组id:{}", doorInoutRequest.getId()); + return ResponseData.error("门禁今日进出人数统计失败!"); } Integer inDoor = 0; Integer outDoor = 0; - Iterator iterator = arrays.stream().iterator(); + Iterator iterator = dataArray.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); @@ -540,4 +507,46 @@ return response; } + private JSONArray queryDoorEvents(DoorEventsRequest doorEventsRequest, List doorIndexCodes){ + doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + String body = JSONObject.toJSONString(doorEventsRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_EVENTS, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); + return null; + } + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { + return null; + } + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { + return null; + } + + //海康分页限制,需循环请求数据 + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { + doorEventsRequest.setPageNo(i); + 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"))) { + return null; + } + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { + return null; + } + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { + return null; + } + dataArray.addAll(dataArray1); + } + } + return dataArray; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 90f41c5..85326a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -24,7 +24,7 @@ and DATE_FORMAT(bfei.expire_date,'%Y-%m-%d') <= DATE_FORMAT(#{fireEquipRequest.expireDate},'%Y-%m-%d') - ORDER by expire_date DESC + ORDER BY expire_date ASC - SELECT * - FROM bus_visit_info + SELECT bvi.*, bva.in_time AS applyInTime, bva.out_time AS applyOutTime, bva.visit_position AS applyVisitPosition + FROM bus_visit_info bvi + LEFT JOIN bus_visit_apply bva ON bva.order_id = bvi.order_id WHERE 1=1 - and visitor_name like concat('%',#{visitorRequest.keywords},'%') + and bvi.visitor_name like concat('%',#{visitorRequest.keywords},'%') - and visit_reason = #{visitorRequest.visitReason} + and bvi.visit_reason = #{visitorRequest.visitReason} - and visit_position = #{visitorRequest.position} + and bvi.visit_position = #{visitorRequest.position} - and date_format(in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} + and date_format(bvi.in_time,'%Y-%m-%d') >= #{visitorRequest.startTime,jdbcType=TIMESTAMP} - and date_format(out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + and date_format(bvi.out_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java index ef39665..de0f4ee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitInfo.java @@ -32,4 +32,12 @@ //该访客累计访问次数 @TableField(exist = false) private Integer frequency; + @TableField(exist = false) + private String applyInTime; + @TableField(exist = false) + private String applyOutTime; + @TableField(exist = false) + private String applyVisitPosition; + @TableField(exist = false) + private boolean checkPass = true; } 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 c676f2a..ad9dee9 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 @@ -7,16 +7,20 @@ import com.casic.missiles.core.application.service.AbstractDictService; 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.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.HashMap; @@ -67,25 +71,25 @@ log.info("接收到黑名单事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return caseInfo; } -// //发生黑名单事件,若匹配联动配置,常闭指定闸机 -// HashMap> configMap = deviceLinkageConfig.getConfigMap(); -// if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ -// List list = configMap.get(srcIndex); -// //海康门禁点反控 -// DoorControlRequest doorControlRequest = new DoorControlRequest(); -// //需根据设备编号获取到对应的门禁点唯一标识 -// doorControlRequest.setDoorIndexCodes(list); -// //常闭 -// doorControlRequest.setControlType(3); -// String body = JSONObject.toJSONString(doorControlRequest); -// String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); -// JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); -// if (!"0".equals(resultJson.get("code"))) { -// log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); -// }else{ -// log.info("发生黑名单事件,请求海康,门禁点反控成功"); -// } -// } + //发生黑名单事件,若匹配联动配置,常闭指定闸机 + HashMap> configMap = deviceLinkageConfig.getConfigMap(); + if(!CollectionUtils.isEmpty(configMap.get(srcIndex))){ + List list = configMap.get(srcIndex); + //海康门禁点反控 + DoorControlRequest doorControlRequest = new DoorControlRequest(); + //需根据设备编号获取到对应的门禁点唯一标识 + doorControlRequest.setDoorIndexCodes(list); + //常闭 + doorControlRequest.setControlType(3); + String body = JSONObject.toJSONString(doorControlRequest); + String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("发生黑名单事件,请求海康,门禁点反控失败,海康response:{}", resultStr); + }else{ + log.info("发生黑名单事件,请求海康,门禁点反控成功"); + } + } caseInfo.setIndexCode(srcIndex); caseInfo.setDeviceCode(deviceInfo.getDevCode()); //设备code @@ -154,7 +158,8 @@ JSONObject data = event.getJSONObject("data"); if(!Objects.isNull(data)){ JSONArray group = data.getJSONArray("group"); - if(StringUtils.isNotEmpty(group.getString(0))){ +// if(StringUtils.isNotEmpty(group.getString(0))){ + if(!Objects.isNull(group.getJSONObject(0))){ JSONObject jsonObject = group.getJSONObject(0); String imageUrl = jsonObject.getString("imageUrl"); caseInfo.setEventPicture(imageUrl); 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 cf61c40..1225895 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 @@ -613,7 +613,11 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); + }else { + hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); + } }); List> resultList = new ArrayList<>(); @@ -1429,7 +1433,11 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); + }else { + assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); + } }); //构造结果 List> resultList = new ArrayList<>(); 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 42e68ab..4a3a0f9 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,5 +1,6 @@ package com.casic.missiles.modular.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,6 +14,7 @@ import com.casic.missiles.modular.service.VisitService; import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; @@ -41,6 +43,27 @@ pageList.forEach(visitInfo ->{ visitInfo.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitInfo.getVisitReason())); visitInfo.setVisitPosition(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitInfo.getVisitPosition())); + if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition())){ + visitInfo.setApplyVisitPosition(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitInfo.getApplyVisitPosition())); + } + //记录标红判断,false为标红 + if(StringUtils.isEmpty(visitInfo.getApplyVisitPosition()) || StringUtils.isEmpty(visitInfo.getApplyInTime()) + || StringUtils.isEmpty(visitInfo.getApplyOutTime())){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyOutTime()) && StringUtils.isEmpty(visitInfo.getOutTime()) + && DateUtil.now().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyOutTime()) && StringUtils.isNotEmpty(visitInfo.getOutTime()) + && visitInfo.getOutTime().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition()) && StringUtils.isNotEmpty(visitInfo.getVisitPosition()) + && !visitInfo.getApplyVisitPosition().equals(visitInfo.getVisitPosition())){ + visitInfo.setCheckPass(false); + }else if(StringUtils.isNotEmpty(visitInfo.getApplyVisitPosition()) && StringUtils.isEmpty(visitInfo.getVisitPosition()) + && DateUtil.now().compareTo(visitInfo.getApplyOutTime()) > 0){ + visitInfo.setCheckPass(false); + } + }); return pageList; } catch (DataAccessException ex) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java index 9764e9c..96fdd55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/util/DateUtils.java @@ -147,7 +147,8 @@ result.add(sdf.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } - result.add(endTime.substring(0, endTime.indexOf(" "))); +// result.add(endTime.substring(0, endTime.indexOf(" "))); + result.add(endTime); return result; } diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index b7d99ea..8338dbe 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -91,12 +91,18 @@ configMap: #一期主楼 1d07f327d63f4fabac94d6e0fc92496c: [534542c51e9c4499becf464ec80895f5,9efea996b23840b691ddb80e823f3d8d,7e6b4f58908040bd871279a0701b2b62, - 889916c8a9b749febb56c569fab4a2b2,1eacbe03363c4b2980a59999188fc116] + 889916c8a9b749febb56c569fab4a2b2,1eacbe03363c4b2980a59999188fc116,d725b8f57a2b45d79183ca12dc8a3261, + 8c4c55ba8314442e8cb65e9e601451c9,6eb09c1c860e4f678b8d3652076edcb5,92c32cdfbd7145d7bc16cebc65ad48d5, + 16966b4881b04b1395f630809269635a] #录制楼 - ad83b94f17e24814abc84e2c576265ec: [2014a1d8fead4b76a5cb836ecf1c4db6,4b56821684224b8ea0467acae2fa4f6f,7840b20c767b47b68f1cfd5050be0333] + ad83b94f17e24814abc84e2c576265ec: [2014a1d8fead4b76a5cb836ecf1c4db6,4b56821684224b8ea0467acae2fa4f6f,7840b20c767b47b68f1cfd5050be0333, + dd46d272d7bc456d905f6f43d7c33595,79a99a18b2214c0980b69bda08e66f0a,4eed33089b4541b7ba715dceff10fafe] #二期主楼西门 bc4fdb9593b448d5b6f001bded208188: [a02e957b3e8d446fb41c1adb729524fe,8f659690e27244bdba65dd2d0fa313ba,03bfd8c696fa46018f10b17faa7c5e41, 2e22b7c9206c4184a756c7c091422a8d,57c2a7b7c19d48c9b04ac5f2e1c4b3ed,9b8450815d47401482dd7d4b075e4229, - dd6dd56306c746fabdd637a3489cef00] + dd6dd56306c746fabdd637a3489cef00,9b51e18cb09d4f19bb108bdbc5e0ab11,6fa3615892c142b58851a31b161d3b18, + a9689131cfcc44dba4bd299016b6f459,bbb12547f1d1453c8be02d6e8c413338,57c2a7b7c19d48c9b04ac5f2e1c4b3ed, + d69c2a94fb0a49ca86b0d9faa920068a,6b660fcc97e34c7c82c1ef517a88bb52] #二期主楼东门 - 80560cd4292d468aa30809518f047e41: [d0a261d6a8bd4af09302970e392dd771,734530c21fb84bdbabc2ad50d6272ba4,bd86703f5ffe4f4d8ce437416d32fe8b] \ No newline at end of file + 80560cd4292d468aa30809518f047e41: [d0a261d6a8bd4af09302970e392dd771,734530c21fb84bdbabc2ad50d6272ba4,bd86703f5ffe4f4d8ce437416d32fe8b, + b5b3c0482f3c4415b63ae9b0572f66f9,e49a526cd8d246f9ba9fe3120594585d,3b02701f81d94cc282a695723f8c3f9f] \ No newline at end of file