diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
new file mode 100644
index 0000000..bd2b575
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
@@ -0,0 +1,247 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.*;
+import com.casic.missiles.modular.dto.hik.DoorControlRequest;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.DeviceInfo;
+import com.casic.missiles.modular.model.DeviceRepairLog;
+import com.casic.missiles.modular.model.GateGroup;
+import com.casic.missiles.modular.service.DeviceInfoService;
+import com.casic.missiles.modular.util.HikUtil;
+import com.casic.missiles.modular.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 设备管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 11:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/deviceInfo")
+public class DeviceController extends ExportController {
+ @Autowired
+ private DeviceInfoService deviceInfoService;
+
+ /**
+ * 设备列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody DeviceInfoRequest deviceInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List deviceInfos = deviceInfoService.deviceInfoListPage(page, deviceInfoRequest);
+ page.setRecords(deviceInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 设备增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceInfo deviceInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteBatchDeviceInfo(deviceInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(DeviceInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getDevCode()) || StrUtil.isEmpty(data.getDevType())
+ || StrUtil.isEmpty(data.getDevName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("设备:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = deviceInfoService.addDeviceInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/deviceTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "deviceTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+ /**
+ * 设备维修管理查询(分页),需计算MTTR=总维修时间/故障次数
+ */
+ @PostMapping("/repair/listPage")
+ @ResponseBody
+ public Object RepairListPage(@RequestBody DeviceRepairRequest deviceRepairRequest) {
+ List deviceRepairLogDTOS = deviceInfoService.deviceRepairListPage(deviceRepairRequest);
+ Page page = PageFactory.defaultPage();
+ Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), deviceRepairLogDTOS);
+ return ResponseData.success(super.packForBT(pages));
+ }
+
+ /**
+ * 设备维修管理,增加、删除
+ */
+ @PostMapping("/repair/{operation}")
+ @ResponseBody
+ public Object repairOperation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceRepairLog deviceRepairLog) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(deviceInfoService.addDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增异常");
+ } else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(deviceInfoService.deleteDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除异常");
+ }
+ return null;
+ }
+
+ /**
+ * 设备维修详情
+ */
+ @PostMapping("/repair/detail")
+ @ResponseBody
+ public Object repairDetail(@RequestBody DeviceRepairLog deviceRepairLog) {
+ DeviceRepairLog repairLog = deviceInfoService.selectById(deviceRepairLog.getId());
+ return ResponseData.success(repairLog);
+ }
+
+ /**
+ * 闸机通道管理,即闸机分组管理
+ */
+ @PostMapping("/gateGroup/listPage")
+ @ResponseBody
+ public Object gateGroupListPage(@RequestBody GateGroupRequest gateGroupRequest) {
+ Page page = PageFactory.defaultPage();
+ List list = deviceInfoService.gateGroupListPage(page, gateGroupRequest);
+ return ResponseData.success(list);
+ }
+
+ /**
+ * 闸机分组增删改
+ */
+ @PostMapping("/gateGroup/{operation}")
+ @ResponseBody
+ public Object gateGroupOperation(@PathVariable(name = "operation") String operateType, @RequestBody GateGroupDTO gateGroupDTO) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteGateGroupDTO(gateGroupDTO);
+ }
+ return null;
+ }
+
+ /**
+ * 闸机通道状态控制
+ */
+ @PostMapping("/gateGroup/statusControl")
+ @ResponseBody
+ public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) {
+ // TODO: 2022/7/27 海康门禁点反控需要门禁点唯一标识,需到现场导出海康一份再录入咱们平台使用(与设备编号关联上)
+ // TODO: 2022/7/27 门禁状态字典要与海康的状态相同
+ //0: 常开
+ //1: 门闭
+ //2: 门开
+ //3: 常闭
+
+ //通过分组id获取闸机编号列表
+ List deviceCodes = deviceInfoService.selectDeviceCodesByIds(gateGroupDTO.getIds());
+ if(CollectionUtils.isEmpty(deviceCodes)){
+ log.info("闸机通道状态控制:不存在分组的闸机编号,request:{}", gateGroupDTO);
+ return ResponseData.error("不存在分组下的闸机编号");
+ }
+ //海康门禁点反控
+ DoorControlRequest doorControlRequest = new DoorControlRequest();
+ //需根据设备编号获取到对应的门禁点唯一标识
+// doorControlRequest.setDoorIndexCodes();
+ doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus()));
+ String body = JSONObject.toJSONString(deviceCodes);
+ String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body);
+ JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,门禁点反控失败,海康response:{}", resultStr);
+ return ResponseData.error("门禁点反控失败");
+ }
+ List hikDataList = (List) resultJson.get("data");
+ List failControlList = new ArrayList<>();
+ hikDataList.forEach(data -> {
+ if(0 != (Integer)data.get("controlResultCode")){
+ failControlList.add(String.valueOf(data.get("doorIndexCode")));
+ }
+ });
+ if(!CollectionUtils.isEmpty(failControlList)){
+ return ResponseData.error("门禁点:" + failControlList + "反控失败");
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
new file mode 100644
index 0000000..bd2b575
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
@@ -0,0 +1,247 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.*;
+import com.casic.missiles.modular.dto.hik.DoorControlRequest;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.DeviceInfo;
+import com.casic.missiles.modular.model.DeviceRepairLog;
+import com.casic.missiles.modular.model.GateGroup;
+import com.casic.missiles.modular.service.DeviceInfoService;
+import com.casic.missiles.modular.util.HikUtil;
+import com.casic.missiles.modular.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 设备管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 11:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/deviceInfo")
+public class DeviceController extends ExportController {
+ @Autowired
+ private DeviceInfoService deviceInfoService;
+
+ /**
+ * 设备列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody DeviceInfoRequest deviceInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List deviceInfos = deviceInfoService.deviceInfoListPage(page, deviceInfoRequest);
+ page.setRecords(deviceInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 设备增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceInfo deviceInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteBatchDeviceInfo(deviceInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(DeviceInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getDevCode()) || StrUtil.isEmpty(data.getDevType())
+ || StrUtil.isEmpty(data.getDevName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("设备:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = deviceInfoService.addDeviceInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/deviceTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "deviceTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+ /**
+ * 设备维修管理查询(分页),需计算MTTR=总维修时间/故障次数
+ */
+ @PostMapping("/repair/listPage")
+ @ResponseBody
+ public Object RepairListPage(@RequestBody DeviceRepairRequest deviceRepairRequest) {
+ List deviceRepairLogDTOS = deviceInfoService.deviceRepairListPage(deviceRepairRequest);
+ Page page = PageFactory.defaultPage();
+ Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), deviceRepairLogDTOS);
+ return ResponseData.success(super.packForBT(pages));
+ }
+
+ /**
+ * 设备维修管理,增加、删除
+ */
+ @PostMapping("/repair/{operation}")
+ @ResponseBody
+ public Object repairOperation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceRepairLog deviceRepairLog) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(deviceInfoService.addDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增异常");
+ } else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(deviceInfoService.deleteDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除异常");
+ }
+ return null;
+ }
+
+ /**
+ * 设备维修详情
+ */
+ @PostMapping("/repair/detail")
+ @ResponseBody
+ public Object repairDetail(@RequestBody DeviceRepairLog deviceRepairLog) {
+ DeviceRepairLog repairLog = deviceInfoService.selectById(deviceRepairLog.getId());
+ return ResponseData.success(repairLog);
+ }
+
+ /**
+ * 闸机通道管理,即闸机分组管理
+ */
+ @PostMapping("/gateGroup/listPage")
+ @ResponseBody
+ public Object gateGroupListPage(@RequestBody GateGroupRequest gateGroupRequest) {
+ Page page = PageFactory.defaultPage();
+ List list = deviceInfoService.gateGroupListPage(page, gateGroupRequest);
+ return ResponseData.success(list);
+ }
+
+ /**
+ * 闸机分组增删改
+ */
+ @PostMapping("/gateGroup/{operation}")
+ @ResponseBody
+ public Object gateGroupOperation(@PathVariable(name = "operation") String operateType, @RequestBody GateGroupDTO gateGroupDTO) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteGateGroupDTO(gateGroupDTO);
+ }
+ return null;
+ }
+
+ /**
+ * 闸机通道状态控制
+ */
+ @PostMapping("/gateGroup/statusControl")
+ @ResponseBody
+ public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) {
+ // TODO: 2022/7/27 海康门禁点反控需要门禁点唯一标识,需到现场导出海康一份再录入咱们平台使用(与设备编号关联上)
+ // TODO: 2022/7/27 门禁状态字典要与海康的状态相同
+ //0: 常开
+ //1: 门闭
+ //2: 门开
+ //3: 常闭
+
+ //通过分组id获取闸机编号列表
+ List deviceCodes = deviceInfoService.selectDeviceCodesByIds(gateGroupDTO.getIds());
+ if(CollectionUtils.isEmpty(deviceCodes)){
+ log.info("闸机通道状态控制:不存在分组的闸机编号,request:{}", gateGroupDTO);
+ return ResponseData.error("不存在分组下的闸机编号");
+ }
+ //海康门禁点反控
+ DoorControlRequest doorControlRequest = new DoorControlRequest();
+ //需根据设备编号获取到对应的门禁点唯一标识
+// doorControlRequest.setDoorIndexCodes();
+ doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus()));
+ String body = JSONObject.toJSONString(deviceCodes);
+ String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body);
+ JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,门禁点反控失败,海康response:{}", resultStr);
+ return ResponseData.error("门禁点反控失败");
+ }
+ List hikDataList = (List) resultJson.get("data");
+ List failControlList = new ArrayList<>();
+ hikDataList.forEach(data -> {
+ if(0 != (Integer)data.get("controlResultCode")){
+ failControlList.add(String.valueOf(data.get("doorIndexCode")));
+ }
+ });
+ if(!CollectionUtils.isEmpty(failControlList)){
+ return ResponseData.error("门禁点:" + failControlList + "反控失败");
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
new file mode 100644
index 0000000..1a306ef
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
@@ -0,0 +1,125 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.FireEquipRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.FireEquipInfo;
+import com.casic.missiles.modular.service.FireEquipService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 消防器材管理
+ * @Author: wangpeng
+ * @Date: 2022/7/27 14:11
+ */
+@Slf4j
+@RestController
+@RequestMapping("/fireEquip")
+public class FireEquipController extends ExportController {
+ @Autowired
+ private FireEquipService fireEquipService;
+
+ /**
+ * 消防器材列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody FireEquipRequest fireEquipRequest) {
+ Page page = PageFactory.defaultPage();
+ List fireEquipInfos = fireEquipService.fireEquipInfoListPage(page, fireEquipRequest);
+ page.setRecords(fireEquipInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 消防器材增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody FireEquipInfo fireEquipInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return fireEquipService.addFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return fireEquipService.updateFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return fireEquipService.deleteFireEquipInfo(fireEquipInfo);
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(FireEquipInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getEquipCode()) || StrUtil.isEmpty(data.getEquipType())
+ || StrUtil.isEmpty(data.getEquipName()) || StrUtil.isEmpty(data.getProductDate())
+ || StrUtil.isEmpty(data.getExpireDate()) || StrUtil.isEmpty(data.getQualityDate())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("消防器材:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = fireEquipService.addFireEquipInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/fireEquipTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "fireEquipTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
new file mode 100644
index 0000000..bd2b575
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
@@ -0,0 +1,247 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.*;
+import com.casic.missiles.modular.dto.hik.DoorControlRequest;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.DeviceInfo;
+import com.casic.missiles.modular.model.DeviceRepairLog;
+import com.casic.missiles.modular.model.GateGroup;
+import com.casic.missiles.modular.service.DeviceInfoService;
+import com.casic.missiles.modular.util.HikUtil;
+import com.casic.missiles.modular.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 设备管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 11:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/deviceInfo")
+public class DeviceController extends ExportController {
+ @Autowired
+ private DeviceInfoService deviceInfoService;
+
+ /**
+ * 设备列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody DeviceInfoRequest deviceInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List deviceInfos = deviceInfoService.deviceInfoListPage(page, deviceInfoRequest);
+ page.setRecords(deviceInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 设备增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceInfo deviceInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteBatchDeviceInfo(deviceInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(DeviceInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getDevCode()) || StrUtil.isEmpty(data.getDevType())
+ || StrUtil.isEmpty(data.getDevName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("设备:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = deviceInfoService.addDeviceInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/deviceTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "deviceTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+ /**
+ * 设备维修管理查询(分页),需计算MTTR=总维修时间/故障次数
+ */
+ @PostMapping("/repair/listPage")
+ @ResponseBody
+ public Object RepairListPage(@RequestBody DeviceRepairRequest deviceRepairRequest) {
+ List deviceRepairLogDTOS = deviceInfoService.deviceRepairListPage(deviceRepairRequest);
+ Page page = PageFactory.defaultPage();
+ Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), deviceRepairLogDTOS);
+ return ResponseData.success(super.packForBT(pages));
+ }
+
+ /**
+ * 设备维修管理,增加、删除
+ */
+ @PostMapping("/repair/{operation}")
+ @ResponseBody
+ public Object repairOperation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceRepairLog deviceRepairLog) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(deviceInfoService.addDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增异常");
+ } else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(deviceInfoService.deleteDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除异常");
+ }
+ return null;
+ }
+
+ /**
+ * 设备维修详情
+ */
+ @PostMapping("/repair/detail")
+ @ResponseBody
+ public Object repairDetail(@RequestBody DeviceRepairLog deviceRepairLog) {
+ DeviceRepairLog repairLog = deviceInfoService.selectById(deviceRepairLog.getId());
+ return ResponseData.success(repairLog);
+ }
+
+ /**
+ * 闸机通道管理,即闸机分组管理
+ */
+ @PostMapping("/gateGroup/listPage")
+ @ResponseBody
+ public Object gateGroupListPage(@RequestBody GateGroupRequest gateGroupRequest) {
+ Page page = PageFactory.defaultPage();
+ List list = deviceInfoService.gateGroupListPage(page, gateGroupRequest);
+ return ResponseData.success(list);
+ }
+
+ /**
+ * 闸机分组增删改
+ */
+ @PostMapping("/gateGroup/{operation}")
+ @ResponseBody
+ public Object gateGroupOperation(@PathVariable(name = "operation") String operateType, @RequestBody GateGroupDTO gateGroupDTO) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteGateGroupDTO(gateGroupDTO);
+ }
+ return null;
+ }
+
+ /**
+ * 闸机通道状态控制
+ */
+ @PostMapping("/gateGroup/statusControl")
+ @ResponseBody
+ public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) {
+ // TODO: 2022/7/27 海康门禁点反控需要门禁点唯一标识,需到现场导出海康一份再录入咱们平台使用(与设备编号关联上)
+ // TODO: 2022/7/27 门禁状态字典要与海康的状态相同
+ //0: 常开
+ //1: 门闭
+ //2: 门开
+ //3: 常闭
+
+ //通过分组id获取闸机编号列表
+ List deviceCodes = deviceInfoService.selectDeviceCodesByIds(gateGroupDTO.getIds());
+ if(CollectionUtils.isEmpty(deviceCodes)){
+ log.info("闸机通道状态控制:不存在分组的闸机编号,request:{}", gateGroupDTO);
+ return ResponseData.error("不存在分组下的闸机编号");
+ }
+ //海康门禁点反控
+ DoorControlRequest doorControlRequest = new DoorControlRequest();
+ //需根据设备编号获取到对应的门禁点唯一标识
+// doorControlRequest.setDoorIndexCodes();
+ doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus()));
+ String body = JSONObject.toJSONString(deviceCodes);
+ String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body);
+ JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,门禁点反控失败,海康response:{}", resultStr);
+ return ResponseData.error("门禁点反控失败");
+ }
+ List hikDataList = (List) resultJson.get("data");
+ List failControlList = new ArrayList<>();
+ hikDataList.forEach(data -> {
+ if(0 != (Integer)data.get("controlResultCode")){
+ failControlList.add(String.valueOf(data.get("doorIndexCode")));
+ }
+ });
+ if(!CollectionUtils.isEmpty(failControlList)){
+ return ResponseData.error("门禁点:" + failControlList + "反控失败");
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
new file mode 100644
index 0000000..1a306ef
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
@@ -0,0 +1,125 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.FireEquipRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.FireEquipInfo;
+import com.casic.missiles.modular.service.FireEquipService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 消防器材管理
+ * @Author: wangpeng
+ * @Date: 2022/7/27 14:11
+ */
+@Slf4j
+@RestController
+@RequestMapping("/fireEquip")
+public class FireEquipController extends ExportController {
+ @Autowired
+ private FireEquipService fireEquipService;
+
+ /**
+ * 消防器材列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody FireEquipRequest fireEquipRequest) {
+ Page page = PageFactory.defaultPage();
+ List fireEquipInfos = fireEquipService.fireEquipInfoListPage(page, fireEquipRequest);
+ page.setRecords(fireEquipInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 消防器材增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody FireEquipInfo fireEquipInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return fireEquipService.addFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return fireEquipService.updateFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return fireEquipService.deleteFireEquipInfo(fireEquipInfo);
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(FireEquipInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getEquipCode()) || StrUtil.isEmpty(data.getEquipType())
+ || StrUtil.isEmpty(data.getEquipName()) || StrUtil.isEmpty(data.getProductDate())
+ || StrUtil.isEmpty(data.getExpireDate()) || StrUtil.isEmpty(data.getQualityDate())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("消防器材:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = fireEquipService.addFireEquipInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/fireEquipTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "fireEquipTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
new file mode 100644
index 0000000..f707962
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
@@ -0,0 +1,63 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.HazardLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseHazardLevel;
+import com.casic.missiles.modular.service.HazardLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * @Description: 安防事件级别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:02
+ */
+@RestController
+@RequestMapping("/caseLevelInfo")
+public class HazardLevelController extends ExportController {
+ @Autowired
+ private HazardLevelService hazardLevelService;
+ /**
+ * 事件危险级别配置列表(分页)
+ * @return
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseHazardLevels = hazardLevelService.hazardLevelListPage(page, hazardLevelRequest);
+ page.setRecords(caseHazardLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件危险级别配置列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ List caseHazardLevels = hazardLevelService.hazardLevelList(hazardLevelRequest);
+ return ResponseData.success(caseHazardLevels);
+ }
+
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseHazardLevel caseHazardLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return hazardLevelService.addHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return hazardLevelService.updateHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteBatchHazardLevel(caseHazardLevel.getIds());
+ }
+ return null;
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
new file mode 100644
index 0000000..bd2b575
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
@@ -0,0 +1,247 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.*;
+import com.casic.missiles.modular.dto.hik.DoorControlRequest;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.DeviceInfo;
+import com.casic.missiles.modular.model.DeviceRepairLog;
+import com.casic.missiles.modular.model.GateGroup;
+import com.casic.missiles.modular.service.DeviceInfoService;
+import com.casic.missiles.modular.util.HikUtil;
+import com.casic.missiles.modular.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 设备管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 11:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/deviceInfo")
+public class DeviceController extends ExportController {
+ @Autowired
+ private DeviceInfoService deviceInfoService;
+
+ /**
+ * 设备列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody DeviceInfoRequest deviceInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List deviceInfos = deviceInfoService.deviceInfoListPage(page, deviceInfoRequest);
+ page.setRecords(deviceInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 设备增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceInfo deviceInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteBatchDeviceInfo(deviceInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(DeviceInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getDevCode()) || StrUtil.isEmpty(data.getDevType())
+ || StrUtil.isEmpty(data.getDevName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("设备:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = deviceInfoService.addDeviceInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/deviceTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "deviceTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+ /**
+ * 设备维修管理查询(分页),需计算MTTR=总维修时间/故障次数
+ */
+ @PostMapping("/repair/listPage")
+ @ResponseBody
+ public Object RepairListPage(@RequestBody DeviceRepairRequest deviceRepairRequest) {
+ List deviceRepairLogDTOS = deviceInfoService.deviceRepairListPage(deviceRepairRequest);
+ Page page = PageFactory.defaultPage();
+ Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), deviceRepairLogDTOS);
+ return ResponseData.success(super.packForBT(pages));
+ }
+
+ /**
+ * 设备维修管理,增加、删除
+ */
+ @PostMapping("/repair/{operation}")
+ @ResponseBody
+ public Object repairOperation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceRepairLog deviceRepairLog) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(deviceInfoService.addDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增异常");
+ } else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(deviceInfoService.deleteDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除异常");
+ }
+ return null;
+ }
+
+ /**
+ * 设备维修详情
+ */
+ @PostMapping("/repair/detail")
+ @ResponseBody
+ public Object repairDetail(@RequestBody DeviceRepairLog deviceRepairLog) {
+ DeviceRepairLog repairLog = deviceInfoService.selectById(deviceRepairLog.getId());
+ return ResponseData.success(repairLog);
+ }
+
+ /**
+ * 闸机通道管理,即闸机分组管理
+ */
+ @PostMapping("/gateGroup/listPage")
+ @ResponseBody
+ public Object gateGroupListPage(@RequestBody GateGroupRequest gateGroupRequest) {
+ Page page = PageFactory.defaultPage();
+ List list = deviceInfoService.gateGroupListPage(page, gateGroupRequest);
+ return ResponseData.success(list);
+ }
+
+ /**
+ * 闸机分组增删改
+ */
+ @PostMapping("/gateGroup/{operation}")
+ @ResponseBody
+ public Object gateGroupOperation(@PathVariable(name = "operation") String operateType, @RequestBody GateGroupDTO gateGroupDTO) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteGateGroupDTO(gateGroupDTO);
+ }
+ return null;
+ }
+
+ /**
+ * 闸机通道状态控制
+ */
+ @PostMapping("/gateGroup/statusControl")
+ @ResponseBody
+ public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) {
+ // TODO: 2022/7/27 海康门禁点反控需要门禁点唯一标识,需到现场导出海康一份再录入咱们平台使用(与设备编号关联上)
+ // TODO: 2022/7/27 门禁状态字典要与海康的状态相同
+ //0: 常开
+ //1: 门闭
+ //2: 门开
+ //3: 常闭
+
+ //通过分组id获取闸机编号列表
+ List deviceCodes = deviceInfoService.selectDeviceCodesByIds(gateGroupDTO.getIds());
+ if(CollectionUtils.isEmpty(deviceCodes)){
+ log.info("闸机通道状态控制:不存在分组的闸机编号,request:{}", gateGroupDTO);
+ return ResponseData.error("不存在分组下的闸机编号");
+ }
+ //海康门禁点反控
+ DoorControlRequest doorControlRequest = new DoorControlRequest();
+ //需根据设备编号获取到对应的门禁点唯一标识
+// doorControlRequest.setDoorIndexCodes();
+ doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus()));
+ String body = JSONObject.toJSONString(deviceCodes);
+ String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body);
+ JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,门禁点反控失败,海康response:{}", resultStr);
+ return ResponseData.error("门禁点反控失败");
+ }
+ List hikDataList = (List) resultJson.get("data");
+ List failControlList = new ArrayList<>();
+ hikDataList.forEach(data -> {
+ if(0 != (Integer)data.get("controlResultCode")){
+ failControlList.add(String.valueOf(data.get("doorIndexCode")));
+ }
+ });
+ if(!CollectionUtils.isEmpty(failControlList)){
+ return ResponseData.error("门禁点:" + failControlList + "反控失败");
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
new file mode 100644
index 0000000..1a306ef
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
@@ -0,0 +1,125 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.FireEquipRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.FireEquipInfo;
+import com.casic.missiles.modular.service.FireEquipService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 消防器材管理
+ * @Author: wangpeng
+ * @Date: 2022/7/27 14:11
+ */
+@Slf4j
+@RestController
+@RequestMapping("/fireEquip")
+public class FireEquipController extends ExportController {
+ @Autowired
+ private FireEquipService fireEquipService;
+
+ /**
+ * 消防器材列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody FireEquipRequest fireEquipRequest) {
+ Page page = PageFactory.defaultPage();
+ List fireEquipInfos = fireEquipService.fireEquipInfoListPage(page, fireEquipRequest);
+ page.setRecords(fireEquipInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 消防器材增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody FireEquipInfo fireEquipInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return fireEquipService.addFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return fireEquipService.updateFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return fireEquipService.deleteFireEquipInfo(fireEquipInfo);
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(FireEquipInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getEquipCode()) || StrUtil.isEmpty(data.getEquipType())
+ || StrUtil.isEmpty(data.getEquipName()) || StrUtil.isEmpty(data.getProductDate())
+ || StrUtil.isEmpty(data.getExpireDate()) || StrUtil.isEmpty(data.getQualityDate())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("消防器材:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = fireEquipService.addFireEquipInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/fireEquipTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "fireEquipTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
new file mode 100644
index 0000000..f707962
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
@@ -0,0 +1,63 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.HazardLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseHazardLevel;
+import com.casic.missiles.modular.service.HazardLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * @Description: 安防事件级别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:02
+ */
+@RestController
+@RequestMapping("/caseLevelInfo")
+public class HazardLevelController extends ExportController {
+ @Autowired
+ private HazardLevelService hazardLevelService;
+ /**
+ * 事件危险级别配置列表(分页)
+ * @return
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseHazardLevels = hazardLevelService.hazardLevelListPage(page, hazardLevelRequest);
+ page.setRecords(caseHazardLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件危险级别配置列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ List caseHazardLevels = hazardLevelService.hazardLevelList(hazardLevelRequest);
+ return ResponseData.success(caseHazardLevels);
+ }
+
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseHazardLevel caseHazardLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return hazardLevelService.addHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return hazardLevelService.updateHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteBatchHazardLevel(caseHazardLevel.getIds());
+ }
+ return null;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java
new file mode 100644
index 0000000..b58ccab
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.StaffInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.StaffInfo;
+import com.casic.missiles.modular.service.StaffInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 员工管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 17:10
+ */
+
+@Slf4j
+@RestController
+@RequestMapping("/staffInfo")
+public class StaffController extends ExportController {
+ @Autowired
+ private StaffInfoService staffInfoService;
+
+ /**
+ * 员工列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody StaffInfoRequest staffInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 员工列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody StaffInfoRequest staffInfoRequest) {
+ List staffInfos = staffInfoService.staffInfoList(staffInfoRequest);
+ return ResponseData.success(staffInfos);
+ }
+
+ /**
+ * 员工管理,增加、编辑、删除
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody StaffInfo staffInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return staffInfoService.addStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return staffInfoService.updateStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return staffInfoService.deleteStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return staffInfoService.deleteBatchStaffInfo(staffInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 根据员工编号查员工信息
+ */
+ @PostMapping("/staffSearch")
+ @ResponseBody
+ public Object staffSearch(@RequestBody StaffInfo staffInfo) {
+ StaffInfo info = staffInfoService.selectStaffInfoByCode(staffInfo);
+ return ResponseData.success(info);
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(StaffInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getStaffCode()) || StrUtil.isEmpty(data.getStaffName())
+ || StrUtil.isEmpty(data.getStaffType())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("员工:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = staffInfoService.addStaffInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
new file mode 100644
index 0000000..bd2b575
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
@@ -0,0 +1,247 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.*;
+import com.casic.missiles.modular.dto.hik.DoorControlRequest;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.DeviceInfo;
+import com.casic.missiles.modular.model.DeviceRepairLog;
+import com.casic.missiles.modular.model.GateGroup;
+import com.casic.missiles.modular.service.DeviceInfoService;
+import com.casic.missiles.modular.util.HikUtil;
+import com.casic.missiles.modular.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 设备管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 11:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/deviceInfo")
+public class DeviceController extends ExportController {
+ @Autowired
+ private DeviceInfoService deviceInfoService;
+
+ /**
+ * 设备列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody DeviceInfoRequest deviceInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List deviceInfos = deviceInfoService.deviceInfoListPage(page, deviceInfoRequest);
+ page.setRecords(deviceInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 设备增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceInfo deviceInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteBatchDeviceInfo(deviceInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(DeviceInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getDevCode()) || StrUtil.isEmpty(data.getDevType())
+ || StrUtil.isEmpty(data.getDevName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("设备:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = deviceInfoService.addDeviceInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/deviceTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "deviceTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+ /**
+ * 设备维修管理查询(分页),需计算MTTR=总维修时间/故障次数
+ */
+ @PostMapping("/repair/listPage")
+ @ResponseBody
+ public Object RepairListPage(@RequestBody DeviceRepairRequest deviceRepairRequest) {
+ List deviceRepairLogDTOS = deviceInfoService.deviceRepairListPage(deviceRepairRequest);
+ Page page = PageFactory.defaultPage();
+ Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), deviceRepairLogDTOS);
+ return ResponseData.success(super.packForBT(pages));
+ }
+
+ /**
+ * 设备维修管理,增加、删除
+ */
+ @PostMapping("/repair/{operation}")
+ @ResponseBody
+ public Object repairOperation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceRepairLog deviceRepairLog) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(deviceInfoService.addDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增异常");
+ } else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(deviceInfoService.deleteDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除异常");
+ }
+ return null;
+ }
+
+ /**
+ * 设备维修详情
+ */
+ @PostMapping("/repair/detail")
+ @ResponseBody
+ public Object repairDetail(@RequestBody DeviceRepairLog deviceRepairLog) {
+ DeviceRepairLog repairLog = deviceInfoService.selectById(deviceRepairLog.getId());
+ return ResponseData.success(repairLog);
+ }
+
+ /**
+ * 闸机通道管理,即闸机分组管理
+ */
+ @PostMapping("/gateGroup/listPage")
+ @ResponseBody
+ public Object gateGroupListPage(@RequestBody GateGroupRequest gateGroupRequest) {
+ Page page = PageFactory.defaultPage();
+ List list = deviceInfoService.gateGroupListPage(page, gateGroupRequest);
+ return ResponseData.success(list);
+ }
+
+ /**
+ * 闸机分组增删改
+ */
+ @PostMapping("/gateGroup/{operation}")
+ @ResponseBody
+ public Object gateGroupOperation(@PathVariable(name = "operation") String operateType, @RequestBody GateGroupDTO gateGroupDTO) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteGateGroupDTO(gateGroupDTO);
+ }
+ return null;
+ }
+
+ /**
+ * 闸机通道状态控制
+ */
+ @PostMapping("/gateGroup/statusControl")
+ @ResponseBody
+ public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) {
+ // TODO: 2022/7/27 海康门禁点反控需要门禁点唯一标识,需到现场导出海康一份再录入咱们平台使用(与设备编号关联上)
+ // TODO: 2022/7/27 门禁状态字典要与海康的状态相同
+ //0: 常开
+ //1: 门闭
+ //2: 门开
+ //3: 常闭
+
+ //通过分组id获取闸机编号列表
+ List deviceCodes = deviceInfoService.selectDeviceCodesByIds(gateGroupDTO.getIds());
+ if(CollectionUtils.isEmpty(deviceCodes)){
+ log.info("闸机通道状态控制:不存在分组的闸机编号,request:{}", gateGroupDTO);
+ return ResponseData.error("不存在分组下的闸机编号");
+ }
+ //海康门禁点反控
+ DoorControlRequest doorControlRequest = new DoorControlRequest();
+ //需根据设备编号获取到对应的门禁点唯一标识
+// doorControlRequest.setDoorIndexCodes();
+ doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus()));
+ String body = JSONObject.toJSONString(deviceCodes);
+ String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body);
+ JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,门禁点反控失败,海康response:{}", resultStr);
+ return ResponseData.error("门禁点反控失败");
+ }
+ List hikDataList = (List) resultJson.get("data");
+ List failControlList = new ArrayList<>();
+ hikDataList.forEach(data -> {
+ if(0 != (Integer)data.get("controlResultCode")){
+ failControlList.add(String.valueOf(data.get("doorIndexCode")));
+ }
+ });
+ if(!CollectionUtils.isEmpty(failControlList)){
+ return ResponseData.error("门禁点:" + failControlList + "反控失败");
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
new file mode 100644
index 0000000..1a306ef
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
@@ -0,0 +1,125 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.FireEquipRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.FireEquipInfo;
+import com.casic.missiles.modular.service.FireEquipService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 消防器材管理
+ * @Author: wangpeng
+ * @Date: 2022/7/27 14:11
+ */
+@Slf4j
+@RestController
+@RequestMapping("/fireEquip")
+public class FireEquipController extends ExportController {
+ @Autowired
+ private FireEquipService fireEquipService;
+
+ /**
+ * 消防器材列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody FireEquipRequest fireEquipRequest) {
+ Page page = PageFactory.defaultPage();
+ List fireEquipInfos = fireEquipService.fireEquipInfoListPage(page, fireEquipRequest);
+ page.setRecords(fireEquipInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 消防器材增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody FireEquipInfo fireEquipInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return fireEquipService.addFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return fireEquipService.updateFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return fireEquipService.deleteFireEquipInfo(fireEquipInfo);
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(FireEquipInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getEquipCode()) || StrUtil.isEmpty(data.getEquipType())
+ || StrUtil.isEmpty(data.getEquipName()) || StrUtil.isEmpty(data.getProductDate())
+ || StrUtil.isEmpty(data.getExpireDate()) || StrUtil.isEmpty(data.getQualityDate())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("消防器材:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = fireEquipService.addFireEquipInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/fireEquipTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "fireEquipTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
new file mode 100644
index 0000000..f707962
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
@@ -0,0 +1,63 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.HazardLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseHazardLevel;
+import com.casic.missiles.modular.service.HazardLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * @Description: 安防事件级别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:02
+ */
+@RestController
+@RequestMapping("/caseLevelInfo")
+public class HazardLevelController extends ExportController {
+ @Autowired
+ private HazardLevelService hazardLevelService;
+ /**
+ * 事件危险级别配置列表(分页)
+ * @return
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseHazardLevels = hazardLevelService.hazardLevelListPage(page, hazardLevelRequest);
+ page.setRecords(caseHazardLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件危险级别配置列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ List caseHazardLevels = hazardLevelService.hazardLevelList(hazardLevelRequest);
+ return ResponseData.success(caseHazardLevels);
+ }
+
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseHazardLevel caseHazardLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return hazardLevelService.addHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return hazardLevelService.updateHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteBatchHazardLevel(caseHazardLevel.getIds());
+ }
+ return null;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java
new file mode 100644
index 0000000..b58ccab
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.StaffInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.StaffInfo;
+import com.casic.missiles.modular.service.StaffInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 员工管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 17:10
+ */
+
+@Slf4j
+@RestController
+@RequestMapping("/staffInfo")
+public class StaffController extends ExportController {
+ @Autowired
+ private StaffInfoService staffInfoService;
+
+ /**
+ * 员工列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody StaffInfoRequest staffInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 员工列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody StaffInfoRequest staffInfoRequest) {
+ List staffInfos = staffInfoService.staffInfoList(staffInfoRequest);
+ return ResponseData.success(staffInfos);
+ }
+
+ /**
+ * 员工管理,增加、编辑、删除
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody StaffInfo staffInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return staffInfoService.addStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return staffInfoService.updateStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return staffInfoService.deleteStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return staffInfoService.deleteBatchStaffInfo(staffInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 根据员工编号查员工信息
+ */
+ @PostMapping("/staffSearch")
+ @ResponseBody
+ public Object staffSearch(@RequestBody StaffInfo staffInfo) {
+ StaffInfo info = staffInfoService.selectStaffInfoByCode(staffInfo);
+ return ResponseData.success(info);
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(StaffInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getStaffCode()) || StrUtil.isEmpty(data.getStaffName())
+ || StrUtil.isEmpty(data.getStaffType())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("员工:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = staffInfoService.addStaffInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java
new file mode 100644
index 0000000..a7cf1f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.VisitorApplyRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.VisitorApply;
+import com.casic.missiles.modular.service.VisitorApplyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 访客管理
+ * @Author: wangpeng
+ * @Date: 2022/7/19 19:32
+ */
+
+@Slf4j
+@RestController
+@RequestMapping("/applicationInfo")
+public class VisitorApplyController extends ExportController {
+ // TODO: 2022/7/23 访客申请增删改同时要增删改海康的预约,修改访客预约v2接口,取消操作使用取消访客预约
+ @Autowired
+ private VisitorApplyService visitorApplyService;
+ /**
+ * 访问申请列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody VisitorApplyRequest applyRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody VisitorApply visitorApply) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(visitorApplyService.addVisitorApply(visitorApply) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增访问申请异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(visitorApplyService.updateVisitorApply(visitorApply) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新访问申请异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(visitorApplyService.deleteVisitorApply(visitorApply) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除访问申请异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(visitorApplyService.deleteBatchVisitorApply(visitorApply.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除访问申请异常");
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(VisitorApply.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getStaffCode()) || StrUtil.isEmpty(data.getStaffName())
+ || StrUtil.isEmpty(data.getIdCard()) || StrUtil.isEmpty(data.getVisitorName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("访客申请:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = visitorApplyService.addVisitorApplyBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index c150a12..67a92aa 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -30,10 +30,15 @@
provided
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+
org.springframework.boot
spring-boot-starter-web
${boot.version}
- provided
@@ -56,6 +61,11 @@
netty-all
4.1.42.Final
+
+ com.casic
+ casic-export-support
+ ${extension.version}
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
new file mode 100644
index 0000000..c46f536
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/AssetInfoController.java
@@ -0,0 +1,78 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.AssetInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.AssetInfo;
+import com.casic.missiles.modular.service.AssetInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 资产管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/22 10:47
+ */
+@Slf4j
+@RestController
+@RequestMapping("/assetInfo")
+public class AssetInfoController extends ExportController {
+ @Autowired
+ private AssetInfoService assetInfoService;
+
+ /**
+ * 资产管理列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody AssetInfoRequest assetInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List assetInfos = assetInfoService.assetInfoListPage(page, assetInfoRequest);
+ page.setRecords(assetInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 资产管理增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody AssetInfo assetInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(assetInfoService.addAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增资产异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(assetInfoService.updateAssetInfo(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新资产异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteAssetInfol(assetInfo) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(assetInfoService.deleteBatchAssetInfo(assetInfo.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除资产异常");
+ }
+ return null;
+ }
+
+ /**
+ * 资产管理批量导出
+ */
+
+ /**
+ * 资产管理批量导入
+ */
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
new file mode 100644
index 0000000..a27f9f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/BlackListController.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.BlackInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.BlackInfo;
+import com.casic.missiles.modular.service.BlackInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 黑名单管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/25 10:35
+ */
+@Slf4j
+@RestController
+@RequestMapping("/blackInfo")
+public class BlackListController extends ExportController {
+ @Autowired
+ private BlackInfoService blackInfoService;
+
+ /**
+ * 黑名单列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody BlackInfoRequest blackInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List blackInfos = blackInfoService.blackInfoListPage(page, blackInfoRequest);
+ page.setRecords(blackInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 黑名单增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody BlackInfo blackInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return blackInfoService.addBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return blackInfoService.updateBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBlackInfo(blackInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return blackInfoService.deleteBatchBlackInfo(blackInfo);
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
new file mode 100644
index 0000000..cc6b060
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CaseInfoController.java
@@ -0,0 +1,115 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.CaseInfoRequest;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @Description: 安防事件管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 9:51
+ */
+@Slf4j
+@RestController
+@RequestMapping("/caseInfo")
+public class CaseInfoController extends ExportController {
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ /**
+ * 安防事件列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object list(@RequestBody CaseInfoRequest caseInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = caseInfoService.caseInfoListPage(page, caseInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 编辑事件状态
+ */
+ @PostMapping("/update")
+ @ResponseBody
+ public Object updateStatus(@RequestBody CaseInfoRequest caseInfoRequest) {
+ if (caseInfoService.updateStatus(caseInfoRequest) > 0) {
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新异常");
+ }
+
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(CaseInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getHazardLevelCode()) || StrUtil.isEmpty(data.getCategoryLevelCode())
+ || StrUtil.isEmpty(data.getDeviceCode())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("安防事件:批量导出文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = caseInfoService.addCaseInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/securityCockpitTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "securityCockpitTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
new file mode 100644
index 0000000..a549d1c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/CategoryLevelController.java
@@ -0,0 +1,66 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.CategoryLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseCategoryLevel;
+import com.casic.missiles.modular.service.CategoryLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Description: 安防事件类别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:03
+ */
+@RestController
+@RequestMapping("/caseTypeInfo")
+public class CategoryLevelController extends ExportController {
+ @Autowired
+ private CategoryLevelService categoryLevelService;
+ /**
+ * 事件类别配置列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = categoryLevelService.categoryLevelListPage(page, categoryLevelRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件类别配置列表(不分页)
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody CategoryLevelRequest categoryLevelRequest) {
+ List caseCategoryLevels = categoryLevelService.categoryLevelList(categoryLevelRequest);
+ return ResponseData.success(caseCategoryLevels);
+ }
+
+ /**
+ * 事件类别配置增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseCategoryLevel caseCategoryLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return categoryLevelService.addCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return categoryLevelService.updateCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteCategoryLevel(caseCategoryLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return categoryLevelService.deleteBatchCategoryLevel(caseCategoryLevel.getIds());
+ }
+ return null;
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
new file mode 100644
index 0000000..bd2b575
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java
@@ -0,0 +1,247 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.*;
+import com.casic.missiles.modular.dto.hik.DoorControlRequest;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.DeviceInfo;
+import com.casic.missiles.modular.model.DeviceRepairLog;
+import com.casic.missiles.modular.model.GateGroup;
+import com.casic.missiles.modular.service.DeviceInfoService;
+import com.casic.missiles.modular.util.HikUtil;
+import com.casic.missiles.modular.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 设备管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 11:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/deviceInfo")
+public class DeviceController extends ExportController {
+ @Autowired
+ private DeviceInfoService deviceInfoService;
+
+ /**
+ * 设备列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody DeviceInfoRequest deviceInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List deviceInfos = deviceInfoService.deviceInfoListPage(page, deviceInfoRequest);
+ page.setRecords(deviceInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 设备增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceInfo deviceInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteDeviceInfo(deviceInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteBatchDeviceInfo(deviceInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(DeviceInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getDevCode()) || StrUtil.isEmpty(data.getDevType())
+ || StrUtil.isEmpty(data.getDevName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("设备:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = deviceInfoService.addDeviceInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/deviceTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "deviceTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+ /**
+ * 设备维修管理查询(分页),需计算MTTR=总维修时间/故障次数
+ */
+ @PostMapping("/repair/listPage")
+ @ResponseBody
+ public Object RepairListPage(@RequestBody DeviceRepairRequest deviceRepairRequest) {
+ List deviceRepairLogDTOS = deviceInfoService.deviceRepairListPage(deviceRepairRequest);
+ Page page = PageFactory.defaultPage();
+ Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), deviceRepairLogDTOS);
+ return ResponseData.success(super.packForBT(pages));
+ }
+
+ /**
+ * 设备维修管理,增加、删除
+ */
+ @PostMapping("/repair/{operation}")
+ @ResponseBody
+ public Object repairOperation(@PathVariable(name = "operation") String operateType, @RequestBody DeviceRepairLog deviceRepairLog) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(deviceInfoService.addDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增异常");
+ } else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(deviceInfoService.deleteDevicePairLog(deviceRepairLog) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除异常");
+ }
+ return null;
+ }
+
+ /**
+ * 设备维修详情
+ */
+ @PostMapping("/repair/detail")
+ @ResponseBody
+ public Object repairDetail(@RequestBody DeviceRepairLog deviceRepairLog) {
+ DeviceRepairLog repairLog = deviceInfoService.selectById(deviceRepairLog.getId());
+ return ResponseData.success(repairLog);
+ }
+
+ /**
+ * 闸机通道管理,即闸机分组管理
+ */
+ @PostMapping("/gateGroup/listPage")
+ @ResponseBody
+ public Object gateGroupListPage(@RequestBody GateGroupRequest gateGroupRequest) {
+ Page page = PageFactory.defaultPage();
+ List list = deviceInfoService.gateGroupListPage(page, gateGroupRequest);
+ return ResponseData.success(list);
+ }
+
+ /**
+ * 闸机分组增删改
+ */
+ @PostMapping("/gateGroup/{operation}")
+ @ResponseBody
+ public Object gateGroupOperation(@PathVariable(name = "operation") String operateType, @RequestBody GateGroupDTO gateGroupDTO) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return deviceInfoService.addGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return deviceInfoService.updateGateGroupDTO(gateGroupDTO);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return deviceInfoService.deleteGateGroupDTO(gateGroupDTO);
+ }
+ return null;
+ }
+
+ /**
+ * 闸机通道状态控制
+ */
+ @PostMapping("/gateGroup/statusControl")
+ @ResponseBody
+ public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) {
+ // TODO: 2022/7/27 海康门禁点反控需要门禁点唯一标识,需到现场导出海康一份再录入咱们平台使用(与设备编号关联上)
+ // TODO: 2022/7/27 门禁状态字典要与海康的状态相同
+ //0: 常开
+ //1: 门闭
+ //2: 门开
+ //3: 常闭
+
+ //通过分组id获取闸机编号列表
+ List deviceCodes = deviceInfoService.selectDeviceCodesByIds(gateGroupDTO.getIds());
+ if(CollectionUtils.isEmpty(deviceCodes)){
+ log.info("闸机通道状态控制:不存在分组的闸机编号,request:{}", gateGroupDTO);
+ return ResponseData.error("不存在分组下的闸机编号");
+ }
+ //海康门禁点反控
+ DoorControlRequest doorControlRequest = new DoorControlRequest();
+ //需根据设备编号获取到对应的门禁点唯一标识
+// doorControlRequest.setDoorIndexCodes();
+ doorControlRequest.setControlType(Integer.valueOf(gateGroupDTO.getStatus()));
+ String body = JSONObject.toJSONString(deviceCodes);
+ String resultStr = HikUtil.hikApi(HikUri.DOOR_CONTROL, body);
+ JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,门禁点反控失败,海康response:{}", resultStr);
+ return ResponseData.error("门禁点反控失败");
+ }
+ List hikDataList = (List) resultJson.get("data");
+ List failControlList = new ArrayList<>();
+ hikDataList.forEach(data -> {
+ if(0 != (Integer)data.get("controlResultCode")){
+ failControlList.add(String.valueOf(data.get("doorIndexCode")));
+ }
+ });
+ if(!CollectionUtils.isEmpty(failControlList)){
+ return ResponseData.error("门禁点:" + failControlList + "反控失败");
+ }
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
new file mode 100644
index 0000000..1a306ef
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/FireEquipController.java
@@ -0,0 +1,125 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.FireEquipRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.FireEquipInfo;
+import com.casic.missiles.modular.service.FireEquipService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 消防器材管理
+ * @Author: wangpeng
+ * @Date: 2022/7/27 14:11
+ */
+@Slf4j
+@RestController
+@RequestMapping("/fireEquip")
+public class FireEquipController extends ExportController {
+ @Autowired
+ private FireEquipService fireEquipService;
+
+ /**
+ * 消防器材列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody FireEquipRequest fireEquipRequest) {
+ Page page = PageFactory.defaultPage();
+ List fireEquipInfos = fireEquipService.fireEquipInfoListPage(page, fireEquipRequest);
+ page.setRecords(fireEquipInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 消防器材增删改
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody FireEquipInfo fireEquipInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return fireEquipService.addFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return fireEquipService.updateFireEquipInfo(fireEquipInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return fireEquipService.deleteFireEquipInfo(fireEquipInfo);
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(FireEquipInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getEquipCode()) || StrUtil.isEmpty(data.getEquipType())
+ || StrUtil.isEmpty(data.getEquipName()) || StrUtil.isEmpty(data.getProductDate())
+ || StrUtil.isEmpty(data.getExpireDate()) || StrUtil.isEmpty(data.getQualityDate())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("消防器材:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = fireEquipService.addFireEquipInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+ /**
+ * excel模板导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public void exportTemplate(HttpServletResponse response) throws IOException {
+ Resource resource = new ClassPathResource("config/export/fireEquipTemp.xlsx");
+ File file = resource.getFile();
+ // 设置以流的形式下载文件,这样可以实现任意格式的文件下载
+ response.setContentType("application/octet-stream");
+ response.addHeader("Content-Disposition", " attachment;filename=" + "fireEquipTemp.xlsx");
+ response.setContentLength((int) resource.getFile().length());
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(file);
+ byte[] buffer = new byte[1024];
+ int readTmp = 0;
+ while ((readTmp = fis.read(buffer)) != -1) {
+ response.getOutputStream().write(buffer, 0, readTmp);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ fis.close();
+ }
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
new file mode 100644
index 0000000..f707962
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/HazardLevelController.java
@@ -0,0 +1,63 @@
+package com.casic.missiles.modular.controller;
+
+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.dto.HazardLevelRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.CaseHazardLevel;
+import com.casic.missiles.modular.service.HazardLevelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * @Description: 安防事件级别Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/18 14:02
+ */
+@RestController
+@RequestMapping("/caseLevelInfo")
+public class HazardLevelController extends ExportController {
+ @Autowired
+ private HazardLevelService hazardLevelService;
+ /**
+ * 事件危险级别配置列表(分页)
+ * @return
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseHazardLevels = hazardLevelService.hazardLevelListPage(page, hazardLevelRequest);
+ page.setRecords(caseHazardLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 事件危险级别配置列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody HazardLevelRequest hazardLevelRequest) {
+ List caseHazardLevels = hazardLevelService.hazardLevelList(hazardLevelRequest);
+ return ResponseData.success(caseHazardLevels);
+ }
+
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody CaseHazardLevel caseHazardLevel) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return hazardLevelService.addHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return hazardLevelService.updateHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteHazardLevel(caseHazardLevel);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return hazardLevelService.deleteBatchHazardLevel(caseHazardLevel.getIds());
+ }
+ return null;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java
new file mode 100644
index 0000000..b58ccab
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.StaffInfoRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.StaffInfo;
+import com.casic.missiles.modular.service.StaffInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 员工管理Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/19 17:10
+ */
+
+@Slf4j
+@RestController
+@RequestMapping("/staffInfo")
+public class StaffController extends ExportController {
+ @Autowired
+ private StaffInfoService staffInfoService;
+
+ /**
+ * 员工列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody StaffInfoRequest staffInfoRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest);
+ page.setRecords(caseInfos);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 员工列表(不分页)
+ * @return
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public Object list(@RequestBody StaffInfoRequest staffInfoRequest) {
+ List staffInfos = staffInfoService.staffInfoList(staffInfoRequest);
+ return ResponseData.success(staffInfos);
+ }
+
+ /**
+ * 员工管理,增加、编辑、删除
+ */
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody StaffInfo staffInfo) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ return staffInfoService.addStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ return staffInfoService.updateStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ return staffInfoService.deleteStaffInfo(staffInfo);
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ return staffInfoService.deleteBatchStaffInfo(staffInfo.getIds());
+ }
+ return null;
+ }
+
+ /**
+ * 根据员工编号查员工信息
+ */
+ @PostMapping("/staffSearch")
+ @ResponseBody
+ public Object staffSearch(@RequestBody StaffInfo staffInfo) {
+ StaffInfo info = staffInfoService.selectStaffInfoByCode(staffInfo);
+ return ResponseData.success(info);
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(StaffInfo.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getStaffCode()) || StrUtil.isEmpty(data.getStaffName())
+ || StrUtil.isEmpty(data.getStaffType())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("员工:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = staffInfoService.addStaffInfoBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java
new file mode 100644
index 0000000..a7cf1f8
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+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.ErrorResponseData;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.VisitorApplyRequest;
+import com.casic.missiles.modular.enums.OperateTypeEnum;
+import com.casic.missiles.modular.model.VisitorApply;
+import com.casic.missiles.modular.service.VisitorApplyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 访客管理
+ * @Author: wangpeng
+ * @Date: 2022/7/19 19:32
+ */
+
+@Slf4j
+@RestController
+@RequestMapping("/applicationInfo")
+public class VisitorApplyController extends ExportController {
+ // TODO: 2022/7/23 访客申请增删改同时要增删改海康的预约,修改访客预约v2接口,取消操作使用取消访客预约
+ @Autowired
+ private VisitorApplyService visitorApplyService;
+ /**
+ * 访问申请列表(分页)
+ */
+ @PostMapping("/listPage")
+ @ResponseBody
+ public Object listPage(@RequestBody VisitorApplyRequest applyRequest) {
+ Page page = PageFactory.defaultPage();
+ List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest);
+ page.setRecords(caseCategoryLevels);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @PostMapping("/{operation}")
+ @ResponseBody
+ public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody VisitorApply visitorApply) {
+ if(OperateTypeEnum.ADD.getOperateType().equals(operateType)){
+ if(visitorApplyService.addVisitorApply(visitorApply) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("新增访问申请异常");
+ }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
+ if(visitorApplyService.updateVisitorApply(visitorApply) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("更新访问申请异常");
+ }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
+ if(visitorApplyService.deleteVisitorApply(visitorApply) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除访问申请异常");
+ }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
+ if(visitorApplyService.deleteBatchVisitorApply(visitorApply.getIds()) > 0){
+ return ResponseData.success();
+ }
+ return ResponseData.error("删除访问申请异常");
+ }
+ return null;
+ }
+
+ /**
+ * 批量导入
+ */
+ @PostMapping("/batchImport")
+ @ResponseBody
+ public Object batchImport(@RequestParam("file") MultipartFile file) {
+ List results = new ArrayList<>();
+ try {
+ results = this.importExcel(VisitorApply.class, file, null, (data) -> {
+ if (StrUtil.isEmpty(data.getStaffCode()) || StrUtil.isEmpty(data.getStaffName())
+ || StrUtil.isEmpty(data.getIdCard()) || StrUtil.isEmpty(data.getVisitorName())
+ ) {
+ return false;
+ }
+ return true;
+ });
+ } catch (IOException ex) {
+ log.error("访客申请:批量导入文件异常,异常信息:{}", ex.getMessage());
+ }
+ List list = visitorApplyService.addVisitorApplyBatch(results);
+ if (CollectionUtil.isNotEmpty(list)) {
+ //获取第校验报错信息
+ return new ErrorResponseData(list.get(0));
+ }
+ return ResponseData.success();
+ }
+
+}
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
new file mode 100644
index 0000000..15d0e30
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java
@@ -0,0 +1,168 @@
+package com.casic.missiles.modular.controller.hik;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.dto.hik.*;
+import com.casic.missiles.modular.enums.HikUri;
+import com.casic.missiles.modular.enums.SecurityEventType;
+import com.casic.missiles.modular.model.CaseInfo;
+import com.casic.missiles.modular.model.HikFaceGroupInfo;
+import com.casic.missiles.modular.service.CaseInfoService;
+import com.casic.missiles.modular.service.HikFaceGroupInfoService;
+import com.casic.missiles.modular.util.CaseInfoFactoryUtil;
+import com.casic.missiles.modular.util.HikUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 海康事件Controller
+ * @Author: wangpeng
+ * @Date: 2022/7/20 17:29
+ */
+@Slf4j
+@RestController
+@RequestMapping("/hik")
+public class HikController {
+
+ @Autowired
+ private CaseInfoFactoryUtil caseInfoFactoryUtil;
+
+ @Autowired
+ private CaseInfoService caseInfoService;
+
+ @Autowired
+ private HikFaceGroupInfoService hikFaceGroupInfoService;
+
+ @Value("${server.port}")
+ private int serverPort;
+
+ /**
+ * 海康事件订阅
+ */
+ @PostMapping("/event/subscribe")
+ @ResponseBody
+ public Object eventSubscribe() throws UnknownHostException {
+ EventSubscribeRequest eventSubscribeRequest = new EventSubscribeRequest();
+ ArrayList list = new ArrayList<>();
+ list.add(SecurityEventType.DEVICE_OFFLINE);
+ list.add(SecurityEventType.KEY_PERSONNEL_IDENTIFY_EVENT);
+ list.add(SecurityEventType.MONITORING_POINT_OFFLINE);
+ list.add(SecurityEventType.PERSONNEL_DEMOBILIZED_EVENT);
+ list.add(SecurityEventType.PERSONNEL_GATHER_EVENT);
+ InetAddress localHost = InetAddress.getLocalHost();
+ eventSubscribeRequest.setEventTypes(list);
+ eventSubscribeRequest.setEventDest("https://" + localHost + ":" + serverPort + "/eventRcv");
+ //订阅类型,0-订阅原始事件,1-联动事件,2-原始事件和联动事件,不填使用默认值0
+ eventSubscribeRequest.setSubType(0);
+ /**
+ * 事件等级,0-未配置,1-低,2-中,3-高
+ * 此处事件等级是指在事件联动中配置的等级
+ * 订阅类型为0时,此参数无效,使用默认值0
+ * 在订阅类型为1时,不填使用默认值[1,2,3]
+ * 在订阅类型为2时,不填使用默认值[0,1,2,3]
+ * 数组大小不超过32,事件等级大小不超过31
+ */
+// eventSubscribeDTO.setEventLvl(0);
+ String body = JSONObject.toJSONString(eventSubscribeRequest);
+ String result = HikUtil.hikApi(HikUri.EVENT_SUBSCRIBE, body);
+ return result;
+ }
+
+ /**
+ * 海康事件接收
+ */
+ @PostMapping("/eventRcv")
+ @ResponseBody
+ public Object eventRcv(@RequestBody HikRecvEvent hikRecvEvent) {
+ //1、接收所需事件类型
+ Long eventType = hikRecvEvent.getEventType();
+ CaseInfo caseInfo = caseInfoFactoryUtil.getCaseInfo(eventType);
+ //2、不同事件不同处理,caseInfoFactoryUtil已设置好事件基础定义信息
+ // 再为事件添加状态(未解决)、设备编码、设备名称、位置、区域、时间
+ // TODO: 2022/7/21 异步处理事件
+ // TODO: 2022/7/21 海康安装设备后,应该有设备和位置的对应关系表,可维护在设备表中,获取位置和区域信息
+ // TODO: 2022/7/21 位置和区域的概念
+ // TODO: 2022/7/21 kafka
+ JSONArray eventArray = hikRecvEvent.getEventArray();
+ ArrayList caseInfos = new ArrayList<>();
+ while (eventArray.stream().iterator().hasNext()) {
+ // TODO: 2022/7/23 设备过滤,仅将预设置的设备的事件入库,可建立一个设备与事件的表或放入配置中
+ JSONObject event = (JSONObject) eventArray.stream().iterator().next();
+ //ISO8601标准时间格式
+ //示例:2018-08-15T 15:53:47.000+08:00
+ String happenTimeISO = (String) event.get("happenTime");
+ DateTime parse = DateUtil.parse(happenTimeISO);
+ String happenTime = DateUtil.formatDateTime(parse);
+ caseInfo.setHappenTime(happenTime); //发生时间
+ // caseInfo.setStatus(); //事件状态
+ // caseInfo.setDeviceCode(); //设备code
+ // caseInfo.setDevName(); //设备名
+ // caseInfo.setPosition(); //事件位置
+ // caseInfo.setAreaName(); //区域
+ caseInfos.add(caseInfo);
+ }
+ //3、安防事件入库
+ caseInfoService.addCaseInfoBatch(caseInfos);
+ return null;
+ }
+
+ /**
+ * 单个添加海康人脸分组
+ * api->hik单个添加人脸分组api->response->mysql
+ */
+ @PostMapping("/faceGroup/single/add")
+ @ResponseBody
+ public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) {
+ String body = JSONObject.toJSONString(faceGroupAdditionRequest);
+ String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body);
+ JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr);
+ return ResponseData.error("添加人脸分组失败");
+ }
+ JSONObject dataJson = (JSONObject) resultJson.get("data");
+ String code = (String) dataJson.get("indexCode");
+ String name = (String) dataJson.get("name");
+ String description = (String) dataJson.get("description");
+ HikFaceGroupInfo hikFaceGroupInfo = new HikFaceGroupInfo();
+ hikFaceGroupInfo.setFaceGroupCode(code);
+ hikFaceGroupInfo.setFaceGroupName(name);
+ hikFaceGroupInfo.setFaceGroupDesc(description);
+ return hikFaceGroupInfoService.addFaceGroupInfo(hikFaceGroupInfo);
+ }
+
+ /**
+ * 批量添加海康组织
+ * api->hik批量添加组织api->response
+ */
+ @PostMapping("/org/batch/add")
+ @ResponseBody
+ public Object orgBatchAdd(@RequestBody List orgBatchAddRequest) {
+ String body = JSONObject.toJSONString(orgBatchAddRequest);
+ String resultStr = HikUtil.hikApi(HikUri.ORG_BATCH_ADD, body);
+ JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr);
+ if (!"0".equals(resultJson.get("code"))) {
+ log.error("请求海康,批量添加组织失败,海康response:{}", resultStr);
+ return ResponseData.error("批量添加组织失败");
+ }
+ JSONObject dataJson = (JSONObject) resultJson.get("data");
+ List