diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index 61472a5..376afb3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -95,4 +95,6 @@ List getCountForRank(); List selectListByToday4(); + + List selectListByTime(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index 61472a5..376afb3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -95,4 +95,6 @@ List getCountForRank(); List selectListByToday4(); + + List selectListByTime(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 13d0a12..835a814 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -40,6 +40,8 @@ int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + int updateFaceDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + List selectByTypeForCamera(); List selectDeviceStatusGroupByStatus(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index 61472a5..376afb3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -95,4 +95,6 @@ List getCountForRank(); List selectListByToday4(); + + List selectListByTime(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 13d0a12..835a814 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -40,6 +40,8 @@ int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + int updateFaceDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + List selectByTypeForCamera(); List selectDeviceStatusGroupByStatus(); 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 ff9e9a0..23a0a79 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 @@ -74,7 +74,7 @@ SELECT DATE_FORMAT(atte_date,'%Y-%m-%d %h') as date, count(DISTINCT(staff_code)) as quantity, staff_type as staffType FROM bus_attendance_info WHERE 1=1 - AND TO_DAYS(atte_date) = TO_DAYS(now()) + AND TO_DAYS(atte_date) = TO_DAYS(now()) GROUP BY staff_type, DATE_FORMAT(atte_date, '%Y-%m-%d %h') @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index 61472a5..376afb3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -95,4 +95,6 @@ List getCountForRank(); List selectListByToday4(); + + List selectListByTime(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 13d0a12..835a814 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -40,6 +40,8 @@ int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + int updateFaceDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + List selectByTypeForCamera(); List selectDeviceStatusGroupByStatus(); 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 ff9e9a0..23a0a79 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 @@ -74,7 +74,7 @@ SELECT DATE_FORMAT(atte_date,'%Y-%m-%d %h') as date, count(DISTINCT(staff_code)) as quantity, staff_type as staffType FROM bus_attendance_info WHERE 1=1 - AND TO_DAYS(atte_date) = TO_DAYS(now()) + AND TO_DAYS(atte_date) = TO_DAYS(now()) GROUP BY staff_type, DATE_FORMAT(atte_date, '%Y-%m-%d %h') @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index 61472a5..376afb3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -95,4 +95,6 @@ List getCountForRank(); List selectListByToday4(); + + List selectListByTime(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 13d0a12..835a814 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -40,6 +40,8 @@ int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + int updateFaceDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + List selectByTypeForCamera(); List selectDeviceStatusGroupByStatus(); 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 ff9e9a0..23a0a79 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 @@ -74,7 +74,7 @@ SELECT DATE_FORMAT(atte_date,'%Y-%m-%d %h') as date, count(DISTINCT(staff_code)) as quantity, staff_type as staffType FROM bus_attendance_info WHERE 1=1 - AND TO_DAYS(atte_date) = TO_DAYS(now()) + AND TO_DAYS(atte_date) = TO_DAYS(now()) GROUP BY staff_type, DATE_FORMAT(atte_date, '%Y-%m-%d %h') @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bfcf473..908bbb6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -13,12 +13,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: @@ -111,4 +109,62 @@ } return ResponseData.error("补全门禁点编号数据失败"); } + + /** + * 更新超脑中监控点对应的设备face_index_code字段,用于以图搜图 + * 该接口在超脑(IP:192.168.10.28)中配置增加设备后调用,否则以图搜图搜不到加入的设备识别的数据 + * 共600多条设备,入参分10次,每页60,调用10次即可 + */ + @GetMapping("/faceIndexCode/update") + @ResponseBody + @Transactional + public Object faceIndexCodeUpdate(@RequestBody Map map) { +// HashMap map = new HashMap<>(); +// map.put("pageNo", 1); +// map.put("pageSize", 1000); + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,查询监控点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询监控点列表v2失败"); + } +// List acsDeviceList = new ArrayList<>(); + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + List faceDeviceList = new ArrayList<>(); + List acsDeviceList = new ArrayList<>(); + while(iterator.hasNext()){ + JSONObject next = (JSONObject) iterator.next(); + String regionName = next.getString("regionName"); + + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ + String indexCode = next.getString("indexCode"); + AcsDeviceListDTO faceDeviceListDTO = new AcsDeviceListDTO(); + AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); + acsDeviceListDTO.setName(name); + faceDeviceListDTO.setName(name); + if (StringUtils.isNotBlank(regionName) && regionName.equals("人脸识别摄像机")) { + faceDeviceListDTO.setIndexCode(indexCode); + faceDeviceList.add(faceDeviceListDTO); + } + if (StringUtils.isNotBlank(regionName) && !regionName.equals("人脸识别摄像机")) { + acsDeviceListDTO.setIndexCode(indexCode); + acsDeviceList.add(acsDeviceListDTO); + } + } + } + //批量更新监控点编号和超脑监控点编号 + int i = deviceInfoService.updateFaceDeviceInfoBatch(faceDeviceList); + + //批量更新时,如果更新的记录数过多,可能会遇到更新不成功的问题。这通常是因为超出了MySQL的单个语句的大小限制或者是超时限制 + //通过入参分页手动控制,多调用几次,共600多条设备 + int j = deviceInfoService.updateDeviceInfoBatch(acsDeviceList); + if(i > 0 && j > 0){ + return ResponseData.success(); + } + return ResponseData.error("补全超脑监控点编号数据失败"); + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java index 0a2f6ad..c4357b5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorController.java @@ -25,7 +25,7 @@ */ @Slf4j @RestController -@RequestMapping("/visitInfo") + @RequestMapping("/visitInfo") public class VisitorController extends ExportController { @Autowired private VisitService visitService; 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 907624c..e81e835 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 @@ -1,13 +1,14 @@ package com.casic.missiles.modular.controller.cockpit; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; -import com.casic.missiles.modular.dto.statistics.GateStatusGroupDTO; -import com.casic.missiles.modular.dto.statistics.HeatMapDTO; -import com.casic.missiles.modular.dto.statistics.MonthAndLevelGroupDTO; -import com.casic.missiles.modular.dto.statistics.SecurityScoreDTO; +import com.casic.missiles.modular.dto.statistics.*; +import com.casic.missiles.modular.model.StaffInfo; import com.casic.missiles.modular.service.CockpitService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +25,7 @@ @Slf4j @RestController @RequestMapping("/cockpit") -public class CockpitController { +public class CockpitController extends ExportController { @Autowired private CockpitService cockpitService; @@ -93,6 +94,56 @@ } /** + * 20240821需求(需求14):安保人员总数及当日在线数量 + * 当日在线数量=当日考勤一次就算当日在线(考勤是通过重点人员识别事件识别的安保人员实现的) + */ + @GetMapping("/securityStaff/statistics") + @ResponseBody + public Object securityStaffStatistics() { + return cockpitService.staffStatistics(); + } + + /** + * 20240821需求(需求15):安保人员在岗列表 + * @return + */ + @GetMapping("/securityStaff/onList") + @ResponseBody + public Object securityStaffOnList() { + Page page = PageFactory.defaultPage(); + List onLineList = cockpitService.securityStaffOnList(); + page.setRecords(onLineList); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 20240821需求(需求16):今日访客进入/离开数量 + */ + @GetMapping("/visitor/statistics") + @ResponseBody + public Object visitorStatistics() { + return cockpitService.visitorStatistics(); + } + + /** + * 20240821需求(需求9、10):今日事件数、今日事件已解决数 + */ + @GetMapping("/case/todayStatistics") + @ResponseBody + public Object caseTodayStatistics() { + return cockpitService.caseTodayStatistics(); + } + + /** + * 20240821需求(需求11):事件类型统计数量 + */ + @GetMapping("/caseType/statisticsByTime") + @ResponseBody + public Object caseTypeStatistics(CaseTypeStatisticDTO request) { + return cockpitService.caseTypeStatistics(request); + } + + /** * 5、访客预约详情,按照访客访问目的字典进行分组,计算占总数的占比 */ @GetMapping("/visitor/applyDetail") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java index 1dc2df9..6453f82 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/MultiScoreController.java @@ -110,6 +110,14 @@ * 安全防护梯度指标组件 * 当天 * 各楼栋评分-各楼栋设备维修次数(发生一次维修减5分)-各楼栋消防设备有效期(距有效期不到三个月减5分)-各楼栋访客控制安全系数组件(当日所有访客出现一次逾期未离开记录,减分) + * + * 20240821需求(需求13):安防综合评分 + * 评分规则:满分100分,最低分60分 + * 影响因素:安防事件影响占比50%、访客事件影响占比30%、各楼栋设备维修次数占比10%、各楼栋消防设备有效期占比10% + * 安防事件影响:发生一次安防事件(未解决),分数从满分100-10*安防事件权重,事件已解决,分数恢复 + * 访客事件影响:发生一次访客访问(访客存在未离开记录),分数满分100-2,访客存在离开记录,分数恢复 + * 各楼栋设备维修次数:今日发生一次维修,分数满分100-5。 + * 各楼栋消防设备有效期:今日设备有效期到期数量,分数满分100-5,设备有效期恢复,分数恢复 */ @GetMapping("/securityScore") @ResponseBody diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 74723b4..b8a4100 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -96,6 +96,7 @@ list.add(SecurityEventType.CARD_COMPARE_PASS); list.add(SecurityEventType.FACE_COMPARE_PASS); list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); + list.add(SecurityEventType.MOTION_DETECTION); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -226,6 +227,9 @@ || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)) { //门禁事件,添加到人员进出记录表 hikService.doorPassHandle(event); + } else if (SecurityEventType.MOTION_DETECTION.equals(eventType)) { + //移动侦测事件处理 + caseInfo1 = hikService.motionDetectionHandle(event, caseInfo1); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -323,7 +327,7 @@ JSONObject json1 = (JSONObject) json; String cameraIndexCode = json1.getString("cameraIndexCode"); if (StringUtils.isNotEmpty(cameraIndexCode)) { - DeviceInfo deviceInfo = deviceInfoService.selectByIndexCode(cameraIndexCode); + DeviceInfo deviceInfo = deviceInfoService.selectByFaceIndexCode(cameraIndexCode); if (!Objects.isNull(deviceInfo)) { SearchPicturesResponse searchPicturesResponse = new SearchPicturesResponse(); searchPicturesResponse.setDevName(deviceInfo.getDevName()); @@ -540,6 +544,17 @@ } /** + * 查询监控点列表v2 + */ + @PostMapping("/hik/camera/search") + @ResponseBody + public Object cameraSearch(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.MONITOR_POINT, body); + return resultStr; + } + + /** * 门禁今日进出人数统计 */ @PostMapping("/hik/search/doorInout") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java index 04c3458..656af0b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/AttendanceInfoMapper.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; import com.casic.missiles.modular.dto.statistics.SecurityRankDTO; import com.casic.missiles.modular.model.AttendanceInfo; +import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,6 @@ List getCountForDay(); List getCountForRank(); + + List selectStaffOnList(@Param("page") Page page, @Param("staffType") String staffType); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index 61472a5..376afb3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -95,4 +95,6 @@ List getCountForRank(); List selectListByToday4(); + + List selectListByTime(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 13d0a12..835a814 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -40,6 +40,8 @@ int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + int updateFaceDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); + List selectByTypeForCamera(); List selectDeviceStatusGroupByStatus(); 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 ff9e9a0..23a0a79 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 @@ -74,7 +74,7 @@ SELECT DATE_FORMAT(atte_date,'%Y-%m-%d %h') as date, count(DISTINCT(staff_code)) as quantity, staff_type as staffType FROM bus_attendance_info WHERE 1=1 - AND TO_DAYS(atte_date) = TO_DAYS(now()) + AND TO_DAYS(atte_date) = TO_DAYS(now()) GROUP BY staff_type, DATE_FORMAT(atte_date, '%Y-%m-%d %h') @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC @@ -87,4 +87,12 @@ ORDER BY quantity DESC LIMIT 10 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 6285e98..3214db5 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -389,4 +389,13 @@ WHERE TO_DAYS(happen_time) = TO_DAYS(now()) AND hazard_level_code is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 1290fee..7e227d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -116,6 +116,14 @@ + + + update bus_device_info + set face_index_code = #{device.indexCode} + where dev_name = concat('%',#{device.name},'%') + + + SELECT position, IFNULL(COUNT(id),0) AS number FROM bus_fire_equip_info - WHERE CURDATE() >= DATE_SUB(expire_date, INTERVAL 90 DAY) + + WHERE CURDATE() >= expire_date GROUP BY position \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml index bc0dd6c..4f13098 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitInfoMapper.xml @@ -22,6 +22,7 @@ and date_format(bvi.in_time,'%Y-%m-%d') <= #{visitorRequest.endTime,jdbcType=TIMESTAMP} + ORDER BY bvi.create_time DESC