diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..b2ac98d4f21a5b154aa7552a80181aa4378b25c3 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java @@ -0,0 +1,24 @@ +package cn.icanci.loopstack.bic.biz.cache; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 23:59 + */ +@Service +public final class GraphRepository implements ApplicationContextAware { + private ApplicationContext context; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.context = applicationContext; + } + + private void doGraphRepositoryReload() { + // TODO 刷新缓存 + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java index ba0bb60d587165042511b14761665889204964a2..4da1759b623177f78ee84c7db440a0188c24291b 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java @@ -45,6 +45,7 @@ public class UnitViewTreeGraphDtsServiceImpl implements GraphDtsService { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java new file mode 100644 index 0000000000000000000000000000000000000000..2c26e5e92cd79d1fc17fd5edf6b9a7754d1b4798 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java @@ -0,0 +1,27 @@ +package cn.icanci.loopstack.bic.biz.service; + +import java.util.List; + +import cn.icanci.loopstack.bic.common.model.snapshot.UnitViewSnapshotVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 21:45 + */ +public interface UnitViewSnapshotService extends BaseService { + @Override + List queryAll(); + + @Override + void save(UnitViewSnapshotVO unitViewSnapshotVO); + + @Override + UnitViewSnapshotVO queryById(String id); + + @Override + PageList queryPage(UnitViewSnapshotVO unitViewSnapshotVO, int pageNum, int pageSize); + + UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); + +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..7373270218de2631c74a06e6ae3acbd7f82bf27f --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java @@ -0,0 +1,60 @@ +package cn.icanci.loopstack.bic.biz.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import cn.icanci.loopstack.bic.biz.mapper.UnitViewSnapshotMapper; +import cn.icanci.loopstack.bic.biz.service.UnitViewSnapshotService; +import cn.icanci.loopstack.bic.common.model.snapshot.UnitViewSnapshotVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.UnitViewSnapshotDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewSnapshotDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 21:45 + */ +@Service +public class UnitViewSnapshotServiceImpl implements UnitViewSnapshotService { + + @Resource + private UnitViewSnapshotDAO unitViewSnapshotDAO; + @Resource + private UnitViewSnapshotMapper unitViewSnapshotMapper; + + @Override + public List queryAll() { + return unitViewSnapshotMapper.dos2vos(unitViewSnapshotDAO.queryAll()); + } + + @Override + public void save(UnitViewSnapshotVO unitViewSnapshotVO) { + // TODO 日志记录 + if (doInsert(unitViewSnapshotVO)) { + UnitViewSnapshotDO insert = unitViewSnapshotMapper.vo2do(unitViewSnapshotVO); + unitViewSnapshotDAO.insert(insert); + } else { + unitViewSnapshotDAO.update(unitViewSnapshotMapper.vo2do(unitViewSnapshotVO)); + } + } + + @Override + public UnitViewSnapshotVO queryById(String id) { + return unitViewSnapshotMapper.do2vo(unitViewSnapshotDAO.queryOneById(id)); + } + + @Override + public PageList queryPage(UnitViewSnapshotVO unitViewSnapshotVO, int pageNum, int pageSize) { + PageList pageQuery = unitViewSnapshotDAO.pageQuery(unitViewSnapshotMapper.vo2do(unitViewSnapshotVO), pageNum, pageSize); + return new PageList<>(unitViewSnapshotMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + + } + + @Override + public UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { + return unitViewSnapshotMapper.do2vo(unitViewSnapshotDAO.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid)); + } +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/snapshot/UnitViewSnapshotIndexVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/snapshot/UnitViewSnapshotIndexVO.java new file mode 100644 index 0000000000000000000000000000000000000000..fa0de0c947cc2cb0596ad94fef0737ecfa6b9460 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/snapshot/UnitViewSnapshotIndexVO.java @@ -0,0 +1,20 @@ +package cn.icanci.loopstack.bic.common.model.snapshot; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * 版本快照索引 + * + * @author icanci + * @since 1.0 Created in 2023/09/20 20:42 + */ +@Data +public class UnitViewSnapshotIndexVO extends BaseVO { + /** 系统关联id */ + private String systemUuid; + /** 用例关联id */ + private String useCaseUuid; + /** 版本 以时间戳为准 */ + private long version; +} diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/snapshot/UnitViewSnapshotVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/snapshot/UnitViewSnapshotVO.java new file mode 100644 index 0000000000000000000000000000000000000000..4cb5270c630337c0dbffab1a39c8ccf6712d8993 --- /dev/null +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/snapshot/UnitViewSnapshotVO.java @@ -0,0 +1,22 @@ +package cn.icanci.loopstack.bic.common.model.snapshot; + +import cn.icanci.loopstack.bic.common.model.BaseVO; +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 20:42 + */ +@Data +public class UnitViewSnapshotVO extends BaseVO { + /** 系统关联id */ + private String systemUuid; + /** 用例关联id */ + private String useCaseUuid; + /** 版本名称 */ + private String name; + /** 版本 以时间戳为准 */ + private long version; + /** 版本快照数据 */ + private String snapshot; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..dba780966f9160ea7e09e77a4ef5732adef2c6c3 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java @@ -0,0 +1,25 @@ +package cn.icanci.loopstack.bic.dal.mongo.daointerface; + +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewSnapshotDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 22:05 + */ +public interface UnitViewSnapshotDAO extends BaseDAO { + /** 文档对应的名字 */ + String COLLECTION_NAME = BASE_COLLECTION_NAME + "unit-view"; + /** 文档对应的Class */ + Class COLLECTION_CLASS = UnitViewSnapshotDO.class; + + UnitViewSnapshotDO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); + + /** 列 */ + interface UnitViewSnapshotColumn extends BaseColumn { + String SYSTEM_UUID = "systemUuid"; + String USE_CASE_UUID = "useCaseUuid"; + String NAME = "name"; + String VERSION = "version"; + } + +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitViewSnapshotDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitViewSnapshotDO.java new file mode 100644 index 0000000000000000000000000000000000000000..7579a78b101ae9aa2e74f52680f6bd0d0db9bf4e --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitViewSnapshotDO.java @@ -0,0 +1,21 @@ +package cn.icanci.loopstack.bic.dal.mongo.dateobject; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 21:48 + */ +@Data +public class UnitViewSnapshotDO extends BaseDO { + /** 系统关联id */ + private String systemUuid; + /** 用例关联id */ + private String useCaseUuid; + /** 版本名称 */ + private String name; + /** 版本 以时间戳为准 */ + private long version; + /** 版本快照数据 */ + private String snapshot; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewSnapshotDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewSnapshotDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..f01339c52405ab63b710459f1b839ba7ffcf9151 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewSnapshotDAO.java @@ -0,0 +1,75 @@ +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.UnitViewSnapshotDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewSnapshotDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/20 22:07 + */ +@Service("unitViewSnapshotDAO") +public class MongoUnitViewSnapshotDAO extends AbstractBaseDAO implements UnitViewSnapshotDAO { + @Override + public void insert(UnitViewSnapshotDO unitViewSnapshotDO) { + super.insert(unitViewSnapshotDO); + mongoTemplate.insert(unitViewSnapshotDO, COLLECTION_NAME); + } + + @Override + public void update(UnitViewSnapshotDO unitViewSnapshotDO) { + super.update(unitViewSnapshotDO); + mongoTemplate.save(unitViewSnapshotDO, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(UnitViewSnapshotColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(UnitViewSnapshotDO unitViewSnapshotDO, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(UnitViewSnapshotColumn.ENV).is(DEFAULT_ENV); + if (StringUtils.isNotBlank(unitViewSnapshotDO.getSystemUuid())) { + criteria.and(UnitViewSnapshotColumn.SYSTEM_UUID).is(unitViewSnapshotDO.getSystemUuid()); + } + if (StringUtils.isNotBlank(unitViewSnapshotDO.getUseCaseUuid())) { + criteria.and(UnitViewSnapshotColumn.USE_CASE_UUID).is(unitViewSnapshotDO.getUseCaseUuid()); + } + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, UnitViewSnapshotColumn.CREATE_TIME)); + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public UnitViewSnapshotDO queryOneById(String _id) { + Criteria criteria = Criteria.where(UnitViewSnapshotColumn._ID).is(_id); + criteria.and(UnitViewSnapshotColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public Class getBaseColumn() { + return UnitViewSnapshotColumn.class; + } + + @Override + public UnitViewSnapshotDO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { + Criteria criteria = Criteria.where(UnitViewSnapshotColumn.USE_CASE_UUID).is(useCaseUuid); + criteria.and(UnitViewSnapshotColumn.ENV).is(DEFAULT_ENV); + criteria.and(UnitViewSnapshotColumn.SYSTEM_UUID).is(systemUuid); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } +}