✨ lov添加缓存更新(接口检查更新 和 socket通知更新)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user