lov添加缓存更新(接口检查更新 和 socket通知更新)

This commit is contained in:
b2baccline
2021-03-26 15:41:00 +08:00
parent 43124948ec
commit 2aaa8ab4ef
11 changed files with 167 additions and 23 deletions

View File

@@ -18,9 +18,20 @@ import com.hccake.ballcat.common.model.result.BaseResultCode;
import com.hccake.ballcat.common.model.result.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lingting 2020-08-10 16:40
@@ -66,6 +77,14 @@ public class LovController {
return R.ok(lovInfoVO);
}
@PostMapping("/check")
@ApiOperation("检查本地缓存中指定keyword的lov是否已过期")
public R<List<String>> check(@RequestBody Map<String, LocalDateTime> map) {
List<Lov> list = new ArrayList<>(map.size());
map.forEach((keyword, updateTime) -> list.add(new Lov().setKeyword(keyword).setUpdateTime(updateTime)));
return R.ok(lovService.check(list));
}
/**
* 新增lov
* @param dto lov

View File

@@ -0,0 +1,25 @@
package com.hccake.ballcat.admin.modules.lov.event;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
/**
* lov 修改事件
*
* @author lingting 2021/3/25 17:18
*/
@Getter
public class LovChangeEvent extends ApplicationEvent {
private final String keyword;
public LovChangeEvent(String keyword) {
super(keyword);
this.keyword = keyword;
}
public static LovChangeEvent of(String keyword) {
return new LovChangeEvent(keyword);
}
}

View File

@@ -1,6 +1,5 @@
package com.hccake.ballcat.admin.modules.lov.model.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hccake.ballcat.admin.modules.lov.enums.HttpMethod;
import com.hccake.ballcat.admin.modules.lov.enums.HttpParamsPosition;
@@ -14,7 +13,6 @@ import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -65,18 +63,14 @@ public class LovDTO {
@ApiModelProperty("返回字段数据类型 1 String 2 Number")
private Integer retFieldDataType;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
private List<LovBody> bodyList;
private List<LovSearch> searchList;
public Lov toLov() {
return new Lov().setCreateTime(getCreateTime()).setFixedParams(getFixedParams()).setId(getId()).setKey(getKey())
.setKeyword(getKeyword()).setMethod(getMethod()).setMultiple(getMultiple()).setPosition(getPosition())
.setRet(getRet()).setRetField(getRetField()).setTitle(getTitle()).setUrl(getUrl());
return new Lov().setFixedParams(getFixedParams()).setId(getId()).setKey(getKey()).setKeyword(getKeyword())
.setMethod(getMethod()).setMultiple(getMultiple()).setPosition(getPosition()).setRet(getRet())
.setRetField(getRetField()).setTitle(getTitle()).setUrl(getUrl());
}
}

View File

@@ -4,6 +4,7 @@ import com.hccake.ballcat.admin.modules.lov.enums.HttpMethod;
import com.hccake.ballcat.admin.modules.lov.enums.HttpParamsPosition;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import lombok.Data;
/**
@@ -28,4 +29,7 @@ public class LovQO {
@ApiModelProperty("http请求参数位置")
private HttpParamsPosition position;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
}

View File

@@ -7,12 +7,12 @@ import com.hccake.ballcat.admin.modules.lov.model.entity.LovBody;
import com.hccake.ballcat.admin.modules.lov.model.entity.LovSearch;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.List;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author lingting 2020-08-12 21:35
@@ -57,6 +57,9 @@ public class LovInfoVO {
@ApiModelProperty("返回数据的字段")
private String retField;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
private List<LovBody> bodyList;
private List<LovSearch> searchList;

View File

@@ -8,7 +8,6 @@ import com.hccake.ballcat.admin.modules.lov.model.vo.LovPageVO;
import com.hccake.ballcat.common.model.domain.PageParam;
import com.hccake.ballcat.common.model.domain.PageResult;
import com.hccake.extend.mybatis.plus.service.ExtendService;
import java.util.List;
/**
@@ -59,4 +58,12 @@ public interface LovService extends ExtendService<Lov> {
*/
Lov getByKeyword(String keyword);
/**
* 检查指定的lov是否已过期
* @param list 数据集
* @return java.util.List<java.lang.String>
* @author lingting 2021-03-26 10:02
*/
List<String> check(List<Lov> list);
}

View File

@@ -1,6 +1,8 @@
package com.hccake.ballcat.admin.modules.lov.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.hccake.ballcat.admin.modules.lov.event.LovChangeEvent;
import com.hccake.ballcat.admin.modules.lov.mapper.LovMapper;
import com.hccake.ballcat.admin.modules.lov.model.entity.Lov;
import com.hccake.ballcat.admin.modules.lov.model.entity.LovBody;
@@ -10,17 +12,19 @@ import com.hccake.ballcat.admin.modules.lov.model.vo.LovPageVO;
import com.hccake.ballcat.admin.modules.lov.service.LovBodyService;
import com.hccake.ballcat.admin.modules.lov.service.LovSearchService;
import com.hccake.ballcat.admin.modules.lov.service.LovService;
import com.hccake.ballcat.common.core.exception.BusinessException;
import com.hccake.ballcat.common.model.domain.PageParam;
import com.hccake.ballcat.common.model.domain.PageResult;
import com.hccake.ballcat.common.core.exception.BusinessException;
import com.hccake.ballcat.common.model.result.BaseResultCode;
import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author lingting 2020-08-10 17:21
*/
@@ -32,6 +36,8 @@ public class LovServiceImpl extends ExtendServiceImpl<LovMapper, Lov> implements
private final LovSearchService searchService;
private final ApplicationEventPublisher eventPublisher;
@Override
public PageResult<LovPageVO> queryPage(PageParam pageParam, LovQO qo) {
return baseMapper.queryPage(pageParam, qo);
@@ -54,6 +60,7 @@ public class LovServiceImpl extends ExtendServiceImpl<LovMapper, Lov> implements
searchList.forEach((body -> body.setKeyword(keyword)));
searchService.saveBatchSomeColumn(searchList);
eventPublisher.publishEvent(LovChangeEvent.of(keyword));
return true;
}
@@ -110,4 +117,28 @@ public class LovServiceImpl extends ExtendServiceImpl<LovMapper, Lov> implements
return baseMapper.selectByKeyword(keyword);
}
@Override
public List<String> check(List<Lov> list) {
if (list == null || list.isEmpty()) {
return Collections.emptyList();
}
List<String> res = new ArrayList<>(list.size());
for (Lov lov : list) {
if (StrUtil.isBlank(lov.getKeyword())) {
continue;
}
if (
// 更新时间为空
lov.getUpdateTime() == null
// 时间不等
|| lov.getUpdateTime().compareTo(getByKeyword(lov.getKeyword()).getUpdateTime()) != 0) {
res.add(lov.getKeyword());
}
}
return res;
}
}

View File

@@ -0,0 +1,14 @@
package com.hccake.ballcat.admin.websocket.constant;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
/**
* @author lingting 2021/3/25 17:25
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class MessageTypeConstants {
public static final String LOV_CHANGE = "lov_change";
}

View File

@@ -1,10 +1,9 @@
package com.hccake.ballcat.admin.websocket.distribute;
import java.util.List;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author Hccake 2021/1/12
* @version 1.0
@@ -28,4 +27,12 @@ public class MessageDO {
*/
private String messageText;
/**
* 构建需要广播的message
* @author lingting 2021-03-25 17:28
*/
public static MessageDO broadcastMessage(String text) {
return new MessageDO().setMessageText(text).setNeedBroadcast(true);
}
}

View File

@@ -1,5 +1,6 @@
package com.hccake.ballcat.admin.websocket.distribute;
import com.hccake.ballcat.admin.modules.lov.event.LovChangeEvent;
import com.hccake.ballcat.admin.modules.notify.event.AnnouncementCloseEvent;
import com.hccake.ballcat.admin.modules.notify.event.StationNotifyPushEvent;
import com.hccake.ballcat.admin.modules.notify.model.domain.AnnouncementNotifyInfo;
@@ -11,16 +12,16 @@ import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
import com.hccake.ballcat.admin.websocket.message.AnnouncementCloseMessage;
import com.hccake.ballcat.admin.websocket.message.AnnouncementPushMessage;
import com.hccake.ballcat.admin.websocket.message.DictChangeMessage;
import com.hccake.ballcat.admin.websocket.message.LovChangeMessage;
import com.hccake.ballcat.common.util.JsonUtils;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @author Hccake 2021/1/5
* @version 1.0
@@ -34,6 +35,13 @@ public class PushEventListener {
private final MessageDistributor messageDistributor;
@Async
@EventListener(LovChangeEvent.class)
public void onLovChangeEvent(LovChangeEvent event) {
LovChangeMessage message = LovChangeMessage.of(event.getKeyword());
messageDistributor.distribute(MessageDO.broadcastMessage(message.toString()));
}
/**
* 字典修改事件监听
* @param event the `DictChangeEvent`

View File

@@ -0,0 +1,32 @@
package com.hccake.ballcat.admin.websocket.message;
import com.hccake.ballcat.admin.websocket.constant.MessageTypeConstants;
import com.hccake.ballcat.common.util.JsonUtils;
import com.hccake.ballcat.common.websocket.message.AbstractJsonWebSocketMessage;
import lombok.Getter;
import lombok.Setter;
/**
* @author lingting 2021/3/25 17:23
*/
@Getter
@Setter
public class LovChangeMessage extends AbstractJsonWebSocketMessage {
private String keyword;
public LovChangeMessage(String keyword) {
super(MessageTypeConstants.LOV_CHANGE);
this.keyword = keyword;
}
public static LovChangeMessage of(String keyword) {
return new LovChangeMessage(keyword);
}
@Override
public String toString() {
return JsonUtils.toJson(this);
}
}