Browse Source

新增应急保障组管理平台,新增局本级弹窗接口,完善单位名称显示列表,

lyq 3 years ago
parent
commit
f36f3d4dd8
33 changed files with 1137 additions and 58 deletions
  1. 9 6
      spring-cloud/configer/src/main/resources/config/dev/gateway-dev.yml
  2. 9 6
      spring-cloud/configer/src/main/resources/config/prod/gateway-prod.yml
  3. 3 2
      spring-cloud/server-basic/src/main/java/com/jd/configer/ResourceServerConfig.java
  4. 10 4
      spring-cloud/server-basic/src/main/java/com/jd/controller/AttackTypeController.java
  5. 120 0
      spring-cloud/server-basic/src/main/java/com/jd/controller/GuaranteeGroupController.java
  6. 1 1
      spring-cloud/server-basic/src/main/java/com/jd/controller/OfficeController.java
  7. 8 6
      spring-cloud/server-basic/src/main/java/com/jd/controller/OfficeVirusController.java
  8. 0 4
      spring-cloud/server-basic/src/main/java/com/jd/controller/RiskTypeController.java
  9. 10 0
      spring-cloud/server-basic/src/main/java/com/jd/controller/SafetyInforController.java
  10. 46 0
      spring-cloud/server-basic/src/main/java/com/jd/entity/GuaranteeGroup.java
  11. 1 1
      spring-cloud/server-basic/src/main/java/com/jd/mapper/AttackTypeMapper.java
  12. 9 0
      spring-cloud/server-basic/src/main/java/com/jd/mapper/BasicDataMapper.java
  13. 69 0
      spring-cloud/server-basic/src/main/java/com/jd/mapper/GuaranteeGroupMapper.java
  14. 7 0
      spring-cloud/server-basic/src/main/java/com/jd/mapper/OfficeVirusMapper.java
  15. 1 1
      spring-cloud/server-basic/src/main/java/com/jd/service/AttackTypeService.java
  16. 49 0
      spring-cloud/server-basic/src/main/java/com/jd/service/GuaranteeGroupService.java
  17. 1 1
      spring-cloud/server-basic/src/main/java/com/jd/service/OfficeService.java
  18. 3 2
      spring-cloud/server-basic/src/main/java/com/jd/service/OfficeVirusService.java
  19. 13 0
      spring-cloud/server-basic/src/main/java/com/jd/service/SafetyInfoService.java
  20. 5 2
      spring-cloud/server-basic/src/main/java/com/jd/service/impl/AttackTypeServiceImpl.java
  21. 78 0
      spring-cloud/server-basic/src/main/java/com/jd/service/impl/GuaranteeGroupServiceImpl.java
  22. 1 1
      spring-cloud/server-basic/src/main/java/com/jd/service/impl/OfficeServiceImpl.java
  23. 50 2
      spring-cloud/server-basic/src/main/java/com/jd/service/impl/OfficeVirusServiceImpl.java
  24. 121 4
      spring-cloud/server-basic/src/main/java/com/jd/service/impl/SafetyInfoServiceImpl.java
  25. 2 2
      spring-cloud/server-basic/src/main/resources/mapper/AttackTypeMapper.xml
  26. 15 0
      spring-cloud/server-basic/src/main/resources/mapper/BasicDataMapper.xml
  27. 123 0
      spring-cloud/server-basic/src/main/resources/mapper/GuaranteeGroupMapper.xml
  28. 25 8
      spring-cloud/server-basic/src/main/resources/mapper/OfficeVirusMapper.xml
  29. 5 1
      spring-cloud/server-basic/src/main/resources/mapper/SafetyInfoMapper.xml
  30. 97 0
      spring-cloud/server-page/src/main/resources/static/page/guaranteeGroupManager.html
  31. 1 1
      spring-cloud/server-page/src/main/resources/static/page/js/basic/OfficeVirus.js
  32. 242 0
      spring-cloud/server-page/src/main/resources/static/page/js/basic/guaranteeGroupManager.js
  33. 3 3
      spring-cloud/server-page/src/main/resources/static/page/safetyInforManager.html

+ 9 - 6
spring-cloud/configer/src/main/resources/config/dev/gateway-dev.yml

@@ -81,30 +81,33 @@ filter:
     /apiUrl/,/queryData/,/uploadFiles/,/planArea/getDefaultPlanAreaList,/command/config/queryAll,\
     /api/scene/queryAll,/api/scene/theme/queryBySceneId,/api/scene/theme/queryByThemeId,\
     /apiNoProcess/,/themeInfo/getThemeInfoById,/initModuleInfo/getInitModuleAndClassInfo,/moduleInfo/saveModuleInfo,\
-    /upload/themeImgUpload,/themeInfo/addThemeInfo,/AttackType/getTop6AttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
+    /upload/themeImgUpload,/themeInfo/addThemeInfo,/AttackType/getTopAttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
     /RiskType/getWebRiskType,/RiskNews/getRiskNewsByInfo,/SystemRisk/analyzeSystemRisk,/safetyInfor/getSafetyInfoByMonth,\
     /safetyInfor/getRiskInfoByOrg,/safetyInfor/getSysStatusByOrg,/SystemRisk/getHighStatus,/SystemRisk/getHighStatusByMonth,\
-    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo"
+    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo,\
+    /safetyInfor/getWebSafetyStatusByOrg,/OfficeVirus/getOfficeSafetyInfo"
   # 不需要过参数过滤器的uri
   parameter:
     skip-uri: "/v2/api-docs,/doc.html,\
     /import/,/apiUrl/,/queryData/,/upload/,/uploadFiles/,/planArea/getDefaultPlanAreaList,/command/config/queryAll,\
     /api/scene/queryAll,/api/scene/theme/queryBySceneId,/api/scene/theme/queryByThemeId,\
     /apiNoProcess/,/themeInfo/getThemeInfoById,/initModuleInfo/getInitModuleAndClassInfo,/moduleInfo/saveModuleInfo,\
-    /upload/themeImgUpload,/AttackType/getTop6AttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
+    /upload/themeImgUpload,/AttackType/getTopAttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
     /RiskType/getWebRiskType,/RiskNews/getRiskNewsByInfo,/SystemRisk/analyzeSystemRisk,/safetyInfor/getSafetyInfoByMonth,\
     /safetyInfor/getRiskInfoByOrg,/safetyInfor/getSysStatusByOrg,/SystemRisk/getHighStatus,/SystemRisk/getHighStatusByMonth,\
-    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo"
+    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo,\
+    /safetyInfor/getWebSafetyStatusByOrg,/OfficeVirus/getOfficeSafetyInfo"
   # 不需要过返回封装过滤器的uri
   response:
     skip-uri: "/v2/api-docs,/doc.html,\
     /apiUrl/,/queryData/,/upload/,/uploadFiles/,/planArea/getDefaultPlanAreaList,/command/config/queryAll,\
     /api/scene/queryAll,/api/scene/theme/queryBySceneId,/api/scene/theme/queryByThemeId,\
     /apiNoProcess/,/themeInfo/getThemeInfoById,/initModuleInfo/getInitModuleAndClassInfo,/moduleInfo/saveModuleInfo,\
-    /upload/themeImgUpload,/themeInfo/addThemeInfo,/AttackType/getTop6AttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
+    /upload/themeImgUpload,/themeInfo/addThemeInfo,/AttackType/getTopAttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
     /RiskType/getWebRiskType,/RiskNews/getRiskNewsByInfo,/SystemRisk/analyzeSystemRisk,/safetyInfor/getSafetyInfoByMonth,\
     /safetyInfor/getRiskInfoByOrg,/safetyInfor/getSysStatusByOrg,/SystemRisk/getHighStatus,/SystemRisk/getHighStatusByMonth,\
-    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo"
+    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo,\
+    /safetyInfor/getWebSafetyStatusByOrg,/OfficeVirus/getOfficeSafetyInfo"
   # 登录接口
   login:
 #    skip-uri: "/user/userLogin,/flat/guide/login"

+ 9 - 6
spring-cloud/configer/src/main/resources/config/prod/gateway-prod.yml

@@ -80,28 +80,31 @@ filter:
     skip-uri: "/v2/api-docs,/doc.html,\
     /apiUrl/,/queryData/,/uploadFiles/,/planArea/getDefaultPlanAreaList,/command/config/queryAll,\
     /api/scene/queryAll,/api/scene/theme/queryBySceneId,/api/scene/theme/queryByThemeId,\
-    /apiNoProcess/,/AttackType/getTop6AttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
+    /apiNoProcess/,/AttackType/getTopAttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
     /RiskType/getWebRiskType,/RiskNews/getRiskNewsByInfo,/SystemRisk/analyzeSystemRisk,/safetyInfor/getSafetyInfoByMonth,\
     /safetyInfor/getRiskInfoByOrg,/safetyInfor/getSysStatusByOrg,/SystemRisk/getHighStatus,/SystemRisk/getHighStatusByMonth,\
-    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo"
+    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo,\
+    /safetyInfor/getWebSafetyStatusByOrg,/OfficeVirus/getOfficeSafetyInfo"
   # 不需要过参数过滤器的uri
   parameter:
     skip-uri: "/v2/api-docs,/doc.html,\
     /import/,/apiUrl/,/queryData/,/upload/,/uploadFiles/,/planArea/getDefaultPlanAreaList,/command/config/queryAll,\
     /api/scene/queryAll,/api/scene/theme/queryBySceneId,/api/scene/theme/queryByThemeId,\
-    /apiNoProcess/,/AttackType/getTop6AttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
+    /apiNoProcess/,/AttackType/getTopAttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
     /RiskType/getWebRiskType,/RiskNews/getRiskNewsByInfo,/SystemRisk/analyzeSystemRisk,/safetyInfor/getSafetyInfoByMonth,\
     /safetyInfor/getRiskInfoByOrg,/safetyInfor/getSysStatusByOrg,/SystemRisk/getHighStatus,/SystemRisk/getHighStatusByMonth,\
-    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo"
+    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo,\
+    /safetyInfor/getWebSafetyStatusByOrg,/OfficeVirus/getOfficeSafetyInfo"
   # 不需要过返回封装过滤器的uri
   response:
     skip-uri: "/v2/api-docs,/doc.html,\
     /apiUrl/,/queryData/,/upload/,/uploadFiles/,/planArea/getDefaultPlanAreaList,/command/config/queryAll,\
     /api/scene/queryAll,/api/scene/theme/queryBySceneId,/api/scene/theme/queryByThemeId,\
-    /apiNoProcess/,/AttackType/getTop6AttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
+    /apiNoProcess/,/AttackType/getTopAttackType,/RiskType/getSysRiskType,/SystemRisk/analyzeSystemRiskByMonth,\
     /RiskType/getWebRiskType,/RiskNews/getRiskNewsByInfo,/SystemRisk/analyzeSystemRisk,/safetyInfor/getSafetyInfoByMonth,\
     /safetyInfor/getRiskInfoByOrg,/safetyInfor/getSysStatusByOrg,/SystemRisk/getHighStatus,/SystemRisk/getHighStatusByMonth,\
-    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo"
+    /AttackEvent/getAttackEventByInfo,/AttackType/getAttackTypeBymonth,/SystemAttacked/getSystemAttackedByInfo,\
+    /safetyInfor/getWebSafetyStatusByOrg,/OfficeVirus/getOfficeSafetyInfo"
   # 登录接口
   login:
     skip-uri: /user/userLogin

+ 3 - 2
spring-cloud/server-basic/src/main/java/com/jd/configer/ResourceServerConfig.java

@@ -34,10 +34,11 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 					,"/command/config/queryAll"
 					,"/api/**","/apiNoProcess/**","/themeInfo/**","/moduleInfo/**","/initModuleInfo/getInitModuleAndClassInfo"
 					,"/upload/themeImgUpload","/flat/guide/login","/themeInfo/addThemeInfo"
-					,"/AttackType/getTop6AttackType","/RiskType/getSysRiskType","/RiskType/getWebRiskType","/SystemRisk/analyzeSystemRiskByMonth"
+					,"/AttackType/getTopAttackType","/RiskType/getSysRiskType","/RiskType/getWebRiskType","/SystemRisk/analyzeSystemRiskByMonth"
 					,"/RiskNews/getRiskNewsByInfo","/SystemRisk/analyzeSystemRisk","/safetyInfor/getSafetyInfoByMonth","/safetyInfor/getRiskInfoByOrg"
 					,"/safetyInfor/getSysStatusByOrg","/SystemRisk/getHighStatus","/SystemRisk/getHighStatusByMonth","/AttackEvent/getAttackEventByInfo"
-					,"/AttackType/getAttackTypeBymonth","/SystemAttacked/getSystemAttackedByInfo"
+					,"/AttackType/getAttackTypeByMonth","/SystemAttacked/getSystemAttackedByInfo","/safetyInfor/getWebSafetyStatusByOrg"
+					,"/OfficeVirus/getOfficeSafetyInfo"
 					).permitAll()			.anyRequest()
 			.authenticated()
 		.and()

+ 10 - 4
spring-cloud/server-basic/src/main/java/com/jd/controller/AttackTypeController.java

@@ -37,13 +37,19 @@ public class AttackTypeController {
     //需要验重的参数
     String[] keys = {};
 
-    @GetMapping("getTop6AttackType")
+    @GetMapping("getTopAttackType")
     @ApiOperation(value = "查询攻击类型前六")
-    public Map<String, Object> getTop6AttackType() {
-        return attackTypeService.getTop6AttackType();
+    public Map<String, Object> getTopAttackType(String orgType, Integer count) {
+        if(Blank.isEmpty(count)){
+            count = 6;
+        }
+        if(Blank.isEmpty(orgType)){
+            return SendUtil.send(false);
+        }
+        return attackTypeService.getTopAttackType(orgType, count);
     }
 
-    @GetMapping("getAttackTypeBymonth")
+    @GetMapping("getAttackTypeByMonth")
     @ApiOperation(value = "统计半年攻击类型")
     public Map<String, Object> getAttackTypeByMonth(String orgType){
         return attackTypeService.getAttackTypeByMonth(orgType);

+ 120 - 0
spring-cloud/server-basic/src/main/java/com/jd/controller/GuaranteeGroupController.java

@@ -0,0 +1,120 @@
+package com.jd.controller;
+
+import com.jd.code.ActionEnum;
+import com.jd.code.ConstString;
+import com.jd.code.ModelEnum;
+import com.jd.entity.GuaranteeGroup;
+import com.jd.entity.Office;
+import com.jd.service.GuaranteeGroupService;
+import com.jd.service.OfficeService;
+import com.jd.util.Blank;
+import com.jd.util.SendUtil;
+import com.jd.util.WebLog;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author LYQ
+ * @version 1.0.0
+ * @ClassName OfficeController.java
+ * @Description TODO
+ * @createTime 2022年04月14日 10:30:00
+ */
+@RestController
+@RequestMapping("GuaranteeGroup")
+public class GuaranteeGroupController {
+
+    @Autowired
+    private GuaranteeGroupService guaranteeGroupService;
+
+    //需要验重的参数
+    String[] keys = {};
+
+    /**
+     * 分页查询攻击类型
+     * @param page 页数
+     * @param limit 每页数据条数
+     * @param queryValue
+     * @return
+     */
+    @GetMapping("getGuaranteeGroupByPage")
+    @ApiOperation(value = "分页查询保障组成员")
+    public Map<String, Object> geGuaranteeGroupByPage(Integer page, Integer limit, String queryValue) {
+        if (Blank.isEmpty(page,limit)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("limit", limit);
+        map.put("startRows", (page - 1) * limit);
+        map.put("queryValue", queryValue);
+        return guaranteeGroupService.getGuaranteeGroup(map);
+    }
+
+    @GetMapping("getAllGuaranteeGroup")
+    @ApiOperation(value = "查询所有保障组成员")
+    public Map<String, Object> getAllGuaranteeGroup(String name) {
+            Map<String, Object> paramMap = new HashMap<>();
+            paramMap.put("name", name);
+            return guaranteeGroupService.getAllGuaranteeGroup(paramMap);
+    }
+
+
+    /**
+     * 插入攻击类型
+     * @param request
+     * @return
+     */
+    @PostMapping("insertGuaranteeGroup")
+    @ApiOperation(value = "插入保障组成员")
+    @WebLog(ModelEnum = ModelEnum.BASIC_DATA, ActionEnum = ActionEnum.ADD)
+    public Map<String, Object> insertGuaranteeGroup(GuaranteeGroup guaranteeGroup, HttpServletRequest request) {
+        // 判断参数
+        if (!Blank.checkObjectParamNotNull(guaranteeGroup, keys)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        Map<String, Object> result = guaranteeGroupService.insertGuaranteeGroup(guaranteeGroup);
+        return result;
+    }
+
+    /**
+     * 修改攻击类型
+     * @param request
+     * @return
+     */
+    @PostMapping("updateGuaranteeGroup")
+    @ApiOperation(value = "修改保障组成员")
+    @WebLog(ModelEnum = ModelEnum.BASIC_DATA, ActionEnum = ActionEnum.UPDATE)
+    public Map<String, Object> updateGuaranteeGroup(GuaranteeGroup guaranteeGroup, HttpServletRequest request) {
+        // 判断参数
+        if (!Blank.checkObjectParamNotNull(guaranteeGroup, keys)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        Map<String, Object> result = guaranteeGroupService.updateGuaranteeGroup(guaranteeGroup);
+        return result;
+    }
+
+    /**
+     * 删除攻击类型
+     * @param id 删除数据主键
+     * @param request 日志回调参数
+     * @return
+     */
+    @PostMapping("deleteGuaranteeGroup")
+    @ApiOperation(value = "删除保障组成员")
+    @WebLog(ModelEnum = ModelEnum.BASIC_DATA, ActionEnum = ActionEnum.DELETE)
+    public Map<String, Object> deleteGuaranteeGroup(Integer id, HttpServletRequest request) {
+        if (!Blank.notBlank(id)) {
+            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
+        }
+        Map<String, Object> result = guaranteeGroupService.deleteGuaranteeGroup(id);
+        return result;
+    }
+}

+ 1 - 1
spring-cloud/server-basic/src/main/java/com/jd/controller/OfficeController.java

@@ -109,7 +109,7 @@ public class OfficeController {
         if (!Blank.notBlank(id)) {
             return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
         }
-        Map<String, Object> result = officeService.deleteAttackType(id);
+        Map<String, Object> result = officeService.deleteOffice(id);
         return result;
     }
 }

+ 8 - 6
spring-cloud/server-basic/src/main/java/com/jd/controller/OfficeVirusController.java

@@ -59,13 +59,15 @@ public class OfficeVirusController {
         return officeVirusService.getOfficeVirus(map);
     }
 
-
-
-    @GetMapping("getOfficeVirusByMonth")
+    /**
+     * 获取中断安全态势
+     * @param orgType
+     * @return
+     */
+    @GetMapping("getOfficeSafetyInfo")
     @ApiOperation(value = "当月单位病毒漏洞列表")
-    Map<String, Object> getOfficeVirusByMonth(String orgType, HttpServletRequest request){
-
-        return null;
+    Map<String, Object> getOfficeSafetyInfo(String orgType){
+        return officeVirusService.getOfficeSafetyInfo(orgType);
     }
 
     /**

+ 0 - 4
spring-cloud/server-basic/src/main/java/com/jd/controller/RiskTypeController.java

@@ -63,10 +63,6 @@ public class RiskTypeController {
     @GetMapping("getSysRiskType")
     @ApiOperation(value = "查询系统漏洞类型")
     public Map<String, Object> getSysRiskType(Integer orgType, Integer count, Integer riskClassify) {
-        //验参
-        if(Blank.isEmpty(riskClassify) || Blank.isEmpty(orgType)){
-            return SendUtil.send(false, ConstString.REQUEST_WRONGPARAMS);
-        }
         //处理参数
         Map<String, Object> paramMap = new HashMap<>();
         if(Blank.isEmpty(count)){

+ 10 - 0
spring-cloud/server-basic/src/main/java/com/jd/controller/SafetyInforController.java

@@ -95,7 +95,17 @@ public class SafetyInforController {
         return safetyInfoService.getSysStatusByOrg(orgType);
     }
 
+    @GetMapping("getWebSafetyStatusByOrg")
+    @ApiOperation(value = "查询门户网站安全态势")
+    Map<String, Object> getWebSafetyStatusByOrg(String orgType){
+        return safetyInfoService.getWebSafetyStatusByOrg(orgType);
+    }
 
+    @GetMapping("analysisSafetyStatus")
+    @ApiOperation(value = "查询门户网站安全态势")
+    Map<String, Object> analysisSafetyStatus(String orgType){
+        return safetyInfoService.getWebSafetyStatusByOrg(orgType);
+    }
 
     /**
      * 插入安全信息

+ 46 - 0
spring-cloud/server-basic/src/main/java/com/jd/entity/GuaranteeGroup.java

@@ -0,0 +1,46 @@
+package com.jd.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author LYQ
+ * @version 1.0.0
+ * @ClassName office.java
+ * @Description 单位管理表
+ * @createTime 2022年04月13日 14:26:00
+ */
+@Data
+@ApiModel("应急保障组成员管理")
+@Accessors(chain = true)//开启链式操作
+public class GuaranteeGroup implements Serializable{
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("单位ID")
+    private String officeId;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("性别")
+    private String gender;
+
+    @ApiModelProperty("电话")
+    private String phone;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("修改时间")
+    private Date updateTime;
+}

+ 1 - 1
spring-cloud/server-basic/src/main/java/com/jd/mapper/AttackTypeMapper.java

@@ -38,7 +38,7 @@ public interface AttackTypeMapper {
      * 通过Type查询攻击类型数量
      * @return
      */
-    List<Map<String, Object>> getTop6AttackType(Integer infoId);
+    List<Map<String, Object>> getTopAttackType(Integer infoId, Integer count);
 
     /**
      * 获取单条攻击类型

+ 9 - 0
spring-cloud/server-basic/src/main/java/com/jd/mapper/BasicDataMapper.java

@@ -130,5 +130,14 @@ public interface BasicDataMapper {
 	 */
 	List<Map<String, Object>> getBasicDataByTypes(@Param("dataKeys") String[] dataKeys);
 
+	/**
+	 * 根类型模糊查询多个基础数据
+	 *
+	 * @Title: getBasicDataByType
+	 * @Description:
+	 * @param: @param dataKey
+	 * @param: @return
+	 */
+	List<Map<String, Object>> vagBasicDataByType(@Param("dataKey") String dataKey);
 
 }

+ 69 - 0
spring-cloud/server-basic/src/main/java/com/jd/mapper/GuaranteeGroupMapper.java

@@ -0,0 +1,69 @@
+package com.jd.mapper;
+
+import com.jd.entity.GuaranteeGroup;
+import com.jd.entity.Office;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author LYQ
+ * @version 1.0.0
+ * @ClassName officeMapper.java
+ * @Description TODO
+ * @createTime 2022年04月13日 20:22:00
+ */
+@Mapper
+public interface GuaranteeGroupMapper {
+    /**
+     * 查询单位数量
+     * @param param
+     * @return
+     */
+    Integer  getCountGuaranteeGroup(Map<String, Object> param);
+
+    /**
+     * 分页查询单位方法
+     * @return
+     */
+    List<Map<String, Object>> getGuaranteeGroup(Map<String, Object> param);
+
+    /**
+     * 获取所有保障组成员
+     * @param param
+     * @return
+     */
+    List<Map<String, Object>> getAllGuaranteeGroup(Map<String, Object> param);
+
+    /**
+     * 通过NMAE查询单位数量
+     * @return
+     */
+    Integer countGuaranteeGroupByName(GuaranteeGroup guaranteeGroup);
+
+
+    /**
+     * 获取单条单位
+     * @return
+     */
+    Map<String, Object> getGuaranteeGroupById(Map<String, Object> param);
+
+    /**
+     * 新增单位
+     *  @return
+     */
+    Boolean insertGuaranteeGroup(GuaranteeGroup guaranteeGroup);
+
+    /**
+     * 修改单位
+     * @return
+     */
+    Boolean updateGuaranteeGroup(GuaranteeGroup guaranteeGroup);
+
+    /**
+     * 删除单位
+     * @return
+     */
+    Boolean deleteGuaranteeGroup(Integer id);
+}

+ 7 - 0
spring-cloud/server-basic/src/main/java/com/jd/mapper/OfficeVirusMapper.java

@@ -43,6 +43,13 @@ public interface OfficeVirusMapper {
     List<Map<String, Object>> getOfficeVirusById(Map<String, Object> param);
 
     /**
+     * 获取中断安全态势
+     * @param param
+     * @return
+     */
+    Map<String, Object> getOfficeSafetyInfo(Map<String, Object> param);
+
+    /**
      * 新增攻击类型
      *  @return
      */

+ 1 - 1
spring-cloud/server-basic/src/main/java/com/jd/service/AttackTypeService.java

@@ -29,7 +29,7 @@ public interface AttackTypeService {
      * 获取当月前六条攻击类型
      * @return
      */
-    Map<String, Object> getTop6AttackType();
+    Map<String, Object> getTopAttackType(String orgType, Integer count);
 
     /**
      * 获取近半年攻击类型

+ 49 - 0
spring-cloud/server-basic/src/main/java/com/jd/service/GuaranteeGroupService.java

@@ -0,0 +1,49 @@
+package com.jd.service;
+
+import com.jd.entity.GuaranteeGroup;
+import com.jd.entity.Office;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * @author LYQ
+ * @version 1.0.0
+ * @ClassName officeService.java
+ * @Description TODO
+ * @createTime 2022年04月14日 09:26:00
+ */
+@Service
+public interface GuaranteeGroupService {
+    /**
+     * 分页查询单位方法
+     * @return
+     */
+    Map<String, Object> getGuaranteeGroup(Map<String, Object> param);
+
+    /**
+     * 获取单条单位
+     * @return
+     */
+    Map<String, Object> getGuaranteeGroupById(Map<String, Object> param);
+
+    Map<String, Object> getAllGuaranteeGroup(Map<String, Object> param);
+
+    /**
+     * 新增单位
+     *  @return
+     */
+    Map<String, Object> insertGuaranteeGroup(GuaranteeGroup guaranteeGroup);
+
+    /**
+     * 修改单位
+     * @return
+     */
+    Map<String, Object> updateGuaranteeGroup(GuaranteeGroup guaranteeGroup);
+
+    /**
+     * 删除单位
+     * @return
+     */
+    Map<String, Object> deleteGuaranteeGroup(Integer attackId);
+}

+ 1 - 1
spring-cloud/server-basic/src/main/java/com/jd/service/OfficeService.java

@@ -49,5 +49,5 @@ public interface OfficeService {
      * 删除单位
      * @return
      */
-    Map<String, Object> deleteAttackType(Integer attackId);
+    Map<String, Object> deleteOffice(Integer attackId);
 }

+ 3 - 2
spring-cloud/server-basic/src/main/java/com/jd/service/OfficeVirusService.java

@@ -26,10 +26,10 @@ public interface OfficeVirusService {
     Map<String, Object> getOfficeVirusById(Map<String, Object> param);
 
     /**
-     * 获取近半年攻击类型
+     * 获取中断安全态势
      * @return
      */
-    Map<String, Object> getOfficeVirusByMonth(String orgType);
+    Map<String, Object> getOfficeSafetyInfo(String orgType);
 
     /**
      * 新增攻击类型
@@ -48,4 +48,5 @@ public interface OfficeVirusService {
      * @return
      */
     Map<String, Object> deleteOfficeVirus(Integer id);
+
 }

+ 13 - 0
spring-cloud/server-basic/src/main/java/com/jd/service/SafetyInfoService.java

@@ -52,6 +52,19 @@ public interface SafetyInfoService {
     Map<String, Object> getSysStatusByOrg(String orgType);
 
     /**
+     * 计算当月安全等级与风险系数
+     * @param orgType
+     * @return
+     */
+    Map<String, Object> analysisSafetyStatus(String orgType);
+    /**
+     * 查询门户网站安全态势
+     * @param orgType
+     * @return
+     */
+    Map<String, Object> getWebSafetyStatusByOrg(String orgType);
+
+    /**
      * 修改安全数据
      * @return
      */

+ 5 - 2
spring-cloud/server-basic/src/main/java/com/jd/service/impl/AttackTypeServiceImpl.java

@@ -63,7 +63,7 @@ public class AttackTypeServiceImpl implements AttackTypeService {
     }
 
     @Override
-    public Map<String, Object> getTop6AttackType() {
+    public Map<String, Object> getTopAttackType(String orgType, Integer count) {
         //获取当前年月份
         Map<String, Object> map = new HashMap<>();
         Calendar calender = Calendar.getInstance();
@@ -71,6 +71,8 @@ public class AttackTypeServiceImpl implements AttackTypeService {
         Integer month = (calender.get(Calendar.MONTH)==0?12:calender.get(Calendar.MONTH)+1);
         map.put("createYear", year);
         map.put("createMonth", month);
+        map.put("orgType", orgType);
+        map.put("count", count);
         //获取当月对应的安全信息
         Map<String, Object> safetyInfo = safetyInfoMapper.getSafetyInfoByMonth(map);
         if(Blank.isEmpty(safetyInfo)){
@@ -84,7 +86,7 @@ public class AttackTypeServiceImpl implements AttackTypeService {
             return SendUtil.send(false);
         }
         //根据安全信息查询前六条攻击类型
-        List<Map<String, Object>> result = attackTypeMapper.getTop6AttackType(infoId);
+        List<Map<String, Object>> result = attackTypeMapper.getTopAttackType(infoId, count);
         return  SendUtil.send(result);
     }
 
@@ -100,6 +102,7 @@ public class AttackTypeServiceImpl implements AttackTypeService {
         for (int i = 0; i < 6; i++) {
             List<Map<String, Object>> attackType = new ArrayList<>();
             calendar.set(Calendar.MONTH,calendar.get(Calendar.MONTH)-1);
+            Integer attackCount = 0;
             // 需要判断月份是否为0  如果0则需要转换成12
             Map<String, Object> resultMap = new HashMap<>();
             Map<String, Object> timeMap = new HashMap<>();

+ 78 - 0
spring-cloud/server-basic/src/main/java/com/jd/service/impl/GuaranteeGroupServiceImpl.java

@@ -0,0 +1,78 @@
+package com.jd.service.impl;
+
+import com.jd.code.ConstString;
+import com.jd.entity.GuaranteeGroup;
+import com.jd.entity.Office;
+import com.jd.mapper.GuaranteeGroupMapper;
+import com.jd.service.GuaranteeGroupService;
+import com.jd.util.Blank;
+import com.jd.util.SendUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author LYQ
+ * @version 1.0.0
+ * @ClassName GuaranteeGroupServiceImpl.java
+ * @Description TODO
+ * @createTime 2022年04月27日 11:58:00
+ */
+@Service("GuaranteeGroupServiceImpl")
+public class GuaranteeGroupServiceImpl implements GuaranteeGroupService {
+
+    @Autowired
+    private GuaranteeGroupMapper guaranteeGroupMapper;
+
+    @Override
+    public Map<String, Object> getGuaranteeGroup(Map<String, Object> param) {
+        // 获取数量
+        Integer count = guaranteeGroupMapper.getCountGuaranteeGroup(param);
+        if(Blank.isEmpty(count) || count <= 0) {
+            return SendUtil.layuiTable(0, null);
+        }
+        //分页查询所有基础数据
+        List<Map<String, Object>> list = guaranteeGroupMapper.getGuaranteeGroup(param);
+        return SendUtil.layuiTable(count, list);
+    }
+
+    @Override
+    public Map<String, Object> getGuaranteeGroupById(Map<String, Object> param) {
+        return guaranteeGroupMapper.getGuaranteeGroupById(param);
+    }
+
+    @Override
+    public Map<String, Object> getAllGuaranteeGroup(Map<String, Object> param) {
+        return SendUtil.send(guaranteeGroupMapper.getAllGuaranteeGroup(param));
+    }
+
+    @Override
+    public Map<String, Object> insertGuaranteeGroup(GuaranteeGroup guaranteeGroup) {
+        // 判断当月添加的攻击类型不能相同
+        if(guaranteeGroupMapper.countGuaranteeGroupByName(guaranteeGroup) > 0){
+            return SendUtil.send(false, ConstString.RESULT_EXIST);
+        }
+        //新增
+        Boolean result = guaranteeGroupMapper.insertGuaranteeGroup(guaranteeGroup);
+        return SendUtil.send(result);
+    }
+
+    @Override
+    public Map<String, Object> updateGuaranteeGroup(GuaranteeGroup guaranteeGroup) {
+        // 判断当月添加的攻击类型不能相同
+        if(guaranteeGroupMapper.countGuaranteeGroupByName(guaranteeGroup) > 0){
+            return SendUtil.send(false, ConstString.RESULT_EXIST);
+        }
+        //新增
+        Boolean result = guaranteeGroupMapper.updateGuaranteeGroup(guaranteeGroup);
+        return SendUtil.send(result);
+    }
+
+    @Override
+    public Map<String, Object> deleteGuaranteeGroup(Integer id) {
+        Boolean result = guaranteeGroupMapper.deleteGuaranteeGroup(id);
+        return SendUtil.send(result);
+    }
+}

+ 1 - 1
spring-cloud/server-basic/src/main/java/com/jd/service/impl/OfficeServiceImpl.java

@@ -76,7 +76,7 @@ public class OfficeServiceImpl implements OfficeService {
     }
 
     @Override
-    public Map<String, Object> deleteAttackType(Integer id) {
+    public Map<String, Object> deleteOffice(Integer id) {
         Integer sysCount = businessSystemMapper.CountSystemByOffice(id);
         if(sysCount > 0){
             SendUtil.send(false);

+ 50 - 2
spring-cloud/server-basic/src/main/java/com/jd/service/impl/OfficeVirusServiceImpl.java

@@ -1,15 +1,20 @@
 package com.jd.service.impl;
 
+import cn.hutool.core.convert.Convert;
 import com.jd.code.ConstString;
 import com.jd.entity.AttackType;
 import com.jd.entity.OfficeVirus;
 import com.jd.mapper.OfficeVirusMapper;
+import com.jd.mapper.SafetyInfoMapper;
+import com.jd.mapper.VirusTypeMapper;
 import com.jd.service.OfficeVirusService;
 import com.jd.util.Blank;
 import com.jd.util.SendUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Calendar;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -25,6 +30,12 @@ public class OfficeVirusServiceImpl implements OfficeVirusService {
     @Autowired
     private OfficeVirusMapper officeVirusMapper;
 
+    @Autowired
+    private SafetyInfoMapper safetyInfoMapper;
+
+    @Autowired
+    private VirusTypeMapper virusTypeMapper;
+
     @Override
     public Map<String, Object> getOfficeVirus(Map<String, Object> param) {
         // 获取数量
@@ -43,8 +54,45 @@ public class OfficeVirusServiceImpl implements OfficeVirusService {
     }
 
     @Override
-    public Map<String, Object> getOfficeVirusByMonth(String orgType) {
-        return null;
+    public Map<String, Object> getOfficeSafetyInfo(String orgType) {
+        //返回参数
+        Map<String, Object> resultMap = new HashMap<>();
+        //请求参数
+        Map<String, Object> paramMap = new HashMap<>();
+        //时间
+        Calendar calender = Calendar.getInstance();
+        Integer year = calender.get(calender.YEAR);
+        Integer month = (calender.get(Calendar.MONTH)==0?12:calender.get(Calendar.MONTH)+1);
+        paramMap.put("createYear", year);
+        paramMap.put("createMonth", month);
+        paramMap.put("orgType", orgType);
+        //定位安全信息
+        Map<String, Object> safetyInfo = safetyInfoMapper.getSafetyInfoByMonth(paramMap);
+        if(Blank.isEmpty(safetyInfo)){
+            return SendUtil.send(false, "无数据");
+        }
+        if(Blank.isEmpty(safetyInfo.get("id"))){
+            return SendUtil.send(false, "无数据");
+        }
+        Integer infoId = Convert.toInt(safetyInfo.get("id").toString());
+        //查询感染台数,病毒总数
+        Map<String, Object> officeMap = new HashMap<>();
+        officeMap.put("infoId", infoId);
+        Map<String, Object> virusMap = officeVirusMapper.getOfficeSafetyInfo(officeMap);
+        if(Blank.isEmpty(virusMap)){
+            return SendUtil.send(false, "无数据");
+        }
+        if(Blank.isEmpty(virusMap.get("infected_number")) || Blank.isEmpty(virusMap.get("viruses_Tnumber"))){
+            return SendUtil.send(false, "无数据");
+        }
+        Integer infectedNumber = Convert.toInt(virusMap.get("infected_number").toString());
+        Integer virusesTNumber = Convert.toInt(virusMap.get("viruses_Tnumber").toString());
+        //查询病毒类型
+        List<Map<String, Object>> virus = virusTypeMapper.getVirusTypeById(officeMap);
+        resultMap.put("infectedNumber", infectedNumber);
+        resultMap.put("virusesTNumber", virusesTNumber);
+        resultMap.put("virus", virus);
+        return SendUtil.send(resultMap);
     }
 
     @Override

+ 121 - 4
spring-cloud/server-basic/src/main/java/com/jd/service/impl/SafetyInfoServiceImpl.java

@@ -7,6 +7,7 @@ import com.jd.mapper.*;
 import com.jd.service.SafetyInfoService;
 import com.jd.util.Blank;
 import com.jd.util.SendUtil;
+import com.netflix.discovery.converters.Auto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import zipkin2.reporter.Sender;
@@ -45,6 +46,18 @@ public class SafetyInfoServiceImpl implements SafetyInfoService {
     @Autowired
     private AttackEventMapper attackEventMapper;
 
+    @Autowired
+    private WebAttackTypeMapper webAttackTypeMapper;
+
+    @Autowired
+    private OfficeVirusMapper officeVirusMapper;
+
+    @Autowired
+    private VirusTypeMapper virusTypeMapper;
+
+    @Autowired
+    private BasicDataMapper basicDataMapper;
+
     @Override
     public Map<String, Object> getSafetyInfo(Map<String, Object> param) {
         Integer count = safetyInfoMapper.getCountSafetyInfo(param);
@@ -153,20 +166,20 @@ public class SafetyInfoServiceImpl implements SafetyInfoService {
         //受攻击总次数
         Map<String, Object> safetyInfo = safetyInfoMapper.getSafetyInfoByMonth(paramMap);
         if(Blank.isEmpty(safetyInfo)){
-            return SendUtil.send(false);
+            return SendUtil.send(false, "无数据");
         }
         if(Blank.isEmpty(safetyInfo.get("month_attack_count")) || Blank.isEmpty(safetyInfo.get("id"))){
-            return SendUtil.send(false);
+            return SendUtil.send(false, "无数据");
         }
         Integer monthAttackCount = Convert.toInt(safetyInfo.get("month_attack_count").toString());
         Integer infoId = Convert.toInt(safetyInfo.get("id").toString());
         //低中度危险系统数
         Map<String, Object> sysStatus = systemRiskMapper.countSysStatus(infoId);
         if(Blank.isEmpty(sysStatus)){
-            return SendUtil.send(false);
+            return SendUtil.send(false, "无数据");
         }
         if(Blank.isEmpty(sysStatus.get("safe")) || Blank.isEmpty(sysStatus.get("middle"))){
-            return SendUtil.send(false);
+            return SendUtil.send(false, "无数据");
         }
         Integer safeSystemCount = Convert.toInt(sysStatus.get("safe").toString());
         Integer middleSystemCount = Convert.toInt(sysStatus.get("middle").toString());
@@ -179,6 +192,107 @@ public class SafetyInfoServiceImpl implements SafetyInfoService {
     }
 
     @Override
+    public Map<String, Object> analysisSafetyStatus(String orgType) {
+        //获取当前月份
+        //返回参数
+        Map<String, Object> resultMap = new HashMap<>();
+        //请求参数
+        Map<String, Object> paramMap = new HashMap<>();
+        //时间
+        Calendar calender = Calendar.getInstance();
+        Integer year = calender.get(calender.YEAR);
+        Integer month = (calender.get(Calendar.MONTH)==0?12:calender.get(Calendar.MONTH)+1);
+        paramMap.put("createYear", year);
+        paramMap.put("createMonth", month);
+        paramMap.put("orgType", orgType);
+        //计算安全等级
+        //查询当月漏洞数
+        Map<String, Object> safetyInfo = safetyInfoMapper.getSafetyInfoByMonth(paramMap);
+        if(Blank.isEmpty(safetyInfo)){
+            return SendUtil.send(false, "无数据");
+        }
+        if(Blank.isEmpty(safetyInfo.get("middle_risk_number")) || Blank.isEmpty(safetyInfo.get("high_risk_number"))){
+            return SendUtil.send(false, "无数据");
+        }
+        Integer safetyLevel = 0;
+        Integer highRiskNumber = Convert.toInt(safetyInfo.get("high_risk_number").toString());
+        Integer middleRiskNumber = Convert.toInt(safetyInfo.get("middle_risk_number").toString());
+        // 高危漏洞规则分割值1
+        Integer safetyHighFlag_1 = 0;
+        // 高危漏洞规则分割值2
+        Integer safetyHighFlag_2 = 0;
+        // 中危漏洞规则分割值1
+        Integer safetyMiddleFlag_1 = 0;
+        // 中危漏洞规则分割值2
+        Integer safetyMiddleFlag_2 = 0;
+        //获取安全等级计算规则
+        List<Map<String, Object>> basicMap = basicDataMapper.vagBasicDataByType("AQDJ");
+        for (Map<String, Object> map : basicMap) {
+            if (map.get("data_key").equals("AQDJ_HIGH_001")){
+                safetyHighFlag_1 = Convert.toInt(map.get("data_value").toString());
+            }else if (map.get("data_key").equals("AQDJ_HIGH_002")){
+                safetyHighFlag_2 = Convert.toInt(map.get("data_value").toString());
+            }else if (map.get("data_key").equals("AQDJ_MIDDLE_001")){
+                safetyMiddleFlag_1 = Convert.toInt(map.get("data_value").toString());
+            }else if (map.get("data_key").equals("AQDJ_MIDDLE_002")){
+                safetyMiddleFlag_2 = Convert.toInt(map.get("data_value").toString());
+            }
+        }
+        //安全等级 差
+        if (highRiskNumber > safetyHighFlag_2 || middleRiskNumber > safetyMiddleFlag_2) {
+            safetyLevel = 3;
+        }else if ((safetyHighFlag_1 <= highRiskNumber && highRiskNumber <= safetyHighFlag_2)
+                || (middleRiskNumber > safetyMiddleFlag_1 && middleRiskNumber <= safetyMiddleFlag_2)) {
+            safetyLevel = 2;
+        }else {
+            safetyLevel = 1;
+        }
+        //计算风险系数
+        resultMap.put("safetyLevel", safetyLevel);
+        return SendUtil.send(resultMap);
+    }
+
+    @Override
+    public Map<String, Object> getWebSafetyStatusByOrg(String orgType) {
+        //查询网络安全态势
+        //返回参数
+        Map<String, Object> resultMap = new HashMap<>();
+        //查询参数
+        Map<String, Object> paramMap = new HashMap<>();
+        //当前时间
+        Calendar calender = Calendar.getInstance();
+        Integer year = calender.get(calender.YEAR);
+        Integer month = (calender.get(Calendar.MONTH)==0?12:calender.get(Calendar.MONTH)+1);
+        paramMap.put("createYear", year);
+        paramMap.put("createMonth", month);
+        paramMap.put("orgType", orgType);
+        //定位安全信息
+        Map<String, Object> safetyInfo = safetyInfoMapper.getSafetyInfoByMonth(paramMap);
+        if(Blank.isEmpty(safetyInfo)){
+            return SendUtil.send(false, "无数据");
+        }
+        if(Blank.isEmpty(safetyInfo.get("id")) || Blank.isEmpty(safetyInfo.get("safety_status_first"))
+        || Blank.isEmpty(safetyInfo.get("high_risk_number_first")) || Blank.isEmpty(safetyInfo.get("safety_status_second"))
+                || Blank.isEmpty(safetyInfo.get("high_risk_number_second"))){
+            return SendUtil.send(false, "无数据");
+        }
+        Integer safetyStatusFirst = Convert.toInt(safetyInfo.get("safety_status_first").toString());
+        Integer highRiskNumberFirst = Convert.toInt(safetyInfo.get("high_risk_number_first").toString());
+        Integer safetyStatusSecond = Convert.toInt(safetyInfo.get("safety_status_second").toString());
+        Integer highRiskNumberSecond = Convert.toInt(safetyInfo.get("high_risk_number_second").toString());
+        Integer infoId = Convert.toInt(safetyInfo.get("id").toString());
+        Map<String, Object> webMap = new HashMap<>();
+        webMap.put("infoId", infoId);
+        List webAttackTypeList = webAttackTypeMapper.getAttackTypeById(webMap);
+        resultMap.put("safetyStatusFirst", safetyStatusFirst);
+        resultMap.put("highRiskNumberFirst", highRiskNumberFirst);
+        resultMap.put("safetyStatusSecond", safetyStatusSecond);
+        resultMap.put("highRiskNumberSecond", highRiskNumberSecond);
+        resultMap.put("webAttackTypeList", webAttackTypeList);
+        return SendUtil.send(resultMap);
+    }
+
+    @Override
     public Map<String, Object> updateSafetyInfo(SafetyInfo safetyInfo) {
         //判断每月只插入一条数据
         if(safetyInfoMapper.CountSafetyInfoByMoth(safetyInfo) > 0){
@@ -196,6 +310,9 @@ public class SafetyInfoServiceImpl implements SafetyInfoService {
         systemAttackedMapper.deleteSystemAttackedInfoByInfo(InfoId);
         riskNewsMapper.deleteRiskNewsByInfo(InfoId);
         attackEventMapper.deleteAttackEventByInfo(InfoId);
+        webAttackTypeMapper.deleteAttackTypeByInfo(InfoId);
+        officeVirusMapper.deleteOfficeVirusByInfo(InfoId);
+        virusTypeMapper.deleteVirusTypeByInfo(InfoId);
 
         //删除安全信息
         return SendUtil.send(safetyInfoMapper.deleteSafetyInfo(InfoId));

+ 2 - 2
spring-cloud/server-basic/src/main/resources/mapper/AttackTypeMapper.xml

@@ -34,7 +34,7 @@
         LIMIT #{startRows}, #{limit}
     </select>
 
-    <select id="getTop6AttackType" resultType="map">
+    <select id="getTopAttackType" resultType="map">
         SELECT
         id,
         info_id,
@@ -46,7 +46,7 @@
         attack_type
         WHERE info_id = #{infoId}
         ORDER BY attack_count DESC
-        LIMIT 6
+        LIMIT #{count}
     </select>
 
     <!-- 查询攻击类型 -->

+ 15 - 0
spring-cloud/server-basic/src/main/resources/mapper/BasicDataMapper.xml

@@ -104,6 +104,21 @@
 		WHERE
 			data_key = #{dataKey}
 	</select>
+
+	<!-- 根据类型获取基础数据 -->
+	<select id="vagBasicDataByType" resultType="map">
+		SELECT
+			data_id,
+			data_key,
+			data_value,
+			description,
+			create_time,
+			update_time
+		FROM
+			t_basic_data
+		WHERE
+			data_key LIKE  CONCAT("%","AQDJ","%")
+	</select>
 	
 	<!-- 查询单条基础数据 -->
 	<select id="getOneBasicDataById" resultType="map">

+ 123 - 0
spring-cloud/server-basic/src/main/resources/mapper/GuaranteeGroupMapper.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.jd.mapper.GuaranteeGroupMapper">
+
+    <!-- 分页查询攻击类型 -->
+    <select id="getCountGuaranteeGroup" resultType="Integer" parameterType="map">
+        SELECT count(*) FROM t_guarantee_group
+        <where>
+            <if test="officeName != null and officeName != ''">
+                AND name = #{name}
+            </if>
+        </where>
+    </select>
+
+    <!-- 分页查询攻击类型 -->
+    <select id="getGuaranteeGroup" resultType="map" parameterType="map">
+        SELECT
+            gg.id,
+            office_id,
+            o.office_name,
+        name,
+            gender,
+            gg.create_time,
+            gg.update_time
+        FROM
+            t_guarantee_group gg
+        LEFT JOIN
+            t_office o ON gg.office_id = o.id
+        <where>
+            <if test="officeName != null and officeName != ''">
+                AND office_name = #{officeName}
+            </if>
+        </where>
+        ORDER BY create_time DESC
+        LIMIT #{startRows}, #{limit}
+    </select>
+
+    <!-- 分页查询攻击类型 -->
+    <select id="getAllGuaranteeGroup" resultType="map" parameterType="map">
+        SELECT
+        id,
+        office_id,
+        name,
+        gender,
+        create_time,
+        update_time
+        FROM
+        t_guarantee_group
+        <where>
+            <if test="name != null and name != ''">
+                AND name = #{name}
+            </if>
+        </where>
+    </select>
+
+    <!-- 查询攻击类型 -->
+    <select id="getGuaranteeGroupById" resultType="map" parameterType="map">
+        SELECT
+            id,
+            office_id,
+            name,
+            gender,
+            create_time,
+            update_time
+        FROM
+            t_guarantee_group
+        WHERE id = #{id}
+        ORDER BY create_time DESC
+    </select>
+
+    <select id="countGuaranteeGroupByName" resultType="Integer" parameterType="map">
+        SELECT
+        count(*)
+        FROM
+        t_guarantee_group
+        <where>
+            <if test="name != null and name != ''">
+                AND name = #{name}
+            </if>
+            <if test="id != null and id != ''">
+                AND id != #{id}
+            </if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+
+    <!-- 新增攻击类型-->
+    <insert id="insertGuaranteeGroup"  useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO
+            t_guarantee_group
+        ( office_id,
+          name,
+          gender,
+          create_time)
+        VALUES
+        (#{officeId},
+         #{name},
+         #{gender},
+         now())
+    </insert>
+
+    <!-- 修改攻击类型-->
+    <update id="updateGuaranteeGroup"  parameterType="com.jd.entity.SafetyInfo" >
+        UPDATE t_guarantee_group SET
+        <if test="officeId != null and officeId != ''">
+            office_id = #{officeId},
+        </if>
+        <if test="name != null and name != ''">
+            name = #{name},
+        </if>
+        <if test="gender != null and gender != ''">
+            gender = #{gender},
+        </if>
+        update_time = now()
+        WHERE id = #{id}
+    </update>
+
+    <!-- 删除攻击类型-->
+    <delete id="deleteGuaranteeGroup">
+        DELETE FROM t_guarantee_group WHERE id = #{id}
+    </delete>
+
+</mapper>

+ 25 - 8
spring-cloud/server-basic/src/main/resources/mapper/OfficeVirusMapper.xml

@@ -16,15 +16,17 @@
     <!-- 分页查询攻击类型 -->
     <select id="getOfficeVirus" resultType="map" parameterType="map">
         SELECT
-        id,
-        info_id,
-        office_id,
-        infected_number,
-        viruses_Tnumber,
-        create_time,
-        update_time
+            ov.id,
+            ov.info_id,
+            o.office_name,
+            ov.office_id,
+            ov.infected_number,
+            ov.viruses_Tnumber,
+            ov.create_time,
+            ov.update_time
         FROM
-        office_virus
+            office_virus ov
+        LEFT JOIN t_office o ON ov.office_id = o.id
         <where>
             <if test="officeId != null and officeId != ''">
                 AND office_id = #{officeId}
@@ -77,6 +79,21 @@
         ORDER BY create_time DESC
     </select>
 
+    <select id="getOfficeSafetyInfo" resultType="map" parameterType="map">
+        SELECT
+            info_id,
+            SUM(infected_number) infected_number,
+            SUM(viruses_Tnumber) viruses_Tnumber
+        FROM office_virus
+        <where>
+            <if test="infoId != null and infoId != ''">
+                AND info_id = #{infoId}
+            </if>
+        </where>
+        GROUP BY
+            info_id
+    </select>
+
     <!-- 新增攻击类型-->
     <insert id="insertOfficeVirus"  useGeneratedKeys="true" keyProperty="id">
         INSERT INTO

+ 5 - 1
spring-cloud/server-basic/src/main/resources/mapper/SafetyInfoMapper.xml

@@ -48,7 +48,11 @@
             high_risk_number_first,
             safety_status_second,
             high_risk_number_second,
-            org_type
+            org_type,
+            safety_status_first,
+            high_risk_number_first,
+            safety_status_second,
+            high_risk_number_second
         FROM safety_info
         <where>
             <if test="orgType != null and orgType != ''">

+ 97 - 0
spring-cloud/server-page/src/main/resources/static/page/guaranteeGroupManager.html

@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="UTF-8">
+		<meta name="renderer" content="webkit">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<title>应急保障组成员管理</title>
+		<link rel="stylesheet" type="text/css" href="layui/css/layui.css" />
+		<link rel="stylesheet" type="text/css" href="css/new_form.css"/>
+		<link rel="stylesheet" type="text/css" href="css/admin.css" />
+		<link rel="stylesheet" type="text/css" href="css/common.css" />
+		<link rel="stylesheet" type="text/css" href="css/animate.css" />
+	</head>
+	<body>
+		<!-- 主要内容 -->
+		<div class="main fadeIn animated">
+			<div class="header_title"><span>应急保障组成员管理</span></div>
+		
+			<div class="main_content">
+				<table class="layui-hide" id="guaranteeGroupTable" lay-filter="guaranteeGroupTable"></table>
+				<!--安全信息表头按钮-->
+				<script type="text/html" id="guaranteeGroupTable_toolbar">
+					{{# if (sessionStorage.getItem("menuid-" + sessionStorage.MENU_ID + "-add")  == 'add') { }}
+					<div class="layui-btn-container">
+						<button class="layui-btn layui-btn-sm main_head_btn" lay-event="add"><span class="iconfont">&#xe607;</span>新增</button>
+					</div>
+					{{# } }}
+				</script>
+				<!--安全信息表间按钮-->
+				<script type="text/html" id="guaranteeGroupTable_bar">
+					{{# if (sessionStorage.getItem("menuid-" + sessionStorage.MENU_ID + "-update") == 'update') { }}
+					<a class="main_tab_btn" lay-event="edit" style="color: #64ADF9;"><span class="iconfont">&#xe637;</span>编辑</a>
+					{{# } }}
+					{{# if (sessionStorage.getItem("menuid-" + sessionStorage.MENU_ID + "-delete") == 'delete') { }}
+					<a class="main_tab_btn" lay-event="del" style="color: #FC7D8C;"><span class="iconfont">&#xe78d;</span>删除</a>
+					{{# } }}
+				</script>
+			</div>
+		</div>
+
+		<!-- 新增单位信息 -->
+		<div class="add layui-hide fadeIn animated">
+			<div class="header_title"><span>新增</span></div>
+			<div class="main_content">
+				<form class="layui-form" action="" id="guaranteeGroup" lay-filter="guaranteeGroup">
+					<input type="text" name="id" id="guaranteeGroupID" class="layui-hide"/>
+					<div class="layui-form-item">
+						<label class="layui-form-label">单位名称:</label>
+						<div class="layui-input-inline">
+							<select name="officeId" lay-search="" id="officeId" lay-filter="officeId">
+								
+							</select>
+						</div>
+					</div>
+					<div class="layui-form-item">
+						<label class="layui-form-label">姓名:</label>
+						<div class="layui-input-inline">
+							<input type="text" name="name" id="name" required  lay-verify="required" 
+							placeholder="请输入单位名称" autocomplete="off" class="layui-input">
+						</div>
+					</div>
+					<div class="layui-form-item">
+						<label class="layui-form-label">性别:</label>
+						<div class="layui-input-inline">
+							<select name="gender" lay-search="" id="gender" lay-filter="gender">
+								<option value="">请性别</option>
+								<option value="1">男</option>
+								<option value="2">女</option>
+							</select>
+						</div>
+					</div>
+					<div class="layui-form-item">
+						<div class="layui-input-block">
+							<button type="submit" id="submit" class="layui-btn submit_btn" lay-submit="" lay-filter="submit" submitType="" 
+								style="margin-top: 30px;">提交</button>
+							<button class="layui-btn layui-btn-primary back back_btn" style="margin-top: 30px;">返回</button>
+						</div>
+					</div>
+				</form>
+			</div>
+		</div>
+		
+		<!--引入基础JS文件-->
+		<script src="layui/layui.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/common.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/constants.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/js-util.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/basic/guaranteeGroupManager.js" type="text/javascript" charset="utf-8"></script>
+	</body>
+
+</html>
+
+
+
+

+ 1 - 1
spring-cloud/server-page/src/main/resources/static/page/js/basic/OfficeVirus.js

@@ -27,7 +27,7 @@ layui.config({
 		cellMinWidth: 80,
 		cols: [
 			[{
-				field:'office_id', width:100, title: '单位名称'
+				field:'office_name', width:100, title: '单位名称'
 			}, {
 				field:'infected_number', width:100, title: '感染台数'
 			}, {

+ 242 - 0
spring-cloud/server-page/src/main/resources/static/page/js/basic/guaranteeGroupManager.js

@@ -0,0 +1,242 @@
+var form, table;
+layui.config({
+    base: 'js/encryption/'
+}).use(['layer', 'form', 'element', 'jquery', 'table', 'layedit', 'laydate', 'upload', 'ajax'], function () {
+    layer = layui.layer,
+        element = layui.element,
+        layedit = layui.layedit,
+        laydate = layui.laydate,
+        upload = layui.upload,
+        table = layui.table,
+        form = layui.form,
+        $ = layui.jquery;
+    ly = layui.ajax;
+	
+	initBusinessSystemType();
+	
+    // 主要表格
+    table.render({
+        elem: '#guaranteeGroupTable',
+        url: PAGE_BASIC + '/GuaranteeGroup/getGuaranteeGroupByPage',
+        toolbar: '#guaranteeGroupTable_toolbar', //开启头部工具栏,并为其绑定左侧模板
+        page: true,
+        cols: [
+            [{
+                type: 'numbers',
+                title: '序号',
+                fixed: 'left'
+            }, {
+                field: 'office_name',
+                title: '单位名称',
+            }, {
+                field: 'name',
+                title: '姓名'
+            }, {
+                field: 'gender',
+                title: '性别',
+				templet: function(res){
+					if(res.gender == 1){
+						return "男";
+					}else{
+						return "女";
+					}
+				}
+            }, {
+                field: 'create_time',
+                title: '修改时间'
+            }, {
+                fixed: 'right',
+                title: '操作',
+                toolbar: '#guaranteeGroupTable_bar',
+                width: 150
+            }]
+        ]
+    });
+
+    //头工具栏事件(主要表格)
+    table.on('toolbar(guaranteeGroupTable)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch (obj.event) {
+            case 'add': //新增
+                $(".main").addClass("layui-hide").removeClass("layui-show");
+                $(".add").addClass("layui-show").removeClass("layui-hide");
+                $('#submit').attr('submitType', 'insert');
+                $(".add .header_title span").html("新增");
+                $("#guaranteeGroup")[0].reset();
+				
+				// 数据初始化
+				$("#officeId").val("");
+				$("#name").val("");
+				$("#gender").val("");
+				form.render();
+                break;
+        };
+    });
+
+    //监听行工具事件(主要表格)
+    table.on('tool(guaranteeGroupTable)', function (obj) {
+        var data = obj.data;
+        if (obj.event === 'del') {
+			layer.confirm('是否确认删除', function (index) {
+				deleteguaranteeGroup(data.id);
+				layer.close(index);
+			});
+        } else if (obj.event === 'edit') {
+            $(".main").addClass("layui-hide").removeClass("layui-show");
+            $(".add").addClass("layui-show").removeClass("layui-hide");
+            $(".add .header_title span").html("编辑");
+            $('#submit').attr('submitType', 'update');
+
+            // 数据初始化
+			$("#guaranteeGroupID").val("");
+			$("#officeId").val("");
+			$("#name").val("");
+			$("#gender").val("");
+			$("#guaranteeGroupID").val(data.id);
+			$("#officeId").val(data.officeId);
+			$("#name").val(name);
+			$("#gender").val(data.gender);
+			form.render();
+			
+        }
+    });
+	
+    // 监听提交按钮
+    form.on('submit(submit)', function (data) {
+        var submitType = data.elem.getAttribute("submitType");
+        // 新增
+        if (submitType == 'insert') {
+            addguaranteeGroup();
+            return false;
+        } else if (submitType == 'update') {
+            updateguaranteeGroup();
+            return false;
+        }
+    });
+
+    // 返回
+    $(".back").click(function () {
+        $(".main").addClass("layui-show").removeClass("layui-hide");
+        $(".add").addClass("layui-hide").removeClass("layui-show");
+    })
+
+});
+
+function addguaranteeGroup() {
+    var postData = form.val('guaranteeGroup');
+    index = layer.load(2);
+	ly.ajax({
+        type: 'POST',
+        url: PAGE_BASIC + '/GuaranteeGroup/insertGuaranteeGroup',
+        dataType: 'json',
+        data: postData,
+		success: function (json) {
+            if (json.result) {
+				layer.msg("新增单位成功!", {icon: 6});
+				$(".main").addClass("layui-show").removeClass("layui-hide");
+				$(".add").addClass("layui-hide").removeClass("layui-show");
+                reloadTable();
+            } else if (json.msg = 'EXIST') {
+                layer.msg("新增失败,分类名称重复", {icon: 5});
+            } else {
+                layer.msg("新增失败", {icon: 5});
+            }
+            layer.close(index);
+        },
+		error: function (msg) {
+            layer.close(index);
+            goPage(msg, 1);
+        }
+	});
+}
+
+function updateguaranteeGroup() {
+	var postData = form.val('guaranteeGroup');
+	index = layer.load(2);
+    ly.ajax({
+        type: 'POST',
+        url: PAGE_BASIC + '/GuaranteeGroup/updateGuaranteeGroup',
+        dataType: 'json',
+        data: postData,
+        success: function (json) {
+            if (json.result) {
+                layer.msg("信息提交成功", {icon: 6});
+                $(".main").addClass("layui-show").removeClass("layui-hide");
+                $(".add").addClass("layui-hide").removeClass("layui-show");
+                reloadTable();
+            } else if (json.msg = 'EXIST') {
+                layer.msg("操作失败,每月只允许插入一条", {icon: 5});
+            } else {
+                layer.msg("操作失败", {icon: 5});
+            }
+            layer.close(index);
+        },
+        error: function (msg) {
+            layer.close(index);
+            goPage(msg, 1);
+        }
+    });
+}
+
+/* 删除基础数据 */
+function deleteguaranteeGroup(id) {
+    index = layer.load(2);
+    ly.ajax({
+        type: 'POST',
+        url: PAGE_BASIC + '/GuaranteeGroup/deleteGuaranteeGroup',
+        dataType: 'json',
+        data: {
+            "id": id,
+        },
+        success: function (json) {
+            if (json.result) {
+                layer.msg("删除成功", {icon: 6});
+                reloadTable();
+            } else if (json.msg === 'EXIST') {
+                layer.msg("删除失败,分类下存在初始化模块!", {icon: 5});
+            } else {
+                layer.msg("删除失败", {icon: 5});
+            }
+            layer.close(index);
+        },
+        error: function (msg) {
+            layer.close(index);
+            goPage(msg, 1);
+        }
+    });
+}
+
+/* 表格重载 */
+function reloadTable() {
+    table.reload('guaranteeGroupTable', {
+        page: {
+            curr: 1 //重新从第 1 页开始
+        }
+    }); //只重载数据
+}
+//初始化数据
+function initBusinessSystemType() {
+	// 单位
+	ly.ajax({
+	    type: 'get',
+	    url: PAGE_BASIC + '/Office/getAllOffice',
+	    dataType: 'json',
+	    data: {},
+	    success: function (json) {
+	        if (json.result) {
+	            var data = json.result;
+	            data.forEach(t => {
+	                //$("#systemCategory").next().children().eq(1).append("<dd lay-value='" + t.category_id + "'>" + t.category_name + "</dd>")
+	                $("#officeId").append("<option value='" + t.id + "'>" + t.office_name + "</option>")
+	            })
+	            form.render();
+	        } else {
+	            layer.msg("查询失败");
+	        }
+	
+	    },
+	    error: function (msg) {
+	        layer.msg("查询失败");
+	    }
+	});
+}

+ 3 - 3
spring-cloud/server-page/src/main/resources/static/page/safetyInforManager.html

@@ -190,8 +190,8 @@
 							</div>
 						</div>
 					</div>
-					<!--部门信息录入模块 style="display: none;"-->
-					<div class="layui-form-item" id="departmentBlock">
+					<!--部门信息录入模块 -->
+					<div class="layui-form-item" id="departmentBlock" style="display: none;">
 						<div class="title">部门信息&nbsp;<p></p>
 						</div>
 						<div class="layui-form-item">
@@ -272,7 +272,7 @@
 						<div class="layui-form-item">
 							<label class="layui-form-label">单位病毒感染情况:</label>
 							<!--<button type="button" class="layui-btn attack" style="margin-top: 10px;">添加</button>-->
-							<div class="layui-input-block" style="width: 341px;">
+							<div class="layui-input-block" style="width: 442px;">
 								<table class="layui-hide" id="OfficeVirus" lay-filter="OfficeVirusTable"></table>
 							</div>
 						</div>