diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEvent.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEvent.java index e3cf164233e5eab4f1378e3fb05445ba1d2411e9..db3eb99e57b3990cf3d1dbb4e341bade77c4e69b 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEvent.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEvent.java @@ -4,10 +4,15 @@ import cn.icanci.rec.admin.biz.event.RecEvent; import cn.icanci.rec.common.enums.LogOperatorTypeEnum; import cn.icanci.rec.common.enums.ModuleTypeEnum; +import java.util.Date; + +import org.springframework.stereotype.Component; + /** * @author icanci * @since 1.0 Created in 2022/11/12 10:42 */ +@Component public class LogEvent extends RecEvent { private static final long serialVersionUID = 6383748454354078356L; @@ -19,11 +24,17 @@ public class LogEvent extends RecEvent { private LogOperatorTypeEnum logOperatorType; + private Date createTime; + + public LogEvent() { + } + public LogEvent(String targetId, ModuleTypeEnum moduleType, String context, LogOperatorTypeEnum logOperatorType) { this.targetId = targetId; this.moduleType = moduleType; this.context = context; this.logOperatorType = logOperatorType; + this.createTime = new Date(); } public String getTargetId() { @@ -57,4 +68,12 @@ public class LogEvent extends RecEvent { public void setLogOperatorType(LogOperatorTypeEnum logOperatorType) { this.logOperatorType = logOperatorType; } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEventListener.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEventListener.java index 4add8cf972fd6044c746349fadff05c6607615a5..c05e37c95c7e73620d78e26c6b38000e662f6a81 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEventListener.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/event/log/LogEventListener.java @@ -1,7 +1,11 @@ package cn.icanci.rec.admin.biz.event.log; +import cn.icanci.rec.admin.biz.service.LogOperateService; +import cn.icanci.rec.common.model.log.LogOperateVO; import cn.icanci.rec.spi.event.BaseEventListener; +import javax.annotation.Resource; + import org.springframework.stereotype.Component; /** @@ -13,8 +17,18 @@ import org.springframework.stereotype.Component; @Component public class LogEventListener extends BaseEventListener { + @Resource + private LogOperateService logOperateService; + @Override protected void event(LogEvent event) { + LogOperateVO logOperateVO = new LogOperateVO(); + logOperateVO.setModule(event.getModuleType()); + logOperateVO.setTargetId(event.getTargetId()); + logOperateVO.setOperatorType(event.getLogOperatorType()); + logOperateVO.setContent(event.getContext()); + logOperateVO.setCreateTime(event.getCreateTime()); + logOperateService.log(logOperateVO); } } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseService.java index f4efd725d13f1734e4fbef9095767b76e86e0e01..bea481a2b24d40221991467fda8b59b2d5ab7a9d 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/BaseService.java @@ -55,4 +55,14 @@ public interface BaseService { default boolean doInsert(T t) { return StringUtils.isBlank(t.getId()); } + + /** + * 是否是删除的 + * + * @param t t + * @return 返回是否是删除的 + */ + default boolean isDeleted(T t) { + return t.getIsDelete() == 1; + } } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DomainService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DomainService.java index e0c0df2ef3f1534f49f58740e72d98b9614db5a1..067a8497aee531f65bd0ef201cb53b75fac22ee2 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DomainService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/DomainService.java @@ -1,6 +1,7 @@ package cn.icanci.rec.admin.biz.service; import cn.icanci.rec.admin.dal.mongodb.common.PageList; +import cn.icanci.rec.common.model.TextValue; import cn.icanci.rec.common.model.config.DomainVO; import java.util.List; @@ -58,4 +59,11 @@ public interface DomainService extends BaseService { * @return 返回查询的结果 */ DomainVO queryByDomainCode(String domainCode); + + /** + * 加载页面下拉框 + * + * @return 返回页面下拉框 + */ + List loadSelector(); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/SceneService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/SceneService.java index a864477a99ed6a6a8ea1efbdcab72375a302abbc..38e732f0e8232e3209197020a6753cf6317f17bd 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/SceneService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/SceneService.java @@ -21,4 +21,12 @@ public interface SceneService extends BaseService { @Override PageList queryPage(SceneVO sceneVO, int pageNum, int pageSize); + + /** + * 根据域Code查询场景信息 + * + * @param domainCode domainCode + * @return 返回场景信息 + */ + SceneVO queryByDomainCode(String domainCode); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DomainServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DomainServiceImpl.java index e72f7f1d07874ac77a394bdff27f853089730a7e..f0757ce46ca3616f7d780cf955c7e69143515d2c 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DomainServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/DomainServiceImpl.java @@ -1,18 +1,27 @@ package cn.icanci.rec.admin.biz.service.impl; +import cn.icanci.rec.admin.biz.event.log.LogEvent; import cn.icanci.rec.admin.biz.mapper.DomainMapper; import cn.icanci.rec.admin.biz.service.DomainService; import cn.icanci.rec.admin.dal.mongodb.common.PageList; import cn.icanci.rec.admin.dal.mongodb.daointerface.DomainDAO; import cn.icanci.rec.admin.dal.mongodb.dateobject.DomainDO; +import cn.icanci.rec.common.enums.LogOperatorTypeEnum; +import cn.icanci.rec.common.enums.ModuleTypeEnum; +import cn.icanci.rec.common.model.TextValue; import cn.icanci.rec.common.model.config.DomainVO; +import cn.icanci.rec.spi.event.EventDispatcher; import java.util.List; import javax.annotation.Resource; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import com.alibaba.fastjson.JSON; +import com.google.common.collect.Lists; + /** * Domain Service * @@ -22,9 +31,16 @@ import org.springframework.stereotype.Service; @Service public class DomainServiceImpl implements DomainService { @Resource - private DomainDAO domainDAO; + private DomainDAO domainDAO; + @Resource + private DomainMapper domainMapper; @Resource - private DomainMapper domainMapper; + private EventDispatcher eventDispatcher; + + /** label 格式化 */ + private static final String DELETED_FORMAT = "[无效] %s"; + /** label 格式化 */ + private static final String NOT_DELETED_FORMAT = "[有效] %s"; @Override public List queryAll() { @@ -35,8 +51,10 @@ public class DomainServiceImpl implements DomainService { public void save(DomainVO domain) { if (doInsert(domain)) { domainDAO.insert(domainMapper.vo2do(domain)); + eventDispatcher.fire(new LogEvent(domain.getUuid(), ModuleTypeEnum.REC_DOMAIN, JSON.toJSONString(domain), LogOperatorTypeEnum.CREATE)); } else { domainDAO.update(domainMapper.vo2do(domain)); + eventDispatcher.fire(new LogEvent(domain.getUuid(), ModuleTypeEnum.REC_DOMAIN, JSON.toJSONString(domain), LogOperatorTypeEnum.UPDATE)); } } @@ -60,4 +78,24 @@ public class DomainServiceImpl implements DomainService { public DomainVO queryByDomainCode(String domainCode) { return domainMapper.do2vo(domainDAO.queryByDomainCode(domainCode)); } + + @Override + public List loadSelector() { + List domains = queryAll(); + if (CollectionUtils.isEmpty(domains)) { + return Lists.newArrayList(); + } + List textValues = Lists.newArrayList(); + for (DomainVO domain : domains) { + String label; + if (isDeleted(domain)) { + label = String.format(DELETED_FORMAT, domain.getDomainName()); + } else { + label = String.format(NOT_DELETED_FORMAT, domain.getDomainName()); + } + String value = domain.getDomainCode(); + textValues.add(new TextValue(label, value)); + } + return null; + } } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/SceneServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/SceneServiceImpl.java index 2357d44099af155f14227dc20a769dc49e320a25..5d283441de67b06a69c1a8414d6df98c740513a1 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/SceneServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/SceneServiceImpl.java @@ -13,6 +13,8 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; +import com.google.common.collect.Lists; + /** * @author icanci * @since 1.0 Created in 2022/11/12 10:21 @@ -48,4 +50,16 @@ public class SceneServiceImpl implements SceneService { PageList pageQuery = sceneDAO.pageQuery(sceneMapper.vo2do(scene), pageNum, pageSize); return new PageList<>(sceneMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); } + + @Override + public SceneVO queryByDomainCode(String domainCode) { + SceneDO scene = sceneDAO.queryByDomainCode(domainCode); + if (scene == null) { + SceneVO sceneVO = new SceneVO(); + sceneVO.setDomainCode(domainCode); + sceneVO.setScenePairs(Lists.newArrayList()); + return sceneVO; + } + return sceneMapper.do2vo(scene); + } } diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/SceneDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/SceneDAO.java index 5ff2ca79f98e82a7be8685878d9db126812d17d9..b9dfa41eea845d143ce169bea1b43bea7d6948ad 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/SceneDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/daointerface/SceneDAO.java @@ -16,6 +16,8 @@ public interface SceneDAO extends BaseDAO { */ Class COLLECTION_CLASS = SceneDO.class; + SceneDO queryByDomainCode(String domainCode); + interface SceneColumn extends BaseColumn { /** * 域Code diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoLogOperateDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoLogOperateDAO.java index 3ac1a4d6ce5ab492fe96a7889b127d0423ad949c..e8a1151a57b135a00fe930e7e4a4aceebf9dae19 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoLogOperateDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoLogOperateDAO.java @@ -22,7 +22,7 @@ public class MongoLogOperateDAO extends MongoPageHelper implements LogOperateDAO public void insert(LogOperateDO t) { t.setId(null); t.setEnv(EnvUtils.getEnv()); - mongoTemplate.insert(t); + mongoTemplate.insert(t, COLLECTION_NAME); } @Override diff --git a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoSceneDAO.java b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoSceneDAO.java index 4a96ad5cc13d1bfe433f77da820dbc917625556f..5a406784dd5ddf14db440bce9c751703555e899b 100644 --- a/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoSceneDAO.java +++ b/rec-admin/rec-admin-dal/src/main/java/cn/icanci/rec/admin/dal/mongodb/mongo/MongoSceneDAO.java @@ -61,4 +61,12 @@ public class MongoSceneDAO extends AbstractBaseDAO implements SceneDAO return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); } + + @Override + public SceneDO queryByDomainCode(String domainCode) { + Criteria criteria = Criteria.where(SceneColumn.domainCode).is(domainCode); + criteria.and(SceneColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } } diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js new file mode 100644 index 0000000000000000000000000000000000000000..acc419072dd983f14adc22dba093808f444bfbf5 --- /dev/null +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +/** + * 分页查询 + * + * @param domain domain + * @param paginator paginator + * @returns {*} + */ +export async function loadDomainSelector() { + let ret = await request({ + url: '/rec/domain/loadSelector', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] +} diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/sceneApi.js b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/sceneApi.js new file mode 100644 index 0000000000000000000000000000000000000000..11003567ae012df6b13e463345b472c3b0238407 --- /dev/null +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/api/sceneApi.js @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +/** + * 保存scene + * + * @param scene scene + * @returns {*} + */ +export async function saveScene(scene) { + return await request({ + url: '/rec/scene/save', + method: 'post', + data: scene + }) +} + +/** + * 查询场景信息 + * + * @param domainCode domainCode + * @returns {*} + */ +export async function sceneQuery(domainCode) { + return await request({ + url: '/rec/scene/queryByDomainCode/' + domainCode, + method: 'get', + }) +} diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/main.js b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/main.js index 7f2058f0f0348621c0f61d547811386bba763f42..e154a536c8237c29e7dc11e920b97ef855ac62e0 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/main.js +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/main.js @@ -10,6 +10,7 @@ import store from './store' import '@/icons' // icon import '@/permission' +import moment from "moment"; // 英文版本 // Vue.use(ElementUI, { locale }) @@ -20,6 +21,9 @@ Vue.config.productionTip = false Vue.prototype.$cloneObj = function (data) { return JSON.parse(JSON.stringify(data)) } +Vue.prototype.dateFormat = function (date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss'); +} new Vue({ el: '#app', diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-log.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-log.vue index c1774987c15a40f2b67c1fbc6890b1e64bdc32ca..61b733455bbe61489fbe1bed48498e1e5ef1c2d2 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-log.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-log.vue @@ -41,7 +41,7 @@ width="150" label="操作时间"> @@ -55,6 +55,7 @@ import vuePage from "../common/vue-page.vue" import {logPageQuery} from "../../api/logApi"; +import moment from "moment"; export default { name: "vue-log", @@ -88,7 +89,6 @@ export default { 'targetId': vm.targetId, } - console.log(req) let ret = await logPageQuery(req, vm.pageResult.paginator) if (ret.ok) { vm.pageResult = ret.data.queryPage @@ -103,7 +103,7 @@ export default { }, clearForm() { this.dialogVisible = false - } + }, } } diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-page.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-page.vue index 1cf957853138230c3855197b338cc0cc4794a7ef..b48169cbaf61ca85bbbf1be9b1f1e13c9edf7e59 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-page.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/common/vue-page.vue @@ -30,15 +30,6 @@ export default { }, computed: {}, created() { - this.$nextTick(() => { - if (!this.paginator) { - this.currentPage = 0; - this.totalCount = 0; - } - - this.currentPage = this.paginator.currentPage; - this.totalCount = this.paginator.totalCount; - }) }, methods: { //切换每页条数 @@ -51,6 +42,20 @@ export default { this.paginator.currentPage = val; this.query(); } + }, + watch: { + 'paginator': { + handler(newVal, oldVal) { + if (!this.paginator) { + this.currentPage = 0; + this.totalCount = 0; + } + + this.currentPage = this.paginator.currentPage; + this.totalCount = this.paginator.totalCount; + }, + immediate: true + } } } diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainForm.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainForm.vue index 8227337c6f104419f8e0ecd89035a12a544d65d9..ec29e90bdc0900366965da990ffa05bc38f12ab2 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainForm.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainForm.vue @@ -11,7 +11,6 @@ :before-close="clearForm"> - + - + + + + 取 消 - 确 定 + 确 定 @@ -42,6 +44,9 @@ export default { components: {}, data() { const validateDomainName = async (rule, value, callback) => { + if (this.saveData.id) { + callback() + } let ret = await remoteValidateDomainName(value); if (ret.data.result) { callback() @@ -50,6 +55,9 @@ export default { } }; const validateDomainCode = async (rule, value, callback) => { + if (this.saveData.id) { + callback() + } let ret = await remoteValidateDomainCode(value); if (ret.data.result) { callback() @@ -62,7 +70,8 @@ export default { dialogVisible: false, saveData: { domainName: '', - domainCode: '' + domainCode: '', + desc: '', }, rules: { domainName: [ diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainScene.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainScene.vue new file mode 100644 index 0000000000000000000000000000000000000000..23aea588ab79eee4abb1825b09cdb3e94a831674 --- /dev/null +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/dialog/domainScene.vue @@ -0,0 +1,189 @@ + + + diff --git a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/domain.vue b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/domain.vue index 6269d2af91731c001937c26ae0baeff40f560d2c..24f263f30532b4c24e3ae3751d29ea611e2d74a7 100644 --- a/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/domain.vue +++ b/rec-admin/rec-admin-views/src/main/resources/vueboot/src/views/ruleConfig/domain.vue @@ -36,6 +36,11 @@ prop="domainCode" label="域Code"> + + @@ -59,7 +64,8 @@ width="200" label="操作">