diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/UnitViewMapper.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/UnitViewMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5f423622201f3d00539ada6574e783a0ddaa67a4 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/UnitViewMapper.java @@ -0,0 +1,18 @@ +package cn.icanci.loopstack.bic.biz.mapper; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +import cn.icanci.loopstack.bic.biz.mapper.convertor.NodeDataModeEnumConverter; +import cn.icanci.loopstack.bic.biz.mapper.convertor.NodeTypeEnumConverter; +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 10:59 + */ +@Mapper(componentModel = "spring", uses = { NodeDataModeEnumConverter.class, NodeTypeEnumConverter.class }, nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface UnitViewMapper extends BaseMapper { + +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/NodeDataModeEnumConverter.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/NodeDataModeEnumConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..da233cdda938ef59f10767d5ed37d48ebd54f412 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/NodeDataModeEnumConverter.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.biz.mapper.convertor; + +import org.springframework.stereotype.Component; + +import cn.icanci.loopstack.bic.common.enums.NodeDataModeEnum; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 10:57 + */ +@Component +public class NodeDataModeEnumConverter extends AbstractBaseConverter { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/NodeTypeEnumConverter.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/NodeTypeEnumConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..9096a25dc58dc7741b2bc54cceba2c7b1b51814c --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/convertor/NodeTypeEnumConverter.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.biz.mapper.convertor; + +import cn.icanci.loopstack.bic.common.enums.NodeTypeEnum; + +import org.springframework.stereotype.Component; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 10:58 + */ +@Component +public class NodeTypeEnumConverter extends AbstractBaseConverter { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java new file mode 100644 index 0000000000000000000000000000000000000000..4430e449536fcc7b9f101f8310f1cff8bc296ea9 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java @@ -0,0 +1,26 @@ +package cn.icanci.loopstack.bic.biz.service; + +import java.util.List; + +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 10:56 + */ +public interface UnitViewService extends BaseService { + @Override + List queryAll(); + + @Override + void save(UnitViewVO unitViewVO); + + @Override + UnitViewVO queryById(String id); + + @Override + PageList queryPage(UnitViewVO unitViewVO, int pageNum, int pageSize); + + UnitViewVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..dfdb9484e166cd7c178b896f35d5a23b5976ddf1 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java @@ -0,0 +1,59 @@ +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.UnitViewMapper; +import cn.icanci.loopstack.bic.biz.service.UnitViewService; +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.UnitViewDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 11:11 + */ +@Service +public class UnitViewServiceImpl implements UnitViewService { + + @Resource + private UnitViewDAO unitViewDAO; + @Resource + private UnitViewMapper unitViewMapper; + + @Override + public List queryAll() { + return unitViewMapper.dos2vos(unitViewDAO.queryAll()); + } + + @Override + public void save(UnitViewVO unitViewVO) { + // TODO 日志记录 + if (doInsert(unitViewVO)) { + UnitViewDO insert = unitViewMapper.vo2do(unitViewVO); + unitViewDAO.insert(insert); + } else { + unitViewDAO.update(unitViewMapper.vo2do(unitViewVO)); + } + } + + @Override + public UnitViewVO queryById(String id) { + return unitViewMapper.do2vo(unitViewDAO.queryOneById(id)); + } + + @Override + public PageList queryPage(UnitViewVO unitViewVO, int pageNum, int pageSize) { + PageList pageQuery = unitViewDAO.pageQuery(unitViewMapper.vo2do(unitViewVO), pageNum, pageSize); + return new PageList<>(unitViewMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + } + + @Override + public UnitViewVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { + return unitViewMapper.do2vo(unitViewDAO.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid)); + } +} 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 index d47700879f4dca09783780746693c6bb8bf019fb..5d8fdf610634e469718b648c7bb131c9b66caaf2 100644 --- 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 @@ -5,7 +5,6 @@ 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; @@ -21,7 +20,6 @@ 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 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 index 1d7b3f218bc2e69ab9c7ca7e908aa12b2703ebc0..f19d708679c5acce9d95b1ad7670b7aa10496cf7 100644 --- 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 @@ -10,22 +10,12 @@ import lombok.Data; */ @Data public class UnitEdgeVO { - /** uuid */ - private String uuid; /** 边名称 */ - private String edgeName; - /** 边Key */ - private String edgeKey; + private String hoverName; /** 边的起点 */ private String sourceUuid; /** 边的终点 */ private String targetUuid; - /** Hover */ - @Deprecated - private String hoverFuncId; - /** Click */ - @Deprecated - private String clickFuncId; /** 样式ID */ - private String styleId; + private String styleUuid; } 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 index e6f2448793a30a25748e9bfb8a08fc64f7854f40..bfa574d0521f5ea175b6570283a6730043151c44 100644 --- 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 @@ -12,24 +12,14 @@ import lombok.Data; */ @Data public class UnitNodeVO { - /** uuid */ - private String uuid; - /** 节点名称 */ - private String nodeName; - /** 节点Key */ - private String nodeKey; + /** 节点UUID */ + private String nodeUuid; + /** 样式 */ + private String styleUuid; /** 节点Data模式:前缀匹配、全部匹配 */ private NodeDataModeEnum nodeDataMode; /** 节点DataKey: UseCase-Module-Category-SubCategory */ private String nodeDataKey; - /** hover 函数id */ - @Deprecated - private String hoverFuncId; - /** click 函数id */ - @Deprecated - private String clickFuncId; - /** 样式 */ - private String styleId; /** 节点类型 */ private NodeTypeEnum nodeType; } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..8dd54000bce28cf629f78513335b384089c31399 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java @@ -0,0 +1,23 @@ +package cn.icanci.loopstack.bic.dal.mongo.daointerface; + +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 11:00 + */ +public interface UnitViewDAO extends BaseDAO { + /** 文档对应的名字 */ + String COLLECTION_NAME = BASE_COLLECTION_NAME + "unit-view"; + /** 文档对应的Class */ + Class COLLECTION_CLASS = UnitViewDO.class; + + UnitViewDO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); + + /** 列 */ + interface UnitViewColumn extends BaseColumn { + String SYSTEM_UUID = "systemUuid"; + String USE_CASE_UUID = "useCaseUuid"; + } + +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.java new file mode 100644 index 0000000000000000000000000000000000000000..1c02162725c32df6f2f4684b249f49f27241e4a3 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.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/09 22:13 + */ +@Data +public class UnitEdgeDO { + /** 边名称 */ + private String hoverName; + /** 边的起点 */ + private String sourceUuid; + /** 边的终点 */ + private String targetUuid; + /** 样式ID */ + private String styleUuid; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitNodeDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitNodeDO.java new file mode 100644 index 0000000000000000000000000000000000000000..21a2980fb10de62c13f13d68265ed51f67c51de5 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitNodeDO.java @@ -0,0 +1,23 @@ +package cn.icanci.loopstack.bic.dal.mongo.dateobject; + +import lombok.Data; + +/** + * 图结构的节点 + * + * @author icanci + * @since 1.0 Created in 2023/09/09 22:13 + */ +@Data +public class UnitNodeDO { + /** 节点UUID */ + private String nodeUuid; + /** 样式 */ + private String styleUuid; + /** 节点Data模式:前缀匹配、全部匹配 */ + private String nodeDataMode; + /** 节点DataKey: UseCase-Module-Category-SubCategory */ + private String nodeDataKey; + /** 节点类型 */ + private String nodeType; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitViewDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitViewDO.java new file mode 100644 index 0000000000000000000000000000000000000000..a1fa662199cb939af52b6b821a8b00c4baf40de9 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitViewDO.java @@ -0,0 +1,23 @@ +package cn.icanci.loopstack.bic.dal.mongo.dateobject; + +import java.util.List; + +import lombok.Data; + +/** + * 图结构单元视图 + * + * @author icanci + * @since 1.0 Created in 2023/09/09 21:49 + */ +@Data +public class UnitViewDO extends BaseDO { + /** 系统唯一标识 */ + private String systemUuid; + /** 用例唯一标识 */ + private String useCaseUuid; + /** 边组织结构 */ + private List edges; + /** 节点组织结构 */ + private List nodes; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..f058d927f87a4e7976968aae23602c1bcdd07b38 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.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.UnitViewDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 11:02 + */ +@Service("unitViewDAO") +public class MongoUnitViewDAO extends AbstractBaseDAO implements UnitViewDAO { + @Override + public void insert(UnitViewDO unitViewDO) { + super.insert(unitViewDO); + mongoTemplate.insert(unitViewDO, COLLECTION_NAME); + } + + @Override + public void update(UnitViewDO unitViewDO) { + super.update(unitViewDO); + mongoTemplate.save(unitViewDO, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(UnitViewColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(UnitViewDO unitViewDO, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(UnitViewColumn.ENV).is(DEFAULT_ENV); + if (StringUtils.isNotBlank(unitViewDO.getSystemUuid())) { + criteria.and(UnitViewColumn.SYSTEM_UUID).is(unitViewDO.getSystemUuid()); + } + if (StringUtils.isNotBlank(unitViewDO.getUseCaseUuid())) { + criteria.and(UnitViewColumn.USE_CASE_UUID).is(unitViewDO.getUseCaseUuid()); + } + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, UnitViewColumn.CREATE_TIME)); + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public UnitViewDO queryOneById(String _id) { + Criteria criteria = Criteria.where(UnitViewColumn._ID).is(_id); + criteria.and(UnitViewColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public Class getBaseColumn() { + return UnitViewColumn.class; + } + + @Override + public UnitViewDO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { + Criteria criteria = Criteria.where(UnitViewColumn.USE_CASE_UUID).is(useCaseUuid); + criteria.and(UnitViewColumn.ENV).is(DEFAULT_ENV); + criteria.and(UnitViewColumn.SYSTEM_UUID).is(systemUuid); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } +} diff --git a/views/src/main/resources/vueboot/src/api/unitView.js b/views/src/main/resources/vueboot/src/api/unitView.js new file mode 100644 index 0000000000000000000000000000000000000000..05dcc5f2ea910f0f7e1bc2b43a3c93600e72b3a7 --- /dev/null +++ b/views/src/main/resources/vueboot/src/api/unitView.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export async function unitViewPageQuery(unitView, paginator) { + return await request({ + url: '/bicAdmin/unitView/query', + method: 'post', + data: { + 'unitView': unitView, + 'paginator': paginator + } + }) +} + +export async function unitViewSave(unitView) { + return await request({ + url: '/bicAdmin/unitView/save', + method: 'post', + data: unitView + }) +} + +export async function remoteValidateUnique(systemUuid, useCaseUuid) { + return await request({ + url: '/bicAdmin/unitView/validateUnique/' + systemUuid + '/' + useCaseUuid, + method: 'get', + }) +} diff --git a/views/src/main/resources/vueboot/src/router/index.js b/views/src/main/resources/vueboot/src/router/index.js index 469d93e32fa4c036bc98bc3030166c6adc8e7e47..2a5ef7fba6b01dc439cbfcc30bc3cfe3b451fcb3 100644 --- a/views/src/main/resources/vueboot/src/router/index.js +++ b/views/src/main/resources/vueboot/src/router/index.js @@ -18,14 +18,14 @@ Vue.use(Router) * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb * name:'router-name' the name is used by (must set!!!) * meta : { - roles: ['admin','editor'] control the page roles (you can set multiple roles) - title: 'title' the name show in sidebar and breadcrumb (recommend set) - icon: 'svg-name'/'el-icon-x' the icon show in the sidebar - noCache: true if set true, the page will no be cached(default is false) - affix: true if set true, the tag will affix in the tags-view - breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) - activeMenu: '/example/list' if set path, the sidebar will highlight the path you set - } + roles: ['admin','editor'] control the page roles (you can set multiple roles) + title: 'title' the name show in sidebar and breadcrumb (recommend set) + icon: 'svg-name'/'el-icon-x' the icon show in the sidebar + noCache: true if set true, the page will no be cached(default is false) + affix: true if set true, the tag will affix in the tags-view + breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) + activeMenu: '/example/list' if set path, the sidebar will highlight the path you set + } */ /** @@ -148,12 +148,12 @@ export const constantRoutes = [ name: 'nodeVueConfig', meta: {title: '节点组件配置'} }, - { - path: 'edge-config', - component: () => import('@/views/bic-config/edge-config'), - name: 'edgeConfig', - meta: {title: '边配置'} - }, + // { + // path: 'edge-config', + // component: () => import('@/views/bic-config/edge-config'), + // name: 'edgeConfig', + // meta: {title: '边配置'} + // }, { path: 'edge-style-config', component: () => import('@/views/bic-config/edge-style-config'), @@ -167,10 +167,10 @@ export const constantRoutes = [ // meta: {title: '边函数配置'} // }, { - path: 'module-relation', - component: () => import('@/views/bic-config/module-relation'), - name: 'moduleRelation', - meta: {title: '组织模块联系'} + path: 'bic-edit', + component: () => import('@/views/bic-config/bic-edit'), + name: 'bicEdit', + meta: {title: '编辑纠察图'} }, ] }, diff --git a/views/src/main/resources/vueboot/src/views/bic-config/module-relation.vue b/views/src/main/resources/vueboot/src/views/bic-config/bic-edit.vue similarity index 100% rename from views/src/main/resources/vueboot/src/views/bic-config/module-relation.vue rename to views/src/main/resources/vueboot/src/views/bic-config/bic-edit.vue diff --git a/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-style-form.vue b/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-style-form.vue index 349535ac7689521094e8dac7a11a9a9a54a313aa..9a2d871e01cc8bfbdb27cfc9f7bec0859b86effc 100644 --- a/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-style-form.vue +++ b/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-style-form.vue @@ -47,7 +47,6 @@