Merge branch 'backup'
# Conflicts: # manager-api/src/main/java/cn/lili/controller/member/MemberManagerController.java # manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java # manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java # manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java # manager-api/src/main/java/cn/lili/controller/setting/RegionManagerController.java # manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java
This commit is contained in:
commit
fe8523ca3f
@ -4,8 +4,6 @@ import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.statistics.aop.PageViewPoint;
|
||||
import cn.lili.modules.statistics.aop.enums.PageViewEnum;
|
||||
import cn.lili.modules.store.entity.dto.StoreBankDTO;
|
||||
import cn.lili.modules.store.entity.dto.StoreCompanyDTO;
|
||||
import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO;
|
||||
@ -61,7 +59,6 @@ public class StoreBuyerController {
|
||||
@ApiOperation(value = "通过id获取店铺信息")
|
||||
@ApiImplicitParam(name = "id", value = "店铺ID", required = true, paramType = "path")
|
||||
@GetMapping(value = "/get/detail/{id}")
|
||||
@PageViewPoint(type = PageViewEnum.STORE, id = "#id")
|
||||
public ResultMessage<StoreBasicInfoVO> detail(@NotNull @PathVariable String id) {
|
||||
return ResultUtil.data(storeDetailService.getStoreBasicInfoDTO(id));
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package cn.lili.timetask.handler.impl.hotwords;
|
||||
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.cache.CachePrefix;
|
||||
import cn.lili.timetask.handler.EveryDayExecute;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author paulG
|
||||
* @since 2021/3/11
|
||||
**/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class HotWordsEveryDayTaskExecute implements EveryDayExecute {
|
||||
|
||||
@Autowired
|
||||
private Cache cache;
|
||||
|
||||
/**
|
||||
* 执行每日任务
|
||||
*/
|
||||
@Override
|
||||
public void execute() {
|
||||
//移除昨日的热搜词
|
||||
cache.remove(CachePrefix.HOT_WORD.getPrefix());
|
||||
}
|
||||
|
||||
}
|
11
framework/src/main/java/cn/lili/cache/Cache.java
vendored
11
framework/src/main/java/cn/lili/cache/Cache.java
vendored
@ -143,7 +143,6 @@ public interface Cache<T> {
|
||||
*
|
||||
* @param key 缓存key
|
||||
* @return 缓存中的数据
|
||||
*
|
||||
*/
|
||||
boolean hasKey(Object key);
|
||||
|
||||
@ -223,6 +222,16 @@ public interface Cache<T> {
|
||||
*/
|
||||
void incrementScore(String sortedSetName, String keyword);
|
||||
|
||||
/**
|
||||
* 使用Sorted Set记录keyword
|
||||
* zincrby命令,对于一个Sorted Set,存在的就把分数加x(x可自行设定),不存在就创建一个分数为1的成员
|
||||
*
|
||||
* @param sortedSetName sortedSetName的Sorted Set不用预先创建,不存在会自动创建,存在则向里添加数据
|
||||
* @param keyword 关键词
|
||||
* @param score 分数
|
||||
*/
|
||||
void incrementScore(String sortedSetName, String keyword, Integer score);
|
||||
|
||||
/**
|
||||
* zrevrange命令, 查询Sorted Set中指定范围的值
|
||||
* 返回的有序集合中,score大的在前面
|
||||
|
@ -223,9 +223,13 @@ public class RedisCache implements Cache {
|
||||
*/
|
||||
@Override
|
||||
public void incrementScore(String sortedSetName, String keyword) {
|
||||
//x 的含义请见本方法的注释
|
||||
double x = 1.0;
|
||||
this.redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, x);
|
||||
//指向key名为KEY的zset元素
|
||||
redisTemplate.opsForZSet().incrementScore(sortedSetName,keyword, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementScore(String sortedSetName, String keyword, Integer score) {
|
||||
redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, score);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,24 +0,0 @@
|
||||
package cn.lili.modules.search.entity.enums;
|
||||
|
||||
/**
|
||||
* @author paulG
|
||||
* @since 2021/1/20
|
||||
**/
|
||||
public enum HotWordsRedisKeyEnum {
|
||||
|
||||
/**
|
||||
* "搜索热词"
|
||||
*/
|
||||
SEARCH_HOT_WORD("搜索热词");
|
||||
|
||||
|
||||
private final String description;
|
||||
|
||||
HotWordsRedisKeyEnum(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String description() {
|
||||
return description;
|
||||
}
|
||||
}
|
@ -34,6 +34,14 @@ public interface EsGoodsSearchService {
|
||||
*/
|
||||
List<String> getHotWords(Integer start, Integer end);
|
||||
|
||||
/**
|
||||
* 设置热门关键词
|
||||
*
|
||||
* @param words 关键词
|
||||
* @param point 赋予分数
|
||||
*/
|
||||
void setHotWords(String words, Integer point);
|
||||
|
||||
/**
|
||||
* 获取筛选器
|
||||
*
|
||||
|
@ -3,6 +3,7 @@ package cn.lili.modules.search.serviceimpl;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.cache.CachePrefix;
|
||||
import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.goods.entity.dos.Brand;
|
||||
@ -16,7 +17,6 @@ import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo;
|
||||
import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
|
||||
import cn.lili.modules.search.entity.dto.ParamOptions;
|
||||
import cn.lili.modules.search.entity.dto.SelectorOptions;
|
||||
import cn.lili.modules.search.entity.enums.HotWordsRedisKeyEnum;
|
||||
import cn.lili.modules.search.repository.EsGoodsIndexRepository;
|
||||
import cn.lili.modules.search.service.EsGoodsSearchService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -51,6 +51,7 @@ import java.util.*;
|
||||
|
||||
/**
|
||||
* ES商品搜索业务层实现
|
||||
*
|
||||
* @author paulG
|
||||
* @since 2020/10/16
|
||||
**/
|
||||
@ -90,7 +91,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
||||
@Override
|
||||
public Page<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) {
|
||||
if (CharSequenceUtil.isNotEmpty(searchDTO.getKeyword())) {
|
||||
cache.incrementScore(HotWordsRedisKeyEnum.SEARCH_HOT_WORD.name(), searchDTO.getKeyword());
|
||||
cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
|
||||
}
|
||||
NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo, true);
|
||||
NativeSearchQuery searchQuery = searchQueryBuilder.build();
|
||||
@ -102,13 +103,18 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
||||
@Override
|
||||
public List<String> getHotWords(Integer start, Integer end) {
|
||||
List<String> hotWords = new ArrayList<>();
|
||||
Set<DefaultTypedTuple> set = cache.reverseRangeWithScores(HotWordsRedisKeyEnum.SEARCH_HOT_WORD.name(), start, end);
|
||||
Set<DefaultTypedTuple> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), start, end);
|
||||
for (DefaultTypedTuple defaultTypedTuple : set) {
|
||||
hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString());
|
||||
}
|
||||
return hotWords;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHotWords(String words, Integer point) {
|
||||
cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), words, point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EsGoodsRelatedInfo getSelector(EsGoodsSearchDTO goodsSearch, PageVO pageVo) {
|
||||
NativeSearchQueryBuilder builder = createSearchQueryBuilder(goodsSearch, null, true);
|
||||
@ -318,6 +324,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
||||
|
||||
/**
|
||||
* 查询属性处理
|
||||
*
|
||||
* @param filterBuilder
|
||||
* @param queryBuilder
|
||||
* @param searchDTO
|
||||
@ -391,7 +398,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
||||
//价格区间判定
|
||||
if (CharSequenceUtil.isNotEmpty(searchDTO.getPrice())) {
|
||||
String[] prices = searchDTO.getPrice().split("_");
|
||||
if(prices.length==0){
|
||||
if (prices.length == 0) {
|
||||
return;
|
||||
}
|
||||
double min = Convert.toDouble(prices[0], 0.0);
|
||||
@ -406,6 +413,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
||||
|
||||
/**
|
||||
* 关键字查询处理
|
||||
*
|
||||
* @param filterBuilder
|
||||
* @param queryBuilder
|
||||
* @param keyword
|
||||
|
@ -3,8 +3,8 @@ package cn.lili.modules.system.token;
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.cache.CachePrefix;
|
||||
import cn.lili.common.security.AuthUser;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.security.enums.PermissionEnum;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.security.token.Token;
|
||||
import cn.lili.common.security.token.TokenUtil;
|
||||
import cn.lili.common.security.token.base.AbstractTokenGenerate;
|
||||
@ -116,11 +116,19 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate {
|
||||
*/
|
||||
void initPermission(List<String> superPermissions, List<String> queryPermissions) {
|
||||
//用户信息维护
|
||||
superPermissions.add("/manager/user/info");
|
||||
superPermissions.add("/manager/user/edit");
|
||||
superPermissions.add("/manager/user/info*");
|
||||
superPermissions.add("/manager/user/edit*");
|
||||
superPermissions.add("/manager/user/editPassword*");
|
||||
//统计查看
|
||||
|
||||
//统计查看权限
|
||||
queryPermissions.add("/manager/statistics*");
|
||||
//菜单查看权限
|
||||
queryPermissions.add("/manager/menu*");
|
||||
//商品分类查看权限
|
||||
queryPermissions.add("/manager/goods/category*");
|
||||
//查看地区接口
|
||||
queryPermissions.add("/manager/region*");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package cn.lili.controller.member;
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.system.aspect.annotation.DemoSite;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
|
||||
import cn.lili.modules.member.entity.dto.MemberAddDTO;
|
||||
|
@ -3,6 +3,7 @@ package cn.lili.controller.other;
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.system.aspect.annotation.DemoSite;
|
||||
import cn.lili.modules.page.entity.dos.PageData;
|
||||
import cn.lili.modules.page.entity.dto.PageDataDTO;
|
||||
import cn.lili.modules.page.entity.vos.PageDataListVO;
|
||||
|
@ -10,6 +10,7 @@ import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.common.vo.SearchVO;
|
||||
import cn.lili.modules.system.aspect.annotation.DemoSite;
|
||||
import cn.lili.modules.permission.entity.dos.AdminUser;
|
||||
import cn.lili.modules.permission.entity.dto.AdminUserDTO;
|
||||
import cn.lili.modules.permission.entity.vo.AdminUserVO;
|
||||
|
@ -2,6 +2,7 @@ package cn.lili.controller.permission;
|
||||
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.system.aspect.annotation.DemoSite;
|
||||
import cn.lili.modules.permission.entity.dos.Menu;
|
||||
import cn.lili.modules.permission.entity.dto.MenuSearchParams;
|
||||
import cn.lili.modules.permission.entity.vo.MenuVO;
|
||||
|
@ -0,0 +1,47 @@
|
||||
package cn.lili.controller.setting;
|
||||
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.search.service.EsGoodsSearchService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 管理端,app版本控制器
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2018-07-04 21:50:52
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "管理端,系统设置扩展接口")
|
||||
@RequestMapping("/manager/hotwords")
|
||||
public class HotWordsManagerController {
|
||||
|
||||
@Autowired
|
||||
private EsGoodsSearchService esGoodsSearchService;
|
||||
|
||||
@ApiOperation(value = "获取热词")
|
||||
@GetMapping
|
||||
public ResultMessage getHotWords() {
|
||||
return ResultUtil.data(esGoodsSearchService.getHotWords(0, 99));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "设置热词")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "keywords", value = "关键字"),
|
||||
@ApiImplicitParam(name = "point", value = "权重值")
|
||||
})
|
||||
@PostMapping
|
||||
public ResultMessage paymentForm(String keywords, Integer point) {
|
||||
esGoodsSearchService.setHotWords(keywords, point);
|
||||
return ResultUtil.success();
|
||||
}
|
||||
|
||||
}
|
@ -39,7 +39,6 @@ public class InstantDeliveryManagerController {
|
||||
IPage<InstantDelivery> data = instantDeliveryService.page(PageUtil.initPage(page));
|
||||
//组织数据结构
|
||||
IPage<InstantDeliveryVO> newData = instantDeliveryService.getInstantDeliveryPage(data, page);
|
||||
System.out.println();
|
||||
//返回数据
|
||||
return ResultUtil.data(newData);
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ package cn.lili.controller.setting;
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.system.aspect.annotation.DemoSite;
|
||||
import cn.lili.modules.system.entity.dos.Region;
|
||||
import cn.lili.modules.system.service.RegionService;
|
||||
import cn.lili.modules.system.entity.dos.Region;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
@ -3,6 +3,7 @@ package cn.lili.controller.store;
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.system.aspect.annotation.DemoSite;
|
||||
import cn.lili.modules.goods.entity.vos.CategoryVO;
|
||||
import cn.lili.modules.store.entity.dos.Store;
|
||||
import cn.lili.modules.store.entity.dto.AdminStoreApplyDTO;
|
||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
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.SecurityEnum;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.security.token.SecretKeyUtil;
|
||||
@ -20,6 +21,8 @@ import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
|
||||
import org.springframework.util.PatternMatchUtils;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import javax.naming.NoPermissionException;
|
||||
import javax.servlet.FilterChain;
|
||||
@ -71,27 +74,28 @@ public class ManagerAuthenticationFilter extends BasicAuthenticationFilter {
|
||||
*/
|
||||
private void customAuthentication(HttpServletRequest request, HttpServletResponse response, UsernamePasswordAuthenticationToken authentication) throws NoPermissionException {
|
||||
AuthUser authUser = (AuthUser) authentication.getDetails();
|
||||
String requestUrl = request.getRequestURI();
|
||||
Map<String, List<String>> permission = (Map<String, List<String>>) cache.get(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.MANAGER) + authUser.getId());
|
||||
if (authUser.getIsSuper()) {
|
||||
return;
|
||||
} else {
|
||||
//用户是否拥有权限判定œ
|
||||
//如果不是超级管理员, 不做鉴权
|
||||
if (!authUser.getIsSuper()) {
|
||||
//获取数据权限
|
||||
// if (request.getMethod().equals(RequestMethod.GET.name())) {
|
||||
// if (!PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.SUPER).toArray(new String[0]), request.getRequestURI()) ||
|
||||
// PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.QUERY).toArray(new String[0]), request.getRequestURI())) {
|
||||
//
|
||||
// ResponseUtil.output(response, ResponseUtil.resultMap(false, 401, "抱歉,您没有访问权限"));
|
||||
// throw new NoPermissionException("权限不足");
|
||||
// }
|
||||
// } else {
|
||||
// if (!PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.SUPER).toArray(new String[0]), request.getRequestURI())) {
|
||||
//
|
||||
// ResponseUtil.output(response, ResponseUtil.resultMap(false, 401, "抱歉,您没有访问权限"));
|
||||
// throw new NoPermissionException("权限不足");
|
||||
// }
|
||||
// }
|
||||
return;
|
||||
if (request.getMethod().equals(RequestMethod.GET.name())) {
|
||||
//如果用户的超级权限和查阅权限都不包含当前请求的api
|
||||
if (!PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.SUPER.name()).toArray(new String[0]), requestUrl) &&
|
||||
!PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.QUERY.name()).toArray(new String[0]), requestUrl)) {
|
||||
|
||||
ResponseUtil.output(response, ResponseUtil.resultMap(false, 401, "抱歉,您没有访问权限"));
|
||||
throw new NoPermissionException("权限不足");
|
||||
}
|
||||
}
|
||||
//非get请求(数据操作) 判定
|
||||
else {
|
||||
if (!PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.SUPER.name()).toArray(new String[0]), request.getRequestURI())) {
|
||||
|
||||
ResponseUtil.output(response, ResponseUtil.resultMap(false, 401, "抱歉,您没有访问权限"));
|
||||
throw new NoPermissionException("权限不足");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user