diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 9c9f0ba..48aafa5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -70,7 +70,9 @@ private RedisUtil redisUtil; @Override - public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap) { + public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, + HashMap jsonMap, HashMap resultMap, + HashMap inOutMap) { List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); @@ -144,20 +146,26 @@ log.error("请求海康,查询海康门禁点事件v2,结果list为null,该楼栋为:{}", key); return; } - Integer num = 0; + Integer totalNum = 0; + Integer enterNum = 0; + Integer outNum = 0; Iterator iterator = list.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); //进门 if (1 == inAndOutType) { - ++num; + ++totalNum; + ++enterNum; } else { - --num; + --totalNum; + ++outNum; } } // String dictName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, String.valueOf(key)); - resultMap.put(String.valueOf(key), num); + resultMap.put(String.valueOf(key), totalNum); + inOutMap.put(key+"进入人数", enterNum); + inOutMap.put(key+"离开人数", outNum); }); return resultMap; } @@ -304,10 +312,33 @@ request.setEndTime(format); } List responseList = caseInfoMapper.selectListByTime(request.getStartTime(), request.getEndTime()); + if (!CollectionUtils.isEmpty(responseList)) { + responseList = responseList.stream().sorted(Comparator.comparingInt(CaseTypeStatisticResponse::getValue).reversed()).collect(Collectors.toList()); + } return ResponseData.success(responseList); } @Override + public Object cameraTypeStatistics() { + List resultList = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.ne("dev_type", 1);//非闸机 + List deviceList = deviceInfoMapper.selectList(wrapper); + Map> collect = deviceList.stream().collect(Collectors.groupingBy(DeviceInfo::getDevType)); + for (String devType : collect.keySet()) { + CameraTypeStatisticsResponse response = new CameraTypeStatisticsResponse(); + String devTypeName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_TYPE, devType); + List deviceInfos = collect.get(devType); + response.setName(devTypeName); + response.setAll(deviceInfos.size()); + long onlineQuantity = deviceInfos.stream().filter(d -> "1".equals(d.getStatus())).count(); + response.setOnline((int) onlineQuantity); + resultList.add(response); + } + return ResponseData.success(resultList); + } + + @Override public Object visitorApplyDetail() { List oldReasonGroup = applyMapper.selectByVisitReason(); List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 9c9f0ba..48aafa5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -70,7 +70,9 @@ private RedisUtil redisUtil; @Override - public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap) { + public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, + HashMap jsonMap, HashMap resultMap, + HashMap inOutMap) { List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); @@ -144,20 +146,26 @@ log.error("请求海康,查询海康门禁点事件v2,结果list为null,该楼栋为:{}", key); return; } - Integer num = 0; + Integer totalNum = 0; + Integer enterNum = 0; + Integer outNum = 0; Iterator iterator = list.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); //进门 if (1 == inAndOutType) { - ++num; + ++totalNum; + ++enterNum; } else { - --num; + --totalNum; + ++outNum; } } // String dictName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, String.valueOf(key)); - resultMap.put(String.valueOf(key), num); + resultMap.put(String.valueOf(key), totalNum); + inOutMap.put(key+"进入人数", enterNum); + inOutMap.put(key+"离开人数", outNum); }); return resultMap; } @@ -304,10 +312,33 @@ request.setEndTime(format); } List responseList = caseInfoMapper.selectListByTime(request.getStartTime(), request.getEndTime()); + if (!CollectionUtils.isEmpty(responseList)) { + responseList = responseList.stream().sorted(Comparator.comparingInt(CaseTypeStatisticResponse::getValue).reversed()).collect(Collectors.toList()); + } return ResponseData.success(responseList); } @Override + public Object cameraTypeStatistics() { + List resultList = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.ne("dev_type", 1);//非闸机 + List deviceList = deviceInfoMapper.selectList(wrapper); + Map> collect = deviceList.stream().collect(Collectors.groupingBy(DeviceInfo::getDevType)); + for (String devType : collect.keySet()) { + CameraTypeStatisticsResponse response = new CameraTypeStatisticsResponse(); + String devTypeName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_TYPE, devType); + List deviceInfos = collect.get(devType); + response.setName(devTypeName); + response.setAll(deviceInfos.size()); + long onlineQuantity = deviceInfos.stream().filter(d -> "1".equals(d.getStatus())).count(); + response.setOnline((int) onlineQuantity); + resultList.add(response); + } + return ResponseData.success(resultList); + } + + @Override public Object visitorApplyDetail() { List oldReasonGroup = applyMapper.selectByVisitReason(); List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); 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 c6c53ea..779aa80 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 @@ -20,7 +20,6 @@ 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; @@ -53,6 +52,9 @@ @Autowired private DeviceLinkageConfig deviceLinkageConfig; + //黑名单与闸机联动开关 + public static int controlSwitch = 0; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -73,7 +75,8 @@ } //发生黑名单事件,若匹配联动配置,常闭指定闸机 HashMap> configMap = deviceLinkageConfig.getConfigMap(); - if(!CollectionUtils.isEmpty(configMap.get("switch"))){ +// if(!CollectionUtils.isEmpty(configMap.get("switch"))){ + if(1 == controlSwitch){ List list = configMap.get(srcIndex); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); @@ -287,6 +290,22 @@ @Override public CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo) { //加入到安防事件 + JSONObject data = event.getJSONObject("data"); + if (Objects.nonNull(data)) { + //高空抛物照片获取 + JSONArray thrownDetection = data.getJSONArray("ObjectsThrownDetection"); + if(Objects.nonNull(thrownDetection.getJSONObject(0))){ + JSONObject jsonObject = thrownDetection.getJSONObject(0); + JSONObject image = jsonObject.getJSONObject("Image"); + String resourcesContent = image.getString("resourcesContent"); + if (StringUtils.isNotBlank(resourcesContent)) { + //海康API文档示例:"resourcesContent": "http://10.66.165.241:6120/pic?5de393218f4do-7el*91-680b70d5e157d89b5*1c1*=910==sp2*3=1t1*6610761616l6*3645=0o1*69-9=218b-0pi180o=03f55=33f" + caseInfo.setEventPicture(resourcesContent); + } else { + caseInfo.setEventPicture(""); + } + } + } String srcIndex = event.getString("srcIndex"); //海康资源唯一标识 String happenTimeISO = String.valueOf(event.get("happenTime")); DateTime parse = DateUtil.parse(happenTimeISO); @@ -351,6 +370,8 @@ Integer channelNum = data.getInteger("ExtAccessChannel"); //进出类型,文档为1进0出,实际为1进2出,和字典一样 Integer inoutType = data.getInteger("ExtEventInOut"); + //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 + String pictureURL = data.getString("ExtEventPictureURL"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -382,6 +403,7 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); + staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 9c9f0ba..48aafa5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -70,7 +70,9 @@ private RedisUtil redisUtil; @Override - public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap) { + public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, + HashMap jsonMap, HashMap resultMap, + HashMap inOutMap) { List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); @@ -144,20 +146,26 @@ log.error("请求海康,查询海康门禁点事件v2,结果list为null,该楼栋为:{}", key); return; } - Integer num = 0; + Integer totalNum = 0; + Integer enterNum = 0; + Integer outNum = 0; Iterator iterator = list.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); //进门 if (1 == inAndOutType) { - ++num; + ++totalNum; + ++enterNum; } else { - --num; + --totalNum; + ++outNum; } } // String dictName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, String.valueOf(key)); - resultMap.put(String.valueOf(key), num); + resultMap.put(String.valueOf(key), totalNum); + inOutMap.put(key+"进入人数", enterNum); + inOutMap.put(key+"离开人数", outNum); }); return resultMap; } @@ -304,10 +312,33 @@ request.setEndTime(format); } List responseList = caseInfoMapper.selectListByTime(request.getStartTime(), request.getEndTime()); + if (!CollectionUtils.isEmpty(responseList)) { + responseList = responseList.stream().sorted(Comparator.comparingInt(CaseTypeStatisticResponse::getValue).reversed()).collect(Collectors.toList()); + } return ResponseData.success(responseList); } @Override + public Object cameraTypeStatistics() { + List resultList = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.ne("dev_type", 1);//非闸机 + List deviceList = deviceInfoMapper.selectList(wrapper); + Map> collect = deviceList.stream().collect(Collectors.groupingBy(DeviceInfo::getDevType)); + for (String devType : collect.keySet()) { + CameraTypeStatisticsResponse response = new CameraTypeStatisticsResponse(); + String devTypeName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_TYPE, devType); + List deviceInfos = collect.get(devType); + response.setName(devTypeName); + response.setAll(deviceInfos.size()); + long onlineQuantity = deviceInfos.stream().filter(d -> "1".equals(d.getStatus())).count(); + response.setOnline((int) onlineQuantity); + resultList.add(response); + } + return ResponseData.success(resultList); + } + + @Override public Object visitorApplyDetail() { List oldReasonGroup = applyMapper.selectByVisitReason(); List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); 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 c6c53ea..779aa80 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 @@ -20,7 +20,6 @@ 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; @@ -53,6 +52,9 @@ @Autowired private DeviceLinkageConfig deviceLinkageConfig; + //黑名单与闸机联动开关 + public static int controlSwitch = 0; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -73,7 +75,8 @@ } //发生黑名单事件,若匹配联动配置,常闭指定闸机 HashMap> configMap = deviceLinkageConfig.getConfigMap(); - if(!CollectionUtils.isEmpty(configMap.get("switch"))){ +// if(!CollectionUtils.isEmpty(configMap.get("switch"))){ + if(1 == controlSwitch){ List list = configMap.get(srcIndex); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); @@ -287,6 +290,22 @@ @Override public CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo) { //加入到安防事件 + JSONObject data = event.getJSONObject("data"); + if (Objects.nonNull(data)) { + //高空抛物照片获取 + JSONArray thrownDetection = data.getJSONArray("ObjectsThrownDetection"); + if(Objects.nonNull(thrownDetection.getJSONObject(0))){ + JSONObject jsonObject = thrownDetection.getJSONObject(0); + JSONObject image = jsonObject.getJSONObject("Image"); + String resourcesContent = image.getString("resourcesContent"); + if (StringUtils.isNotBlank(resourcesContent)) { + //海康API文档示例:"resourcesContent": "http://10.66.165.241:6120/pic?5de393218f4do-7el*91-680b70d5e157d89b5*1c1*=910==sp2*3=1t1*6610761616l6*3645=0o1*69-9=218b-0pi180o=03f55=33f" + caseInfo.setEventPicture(resourcesContent); + } else { + caseInfo.setEventPicture(""); + } + } + } String srcIndex = event.getString("srcIndex"); //海康资源唯一标识 String happenTimeISO = String.valueOf(event.get("happenTime")); DateTime parse = DateUtil.parse(happenTimeISO); @@ -351,6 +370,8 @@ Integer channelNum = data.getInteger("ExtAccessChannel"); //进出类型,文档为1进0出,实际为1进2出,和字典一样 Integer inoutType = data.getInteger("ExtEventInOut"); + //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 + String pictureURL = data.getString("ExtEventPictureURL"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -382,6 +403,7 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); + staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 2402b67..7f67ae5 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 @@ -614,9 +614,9 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0) { hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); - }else { + } else { hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); } }); @@ -1255,14 +1255,12 @@ Map resultFourMap = new HashMap<>(); //空数据处理 List devicePosition = dictService.findInDictByCode(SecurityEventDict.DEVICE_POSITION); - if (CollectionUtils.isEmpty(collect2)) { - for (Dict dict : devicePosition) { - resultMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); - } + for (Dict dict : devicePosition) { + resultMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); } //楼栋根据事件评分 Map> collect = collect2.stream().collect(Collectors.groupingBy(SecurityScoreDTO::getPosition)); @@ -1275,34 +1273,34 @@ //各楼栋设备维修次数(发生一次维修减5分) //当天在设备维修期间的设备个数及所在楼栋 List todayDTOList = repairLogMapper.selectTodayList(); - if(!CollectionUtils.isEmpty(todayDTOList)){ + if (!CollectionUtils.isEmpty(todayDTOList)) { for (RepairTodayDTO today : todayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋消防设备有效期(超有效期减5分) //当天在设备维修期间的设备个数及所在楼栋 List repairTodayDTOList = fireEquipInfoMapper.selectNearExpireList(); - if(!CollectionUtils.isEmpty(repairTodayDTOList)){ + if (!CollectionUtils.isEmpty(repairTodayDTOList)) { for (RepairTodayDTO today : repairTodayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减2分) List list = visitInfoMapper.selectListForToDay(); //未在申请时间段内离开减分(包括无离开时间和有离开时间两种情况)、未在申请区域内离开减分 - if(!CollectionUtils.isEmpty(list)){ + if (!CollectionUtils.isEmpty(list)) { for (MultiScoreVisitorDTO visitorDTO : list) { //无离开时间 if (StringUtils.isEmpty(visitorDTO.getOutTime()) && StringUtils.isNotEmpty(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); resultFourMap.put(dictValue, bigDecimal); - } else if(StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())){ + } else if (StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())) { DateTime applyOutDateTime = DateUtil.parseDateTime(visitorDTO.getApplyOutTime()); DateTime outDateTime = DateUtil.parseDateTime(visitorDTO.getOutTime()); //未在申请时间段离开(在申请离开时间后离开) @@ -1373,14 +1371,14 @@ //列表结合,顺序:员工、黑名单、访客 List resultList = new ArrayList<>(); - if(!CollectionUtils.isEmpty(staffList)){ + if (!CollectionUtils.isEmpty(staffList)) { staffList.addAll(blackList); // staffList.addAll(visitList); resultList = staffList; - }else if(!CollectionUtils.isEmpty(blackList)){ + } else if (!CollectionUtils.isEmpty(blackList)) { // blackList.addAll(visitList); resultList = blackList; - }else { + } else { // resultList = visitList; } if (!CollectionUtils.isEmpty(resultList)) { @@ -1452,9 +1450,9 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0) { assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); - }else { + } else { assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); } }); @@ -1506,17 +1504,17 @@ } //获取照片 JSONObject data = (JSONObject) resultJson.get("data"); - if(Objects.isNull(data)){ + if (Objects.isNull(data)) { return; } JSONArray dataArray = (JSONArray) data.get("list"); - if(0 == dataArray.size()){ + if (0 == dataArray.size()) { return; } log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); - if(0 == personPhoto.size()){ + if (0 == personPhoto.size()) { return; } //海康组织名 @@ -1532,9 +1530,9 @@ String reBody = JSONObject.toJSONString(picRequest); //重定向地址获取 String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); - if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + if (StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")) { staffInfo.setPersonPicture("https://192.168.10.2:443" + pictureFromHik); - }else{ + } else { staffInfo.setPersonPicture(pictureFromHik); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 9c9f0ba..48aafa5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -70,7 +70,9 @@ private RedisUtil redisUtil; @Override - public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap) { + public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, + HashMap jsonMap, HashMap resultMap, + HashMap inOutMap) { List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); @@ -144,20 +146,26 @@ log.error("请求海康,查询海康门禁点事件v2,结果list为null,该楼栋为:{}", key); return; } - Integer num = 0; + Integer totalNum = 0; + Integer enterNum = 0; + Integer outNum = 0; Iterator iterator = list.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); //进门 if (1 == inAndOutType) { - ++num; + ++totalNum; + ++enterNum; } else { - --num; + --totalNum; + ++outNum; } } // String dictName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, String.valueOf(key)); - resultMap.put(String.valueOf(key), num); + resultMap.put(String.valueOf(key), totalNum); + inOutMap.put(key+"进入人数", enterNum); + inOutMap.put(key+"离开人数", outNum); }); return resultMap; } @@ -304,10 +312,33 @@ request.setEndTime(format); } List responseList = caseInfoMapper.selectListByTime(request.getStartTime(), request.getEndTime()); + if (!CollectionUtils.isEmpty(responseList)) { + responseList = responseList.stream().sorted(Comparator.comparingInt(CaseTypeStatisticResponse::getValue).reversed()).collect(Collectors.toList()); + } return ResponseData.success(responseList); } @Override + public Object cameraTypeStatistics() { + List resultList = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.ne("dev_type", 1);//非闸机 + List deviceList = deviceInfoMapper.selectList(wrapper); + Map> collect = deviceList.stream().collect(Collectors.groupingBy(DeviceInfo::getDevType)); + for (String devType : collect.keySet()) { + CameraTypeStatisticsResponse response = new CameraTypeStatisticsResponse(); + String devTypeName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_TYPE, devType); + List deviceInfos = collect.get(devType); + response.setName(devTypeName); + response.setAll(deviceInfos.size()); + long onlineQuantity = deviceInfos.stream().filter(d -> "1".equals(d.getStatus())).count(); + response.setOnline((int) onlineQuantity); + resultList.add(response); + } + return ResponseData.success(resultList); + } + + @Override public Object visitorApplyDetail() { List oldReasonGroup = applyMapper.selectByVisitReason(); List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); 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 c6c53ea..779aa80 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 @@ -20,7 +20,6 @@ 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; @@ -53,6 +52,9 @@ @Autowired private DeviceLinkageConfig deviceLinkageConfig; + //黑名单与闸机联动开关 + public static int controlSwitch = 0; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -73,7 +75,8 @@ } //发生黑名单事件,若匹配联动配置,常闭指定闸机 HashMap> configMap = deviceLinkageConfig.getConfigMap(); - if(!CollectionUtils.isEmpty(configMap.get("switch"))){ +// if(!CollectionUtils.isEmpty(configMap.get("switch"))){ + if(1 == controlSwitch){ List list = configMap.get(srcIndex); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); @@ -287,6 +290,22 @@ @Override public CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo) { //加入到安防事件 + JSONObject data = event.getJSONObject("data"); + if (Objects.nonNull(data)) { + //高空抛物照片获取 + JSONArray thrownDetection = data.getJSONArray("ObjectsThrownDetection"); + if(Objects.nonNull(thrownDetection.getJSONObject(0))){ + JSONObject jsonObject = thrownDetection.getJSONObject(0); + JSONObject image = jsonObject.getJSONObject("Image"); + String resourcesContent = image.getString("resourcesContent"); + if (StringUtils.isNotBlank(resourcesContent)) { + //海康API文档示例:"resourcesContent": "http://10.66.165.241:6120/pic?5de393218f4do-7el*91-680b70d5e157d89b5*1c1*=910==sp2*3=1t1*6610761616l6*3645=0o1*69-9=218b-0pi180o=03f55=33f" + caseInfo.setEventPicture(resourcesContent); + } else { + caseInfo.setEventPicture(""); + } + } + } String srcIndex = event.getString("srcIndex"); //海康资源唯一标识 String happenTimeISO = String.valueOf(event.get("happenTime")); DateTime parse = DateUtil.parse(happenTimeISO); @@ -351,6 +370,8 @@ Integer channelNum = data.getInteger("ExtAccessChannel"); //进出类型,文档为1进0出,实际为1进2出,和字典一样 Integer inoutType = data.getInteger("ExtEventInOut"); + //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 + String pictureURL = data.getString("ExtEventPictureURL"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -382,6 +403,7 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); + staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 2402b67..7f67ae5 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 @@ -614,9 +614,9 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0) { hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); - }else { + } else { hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); } }); @@ -1255,14 +1255,12 @@ Map resultFourMap = new HashMap<>(); //空数据处理 List devicePosition = dictService.findInDictByCode(SecurityEventDict.DEVICE_POSITION); - if (CollectionUtils.isEmpty(collect2)) { - for (Dict dict : devicePosition) { - resultMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); - } + for (Dict dict : devicePosition) { + resultMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); } //楼栋根据事件评分 Map> collect = collect2.stream().collect(Collectors.groupingBy(SecurityScoreDTO::getPosition)); @@ -1275,34 +1273,34 @@ //各楼栋设备维修次数(发生一次维修减5分) //当天在设备维修期间的设备个数及所在楼栋 List todayDTOList = repairLogMapper.selectTodayList(); - if(!CollectionUtils.isEmpty(todayDTOList)){ + if (!CollectionUtils.isEmpty(todayDTOList)) { for (RepairTodayDTO today : todayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋消防设备有效期(超有效期减5分) //当天在设备维修期间的设备个数及所在楼栋 List repairTodayDTOList = fireEquipInfoMapper.selectNearExpireList(); - if(!CollectionUtils.isEmpty(repairTodayDTOList)){ + if (!CollectionUtils.isEmpty(repairTodayDTOList)) { for (RepairTodayDTO today : repairTodayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减2分) List list = visitInfoMapper.selectListForToDay(); //未在申请时间段内离开减分(包括无离开时间和有离开时间两种情况)、未在申请区域内离开减分 - if(!CollectionUtils.isEmpty(list)){ + if (!CollectionUtils.isEmpty(list)) { for (MultiScoreVisitorDTO visitorDTO : list) { //无离开时间 if (StringUtils.isEmpty(visitorDTO.getOutTime()) && StringUtils.isNotEmpty(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); resultFourMap.put(dictValue, bigDecimal); - } else if(StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())){ + } else if (StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())) { DateTime applyOutDateTime = DateUtil.parseDateTime(visitorDTO.getApplyOutTime()); DateTime outDateTime = DateUtil.parseDateTime(visitorDTO.getOutTime()); //未在申请时间段离开(在申请离开时间后离开) @@ -1373,14 +1371,14 @@ //列表结合,顺序:员工、黑名单、访客 List resultList = new ArrayList<>(); - if(!CollectionUtils.isEmpty(staffList)){ + if (!CollectionUtils.isEmpty(staffList)) { staffList.addAll(blackList); // staffList.addAll(visitList); resultList = staffList; - }else if(!CollectionUtils.isEmpty(blackList)){ + } else if (!CollectionUtils.isEmpty(blackList)) { // blackList.addAll(visitList); resultList = blackList; - }else { + } else { // resultList = visitList; } if (!CollectionUtils.isEmpty(resultList)) { @@ -1452,9 +1450,9 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0) { assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); - }else { + } else { assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); } }); @@ -1506,17 +1504,17 @@ } //获取照片 JSONObject data = (JSONObject) resultJson.get("data"); - if(Objects.isNull(data)){ + if (Objects.isNull(data)) { return; } JSONArray dataArray = (JSONArray) data.get("list"); - if(0 == dataArray.size()){ + if (0 == dataArray.size()) { return; } log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); - if(0 == personPhoto.size()){ + if (0 == personPhoto.size()) { return; } //海康组织名 @@ -1532,9 +1530,9 @@ String reBody = JSONObject.toJSONString(picRequest); //重定向地址获取 String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); - if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + if (StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")) { staffInfo.setPersonPicture("https://192.168.10.2:443" + pictureFromHik); - }else{ + } else { staffInfo.setPersonPicture(pictureFromHik); } } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 896583c..c9c93d1 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -57,6 +57,7 @@ repair: 0.5 logging: + #关闭日志 level.root: off level.root: info level.com.casic: debug level.org.springframework.web: info diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 9c9f0ba..48aafa5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -70,7 +70,9 @@ private RedisUtil redisUtil; @Override - public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap) { + public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, + HashMap jsonMap, HashMap resultMap, + HashMap inOutMap) { List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); @@ -144,20 +146,26 @@ log.error("请求海康,查询海康门禁点事件v2,结果list为null,该楼栋为:{}", key); return; } - Integer num = 0; + Integer totalNum = 0; + Integer enterNum = 0; + Integer outNum = 0; Iterator iterator = list.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); //进门 if (1 == inAndOutType) { - ++num; + ++totalNum; + ++enterNum; } else { - --num; + --totalNum; + ++outNum; } } // String dictName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, String.valueOf(key)); - resultMap.put(String.valueOf(key), num); + resultMap.put(String.valueOf(key), totalNum); + inOutMap.put(key+"进入人数", enterNum); + inOutMap.put(key+"离开人数", outNum); }); return resultMap; } @@ -304,10 +312,33 @@ request.setEndTime(format); } List responseList = caseInfoMapper.selectListByTime(request.getStartTime(), request.getEndTime()); + if (!CollectionUtils.isEmpty(responseList)) { + responseList = responseList.stream().sorted(Comparator.comparingInt(CaseTypeStatisticResponse::getValue).reversed()).collect(Collectors.toList()); + } return ResponseData.success(responseList); } @Override + public Object cameraTypeStatistics() { + List resultList = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.ne("dev_type", 1);//非闸机 + List deviceList = deviceInfoMapper.selectList(wrapper); + Map> collect = deviceList.stream().collect(Collectors.groupingBy(DeviceInfo::getDevType)); + for (String devType : collect.keySet()) { + CameraTypeStatisticsResponse response = new CameraTypeStatisticsResponse(); + String devTypeName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_TYPE, devType); + List deviceInfos = collect.get(devType); + response.setName(devTypeName); + response.setAll(deviceInfos.size()); + long onlineQuantity = deviceInfos.stream().filter(d -> "1".equals(d.getStatus())).count(); + response.setOnline((int) onlineQuantity); + resultList.add(response); + } + return ResponseData.success(resultList); + } + + @Override public Object visitorApplyDetail() { List oldReasonGroup = applyMapper.selectByVisitReason(); List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); 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 c6c53ea..779aa80 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 @@ -20,7 +20,6 @@ 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; @@ -53,6 +52,9 @@ @Autowired private DeviceLinkageConfig deviceLinkageConfig; + //黑名单与闸机联动开关 + public static int controlSwitch = 0; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -73,7 +75,8 @@ } //发生黑名单事件,若匹配联动配置,常闭指定闸机 HashMap> configMap = deviceLinkageConfig.getConfigMap(); - if(!CollectionUtils.isEmpty(configMap.get("switch"))){ +// if(!CollectionUtils.isEmpty(configMap.get("switch"))){ + if(1 == controlSwitch){ List list = configMap.get(srcIndex); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); @@ -287,6 +290,22 @@ @Override public CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo) { //加入到安防事件 + JSONObject data = event.getJSONObject("data"); + if (Objects.nonNull(data)) { + //高空抛物照片获取 + JSONArray thrownDetection = data.getJSONArray("ObjectsThrownDetection"); + if(Objects.nonNull(thrownDetection.getJSONObject(0))){ + JSONObject jsonObject = thrownDetection.getJSONObject(0); + JSONObject image = jsonObject.getJSONObject("Image"); + String resourcesContent = image.getString("resourcesContent"); + if (StringUtils.isNotBlank(resourcesContent)) { + //海康API文档示例:"resourcesContent": "http://10.66.165.241:6120/pic?5de393218f4do-7el*91-680b70d5e157d89b5*1c1*=910==sp2*3=1t1*6610761616l6*3645=0o1*69-9=218b-0pi180o=03f55=33f" + caseInfo.setEventPicture(resourcesContent); + } else { + caseInfo.setEventPicture(""); + } + } + } String srcIndex = event.getString("srcIndex"); //海康资源唯一标识 String happenTimeISO = String.valueOf(event.get("happenTime")); DateTime parse = DateUtil.parse(happenTimeISO); @@ -351,6 +370,8 @@ Integer channelNum = data.getInteger("ExtAccessChannel"); //进出类型,文档为1进0出,实际为1进2出,和字典一样 Integer inoutType = data.getInteger("ExtEventInOut"); + //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 + String pictureURL = data.getString("ExtEventPictureURL"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -382,6 +403,7 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); + staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 2402b67..7f67ae5 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 @@ -614,9 +614,9 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0) { hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); - }else { + } else { hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); } }); @@ -1255,14 +1255,12 @@ Map resultFourMap = new HashMap<>(); //空数据处理 List devicePosition = dictService.findInDictByCode(SecurityEventDict.DEVICE_POSITION); - if (CollectionUtils.isEmpty(collect2)) { - for (Dict dict : devicePosition) { - resultMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); - } + for (Dict dict : devicePosition) { + resultMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); } //楼栋根据事件评分 Map> collect = collect2.stream().collect(Collectors.groupingBy(SecurityScoreDTO::getPosition)); @@ -1275,34 +1273,34 @@ //各楼栋设备维修次数(发生一次维修减5分) //当天在设备维修期间的设备个数及所在楼栋 List todayDTOList = repairLogMapper.selectTodayList(); - if(!CollectionUtils.isEmpty(todayDTOList)){ + if (!CollectionUtils.isEmpty(todayDTOList)) { for (RepairTodayDTO today : todayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋消防设备有效期(超有效期减5分) //当天在设备维修期间的设备个数及所在楼栋 List repairTodayDTOList = fireEquipInfoMapper.selectNearExpireList(); - if(!CollectionUtils.isEmpty(repairTodayDTOList)){ + if (!CollectionUtils.isEmpty(repairTodayDTOList)) { for (RepairTodayDTO today : repairTodayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减2分) List list = visitInfoMapper.selectListForToDay(); //未在申请时间段内离开减分(包括无离开时间和有离开时间两种情况)、未在申请区域内离开减分 - if(!CollectionUtils.isEmpty(list)){ + if (!CollectionUtils.isEmpty(list)) { for (MultiScoreVisitorDTO visitorDTO : list) { //无离开时间 if (StringUtils.isEmpty(visitorDTO.getOutTime()) && StringUtils.isNotEmpty(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); resultFourMap.put(dictValue, bigDecimal); - } else if(StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())){ + } else if (StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())) { DateTime applyOutDateTime = DateUtil.parseDateTime(visitorDTO.getApplyOutTime()); DateTime outDateTime = DateUtil.parseDateTime(visitorDTO.getOutTime()); //未在申请时间段离开(在申请离开时间后离开) @@ -1373,14 +1371,14 @@ //列表结合,顺序:员工、黑名单、访客 List resultList = new ArrayList<>(); - if(!CollectionUtils.isEmpty(staffList)){ + if (!CollectionUtils.isEmpty(staffList)) { staffList.addAll(blackList); // staffList.addAll(visitList); resultList = staffList; - }else if(!CollectionUtils.isEmpty(blackList)){ + } else if (!CollectionUtils.isEmpty(blackList)) { // blackList.addAll(visitList); resultList = blackList; - }else { + } else { // resultList = visitList; } if (!CollectionUtils.isEmpty(resultList)) { @@ -1452,9 +1450,9 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0) { assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); - }else { + } else { assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); } }); @@ -1506,17 +1504,17 @@ } //获取照片 JSONObject data = (JSONObject) resultJson.get("data"); - if(Objects.isNull(data)){ + if (Objects.isNull(data)) { return; } JSONArray dataArray = (JSONArray) data.get("list"); - if(0 == dataArray.size()){ + if (0 == dataArray.size()) { return; } log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); - if(0 == personPhoto.size()){ + if (0 == personPhoto.size()) { return; } //海康组织名 @@ -1532,9 +1530,9 @@ String reBody = JSONObject.toJSONString(picRequest); //重定向地址获取 String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); - if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + if (StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")) { staffInfo.setPersonPicture("https://192.168.10.2:443" + pictureFromHik); - }else{ + } else { staffInfo.setPersonPicture(pictureFromHik); } } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 896583c..c9c93d1 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -57,6 +57,7 @@ repair: 0.5 logging: + #关闭日志 level.root: off level.root: info level.com.casic: debug level.org.springframework.web: info diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 788346f..375e039 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -22,7 +22,7 @@ casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved,/deviceInfo/cameraList + no-login-urls: /**/**,/websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved,/deviceInfo/cameraList #flowable数据源和多数据源配置 db: init: diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java index f547203..4188477 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @Description: 员工进出记录管理Controller + * @Description: 员工进出记录/人员进出记录管理Controller * @Author: wangpeng * @Date: 2022/12/08 17:10 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index e81e835..83cf72a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.dto.statistics.*; import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.impl.HikServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ /** * 1、各楼栋人数计算 + * + * 20240821需求(需求5、6):今日一期主楼、录制楼总/进入/离开人数,今日二期主楼总/进入/离开人数 */ @GetMapping("/build/peopleNumber") @ResponseBody @@ -45,14 +48,19 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); //空数据处理,按照配置文件组装返回结构 if (resultMap.size() < configMap.size()) { for (Long key : configMap.keySet()) { resultMap.putIfAbsent(String.valueOf(key), 0); + resultInOutMap.putIfAbsent(key+"进入人数", 0); + resultInOutMap.putIfAbsent(key+"离开人数", 0); } } + //加入进出人数map + resultMap.putAll(resultInOutMap); return ResponseData.success(resultMap); } @@ -105,7 +113,7 @@ /** * 20240821需求(需求15):安保人员在岗列表 - * @return + * 和考勤记录有关,考勤就是摄像头今天识别到了一次就算在岗 */ @GetMapping("/securityStaff/onList") @ResponseBody @@ -144,6 +152,26 @@ } /** + * 20240821需求(需求2):摄像机类型分析,展示不同种类的摄像机的在线数量、总数量 + */ + @GetMapping("/camera/typeStatistics") + @ResponseBody + public Object cameraTypeStatistics() { + return cockpitService.cameraTypeStatistics(); + } + + /** + * 20240821需求(需求4②):开启/关闭黑名单与闸机联动 + */ + @GetMapping("/gateLinkage/switch") + @ResponseBody + public Object gateLinkageSwitch(int controlSwitch) { + HikServiceImpl.controlSwitch = controlSwitch; + System.out.println(HikServiceImpl.controlSwitch); + return ResponseData.success(); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 23a0a79..643da3d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -89,10 +89,9 @@ \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml index 92c8753..0e10774 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -9,7 +9,8 @@ parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"> SELECT bsil.channel_num, bsil.way_name, bsil.inout_type, bsil.pass_way, bsil.description, bsil.pass_time, bsil.create_time, bsil.update_time, bsi.card_num as cardNum, bsi.staff_code as staffCode, bsi.job_no as jobNo, bsi.staff_name AS staffName, bsi.org_index_code AS orgIndexCode, bdi.dev_name AS doorName, - bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation + bdi.dev_code AS doorCode, bdi.position AS position, bdi.position AS doorArea, bdi.area AS area, bdi.detail_location AS detailLocation, + bsil.picture FROM bus_staff_inout_log bsil LEFT JOIN bus_staff_info bsi ON bsil.card_num = bsi.card_num LEFT JOIN bus_device_info bdi ON bsil.src_index = bdi.index_code diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java new file mode 100644 index 0000000..d71712b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CameraTypeStatisticsResponse.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2024/8/28 10:45 + */ +@Data +public class CameraTypeStatisticsResponse { + //摄像头类型名字 + private String name; + //在线数量 + private Integer online; + //总数量 + private Integer all; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java index 35df0e0..9a2fdd4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/CaseTypeStatisticResponse.java @@ -7,5 +7,5 @@ //海康事件类型名字 private String name; //事件数量 - private String value; + private Integer value; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 8de64ef..b8e29f1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -62,7 +62,8 @@ HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); - cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); + HashMap resultInOutMap = new HashMap<>(); + cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap, resultInOutMap); if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 47c1eb1..756ba9d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -70,4 +70,6 @@ private List ids; @TableField(exist = false) private List faceIds; + @TableField(exist = false) + private String statusName; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java index 14c22d6..6fd45ff 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -100,7 +100,6 @@ private String passTime; //照片 - @TableField(exist = false) private String picture; private String createTime; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java index 68afdad..35a137a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/CockpitService.java @@ -14,7 +14,7 @@ * @Date: 2022/8/9 13:49 */ public interface CockpitService { - HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap); + HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap, HashMap resultInOutMap); Object buildingNumberPerHour(); @@ -34,6 +34,8 @@ Object caseTypeStatistics(CaseTypeStatisticDTO request); + Object cameraTypeStatistics(); + Object visitorApplyDetail(); Object keyAreaEventStatistic(MonthAndLevelGroupDTO monthAndLevelGroupDTO); @@ -57,4 +59,5 @@ Object eventNumber(); Object offlineRate(); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 9c9f0ba..48aafa5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -70,7 +70,9 @@ private RedisUtil redisUtil; @Override - public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, HashMap jsonMap, HashMap resultMap) { + public HashMap dataHandle(DoorEventsRequest doorEventsRequest, HashMap> configMap, + HashMap jsonMap, HashMap resultMap, + HashMap inOutMap) { List eventTypes = new ArrayList<>(); eventTypes.add(SecurityEventType.CARD_COMPARE_PASS); eventTypes.add(SecurityEventType.FACE_COMPARE_PASS); @@ -144,20 +146,26 @@ log.error("请求海康,查询海康门禁点事件v2,结果list为null,该楼栋为:{}", key); return; } - Integer num = 0; + Integer totalNum = 0; + Integer enterNum = 0; + Integer outNum = 0; Iterator iterator = list.stream().iterator(); while (iterator.hasNext()) { JSONObject next = (JSONObject) iterator.next(); Integer inAndOutType = next.getInteger("inAndOutType"); //进门 if (1 == inAndOutType) { - ++num; + ++totalNum; + ++enterNum; } else { - --num; + --totalNum; + ++outNum; } } // String dictName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, String.valueOf(key)); - resultMap.put(String.valueOf(key), num); + resultMap.put(String.valueOf(key), totalNum); + inOutMap.put(key+"进入人数", enterNum); + inOutMap.put(key+"离开人数", outNum); }); return resultMap; } @@ -304,10 +312,33 @@ request.setEndTime(format); } List responseList = caseInfoMapper.selectListByTime(request.getStartTime(), request.getEndTime()); + if (!CollectionUtils.isEmpty(responseList)) { + responseList = responseList.stream().sorted(Comparator.comparingInt(CaseTypeStatisticResponse::getValue).reversed()).collect(Collectors.toList()); + } return ResponseData.success(responseList); } @Override + public Object cameraTypeStatistics() { + List resultList = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.ne("dev_type", 1);//非闸机 + List deviceList = deviceInfoMapper.selectList(wrapper); + Map> collect = deviceList.stream().collect(Collectors.groupingBy(DeviceInfo::getDevType)); + for (String devType : collect.keySet()) { + CameraTypeStatisticsResponse response = new CameraTypeStatisticsResponse(); + String devTypeName = dictService.getDictNameByCode(SecurityEventDict.DEVICE_TYPE, devType); + List deviceInfos = collect.get(devType); + response.setName(devTypeName); + response.setAll(deviceInfos.size()); + long onlineQuantity = deviceInfos.stream().filter(d -> "1".equals(d.getStatus())).count(); + response.setOnline((int) onlineQuantity); + resultList.add(response); + } + return ResponseData.success(resultList); + } + + @Override public Object visitorApplyDetail() { List oldReasonGroup = applyMapper.selectByVisitReason(); List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); 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 c6c53ea..779aa80 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 @@ -20,7 +20,6 @@ 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; @@ -53,6 +52,9 @@ @Autowired private DeviceLinkageConfig deviceLinkageConfig; + //黑名单与闸机联动开关 + public static int controlSwitch = 0; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -73,7 +75,8 @@ } //发生黑名单事件,若匹配联动配置,常闭指定闸机 HashMap> configMap = deviceLinkageConfig.getConfigMap(); - if(!CollectionUtils.isEmpty(configMap.get("switch"))){ +// if(!CollectionUtils.isEmpty(configMap.get("switch"))){ + if(1 == controlSwitch){ List list = configMap.get(srcIndex); //海康门禁点反控 DoorControlRequest doorControlRequest = new DoorControlRequest(); @@ -287,6 +290,22 @@ @Override public CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo) { //加入到安防事件 + JSONObject data = event.getJSONObject("data"); + if (Objects.nonNull(data)) { + //高空抛物照片获取 + JSONArray thrownDetection = data.getJSONArray("ObjectsThrownDetection"); + if(Objects.nonNull(thrownDetection.getJSONObject(0))){ + JSONObject jsonObject = thrownDetection.getJSONObject(0); + JSONObject image = jsonObject.getJSONObject("Image"); + String resourcesContent = image.getString("resourcesContent"); + if (StringUtils.isNotBlank(resourcesContent)) { + //海康API文档示例:"resourcesContent": "http://10.66.165.241:6120/pic?5de393218f4do-7el*91-680b70d5e157d89b5*1c1*=910==sp2*3=1t1*6610761616l6*3645=0o1*69-9=218b-0pi180o=03f55=33f" + caseInfo.setEventPicture(resourcesContent); + } else { + caseInfo.setEventPicture(""); + } + } + } String srcIndex = event.getString("srcIndex"); //海康资源唯一标识 String happenTimeISO = String.valueOf(event.get("happenTime")); DateTime parse = DateUtil.parse(happenTimeISO); @@ -351,6 +370,8 @@ Integer channelNum = data.getInteger("ExtAccessChannel"); //进出类型,文档为1进0出,实际为1进2出,和字典一样 Integer inoutType = data.getInteger("ExtEventInOut"); + //图片返回格式 /pic?did=2&bid=1498562&pid=1074076700&size=125828&ptime=1724902288 + String pictureURL = data.getString("ExtEventPictureURL"); String passWay = ""; String description = ""; //通过方式:卡、人脸、身份证 @@ -382,6 +403,7 @@ staffInoutLog.setPassWay(passWay); staffInoutLog.setDescription(description); staffInoutLog.setPassTime(happenTime); + staffInoutLog.setPicture("https://192.168.10.2" + pictureURL); if(inoutLogMapper.insert(staffInoutLog) <= 0){ log.error("新增人员进出记录异常"); return; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 2402b67..7f67ae5 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 @@ -614,9 +614,9 @@ preScore = new BigDecimal("100.0"); } BigDecimal nowScore = new BigDecimal(score.toString()); - if(preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preScore.subtract(nowScore).compareTo(BigDecimal.valueOf(0)) < 0) { hashMap.put(dayTime, BigDecimal.valueOf(0).doubleValue()); - }else { + } else { hashMap.put(dayTime, preScore.subtract(nowScore).doubleValue()); } }); @@ -1255,14 +1255,12 @@ Map resultFourMap = new HashMap<>(); //空数据处理 List devicePosition = dictService.findInDictByCode(SecurityEventDict.DEVICE_POSITION); - if (CollectionUtils.isEmpty(collect2)) { - for (Dict dict : devicePosition) { - resultMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); - resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); - } + for (Dict dict : devicePosition) { + resultMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultOneMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultTwoMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultThreeMap.put(dict.getName(), BigDecimal.valueOf(100)); + resultFourMap.put(dict.getName(), BigDecimal.valueOf(100)); } //楼栋根据事件评分 Map> collect = collect2.stream().collect(Collectors.groupingBy(SecurityScoreDTO::getPosition)); @@ -1275,34 +1273,34 @@ //各楼栋设备维修次数(发生一次维修减5分) //当天在设备维修期间的设备个数及所在楼栋 List todayDTOList = repairLogMapper.selectTodayList(); - if(!CollectionUtils.isEmpty(todayDTOList)){ + if (!CollectionUtils.isEmpty(todayDTOList)) { for (RepairTodayDTO today : todayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultTwoMap.put(dictValue, resultTwoMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋消防设备有效期(超有效期减5分) //当天在设备维修期间的设备个数及所在楼栋 List repairTodayDTOList = fireEquipInfoMapper.selectNearExpireList(); - if(!CollectionUtils.isEmpty(repairTodayDTOList)){ + if (!CollectionUtils.isEmpty(repairTodayDTOList)) { for (RepairTodayDTO today : repairTodayDTOList) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, today.getPosition()); - resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber()*5))); + resultThreeMap.put(dictValue, resultThreeMap.get(dictValue).subtract(BigDecimal.valueOf(today.getNumber() * 5))); } } //各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减2分) List list = visitInfoMapper.selectListForToDay(); //未在申请时间段内离开减分(包括无离开时间和有离开时间两种情况)、未在申请区域内离开减分 - if(!CollectionUtils.isEmpty(list)){ + if (!CollectionUtils.isEmpty(list)) { for (MultiScoreVisitorDTO visitorDTO : list) { //无离开时间 if (StringUtils.isEmpty(visitorDTO.getOutTime()) && StringUtils.isNotEmpty(visitorDTO.getVisitPosition())) { String dictValue = dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorDTO.getVisitPosition()); BigDecimal bigDecimal = resultFourMap.get(dictValue).subtract(BigDecimal.valueOf(cockpitConfig.getVisitorWeight().get("NoRecordPointDeduct"))); resultFourMap.put(dictValue, bigDecimal); - } else if(StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())){ + } else if (StringUtils.isNotEmpty(visitorDTO.getVisitPosition()) && StringUtils.isNotEmpty(visitorDTO.getOutTime())) { DateTime applyOutDateTime = DateUtil.parseDateTime(visitorDTO.getApplyOutTime()); DateTime outDateTime = DateUtil.parseDateTime(visitorDTO.getOutTime()); //未在申请时间段离开(在申请离开时间后离开) @@ -1373,14 +1371,14 @@ //列表结合,顺序:员工、黑名单、访客 List resultList = new ArrayList<>(); - if(!CollectionUtils.isEmpty(staffList)){ + if (!CollectionUtils.isEmpty(staffList)) { staffList.addAll(blackList); // staffList.addAll(visitList); resultList = staffList; - }else if(!CollectionUtils.isEmpty(blackList)){ + } else if (!CollectionUtils.isEmpty(blackList)) { // blackList.addAll(visitList); resultList = blackList; - }else { + } else { // resultList = visitList; } if (!CollectionUtils.isEmpty(resultList)) { @@ -1452,9 +1450,9 @@ preAssessScore = new BigDecimal("100.0"); } BigDecimal nowAssessScore = new BigDecimal(assessScore.toString()); - if(preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0){ + if (preAssessScore.subtract(nowAssessScore).compareTo(BigDecimal.valueOf(0)) < 0) { assessScoreMap.put(dayTime, BigDecimal.valueOf(0)); - }else { + } else { assessScoreMap.put(dayTime, preAssessScore.subtract(nowAssessScore)); } }); @@ -1506,17 +1504,17 @@ } //获取照片 JSONObject data = (JSONObject) resultJson.get("data"); - if(Objects.isNull(data)){ + if (Objects.isNull(data)) { return; } JSONArray dataArray = (JSONArray) data.get("list"); - if(0 == dataArray.size()){ + if (0 == dataArray.size()) { return; } log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); - if(0 == personPhoto.size()){ + if (0 == personPhoto.size()) { return; } //海康组织名 @@ -1532,9 +1530,9 @@ String reBody = JSONObject.toJSONString(picRequest); //重定向地址获取 String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); - if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + if (StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")) { staffInfo.setPersonPicture("https://192.168.10.2:443" + pictureFromHik); - }else{ + } else { staffInfo.setPersonPicture(pictureFromHik); } } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 896583c..c9c93d1 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -57,6 +57,7 @@ repair: 0.5 logging: + #关闭日志 level.root: off level.root: info level.com.casic: debug level.org.springframework.web: info diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 788346f..375e039 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -22,7 +22,7 @@ casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved,/deviceInfo/cameraList + no-login-urls: /**/**,/websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved,/deviceInfo/cameraList #flowable数据源和多数据源配置 db: init: diff --git a/casic-web/src/main/resources/logback-spring.xml b/casic-web/src/main/resources/logback-spring.xml index 60615cb..4042d9a 100644 --- a/casic-web/src/main/resources/logback-spring.xml +++ b/casic-web/src/main/resources/logback-spring.xml @@ -111,6 +111,7 @@ +