diff --git a/biz/pom.xml b/biz/pom.xml index 8b57e56d61c1982293f5a2736ca2feb65a4dd425..7001a9bcdcb685efe9700faa0ba1779459bbfcd0 100644 --- a/biz/pom.xml +++ b/biz/pom.xml @@ -38,6 +38,11 @@ 1.8 1.8 + + org.projectlombok + lombok + ${lombok.version} + org.mapstruct mapstruct-processor diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/SystemMapper.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/SystemMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..01cb2588b8965aa87bf2d6891b76ca4d549983a9 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/SystemMapper.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.biz.mapper; + +import cn.icanci.loopstack.bic.common.model.base.SystemVO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.SystemDO; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:24 + */ +@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface SystemMapper extends BaseMapper { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/UseCaseMapper.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/UseCaseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..8c176a345e03ca83a02acfacef8de3d165f28484 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/UseCaseMapper.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.biz.mapper; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +import cn.icanci.loopstack.bic.common.model.base.UseCaseVO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UseCaseDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 20:11 + */ +@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface UseCaseMapper extends BaseMapper { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/AbstractBaseConverter.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/AbstractBaseConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..4d7b24f429862d8c6ce9e7477a08e2cac70678b3 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/AbstractBaseConverter.java @@ -0,0 +1,48 @@ +package cn.icanci.loopstack.bic.biz.mapper.convertor; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +import org.apache.commons.lang3.StringUtils; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/11 17:03 + */ +public abstract class AbstractBaseConverter> implements BaseConverter { + @Override + public String asString(T t) { + if (t != null) { + return t.name(); + } + return null; + } + + @SuppressWarnings("all") + @Override + public T asEnum(String str) { + if (StringUtils.isBlank(str)) { + return null; + } + Class clazz = getClass(); + Class actualTypeArgument = (Class) GenericSuperclassUtil.getActualTypeArgument(clazz); + return (T) T.valueOf(actualTypeArgument, str); + } + + /** + * 获取泛型类Class对象,不是泛型类则返回null + */ + private static final class GenericSuperclassUtil { + public static Class getActualTypeArgument(Class clazz) { + Class entityClass = null; + Type genericSuperclass = clazz.getGenericSuperclass(); + if (genericSuperclass instanceof ParameterizedType) { + Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass).getActualTypeArguments(); + if (actualTypeArguments != null && actualTypeArguments.length > 0) { + entityClass = (Class) actualTypeArguments[0]; + } + } + return entityClass; + } + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/BaseConverter.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/BaseConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..9302ea03fae75a4f7ca1a57242e3463fed693ab6 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/BaseConverter.java @@ -0,0 +1,23 @@ +package cn.icanci.loopstack.bic.biz.mapper.convertor; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/11 17:03 + */ +public interface BaseConverter> { + /** + * 枚举转编码 + * + * @param t 枚举 + * @return 编码 + */ + String asString(T t); + + /** + * 编码转枚举 + * + * @param str 编码 + * @return 枚举 + */ + T asEnum(String str); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/FuncTypeEnumConverter.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/FuncTypeEnumConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..afd300b64ddbabbb8bf0d3f43b6d63ec0c0d1bb0 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/FuncTypeEnumConverter.java @@ -0,0 +1,14 @@ +package cn.icanci.loopstack.bic.biz.mapper.convertor; + +import org.springframework.stereotype.Component; + +import cn.icanci.loopstack.bic.common.enums.FuncTypeEnum; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/11 17:03 + */ +@Component +public class FuncTypeEnumConverter extends AbstractBaseConverter { + +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BaseService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BaseService.java new file mode 100644 index 0000000000000000000000000000000000000000..bcce54a84bc73cfc32ceee3d001b3b5a415792c1 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BaseService.java @@ -0,0 +1,74 @@ +package cn.icanci.loopstack.bic.biz.service; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; + +/** + * Base Service for CRUD + * + * @author icanci + * @since 1.0 Created in 2023/09/10 15:20 + */ +public interface BaseService { + /** label 格式化 */ + String DELETED_FORMAT = "[无效] %s"; + + /** label 格式化 */ + String NOT_DELETED_FORMAT = "[有效] %s"; + + /** + * 查询所有 T + * + * @return 返回所有T + */ + List queryAll(); + + /** + * 保存或者更新一条信息 + * + * @param t t + */ + void save(T t); + + /** + * 根据id进行查询 + * + * @param id id + * @return 返回查询的结果 + */ + T queryById(String id); + + /** + * 分页查询 + * + * @param t T + * @param pageNum pageNum + * @param pageSize pageSize + * @return 返回分页查询结果 + */ + PageList queryPage(T t, int pageNum, int pageSize); + + /** + * 是否是插入 + * + * @param t t + * @return 返回是否是插入 + */ + default boolean doInsert(T t) { + return StringUtils.isBlank(t.getId()); + } + + /** + * 是否是删除的 + * + * @param t t + * @return 返回是否是删除的 + */ + default boolean isDeleted(T t) { + return t.isDeleted(); + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java index 2961367b8bd829cc1a6f95546aecded254852eb9..54645792787852cba1997e463ed5774474e2a4f1 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java @@ -3,23 +3,19 @@ package cn.icanci.loopstack.bic.biz.service; import java.util.List; import cn.icanci.loopstack.bic.common.model.BuryingVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; /** * @author icanci * @since 1.0 Created in 2023/08/19 15:40 */ public interface BuryingService { - /** - * 批量插入 - * - * @param buryingList buryingList - */ + void batchInsert(List buryingList); - /** - * 查询所有数据 - * - * @return 返回所有数据 - */ List queryAll(); + + PageList queryPage(BuryingVO burying, int pageNum, int pageSize); + + void save(BuryingVO burying); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/SystemService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/SystemService.java new file mode 100644 index 0000000000000000000000000000000000000000..5491e238c7aa61de0ae981cd6e0393f07554817a --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/SystemService.java @@ -0,0 +1,32 @@ +package cn.icanci.loopstack.bic.biz.service; + +import cn.icanci.loopstack.bic.common.model.TextValue; +import cn.icanci.loopstack.bic.common.model.base.SystemVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; + +import java.util.List; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:19 + */ +public interface SystemService extends BaseService { + + @Override + List queryAll(); + + @Override + void save(SystemVO systemVO); + + @Override + SystemVO queryById(String id); + + @Override + PageList queryPage(SystemVO systemVO, int pageNum, int pageSize); + + List loadSelector(); + + SystemVO queryByName(String name); + + SystemVO queryByKey(String key); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UseCaseService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UseCaseService.java new file mode 100644 index 0000000000000000000000000000000000000000..1135d0351b34b7223cc025b244dcf02b0e8c6c9e --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UseCaseService.java @@ -0,0 +1,31 @@ +package cn.icanci.loopstack.bic.biz.service; + +import java.util.List; + +import cn.icanci.loopstack.bic.common.model.TextValue; +import cn.icanci.loopstack.bic.common.model.base.UseCaseVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 20:09 + */ +public interface UseCaseService extends BaseService { + @Override + List queryAll(); + + @Override + void save(UseCaseVO useCaseVO); + + @Override + UseCaseVO queryById(String id); + + @Override + PageList queryPage(UseCaseVO useCaseVO, int pageNum, int pageSize); + + UseCaseVO queryBySystemUuidAndName(String systemUuid, String name); + + UseCaseVO queryBySystemUuidAndKey(String systemUuid, String key); + + List loadSelector(String systemUuid); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java index aad6bae66bd5a1d7e852805d72fc0085a8f8354d..fd2155f770e010dd18885dce544a9e51b3a894f0 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java @@ -5,12 +5,15 @@ import java.util.List; import javax.annotation.Resource; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import cn.icanci.loopstack.bic.biz.mapper.BuryingMapper; import cn.icanci.loopstack.bic.biz.service.BuryingService; import cn.icanci.loopstack.bic.common.model.BuryingVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; import cn.icanci.loopstack.bic.dal.mongo.daointerface.BuryingDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.BuryingDO; /** * @author icanci @@ -35,4 +38,23 @@ public class BuryingServiceImpl implements BuryingService { public List queryAll() { return buryingMapper.dos2vos(buryingDAO.queryAll()); } + + @Override + public PageList queryPage(BuryingVO burying, int pageNum, int pageSize) { + PageList pageQuery = buryingDAO.pageQuery(buryingMapper.vo2do(burying), pageNum, pageSize); + return new PageList<>(buryingMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + } + + @Override + public void save(BuryingVO burying) { + if (doInsert(burying)) { + buryingDAO.insert(buryingMapper.vo2do(burying)); + } else { + buryingDAO.update(buryingMapper.vo2do(burying)); + } + } + + private boolean doInsert(BuryingVO burying) { + return StringUtils.isBlank(burying.getId()); + } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SystemServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SystemServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..37fc92e5b1f126fdf7609ba611dac08a48fda52a --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SystemServiceImpl.java @@ -0,0 +1,84 @@ +package cn.icanci.loopstack.bic.biz.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.google.common.collect.Lists; + +import cn.icanci.loopstack.bic.biz.mapper.SystemMapper; +import cn.icanci.loopstack.bic.biz.service.SystemService; +import cn.icanci.loopstack.bic.common.model.TextValue; +import cn.icanci.loopstack.bic.common.model.base.SystemVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.SystemDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.SystemDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:21 + */ +@Service +public class SystemServiceImpl implements SystemService { + + @Resource + private SystemDAO systemDAO; + @Resource + private SystemMapper systemMapper; + + @Override + public List queryAll() { + return systemMapper.dos2vos(systemDAO.queryAll()); + } + + @Override + public void save(SystemVO systemVO) { + // TODO 日志记录 + if (doInsert(systemVO)) { + SystemDO insert = systemMapper.vo2do(systemVO); + systemDAO.insert(insert); + } else { + systemDAO.update(systemMapper.vo2do(systemVO)); + } + } + + @Override + public SystemVO queryById(String id) { + return systemMapper.do2vo(systemDAO.queryOneById(id)); + } + + @Override + public PageList queryPage(SystemVO systemVO, int pageNum, int pageSize) { + PageList pageQuery = systemDAO.pageQuery(systemMapper.vo2do(systemVO), pageNum, pageSize); + return new PageList<>(systemMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + } + + @Override + public List loadSelector() { + List systems = queryAll(); + List textValues = Lists.newArrayList(); + for (SystemVO system : systems) { + String label; + if (isDeleted(system)) { + label = String.format(DELETED_FORMAT, system.systemName()); + } else { + label = String.format(NOT_DELETED_FORMAT, system.systemName()); + } + String value = system.getUuid(); + textValues.add(new TextValue(label, value)); + } + return textValues; + } + + @Override + public SystemVO queryByName(String name) { + return systemMapper.do2vo(systemDAO.queryByName(name)); + } + + @Override + public SystemVO queryByKey(String key) { + return systemMapper.do2vo(systemDAO.queryByKey(key)); + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UseCaseServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UseCaseServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ca009303cb9d0a0d17ba089bba63823120547017 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UseCaseServiceImpl.java @@ -0,0 +1,90 @@ +package cn.icanci.loopstack.bic.biz.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import com.google.common.collect.Lists; + +import cn.icanci.loopstack.bic.biz.mapper.UseCaseMapper; +import cn.icanci.loopstack.bic.biz.service.UseCaseService; +import cn.icanci.loopstack.bic.common.model.TextValue; +import cn.icanci.loopstack.bic.common.model.base.UseCaseVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.UseCaseDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UseCaseDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 20:10 + */ +@Service("useCaseService") +public class UseCaseServiceImpl implements UseCaseService { + + @Resource + private UseCaseDAO useCaseDAO; + @Resource + private UseCaseMapper useCaseMapper; + + @Override + public List queryAll() { + return useCaseMapper.dos2vos(useCaseDAO.queryAll()); + } + + @Override + public void save(UseCaseVO useCaseVO) { + // TODO 日志记录 + if (doInsert(useCaseVO)) { + UseCaseDO insert = useCaseMapper.vo2do(useCaseVO); + useCaseDAO.insert(insert); + } else { + useCaseDAO.update(useCaseMapper.vo2do(useCaseVO)); + } + } + + @Override + public UseCaseVO queryById(String id) { + return useCaseMapper.do2vo(useCaseDAO.queryOneById(id)); + } + + @Override + public PageList queryPage(UseCaseVO useCaseVO, int pageNum, int pageSize) { + PageList pageQuery = useCaseDAO.pageQuery(useCaseMapper.vo2do(useCaseVO), pageNum, pageSize); + return new PageList<>(useCaseMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + } + + @Override + public UseCaseVO queryBySystemUuidAndName(String systemUuid, String name) { + return useCaseMapper.do2vo(useCaseDAO.queryBySystemUuidAndName(systemUuid, name)); + } + + @Override + public UseCaseVO queryBySystemUuidAndKey(String systemUuid, String key) { + return useCaseMapper.do2vo(useCaseDAO.queryBySystemUuidAndKey(systemUuid, key)); + } + + @Override + public List loadSelector(String systemUuid) { + List useCases = queryAll(); + List textValues = Lists.newArrayList(); + for (UseCaseVO useCaseVO : useCases) { + + if (!StringUtils.equals(systemUuid, useCaseVO.getSystemUuid())) { + continue; + } + + String label; + if (isDeleted(useCaseVO)) { + label = String.format(DELETED_FORMAT, useCaseVO.getUseCaseName()); + } else { + label = String.format(NOT_DELETED_FORMAT, useCaseVO.getUseCaseName()); + } + String value = useCaseVO.getUuid(); + textValues.add(new TextValue(label, value)); + } + return textValues; + } +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/enums/FuncTypeEnum.java b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/FuncTypeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..3577aafa45a722661bc35d952ddb3bc5363dffd3 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/FuncTypeEnum.java @@ -0,0 +1,28 @@ +package cn.icanci.loopstack.bic.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 函数类型 + * + * @author icanci + * @since 1.0 Created in 2023/09/02 21:18 + */ +@Getter +@AllArgsConstructor +public enum FuncTypeEnum { + /** + * Click函数 + */ + CLICK("CLICK", "Click函数"), + /** + * Hover函数 + */ + HOVER("HOVER", "Hover函数"); + + private final String code; + + private final String desc; + +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/enums/ModuleTypeEnum.java b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/ModuleTypeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..b9c138abdca09b49b2b7e8070f2f3506d61b4955 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/ModuleTypeEnum.java @@ -0,0 +1,21 @@ +package cn.icanci.loopstack.bic.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:36 + */ +@Getter +@AllArgsConstructor +public enum ModuleTypeEnum { + /** + * SYSTEM + */ + BIC_SYSTEM("BIC_SYSTEM", "系统配置"); + + private final String code; + private final String desc; + +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..878605888e675aadb26666c6f8dca2c8b7b6224f --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java @@ -0,0 +1,29 @@ +package cn.icanci.loopstack.bic.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 节点数据匹配模式 + * - 前缀匹配: 只匹配前缀值 + * - 全部匹配: 全部匹配才绑定数据 + * + * @author icanci + * @since 1.0 Created in 2023/09/08 10:45 + */ +@Getter +@AllArgsConstructor +public enum NodeDataModeEnum { + /** + * 前缀匹配: 只匹配前缀值 + */ + PREFIX("PREFIX", "前缀匹配"), + /** + * 全部匹配: 全部匹配才绑定数据 + */ + ALL("ALL", "全部匹配"); + + private final String code; + + private final String desc; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeTypeEnum.java b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeTypeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..67194371f1b60468c9ea0f2814bd19f0d2b838b2 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeTypeEnum.java @@ -0,0 +1,39 @@ +package cn.icanci.loopstack.bic.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 节点类型 + * - 根节点: 纠察图的起点,一定是实节点或虚节点 + * - 虚节点: 纠察图的某个业务节点,其通过子业务推导而来 + * - 实节点: 真实的埋点业务节点 + * - 孩子节点:孩子节点: 真实的埋点业务节点 + * + * @author icanci + * @since 1.0 Created in 2023/09/02 21:18 + */ +@Getter +@AllArgsConstructor +public enum NodeTypeEnum { + /** + * 根节点: 纠察图的起点,一定是实节点或虚节点 + */ + ROOT("ROOT", "根节点"), + /** + * 虚节点: 纠察图的某个业务节点,其通过子业务推导而来 + */ + VIRTUAL("VIRTUAL", "虚节点"), + /** + * 实节点: 真实的埋点业务节点 + */ + REAL("REAL", "实节点"), + /** + * 孩子节点: 真实的埋点业务节点 + */ + CHILD("CHILD", "孩子节点"); + + private final String code; + + private final String desc; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/help/TODO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/help/TODO.java new file mode 100644 index 0000000000000000000000000000000000000000..efc3c1d85acc0eef1d6e2b5b73867b0b80b0da95 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/help/TODO.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.common.help; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * TODO 标识需要做的东西 + * + * @author icanci + * @since 1.0 Created in 2023/09/02 21:27 + */ +@Target({ ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR }) +@Retention(RetentionPolicy.SOURCE) +public @interface TODO { + String value(); +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/help/Tips.java b/common/src/main/java/cn/icanci/loopstack/bic/common/help/Tips.java new file mode 100644 index 0000000000000000000000000000000000000000..c3fdf2de52a7b05bc377d937b4831c335a7e99da --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/help/Tips.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.common.help; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Tips 标识需要做的东西 + * + * @author icanci + * @since 1.0 Created in 2023/09/02 21:27 + */ +@Target({ ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR }) +@Retention(RetentionPolicy.SOURCE) +public @interface Tips { + String value(); +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/BaseVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/BaseVO.java index bc498af8d9c871e9f62043c73343a17235363f8e..d44d9b005380ebafcff9589d395b4a8a29a3a2bf 100644 --- a/common/src/main/java/cn/icanci/loopstack/bic/common/model/BaseVO.java +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/BaseVO.java @@ -1,14 +1,16 @@ package cn.icanci.loopstack.bic.common.model; import java.util.Date; -import java.util.StringJoiner; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + /** * @author icanci * @since 1.0 Created in 2023/08/19 15:08 */ +@Data public class BaseVO { /** mongodb id */ private String id; @@ -25,57 +27,4 @@ public class BaseVO { /** 环境 */ private String env; - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public boolean isDeleted() { - return deleted; - } - - public void setDeleted(boolean deleted) { - this.deleted = deleted; - } - - public String getEnv() { - return env; - } - - public void setEnv(String env) { - this.env = env; - } - - @Override - public String toString() { - return new StringJoiner(",").add("id=" + id).add("uuid=" + uuid).add("createTime=" + createTime).add("updateTime=" + updateTime).add("deleted=" + deleted).add("env=" + env) - .toString(); - } } diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/BuryingVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/BuryingVO.java index 9fdf85d94b0aedcf3fa6f51f1d9cae2e35113f8e..44ba9de8e8fef71d293fa142cfb5981187c4b7ac 100644 --- a/common/src/main/java/cn/icanci/loopstack/bic/common/model/BuryingVO.java +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/BuryingVO.java @@ -1,6 +1,7 @@ package cn.icanci.loopstack.bic.common.model; -import java.util.StringJoiner; +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; /** * 埋点模型 @@ -8,6 +9,7 @@ import java.util.StringJoiner; * @author icanci * @since 1.0 Created in 2023/08/19 14:43 */ +@Data public class BuryingVO extends BaseVO { /** TraceId */ private String traceId; @@ -15,74 +17,22 @@ public class BuryingVO extends BaseVO { private String businessNo; /** 系统应用唯一标识 */ private String systemKey; + /** 应用系统用例 */ + private String useCase; /** 模块 */ private String module; - /** 子模块,用于区分同模块下不同的展示类型 */ + /** 分类,用于区分同模块下不同的展示类型 */ private String category; + /** 子模块,用于区分同模块下不同的展示类型 */ + private String subCategory; + /** 扩展属性 */ + private String ext; /** 时间 */ private long time; /** 执行数据 */ private String message; - - public String getTraceId() { - return traceId; - } - - public void setTraceId(String traceId) { - this.traceId = traceId; - } - - public String getBusinessNo() { - return businessNo; - } - - public void setBusinessNo(String businessNo) { - this.businessNo = businessNo; - } - - public String getSystemKey() { - return systemKey; - } - - public void setSystemKey(String systemKey) { - this.systemKey = systemKey; - } - - public String getModule() { - return module; - } - - public void setModule(String module) { - this.module = module; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - @Override - public String toString() { - return new StringJoiner(",").add("traceId=" + traceId).add("businessNo=" + businessNo).add("systemKey=" + systemKey).add("module=" + module).add("category=" + category) - .add("time=" + time).add("message=" + message).toString(); - } + /** 日志等级 */ + private String loggerLevel; + /** 数据的唯一标识 */ + private String uniqueKey; } diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/TextValue.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/TextValue.java new file mode 100644 index 0000000000000000000000000000000000000000..e9549d7065c4e52391928da863af15ef5ad0a56f --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/TextValue.java @@ -0,0 +1,67 @@ +package cn.icanci.loopstack.bic.common.model; + +import java.io.Serializable; +import java.util.List; + +/** + * @author icanci + * @since 1.0 Created in 2022/11/12 16:38 + */ +public class TextValue implements Serializable { + private static final long serialVersionUID = -3727976523289870284L; + + private String label; + private Object value; + private T data; + private List list; + + public TextValue(String label, Object value) { + this.label = label; + this.value = value; + } + + public TextValue(String label, Object value, T data) { + this.label = label; + this.value = value; + this.data = data; + } + + public TextValue(String label, Object value, T data, List list) { + this.label = label; + this.value = value; + this.data = data; + this.list = list; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeFuncVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeFuncVO.java new file mode 100644 index 0000000000000000000000000000000000000000..5b8dcde3c14c62d6f5a4eb959e56c8b8593f7d8a --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeFuncVO.java @@ -0,0 +1,34 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.enums.FuncTypeEnum; +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 边函数模型 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 14:54 + */ +@Data +public class EdgeFuncVO extends BaseVO { + /** + * 边函数所属系统 + * 必填 + */ + private String systemUuid; + /** + * 边函数类型 + * + * @see FuncTypeEnum#getCode() + */ + private FuncTypeEnum edgeFuncType; + /** + * 边函数名称 + */ + private String edgeFuncName; + /** + * 边函数体 + */ + private String edgeFuncBody; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeStyleVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeStyleVO.java new file mode 100644 index 0000000000000000000000000000000000000000..bd5c14d79626df55a81717c0486f9ff7ba791220 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeStyleVO.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 边样式 + * + * @author icanci + * @since 1.0 Created in 2023/09/09 23:05 + */ +@Data +public class EdgeStyleVO extends BaseVO { + /** 边样式名称 */ + private String edgeStyleName; + /** json格式的数据格式 */ + private String style; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..5bc737301051f1f7f4c74b351cc5b9aebf41890d --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/EdgeVO.java @@ -0,0 +1,20 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 边模型 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 14:54 + */ +@Data +public class EdgeVO extends BaseVO { + /** 边命名 */ + private String edgeName; + /** 边Key */ + private String edgeKey; + /** 系统唯一标识 */ + private String systemUuid; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/LogVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/LogVO.java new file mode 100644 index 0000000000000000000000000000000000000000..b3c6de6e4e6eeab515fa6315e76deff6fcdfcd80 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/LogVO.java @@ -0,0 +1,22 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 日志 + * + * @author icanci + * @since 1.0 Created in 2023/09/10 14:15 + */ +@Data +public class LogVO extends BaseVO { + /** 日志模块 */ + private String module; + /** 记录ID */ + private String targetId; + /** 操作类型 */ + private String operatorType; + /** 日志操作内容 */ + private String content; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeFuncVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeFuncVO.java new file mode 100644 index 0000000000000000000000000000000000000000..2c9ffd8d2a1a096767f139a99c67344b7df7137c --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeFuncVO.java @@ -0,0 +1,34 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.enums.FuncTypeEnum; +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 节点动作韩胡思模型 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 14:54 + */ +@Data +public class NodeFuncVO extends BaseVO { + /** + * 节点函数所属系统 + * 必填 + */ + private String systemUuid; + /** + * 节点函数类型 + * + * @see FuncTypeEnum#getCode() + */ + private FuncTypeEnum nodeFuncType; + /** + * 节点函数名称 + */ + private String nodeFuncName; + /** + * 节点函数体 + */ + private String nodeFuncBody; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeStyleVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeStyleVO.java new file mode 100644 index 0000000000000000000000000000000000000000..dc5a398cd34384a5514d56b54e25ac8245c3e298 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeStyleVO.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 节点样式 + * + * @author icanci + * @since 1.0 Created in 2023/09/08 10:42 + */ +@Data +public class NodeStyleVO extends BaseVO { + /** 节点样式名称 */ + private String nodeStyleName; + /** json格式的数据格式 */ + private String style; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..9abea5e175b5cee9aa9d40fb730a018ca58c884e --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/NodeVO.java @@ -0,0 +1,20 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 节点模型 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 14:54 + */ +@Data +public class NodeVO extends BaseVO { + /** 节点系统标识 */ + private String systemUuid; + /** 节点名称 */ + private String nodeName; + /** 节点Key */ + private String nodeKey; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/SystemVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/SystemVO.java new file mode 100644 index 0000000000000000000000000000000000000000..6389a87620fab032b870037873921f2f0d8a1977 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/SystemVO.java @@ -0,0 +1,21 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/02 21:08 + */ +@Data +public class SystemVO extends BaseVO { + private static final String FORMAT = "%s-%s"; + /** 系统名称 */ + private String systemName; + /** 系统唯一标识 */ + private String systemKey; + + public String systemName() { + return String.format(FORMAT, systemName, systemKey); + } +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/UseCaseVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/UseCaseVO.java new file mode 100644 index 0000000000000000000000000000000000000000..5eadb9cfd3eec96109f3a8caf1e2d4117dd39a3b --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/base/UseCaseVO.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.common.model.base; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/02 21:09 + */ +@Data +public class UseCaseVO extends BaseVO { + /** 用例名称,系统唯一 */ + private String useCaseName; + /** 用例标识,系统唯一 */ + private String useCaseKey; + /** 系统关联标识 */ + private String systemUuid; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..29b81086d7faa263b196530fbdde80bddb23fe76 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java @@ -0,0 +1,29 @@ +package cn.icanci.loopstack.bic.common.model.graph; + +import lombok.Data; + +/** + * 图结构的边 + * + * @author icanci + * @since 1.0 Created in 2023/09/09 22:13 + */ +@Data +public class UnitEdgeVO { + /** uuid */ + private String uuid; + /** 边名称 */ + private String edgeName; + /** 边Key */ + private String edgeKey; + /** 边的起点 */ + private String sourceUuid; + /** 边的终点 */ + private String targetUuid; + /** Hover */ + private String hoverFuncId; + /** Click */ + private String clickFuncId; + /** 样式ID */ + private String styleId; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitGraphSnapshotVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitGraphSnapshotVO.java new file mode 100644 index 0000000000000000000000000000000000000000..b39ef6e321f1a7b9b3d0781e4ad5a0927bdcf831 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitGraphSnapshotVO.java @@ -0,0 +1,27 @@ +package cn.icanci.loopstack.bic.common.model.graph; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 单元用例模型 + * + * @author icanci + * @since 1.0 Created in 2023/09/10 14:28 + */ +@Data +public class UnitGraphSnapshotVO extends BaseVO { + /** 系统关联ID */ + private String systemUuid; + /** 用例关联ID */ + private String useCaseUuid; + /** 图名称 */ + private String name; + /** 图版本 */ + private int version; + /** 图缓存模型 + * + * @see UnitViewVO + */ + private String snapshot; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitGraphVersionVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitGraphVersionVO.java new file mode 100644 index 0000000000000000000000000000000000000000..f889f42d210a4392c787bc97afd77c98b91af5c1 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitGraphVersionVO.java @@ -0,0 +1,20 @@ +package cn.icanci.loopstack.bic.common.model.graph; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 单元用例模型版本 + * + * @author icanci + * @since 1.0 Created in 2023/09/10 14:28 + */ +@Data +public class UnitGraphVersionVO extends BaseVO { + /** 系统关联ID */ + private String systemUuid; + /** 用例关联ID */ + private String useCaseUuid; + /** 图有效的版本 */ + private int version; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..e400c061431573e80c422c9b4b879ec54f786cf1 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java @@ -0,0 +1,33 @@ +package cn.icanci.loopstack.bic.common.model.graph; + +import cn.icanci.loopstack.bic.common.enums.NodeDataModeEnum; +import cn.icanci.loopstack.bic.common.enums.NodeTypeEnum; +import lombok.Data; + +/** + * 图结构的节点 + * + * @author icanci + * @since 1.0 Created in 2023/09/09 22:13 + */ +@Data +public class UnitNodeVO { + /** uuid */ + private String uuid; + /** 节点名称 */ + private String nodeName; + /** 节点Key */ + private String nodeKey; + /** 节点Data模式:前缀匹配、全部匹配 */ + private NodeDataModeEnum nodeDataMode; + /** 节点DataKey: UseCase-Module-Category-SubCategory */ + private String nodeDataKey; + /** hover 函数id */ + private String hoverFuncId; + /** click 函数id */ + private String clickFuncId; + /** 样式 */ + private String styleId; + /** 节点类型 */ + private NodeTypeEnum nodeType; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitViewVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitViewVO.java new file mode 100644 index 0000000000000000000000000000000000000000..7e8d5563d82f5d4708052c67d0b5813910a8b936 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitViewVO.java @@ -0,0 +1,24 @@ +package cn.icanci.loopstack.bic.common.model.graph; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +import java.util.List; + +/** + * 图结构单元视图 + * + * @author icanci + * @since 1.0 Created in 2023/09/09 21:49 + */ +@Data +public class UnitViewVO extends BaseVO { + /** 系统唯一标识 */ + private String systemUuid; + /** 用例唯一标识 */ + private String useCaseUuid; + /** 边组织结构 */ + private List edges; + /** 节点组织结构 */ + private List nodes; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/package-info.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..169217c1beb55e9eb9e21c8262d5bc7c147cf93c --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/package-info.java @@ -0,0 +1,5 @@ +/** + * @author icanci + * @since 1.0 Created in 2023/09/09 22:10 + */ +package cn.icanci.loopstack.bic.common.model; \ No newline at end of file diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/result/ResultCodes.java b/common/src/main/java/cn/icanci/loopstack/bic/common/result/ResultCodes.java index e926f9d73192cf8cd16127f50d6b58fb58aec859..323e5075b9e7017d3cac7bf5e85e83713a677bfe 100644 --- a/common/src/main/java/cn/icanci/loopstack/bic/common/result/ResultCodes.java +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/result/ResultCodes.java @@ -7,8 +7,11 @@ package cn.icanci.loopstack.bic.common.result; * @since 1.0 Created in 2022/04/04 20:09 */ public interface ResultCodes { + // res.code === 50008 || res.code === 50012 || res.code === 50014 + // You have been logged out, you can cancel to stay on this page, or log in again + /** 成功 */ - int SUCCESS = 200; + int SUCCESS = 20000; /** 400异常 */ int FAIL_404 = 404; /** 500异常 */ diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/utils/IdHolder.java b/common/src/main/java/cn/icanci/loopstack/bic/common/utils/IdHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..acecc0b0bf395be8e98249374414eaaf65b68c6e --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/utils/IdHolder.java @@ -0,0 +1,30 @@ +package cn.icanci.loopstack.bic.common.utils; + +import org.apache.commons.lang3.RandomUtils; + +import cn.hutool.core.lang.Snowflake; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:50 + */ +public class IdHolder { + /** 雪花序列号生成算法 */ + private static final Snowflake SNOW_FLAKE = new Snowflake(RandomUtils.nextInt(1, 9), RandomUtils.nextInt(1, 9)); + + private static final String DEFAULT_PREFIX = "BIC"; + + public static String generateBySnowFlake(String prefix) { + return prefix + SNOW_FLAKE.nextId(); + } + + /** + * 通过雪花算法生成唯一id,默认 BIC + * + * @return id + */ + public static String generateNoBySnowFlakeDefaultPrefix() { + return generateBySnowFlake(DEFAULT_PREFIX); + } + +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BaseDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BaseDAO.java index 7d9883d6546d315210be80606da08264400d56f5..674d6352e8506b5da1a0219c3b427de9dda51559 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BaseDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BaseDAO.java @@ -53,6 +53,8 @@ public interface BaseDAO { */ T queryOneById(String _id); + Class getBaseColumn(); + /** 基本表 */ interface BaseColumn { /** 文档id */ diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java index 738abc596fdfebca516ca26adef1a121d80048b7..e4e12e8c1d9509f63846586af408ab5cf0472524 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java @@ -24,17 +24,27 @@ public interface BuryingDAO extends BaseDAO { /** 列 */ interface BuryingColumn extends BaseColumn { /** TraceId */ - String TRACE_ID = "traceId"; + String TRACE_ID = "traceId"; /** 业务标识 */ - String BUSINESS_NO = "businessNo"; + String BUSINESS_NO = "businessNo"; /** 系统应用唯一标识 */ - String SYSTEM_KEY = "systemKey"; + String SYSTEM_KEY = "systemKey"; + /** 系统应用唯一标识 */ + String USE_CASE = "useCase"; + /** 模块 */ + String MODULE = "module"; + /** 模块 */ + String CATEGORY = "category"; /** 模块 */ - String MODULE = "module"; + String SUB_CATEGORY = "subCategory"; /** 时间 */ - String TIME = "time"; + String TIME = "time"; /** 执行数据 */ - String MESSAGE = "message"; + String MESSAGE = "message"; + /** LOGGER_LEVEL */ + String LOGGER_LEVEL = "loggerLevel"; + /** UNIQUE_KEY */ + String UNIQUE_KEY = "uniqueKey"; } } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/SystemDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/SystemDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..7f695cb47a690e55b6ca0694bc7355cb6951c93c --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/SystemDAO.java @@ -0,0 +1,24 @@ +package cn.icanci.loopstack.bic.dal.mongo.daointerface; + +import cn.icanci.loopstack.bic.dal.mongo.dateobject.SystemDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:25 + */ +public interface SystemDAO extends BaseDAO { + /** 文档对应的名字 */ + String COLLECTION_NAME = BASE_COLLECTION_NAME + "system"; + /** 文档对应的Class */ + Class COLLECTION_CLASS = SystemDO.class; + + SystemDO queryByName(String name); + + SystemDO queryByKey(String key); + + /** 列 */ + interface SystemColumn extends BaseColumn { + String SYSTEM_NAME = "systemName"; + String SYSTEM_KEY = "systemKey"; + } +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UseCaseDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UseCaseDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..65af43cd3f68e654c84c6df2a7234ea81954a5e1 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UseCaseDAO.java @@ -0,0 +1,25 @@ +package cn.icanci.loopstack.bic.dal.mongo.daointerface; + +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UseCaseDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 20:12 + */ +public interface UseCaseDAO extends BaseDAO { + /** 文档对应的名字 */ + String COLLECTION_NAME = BASE_COLLECTION_NAME + "use-case"; + /** 文档对应的Class */ + Class COLLECTION_CLASS = UseCaseDO.class; + + UseCaseDO queryBySystemUuidAndName(String systemUuid, String name); + + UseCaseDO queryBySystemUuidAndKey(String systemUuid, String key); + + /** 列 */ + interface UseCaseColumn extends BaseColumn { + String USE_CASE_NAME = "useCaseName"; + String USE_CASE_KEY = "useCaseKey"; + String SYSTEM_UUID = "systemUuid"; + } +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BaseDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BaseDO.java index d81a1be92c720bdfd7044fd4fce88609e9891279..31b165d691796dd2d5c0bfdeb5041f2aecd2d551 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BaseDO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BaseDO.java @@ -1,7 +1,8 @@ package cn.icanci.loopstack.bic.dal.mongo.dateobject; +import lombok.Data; + import java.util.Date; -import java.util.StringJoiner; import org.springframework.data.annotation.Id; @@ -11,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; * @author icanci * @since 1.0 Created in 2023/08/19 17:52 */ +@Data public class BaseDO { /** mongodb id */ @Id @@ -27,58 +29,4 @@ public class BaseDO { private boolean deleted; /** 环境 */ private String env; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public boolean isDeleted() { - return deleted; - } - - public void setDeleted(boolean deleted) { - this.deleted = deleted; - } - - public String getEnv() { - return env; - } - - public void setEnv(String env) { - this.env = env; - } - - @Override - public String toString() { - return new StringJoiner(",").add("id=" + id).add("uuid=" + uuid).add("createTime=" + createTime).add("updateTime=" + updateTime).add("deleted=" + deleted).add("env=" + env) - .toString(); - } } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BuryingDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BuryingDO.java index e10bd73818cfc85838d0dcdab2b54bf419a868c1..dcf88e0fc7c5a4dbca88ab10fdb9eda41e93a44d 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BuryingDO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/BuryingDO.java @@ -1,11 +1,14 @@ package cn.icanci.loopstack.bic.dal.mongo.dateobject; -import java.util.StringJoiner; +import lombok.Data; +import lombok.EqualsAndHashCode; /** * @author icanci * @since 1.0 Created in 2023/08/19 17:52 */ +@Data +@EqualsAndHashCode(callSuper = true) public class BuryingDO extends BaseDO { /** TraceId */ private String traceId; @@ -13,74 +16,22 @@ public class BuryingDO extends BaseDO { private String businessNo; /** 系统应用唯一标识 */ private String systemKey; + /** 应用系统用例 */ + private String useCase; /** 模块 */ private String module; - /** 子模块,用于区分同模块下不同的展示类型 */ + /** 分类,用于区分同模块下不同的展示类型 */ private String category; + /** 子模块,用于区分同模块下不同的展示类型 */ + private String subCategory; + /** 扩展属性 */ + private String ext; /** 时间 */ private long time; /** 执行数据 */ private String message; - - public String getTraceId() { - return traceId; - } - - public void setTraceId(String traceId) { - this.traceId = traceId; - } - - public String getBusinessNo() { - return businessNo; - } - - public void setBusinessNo(String businessNo) { - this.businessNo = businessNo; - } - - public String getSystemKey() { - return systemKey; - } - - public void setSystemKey(String systemKey) { - this.systemKey = systemKey; - } - - public String getModule() { - return module; - } - - public void setModule(String module) { - this.module = module; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - @Override - public String toString() { - return new StringJoiner(",").add("traceId=" + traceId).add("businessNo=" + businessNo).add("systemKey=" + systemKey).add("module=" + module).add("category=" + category) - .add("time=" + time).add("message=" + message).toString(); - } + /** 日志等级 */ + private String loggerLevel; + /** 数据的唯一标识 */ + private String uniqueKey; } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/SystemDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/SystemDO.java new file mode 100644 index 0000000000000000000000000000000000000000..37dc88d9d433245c4cd8464985b5a6bfefe1fa29 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/SystemDO.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.dal.mongo.dateobject; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:24 + */ +@Data +public class SystemDO extends BaseDO { + /** 系统名称 */ + private String systemName; + /** 系统唯一标识 */ + private String systemKey; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UseCaseDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UseCaseDO.java new file mode 100644 index 0000000000000000000000000000000000000000..45d00a831615ed13811a7d8487054c556c261659 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UseCaseDO.java @@ -0,0 +1,17 @@ +package cn.icanci.loopstack.bic.dal.mongo.dateobject; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 20:12 + */ +@Data +public class UseCaseDO extends BaseDO { + /** 用例名称,系统唯一 */ + private String useCaseName; + /** 用例标识,系统唯一 */ + private String useCaseKey; + /** 系统关联标识 */ + private String systemUuid; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/AbstractBaseDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/AbstractBaseDAO.java index cd8757c576ffb58e05972aa27b3c1bd278859561..f67205ce5747f284463e0fd88050546772b07d8e 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/AbstractBaseDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/AbstractBaseDAO.java @@ -5,10 +5,10 @@ import java.util.List; import org.springframework.beans.factory.InitializingBean; +import cn.icanci.loopstack.bic.common.utils.IdHolder; import cn.icanci.loopstack.bic.dal.mongo.daointerface.BaseDAO; import cn.icanci.loopstack.bic.dal.mongo.dateobject.BaseDO; import cn.icanci.loopstack.bic.dal.mongo.utils.EnvUtils; -import cn.icanci.loopstack.bic.dal.mongo.utils.IDHolder; /** * @author icanci @@ -39,12 +39,12 @@ public abstract class AbstractBaseDAO extends MongoPageHelper list.forEach(this::doInsert); } - private void doInsert(T t) { + protected void doInsert(T t) { t.setId(null); t.setDeleted(false); t.setCreateTime(new Date()); t.setUpdateTime(new Date()); t.setEnv(DEFAULT_ENV); - t.setUuid(IDHolder.generateNoBySnowFlakeDefaultPrefix()); + t.setUuid(IdHolder.generateNoBySnowFlakeDefaultPrefix()); } } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java index 1d127875c16b88bee23d54fa53f4af486e66ad00..d02994dd0d0b18cf04556f534b33838a47791e33 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java @@ -8,6 +8,8 @@ import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; +import com.google.common.collect.Lists; + import cn.icanci.loopstack.bic.dal.mongo.common.PageList; import cn.icanci.loopstack.bic.dal.mongo.daointerface.BuryingDAO; import cn.icanci.loopstack.bic.dal.mongo.dateobject.BuryingDO; @@ -41,10 +43,39 @@ public class MongoBuryingDAO extends AbstractBaseDAO implements Buryi @Override public PageList pageQuery(BuryingDO burying, int pageNum, int pageSize) { Criteria criteria = Criteria.where(BuryingColumn.ENV).is(DEFAULT_ENV); + // 查询参数 if (StringUtils.isNotBlank(burying.getSystemKey())) { // 不分区大小写查询,其中操作符"i":表示不分区大小写 criteria.and(BuryingColumn.SYSTEM_KEY).regex("^.*" + burying.getSystemKey() + ".*$", "i"); } + if (StringUtils.isNotBlank(burying.getUseCase())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(BuryingColumn.USE_CASE).regex("^.*" + burying.getUseCase() + ".*$", "i"); + } + if (StringUtils.isNotBlank(burying.getModule())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(BuryingColumn.MODULE).regex("^.*" + burying.getModule() + ".*$", "i"); + } + if (StringUtils.isNotBlank(burying.getCategory())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(BuryingColumn.CATEGORY).regex("^.*" + burying.getCategory() + ".*$", "i"); + } + if (StringUtils.isNotBlank(burying.getSubCategory())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(BuryingColumn.SUB_CATEGORY).regex("^.*" + burying.getSubCategory() + ".*$", "i"); + } + if (StringUtils.isNotBlank(burying.getTraceId())) { + criteria.and(BuryingColumn.TRACE_ID).is(burying.getTraceId()); + } + if (StringUtils.isNotBlank(burying.getBusinessNo())) { + criteria.and(BuryingColumn.BUSINESS_NO).is(burying.getBusinessNo()); + } + if (StringUtils.isNotBlank(burying.getLoggerLevel())) { + criteria.and(BuryingColumn.LOGGER_LEVEL).is(burying.getLoggerLevel()); + } + if (StringUtils.isNotBlank(burying.getUniqueKey())) { + criteria.and(BuryingColumn.UNIQUE_KEY).is(burying.getUniqueKey()); + } Query query = new Query(criteria); query.with(Sort.by(Sort.Direction.DESC, BuryingColumn.CREATE_TIME)); return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); @@ -58,9 +89,35 @@ public class MongoBuryingDAO extends AbstractBaseDAO implements Buryi return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); } + @Override + public Class getBaseColumn() { + return BuryingColumn.class; + } + @Override public void batchInsert(List buryingList) { super.batchInsert(buryingList); mongoTemplate.insert(buryingList, COLLECTION_NAME); } + + @Override + protected void doInsert(BuryingDO buryingDO) { + super.doInsert(buryingDO); + + // TODO 判断逻辑设计 + // ---- + if (StringUtils.isBlank(buryingDO.getUniqueKey())) { + String systemKey = StringUtils.defaultString(buryingDO.getSystemKey(), StringUtils.EMPTY); + String useCase = StringUtils.defaultString(buryingDO.getUseCase(), StringUtils.EMPTY); + String module = StringUtils.defaultString(buryingDO.getModule(), StringUtils.EMPTY); + String category = StringUtils.defaultString(buryingDO.getCategory(), StringUtils.EMPTY); + String subCategory = StringUtils.defaultString(buryingDO.getSubCategory(), StringUtils.EMPTY); + List keyList = Lists.newArrayList(systemKey, useCase, module, category, subCategory); + buryingDO.setUniqueKey(StringUtils.join(keyList, "-")); + } + + if (buryingDO.getTime() == 0) { + buryingDO.setTime(System.currentTimeMillis()); + } + } } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoSystemDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoSystemDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..93ec9fc80e6206e6c9cd2c8c8df4d8c3ac0fa786 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoSystemDAO.java @@ -0,0 +1,84 @@ +package cn.icanci.loopstack.bic.dal.mongo.mongo; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.SystemDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.SystemDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 15:29 + */ +@Service("systemDAO") +public class MongoSystemDAO extends AbstractBaseDAO implements SystemDAO { + @Override + public void insert(SystemDO system) { + super.insert(system); + mongoTemplate.insert(system, COLLECTION_NAME); + } + + @Override + public void update(SystemDO system) { + super.update(system); + mongoTemplate.save(system, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(SystemColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(SystemDO system, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(SystemColumn.ENV).is(DEFAULT_ENV); + if (StringUtils.isNotBlank(system.getSystemKey())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(SystemColumn.SYSTEM_KEY).regex("^.*" + system.getSystemKey() + ".*$", "i"); + } + if (StringUtils.isNotBlank(system.getSystemName())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(SystemColumn.SYSTEM_NAME).regex("^.*" + system.getSystemName() + ".*$", "i"); + } + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, SystemColumn.CREATE_TIME)); + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public SystemDO queryOneById(String _id) { + Criteria criteria = Criteria.where(SystemColumn._ID).is(_id); + criteria.and(SystemColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public Class getBaseColumn() { + return SystemColumn.class; + } + + @Override + public SystemDO queryByName(String name) { + Criteria criteria = Criteria.where(SystemColumn.SYSTEM_NAME).is(name); + criteria.and(SystemColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public SystemDO queryByKey(String key) { + Criteria criteria = Criteria.where(SystemColumn.SYSTEM_KEY).is(key); + criteria.and(SystemColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUseCaseDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUseCaseDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..c507735e51afdf9cb05fe43c39a9e4bcb51ebd8d --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUseCaseDAO.java @@ -0,0 +1,89 @@ +package cn.icanci.loopstack.bic.dal.mongo.mongo; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.UseCaseDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UseCaseDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/10 20:16 + */ +@Service("useCaseDAO") +public class MongoUseCaseDAO extends AbstractBaseDAO implements UseCaseDAO { + @Override + public void insert(UseCaseDO useCaseDO) { + super.insert(useCaseDO); + mongoTemplate.insert(useCaseDO, COLLECTION_NAME); + } + + @Override + public void update(UseCaseDO useCaseDO) { + super.update(useCaseDO); + mongoTemplate.save(useCaseDO, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(UseCaseColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(UseCaseDO useCaseDO, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(UseCaseColumn.ENV).is(DEFAULT_ENV); + if (StringUtils.isNotBlank(useCaseDO.getUseCaseName())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(UseCaseColumn.USE_CASE_NAME).regex("^.*" + useCaseDO.getUseCaseName() + ".*$", "i"); + } + if (StringUtils.isNotBlank(useCaseDO.getUseCaseKey())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(UseCaseColumn.USE_CASE_KEY).regex("^.*" + useCaseDO.getUseCaseKey() + ".*$", "i"); + } + if (StringUtils.isNotBlank(useCaseDO.getSystemUuid())) { + criteria.and(UseCaseColumn.SYSTEM_UUID).is(useCaseDO.getSystemUuid()); + } + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, UseCaseColumn.CREATE_TIME)); + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public UseCaseDO queryOneById(String _id) { + Criteria criteria = Criteria.where(UseCaseColumn._ID).is(_id); + criteria.and(UseCaseColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public Class getBaseColumn() { + return UseCaseColumn.class; + } + + @Override + public UseCaseDO queryBySystemUuidAndName(String systemUuid, String name) { + Criteria criteria = Criteria.where(UseCaseColumn.USE_CASE_NAME).is(name); + criteria.and(UseCaseColumn.ENV).is(DEFAULT_ENV); + criteria.and(UseCaseColumn.SYSTEM_UUID).is(systemUuid); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public UseCaseDO queryBySystemUuidAndKey(String systemUuid, String key) { + Criteria criteria = Criteria.where(UseCaseColumn.USE_CASE_KEY).is(key); + criteria.and(UseCaseColumn.ENV).is(DEFAULT_ENV); + criteria.and(UseCaseColumn.SYSTEM_UUID).is(systemUuid); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/IDHolder.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/IDHolder.java deleted file mode 100644 index a5ff23243d80ba2af0065b199d085aa13cdf6a47..0000000000000000000000000000000000000000 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/IDHolder.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.icanci.loopstack.bic.dal.mongo.utils; - -import cn.icanci.loopstack.bic.dal.mongo.utils.service.IDGeneratorService; - -/** - * Id 生成器 - * - * @author icanci - * @since 1.0 Created in 2022/11/11 14:18 - */ -public class IDHolder { - /** 分布式id服务 */ - private static IDGeneratorService idGeneratorService; - - private static final String DEFAULT_PREFIX = "BIC"; - - public static void setIdGeneratorService(IDGeneratorService idGeneratorService) { - IDHolder.idGeneratorService = idGeneratorService; - } - - /** - * 通过雪花算法生成唯一id - * - * @param prefix 前缀 - * @return id - */ - public static String generateNoBySnowFlake(String prefix) { - return idGeneratorService.generateBySnowFlake(prefix); - } - - /** - * 通过雪花算法生成唯一id,默认 BIC - * - * @return id - */ - public static String generateNoBySnowFlakeDefaultPrefix() { - return idGeneratorService.generateBySnowFlake(DEFAULT_PREFIX); - } - -} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/service/IDGeneratorService.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/service/IDGeneratorService.java deleted file mode 100644 index 549dee94eedb2dbd821fb8f834b2be147b4ab2ec..0000000000000000000000000000000000000000 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/service/IDGeneratorService.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.icanci.loopstack.bic.dal.mongo.utils.service; - -/** - * @author icanci - * @since 1.0 Created in 2022/10/30 08:43 - */ -public interface IDGeneratorService { - /** - * 生成唯一id - * - * @param prefix 前缀 - * @return id - */ - String generateBySnowFlake(String prefix); -} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/service/impl/IDGeneratorServiceImpl.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/service/impl/IDGeneratorServiceImpl.java deleted file mode 100644 index a699202c5a3a615163d2d44d5f3268d338376728..0000000000000000000000000000000000000000 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/utils/service/impl/IDGeneratorServiceImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.icanci.loopstack.bic.dal.mongo.utils.service.impl; - -import org.apache.commons.lang3.RandomUtils; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; - -import cn.hutool.core.lang.Snowflake; -import cn.icanci.loopstack.bic.dal.mongo.utils.IDHolder; -import cn.icanci.loopstack.bic.dal.mongo.utils.service.IDGeneratorService; - -/** - * 分布式ID生成器 - * - * @author icanci - * @since 1.0 Created in 2022/10/30 08:43 - */ -@Service -public class IDGeneratorServiceImpl implements IDGeneratorService, InitializingBean { - /** 雪花序列号生成算法 */ - private static final Snowflake SNOW_FLAKE = new Snowflake(RandomUtils.nextInt(1, 9), RandomUtils.nextInt(1, 9)); - - @Override - public String generateBySnowFlake(String prefix) { - return prefix + SNOW_FLAKE.nextId(); - } - - @Override - public void afterPropertiesSet() throws Exception { - IDHolder.setIdGeneratorService(this); - } -} diff --git a/graph/pom.xml b/graph/pom.xml index 61ec566aeaec3aeec1101d4e2401142acf54697c..b46b3ab27f1ab7f2040f220cd8b4325506ddc240 100644 --- a/graph/pom.xml +++ b/graph/pom.xml @@ -11,9 +11,20 @@ bic-graph + + AntV X6 视图模型 + + 8 8 + + + cn.icanci.loopstack.bic + bic-common + ${parent.version} + + \ No newline at end of file diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/NodePortConstant.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/NodePortConstant.java new file mode 100644 index 0000000000000000000000000000000000000000..404a61c106d78a0eed67df5137dc36121cadeecb --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/NodePortConstant.java @@ -0,0 +1,14 @@ +package cn.icanci.loopstack.bic.graph; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:12 + */ +public interface NodePortConstant { + String RIGHT = "right"; + String LEFT = "left"; + String PORT_RIGHT = "port-right"; + String PORT_LEFT = "port-left"; + String IN = "in"; + String OUT = "out"; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/builder/EdgeDefaultDefineBuilder.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/builder/EdgeDefaultDefineBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..a9bc4ebd3bc33e2a5008c2035a24e363bc9b9f30 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/builder/EdgeDefaultDefineBuilder.java @@ -0,0 +1,10 @@ +package cn.icanci.loopstack.bic.graph.builder; + +/** + * 边默认属性构建器 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 14:03 + */ +public class EdgeDefaultDefineBuilder { +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/builder/NodeDefaultDefineBuilder.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/builder/NodeDefaultDefineBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..72cdcba06b8cf7fb20901fad7e6c864c5ee92975 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/builder/NodeDefaultDefineBuilder.java @@ -0,0 +1,66 @@ +package cn.icanci.loopstack.bic.graph.builder; + +import java.util.List; + +import com.google.common.collect.Lists; + +import cn.icanci.loopstack.bic.graph.NodePortConstant; +import cn.icanci.loopstack.bic.graph.node.*; + +/** + * 节点默认属性构建器 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 14:03 + */ +public class NodeDefaultDefineBuilder { + + /** + * 构建默认 Node Port + * + * @return 返回NodePort + */ + public static NodePort buildNodePort() { + NodePort nodePort = new NodePort(); + nodePort.setGroups(buildGroups()); + nodePort.setItems(buildItems()); + return nodePort; + } + + private static NodePortGroups buildGroups() { + NodePortGroups groups = new NodePortGroups(); + groups.setIn(buildGroup(NodePortConstant.LEFT)); + groups.setOut(buildGroup(NodePortConstant.RIGHT)); + return groups; + } + + private static NodePortGroup buildGroup(String position) { + NodePortGroup group = new NodePortGroup(); + group.setPosition(position); + group.setAttrs(buildAttrs()); + return group; + } + + private static NodePortGroupAttrs buildAttrs() { + NodePortGroupAttrs attrs = new NodePortGroupAttrs(); + attrs.setCircle(buildCircle()); + return attrs; + } + + private static NodePortGroupAttrsCircle buildCircle() { + NodePortGroupAttrsCircle circle = new NodePortGroupAttrsCircle(); + circle.setR(2); + circle.setMagnet(true); + circle.setStroke("#31d0c6"); + circle.setStrokeWidth(2); + circle.setFill("#fff"); + return circle; + } + + private static List buildItems() { + List ret = Lists.newArrayList(); + ret.add(new NodePortItem(NodePortConstant.PORT_LEFT, NodePortConstant.IN)); + ret.add(new NodePortItem(NodePortConstant.PORT_RIGHT, NodePortConstant.OUT)); + return ret; + } +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java new file mode 100644 index 0000000000000000000000000000000000000000..4393874025f944b51fe3840235aae662d7d5cc12 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java @@ -0,0 +1,23 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +import java.util.List; + +/** + * AntV X6 边模型 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 13:10 + */ +@Data +public class Edge { + private EdgePoint source; + private EdgePoint target; + private EdgeAttrs attrs; + private String router; + private String connector; + private List labels; + private EdgeConsumerInfo consumerInfo; + private EdgeHistoryInfo historyInfo; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeAttrs.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeAttrs.java new file mode 100644 index 0000000000000000000000000000000000000000..9a1c73519d63be215eb0c64d63475fc3b325e9ea --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeAttrs.java @@ -0,0 +1,12 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:14 + */ +@Data +public class EdgeAttrs { + private EdgeAttrsLine line; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeAttrsLine.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeAttrsLine.java new file mode 100644 index 0000000000000000000000000000000000000000..e6d827ed8e025d704bed786c05a152401f1317a1 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeAttrsLine.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:17 + */ +@Data +public class EdgeAttrsLine { + /** 线条颜色 */ + private String stroke; + /** 线条宽度 默认为 1 */ + private int strokeWidth; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeConsumerInfo.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeConsumerInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..25e976699ba81ee97eb3a1621957cee173362483 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeConsumerInfo.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import java.util.List; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:28 + */ +@Data +public class EdgeConsumerInfo { + private EdgeAttrs attrs; + private List labels; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeHistoryInfo.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeHistoryInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..9a0969d74ef8c5b87d0fd1ac8c2bf8fb2e0d862b --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeHistoryInfo.java @@ -0,0 +1,14 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * empty object + * + * @author icanci + * @since 1.0 Created in 2023/08/21 13:28 + */ +@Data +public class EdgeHistoryInfo { + +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabel.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabel.java new file mode 100644 index 0000000000000000000000000000000000000000..33700370dc1aeb059ff50a42c13f187d6b466492 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabel.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:29 + */ +@Data +public class EdgeLabel { + private EdgeLabelAttrs attrs; + private EdgeLabelPosition position; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelAttrs.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelAttrs.java new file mode 100644 index 0000000000000000000000000000000000000000..c1f11bf81eb767f60f81a569097e2430bfc6a50e --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelAttrs.java @@ -0,0 +1,12 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:29 + */ +@Data +public class EdgeLabelAttrs { + private EdgeLabelAttrsLabel label; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelAttrsLabel.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelAttrsLabel.java new file mode 100644 index 0000000000000000000000000000000000000000..9661ea85cb71ae93d9ab9923d3592df976bf934b --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelAttrsLabel.java @@ -0,0 +1,12 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:29 + */ +@Data +public class EdgeLabelAttrsLabel { + private String text; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelPosition.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelPosition.java new file mode 100644 index 0000000000000000000000000000000000000000..80cb7a20dde8e77db462c22e16396536fc8cbd01 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgeLabelPosition.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:31 + */ +@Data +public class EdgeLabelPosition { + /** 表示label在节点之间的相对位置取值 0~1 */ + private int distance; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgePoint.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgePoint.java new file mode 100644 index 0000000000000000000000000000000000000000..7c46aa71fcfdcfe8fe032873acdfc78c37bcf677 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/EdgePoint.java @@ -0,0 +1,19 @@ +package cn.icanci.loopstack.bic.graph.edge; + +import cn.icanci.loopstack.bic.graph.NodePortConstant; +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:11 + */ +@Data +public class EdgePoint { + /** Node 节点id */ + private String cell; + /** + * 节点连接端口 + * @see NodePortConstant + */ + private String port; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/BicFunction.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/BicFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..42fc8f1e7dc7108b31371d89ee2a358a5b36f9c7 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/BicFunction.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.graph.function; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:42 + */ +public interface BicFunction { + /** + * 函数调用结果 + * + * @param context 函数调用上下文 + * @return 返回函数调用结果 + */ + FuncInvokeResponse invoke(FuncContext context); +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/FuncContext.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/FuncContext.java new file mode 100644 index 0000000000000000000000000000000000000000..69ca11533d289ad685f10d5d2e2281768ab89d79 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/FuncContext.java @@ -0,0 +1,8 @@ +package cn.icanci.loopstack.bic.graph.function; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:39 + */ +public interface FuncContext { +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/FuncInvokeResponse.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/FuncInvokeResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..cdfcd1457f956c44640ee223a7a7e43385aa455e --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/FuncInvokeResponse.java @@ -0,0 +1,8 @@ +package cn.icanci.loopstack.bic.graph.function; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:43 + */ +public interface FuncInvokeResponse { +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/edge/EdgeClickFunction.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/edge/EdgeClickFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..2f8f4977cad6d8c923b47516970facfd646b61cd --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/edge/EdgeClickFunction.java @@ -0,0 +1,17 @@ +package cn.icanci.loopstack.bic.graph.function.edge; + +import cn.icanci.loopstack.bic.graph.function.BicFunction; +import cn.icanci.loopstack.bic.graph.function.FuncContext; +import cn.icanci.loopstack.bic.graph.function.FuncInvokeResponse; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:42 + */ +public class EdgeClickFunction implements BicFunction { + + @Override + public FuncInvokeResponse invoke(FuncContext context) { + return null; + } +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/edge/EdgeFuncContext.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/edge/EdgeFuncContext.java new file mode 100644 index 0000000000000000000000000000000000000000..328a0b5349e4e4f8008ac32e2070ee551198d931 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/edge/EdgeFuncContext.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.graph.function.edge; + +import cn.icanci.loopstack.bic.graph.function.FuncContext; + +/** + * 边函数节点上下文 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 13:39 + */ +public class EdgeFuncContext implements FuncContext { + +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/node/NodeFuncContext.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/node/NodeFuncContext.java new file mode 100644 index 0000000000000000000000000000000000000000..12ee12c45b3516172a9aca9087cf465414051bdc --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/function/node/NodeFuncContext.java @@ -0,0 +1,12 @@ +package cn.icanci.loopstack.bic.graph.function.node; + +import cn.icanci.loopstack.bic.graph.function.FuncContext; + +/** + * Node节点函数上下文 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 13:40 + */ +public class NodeFuncContext implements FuncContext { +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java new file mode 100644 index 0000000000000000000000000000000000000000..e9ad1ec30eec53208c011a58783556777f4d3e10 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java @@ -0,0 +1,16 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:48 + */ +@Data +public class Node { + private String id; + private String shape; + private double width; + private double height; + private NodeAttrs attrs; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrs.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrs.java new file mode 100644 index 0000000000000000000000000000000000000000..e8395a97137c2e613629bb3c8b6c76a3e3abecc0 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrs.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:56 + */ +@Data +public class NodeAttrs { + private NodeAttrsBody body; + private NodeAttrsLabel label; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrsBody.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrsBody.java new file mode 100644 index 0000000000000000000000000000000000000000..5b182831a18ca53fc19df42841774447c40ff56b --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrsBody.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:56 + */ +@Data +public class NodeAttrsBody { + private String fill; + private String stroke; + private int rx; + private int ry; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrsLabel.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrsLabel.java new file mode 100644 index 0000000000000000000000000000000000000000..0645050fe6dfd45c5d9916920a8b12251100de3d --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodeAttrsLabel.java @@ -0,0 +1,21 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 13:57 + */ +@Data +public class NodeAttrsLabel { + /** 节点标题 */ + private String text; + /** 节点字体颜色 */ + private String fill; + /** 节点字体大小 */ + private int fontSize; + /** 节点字体加粗 TODO*/ + private String fontWeight; + /** 字体 TODO */ + private String fontVariant; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePort.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePort.java new file mode 100644 index 0000000000000000000000000000000000000000..64409801dcf4fdd52e4637df5c1b946fefa19b9e --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePort.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.graph.node; + +import java.util.List; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:00 + */ +@Data +public class NodePort { + private NodePortGroups groups; + private List items; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroup.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroup.java new file mode 100644 index 0000000000000000000000000000000000000000..dcb6ffa16e333287eed91b9ea7bf38b30a6e3a0d --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroup.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:06 + */ +@Data +public class NodePortGroup { + private String position; + private NodePortGroupAttrs attrs; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroupAttrs.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroupAttrs.java new file mode 100644 index 0000000000000000000000000000000000000000..4b1109b7f92f378d47e82cec4e22dada7fb0bfae --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroupAttrs.java @@ -0,0 +1,12 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:06 + */ +@Data +public class NodePortGroupAttrs { + private NodePortGroupAttrsCircle circle; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroupAttrsCircle.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroupAttrsCircle.java new file mode 100644 index 0000000000000000000000000000000000000000..8cad35c2a7b4344ceacd930d7210b25518d3d19f --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroupAttrsCircle.java @@ -0,0 +1,16 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:07 + */ +@Data +public class NodePortGroupAttrsCircle { + private int r; + private boolean magnet; + private String stroke; + private int strokeWidth; + private String fill; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroups.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroups.java new file mode 100644 index 0000000000000000000000000000000000000000..55320084ce69b82d56411ff37f9446fbda1f8607 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortGroups.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:01 + */ +@Data +public class NodePortGroups { + private NodePortGroup in; + private NodePortGroup out; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortItem.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortItem.java new file mode 100644 index 0000000000000000000000000000000000000000..abe134cc9108f8ac08fdcf0a76a37eafc14ee218 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/NodePortItem.java @@ -0,0 +1,21 @@ +package cn.icanci.loopstack.bic.graph.node; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:01 + */ +@Data +public class NodePortItem { + private String id; + private String group; + + public NodePortItem() { + } + + public NodePortItem(String id, String group) { + this.id = id; + this.group = group; + } +} diff --git a/graph/src/test/java/cn/icanci/loopstack/bic/graph/builder/TestNodeBuilder.java b/graph/src/test/java/cn/icanci/loopstack/bic/graph/builder/TestNodeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..1f771c60f51632b18d0e12ee41b4c5a08fdf4abb --- /dev/null +++ b/graph/src/test/java/cn/icanci/loopstack/bic/graph/builder/TestNodeBuilder.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.graph.builder; + +import cn.hutool.json.JSONUtil; +import cn.icanci.loopstack.bic.graph.node.NodePort; + +import org.junit.Test; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 14:41 + */ +public class TestNodeBuilder { + @Test + public void testBuildNodePort() { + NodePort nodePort = NodeDefaultDefineBuilder.buildNodePort(); + System.out.println(JSONUtil.toJsonStr(nodePort)); + } +} diff --git a/pom.xml b/pom.xml index c22d155a8b7c2a7819ef9df126a1da93aaa3722a..333529079f35ea5c36f435a066b8e955b98ace62 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,7 @@ 1.4.2.Final 5.4.2 + 1.18.2 4.0.0 @@ -167,6 +168,13 @@ mapstruct ${mapstruct.version} + + + org.projectlombok + lombok + ${lombok.version} + compile + cn.hutool @@ -238,6 +246,11 @@ spring-boot-configuration-processor true + + org.projectlombok + lombok + provided + diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/BicAutoConfiguration.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/BicAutoConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..cefc3c1f03e7cdcf0cf79cf83387864e65309a69 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/BicAutoConfiguration.java @@ -0,0 +1,32 @@ +package cn.icanci.loopstack.bic.sdk; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import cn.icanci.loopstack.bic.sdk.properties.BicProperties; + +/** + * @author icanci + * @since 1.0 Created in 2023/08/19 12:02 + */ +@Configuration +@ComponentScan({ "cn.icanci.loopstack.bic.sdk" }) +@EnableConfigurationProperties(BicProperties.class) +@AutoConfigureBefore +public class BicAutoConfiguration implements CommandLineRunner { + /** Spring 上下文 */ + private ApplicationContext context; + + public BicAutoConfiguration(ApplicationContext context) { + this.context = context; + } + + @Override + public void run(String... args) throws Exception { + // no op + } +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/package-info.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..d7e023c065bb76b1d2f9a29dd8bcf8b535f5fe43 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/package-info.java @@ -0,0 +1,5 @@ +/** + * @author icanci + * @since 1.0 Created in 2023/08/21 15:46 + */ +package cn.icanci.loopstack.bic.sdk; \ No newline at end of file diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/properties/BicProperties.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/properties/BicProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..59c81304cdb26cc00f30c061802460270264d850 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/properties/BicProperties.java @@ -0,0 +1,83 @@ +package cn.icanci.loopstack.bic.sdk.properties; + +import java.util.StringJoiner; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 配置规则说明 TODO + * + * @author icanci + * @since 1.0 Created in 2023/08/19 12:03 + */ +@Component +@ConfigurationProperties(prefix = "bic") +public class BicProperties { + /** + * 系统标识 + */ + private String systemKey; + /** + * 同步写 + */ + private boolean synchronous; + /** + * bic服务端地址 + */ + private String bicServerUrl; + /** + * 最大批量写提交条数 + */ + private long maxBatchSize = 5000L; + /** + * 最大批量写提交时间 毫秒 + */ + private long maxBatchSubmitTime = 3000L; + + public String getSystemKey() { + return systemKey; + } + + public void setSystemKey(String systemKey) { + this.systemKey = systemKey; + } + + public boolean isSynchronous() { + return synchronous; + } + + public void setSynchronous(boolean synchronous) { + this.synchronous = synchronous; + } + + public String getBicServerUrl() { + return bicServerUrl; + } + + public void setBicServerUrl(String bicServerUrl) { + this.bicServerUrl = bicServerUrl; + } + + public long getMaxBatchSize() { + return maxBatchSize; + } + + public void setMaxBatchSize(long maxBatchSize) { + this.maxBatchSize = maxBatchSize; + } + + public long getMaxBatchSubmitTime() { + return maxBatchSubmitTime; + } + + public void setMaxBatchSubmitTime(long maxBatchSubmitTime) { + this.maxBatchSubmitTime = maxBatchSubmitTime; + } + + @Override + public String toString() { + return new StringJoiner(",").add("systemKey=" + systemKey).add("synchronous=" + synchronous).add("bicServerUrl=" + bicServerUrl).add("maxBatchSize=" + maxBatchSize) + .add("maxBatchSubmitTime=" + maxBatchSubmitTime).toString(); + } +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/system/LoggerLevelEnum.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/system/LoggerLevelEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..5d2271c819766171ba180adb94cc042cb16bd113 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/system/LoggerLevelEnum.java @@ -0,0 +1,26 @@ +package cn.icanci.loopstack.bic.sdk.system; + +/** + * 日志等级 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 15:50 + */ +public enum LoggerLevelEnum { + /** + * DEBUG + */ + DEBUG, + /** + * INFO + */ + INFO, + /** + * WARNING + */ + WARNING, + /** + * ERROR + */ + ERROR +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/system/SystemConstant.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/system/SystemConstant.java new file mode 100644 index 0000000000000000000000000000000000000000..06ea06400d60e608fdb592ba7836ca79d0a50d14 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/system/SystemConstant.java @@ -0,0 +1,26 @@ +package cn.icanci.loopstack.bic.sdk.system; + +/** + * 常量池 + * + * @author icanci + * @since 1.0 Created in 2023/08/19 12:15 + */ +public interface SystemConstant { + /** + * 默认最大批量写提交条数 + */ + long DEFAULT_MAX_BATCH_SIZE = 1000L; + /** + * 默认最大批量写提交条数 + */ + long MAX_BATCH_SIZE = 5000L; + /** + * 默认最大批量写提交时间 毫秒 + */ + long DEFAULT_MAX_BATCH_SUBMIT_TIME = 3000L; + /** + * 最大批量写提交时间 毫秒 + */ + long MAX_BATCH_SUBMIT_TIME = 10000L; +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicDataCachePool.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicDataCachePool.java new file mode 100644 index 0000000000000000000000000000000000000000..9df3f3c8e94029037272003a8766c62b09634642 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicDataCachePool.java @@ -0,0 +1,10 @@ +package cn.icanci.loopstack.bic.sdk.thread; + +/** + * Bic 数据缓存池 + * + * @author icanci + * @since 1.0 Created in 2023/08/21 15:49 + */ +public class BicDataCachePool { +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicEscalationService.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicEscalationService.java new file mode 100644 index 0000000000000000000000000000000000000000..97d5379110b0ae57ae76c1d6d55bd9ffebaed00b --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicEscalationService.java @@ -0,0 +1,14 @@ +package cn.icanci.loopstack.bic.sdk.thread; + +/** + * 数据上报服务 + * + * @author icanci + * @since 1.0 Created in 2023/08/19 12:21 + */ +public interface BicEscalationService { + /** + * 上报 + */ + void escalation(); +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicEscalationServiceImpl.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicEscalationServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a7f7460abf22c6d76fe1a9e9e769e1a6e1df2664 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/thread/BicEscalationServiceImpl.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.sdk.thread; + +import org.springframework.stereotype.Service; + +/** + * 数据上报服务 + * + * @author icanci + * @since 1.0 Created in 2023/08/19 12:21 + */ +@Service("bicEscalationService") +public class BicEscalationServiceImpl implements BicEscalationService { + + @Override + public void escalation() { + + } +} diff --git a/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/utils/BicUtils.java b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/utils/BicUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..84f34da1b49585b253ae92b4a7f7f40b14e726e8 --- /dev/null +++ b/sdk/src/main/java/cn/icanci/loopstack/bic/sdk/utils/BicUtils.java @@ -0,0 +1,46 @@ +package cn.icanci.loopstack.bic.sdk.utils; + +/** + * 写数据操作 + * - 1. 异步 or 同步 + * - 2. 业务号 + * - 3. 系统标识 可以从配置中取值 + * - 4. 模块 + * + * TODO TRACE < DEBUG < INFO < WARN < ERROR < FATAL + * + * @author icanci + * @since 1.0 Created in 2023/08/19 11:54 + */ +public class BicUtils { + + private BicUtils() { + + } + + /** + * 写日志 + * + * @param traceId 跟踪ID + * @param businessNo 业务号 + * @param module 模块 + * @param message 消息 + */ + public static void write(String unionId, String traceId, String businessNo, String useCase, String module, String message) { + + } + + /** + * 写日志 + * + * @param traceId 跟踪ID + * @param businessNo 业务号 + * @param systemKey 系统标识 + * @param module 模块 + * @param message 消息 + */ + public static void write(String unionId, String traceId, String businessNo, String systemKey, String module, String useCase, String message) { + + } + +} diff --git a/views/src/main/resources/vueboot/.env.development b/views/src/main/resources/vueboot/.env.development index de583d0940d6ec7a20f3b3a29172729e87173fcf..dc0f43e905e49042cc596bb15a90404eeefd05cf 100644 --- a/views/src/main/resources/vueboot/.env.development +++ b/views/src/main/resources/vueboot/.env.development @@ -2,4 +2,4 @@ ENV = 'development' # base api -VUE_APP_BASE_API = '/dev-api' +VUE_APP_BASE_API = 'http://localhost:9994/' diff --git a/views/src/main/resources/vueboot/.env.production b/views/src/main/resources/vueboot/.env.production index 80c810301f3fbaca271b9f3ef4fc1011a3904d8a..0d7fa8fbbb1cf505de7dd8a05bb161c899f0b62f 100644 --- a/views/src/main/resources/vueboot/.env.production +++ b/views/src/main/resources/vueboot/.env.production @@ -2,5 +2,5 @@ ENV = 'production' # base api -VUE_APP_BASE_API = '/prod-api' +VUE_APP_BASE_API = 'http://localhost:9994/' diff --git a/views/src/main/resources/vueboot/.env.staging b/views/src/main/resources/vueboot/.env.staging index a8793a0989163f3c5258c47fb62f1c02ad08bc5a..486e3865b195b0a83ef4567afcb6ba2f682d8884 100644 --- a/views/src/main/resources/vueboot/.env.staging +++ b/views/src/main/resources/vueboot/.env.staging @@ -4,5 +4,5 @@ NODE_ENV = production ENV = 'staging' # base api -VUE_APP_BASE_API = '/stage-api' +VUE_APP_BASE_API = 'http://localhost:9994/' diff --git a/views/src/main/resources/vueboot/package.json b/views/src/main/resources/vueboot/package.json index 5207d19e0d0c805d863db6acf8d499f4ac96cfb8..fd5d43b6a5f7db397a2ced5ab86279d80cb49676 100644 --- a/views/src/main/resources/vueboot/package.json +++ b/views/src/main/resources/vueboot/package.json @@ -33,6 +33,7 @@ "js-cookie": "2.2.0", "jsonlint": "1.6.3", "jszip": "3.2.1", + "moment": "^2.29.4", "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", diff --git a/views/src/main/resources/vueboot/src/api/article.js b/views/src/main/resources/vueboot/src/api/article.js deleted file mode 100644 index 407bda163feb2f1c01ba64faf2c45cf53b4eaf9d..0000000000000000000000000000000000000000 --- a/views/src/main/resources/vueboot/src/api/article.js +++ /dev/null @@ -1,41 +0,0 @@ -import request from '@/utils/request' - -export function fetchList(query) { - return request({ - url: '/vue-element-admin/article/list', - method: 'get', - params: query - }) -} - -export function fetchArticle(id) { - return request({ - url: '/vue-element-admin/article/detail', - method: 'get', - params: { id } - }) -} - -export function fetchPv(pv) { - return request({ - url: '/vue-element-admin/article/pv', - method: 'get', - params: { pv } - }) -} - -export function createArticle(data) { - return request({ - url: '/vue-element-admin/article/create', - method: 'post', - data - }) -} - -export function updateArticle(data) { - return request({ - url: '/vue-element-admin/article/update', - method: 'post', - data - }) -} diff --git a/views/src/main/resources/vueboot/src/api/burying.js b/views/src/main/resources/vueboot/src/api/burying.js new file mode 100644 index 0000000000000000000000000000000000000000..4aadb15c768e779187474366d8d1025476b038df --- /dev/null +++ b/views/src/main/resources/vueboot/src/api/burying.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +export async function buryingPageQuery(burying, paginator) { + return await request({ + url: '/bicAdmin/burying/query', + method: 'post', + data: { + 'burying': burying, + 'paginator': paginator + } + }) +} +export async function buryingSave(burying) { + return await request({ + url: '/bicAdmin/burying/saveForMock', + method: 'post', + data: burying + }) +} diff --git a/views/src/main/resources/vueboot/src/api/loadSelectorApi.js b/views/src/main/resources/vueboot/src/api/loadSelectorApi.js new file mode 100644 index 0000000000000000000000000000000000000000..39f7ec5a66fccbce977b48f6a49d7e9ecf328c1d --- /dev/null +++ b/views/src/main/resources/vueboot/src/api/loadSelectorApi.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +export async function loadFuncTypes() { + let ret = await request({ + url: '/bicAdmin/common/funcType', + method: 'get' + }) + console.log(ret) + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + +export async function nodeDataModes() { + let ret = await request({ + url: '/bicAdmin/common/nodeDataMode', + method: 'get' + }) + console.log(ret) + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + +export async function nodeTypes() { + let ret = await request({ + url: '/bicAdmin/common/nodeType', + method: 'get' + }) + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + +export async function systemSelector() { + let ret = await request({ + url: '/bicAdmin/system/loadSelector', + method: 'get' + }) + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + +export function joiner(arr, join) { + let res = "" + if (!res && !join) { + return res; + } + for (let i = 0; i < arr.length; i++) { + res = res + arr[i] + join; + } + return res.substr(0, res.length - join.length) +} diff --git a/views/src/main/resources/vueboot/src/api/qiniu.js b/views/src/main/resources/vueboot/src/api/qiniu.js deleted file mode 100644 index a0375844f37340f25a779b3e9dfbeefca5e655d4..0000000000000000000000000000000000000000 --- a/views/src/main/resources/vueboot/src/api/qiniu.js +++ /dev/null @@ -1,8 +0,0 @@ -import request from '@/utils/request' - -export function getToken() { - return request({ - url: '/qiniu/upload/token', // 假地址 自行替换 - method: 'get' - }) -} diff --git a/views/src/main/resources/vueboot/src/api/remote-search.js b/views/src/main/resources/vueboot/src/api/remote-search.js index 02e42b46e56ac4dbb0bf6e4afb341562cc66eca5..ed56ea2daec5e43257baed9da2e94f9bfc45aaa5 100644 --- a/views/src/main/resources/vueboot/src/api/remote-search.js +++ b/views/src/main/resources/vueboot/src/api/remote-search.js @@ -1,5 +1,6 @@ import request from '@/utils/request' +// TODO Mock 待删除 export function searchUser(name) { return request({ url: '/vue-element-admin/search/user', diff --git a/views/src/main/resources/vueboot/src/api/role.js b/views/src/main/resources/vueboot/src/api/role.js deleted file mode 100644 index 959bbd213f6524042f7e3f7a7f98c4c83da6fe32..0000000000000000000000000000000000000000 --- a/views/src/main/resources/vueboot/src/api/role.js +++ /dev/null @@ -1,38 +0,0 @@ -import request from '@/utils/request' - -export function getRoutes() { - return request({ - url: '/vue-element-admin/routes', - method: 'get' - }) -} - -export function getRoles() { - return request({ - url: '/vue-element-admin/roles', - method: 'get' - }) -} - -export function addRole(data) { - return request({ - url: '/vue-element-admin/role', - method: 'post', - data - }) -} - -export function updateRole(id, data) { - return request({ - url: `/vue-element-admin/role/${id}`, - method: 'put', - data - }) -} - -export function deleteRole(id) { - return request({ - url: `/vue-element-admin/role/${id}`, - method: 'delete' - }) -} diff --git a/views/src/main/resources/vueboot/src/api/system.js b/views/src/main/resources/vueboot/src/api/system.js new file mode 100644 index 0000000000000000000000000000000000000000..2d04fd8b960c4eb1934b195500b1549b25fe3ba8 --- /dev/null +++ b/views/src/main/resources/vueboot/src/api/system.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export async function systemPageQuery(system, paginator) { + return await request({ + url: '/bicAdmin/system/query', + method: 'post', + data: { + 'system': system, + 'paginator': paginator + } + }) +} +export async function systemSave(system) { + return await request({ + url: '/bicAdmin/system/save', + method: 'post', + data: system + }) +} + +export async function remoteValidateSystemName(name) { + return await request({ + url: '/bicAdmin/system/validateName/' + name, + method: 'get', + }) +} + +export async function remoteValidatesSystemKey(key) { + return await request({ + url: '/bicAdmin/system/validateKey/' + key, + method: 'get', + }) +} diff --git a/views/src/main/resources/vueboot/src/api/useCase.js b/views/src/main/resources/vueboot/src/api/useCase.js new file mode 100644 index 0000000000000000000000000000000000000000..da3591a91f6ded0fff9edde11de2e1baa515836e --- /dev/null +++ b/views/src/main/resources/vueboot/src/api/useCase.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +export async function useCasePageQuery(useCase, paginator) { + return await request({ + url: '/bicAdmin/useCase/query', + method: 'post', + data: { + 'useCase': useCase, + 'paginator': paginator + } + }) +} + +export async function useCaseSave(useCase) { + return await request({ + url: '/bicAdmin/useCase/save', + method: 'post', + data: useCase + }) +} + +export async function remoteValidateUseCaseName(systemUuid, name) { + return await request({ + url: '/bicAdmin/useCase/validateName/' + systemUuid + '/' + name, + method: 'get', + }) +} + +export async function remoteValidatesUseCaseKey(systemUuid, key) { + return await request({ + url: '/bicAdmin/useCase/validateKey/' + systemUuid + '/' + key, + method: 'get', + }) +} diff --git a/views/src/main/resources/vueboot/src/api/user.js b/views/src/main/resources/vueboot/src/api/user.js index b8b8741caffb06423f39aafc1abd3cb6cf62ebb4..36803bf8e203fac33e18bd4d90da5ded8e9d49a3 100644 --- a/views/src/main/resources/vueboot/src/api/user.js +++ b/views/src/main/resources/vueboot/src/api/user.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function login(data) { return request({ - url: '/vue-element-admin/user/login', + url: '/bicAdmin/user/login', method: 'post', data }) @@ -10,15 +10,14 @@ export function login(data) { export function getInfo(token) { return request({ - url: '/vue-element-admin/user/info', - method: 'get', - params: { token } + url: '/bicAdmin/user/info/' + token, + method: 'get' }) } export function logout() { return request({ - url: '/vue-element-admin/user/logout', + url: '/bicAdmin/user/logout', method: 'post' }) } diff --git a/views/src/main/resources/vueboot/src/components/Upload/SingleImage.vue b/views/src/main/resources/vueboot/src/components/Upload/SingleImage.vue deleted file mode 100644 index d16bbf37ae20fa0679875f10a1450a1a43cc5506..0000000000000000000000000000000000000000 --- a/views/src/main/resources/vueboot/src/components/Upload/SingleImage.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - diff --git a/views/src/main/resources/vueboot/src/components/Upload/SingleImage2.vue b/views/src/main/resources/vueboot/src/components/Upload/SingleImage2.vue deleted file mode 100644 index 07637a9e2e9dcbc05ef1f9a7a4d6eeb1155e72a5..0000000000000000000000000000000000000000 --- a/views/src/main/resources/vueboot/src/components/Upload/SingleImage2.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - - - diff --git a/views/src/main/resources/vueboot/src/components/Upload/SingleImage3.vue b/views/src/main/resources/vueboot/src/components/Upload/SingleImage3.vue deleted file mode 100644 index 6300da4bd44752186c53f5ff448a3206a35ebcba..0000000000000000000000000000000000000000 --- a/views/src/main/resources/vueboot/src/components/Upload/SingleImage3.vue +++ /dev/null @@ -1,157 +0,0 @@ - - - - - diff --git a/views/src/main/resources/vueboot/src/main.js b/views/src/main/resources/vueboot/src/main.js index b5fa135dec2e8e0f59342d7c330ab63eae42212c..202d782e34b6d1f6079d6ed138920d0ffa31c4d4 100644 --- a/views/src/main/resources/vueboot/src/main.js +++ b/views/src/main/resources/vueboot/src/main.js @@ -20,6 +20,7 @@ import './utils/error-log' // error log import * as filters from './filters' // global filters +import moment from "moment"; /** * If you don't want to use mock-server * you want to use MockJs for mock api @@ -28,10 +29,10 @@ import * as filters from './filters' // global filters * Currently MockJs will be used in the production environment, * please remove it before going online ! ! ! */ -if (process.env.NODE_ENV === 'production') { - const { mockXHR } = require('../mock') - mockXHR() -} +// if (process.env.NODE_ENV === 'production') { +// const { mockXHR } = require('../mock') +// mockXHR() +// } Vue.use(Element, { size: Cookies.get('size') || 'medium', // set element-ui default size @@ -45,6 +46,15 @@ Object.keys(filters).forEach(key => { Vue.config.productionTip = false +// 自定义全局方法 +Vue.prototype.$cloneObj = function (data) { + return JSON.parse(JSON.stringify(data)) +} +Vue.prototype.baseDateFormat = function (date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss'); +} + + new Vue({ el: '#app', router, diff --git a/views/src/main/resources/vueboot/src/router/index.js b/views/src/main/resources/vueboot/src/router/index.js index 7672d09949e153cc6620c58760851f93e52bf4aa..21e67904b9b67f04dfaac21f6c6b9dc5477a2a65 100644 --- a/views/src/main/resources/vueboot/src/router/index.js +++ b/views/src/main/resources/vueboot/src/router/index.js @@ -90,6 +90,18 @@ export const constantRoutes = [ } ] }, + { + path: '/burying', + component: Layout, + children: [ + { + path: 'index', + component: () => import('@/views/bic-burying/burying'), + name: 'Burying', + meta: {title: '数据埋点', icon: 'el-icon-data-board', affix: true} + } + ] + }, { path: '/bicConfig', component: Layout, @@ -104,7 +116,13 @@ export const constantRoutes = [ path: 'system-config', component: () => import('@/views/bic-config/system-config'), name: 'systemConfig', - meta: {title: '应用系统配置'}, + meta: {title: '应用配置'}, + }, + { + path: 'use-case-config', + component: () => import('@/views/bic-config/use-case-config'), + name: 'useCaseConfig', + meta: {title: '用例配置'}, }, { path: 'edge-config', diff --git a/views/src/main/resources/vueboot/src/views/bic-burying/burying.vue b/views/src/main/resources/vueboot/src/views/bic-burying/burying.vue new file mode 100644 index 0000000000000000000000000000000000000000..f1924e828bc0b2b49330bade4d82b6e6de7ffe5e --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/bic-burying/burying.vue @@ -0,0 +1,288 @@ + + + + + diff --git a/views/src/main/resources/vueboot/src/views/bic-burying/dialog/burying-form.vue b/views/src/main/resources/vueboot/src/views/bic-burying/dialog/burying-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..9241b456477e532a2c99eb68f8035a92e13b199b --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/bic-burying/dialog/burying-form.vue @@ -0,0 +1,183 @@ + + + diff --git a/views/src/main/resources/vueboot/src/views/bic-config/dialog/system-form.vue b/views/src/main/resources/vueboot/src/views/bic-config/dialog/system-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..4ccfefb95cfd5357a6866f1a656724ead7c6b915 --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/bic-config/dialog/system-form.vue @@ -0,0 +1,130 @@ + + + diff --git a/views/src/main/resources/vueboot/src/views/bic-config/dialog/use-case-form.vue b/views/src/main/resources/vueboot/src/views/bic-config/dialog/use-case-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..d288283a984e52a75ddad9ae2ba9289891645d93 --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/bic-config/dialog/use-case-form.vue @@ -0,0 +1,159 @@ + + + diff --git a/views/src/main/resources/vueboot/src/views/bic-config/system-config.vue b/views/src/main/resources/vueboot/src/views/bic-config/system-config.vue index 0ae5fccc61ddb796c6afc2c007c9585e0a794fcb..a6b599b53baf4e6eaf7940fb598282d47692a09b 100644 --- a/views/src/main/resources/vueboot/src/views/bic-config/system-config.vue +++ b/views/src/main/resources/vueboot/src/views/bic-config/system-config.vue @@ -1,16 +1,150 @@ diff --git a/views/src/main/resources/vueboot/src/views/bic-config/use-case-config.vue b/views/src/main/resources/vueboot/src/views/bic-config/use-case-config.vue new file mode 100644 index 0000000000000000000000000000000000000000..5464ae2780b23b494474a1cd5263ebeea74fa7f5 --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/bic-config/use-case-config.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/views/src/main/resources/vueboot/src/views/bic-view/demo-view-edge-data.js b/views/src/main/resources/vueboot/src/views/bic-view/demo-view-edge-data.js index 3fdb4b0c05bf8f00569458e9ab5b534c47910a6c..b7d09c9a6deb0363907abbddce06c53f732d7074 100644 --- a/views/src/main/resources/vueboot/src/views/bic-view/demo-view-edge-data.js +++ b/views/src/main/resources/vueboot/src/views/bic-view/demo-view-edge-data.js @@ -5,6 +5,7 @@ const demoViewEdgeData = [ attrs: { line: { stroke: '#7c68fc', + strokeWidth: 2, }, }, router: 'manhattan', @@ -26,7 +27,11 @@ const demoViewEdgeData = [ }, }] }, - historyInfo: {} + historyInfo: {}, + extendFunc: { + hover: "", + click: "" + } }, { source: {cell: "node1", port: 'port-right'}, target: {cell: 'node3', port: 'port-left'}, diff --git a/views/src/main/resources/vueboot/src/views/bic-view/demo-view-node-data.js b/views/src/main/resources/vueboot/src/views/bic-view/demo-view-node-data.js index 5013d40074cbf3a00f317baf31266dfcb67687ce..5ec0ef938143985d05ddd82c9d6a77ee98cb8718 100644 --- a/views/src/main/resources/vueboot/src/views/bic-view/demo-view-node-data.js +++ b/views/src/main/resources/vueboot/src/views/bic-view/demo-view-node-data.js @@ -71,7 +71,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '获取Fr2缓存', + text: '获取搜索缓存', fill: '#333', fontSize: 13, } @@ -128,7 +128,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '调用风控接口', + text: '调用函数1', fill: '#333', fontSize: 13, } @@ -185,7 +185,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '黑名单校验接口', + text: '调用函数2', fill: '#333', fontSize: 13, } @@ -242,7 +242,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数3', fill: '#333', fontSize: 13, } @@ -299,7 +299,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数4', fill: '#333', fontSize: 13, } @@ -356,7 +356,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数5', fill: '#333', fontSize: 13, } @@ -413,7 +413,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数6', fill: '#333', fontSize: 13, } @@ -470,7 +470,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数7', fill: '#333', fontSize: 13, } @@ -527,7 +527,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数8', fill: '#333', fontSize: 13, } @@ -584,7 +584,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数9', fill: '#333', fontSize: 13, } @@ -641,7 +641,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数10', fill: '#333', fontSize: 13, } @@ -698,7 +698,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数11', fill: '#333', fontSize: 13, } @@ -755,7 +755,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数12', fill: '#333', fontSize: 13, } @@ -812,7 +812,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数13', fill: '#333', fontSize: 13, } @@ -869,7 +869,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数14', fill: '#333', fontSize: 13, } @@ -926,7 +926,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数15', fill: '#333', fontSize: 13, } @@ -983,7 +983,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数16', fill: '#333', fontSize: 13, } @@ -1040,7 +1040,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数17', fill: '#333', fontSize: 13, } @@ -1097,7 +1097,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数18', fill: '#333', fontSize: 13, } @@ -1154,7 +1154,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数19', fill: '#333', fontSize: 13, } @@ -1211,7 +1211,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数10', fill: '#333', fontSize: 13, } @@ -1269,7 +1269,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数21', fill: '#333', fontSize: 13, } @@ -1327,7 +1327,7 @@ const demoViewNodeData = [ strokeDasharray: '10,2', }, label: { - text: '失信人校验接口', + text: '调用函数22', fill: '#333', fontSize: 13, } diff --git a/views/src/main/resources/vueboot/src/views/bic-view/demo-view.vue b/views/src/main/resources/vueboot/src/views/bic-view/demo-view.vue index f76bdede5d9d19fa33f7784c28fabb6df9ff7026..5faedec951a2960e12a46dcbd5b8e8d7f26261d5 100644 --- a/views/src/main/resources/vueboot/src/views/bic-view/demo-view.vue +++ b/views/src/main/resources/vueboot/src/views/bic-view/demo-view.vue @@ -2,8 +2,8 @@
- - 收货地址 + + 缓存信息:Xxx
@@ -108,6 +108,9 @@ export default { edge.store.data.historyInfo.labels = edge.getLabels() let tempData = edge.store.data; + let hover = tempData.extendFunc.hover; + // hover 的标准反参,可选配置 + edge.setAttrs(tempData.consumerInfo.attrs) edge.setLabels(tempData.consumerInfo.labels) }) diff --git a/views/src/main/resources/vueboot/src/views/common/vue-log.vue b/views/src/main/resources/vueboot/src/views/common/vue-log.vue new file mode 100644 index 0000000000000000000000000000000000000000..0f9b869bff6c9f0c206e22dab43717200bd52c71 --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/common/vue-log.vue @@ -0,0 +1,112 @@ + + + diff --git a/views/src/main/resources/vueboot/src/views/common/vue-page.vue b/views/src/main/resources/vueboot/src/views/common/vue-page.vue new file mode 100644 index 0000000000000000000000000000000000000000..b48169cbaf61ca85bbbf1be9b1f1e13c9edf7e59 --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/common/vue-page.vue @@ -0,0 +1,61 @@ + + + diff --git a/views/src/main/resources/vueboot/src/views/dashboard/admin/index.vue b/views/src/main/resources/vueboot/src/views/dashboard/admin/index.vue index f2b13e79a5b9ba38fcd6b3119fc65549396fc76b..851389e683d4a1cea1451280f60536fce2fac8a9 100644 --- a/views/src/main/resources/vueboot/src/views/dashboard/admin/index.vue +++ b/views/src/main/resources/vueboot/src/views/dashboard/admin/index.vue @@ -1,7 +1,5 @@