package com.ycl.platform.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.platform.domain.entity.Platform;
|
import com.ycl.platform.domain.form.PlatformForm;
|
import com.ycl.platform.domain.query.DashboardQuery;
|
import com.ycl.platform.domain.query.PlatformQuery;
|
import com.ycl.platform.domain.vo.PlatformVO;
|
import com.ycl.platform.mapper.PlatformMapper;
|
import com.ycl.platform.service.PlatformService;
|
import com.ycl.system.Result;
|
import com.ycl.system.entity.SysDictData;
|
import com.ycl.system.page.PageUtil;
|
import com.ycl.system.service.ISysDictTypeService;
|
import com.ycl.system.service.impl.SysDictDataServiceImpl;
|
import com.ycl.system.service.impl.SysDictTypeServiceImpl;
|
import enumeration.general.AreaDeptEnum;
|
import org.ehcache.core.util.CollectionUtil;
|
import org.springframework.stereotype.Service;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.Assert;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import java.io.IOException;
|
import java.net.InetAddress;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 平台运行监控 服务实现类
|
*
|
* @author xp
|
* @since 2024-08-15
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class PlatformServiceImpl extends ServiceImpl<PlatformMapper, Platform> implements PlatformService {
|
|
private final PlatformMapper platformMapper;
|
private final SysDictDataServiceImpl dictDataService;
|
private final ISysDictTypeService dictTypeService;
|
|
/**
|
* 添加
|
*
|
* @param form
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Result add(PlatformForm form) {
|
Platform entity = PlatformForm.getEntityByForm(form, null);
|
entity.setParentId(0);
|
Date now = new Date();
|
entity.setCreateTime(now);
|
entity.setUpdateTime(now);
|
String area = form.getAreaList().stream().collect(Collectors.joining(","));
|
entity.setArea(area);
|
baseMapper.insert(entity);
|
// if (! CollectionUtils.isEmpty(form.getDeployList())) {
|
// List<Platform> childList = form.getDeployList().stream().map(deploy -> {
|
// Platform child = new Platform();
|
// BeanUtils.copyProperties(deploy, child);
|
// child.setPlatformName(entity.getPlatformName());
|
// child.setParentId(entity.getId());
|
// child.setCreateTime(now);
|
// child.setUpdateTime(now);
|
// return child;
|
// }).collect(Collectors.toList());
|
// this.saveBatch(childList);
|
// }
|
return Result.ok("添加成功");
|
}
|
|
/**
|
* 修改
|
*
|
* @param form
|
* @return
|
*/
|
@Override
|
public Result update(PlatformForm form) {
|
Platform entity = baseMapper.selectById(form.getId());
|
|
// 为空抛IllegalArgumentException,做全局异常处理
|
Assert.notNull(entity, "记录不存在");
|
BeanUtils.copyProperties(form, entity);
|
String area = form.getAreaList().stream().collect(Collectors.joining(","));
|
entity.setArea(area);
|
baseMapper.updateById(entity);
|
return Result.ok("修改成功");
|
}
|
|
/**
|
* 批量删除
|
*
|
* @param ids
|
* @return
|
*/
|
@Override
|
public Result remove(List<String> ids) {
|
baseMapper.deleteBatchIds(ids);
|
return Result.ok("删除成功");
|
}
|
|
/**
|
* id删除
|
*
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result removeById(String id) {
|
baseMapper.deleteById(id);
|
return Result.ok("删除成功");
|
}
|
|
/**
|
* 分页查询
|
*
|
* @param query
|
* @return
|
*/
|
@Override
|
public Result page(PlatformQuery query) {
|
List<PlatformVO> list = baseMapper.getPage(query);
|
// List<PlatformVO> parentList = list.stream().filter(item -> item.getParentId() == 0).collect(Collectors.toList());
|
List<SysDictData> areaCodeList = dictTypeService.selectDictDataByType("area_code");
|
Map<String, String> dictMap = areaCodeList.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
|
for (PlatformVO platform : list) {
|
String[] areaList = platform.getArea().split(",");
|
List<String> areas = new ArrayList<>();
|
for (String s : areaList) {
|
String label = dictMap.get(s);
|
if (StringUtils.hasText(label)) {
|
areas.add(label);
|
}
|
}
|
platform.setAreaList(areaList);
|
platform.setArea(areas.stream().collect(Collectors.joining("、")));
|
// List<PlatformVO> childList = list.stream().filter(item -> item.getParentId().equals(parent.getId())).collect(Collectors.toList());
|
//
|
// parent.setChildNum(childList.size());
|
// resultList.add(parent);
|
// resultList.addAll(childList);
|
}
|
// 前端不用展示分页
|
return Result.ok().data(list).total(0);
|
}
|
|
/**
|
* 根据id查找
|
*
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result detail(Integer id) {
|
PlatformVO vo = baseMapper.getById(id);
|
Assert.notNull(vo, "记录不存在");
|
return Result.ok().data(vo);
|
}
|
|
/**
|
* 列表
|
*
|
* @return
|
*/
|
@Override
|
public Result all() {
|
List<Platform> entities = baseMapper.selectList(null);
|
List<PlatformVO> vos = entities.stream()
|
.map(entity -> PlatformVO.getVoByEntity(entity, null))
|
.collect(Collectors.toList());
|
return Result.ok().data(vos);
|
}
|
|
@Override
|
public Map<String, Map<String, Object>> dashboard(DashboardQuery dashboardQuery) {
|
//先默认所有区县平台在线,初始化map数据
|
Map<String, Map<String, Object>> resultMap = new HashMap<>();
|
for (AreaDeptEnum value : AreaDeptEnum.values()) {
|
Map<String, Object> map = new HashMap<>();
|
map.put("platformOnline", Boolean.TRUE);
|
resultMap.put(value.getName(), map);
|
}
|
//平台在线状态 默认在线,如果一个不在线改为false。
|
List<Platform> platformList = new LambdaQueryChainWrapper<>(platformMapper)
|
.isNotNull(Platform::getPlatformIP)
|
.list();
|
Boolean reachable = Boolean.FALSE;
|
try {
|
for (Platform platform : platformList) {
|
reachable = InetAddress.getByName(platform.getPlatformIP()).isReachable(3000);
|
//不在线
|
if (!reachable) {
|
//获取平台管理的区域编码集合
|
List<String> areaCodes = Arrays.asList(com.ycl.utils.StringUtils.split(platform.getArea(), ","));
|
resultMap.forEach((deptName, map) -> {
|
if (areaCodes.contains(AreaDeptEnum.fromName(deptName).getCode())) {
|
map.put("platformOnline", Boolean.FALSE);
|
}
|
});
|
}
|
}
|
} catch (Exception e) {
|
log.error("检查平台连通性时发生错误", e);
|
}
|
return resultMap;
|
}
|
}
|