diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/EdgeMapper.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/EdgeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e8709038636319988e102fc41596d57ca6d1e1f3 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/EdgeMapper.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.EdgeVO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.EdgeDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 09:56 + */ +@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface EdgeMapper extends BaseMapper { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeService.java new file mode 100644 index 0000000000000000000000000000000000000000..7d54571890a291ad646ef2e43c826b431fc1c6f4 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeService.java @@ -0,0 +1,33 @@ +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.EdgeVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 09:54 + */ +public interface EdgeService extends BaseService { + @Override + List queryAll(); + + @Override + void save(EdgeVO edgeVO); + + @Override + EdgeVO queryById(String id); + + @Override + PageList queryPage(EdgeVO edgeVO, int pageNum, int pageSize); + + EdgeVO queryBySystemUuidAndName(String systemUuid, String name); + + EdgeVO queryBySystemUuidAndKey(String systemUuid, String key); + + List loadSelector(String systemUuid); + + List loadAllSelector(); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/EdgeServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/EdgeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..d15969259cfca3e50ad232733520e78a98910183 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/EdgeServiceImpl.java @@ -0,0 +1,112 @@ +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 cn.icanci.loopstack.bic.biz.mapper.EdgeMapper; +import cn.icanci.loopstack.bic.biz.service.EdgeService; +import cn.icanci.loopstack.bic.common.model.TextValue; +import cn.icanci.loopstack.bic.common.model.base.EdgeVO; +import cn.icanci.loopstack.bic.common.model.base.NodeVO; +import cn.icanci.loopstack.bic.dal.mongo.common.PageList; +import cn.icanci.loopstack.bic.dal.mongo.daointerface.EdgeDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.EdgeDO; + +import com.google.common.collect.Lists; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 09:55 + */ +@Service +public class EdgeServiceImpl implements EdgeService { + @Resource + private EdgeDAO edgeDAO; + @Resource + private EdgeMapper edgeMapper; + + @Override + public List queryAll() { + return edgeMapper.dos2vos(edgeDAO.queryAll()); + } + + @Override + public void save(EdgeVO edgeVO) { + // TODO 日志记录 + // TODO 事务插入 测试 + if (doInsert(edgeVO)) { + EdgeDO insert = edgeMapper.vo2do(edgeVO); + edgeDAO.insert(insert); + // TODO + // 插入样式 + // 插入组件函数 + + } else { + edgeDAO.update(edgeMapper.vo2do(edgeVO)); + } + } + + @Override + public EdgeVO queryById(String id) { + return edgeMapper.do2vo(edgeDAO.queryOneById(id)); + } + + @Override + public PageList queryPage(EdgeVO edgeVO, int pageNum, int pageSize) { + PageList pageQuery = edgeDAO.pageQuery(edgeMapper.vo2do(edgeVO), pageNum, pageSize); + return new PageList<>(edgeMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + + } + + @Override + public EdgeVO queryBySystemUuidAndName(String systemUuid, String name) { + return edgeMapper.do2vo(edgeDAO.queryBySystemUuidAndName(systemUuid, name)); + } + + @Override + public EdgeVO queryBySystemUuidAndKey(String systemUuid, String key) { + return edgeMapper.do2vo(edgeDAO.queryBySystemUuidAndKey(systemUuid, key)); + } + + @Override + public List loadSelector(String systemUuid) { + List edges = queryAll(); + List textValues = Lists.newArrayList(); + for (EdgeVO edge : edges) { + if (!StringUtils.equals(systemUuid, edge.getSystemUuid())) { + continue; + } + + String label; + if (isDeleted(edge)) { + label = String.format(DELETED_FORMAT, edge.getEdgeName()); + } else { + label = String.format(NOT_DELETED_FORMAT, edge.getEdgeName()); + } + String value = edge.getUuid(); + textValues.add(new TextValue(label, value)); + } + return textValues; + } + + @Override + public List loadAllSelector() { + List edges = queryAll(); + List textValues = Lists.newArrayList(); + for (EdgeVO edge : edges) { + String label; + if (isDeleted(edge)) { + label = String.format(DELETED_FORMAT, edge.getEdgeName()); + } else { + label = String.format(NOT_DELETED_FORMAT, edge.getEdgeName()); + } + String value = edge.getUuid(); + textValues.add(new TextValue(label, value)); + } + return textValues; + } +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..eab4787b99bc3eba0163014d1a48daa918107f71 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeDAO.java @@ -0,0 +1,27 @@ +package cn.icanci.loopstack.bic.dal.mongo.daointerface; + +import cn.icanci.loopstack.bic.dal.mongo.dateobject.EdgeDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 09:57 + */ +public interface EdgeDAO extends BaseDAO { + /** 文档对应的名字 */ + String COLLECTION_NAME = BASE_COLLECTION_NAME + "edge"; + /** 文档对应的Class */ + Class COLLECTION_CLASS = EdgeDO.class; + + EdgeDO queryBySystemUuidAndName(String systemUuid, String name); + + EdgeDO queryBySystemUuidAndKey(String systemUuid, String key); + + /** 列 */ + interface EdgeColumn extends BaseColumn { + String EDGE_NAME = "edgeName"; + + String EDGE_KEY = "edgeKey"; + + String SYSTEM_UUID = "systemUuid"; + } +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/EdgeDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/EdgeDO.java new file mode 100644 index 0000000000000000000000000000000000000000..9c2f617016dc6fd92536f5a15fa6f2be8aa61b48 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/EdgeDO.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/16 09:57 + */ +@Data +public class EdgeDO extends BaseDO { + /** 边命名 */ + private String edgeName; + /** 边Key */ + private String edgeKey; + /** 系统唯一标识 */ + private String systemUuid; +} diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..31767fcaf402084e878ce824c80b9e248f5a85b2 --- /dev/null +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeDAO.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.EdgeDAO; +import cn.icanci.loopstack.bic.dal.mongo.dateobject.EdgeDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 10:02 + */ +@Service("edgeDAO") +public class MongoEdgeDAO extends AbstractBaseDAO implements EdgeDAO { + @Override + public void insert(EdgeDO edgeDO) { + super.insert(edgeDO); + mongoTemplate.insert(edgeDO, COLLECTION_NAME); + } + + @Override + public void update(EdgeDO edgeDO) { + super.update(edgeDO); + mongoTemplate.save(edgeDO, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(EdgeColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(EdgeDO edgeDO, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(EdgeColumn.ENV).is(DEFAULT_ENV); + if (StringUtils.isNotBlank(edgeDO.getEdgeName())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(EdgeColumn.EDGE_NAME).regex("^.*" + edgeDO.getEdgeName() + ".*$", "i"); + } + if (StringUtils.isNotBlank(edgeDO.getEdgeKey())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(EdgeColumn.EDGE_KEY).regex("^.*" + edgeDO.getEdgeKey() + ".*$", "i"); + } + if (StringUtils.isNotBlank(edgeDO.getSystemUuid())) { + criteria.and(EdgeColumn.SYSTEM_UUID).is(edgeDO.getSystemUuid()); + } + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, EdgeColumn.CREATE_TIME)); + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public EdgeDO queryOneById(String _id) { + Criteria criteria = Criteria.where(EdgeColumn._ID).is(_id); + criteria.and(EdgeColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public Class getBaseColumn() { + return EdgeColumn.class; + } + + @Override + public EdgeDO queryBySystemUuidAndName(String systemUuid, String name) { + Criteria criteria = Criteria.where(EdgeColumn.EDGE_NAME).is(name); + criteria.and(EdgeColumn.ENV).is(DEFAULT_ENV); + criteria.and(EdgeColumn.SYSTEM_UUID).is(systemUuid); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public EdgeDO queryBySystemUuidAndKey(String systemUuid, String key) { + Criteria criteria = Criteria.where(EdgeColumn.EDGE_KEY).is(key); + criteria.and(EdgeColumn.ENV).is(DEFAULT_ENV); + criteria.and(EdgeColumn.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/edge.js b/views/src/main/resources/vueboot/src/api/edge.js new file mode 100644 index 0000000000000000000000000000000000000000..edf283f79fc925e68bb2498cd8e4f8f39b2388c1 --- /dev/null +++ b/views/src/main/resources/vueboot/src/api/edge.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +export async function edgePageQuery(edge, paginator) { + return await request({ + url: '/bicAdmin/edge/query', + method: 'post', + data: { + 'edge': edge, + 'paginator': paginator + } + }) +} + +export async function edgeSave(edge) { + return await request({ + url: '/bicAdmin/edge/save', + method: 'post', + data: edge + }) +} + +export async function remoteValidateEdgeName(systemUuid, name) { + return await request({ + url: '/bicAdmin/edge/validateName/' + systemUuid + '/' + name, + method: 'get', + }) +} + +export async function remoteValidatesEdgeKey(systemUuid, key) { + return await request({ + url: '/bicAdmin/edge/validateKey/' + systemUuid + '/' + key, + method: 'get', + }) +} diff --git a/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-form.vue b/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..d3f74fdcf7c59e3efc82c1aeb8c7c13fb3d81e9b --- /dev/null +++ b/views/src/main/resources/vueboot/src/views/bic-config/dialog/edge-form.vue @@ -0,0 +1,163 @@ + + + diff --git a/views/src/main/resources/vueboot/src/views/bic-config/edge-config.vue b/views/src/main/resources/vueboot/src/views/bic-config/edge-config.vue index 96deb1cd0131009d75d02f573612928559450fe3..c31952849b2b4c6e2c6993f48fc3419d2e56eafa 100644 --- a/views/src/main/resources/vueboot/src/views/bic-config/edge-config.vue +++ b/views/src/main/resources/vueboot/src/views/bic-config/edge-config.vue @@ -1,25 +1,190 @@ diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/controller/EdgeController.java b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/EdgeController.java index d02d837463169619e8811ce1b0e74613a367562c..10e2d490a2b8af8987e47d9e2cb7f3f70c9bc1e7 100644 --- a/web/src/main/java/cn/icanci/loopstack/bic/web/controller/EdgeController.java +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/EdgeController.java @@ -1,61 +1,60 @@ -//package cn.icanci.loopstack.bic.web.controller; -// -//import cn.icanci.loopstack.bic.biz.service.NodeService; -//import cn.icanci.loopstack.bic.common.model.TextValue; -//import cn.icanci.loopstack.bic.common.model.base.NodeVO; -//import cn.icanci.loopstack.bic.common.result.R; -//import cn.icanci.loopstack.bic.web.form.NodeQueryForm; -//import cn.icanci.loopstack.bic.web.mapper.NodeWebMapper; -//import cn.icanci.loopstack.bic.web.model.Node; -// -//import java.util.List; -// -//import javax.annotation.Resource; -// -//import org.springframework.web.bind.annotation.*; -// -///** -// * @author icanci -// * @since 1.0 Created in 2023/09/11 23:21 -// */ -//@RestController -//@RequestMapping("/bicAdmin/edge") -//public class EdgeController { -// @Resource -// private EdgeWebMapper edgeWebMapper; -// @Resource -// private EdgeService edgeService; -// -// -// // ================================ CRUD ================================ -// @PostMapping("query") -// public R query(@RequestBody NodeQueryForm form) { -// return R.builderOk().data("queryPage", nodeService.queryPage(nodeWebMapper.web2vo(form.getNode()), form.getPaginator().getCurrentPage(), form.getPaginator().getPageSize())) -// .build(); -// } -// -// @PostMapping("save") -// public R save(@RequestBody Node node) { -// nodeService.save(nodeWebMapper.web2vo(node)); -// return R.builderOk().build(); -// } -// -// @GetMapping("validateName/{systemUuid}/{name}") -// public R validateName(@PathVariable("systemUuid") String systemUuid, @PathVariable("name") String name) { -// NodeVO node = nodeService.queryBySystemUuidAndName(systemUuid, name); -// return R.builderOk().data("result", node == null).build(); -// } -// -// @GetMapping("validateKey/{systemUuid}/{key}") -// public R validateKey(@PathVariable("systemUuid") String systemUuid, @PathVariable("key") String key) { -// NodeVO node = nodeService.queryBySystemUuidAndKey(systemUuid, key); -// return R.builderOk().data("result", node == null).build(); -// } -// // ================================ Load Selectors ================================ -// -// @GetMapping("loadSelector/{systemUuid}") -// public R loadSelector(@PathVariable("systemUuid") String systemUuid) { -// List textValues = nodeService.loadSelector(systemUuid); -// return R.builderOk().data("textValues", textValues).build(); -// } -//} +package cn.icanci.loopstack.bic.web.controller; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.*; + +import cn.icanci.loopstack.bic.biz.service.EdgeService; +import cn.icanci.loopstack.bic.common.model.TextValue; +import cn.icanci.loopstack.bic.common.model.base.EdgeVO; +import cn.icanci.loopstack.bic.common.result.R; +import cn.icanci.loopstack.bic.web.form.EdgeQueryForm; +import cn.icanci.loopstack.bic.web.mapper.EdgeWebMapper; +import cn.icanci.loopstack.bic.web.model.Edge; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/11 23:21 + */ +@RestController +@RequestMapping("/bicAdmin/edge") +public class EdgeController { + @Resource + private EdgeWebMapper edgeWebMapper; + @Resource + private EdgeService edgeService; + + // ================================ CRUD ================================ + @PostMapping("query") + public R query(@RequestBody EdgeQueryForm form) { + return R.builderOk().data("queryPage", edgeService.queryPage(edgeWebMapper.web2vo(form.getEdge()), form.getPaginator().getCurrentPage(), form.getPaginator().getPageSize())) + .build(); + } + + @PostMapping("save") + public R save(@RequestBody Edge edge) { + edgeService.save(edgeWebMapper.web2vo(edge)); + return R.builderOk().build(); + } + + @GetMapping("validateName/{systemUuid}/{name}") + public R validateName(@PathVariable("systemUuid") String systemUuid, @PathVariable("name") String name) { + EdgeVO edge = edgeService.queryBySystemUuidAndName(systemUuid, name); + return R.builderOk().data("result", edge == null).build(); + } + + @GetMapping("validateKey/{systemUuid}/{key}") + public R validateKey(@PathVariable("systemUuid") String systemUuid, @PathVariable("key") String key) { + EdgeVO edge = edgeService.queryBySystemUuidAndKey(systemUuid, key); + return R.builderOk().data("result", edge == null).build(); + } + // ================================ Load Selectors ================================ + + @GetMapping("loadSelector/{systemUuid}") + public R loadSelector(@PathVariable("systemUuid") String systemUuid) { + List textValues = edgeService.loadSelector(systemUuid); + return R.builderOk().data("textValues", textValues).build(); + } +} diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/form/EdgeQueryForm.java b/web/src/main/java/cn/icanci/loopstack/bic/web/form/EdgeQueryForm.java new file mode 100644 index 0000000000000000000000000000000000000000..79b040de3d4700493e8c810930f27adcfa474efd --- /dev/null +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/form/EdgeQueryForm.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.bic.web.form; + +import cn.icanci.loopstack.bic.web.model.Edge; +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 09:52 + */ +@Data +public class EdgeQueryForm extends BaseQueryForm { + private Edge edge; +} diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/mapper/EdgeWebMapper.java b/web/src/main/java/cn/icanci/loopstack/bic/web/mapper/EdgeWebMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..228b8048af93a730f074db3d03109d823a683820 --- /dev/null +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/mapper/EdgeWebMapper.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.web.mapper; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +import cn.icanci.loopstack.bic.common.model.base.EdgeVO; +import cn.icanci.loopstack.bic.web.model.Edge; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/16 09:53 + */ +@Mapper(componentModel = "spring", uses = {}, nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface EdgeWebMapper extends BaseWebMapper { +} diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/model/Edge.java b/web/src/main/java/cn/icanci/loopstack/bic/web/model/Edge.java index 861c2c15b08ca5feeb44abb479ddac3278c47839..f1b7664a7632739d0305d3bc9d2210713219e292 100644 --- a/web/src/main/java/cn/icanci/loopstack/bic/web/model/Edge.java +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/model/Edge.java @@ -10,8 +10,8 @@ import lombok.Data; public class Edge extends Base { /** 节点系统标识 */ private String systemUuid; - /** 节点名称 */ - private String nodeName; - /** 节点Key */ - private String nodeKey; + /** 边名称 */ + private String edgeName; + /** 边Key */ + private String edgeKey; }