From 947a82eac5a8e15b729dd8618b444910f3953c31 Mon Sep 17 00:00:00 2001 From: Chopper Date: Tue, 19 Apr 2022 09:28:26 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E7=83=AD=E8=AF=8D=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=EF=BC=8C=E7=83=AD=E8=AF=8D=E5=8A=9F=E8=83=BD=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/version4.2.4toMASTER.sql | 14 +++- .../goods/GoodsBuyerController.java | 6 +- .../hotwords/HotWordsEveryDayTaskExecute.java | 54 +++++++++++++ .../java/cn/lili/common/utils/DateUtil.java | 8 ++ .../serviceimpl/StoreFlowServiceImpl.java | 8 +- .../search/entity/dos/HotWordsHistory.java | 47 +++++++++++ .../entity/dto/HotWordsSearchParams.java | 80 +++++++++++++++++++ .../search/entity/vo/HotWordsHistoryVO.java | 33 ++++++++ .../search/mapper/HotWordsHistoryMapper.java | 32 ++++++++ .../search/service/EsGoodsSearchService.java | 22 ----- .../service/HotWordsHistoryService.java | 41 ++++++++++ .../search/service/HotWordsService.java | 38 +++++++++ .../serviceimpl/EsGoodsSearchServiceImpl.java | 33 +------- .../HotWordsHistoryServiceImpl.java | 73 +++++++++++++++++ .../serviceimpl/HotWordsServiceImpl.java | 68 ++++++++++++++++ .../store/serviceimpl/BillServiceImpl.java | 2 +- .../system/entity/dto/HotWordsSetting.java | 28 +++++++ .../entity/dto/HotWordsSettingItem.java | 41 ++++++++++ .../system/entity/enums/SettingEnum.java | 4 +- .../hotwords/HotWordsManagerController.java | 47 ----------- .../other/HotWordsManagerController.java | 79 ++++++++++++++++++ .../setting/SettingManagerController.java | 4 + 22 files changed, 653 insertions(+), 109 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/search/entity/dos/HotWordsHistory.java create mode 100644 framework/src/main/java/cn/lili/modules/search/entity/dto/HotWordsSearchParams.java create mode 100644 framework/src/main/java/cn/lili/modules/search/entity/vo/HotWordsHistoryVO.java create mode 100644 framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/search/service/HotWordsHistoryService.java create mode 100644 framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java create mode 100644 framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSetting.java create mode 100644 framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSettingItem.java delete mode 100644 manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java create mode 100644 manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java diff --git a/DB/version4.2.4toMASTER.sql b/DB/version4.2.4toMASTER.sql index f8cfb17a..7aad8be2 100644 --- a/DB/version4.2.4toMASTER.sql +++ b/DB/version4.2.4toMASTER.sql @@ -1,4 +1,16 @@ /** 增加签到日期 **/ ALTER TABLE li_member_sign ADD day int DEFAULT NULL COMMENT '签到日 '; ALTER TABLE li_member_sign DROP INDEX uk_member_day; -ALTER TABLE li_member_sign add unique uk_member_day (member_id, day) COMMENT 'uk_member_day'; \ No newline at end of file +ALTER TABLE li_member_sign add unique uk_member_day (member_id, day) COMMENT 'uk_member_day'; + + +/** 添加历史热词表 **/ +CREATE TABLE `li_hot_words_history` ( + `id` bigint NOT NULL COMMENT 'ID', + `create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime(6) DEFAULT NULL COMMENT '创建时间', + `delete_flag` bit(1) DEFAULT NULL COMMENT '是否删除', + `update_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '修改者', + `update_time` datetime(6) DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; \ No newline at end of file diff --git a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java index 92f8838d..fc5a5f0d 100644 --- a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java @@ -14,6 +14,7 @@ import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo; import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO; import cn.lili.modules.search.service.EsGoodsSearchService; +import cn.lili.modules.search.service.HotWordsService; import cn.lili.modules.statistics.aop.PageViewPoint; import cn.lili.modules.statistics.aop.enums.PageViewEnum; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -62,6 +63,9 @@ public class GoodsBuyerController { @Autowired private EsGoodsSearchService goodsSearchService; + @Autowired + private HotWordsService hotWordsService; + @ApiOperation(value = "通过id获取商品信息") @ApiImplicitParam(name = "goodsId", value = "商品ID", required = true, paramType = "path", dataType = "Long") @GetMapping(value = "/get/{goodsId}") @@ -117,7 +121,7 @@ public class GoodsBuyerController { @ApiOperation(value = "获取搜索热词") @GetMapping("/hot-words") public ResultMessage> getGoodsHotWords(Integer count) { - List hotWords = goodsSearchService.getHotWords(count); + List hotWords = hotWordsService.getHotWords(count); return ResultUtil.data(hotWords); } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java index a6e99c32..99f365f9 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java @@ -1,11 +1,24 @@ package cn.lili.timetask.handler.impl.hotwords; +import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; +import cn.lili.common.utils.StringUtils; +import cn.lili.modules.search.entity.dos.HotWordsHistory; +import cn.lili.modules.search.service.HotWordsHistoryService; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.HotWordsSetting; +import cn.lili.modules.system.entity.dto.HotWordsSettingItem; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryDayExecute; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.DefaultTypedTuple; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.*; /** * @author paulG @@ -18,13 +31,54 @@ public class HotWordsEveryDayTaskExecute implements EveryDayExecute { @Autowired private Cache cache; + @Autowired + private HotWordsHistoryService hotWordsHistoryService; + @Autowired + private SettingService settingService; + /** * 执行每日任务 */ @Override public void execute() { + //获取大于0分的热词 + Set tuples = cache.zRangeByScore(CachePrefix.HOT_WORD.getPrefix(), 1, Integer.MAX_VALUE); + //如果任务不为空 + if (!CollectionUtils.isEmpty(tuples)) { + + //因为是第二天统计第一天的数据,所以这里获取昨天凌晨的时间 + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 1); + + //批量保存热词 + List hotWordsHistories = new ArrayList<>(); + for (DefaultTypedTuple tuple : tuples) { + String keywords = (String) tuple.getValue(); + Double score = tuple.getScore(); + hotWordsHistories.add(new HotWordsHistory(calendar.getTime(), keywords, score.intValue())); + } + + hotWordsHistoryService.saveBatch(hotWordsHistories); + } //移除昨日的热搜词 cache.remove(CachePrefix.HOT_WORD.getPrefix()); + + //设置今日默认热词 + Setting setting = settingService.get(SettingEnum.HOT_WORDS.name()); + if (setting == null) { + return; + } + HotWordsSetting hotWordsSetting = JSONUtil.toBean(setting.getSettingValue(), HotWordsSetting.class); + List hotWordsSettingItems = hotWordsSetting.getHotWordsSettingItems(); + if (hotWordsSettingItems != null && !hotWordsSettingItems.isEmpty()) { + for (HotWordsSettingItem hotWordsSettingItem : hotWordsSettingItems) { + cache.zAdd(CachePrefix.HOT_WORD.getPrefix(), hotWordsSettingItem.getScore(), hotWordsSettingItem.getKeywords()); + } + } } } diff --git a/framework/src/main/java/cn/lili/common/utils/DateUtil.java b/framework/src/main/java/cn/lili/common/utils/DateUtil.java index 34a29c89..11f31484 100644 --- a/framework/src/main/java/cn/lili/common/utils/DateUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/DateUtil.java @@ -28,6 +28,14 @@ public class DateUtil { public static Long getDayOfStart() { return DateUtil.getDateline()/(60*24*60); } + /** + * 当天的开始时间 + * + * @return 今天开始时间 + */ + public static Long getDayOfStart(Date date) { + return date.getTime()/(60*24*60); + } /** * 当天的开始时间 diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java index 478dd111..e13fc1d5 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java @@ -149,13 +149,13 @@ public class StoreFlowServiceImpl extends ServiceImpl QueryWrapper queryWrapper() { + //组织查询时间 + QueryWrapper queryWrapper = new QueryWrapper<>(); + StatisticsQueryParam statisticsQueryParam = new StatisticsQueryParam(); + BeanUtils.copyProperties(this, statisticsQueryParam); + Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + + //获取当前时间 + Calendar calendar = Calendar.getInstance(); + + + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + + if (StringUtils.isNotEmpty(keywords)) { + queryWrapper.like("keywords", keywords); + } + queryWrapper.between("create_time", dates[0], dates[1]); + + startTIme = dates[0]; + endTime = dates[1]; + + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/search/entity/vo/HotWordsHistoryVO.java b/framework/src/main/java/cn/lili/modules/search/entity/vo/HotWordsHistoryVO.java new file mode 100644 index 00000000..cbbdc0f9 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/search/entity/vo/HotWordsHistoryVO.java @@ -0,0 +1,33 @@ +package cn.lili.modules.search.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +/** + * 在线会员 + * + * @author Chopper + * @since 2021-02-21 09:59 + */ +@Data +public class HotWordsHistoryVO { + + /** + * 时间 + */ + private Date createTime; + + /** + * 词 + */ + private String keywords; + + /** + * 分数 + */ + private Integer score; + +} diff --git a/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java b/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java new file mode 100644 index 00000000..31750ae8 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java @@ -0,0 +1,32 @@ +package cn.lili.modules.search.mapper; + +import cn.lili.modules.search.entity.dos.CustomWords; +import cn.lili.modules.search.entity.dos.HotWordsHistory; +import cn.lili.modules.search.entity.vo.HotWordsHistoryVO; +import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * 搜索热词历史记录数据处理层 + * + * @author paulG + * @since 2020/10/15 + **/ +public interface HotWordsHistoryMapper extends BaseMapper { + + /** + * 获取订单统计数据 + * + * @param queryWrapper 查询条件 + * @return 订单统计列表 + */ + @Select("SELECT score,keywords,DATE_FORMAT(create_time,'%Y-%m-%d') AS create_time FROM li_hot_words_history " +" ${ew.customSqlSegment}") + List statistics(@Param(Constants.WRAPPER) Wrapper queryWrapper); + +} diff --git a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java index 0e50be00..84ac2222 100644 --- a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java +++ b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java @@ -26,28 +26,6 @@ public interface EsGoodsSearchService { */ SearchPage searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo); - /** - * 获取热门关键词 - * - * @param count 热词数量 - * @return 热词集合 - */ - List getHotWords(Integer count); - - /** - * 设置热门关键词 - * - * @param hotWords 热词分数 - */ - void setHotWords(HotWordsDTO hotWords); - - /** - * 删除热门关键词 - * - * @param keywords 热词 - */ - void deleteHotWords(String keywords); - /** * 获取筛选器 * diff --git a/framework/src/main/java/cn/lili/modules/search/service/HotWordsHistoryService.java b/framework/src/main/java/cn/lili/modules/search/service/HotWordsHistoryService.java new file mode 100644 index 00000000..d357b643 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/search/service/HotWordsHistoryService.java @@ -0,0 +1,41 @@ +package cn.lili.modules.search.service; + +import cn.lili.modules.search.entity.dos.CustomWords; +import cn.lili.modules.search.entity.dos.HotWordsHistory; +import cn.lili.modules.search.entity.dto.HotWordsDTO; +import cn.lili.modules.search.entity.dto.HotWordsSearchParams; +import cn.lili.modules.search.entity.vo.HotWordsHistoryVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.apache.poi.ss.formula.functions.T; + +import java.util.Date; +import java.util.List; + +/** + * HotWordsService + * + * @author Chopper + * @version v1.0 + * 2022-04-14 09:35 + */ +public interface HotWordsHistoryService extends IService { + + /** + * 热词统计 + * + * @param hotWordsSearchParams + * @return + */ + List statistics(HotWordsSearchParams hotWordsSearchParams); + + /** + * 根据时间查询 + * + * @param queryTime 查询时间 + * @return + */ + List queryByDay(Date queryTime); +} diff --git a/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java b/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java new file mode 100644 index 00000000..d69c0f27 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java @@ -0,0 +1,38 @@ +package cn.lili.modules.search.service; + +import cn.lili.modules.search.entity.dto.HotWordsDTO; + +import java.util.List; + +/** + * HotWordsService + * + * @author Chopper + * @version v1.0 + * 2022-04-14 09:35 + */ +public interface HotWordsService { + + /** + * 获取热门关键词 + * + * @param count 热词数量 + * @return 热词集合 + */ + List getHotWords(Integer count); + + /** + * 设置热门关键词 + * + * @param hotWords 热词分数 + */ + void setHotWords(HotWordsDTO hotWords); + + /** + * 删除热门关键词 + * + * @param keywords 热词 + */ + void deleteHotWords(String keywords); + +} diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 63d53d13..ac19929b 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -100,38 +100,6 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { return SearchHitSupport.searchPageFor(search, searchQuery.getPageable()); } - @Override - public List getHotWords(Integer count) { - if (count == null) { - count = 0; - } - List hotWords = new ArrayList<>(); - // redis 排序中,下标从0开始,所以这里需要 -1 处理 - count = count - 1; - Set> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); - if (set == null || set.isEmpty()) { - return new ArrayList<>(); - } - for (ZSetOperations.TypedTuple defaultTypedTuple : set) { - hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString()); - } - return hotWords; - } - - @Override - public void setHotWords(HotWordsDTO hotWords) { - cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), hotWords.getKeywords(), hotWords.getPoint()); - } - - /** - * 删除热门关键词 - * - * @param keywords 热词 - */ - @Override - public void deleteHotWords(String keywords) { - cache.zRemove(CachePrefix.HOT_WORD.getPrefix(), keywords); - } @Override public EsGoodsRelatedInfo getSelector(EsGoodsSearchDTO goodsSearch, PageVO pageVo) { @@ -177,6 +145,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { return this.restTemplate.get(id, EsGoodsIndex.class); } + /** * 转换搜索结果为聚合商品展示信息 * diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java new file mode 100644 index 00000000..e55aee93 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java @@ -0,0 +1,73 @@ +package cn.lili.modules.search.serviceimpl; + +import cn.lili.modules.search.entity.dos.HotWordsHistory; +import cn.lili.modules.search.entity.dto.HotWordsSearchParams; +import cn.lili.modules.search.mapper.HotWordsHistoryMapper; +import cn.lili.modules.search.service.HotWordsHistoryService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 历史热词 + * + * @author paulG + * @since 2020/10/15 + **/ +@Service +public class HotWordsHistoryServiceImpl extends ServiceImpl implements HotWordsHistoryService { + + @Override + public List statistics(HotWordsSearchParams hotWordsSearchParams) { + QueryWrapper queryWrapper = hotWordsSearchParams.queryWrapper(); + + List list = baseMapper.statistics(queryWrapper); + return initData(list, hotWordsSearchParams); + } + + @Override + public List queryByDay(Date queryTime) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("create_time", queryTime); + return list(queryWrapper); + } + + /** + * 历史统计查询 + * + * @param source + * @return + */ + private List initData(List source, HotWordsSearchParams hotWordsSearchParams) { + + //结果集 + List onlineMemberVOS = new ArrayList<>(); + //时间初始化 + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-8:00")); + calendar.setTime(hotWordsSearchParams.getStartTIme()); + //判定是否超出时间 如果结束时间在循环时间之后,则跳出循环 + while (hotWordsSearchParams.getEndTime().after(calendar.getTime())) { + +// //筛选时间相等的查询结果 + Optional first = source.stream().filter(item -> item.getCreateTime().equals(calendar.getTime())).findFirst(); + if (first.isPresent()) { + onlineMemberVOS.add(first.get()); + } else { + onlineMemberVOS.add(new HotWordsHistory(hotWordsSearchParams.getKeywords(), 0, calendar.getTime())); + } +// for (HotWordsHistory hotWordsHistory : source) { +// System.out.println(hotWordsHistory.getCreateTime().getTime() + "-" + calendar.getTime().getTime()); +// if (hotWordsHistory.getCreateTime().equals(calendar.getTime())) { +// onlineMemberVOS.add(hotWordsHistory); +// } else { +// onlineMemberVOS.add(new HotWordsHistory(hotWordsSearchParams.getKeywords(), 0, calendar.getTime())); +// } +// } + + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1); + } + return onlineMemberVOS; + } +} diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java new file mode 100644 index 00000000..26b29ebe --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java @@ -0,0 +1,68 @@ +package cn.lili.modules.search.serviceimpl; + +import cn.lili.cache.Cache; +import cn.lili.cache.CachePrefix; +import cn.lili.modules.search.entity.dto.HotWordsDTO; +import cn.lili.modules.search.mapper.HotWordsHistoryMapper; +import cn.lili.modules.search.service.HotWordsService; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +/** + * HotWordsServiceImpl + * + * @author Chopper + * @version v1.0 + * 2022-04-14 09:35 + */ +@Service +public class HotWordsServiceImpl implements HotWordsService { + + /** + * 缓存 + */ + @Autowired + private Cache cache; + @Override + public List getHotWords(Integer count) { + if (count == null) { + count = 0; + } + List hotWords = new ArrayList<>(); + // redis 排序中,下标从0开始,所以这里需要 -1 处理 + count = count - 1; + Set> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); + if (set == null || set.isEmpty()) { + return new ArrayList<>(); + } + for (ZSetOperations.TypedTuple defaultTypedTuple : set) { + hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString()); + } + return hotWords; + } + + @Override + public void setHotWords(HotWordsDTO hotWords) { + cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), hotWords.getKeywords(), hotWords.getPoint()); + } + + /** + * 删除热门关键词 + * + * @param keywords 热词 + */ + @Override + public void deleteHotWords(String keywords) { + cache.zRemove(CachePrefix.HOT_WORD.getPrefix(), keywords); + } + +} diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index f5eecdb6..8ff1b3dc 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -70,7 +70,7 @@ public class BillServiceImpl extends ServiceImpl implements Bi //结算基础信息 bill.setStartTime(startTime); - bill.setEndTime(DateUtil.yesterday()); + bill.setEndTime(endTime); bill.setBillStatus(BillStatusEnum.OUT.name()); bill.setStoreId(storeId); bill.setStoreName(store.getStoreName()); diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSetting.java new file mode 100644 index 00000000..0b98d43b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSetting.java @@ -0,0 +1,28 @@ +package cn.lili.modules.system.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 搜索热词 + * + * @author Bulbasaur + * @since 2021/5/16 11:10 下午 + */ +@Data +public class HotWordsSetting implements Serializable { + + //热词1-5,默认分数1-5 + + @ApiModelProperty(value = "热词默认配置") + private List hotWordsSettingItems = new ArrayList<>(); + + + @ApiModelProperty("每日保存数量") + private Integer saveNum; + +} diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSettingItem.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSettingItem.java new file mode 100644 index 00000000..41fa826c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/HotWordsSettingItem.java @@ -0,0 +1,41 @@ +package cn.lili.modules.system.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 积分签到设置 + * + * @author Chopper + * @since 2021-02-26 11:48 + */ +@Data +public class HotWordsSettingItem implements Comparable, Serializable { + + + @ApiModelProperty(value = "热词") + private String keywords; + + + @ApiModelProperty(value = "默认分数") + private Integer score; + + + public Integer getScore() { + if (score == null || score < 0) { + return 0; + } + return score; + } + + public void setScore(Integer score) { + this.score = score; + } + + @Override + public int compareTo(HotWordsSettingItem pointSettingItem) { + return pointSettingItem.getScore(); + } +} diff --git a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java index ec6b1e23..55f55c84 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java @@ -44,5 +44,7 @@ public enum SettingEnum { //支付宝支付设置 ALIPAY_PAYMENT, //微信支付设置 - WECHAT_PAYMENT; + WECHAT_PAYMENT, + //热词设置 + HOT_WORDS } diff --git a/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java b/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java deleted file mode 100644 index ce4eb8d3..00000000 --- a/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.lili.controller.hotwords; - -import cn.lili.common.enums.ResultUtil; -import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.search.entity.dto.HotWordsDTO; -import cn.lili.modules.search.service.EsGoodsSearchService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -/** - * 管理端,app版本控制器 - * - * @author Chopper - * @since 2018-07-04 21:50:52 - */ -@RestController -@Api(tags = "管理端,系统设置扩展接口") -@RequestMapping("/manager/hotwords/hotwords") -public class HotWordsManagerController { - - @Autowired - private EsGoodsSearchService esGoodsSearchService; - - @ApiOperation(value = "获取热词") - @GetMapping - public ResultMessage getHotWords() { - return ResultUtil.data(esGoodsSearchService.getHotWords(100)); - } - - @ApiOperation(value = "设置热词") - @PostMapping - public ResultMessage paymentForm(@Validated HotWordsDTO hotWords) { - esGoodsSearchService.setHotWords(hotWords); - return ResultUtil.success(); - } - - @ApiOperation(value = "设置热词") - @DeleteMapping("/{words}") - public ResultMessage deleteWords(@PathVariable String words) { - esGoodsSearchService.deleteHotWords(words); - return ResultUtil.success(); - } - -} diff --git a/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java new file mode 100644 index 00000000..79240ea9 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java @@ -0,0 +1,79 @@ +package cn.lili.controller.other; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.search.entity.dto.HotWordsDTO; +import cn.lili.modules.search.entity.dto.HotWordsSearchParams; +import cn.lili.modules.search.service.HotWordsHistoryService; +import cn.lili.modules.search.service.HotWordsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 管理端,热词管理 + * + * @author Chopper + * @since 2018-07-04 21:50:52 + */ +@RestController +@Api(tags = "管理端,热词管理") +@RequestMapping("/manager/hotwords/hotwords") +public class HotWordsManagerController { + + @Autowired + private HotWordsService hotWordsService; + + + @Autowired + private HotWordsHistoryService hotWordsHistoryService; + + @ApiOperation(value = "获取热词") + @GetMapping + public ResultMessage getHotWords() { + return ResultUtil.data(hotWordsService.getHotWords(100)); + } + + @ApiOperation(value = "设置热词") + @PostMapping + public ResultMessage setHotWords(@Validated HotWordsDTO hotWords) { + hotWordsService.setHotWords(hotWords); + return ResultUtil.success(); + } + + @ApiOperation(value = "删除热词") + @DeleteMapping + public ResultMessage deleteWords(String words) { + hotWordsService.deleteHotWords(words); + return ResultUtil.success(); + } + + @ApiOperation(value = "历史热词") + @GetMapping("/history") + public ResultMessage deleteWords(HistorySearchParams historySearchParams) { + return ResultUtil.data(hotWordsHistoryService.queryByDay(historySearchParams.getDate())); + } + + @ApiOperation(value = "热词统计") + @GetMapping("/statistics") + public ResultMessage deleteWords(HotWordsSearchParams hotWordsSearchParams) { + return ResultUtil.data(hotWordsHistoryService.statistics(hotWordsSearchParams)); + } + + +} + +@Data +class HistorySearchParams { + @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "查询日期不能为空") + private Date date; + +} diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java index e0f9c48d..bf85cf9b 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java @@ -185,6 +185,10 @@ public class SettingManagerController { return setting == null ? ResultUtil.data(new ImSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), ImSetting.class)); + case HOT_WORDS: + return setting == null ? + ResultUtil.data(new HotWordsSetting()) : + ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), HotWordsSetting.class)); default: throw new ServiceException(ResultCode.SETTING_NOT_TO_SET); } From ce1954e7d354e5cbc2251d1bc6d7d98a28dd3583 Mon Sep 17 00:00:00 2001 From: Chopper Date: Tue, 19 Apr 2022 09:39:33 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=B6=88=E8=B4=B9=E8=80=85=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/impl/hotwords/HotWordsEveryDayTaskExecute.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java index 99f365f9..ecf63d58 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java @@ -59,7 +59,7 @@ public class HotWordsEveryDayTaskExecute implements EveryDayExecute { for (DefaultTypedTuple tuple : tuples) { String keywords = (String) tuple.getValue(); Double score = tuple.getScore(); - hotWordsHistories.add(new HotWordsHistory(calendar.getTime(), keywords, score.intValue())); + hotWordsHistories.add(new HotWordsHistory(keywords, score.intValue(), calendar.getTime())); } hotWordsHistoryService.saveBatch(hotWordsHistories); From 230a8810ef29d7227392ccaac2ac5f8eed928cf0 Mon Sep 17 00:00:00 2001 From: fengtianyangyang <5411465+feng_tianyangyang@user.noreply.gitee.com> Date: Fri, 22 Apr 2022 18:44:32 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E7=A7=AF=E5=88=86=E5=95=86=E5=93=81,?= =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E5=95=86=E5=93=81=E7=BB=93=E7=AE=97=E5=8D=95?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/application.yml | 42 ++++++++++++------- .../cart/render/impl/CommissionRender.java | 3 +- .../serviceimpl/PointsGoodsServiceImpl.java | 1 + 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/config/application.yml b/config/application.yml index 703b96ae..ec630a15 100644 --- a/config/application.yml +++ b/config/application.yml @@ -25,11 +25,20 @@ spring: admin: client: url: http://192.168.0.116:8000 + # mongodb + data: + mongodb: + uri: 192.168.0.116:27017 + database: lilishop + username: root + password: lilishop + authentication-database: admin + # replica-set-name: mongoreplset cache: type: redis # Redis redis: - host: 192.168.0.116 + host: 101.43.251.145 port: 6379 password: lilishop lettuce: @@ -60,7 +69,7 @@ spring: default-datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.0.116:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://101.43.251.145:3306/zhimai1?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: lilishop maxActive: 50 @@ -154,6 +163,8 @@ ignored: - /**/*.css - /**/*.png - /**/*.ico + - /buyer/distribution/distribution/** + - /store/distribution/goods/** # Swagger界面内容配置 swagger: @@ -182,6 +193,7 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug + # org.springframework.data.mongodb.core: debug file: # 指定路径 path: logs @@ -211,22 +223,22 @@ lili: #短信模版配置 sms: #登录 - LOGIN: SMS_205755300 + LOGIN: SMS_234157072 #注册 - REGISTER: SMS_205755298 + REGISTER: SMS_234157072 #找回密码 - FIND_USER: SMS_205755301 + FIND_USER: SMS_234157072 #设置密码 - UPDATE_PASSWORD: SMS_205755297 + UPDATE_PASSWORD: SMS_234157072 #支付密码 - WALLET_PASSWORD: SMS_205755301 + WALLET_PASSWORD: SMS_234157072 system: isDemoSite: false isTestModel: true - # 脱敏级别: - # 0:不做脱敏处理 - # 1:管理端用户手机号等信息脱敏 - # 2:商家端信息脱敏(为2时,表示管理端,商家端同时脱敏) + # 脱敏级别: + # 0:不做脱敏处理 + # 1:管理端用户手机号等信息脱敏 + # 2:商家端信息脱敏(为2时,表示管理端,商家端同时脱敏) sensitiveLevel: 1 statistics: @@ -268,7 +280,7 @@ lili: data: elasticsearch: cluster-name: elasticsearch - cluster-nodes: 192.168.0.116:9200 + cluster-nodes: 101.43.251.145:9200 index: number-of-replicas: 0 number-of-shards: 3 @@ -297,10 +309,8 @@ lili: notice-group: lili_notice_group notice-send-topic: lili_send_notice_topic notice-send-group: lili_send_notice_group - after-sale-topic: lili_after_sale_topic - after-sale-group: lili_after_sale_group rocketmq: - name-server: 192.168.0.116:9876 + name-server: 101.43.251.145:9876 isVIPChannel: false producer: group: lili_group @@ -309,7 +319,7 @@ rocketmq: xxl: job: admin: - addresses: http://192.168.0.116:9001/xxl-job-admin + addresses: http://127.0.0.1:8080/xxl-job-admin executor: appname: xxl-job-executor-lilishop address: diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java index f7e7bf55..8d35dbaf 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java @@ -4,6 +4,7 @@ import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; +import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; @@ -85,7 +86,7 @@ public class CommissionRender implements CartRenderStep { if (kanjiaPromotions.isPresent()) { JSONObject promotionsObj = JSONUtil.parseObj(kanjiaPromotions.get().getValue()); KanjiaActivityGoods kanjiaActivityGoods = JSONUtil.toBean(promotionsObj, KanjiaActivityGoods.class); - priceDetailDTO.setSettlementPrice(kanjiaActivityGoods.getSettlementPrice()); + priceDetailDTO.setSettlementPrice(CurrencyUtil.add(kanjiaActivityGoods.getSettlementPrice(),priceDetailDTO.getBillPrice())); } } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java index b25d7742..95f37f19 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java @@ -222,6 +222,7 @@ public class PointsGoodsServiceImpl extends AbstractPromotionsServiceImpl query = MapUtil.builder(new HashMap()).put("id", promotions.getSkuId()).build(); Map update = MapUtil.builder(new HashMap()).put("points", promotions.getPoints()).build(); //修改规格索引,发送mq消息 From 5168d8d08d68ac5c48cda415061f7d52713b07b2 Mon Sep 17 00:00:00 2001 From: fengtianyangyang <5411465+feng_tianyangyang@user.noreply.gitee.com> Date: Fri, 22 Apr 2022 18:45:43 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=BF=98=E5=8E=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/application.yml | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/config/application.yml b/config/application.yml index ec630a15..703b96ae 100644 --- a/config/application.yml +++ b/config/application.yml @@ -25,20 +25,11 @@ spring: admin: client: url: http://192.168.0.116:8000 - # mongodb - data: - mongodb: - uri: 192.168.0.116:27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset cache: type: redis # Redis redis: - host: 101.43.251.145 + host: 192.168.0.116 port: 6379 password: lilishop lettuce: @@ -69,7 +60,7 @@ spring: default-datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://101.43.251.145:3306/zhimai1?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://192.168.0.116:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: lilishop maxActive: 50 @@ -163,8 +154,6 @@ ignored: - /**/*.css - /**/*.png - /**/*.ico - - /buyer/distribution/distribution/** - - /store/distribution/goods/** # Swagger界面内容配置 swagger: @@ -193,7 +182,6 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: logs @@ -223,22 +211,22 @@ lili: #短信模版配置 sms: #登录 - LOGIN: SMS_234157072 + LOGIN: SMS_205755300 #注册 - REGISTER: SMS_234157072 + REGISTER: SMS_205755298 #找回密码 - FIND_USER: SMS_234157072 + FIND_USER: SMS_205755301 #设置密码 - UPDATE_PASSWORD: SMS_234157072 + UPDATE_PASSWORD: SMS_205755297 #支付密码 - WALLET_PASSWORD: SMS_234157072 + WALLET_PASSWORD: SMS_205755301 system: isDemoSite: false isTestModel: true - # 脱敏级别: - # 0:不做脱敏处理 - # 1:管理端用户手机号等信息脱敏 - # 2:商家端信息脱敏(为2时,表示管理端,商家端同时脱敏) + # 脱敏级别: + # 0:不做脱敏处理 + # 1:管理端用户手机号等信息脱敏 + # 2:商家端信息脱敏(为2时,表示管理端,商家端同时脱敏) sensitiveLevel: 1 statistics: @@ -280,7 +268,7 @@ lili: data: elasticsearch: cluster-name: elasticsearch - cluster-nodes: 101.43.251.145:9200 + cluster-nodes: 192.168.0.116:9200 index: number-of-replicas: 0 number-of-shards: 3 @@ -309,8 +297,10 @@ lili: notice-group: lili_notice_group notice-send-topic: lili_send_notice_topic notice-send-group: lili_send_notice_group + after-sale-topic: lili_after_sale_topic + after-sale-group: lili_after_sale_group rocketmq: - name-server: 101.43.251.145:9876 + name-server: 192.168.0.116:9876 isVIPChannel: false producer: group: lili_group @@ -319,7 +309,7 @@ rocketmq: xxl: job: admin: - addresses: http://127.0.0.1:8080/xxl-job-admin + addresses: http://192.168.0.116:9001/xxl-job-admin executor: appname: xxl-job-executor-lilishop address: From bb50510ecb970e09d778b59042ca301df198fb07 Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 25 Apr 2022 10:31:39 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E6=9D=83=E9=99=90=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lili/modules/permission/mapper/MenuMapper.java | 2 +- .../permission/serviceimpl/AdminUserServiceImpl.java | 9 --------- .../modules/permission/serviceimpl/MenuServiceImpl.java | 2 +- .../permission/serviceimpl/RoleMenuServiceImpl.java | 8 +------- .../controller/passport/AdminUserManagerController.java | 7 ++----- 5 files changed, 5 insertions(+), 23 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/permission/mapper/MenuMapper.java b/framework/src/main/java/cn/lili/modules/permission/mapper/MenuMapper.java index bd3c7235..049fb70e 100644 --- a/framework/src/main/java/cn/lili/modules/permission/mapper/MenuMapper.java +++ b/framework/src/main/java/cn/lili/modules/permission/mapper/MenuMapper.java @@ -24,7 +24,7 @@ public interface MenuMapper extends BaseMapper { @Select("SELECT menu.* FROM li_menu AS menu WHERE menu.id IN (" + "SELECT rm.menu_id FROM li_role_menu AS rm WHERE rm.role_id IN (" + "SELECT ur.role_id FROM li_user_role AS ur WHERE ur.user_id=#{userId}) OR rm.role_id IN (" + - "SELECT dr.role_id FROM li_department_role AS dr WHERE dr.id=(" + + "SELECT dr.role_id FROM li_department_role AS dr WHERE dr.department_id =(" + "SELECT department_id FROM li_admin_user AS au WHERE au.id = #{userId})))") List findByUserId(String userId); diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/AdminUserServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/AdminUserServiceImpl.java index a7411f44..53ec3049 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/AdminUserServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/AdminUserServiceImpl.java @@ -141,15 +141,6 @@ public class AdminUserServiceImpl extends ServiceImpl implements Me if (Boolean.TRUE.equals(authUser.getIsSuper())) { return this.tree(); } - List userMenus = this.baseMapper.findByUserId(authUser.getId()); + List userMenus = this.findUserList(authUser.getId()); return this.tree(userMenus); } diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java index 8966c190..86abf44f 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java @@ -47,13 +47,7 @@ public class RoleMenuServiceImpl extends ServiceImpl i @Override public List findAllMenu(String userId) { - String cacheKey = CachePrefix.USER_MENU.getPrefix() + userId; - List menuList = (List) cache.get(cacheKey); - if (menuList == null) { - menuList = menuMapper.getUserRoleMenu(userId); - cache.put(cacheKey, menuList); - } - return menuList; + return menuMapper.getUserRoleMenu(userId); } diff --git a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java index 1be65f27..d93e73e1 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java @@ -88,13 +88,10 @@ public class AdminUserManagerController { @GetMapping(value = "/info") @ApiOperation(value = "获取当前登录用户接口") - public ResultMessage getUserInfo() { + public ResultMessage getUserInfo() { AuthUser tokenUser = UserContext.getCurrentUser(); if (tokenUser != null) { - AdminUserVO adminUser = new AdminUserVO(adminUserService.findByUsername(tokenUser.getUsername())); - if (StringUtils.isNotEmpty(adminUser.getDepartmentId())) { - adminUser.setDepartmentTitle(departmentService.getById(adminUser.getDepartmentId()).getTitle()); - } + AdminUser adminUser = adminUserService.findByUsername(tokenUser.getUsername()); adminUser.setPassword(null); return ResultUtil.data(adminUser); } From 8dc86e048217e2f2e7f894bf3605204a6714d276 Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 25 Apr 2022 18:08:06 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E7=83=AD=E8=AF=8D=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/version4.2.4toMASTER.sql | 20 ++++--- .../java/cn/lili/common/utils/DateUtil.java | 4 +- .../search/entity/dos/HotWordsHistory.java | 23 +++++--- .../entity/dto/HotWordsSearchParams.java | 3 + .../search/mapper/HotWordsHistoryMapper.java | 2 +- .../search/service/HotWordsService.java | 9 +++ .../HotWordsHistoryServiceImpl.java | 56 ++++++------------- .../serviceimpl/HotWordsServiceImpl.java | 36 ++++++++++-- .../statistics/util/StatisticsDateUtil.java | 26 +++++++++ .../other/HotWordsManagerController.java | 10 +++- 10 files changed, 123 insertions(+), 66 deletions(-) diff --git a/DB/version4.2.4toMASTER.sql b/DB/version4.2.4toMASTER.sql index 7aad8be2..06e0fce2 100644 --- a/DB/version4.2.4toMASTER.sql +++ b/DB/version4.2.4toMASTER.sql @@ -4,13 +4,15 @@ ALTER TABLE li_member_sign DROP INDEX uk_member_day; ALTER TABLE li_member_sign add unique uk_member_day (member_id, day) COMMENT 'uk_member_day'; -/** 添加历史热词表 **/ + +-- ---------------------------- +-- Table structure for li_hot_words_history +-- ---------------------------- +DROP TABLE IF EXISTS `li_hot_words_history`; CREATE TABLE `li_hot_words_history` ( - `id` bigint NOT NULL COMMENT 'ID', - `create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '创建者', - `create_time` datetime(6) DEFAULT NULL COMMENT '创建时间', - `delete_flag` bit(1) DEFAULT NULL COMMENT '是否删除', - `update_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '修改者', - `update_time` datetime(6) DEFAULT NULL COMMENT '修改时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; \ No newline at end of file + `id` bigint NOT NULL COMMENT 'ID', + `create_time` datetime(6) DEFAULT NULL COMMENT '创建时间', + `keywords` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '热词', + `score` int DEFAULT NULL COMMENT '热词分数', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; diff --git a/framework/src/main/java/cn/lili/common/utils/DateUtil.java b/framework/src/main/java/cn/lili/common/utils/DateUtil.java index 11f31484..ec6c5ef4 100644 --- a/framework/src/main/java/cn/lili/common/utils/DateUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/DateUtil.java @@ -29,9 +29,9 @@ public class DateUtil { return DateUtil.getDateline()/(60*24*60); } /** - * 当天的开始时间 + * 指定日的开始时间 * - * @return 今天开始时间 + * @return 指定日时间 */ public static Long getDayOfStart(Date date) { return date.getTime()/(60*24*60); diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dos/HotWordsHistory.java b/framework/src/main/java/cn/lili/modules/search/entity/dos/HotWordsHistory.java index 2fee83e1..a012fc33 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dos/HotWordsHistory.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dos/HotWordsHistory.java @@ -1,21 +1,15 @@ package cn.lili.modules.search.entity.dos; -import cn.lili.mybatis.BaseEntity; import cn.lili.mybatis.BaseIdEntity; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.elasticsearch.annotations.DateFormat; -import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.FieldType; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; import java.util.Date; /** @@ -29,7 +23,7 @@ import java.util.Date; @AllArgsConstructor @NoArgsConstructor @TableName("li_hot_words_history") -public class HotWordsHistory extends BaseIdEntity { +public class HotWordsHistory extends BaseIdEntity implements Comparable, Serializable { /** * 词 @@ -41,7 +35,18 @@ public class HotWordsHistory extends BaseIdEntity { */ private Integer score; + @ApiModelProperty(value = "创建时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd") private Date createTime; + + public HotWordsHistory(String keywords, Integer score) { + this.keywords = keywords; + this.score = score; + } + + @Override + public int compareTo(HotWordsHistory hotWordsHistory) { + return hotWordsHistory.getScore() - this.score; + } } diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dto/HotWordsSearchParams.java b/framework/src/main/java/cn/lili/modules/search/entity/dto/HotWordsSearchParams.java index 930b527b..61cd07c7 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dto/HotWordsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dto/HotWordsSearchParams.java @@ -52,6 +52,9 @@ public class HotWordsSearchParams extends PageVO { private Date endTime; + //搜索热词数量 + private Integer top = 50; + public QueryWrapper queryWrapper() { //组织查询时间 QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java b/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java index 31750ae8..97a1d90c 100644 --- a/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java +++ b/framework/src/main/java/cn/lili/modules/search/mapper/HotWordsHistoryMapper.java @@ -26,7 +26,7 @@ public interface HotWordsHistoryMapper extends BaseMapper { * @param queryWrapper 查询条件 * @return 订单统计列表 */ - @Select("SELECT score,keywords,DATE_FORMAT(create_time,'%Y-%m-%d') AS create_time FROM li_hot_words_history " +" ${ew.customSqlSegment}") + @Select("SELECT sum(score) as score,keywords FROM li_hot_words_history " +" ${ew.customSqlSegment}") List statistics(@Param(Constants.WRAPPER) Wrapper queryWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java b/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java index d69c0f27..a13c9e7e 100644 --- a/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java +++ b/framework/src/main/java/cn/lili/modules/search/service/HotWordsService.java @@ -1,5 +1,6 @@ package cn.lili.modules.search.service; +import cn.lili.modules.search.entity.dos.HotWordsHistory; import cn.lili.modules.search.entity.dto.HotWordsDTO; import java.util.List; @@ -21,6 +22,14 @@ public interface HotWordsService { */ List getHotWords(Integer count); + /** + * 获取热门关键词 + * + * @param count 热词数量 + * @return 热词集合 + */ + List getHotWordsVO(Integer count); + /** * 设置热门关键词 * diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java index e55aee93..c3091ef7 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsHistoryServiceImpl.java @@ -1,11 +1,16 @@ package cn.lili.modules.search.serviceimpl; +import cn.lili.common.utils.DateUtil; import cn.lili.modules.search.entity.dos.HotWordsHistory; import cn.lili.modules.search.entity.dto.HotWordsSearchParams; import cn.lili.modules.search.mapper.HotWordsHistoryMapper; import cn.lili.modules.search.service.HotWordsHistoryService; +import cn.lili.modules.search.service.HotWordsService; +import cn.lili.modules.statistics.entity.enums.SearchTypeEnum; +import cn.lili.modules.statistics.util.StatisticsDateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @@ -19,55 +24,30 @@ import java.util.*; @Service public class HotWordsHistoryServiceImpl extends ServiceImpl implements HotWordsHistoryService { + @Autowired + private HotWordsService hotWordsService; + @Override public List statistics(HotWordsSearchParams hotWordsSearchParams) { + if (hotWordsSearchParams.getSearchType().equals(SearchTypeEnum.TODAY.name())) { + return hotWordsService.getHotWordsVO(hotWordsSearchParams.getTop()); + } QueryWrapper queryWrapper = hotWordsSearchParams.queryWrapper(); + queryWrapper.groupBy("keywords"); + queryWrapper.orderByDesc("score"); + queryWrapper.last("limit " + hotWordsSearchParams.getTop()); List list = baseMapper.statistics(queryWrapper); - return initData(list, hotWordsSearchParams); + return list; } @Override public List queryByDay(Date queryTime) { QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("create_time", queryTime); + + Date[] dates = StatisticsDateUtil.getDateArray(queryTime); + queryWrapper.between("create_time", dates[0], dates[1]); return list(queryWrapper); } - /** - * 历史统计查询 - * - * @param source - * @return - */ - private List initData(List source, HotWordsSearchParams hotWordsSearchParams) { - - //结果集 - List onlineMemberVOS = new ArrayList<>(); - //时间初始化 - Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-8:00")); - calendar.setTime(hotWordsSearchParams.getStartTIme()); - //判定是否超出时间 如果结束时间在循环时间之后,则跳出循环 - while (hotWordsSearchParams.getEndTime().after(calendar.getTime())) { - -// //筛选时间相等的查询结果 - Optional first = source.stream().filter(item -> item.getCreateTime().equals(calendar.getTime())).findFirst(); - if (first.isPresent()) { - onlineMemberVOS.add(first.get()); - } else { - onlineMemberVOS.add(new HotWordsHistory(hotWordsSearchParams.getKeywords(), 0, calendar.getTime())); - } -// for (HotWordsHistory hotWordsHistory : source) { -// System.out.println(hotWordsHistory.getCreateTime().getTime() + "-" + calendar.getTime().getTime()); -// if (hotWordsHistory.getCreateTime().equals(calendar.getTime())) { -// onlineMemberVOS.add(hotWordsHistory); -// } else { -// onlineMemberVOS.add(new HotWordsHistory(hotWordsSearchParams.getKeywords(), 0, calendar.getTime())); -// } -// } - - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1); - } - return onlineMemberVOS; - } } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java index 26b29ebe..d036f96e 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/HotWordsServiceImpl.java @@ -2,20 +2,19 @@ package cn.lili.modules.search.serviceimpl; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; +import cn.lili.modules.search.entity.dos.HotWordsHistory; import cn.lili.modules.search.entity.dto.HotWordsDTO; import cn.lili.modules.search.mapper.HotWordsHistoryMapper; import cn.lili.modules.search.service.HotWordsService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; /** * HotWordsServiceImpl @@ -24,6 +23,7 @@ import java.util.Set; * @version v1.0 * 2022-04-14 09:35 */ +@Slf4j @Service public class HotWordsServiceImpl implements HotWordsService { @@ -32,6 +32,7 @@ public class HotWordsServiceImpl implements HotWordsService { */ @Autowired private Cache cache; + @Override public List getHotWords(Integer count) { if (count == null) { @@ -50,6 +51,33 @@ public class HotWordsServiceImpl implements HotWordsService { return hotWords; } + @Override + public List getHotWordsVO(Integer count) { + if (count == null) { + count = 50; + } + List hotWords = new ArrayList<>(); + // redis 排序中,下标从0开始,所以这里需要 -1 处理 + count = count - 1; + Set> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); + if (set == null || set.isEmpty()) { + return new ArrayList<>(); + } + for (ZSetOperations.TypedTuple defaultTypedTuple : set) { + try { + hotWords.add(new HotWordsHistory(defaultTypedTuple.getValue().toString(), + defaultTypedTuple.getScore().intValue())); + } catch (Exception e) { + log.error("读取热词错误", e); + } + + } + + + Collections.sort(hotWords); + return hotWords; + } + @Override public void setHotWords(HotWordsDTO hotWords) { cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), hotWords.getKeywords(), hotWords.getPoint()); diff --git a/framework/src/main/java/cn/lili/modules/statistics/util/StatisticsDateUtil.java b/framework/src/main/java/cn/lili/modules/statistics/util/StatisticsDateUtil.java index 8161765d..d97b1b82 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/util/StatisticsDateUtil.java +++ b/framework/src/main/java/cn/lili/modules/statistics/util/StatisticsDateUtil.java @@ -121,4 +121,30 @@ public class StatisticsDateUtil { } } + + /** + * 根据一个日期,获取这一天的开始时间和结束时间 + * + * @param queryDate + * @return + */ + public static Date[] getDateArray(Date queryDate) { + + Date[] dateArray = new Date[2]; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(queryDate); + //时间归到今天凌晨0点 + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + dateArray[0] = calendar.getTime(); + + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1); + calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 1); + + dateArray[1] = calendar.getTime(); + return dateArray; + } + } diff --git a/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java index 79240ea9..a8b5f01a 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/HotWordsManagerController.java @@ -2,6 +2,7 @@ package cn.lili.controller.other; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.search.entity.dos.HotWordsHistory; import cn.lili.modules.search.entity.dto.HotWordsDTO; import cn.lili.modules.search.entity.dto.HotWordsSearchParams; import cn.lili.modules.search.service.HotWordsHistoryService; @@ -15,7 +16,10 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; +import java.util.List; /** * 管理端,热词管理 @@ -58,7 +62,9 @@ public class HotWordsManagerController { @ApiOperation(value = "历史热词") @GetMapping("/history") public ResultMessage deleteWords(HistorySearchParams historySearchParams) { - return ResultUtil.data(hotWordsHistoryService.queryByDay(historySearchParams.getDate())); + List hotWordsHistoryList = hotWordsHistoryService.queryByDay(historySearchParams.getDate()); + Collections.sort(hotWordsHistoryList); + return ResultUtil.data(hotWordsHistoryList); } @ApiOperation(value = "热词统计") @@ -66,8 +72,6 @@ public class HotWordsManagerController { public ResultMessage deleteWords(HotWordsSearchParams hotWordsSearchParams) { return ResultUtil.data(hotWordsHistoryService.statistics(hotWordsSearchParams)); } - - } @Data From cbd201c43b175d95a85360aec4797cfe13d68593 Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 25 Apr 2022 18:58:01 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search/serviceimpl/EsGoodsSearchServiceImpl.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index ac19929b..179c8f6c 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -36,10 +36,9 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.SearchHitSupport; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.SearchPage; @@ -73,8 +72,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { * ES */ @Autowired - @Qualifier("elasticsearchRestTemplate") - private ElasticsearchRestTemplate restTemplate; + private ElasticsearchOperations restTemplate; @Autowired private EsGoodsIndexService esGoodsIndexService; @@ -145,7 +143,6 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { return this.restTemplate.get(id, EsGoodsIndex.class); } - /** * 转换搜索结果为聚合商品展示信息 * From 0e0a8b039db6f5187d0bb366e264bb65773ac8a0 Mon Sep 17 00:00:00 2001 From: Chopper Date: Tue, 26 Apr 2022 09:33:54 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=9D=83=E9=99=90=E4=B8=8D=E5=86=8D=E6=94=BE=E5=9C=A8?= =?UTF-8?q?=E6=B0=B8=E4=B9=85=E7=BC=93=E5=AD=98=EF=BC=8C=E8=80=8C=E6=98=AF?= =?UTF-8?q?=E6=94=BE=E5=9C=A8=E4=B8=B4=E6=97=B6=E7=BC=93=E5=AD=98=EF=BC=88?= =?UTF-8?q?5=E5=88=86=E9=92=9F=EF=BC=89=EF=BC=8C=E7=94=B1=E4=BA=8E?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E9=A2=91=E7=8E=87=E8=BE=83=E4=BD=8E=EF=BC=8C?= =?UTF-8?q?=E5=9C=A8=E5=8A=A0=E4=B8=8A=E6=B6=89=E5=8F=8A=E7=9A=84=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=A4=AA=E5=A4=8D=E6=9D=82=EF=BC=8C=E6=89=80=E4=BB=A5?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=BA=86=E4=B9=8B=E5=89=8D=E5=AF=B9=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=9A=84=E6=B0=B8=E4=B9=85=E7=BC=93=E5=AD=98=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E6=A8=A1=E7=B3=8A=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=BC=93=E5=AD=98=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/lili/cache/CachePrefix.java | 7 +++---- .../permission/serviceimpl/MenuServiceImpl.java | 9 +++++---- .../serviceimpl/RoleMenuServiceImpl.java | 9 +++------ .../modules/system/token/ManagerTokenGenerate.java | 14 -------------- 4 files changed, 11 insertions(+), 28 deletions(-) diff --git a/framework/src/main/java/cn/lili/cache/CachePrefix.java b/framework/src/main/java/cn/lili/cache/CachePrefix.java index 27740abe..43423d64 100644 --- a/framework/src/main/java/cn/lili/cache/CachePrefix.java +++ b/framework/src/main/java/cn/lili/cache/CachePrefix.java @@ -471,10 +471,9 @@ public enum CachePrefix { STORE_CATEGORY, /** * 用户菜单 - */ - MENU_USER_ID, - /** - * 用户菜单 + *

+ * 这个缓存并非永久缓存,而是300秒缓存,也就是说修改用户关联的部门,关联的角色, + * 部门关联的角色,角色关联的菜单等等,最多需要5分钟才能生效 */ USER_MENU, /** diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java index 464aba61..9557ceae 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java @@ -7,6 +7,7 @@ import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; import cn.lili.common.vo.SearchVO; import cn.lili.modules.permission.entity.dos.Menu; import cn.lili.modules.permission.entity.dos.RoleMenu; @@ -66,11 +67,12 @@ public class MenuServiceImpl extends ServiceImpl implements Me @Override public List

findUserList(String userId) { - String cacheKey = CachePrefix.MENU_USER_ID.getPrefix() + userId; + String cacheKey = CachePrefix.USER_MENU.getPrefix(UserEnums.MANAGER) + userId; List menuList = cache.get(cacheKey); if (menuList == null) { menuList = this.baseMapper.findByUserId(userId); - cache.put(cacheKey, menuList); + //每5分钟重新确认用户权限 + cache.put(cacheKey, menuList, 300L); } return menuList; } @@ -84,8 +86,7 @@ public class MenuServiceImpl extends ServiceImpl implements Me @Override public boolean saveOrUpdateMenu(Menu menu) { if (CharSequenceUtil.isNotEmpty(menu.getId())) { - cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix()); - cache.vagueDel(CachePrefix.USER_MENU.getPrefix()); + } return this.saveOrUpdate(menu); } diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java index 86abf44f..0d2a22dc 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java @@ -59,8 +59,7 @@ public class RoleMenuServiceImpl extends ServiceImpl i this.deleteRoleMenu(roleId); //重新保存角色菜单关系 this.saveBatch(roleMenus); - cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix()); - cache.vagueDel(CachePrefix.USER_MENU.getPrefix()); + } catch (Exception e) { log.error("修改用户权限错误", e); } @@ -72,8 +71,7 @@ public class RoleMenuServiceImpl extends ServiceImpl i QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("role_id", roleId); this.remove(queryWrapper); - cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix()); - cache.vagueDel(CachePrefix.USER_MENU.getPrefix()); + } @Override @@ -82,7 +80,6 @@ public class RoleMenuServiceImpl extends ServiceImpl i QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("role_id", roleId); this.remove(queryWrapper); - cache.vagueDel(CachePrefix.MENU_USER_ID.getPrefix()); - cache.vagueDel(CachePrefix.USER_MENU.getPrefix()); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java b/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java index ec13d030..10a38764 100644 --- a/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java +++ b/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java @@ -1,8 +1,6 @@ package cn.lili.modules.system.token; import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.cache.Cache; -import cn.lili.cache.CachePrefix; import cn.lili.common.security.AuthUser; import cn.lili.common.security.enums.PermissionEnum; import cn.lili.common.security.enums.UserEnums; @@ -11,7 +9,6 @@ import cn.lili.common.security.token.TokenUtil; import cn.lili.common.security.token.base.AbstractTokenGenerate; import cn.lili.modules.permission.entity.dos.AdminUser; import cn.lili.modules.permission.entity.vo.UserMenuVO; -import cn.lili.modules.permission.service.RoleMenuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -32,21 +29,10 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate { @Autowired private TokenUtil tokenUtil; - @Autowired - private RoleMenuService roleMenuService; - @Autowired - private Cache cache; - @Override public Token createToken(AdminUser adminUser, Boolean longTerm) { AuthUser authUser = new AuthUser(adminUser.getUsername(), adminUser.getId(), adminUser.getAvatar(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper()); - - - List userMenuVOList = roleMenuService.findAllMenu(authUser.getId()); - //缓存权限列表 - cache.put(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.MANAGER) + authUser.getId(), this.permissionList(userMenuVOList)); - return tokenUtil.createToken(adminUser.getUsername(), authUser, longTerm, UserEnums.MANAGER); }