package com.zt.modules.sys.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.zt.common.constant.CacheKey;
|
import com.zt.common.constant.Constant;
|
import com.zt.common.service.BaseService;
|
import com.zt.common.utils.CacheUtils;
|
import com.zt.core.db.annotation.DataFilterParser;
|
import com.zt.core.db.model.DataFilterField;
|
import com.zt.core.db.model.DataFilterMethod;
|
import com.zt.modules.sys.dao.SysInterfaceDao;
|
import com.zt.modules.sys.dao.SysInterfaceFieldDao;
|
import com.zt.modules.sys.dto.InterfaceDto;
|
import com.zt.modules.sys.mapstruct.SysInterfaceMapper;
|
import com.zt.modules.sys.model.SysInterface;
|
import com.zt.modules.sys.model.SysInterfaceField;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* SYS_INTERFACE
|
*
|
* @author hehz
|
* @since 1.0.0 2020-06-02
|
*/
|
@Service
|
public class SysInterfaceService extends BaseService<SysInterfaceDao, SysInterface> {
|
|
@Resource
|
private SysInterfaceMapper sysInterfaceMapper;
|
@Resource
|
private DataFilterParser dataFilterParser;
|
@Resource
|
private SysInterfaceFieldDao sysInterfaceFieldDao;
|
|
private List<SysInterface> getAll() {
|
List<SysInterface> interfaces = (List<SysInterface>) CacheUtils.get(Constant.Cache.SYS, CacheKey.SYS_INTERFACE);
|
if (interfaces == null) {
|
interfaces = baseDao.selectList(new QueryWrapper<SysInterface>().eq(Constant.TableColumn.IS_DELETE,
|
Constant.Bool.NO));
|
|
List<SysInterfaceField> fields = sysInterfaceFieldDao.selectList(new QueryWrapper<SysInterfaceField>().eq(
|
Constant.TableColumn.IS_DELETE, Constant.Bool.NO));
|
|
for (SysInterface anInterface : interfaces) {
|
anInterface.setFields(fields.stream().filter(f -> f.getInterfaceId().equals(anInterface.getId()))
|
.collect(Collectors.toList()));
|
}
|
CacheUtils.put(Constant.Cache.SYS, CacheKey.SYS_INTERFACE, interfaces);
|
}
|
return interfaces;
|
}
|
|
/**
|
* 获取接口树
|
*
|
* @return
|
*/
|
public List<InterfaceDto> tree() {
|
List<SysInterface> all = getAll();
|
List<InterfaceDto> list = new ArrayList<>();
|
Map<String, InterfaceDto> group1Map = new HashMap<>();
|
Map<String, InterfaceDto.Group2> group2Map = new HashMap<>();
|
|
for (int i = 0; i < all.size(); i++) {
|
SysInterface sysInterface = all.get(i);
|
String group1 = sysInterface.getGroup1();
|
String group2 = sysInterface.getGroup2();
|
String method = sysInterface.getMethod();
|
|
InterfaceDto interfaceDto;
|
if (group1Map.containsKey(group1)) {
|
interfaceDto = group1Map.get(group1);
|
} else {
|
interfaceDto = new InterfaceDto(100L + i, 0L, group1);
|
list.add(interfaceDto);
|
group1Map.put(group1, interfaceDto);
|
}
|
|
InterfaceDto.Group2 groug2Dto;
|
String group2Key = group1 + ":" + group2;
|
if (group2Map.containsKey(group2Key)) {
|
groug2Dto = group2Map.get(group2Key);
|
} else {
|
groug2Dto = new InterfaceDto.Group2(1000000L + i, interfaceDto.getId(), group2);
|
interfaceDto.getChildren().add(groug2Dto);
|
group2Map.put(group2Key, groug2Dto);
|
}
|
|
InterfaceDto.Method methodDto = new InterfaceDto.Method(sysInterface.getId(), groug2Dto.getId(), method,
|
sysInterface.getId());
|
groug2Dto.getChildren().add(methodDto);
|
|
List<SysInterfaceField> fields = sysInterface.getFields();
|
for (SysInterfaceField field : fields) {
|
InterfaceDto.Field dto = new InterfaceDto.Field();
|
dto.setId(field.getId());
|
dto.setPid(field.getInterfaceId());
|
dto.setName(field.getName());
|
dto.setField(field.getField());
|
dto.setOp(field.getOp());
|
dto.setFieldId(field.getId());
|
dto.setAccept(field.getAccept());
|
dto.setDefaul(field.getDefaul());
|
methodDto.getFields().add(dto);
|
}
|
|
}
|
return list;
|
}
|
|
/**
|
* 保存自动扫描的接口
|
*/
|
public void saveInterfaces() throws Exception {
|
List<DataFilterMethod> methods = dataFilterParser.getFilteredMethods();
|
|
List<SysInterface> interfaces = this.getAll();
|
Map<String, SysInterface> interfaceMap = new HashMap<>();
|
for (SysInterface interfaceEntity : interfaces) {
|
interfaceMap.put(interfaceEntity.getUrl(), interfaceEntity);
|
}
|
|
for (DataFilterMethod method : methods) {
|
SysInterface interfaceDb = interfaceMap.get(method.getUrl());
|
if (interfaceDb == null) {// 新加的
|
// 新增接口
|
SysInterface interfaceEntity = getByMethod(method);
|
interfaceEntity.setDelete(false);
|
baseDao.insert(interfaceEntity);
|
// 新增接口字段
|
for (DataFilterField field : method.getFields()) {
|
this.addInterfaceField(interfaceEntity.getId(), field);
|
}
|
} else {// 已有的
|
interfaceMap.remove(interfaceDb.getUrl());// 从map删除
|
// 判断接口名称是否需要修改
|
if (!interfaceDb.getInterfaceName().equals(method.getMethodName())) {// 需要修改的
|
SysInterface entity = sysInterfaceMapper.fromMethod(method);
|
entity.setId(interfaceDb.getId());
|
entity.setDelete(false);
|
baseDao.updateById(entity);
|
}
|
// 判断字段是否需要修改
|
Map<String, SysInterfaceField> fieldMap = interfaceDb.getFields().stream()
|
.collect(Collectors.toMap(f -> f.getField(), f -> f));
|
for (DataFilterField field : method.getFields()) {
|
SysInterfaceField fieldDb = fieldMap.get(field.getField());
|
if (fieldDb == null) { // 新加的
|
this.addInterfaceField(interfaceDb.getId(), field);
|
} else {
|
fieldMap.remove(fieldDb.getField());// 从map删除
|
if (!fieldDb.getName().equals(field.getName()) || !fieldDb.getAccept().equals(field.getAccept()) || fieldDb.getOp().equals(field.getOp())) {// 需要修改
|
fieldDb.setName(field.getName());
|
fieldDb.setAccept(field.getAccept());
|
fieldDb.setOp(field.getOp());
|
sysInterfaceFieldDao.updateById(fieldDb);
|
}
|
}
|
}
|
for (SysInterfaceField fieldDb : fieldMap.values()) {// 剩余的设置为无效
|
fieldDb.setDelete(true);
|
sysInterfaceFieldDao.updateById(fieldDb);
|
}
|
}
|
}
|
for (SysInterface interfaceEntityDb : interfaceMap.values()) {// 剩余的设置为无效
|
interfaceEntityDb.setDelete(true);
|
baseDao.updateById(interfaceEntityDb);
|
}
|
|
CacheUtils.remove(Constant.Cache.SYS, CacheKey.SYS_INTERFACE);// 清除缓存
|
}
|
|
private void addInterfaceField(Long interfaceId, DataFilterField field) {
|
SysInterfaceField entity = new SysInterfaceField();
|
entity.setInterfaceId(interfaceId);
|
entity.setField(field.getField());
|
entity.setAccept(field.getAccept());
|
entity.setName(field.getName());
|
entity.setOp(field.getOp());
|
entity.setDelete(false);
|
sysInterfaceFieldDao.insert(entity);
|
}
|
|
public SysInterface getInterfaceByUrl(String url) {
|
List<SysInterface> list = getAll().stream().filter(entity -> entity.getUrl().equals(url))
|
.collect(Collectors.toList());
|
return list.size() > 0 ? list.get(0) : null;
|
}
|
|
private SysInterface getByMethod(DataFilterMethod method) {
|
SysInterface sysInterface = new SysInterface();
|
sysInterface.setUrl(method.getUrl());
|
sysInterface.setGroup1(method.getSwagger());
|
sysInterface.setGroup2(method.getApiTags());
|
sysInterface.setMethod(method.getMethod());
|
sysInterface.setDelete(false);
|
return sysInterface;
|
}
|
|
}
|