提交 d3f8c6c3 authored 作者: Your Name's avatar Your Name

[feature] 修改为保存文件形式的纯采集端

上级 ce06929c
流水线 #201 已失败 于阶段
package com.zjty.fp.acq.vomp.subject.controller;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.service.api.VompApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static org.springframework.http.ResponseEntity.ok;
/**
* @author C
* 向网安提供数据的接口
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@RestController
@RequestMapping("/api/vomp")
public class VompApiController {
@Autowired
VompApiService vompApiService;
@GetMapping("/alarm")
public ResponseEntity<List<VompAlarm>> alarm() {
return ok(vompApiService.getAlarmList());
}
@GetMapping("/handinginfo")
public ResponseEntity<List<VompHandingInfo>> handingInfo() {
return ok(vompApiService.getHandingInfoList());
}
@GetMapping("/pcinfo")
public ResponseEntity<List<VompPcInfo>> pcInfo() {
return ok(vompApiService.getPcInfoList());
}
@GetMapping("/status")
public ResponseEntity<List<VompStatus>> status() {
return ok(vompApiService.getStatusList());
}
@GetMapping("/zone")
public ResponseEntity<List<VompZone>> zone() {
return ok(vompApiService.getZoneList());
}
}
package com.zjty.fp.acq.vomp.subject.controller;
import com.zjty.fp.acq.misc.entity.UnionEvent;
import com.zjty.fp.acq.vomp.subject.service.api.VompEventService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>Description : fp-fp
* <p>Date : 2018/11/9 11:48
* <p>@author : C
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@RestController
public class VompEventController {
@Autowired
VompEventService vompEventService;
@GetMapping("/event/vomp")
public List<UnionEvent> event() {
return vompEventService.findByPage(0, 2);
}
}
package com.zjty.fp.acq.vomp.subject.entity.localdo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
import java.util.Random;
/**
* @author C
* 违规告警信息
*/
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "vomp_alarm")
public class VompAlarm {
@Id
private Integer recno;
private String statId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date outBegin;
private String unitName;
private String deptment;
/**
* 处理人
*/
private String tUser;
/**
* 主机名
*/
private String hostName;
/**
* 转发
*/
private String tReserve;
/**
* 操作系统
*/
private String tos;
private String tCard;
private String macStr;
private String ipStr;
private String outIpstr;
private String masterCode;
private String hdCode;
private String tVer;
private String tMemo;
private String tCompany;
private String statStatus;
private String zoneCode;
private String unitType;
@SuppressWarnings("unused")
public static VompAlarm toSimc() {
Random random = new Random();
Integer recno = random.nextInt(8);
String statId = Integer.valueOf(random.nextInt(1000)).toString();
return new VompAlarm(
recno,
statId,
new Date(),
"杭州市测试",
"杭州市测试",
"测试人",
"PGOS",
"SZJC",
"Win7",
"[Marvell Yukon 88E8057 PCI-E Gigabit Ethernet Controller -数据包计划程序微型端口]",
"F5 15 85 E6 37 44",
"192.168.1.1",
"20.1.1.1",
"LENOVO To be filled by O.E.M SN:INVALID",
"123456HD",
"1.1.0",
"经由⽹关[183.129.165.83]违规外联",
"09",
"未读",
"330100",
"3"
);
}
}
package com.zjty.fp.acq.vomp.subject.entity.localdo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author C
* 处理单号
*/
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "vomp_handinginfo")
public class VompHandingInfo {
@Id
private Integer statId;
private String routInspector;
private String routInspectorX;
private String routOperator;
private String routStatus;
private String routStamp;
}
package com.zjty.fp.acq.vomp.subject.entity.localdo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author C
* 区域告警统计
*/
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "vomp_pcinfo")
public class VompPcInfo {
@Id
private String zoneId;
private String zoneName;
/**
* 监控终端数量
*/
private String zonePcCount;
/**
* 涉密计算机数量
*/
private String zonePaCount;
/**
* 安装率=zonePcCount/zonePaCount
*/
private String installRate;
private String alarmCount;
private String alarmRate;
private String zoneOperator;
private String zoneStamp;
}
package com.zjty.fp.acq.vomp.subject.entity.localdo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* <p>Description : fp-fp
* <p>Date : 2018/10/9 17:27
* <p>@author : C
* 服务器信息
*/
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "vomp_status")
public class VompStatus {
@Id
private Integer serverStatusId;
private String hname;
private String contact;
private String phone;
private String ltime;
private String uri;
private String utime;
private String tzone;
private String ads;
private String nip;
private String prop;
}
package com.zjty.fp.acq.vomp.subject.entity.localdo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author C
* 区域基本信息
*/
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "vomp_zone")
public class VompZone {
@Id
private String zoneId;
private String zoneName;
private String parentId;
private String xOrigin;
private String yOrigin;
}
package com.zjty.fp.acq.vomp.subject.repository.local;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompAlarm;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author C
*/
@Repository
public interface VompAlarmRepository extends JpaRepository<VompAlarm, Integer> {
}
package com.zjty.fp.acq.vomp.subject.repository.local;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompHandingInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author C
*/
@Repository
public interface VompHandingInfoRepository extends JpaRepository<VompHandingInfo, Integer> {
}
package com.zjty.fp.acq.vomp.subject.repository.local;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompPcInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author C
*/
@Repository
public interface VompPcInfoRepository extends JpaRepository<VompPcInfo, String> {
}
package com.zjty.fp.acq.vomp.subject.repository.local;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompStatus;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author C
*/
@Repository
public interface VompStatusRepository extends JpaRepository<VompStatus, Integer> {
}
\ No newline at end of file
package com.zjty.fp.acq.vomp.subject.repository.local;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompZone;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author C
*/
@Repository
public interface VompZoneRepository extends JpaRepository<VompZone, String> {
}
package com.zjty.fp.acq.vomp.subject.service.api;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.service.api.impl.VompApiServiceImpl;
import java.util.List;
/**
* <p>Description : fusion-platform
* <p>Date : 2018/12/6 15:16
* <p>@author : C
* findAll式查询
*
* @see VompApiServiceImpl
*/
public interface VompApiService {
/**
* 查找所有Alarm数据
*
* @return List<VompAlarm>
*/
List<VompAlarm> getAlarmList();
/**
* 查找所有HandingInfo数据
*
* @return List<VompHandingInfo>
*/
List<VompHandingInfo> getHandingInfoList();
/**
* 查找所有PcInfo数据
*
* @return List<VompPcInfo>
*/
List<VompPcInfo> getPcInfoList();
/**
* 查找所有Status数据
*
* @return List<VompStatus>
*/
List<VompStatus> getStatusList();
/**
* 查找所有Zone数据
*
* @return List<VompZone>
*/
List<VompZone> getZoneList();
}
package com.zjty.fp.acq.vomp.subject.service.api;
import com.zjty.fp.acq.misc.entity.UnionEvent;
import com.zjty.fp.acq.vomp.subject.entity.vo.VompEvent;
import com.zjty.fp.acq.vomp.subject.service.api.impl.VompEventServiceImpl;
import java.util.List;
/**
* <p>Description : fusion-platform
* <p>Date : 2018/12/6 15:00
* <p>@author : C
* 对接前端告警页面的数据
*
* @see VompEventServiceImpl
*/
public interface VompEventService {
/**
* 按页查询
*
* @param page 页数
* @param size 每页数量
* @return UnionEvent集合
*/
List<UnionEvent> findByPage(int page, int size);
/**
* 按id查询
*
* @param ids 用于查询的id集合
* @return UnionEvent集合
*/
List<UnionEvent> findByIds(List<Integer> ids);
/**
* 按id查询 返回类型不同于上个方法 是UnionEvent的子类
*
* @param ids 用于查询的id集合
* @return VompEvent集合
*/
List<VompEvent> findAllSubEvents(List<Integer> ids);
/**
* 所有告警的总数
*
* @return int
*/
int totalCount();
/**
* 今日告警的总数
*
* @return int
*/
int dailyCount();
}
package com.zjty.fp.acq.vomp.subject.service.api;
import com.zjty.fp.acq.vomp.subject.entity.vo.VompFpVo;
import com.zjty.fp.acq.vomp.subject.service.api.impl.VompFpServiceImpl;
/**
* <p>Description : fusion-platform
* <p>Date : 2018/12/6 15:03
* <p>@author : C
* fp = front page
* 对接前端首页的数据(本市是指杭州市)
* 实现类:
*
* @see VompFpServiceImpl
* 返回数据类型:
* @see VompFpVo
*/
public interface VompFpService {
/**
* 获取前端首页对象
*
* @return 见本接口注释
*/
VompFpVo getVompFpVo();
}
package com.zjty.fp.acq.vomp.subject.service.api;
import com.zjty.fp.acq.misc.utils.DateTimeUtil;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompAlarm;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompPcInfo;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
/**
* <p>Description : fusion-platform
* <p>Date : 2018/12/17 15:49
* <p>@author : C
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Component
public class VompJudgeHelper {
@Autowired
VompTransCache vompTransCache;
/**
* 根据zoneID判断是否是杭州内的区域
*/
public boolean isInHangzhou(VompAlarm alarm) {
String zoneId = alarm.getZoneCode();
return Objects.equals(vompTransCache.getZoneId_ParentZoneId_Map().get(zoneId), "3301");
}
/**
* 根据zoneID判断是否是杭州内的区域
*/
public boolean isInHangzhou(VompPcInfo pcInfo) {
String zoneId = pcInfo.getZoneId();
return Objects.equals(vompTransCache.getZoneId_ParentZoneId_Map().get(zoneId), "3301");
}
/**
* 根据时间判断是否是在本年度
*/
public boolean isInCurrentYear(VompAlarm alarm) {
Date outBegin = alarm.getOutBegin();
boolean isInThisYear;
Calendar calendar = Calendar.getInstance();
Integer currentYear = calendar.get(Calendar.YEAR);
String outBeginStr = DateTimeUtil.formatDateTimetoString(outBegin, "YYYY-MM-dd");
Integer outBeginYear = Integer.valueOf(outBeginStr.substring(0, 4));
isInThisYear = currentYear.equals(outBeginYear);
return isInThisYear;
}
/**
* 根据时间字符串判断是否是在今天
*/
public boolean isInToday(VompAlarm alarm) {
String outBegin = new SimpleDateFormat("yyyy-MM-dd").format(alarm.getOutBegin());
boolean isInToday;
String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
isInToday = today.equals(outBegin.substring(0, today.length()));
return isInToday;
}
/**
* 判断alarm的发生时间是否是在指定时间之后
*/
public boolean isAfterTime(VompAlarm alarm, Date date) {
Date fetchDate = alarm.getOutBegin();
return fetchDate.after(date);
}
/**
* 判断是否逻辑存在
* VompAlarm有一个字段是status状态码
* 其中一个状态是“删除”。(状态码为“2”代表“删除”)
* 状态为“删除”的对象为逻辑删除状态,不应当给出去。
* 非逻辑删除的数据则是逻辑存在 可以给出去。
*
* @param alarm 被判断的VompAlarm对象
* @return 是否逻辑存在
*/
public Boolean logicalExisted(VompAlarm alarm) {
return !Objects.equals(alarm.getStatStatus(), "2");
}
}
package com.zjty.fp.acq.vomp.subject.service.api;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.entity.remotedo.*;
import com.zjty.fp.acq.vomp.subject.entity.vo.VompEvent;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Optional;
/**
* <p>Description : fusion-platform
* <p>Date : 2018/12/28 15:05
* <p>@author : C
* 数据转换工具bean
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Component
public class VompTransHelper {
@Autowired
VompTransCache transCache;
/**
* VompAlarm -> VompEvent
*/
public VompEvent transToVompEvent(VompAlarm alarm) {
return new VompEvent(
"vomp",
alarm.getOutBegin(),
alarm.getRecno(),
alarm.getStatId(),
alarm.getUnitName(),
alarm.getDeptment(),
alarm.getTUser(),
alarm.getHostName(),
alarm.getTReserve(),
alarm.getTos(),
alarm.getTCard(),
alarm.getMacStr(),
alarm.getIpStr(),
alarm.getOutIpstr(),
alarm.getMasterCode(),
alarm.getHdCode(),
alarm.getTMemo(),
alarm.getStatStatus(),
transCache.getZoneId_ZoneName_Map().get(alarm.getZoneCode())
);
}
/**
* String -> Integer
* 如果是空则替换为0
*
* @param number input
* @return output
*/
private Integer transToInteger(String number) {
if (number == null || "".equals(number)) {
return 0;
} else {
return Integer.valueOf(number);
}
}
/**
* String -> Double
* 如果是空则替换为0
*
* @param number input
* @return output
*/
private Double transToDouble(String number) {
if (number == null || "".equals(number)) {
return 0.0;
} else {
return Double.valueOf(number);
}
}
/**
* @param zone Zone对象
* @param pcloglist 该Zone对象关联的所有Pclog
* @return VompPcinfo对象
*/
public VompPcInfo transToVompPcInfoVo(Zone zone, List<PcLog> pcloglist) {
String alarmCount = String.valueOf(pcloglist.size());
String zonePcCount = zone.getZonePcCount();
Integer zonePcCountInt;
String alarmRate;
if (zonePcCount != null) {
zonePcCountInt = Integer.valueOf(zonePcCount);
alarmRate = new DecimalFormat("0.00").format(pcloglist.size() / zonePcCountInt);
} else {
alarmRate = null;
}
return new VompPcInfo(
zone.getZoneId(),
zone.getZoneName(),
zone.getZonePcCount(),
zone.getZonePaCount(),
getInstallRate(zone),
alarmCount,
alarmRate,
zone.getZoneOperator(),
zone.getZoneStamp()
);
}
private String getInstallRate(Zone zone) {
DecimalFormat df = new DecimalFormat("#.00");
Double result = transToDouble(zone.getZonePcCount()) / transToDouble(zone.getZonePaCount());
Double zero = 0.;
if (transToDouble(zone.getZonePaCount()).equals(zero)) {
return "-1";
} else {
return df.format(result);
}
}
/**
* @param chkstates ChkStates对象
* @param pclog 关联Pclog对象
* @return VompAlarm对象
*/
public VompAlarm transToVompAlarm(ChkStates chkstates, PcLog pclog) {
return new VompAlarm(
pclog.getRecno(),
chkstates.getStatId().toString(),
pclog.getOutbegin(),
pclog.getUnitName(),
pclog.getDeptment(),
pclog.getTUser(),
pclog.getHostname(),
pclog.getTReserve(),
pclog.getTos(),
pclog.getTCard(),
pclog.getMacStr(),
pclog.getIpStr(),
pclog.getOutIpstr(),
pclog.getMasterCode(),
pclog.getHdCode(),
pclog.getTver(),
pclog.getTmemo(),
pclog.getTCompany(),
transCache.getStatusMap().get(chkstates.getStatStatus()),
pclog.getZoneCode(),
pclog.getUnitCode()
);
}
/**
* @param chkstates ChkStates对象
* @param chkroutes ChkRoutes对象
* @return VompHandingInfo
*/
public VompHandingInfo transToHandingInfo(ChkStates chkstates, ChkRoutes chkroutes) {
return new VompHandingInfo(
chkstates.getStatId(),
chkroutes.getRoutInspector(),
chkroutes.getRoutInspectorX(),
chkroutes.getRoutOperator(),
chkroutes.getRoutStatus(),
chkroutes.getRoutStamp()
);
}
/**
* ServerStatus -> VompStatus
*
* @param serverStatus ServerStatus对象
* @return VompStatus对象
*/
public VompStatus transToStatus(ServerStatus serverStatus) {
return new VompStatus(
serverStatus.getServerStatusId(),
serverStatus.getHName(),
serverStatus.getContact(),
serverStatus.getPhone(),
serverStatus.getLTime(),
serverStatus.getUri(),
serverStatus.getUTime(),
serverStatus.getTZone(),
serverStatus.getAds(),
serverStatus.getNip(),
serverStatus.getProp()
);
}
/**
* Zone -> VompZone
*/
public VompZone transToVompZone(Zone zone) {
return new VompZone(
zone.getZoneId(),
zone.getZoneName(),
zone.getParentID(),
zone.getXOrigin(),
zone.getYOrigin()
);
}
/**
* 地区名加上父地区名
* 例如:杭州市->浙江省杭州市
*/
public VompZone addParentZoneName(VompZone vompZone) {
Optional<Zone> parentZoneOP = transCache.getZoneList().stream()
.filter(zone -> zone.getZoneId().equals(vompZone.getParentId()))
.findAny();
if (parentZoneOP.isPresent()) {
String parentZoneName = parentZoneOP.get().getZoneName();
vompZone.setZoneName(parentZoneName + vompZone.getZoneName());
}
return vompZone;
}
/**
* 加上祖父地区名
* 例如:杭州市->浙江省杭州市->中国浙江省杭州市
*/
public VompZone addGrandParentZoneName(VompZone vompZone) {
Optional<Zone> grandParentZoneOP = transCache.getZoneList().stream()
.filter(zone -> zone.getZoneId().equals(transCache.getZoneId_ParentZoneId_Map().get(vompZone.getParentId())))
.findAny();
if (grandParentZoneOP.isPresent()) {
String grandParentZoneName = grandParentZoneOP.get().getZoneName();
vompZone.setZoneName(grandParentZoneName + vompZone.getZoneName());
}
return vompZone;
}
/**
* 以Integer类型输出该地区的监控终端数量
*
* @return Integer
*/
public Integer getPcCount(VompPcInfo pcInfo) {
return transToInteger(pcInfo.getZonePcCount());
}
}
package com.zjty.fp.acq.vomp.subject.service.api.impl;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.repository.local.*;
import com.zjty.fp.acq.vomp.subject.service.api.VompApiService;
import com.zjty.fp.acq.vomp.subject.service.api.VompJudgeHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>Description : fp-fp
* <p>Date : 2018/11/8 16:42
* <p>@author : C
* 该类提供查询 用于对网安提供API
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Service
public class VompApiServiceImpl implements VompApiService {
@Autowired
VompAlarmRepository vompAlarmRepository;
@Autowired
VompHandingInfoRepository vompHandingInfoRepository;
@Autowired
VompPcInfoRepository vompPcInfoRepository;
@Autowired
VompStatusRepository vompStatusRepository;
@Autowired
VompZoneRepository zoneRepository;
@Autowired
VompJudgeHelper judgeHelper;
@Override
public List<VompAlarm> getAlarmList() {
return vompAlarmRepository.findAll().stream()
.filter(judgeHelper::logicalExisted)
.collect(Collectors.toList());
}
@Override
public List<VompHandingInfo> getHandingInfoList() {
return vompHandingInfoRepository.findAll();
}
@Override
public List<VompPcInfo> getPcInfoList() {
return vompPcInfoRepository.findAll();
}
@Override
public List<VompStatus> getStatusList() {
return vompStatusRepository.findAll();
}
@Override
public List<VompZone> getZoneList() {
return zoneRepository.findAll();
}
}
package com.zjty.fp.acq.vomp.subject.service.api.impl;
import com.zjty.fp.acq.misc.entity.UnionEvent;
import com.zjty.fp.acq.vomp.subject.entity.vo.VompEvent;
import com.zjty.fp.acq.vomp.subject.repository.local.VompAlarmRepository;
import com.zjty.fp.acq.vomp.subject.service.api.VompEventService;
import com.zjty.fp.acq.vomp.subject.service.api.VompJudgeHelper;
import com.zjty.fp.acq.vomp.subject.service.api.VompTransHelper;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static java.util.Comparator.comparingLong;
/**
* <p>Description : fp-fp
* <p>Date : 2018/11/8 16:42
* <p>@author : C
* 对前端的告警事件页面提供API:根据页数查询、根据一组id查询、数据总数、今日数据总数。
* 返回数据类型:
*
* @see UnionEvent
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Slf4j
@Service
public class VompEventServiceImpl implements VompEventService {
@Autowired
VompAlarmRepository vompAlarmRepository;
@Autowired
VompTransCache transCache;
@Autowired
VompTransHelper transHelper;
@Autowired
VompJudgeHelper judgeHelper;
@Override
public List<UnionEvent> findByPage(int page, int size) {
List<UnionEvent> events = vompAlarmRepository.findAll(new PageRequest(page, size))
.getContent().stream()
.filter(judgeHelper::logicalExisted)
.sorted(comparingLong(alarm -> alarm.getOutBegin().getTime()))
.map(transHelper::transToVompEvent)
.collect(Collectors.toList());
Collections.reverse(events);
return events;
}
@Override
public List<UnionEvent> findByIds(List<Integer> ids) {
return vompAlarmRepository.findAll(ids).stream()
.filter(judgeHelper::logicalExisted)
.map(transHelper::transToVompEvent)
.collect(Collectors.toList());
}
@Override
public List<VompEvent> findAllSubEvents(List<Integer> ids) {
return vompAlarmRepository.findAll(ids).stream()
.filter(judgeHelper::logicalExisted)
.map(transHelper::transToVompEvent)
.collect(Collectors.toList());
}
@Override
public int totalCount() {
return new Long(vompAlarmRepository.count()).intValue();
}
@Override
public int dailyCount() {
return new Long(vompAlarmRepository.findAll().stream()
.filter(judgeHelper::logicalExisted)
.filter(judgeHelper::isInToday)
.count())
.intValue();
}
}
package com.zjty.fp.acq.vomp.subject.service.api.impl;
import com.zjty.fp.acq.vomp.subject.entity.vo.VompFpVo;
import com.zjty.fp.acq.vomp.subject.repository.local.VompAlarmRepository;
import com.zjty.fp.acq.vomp.subject.repository.local.VompPcInfoRepository;
import com.zjty.fp.acq.vomp.subject.service.api.VompFpService;
import com.zjty.fp.acq.vomp.subject.service.api.VompJudgeHelper;
import com.zjty.fp.acq.vomp.subject.service.api.VompTransHelper;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.util.stream.Collectors;
/**
* <p>Description : fp-extr
* <p>Date : 2018/10/30 14:48
* <p>@author : C
* 对前端首页提供数据:提供本市(杭州)监控终端数量、本年度总报警率、本年度总报警数。
* 返回数据:
*
* @see VompFpVo
*/
@SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "Duplicates"})
@Slf4j
@Service
public class VompFpServiceImpl implements VompFpService {
@Autowired
VompAlarmRepository alarmRepository;
@Autowired
VompPcInfoRepository pcInfoRepository;
@Autowired
VompTransCache transCache;
@Autowired
VompTransHelper transHelper;
@Autowired
VompJudgeHelper judgeHelper;
/**
* @return 前端首页数据包装对象
*/
@Override
public VompFpVo getVompFpVo() {
return new VompFpVo(
getPcCountInHangZhou(),
getTotalAlarmCountInHangZhouInCurrentYear(),
getAlarmRateInHangZhouInCurrentYear()
);
}
/*
Private Methods
*/
/**
* 杭州市本年度总报警率
*
* @return String
*/
private String getAlarmRateInHangZhouInCurrentYear() {
Integer alarmCount = getTotalAlarmCountInHangZhouInCurrentYear();
Integer pcCount = getPcCountInHangZhou();
DecimalFormat df = new DecimalFormat("#0.00");
log.info("[vomp] 开始计算报警率:报警数为【{}】,监控终端数量为【{}】", alarmCount, pcCount);
Double totalAlarmRate = Double.valueOf(alarmCount) / Double.valueOf(pcCount);
Double zero = 0.;
if (Double.valueOf(pcCount).equals(zero)) {
return "-1";
}
return df.format(totalAlarmRate);
}
/**
* 杭州市本年度报警数
*/
private Integer getTotalAlarmCountInHangZhouInCurrentYear() {
return alarmRepository.findAll().stream()
.filter(judgeHelper::logicalExisted)
.filter(judgeHelper::isInHangzhou)
.filter(judgeHelper::isInCurrentYear)
.collect(Collectors.toList())
.size();
}
/**
* 杭州市全市监控终端数量
*/
private Integer getPcCountInHangZhou() {
return pcInfoRepository.findAll().stream()
.filter(judgeHelper::isInHangzhou)
.mapToInt(transHelper::getPcCount)
.sum();
}
}
package com.zjty.fp.acq.vomp.subject.service.updater;
import com.zjty.fp.acq.vomp.subject.service.updater.impl.VompDataDbUpdater;
import com.zjty.fp.acq.vomp.subject.service.updater.impl.VompDataDlUpdater;
/**
* <p>Description : fp-fp
* <p>Date : 2018/11/20 19:19
* <p>@author : C
* 用于定义数据采集、保存、同步相关功能的接口。
* 实现类有2个:
* 1.从FTP采集数据、向本地同步类
* 2.向ES发起数据同步类
*
* @see VompDataDlUpdater
* @see VompDataDbUpdater
*/
public interface VompUpdater {
/**
* 由一个方法包装更新相应数据的一系列步骤。
*/
void updateData();
}
package com.zjty.fp.acq.vomp.subject.service.updater.impl;
import com.google.common.collect.Lists;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.entity.remotedo.*;
import com.zjty.fp.acq.vomp.subject.repository.local.*;
import com.zjty.fp.acq.vomp.subject.repository.remote.*;
import com.zjty.fp.acq.vomp.subject.service.api.VompTransHelper;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import com.zjty.fp.acq.vomp.subject.service.updater.VompUpdater;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>Description : fusion-platform
* <p>Date : 2019/1/2 11:24
* <p>@author : C
* Db意为Database。该组件的同步数据模式为直接从目标数据库读取数据并保存到自己的数据库。
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Service
@Slf4j
public class VompDataDbUpdater implements VompUpdater {
@Autowired
VompTransCache transCache;
@Autowired
VompTransHelper transHelper;
@Autowired
ChkRoutesRepository chkRoutesRepository;
@Autowired
ChkStatesRepository chkStatesRepository;
@Autowired
PcLogRepository pcLogRepository;
@Autowired
ServerStatusRepository serverStatusRepository;
@Autowired
ZoneRepository zoneRepository;
@Autowired
VompAlarmRepository vompAlarmRepository;
@Autowired
VompHandingInfoRepository vompHandingInfoRepository;
@Autowired
VompPcInfoRepository vompPcInfoRepository;
@Autowired
VompStatusRepository vompStatusRepository;
@Autowired
VompZoneRepository vompZoneRepository;
@Override
public void updateData() {
//fetch data from remote database and save cache
fetchRemoteDataAndSaveCache();
//get data from cache and trans and save to local database
updateAllData();
}
private void fetchRemoteDataAndSaveCache() {
//chkroutes
List<ChkRoutes> chkRoutesList = chkRoutesRepository.findAll();
transCache.setChkRoutesList(chkRoutesList);
//chkroutes
List<ChkStates> chkStatesList = chkStatesRepository.findAll();
transCache.setChkStatesList(chkStatesList);
//pclog
List<PcLog> pcLogList = pcLogRepository.findAll();
transCache.setPcLogList(pcLogList);
//chkroutes
List<ServerStatus> serverStatusList = serverStatusRepository.findAll();
transCache.setServerStatusList(serverStatusList);
//chkroutes
List<Zone> zoneList = zoneRepository.findAll();
transCache.setZoneList(zoneList);
}
/**
* Local Data
*/
private void updateAllData() {
updateVompAlarmDb();
updateVompHandingInfoDb();
updateVompPcInfoDb();
updateVompStatusDb();
updateZoneDb();
}
private void updateVompAlarmDb() {
List<VompAlarm> alarmList4Save = getAlarmList();
vompAlarmRepository.save(alarmList4Save);
log.info("[vomp] VompAlarm更新了{}条数据", alarmList4Save.size());
}
private void updateVompHandingInfoDb() {
List<VompHandingInfo> handingInfoList4Save = getHandingInfoList();
vompHandingInfoRepository.save(handingInfoList4Save);
log.info("[vomp] VompHandingInfo更新了{}条数据", handingInfoList4Save.size());
}
private void updateVompPcInfoDb() {
List<VompPcInfo> pcInfoList4Save = getPcInfoList();
vompPcInfoRepository.save(pcInfoList4Save);
log.info("[vomp] VompPcInfo更新了{}条数据", pcInfoList4Save.size());
}
private void updateVompStatusDb() {
List<VompStatus> statusList4Save = getStatusList();
vompStatusRepository.save(statusList4Save);
log.info("[vomp] VompStatus更新了{}条数据", statusList4Save.size());
}
private void updateZoneDb() {
List<VompZone> zoneList4Save = getZoneList();
vompZoneRepository.save(zoneList4Save);
log.info("[vomp] VompZone更新了{}条数据", zoneList4Save.size());
}
/**
* VompAlarm
*/
private List<VompAlarm> getAlarmList() {
List<VompAlarm> vompAlarmList = Lists.newArrayList();
transCache.getChkStates_PcLog_Map().forEach((chkstates, pcLogs) -> pcLogs.forEach(pclog -> vompAlarmList.add(transHelper.transToVompAlarm(chkstates, pclog))));
return vompAlarmList;
}
/**
* VompHandingInfo
*/
private List<VompHandingInfo> getHandingInfoList() {
List<VompHandingInfo> vompHandingInfoList = Lists.newArrayList();
transCache.getChkStates_ChkRoutes_Map().forEach((chkstates, chkRoutes) -> chkRoutes.forEach(chkRoute -> vompHandingInfoList.add(transHelper.transToHandingInfo(chkstates, chkRoute))));
return vompHandingInfoList;
}
/**
* VompPcInfo
*/
private List<VompPcInfo> getPcInfoList() {
List<VompPcInfo> vompPcInfoList = Lists.newArrayList();
transCache.getZone_PcLog_Map().forEach((zone, pcLogList) -> vompPcInfoList.add(transHelper.transToVompPcInfoVo(zone, pcLogList)));
return vompPcInfoList;
}
/**
* Status
*/
private List<VompStatus> getStatusList() {
return transCache.getServerStatusList().stream()
.map(transHelper::transToStatus)
.collect(Collectors.toList());
}
/**
* VompZone
*/
private List<VompZone> getZoneList() {
return transCache.getZoneList().stream()
.map(transHelper::transToVompZone)
.map(transHelper::addParentZoneName)
.map(transHelper::addGrandParentZoneName)
.collect(Collectors.toList());
}
}
package com.zjty.fp.acq.vomp.subject.service.updater.impl;
import com.google.common.collect.Lists;
import com.zjty.fp.acq.misc.utils.Downloader;
import com.zjty.fp.acq.misc.utils.FileReader;
import com.zjty.fp.acq.misc.utils.JacksonUtil;
import com.zjty.fp.acq.vomp.base.enums.VompCatalogs;
import com.zjty.fp.acq.vomp.base.enums.VompPlatform;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.entity.remotedo.*;
import com.zjty.fp.acq.vomp.subject.repository.local.*;
import com.zjty.fp.acq.vomp.subject.service.api.VompTransHelper;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import com.zjty.fp.acq.vomp.subject.service.updater.VompUpdater;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* <p>Description : fp-fp
* <p>Date : 2018/11/20 10:18
* <p>@author : C
* Dl意为Download。该组件的同步数据模式为从FTP服务器下载文件然后解析保存。
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Service
@Slf4j
public class VompDataDlUpdater implements VompUpdater {
@Autowired
VompTransCache transCache;
@Autowired
VompTransHelper transHelper;
@Autowired
Downloader downloader;
@Autowired
FileReader fileReader;
@Autowired
VompAlarmRepository alarmRepository;
@Autowired
VompHandingInfoRepository handingInfoRepository;
@Autowired
VompPcInfoRepository pcInfoRepository;
@Autowired
VompStatusRepository statusRepository;
@Autowired
VompZoneRepository zoneRepository;
@Override
public void updateData() {
//download file
downloadFileFromFtpServer();
log.info("[vomp] 文件下载完毕");
//read file & parse & save to cache
readAllFilesAndSaveCache();
//trans date to local format & save
updateAllData();
log.info("[vomp] 数据更新完毕");
}
/*
<Private Methods Area>
*/
/**
* Remote Data
*/
private void downloadFileFromFtpServer() {
downloader.download(VompPlatform.PLATFORM.getName(), VompCatalogs.CHKROUTES.getName());
downloader.download(VompPlatform.PLATFORM.getName(), VompCatalogs.CHKSTATES.getName());
downloader.download(VompPlatform.PLATFORM.getName(), VompCatalogs.PCLOG.getName());
downloader.download(VompPlatform.PLATFORM.getName(), VompCatalogs.SERVERSTATUS.getName());
downloader.download(VompPlatform.PLATFORM.getName(), VompCatalogs.ZONE.getName());
}
private void readAllFilesAndSaveCache() {
readChkRoutesAndSaveCache();
readChkStatesAndSaveCache();
readPcLogAndSaveCache();
readServerStatusAndSaveCache();
readZoneAndSaveCache();
}
private String readFileFirstLine(String catalog) {
Optional<String> firstLine = fileReader.readFileData(VompPlatform.PLATFORM.getName(), catalog).stream().findFirst();
return firstLine.orElse("");
}
private void readChkRoutesAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.CHKROUTES.getName());
ChkRoutes[] chkRoutesArrays = JacksonUtil.readValue(text, ChkRoutes[].class);
List<ChkRoutes> chkRoutesList = Lists.newArrayList();
if (chkRoutesArrays != null) {
chkRoutesList = Arrays.asList(chkRoutesArrays);
}
transCache.setChkRoutesList(chkRoutesList);
}
private void readChkStatesAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.CHKSTATES.getName());
ChkStates[] chkStatesArrays = JacksonUtil.readValue(text, ChkStates[].class);
List<ChkStates> chkStatesList = Lists.newArrayList();
if (chkStatesArrays != null) {
chkStatesList = Arrays.asList(chkStatesArrays);
}
transCache.setChkStatesList(chkStatesList);
}
private void readPcLogAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.PCLOG.getName());
PcLog[] pcLogArrays = JacksonUtil.readValue(text, PcLog[].class);
List<PcLog> pcLogList = Lists.newArrayList();
if (pcLogArrays != null) {
pcLogList = Arrays.asList(pcLogArrays);
}
transCache.setPcLogList(pcLogList);
}
private void readServerStatusAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.SERVERSTATUS.getName());
ServerStatus[] serverStatusArrays = JacksonUtil.readValue(text, ServerStatus[].class);
List<ServerStatus> serverStatusList = Lists.newArrayList();
if (serverStatusArrays != null) {
serverStatusList = Arrays.asList(serverStatusArrays);
}
transCache.setServerStatusList(serverStatusList);
}
private void readZoneAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.ZONE.getName());
Zone[] zoneArrays = JacksonUtil.readValue(text, Zone[].class);
List<Zone> zoneList = Lists.newArrayList();
if (zoneArrays != null) {
zoneList = Arrays.asList(zoneArrays);
}
transCache.setZoneList(zoneList);
}
/**
* Local Data
*/
private void updateAllData() {
updateVompAlarmDl();
updateVompHandingInfoDl();
updateVompPcInfoDl();
updateVompStatusDl();
updateZoneDl();
}
private void updateVompAlarmDl() {
List<VompAlarm> alarmList4Save = getAlarmList();
alarmRepository.save(alarmList4Save);
log.info("[vomp] VompAlarm更新了{}条数据", alarmList4Save.size());
}
private void updateVompHandingInfoDl() {
List<VompHandingInfo> handingInfoList4Save = getHandingInfoList();
handingInfoRepository.save(handingInfoList4Save);
log.info("[vomp] VompHandingInfo更新了{}条数据", handingInfoList4Save.size());
}
private void updateVompPcInfoDl() {
List<VompPcInfo> pcInfoList4Save = getPcInfoList();
pcInfoRepository.save(pcInfoList4Save);
log.info("[vomp] VompPcInfo更新了{}条数据", pcInfoList4Save.size());
}
private void updateVompStatusDl() {
List<VompStatus> statusList4Save = getStatusList();
statusRepository.save(statusList4Save);
log.info("[vomp] VompStatus更新了{}条数据", statusList4Save.size());
}
private void updateZoneDl() {
List<VompZone> zoneList4Save = getZoneList();
zoneRepository.save(zoneList4Save);
log.info("[vomp] VompZone更新了{}条数据", zoneList4Save.size());
}
/**
* VompAlarm
*/
private List<VompAlarm> getAlarmList() {
List<VompAlarm> vompAlarmList = Lists.newArrayList();
transCache.getChkStates_PcLog_Map().forEach((chkstates, pcLogs) -> pcLogs.forEach(pclog -> vompAlarmList.add(transHelper.transToVompAlarm(chkstates, pclog))));
return vompAlarmList;
}
/**
* VompHandingInfo
*/
private List<VompHandingInfo> getHandingInfoList() {
List<VompHandingInfo> vompHandingInfoList = Lists.newArrayList();
transCache.getChkStates_ChkRoutes_Map().forEach((chkstates, chkRoutes) -> chkRoutes.forEach(chkRoute -> vompHandingInfoList.add(transHelper.transToHandingInfo(chkstates, chkRoute))));
return vompHandingInfoList;
}
/**
* VompPcInfo
*/
private List<VompPcInfo> getPcInfoList() {
List<VompPcInfo> vompPcInfoList = Lists.newArrayList();
transCache.getZone_PcLog_Map().forEach((zone, pcLogList) -> vompPcInfoList.add(transHelper.transToVompPcInfoVo(zone, pcLogList)));
return vompPcInfoList;
}
/**
* Status
*/
private List<VompStatus> getStatusList() {
return transCache.getServerStatusList().stream()
.map(transHelper::transToStatus)
.collect(Collectors.toList());
}
/**
* VompZone
*/
private List<VompZone> getZoneList() {
return transCache.getZoneList().stream()
.map(transHelper::transToVompZone)
.map(transHelper::addParentZoneName)
.map(transHelper::addGrandParentZoneName)
.collect(Collectors.toList());
}
}
package com.zjty.fp.acq.vomp.subject.service.updater.impl;
import com.google.common.collect.Lists;
import com.zjty.fp.acq.misc.utils.FileReader;
import com.zjty.fp.acq.misc.utils.JacksonUtil;
import com.zjty.fp.acq.vomp.base.enums.VompCatalogs;
import com.zjty.fp.acq.vomp.base.enums.VompPlatform;
import com.zjty.fp.acq.vomp.subject.entity.localdo.*;
import com.zjty.fp.acq.vomp.subject.entity.remotedo.*;
import com.zjty.fp.acq.vomp.subject.repository.local.*;
import com.zjty.fp.acq.vomp.subject.service.api.VompTransHelper;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import com.zjty.fp.acq.vomp.subject.service.updater.VompUpdater;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* <p>Description : fp-fp
* <p>Date : 2018/11/20 10:18
* <p>@author : C
* Rd意为Read。该组件的同步数据模式为直接读取文件然后解析保存。
*/
@SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "Duplicates"})
@Service
@Slf4j
public class VompDataRdUpdater implements VompUpdater {
@Autowired
VompTransCache transCache;
@Autowired
VompTransHelper transHelper;
@Autowired
FileReader fileReader;
@Autowired
VompAlarmRepository alarmRepository;
@Autowired
VompHandingInfoRepository handingInfoRepository;
@Autowired
VompPcInfoRepository pcInfoRepository;
@Autowired
VompStatusRepository statusRepository;
@Autowired
VompZoneRepository zoneRepository;
@Override
public void updateData() {
//read file & parse & save to cache
readAllFilesAndSaveCache();
//trans date to local format & save
updateAllData();
log.info("[vomp] 数据更新完毕");
}
/*
<Private Methods Area>
*/
/**
* Remote Data
*/
private void readAllFilesAndSaveCache() {
readChkRoutesAndSaveCache();
readChkStatesAndSaveCache();
readPcLogAndSaveCache();
readServerStatusAndSaveCache();
readZoneAndSaveCache();
}
private String readFileFirstLine(String catalog) {
Optional<String> firstLine = fileReader.readFileData(VompPlatform.PLATFORM.getName(), catalog).stream().findFirst();
return firstLine.orElse("");
}
private void readChkRoutesAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.CHKROUTES.getName());
ChkRoutes[] chkRoutesArrays = JacksonUtil.readValue(text, ChkRoutes[].class);
List<ChkRoutes> chkRoutesList = Lists.newArrayList();
if (chkRoutesArrays != null) {
chkRoutesList = Arrays.asList(chkRoutesArrays);
}
transCache.setChkRoutesList(chkRoutesList);
}
private void readChkStatesAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.CHKSTATES.getName());
ChkStates[] chkStatesArrays = JacksonUtil.readValue(text, ChkStates[].class);
List<ChkStates> chkStatesList = Lists.newArrayList();
if (chkStatesArrays != null) {
chkStatesList = Arrays.asList(chkStatesArrays);
}
transCache.setChkStatesList(chkStatesList);
}
private void readPcLogAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.PCLOG.getName());
PcLog[] pcLogArrays = JacksonUtil.readValue(text, PcLog[].class);
List<PcLog> pcLogList = Lists.newArrayList();
if (pcLogArrays != null) {
pcLogList = Arrays.asList(pcLogArrays);
}
transCache.setPcLogList(pcLogList);
}
private void readServerStatusAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.SERVERSTATUS.getName());
ServerStatus[] serverStatusArrays = JacksonUtil.readValue(text, ServerStatus[].class);
List<ServerStatus> serverStatusList = Lists.newArrayList();
if (serverStatusArrays != null) {
serverStatusList = Arrays.asList(serverStatusArrays);
}
transCache.setServerStatusList(serverStatusList);
}
private void readZoneAndSaveCache() {
String text = readFileFirstLine(VompCatalogs.ZONE.getName());
Zone[] zoneArrays = JacksonUtil.readValue(text, Zone[].class);
List<Zone> zoneList = Lists.newArrayList();
if (zoneArrays != null) {
zoneList = Arrays.asList(zoneArrays);
}
transCache.setZoneList(zoneList);
}
/**
* Local Data
*/
private void updateAllData() {
updateVompAlarmDl();
updateVompHandingInfoDl();
updateVompPcInfoDl();
updateVompStatusDl();
updateZoneDl();
}
private void updateVompAlarmDl() {
List<VompAlarm> alarmList4Save = getAlarmList();
alarmRepository.save(alarmList4Save);
log.info("[vomp] VompAlarm更新了{}条数据", alarmList4Save.size());
}
private void updateVompHandingInfoDl() {
List<VompHandingInfo> handingInfoList4Save = getHandingInfoList();
handingInfoRepository.save(handingInfoList4Save);
log.info("[vomp] VompHandingInfo更新了{}条数据", handingInfoList4Save.size());
}
private void updateVompPcInfoDl() {
List<VompPcInfo> pcInfoList4Save = getPcInfoList();
pcInfoRepository.save(pcInfoList4Save);
log.info("[vomp] VompPcInfo更新了{}条数据", pcInfoList4Save.size());
}
private void updateVompStatusDl() {
List<VompStatus> statusList4Save = getStatusList();
statusRepository.save(statusList4Save);
log.info("[vomp] VompStatus更新了{}条数据", statusList4Save.size());
}
private void updateZoneDl() {
List<VompZone> zoneList4Save = getZoneList();
zoneRepository.save(zoneList4Save);
log.info("[vomp] VompZone更新了{}条数据", zoneList4Save.size());
}
/**
* VompAlarm
*/
private List<VompAlarm> getAlarmList() {
List<VompAlarm> vompAlarmList = Lists.newArrayList();
transCache.getChkStates_PcLog_Map().forEach((chkstates, pcLogs) -> pcLogs.forEach(pclog -> vompAlarmList.add(transHelper.transToVompAlarm(chkstates, pclog))));
return vompAlarmList;
}
/**
* VompHandingInfo
*/
private List<VompHandingInfo> getHandingInfoList() {
List<VompHandingInfo> vompHandingInfoList = Lists.newArrayList();
transCache.getChkStates_ChkRoutes_Map().forEach((chkstates, chkRoutes) -> chkRoutes.forEach(chkRoute -> vompHandingInfoList.add(transHelper.transToHandingInfo(chkstates, chkRoute))));
return vompHandingInfoList;
}
/**
* VompPcInfo
*/
private List<VompPcInfo> getPcInfoList() {
List<VompPcInfo> vompPcInfoList = Lists.newArrayList();
transCache.getZone_PcLog_Map().forEach((zone, pcLogList) -> vompPcInfoList.add(transHelper.transToVompPcInfoVo(zone, pcLogList)));
return vompPcInfoList;
}
/**
* Status
*/
private List<VompStatus> getStatusList() {
return transCache.getServerStatusList().stream()
.map(transHelper::transToStatus)
.collect(Collectors.toList());
}
/**
* VompZone
*/
private List<VompZone> getZoneList() {
return transCache.getZoneList().stream()
.map(transHelper::transToVompZone)
.map(transHelper::addParentZoneName)
.map(transHelper::addGrandParentZoneName)
.collect(Collectors.toList());
}
}
......@@ -38,7 +38,7 @@ public class VompFetcherImpl implements VompFetcher {
uploadZone();
}
private void createFileThenUploadToFtp(String catalog,String data){
private void createFileThenSaveFile(String catalog, String data){
String subName = PLATFORM.getName();
fileCreator.createFile(subName, catalog, data);
log.info("[{}] {}写入完毕",subName,catalog);
......@@ -46,28 +46,28 @@ public class VompFetcherImpl implements VompFetcher {
private void uploadChkRoutes() {
String data = JacksonUtil.toJSon(chkRoutesRepository.findAll());
createFileThenUploadToFtp(CHKROUTES.getName(),data);
createFileThenSaveFile(CHKROUTES.getName(),data);
}
private void uploadChkStates() {
String data = JacksonUtil.toJSon(chkStatesRepository.findAll());
createFileThenUploadToFtp(CHKSTATES.getName(),data);
createFileThenSaveFile(CHKSTATES.getName(),data);
}
private void uploadPcLog() {
String data = JacksonUtil.toJSon(pcLogRepository.findAll());
createFileThenUploadToFtp(PCLOG.getName(),data);
createFileThenSaveFile(PCLOG.getName(),data);
}
private void uploadServerStatus() {
String data = JacksonUtil.toJSon(serverStatusRepository.findAll());
createFileThenUploadToFtp(SERVERSTATUS.getName(),data);
createFileThenSaveFile(SERVERSTATUS.getName(),data);
}
private void uploadZone() {
String data = JacksonUtil.toJSon(zoneRepository.findAll());
createFileThenUploadToFtp(ZONE.getName(),data);
createFileThenSaveFile(ZONE.getName(),data);
}
}
package com.zjty.fp.acq.vomp.subject.service.updater.impl;
import com.zjty.fp.acq.vomp.subject.entity.localdo.VompZone;
import com.zjty.fp.acq.vomp.subject.repository.local.VompZoneRepository;
import com.zjty.fp.acq.vomp.subject.service.cache.VompTransCache;
import com.zjty.fp.acq.vomp.subject.service.updater.VompUpdater;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>Description : fusion-platform
* <p>Date : 2018/12/28 15:27
* <p>@author : C
*/
@SuppressWarnings("SpringAutowiredFieldsWarningInspection")
@Slf4j
@Service
public class VompMapUpdater implements VompUpdater {
@Autowired
VompZoneRepository zoneRepository;
@Autowired
VompTransCache transCache;
@Override
public void updateData() {
transCache.setZoneId_ParentZoneId_Map(createZoneIdToParentZoneIdMap());
transCache.setZoneId_ZoneName_Map(createZoneIdToZoneNameMap());
log.info("[vomp] 更新了数据映射关系Map");
}
private Map<String, String> createZoneIdToParentZoneIdMap() {
return zoneRepository.findAll().stream().collect(Collectors.toMap(VompZone::getZoneId, VompZone::getParentId));
}
private Map<String, String> createZoneIdToZoneNameMap() {
return zoneRepository.findAll().stream().collect(Collectors.toMap(VompZone::getZoneId, VompZone::getZoneName));
}
}
package com.zjty.fp.acq.vomp.task;
import com.zjty.fp.acq.vomp.subject.service.updater.VompFetcher;
import com.zjty.fp.acq.vomp.subject.service.updater.impl.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -24,42 +23,11 @@ public class VompTasks {
VompFetcher vompFetcher;
/**
* 以直连数据库模式更新文件的工具类
* 60分钟执行一次 采集
*/
@Autowired
VompDataDbUpdater dataDbUpdater;
/**
* 以从FTP下载文件并读取的模式更新文件的工具类
*/
@Autowired
VompDataDlUpdater dataDlUpdater;
/**
* 以读取文件模式更新文件的工具类
*/
@Autowired
VompDataRdUpdater dataRdUpdater;
/**
* 更新缓存数据的工具类
*/
@Autowired
VompMapUpdater mapUpdater;
/**
* 60分钟执行一次 读取
*/
// @Scheduled(initialDelay = 4000, fixedRate = 60000 * 60)
@Scheduled(initialDelay = 4000, fixedRate = 60000 * 60)
public void updateData() {
dataDbUpdater.updateData();
mapUpdater.updateData();
vompFetcher.fetchData();
}
/**
* 3分钟执行一次
*/
// @Scheduled(initialDelay = 4000, fixedRate = 60000 * 3)
public void updateRedisData() {
log.info("[vomp] 开始更新缓存数据");
mapUpdater.updateData();
log.info("[vomp] 更新缓存数据完毕");
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论