Commit 151737f0 authored by liuyang's avatar liuyang

添加用户标签功能

parent 94585bef
...@@ -11,6 +11,10 @@ public enum CourseAllowEnum { ...@@ -11,6 +11,10 @@ public enum CourseAllowEnum {
/** /**
* 指定企业 * 指定企业
*/ */
SPECIFY SPECIFY,
/**
* 用户标签
*/
USER_TAG,
} }
package com.qkdata.biz.management.controller; package com.qkdata.biz.management.controller;
import com.qkdata.biz.management.service.MemberService; import com.qkdata.biz.management.service.MemberService;
import com.qkdata.biz.management.service.UserTagService;
import com.qkdata.biz.management.vo.MemberListModel; import com.qkdata.biz.management.vo.MemberListModel;
import com.qkdata.biz.management.vo.QueryMemberModel; import com.qkdata.biz.management.vo.QueryMemberModel;
import com.qkdata.common.annotation.SysLog; import com.qkdata.common.annotation.SysLog;
import com.qkdata.common.base.model.PageResult; import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.base.model.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import java.util.List;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "客户管理") @Api(tags = "客户管理")
@RestController @RestController
...@@ -20,6 +21,8 @@ public class MemberController { ...@@ -20,6 +21,8 @@ public class MemberController {
@Autowired @Autowired
private MemberService memberService; private MemberService memberService;
@Autowired
private UserTagService userTagService;
@ApiOperation("查询客户列表") @ApiOperation("查询客户列表")
@PostMapping("/list") @PostMapping("/list")
...@@ -27,4 +30,11 @@ public class MemberController { ...@@ -27,4 +30,11 @@ public class MemberController {
public PageResult<MemberListModel> list(@RequestBody QueryMemberModel param){ public PageResult<MemberListModel> list(@RequestBody QueryMemberModel param){
return memberService.queryPage(param); return memberService.queryPage(param);
} }
@ApiOperation("添加用户标签")
@PostMapping("/addUserTags/{userId}")
@SysLog("添加用户标签")
public Result<String> addTags(@PathVariable Long userId, @RequestBody List<Long> tagIds){
userTagService.addUserTagRel(userId,tagIds);
return Result.succeed("ok");
}
} }
package com.qkdata.biz.management.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qkdata.biz.common.BizConstants;
import com.qkdata.biz.management.entity.UserTagPO;
import com.qkdata.biz.management.service.UserTagService;
import com.qkdata.biz.management.vo.QueryUserTagModel;
import com.qkdata.common.annotation.SysLog;
import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.base.model.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 用户标签 前端控制器
* </p>
*
* @author liuyang
* @since 2021-09-01
*/
@Api(tags = "用户标签管理")
@RestController
@RequestMapping("/api/mgr/userTag")
public class UserTagController {
@Autowired
private UserTagService userTagService;
@ApiOperation("添加用户标签")
@PostMapping("/save")
@SysLog(value = "添加用户标签")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public Result<String> save(@RequestBody @Validated UserTagPO userTagPO){
UserTagPO dbPO = userTagService.getOne(Wrappers.<UserTagPO>lambdaQuery().eq(UserTagPO::getName,userTagPO.getName()));
if (dbPO != null){
throw new BusinessException("标签名称已存在");
}
userTagService.save(userTagPO);
return Result.succeed("ok");
}
@ApiOperation("删除标签")
@GetMapping("/delete/{id}")
@SysLog(value = "删除用户标签")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public Result<String> delete(@PathVariable Long id){
int count = userTagService.countByUserTagId(id);
if (count > 0){
throw new BusinessException("请先解除用户与该标签的关联");
}
userTagService.removeById(id);
return Result.succeed("ok");
}
@ApiOperation("分页查询标签列表")
@PostMapping("/list")
@SysLog(value = "标签列表")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public PageResult<UserTagPO> list(@RequestBody QueryUserTagModel params){
return userTagService.queryPageList(params);
}
}
...@@ -98,6 +98,9 @@ public class CoursePO extends BasePO { ...@@ -98,6 +98,9 @@ public class CoursePO extends BasePO {
*/ */
@TableLogic @TableLogic
private Boolean isDel; private Boolean isDel;
/**
* 指定的用户标签
*/
private String userTagIds;
} }
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* <p>
* 用户标签
* </p>
*
* @author liuyang
* @since 2021-09-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("user_tag")
public class UserTagPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 用户标签名称
*/
@NotBlank(message = "名称不能为空")
@Length(min = 1,max = 6,message = "名称最多6个字符")
private String name;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 用户与标签关联表
* </p>
*
* @author liuyang
* @since 2021-09-01
*/
@Data
@TableName("user_tag_rel")
public class UserTagRelPO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 用户标签id
*/
private Long userTagId;
}
...@@ -33,9 +33,9 @@ public interface CourseMapper extends BaseMapper<CoursePO> { ...@@ -33,9 +33,9 @@ public interface CourseMapper extends BaseMapper<CoursePO> {
List<CourseAllowEnterpriseModel> selectOrgListByCourseId(Long id); List<CourseAllowEnterpriseModel> selectOrgListByCourseId(Long id);
List<SearchCourseResultModel> searchPageList(Page page, @Param("p") SearchCourseConditionModel model); List<SearchCourseResultModel> searchPageList(Page page, @Param("p") SearchCourseConditionModel model,@Param("userTags") List<Long> userTagIds);
List<SearchCourseResultModel> recommendList(Page page, @Param("p") SearchCourseConditionModel model); List<SearchCourseResultModel> recommendList(Page page, @Param("p") SearchCourseConditionModel model,@Param("userTags") List<Long> userTagIds);
List<CoursePO> findListByTags(List<Long> tagIds); List<CoursePO> findListByTags(List<Long> tagIds);
......
package com.qkdata.biz.management.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qkdata.biz.management.entity.UserTagPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qkdata.biz.management.vo.QueryUserTagModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 用户标签 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-09-01
*/
@Mapper
public interface UserTagMapper extends BaseMapper<UserTagPO> {
List<UserTagPO> queryPageList(Page page, @Param("p") QueryUserTagModel params);
List<UserTagPO> findTagsByUserId(Long userId);
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.UserTagRelPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 用户与标签关联表 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-09-01
*/
@Mapper
public interface UserTagRelMapper extends BaseMapper<UserTagRelPO> {
int countByUserTagId(Long tagId);
}
...@@ -3,6 +3,7 @@ package com.qkdata.biz.management.service; ...@@ -3,6 +3,7 @@ package com.qkdata.biz.management.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.BetweenFormater; import cn.hutool.core.date.BetweenFormater;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.GetVideoInfoResponse; import com.aliyuncs.vod.model.v20170321.GetVideoInfoResponse;
...@@ -22,9 +23,11 @@ import com.qkdata.biz.management.vo.*; ...@@ -22,9 +23,11 @@ import com.qkdata.biz.management.vo.*;
import com.qkdata.biz.sys.entity.SysUserPO; import com.qkdata.biz.sys.entity.SysUserPO;
import com.qkdata.biz.sys.service.SysUserService; import com.qkdata.biz.sys.service.SysUserService;
import com.qkdata.biz.web.vo.*; import com.qkdata.biz.web.vo.*;
import com.qkdata.common.base.entity.BasePO;
import com.qkdata.common.base.enums.CodeEnum; import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.exception.BusinessException; import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.PageResult; import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.oauth.AuthorizedUser;
import com.qkdata.common.util.UserContext; import com.qkdata.common.util.UserContext;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -33,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -33,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -70,6 +74,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -70,6 +74,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private UserFavoritesService userFavoritesService; private UserFavoritesService userFavoritesService;
@Autowired @Autowired
private RecommendConfigService recommendConfigService; private RecommendConfigService recommendConfigService;
@Autowired
private UserTagService userTagService;
/** /**
* 后台-分页查询课程列表 * 后台-分页查询课程列表
...@@ -441,6 +447,14 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -441,6 +447,14 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
po.setModel(CourseModelEnum.VOD); po.setModel(CourseModelEnum.VOD);
po.setSeriesId(model.getSeriesId()); po.setSeriesId(model.getSeriesId());
po.setAllow(model.getAllow()); po.setAllow(model.getAllow());
if (po.getAllow() == CourseAllowEnum.USER_TAG){
if (CollUtil.isEmpty(model.getUserTagIds())){
throw new BusinessException("请选择用户标签");
}
po.setUserTagIds(ArrayUtil.join(model.getTagIds(),","));
}else {
po.setUserTagIds("");
}
saveOrUpdate(po); saveOrUpdate(po);
return po.getId(); return po.getId();
} }
...@@ -465,9 +479,15 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -465,9 +479,15 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
* @param model * @param model
* @return * @return
*/ */
public PageResult<SearchCourseResultModel> search(SearchCourseConditionModel model) { public PageResult<SearchCourseResultModel> search(SearchCourseConditionModel model,AuthorizedUser user) {
Page page = new Page(model.getPageIndex(),model.getPageSize()); Page page = new Page(model.getPageIndex(),model.getPageSize());
List<SearchCourseResultModel> list = baseMapper.searchPageList(page,model); List<Long> userTagIds = null;
if (user != null){
List<UserTagPO> userTagList = userTagService.findTagsByUserId(user.getUserId());
userTagIds = userTagList.stream().map(BasePO::getId).collect(Collectors.toList());
}
List<SearchCourseResultModel> list = baseMapper.searchPageList(page,model,userTagIds);
addTagAndDuration(list); addTagAndDuration(list);
return PageResult.<SearchCourseResultModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build(); return PageResult.<SearchCourseResultModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
} }
...@@ -623,9 +643,15 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -623,9 +643,15 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
return resultList; return resultList;
} }
public PageResult<SearchCourseResultModel> mainPageRecommendList(SearchCourseConditionModel model) { public PageResult<SearchCourseResultModel> mainPageRecommendList(SearchCourseConditionModel model, AuthorizedUser user) {
Page page = new Page(model.getPageIndex(),model.getPageSize()); Page page = new Page(model.getPageIndex(),model.getPageSize());
List<SearchCourseResultModel> list = baseMapper.recommendList(page,model); List<Long> userTagIds = null;
if (user != null){
List<UserTagPO> userTagList = userTagService.findTagsByUserId(user.getUserId());
userTagIds = userTagList.stream().map(BasePO::getId).collect(Collectors.toList());
}
List<SearchCourseResultModel> list = baseMapper.recommendList(page,model,userTagIds);
for (SearchCourseResultModel recommend : list){ for (SearchCourseResultModel recommend : list){
List<CourseTagsModel> tagList = tagService.findListByCourseId(recommend.getCourseId()); List<CourseTagsModel> tagList = tagService.findListByCourseId(recommend.getCourseId());
recommend.setTags(tagList); recommend.setTags(tagList);
......
...@@ -45,10 +45,15 @@ public class MemberService { ...@@ -45,10 +45,15 @@ public class MemberService {
private SysRoleService sysRoleService; private SysRoleService sysRoleService;
@Autowired @Autowired
private SysUserRoleService sysUserRoleService; private SysUserRoleService sysUserRoleService;
@Autowired
private UserTagService userTagService;
public PageResult<MemberListModel> queryPage(QueryMemberModel param) { public PageResult<MemberListModel> queryPage(QueryMemberModel param) {
Page page = new Page(param.getPageIndex(),param.getPageSize()); Page page = new Page(param.getPageIndex(),param.getPageSize());
List<MemberListModel> list = sysUserExtMapper.queryPage(page,param); List<MemberListModel> list = sysUserExtMapper.queryPage(page,param);
for (MemberListModel member : list){
member.setUserTags(userTagService.findTagsByUserId(member.getId()));
}
return PageResult.<MemberListModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build(); return PageResult.<MemberListModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
} }
......
package com.qkdata.biz.management.service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qkdata.biz.management.entity.UserTagPO;
import com.qkdata.biz.management.entity.UserTagRelPO;
import com.qkdata.biz.management.mapper.UserTagMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qkdata.biz.management.mapper.UserTagRelMapper;
import com.qkdata.biz.management.vo.QueryUserTagModel;
import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.model.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* $!{table.comment} 服务类
* </p>
*
* @author liuyang
* @since 2021-09-01
*/
@Service
public class UserTagService extends ServiceImpl<UserTagMapper, UserTagPO> {
@Autowired
private UserTagRelMapper userTagRelMapper;
public PageResult<UserTagPO> queryPageList(QueryUserTagModel params) {
Page page = new Page(params.getPageIndex(),params.getPageSize());
List<UserTagPO> list = baseMapper.queryPageList(page,params);
return PageResult.<UserTagPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
public List<UserTagPO> findTagsByUserId(Long userId) {
return baseMapper.findTagsByUserId(userId);
}
public int countByUserTagId(Long tagId) {
return userTagRelMapper.countByUserTagId(tagId);
}
@Transactional
public void addUserTagRel(Long userId, List<Long> tagIds) {
userTagRelMapper.delete(Wrappers.<UserTagRelPO>lambdaQuery().eq(UserTagRelPO::getUserId,userId));
for (Long tagId : tagIds){
UserTagRelPO po = new UserTagRelPO();
po.setUserId(userId);
po.setUserTagId(tagId);
userTagRelMapper.insert(po);
}
}
}
\ No newline at end of file
...@@ -2,9 +2,11 @@ package com.qkdata.biz.management.vo; ...@@ -2,9 +2,11 @@ package com.qkdata.biz.management.vo;
import com.qkdata.biz.enums.AccountStatusEnum; import com.qkdata.biz.enums.AccountStatusEnum;
import com.qkdata.biz.enums.AccountTypeEnum; import com.qkdata.biz.enums.AccountTypeEnum;
import com.qkdata.biz.management.entity.UserTagPO;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Data @Data
public class MemberListModel { public class MemberListModel {
...@@ -60,4 +62,8 @@ public class MemberListModel { ...@@ -60,4 +62,8 @@ public class MemberListModel {
* 会员失效时间 * 会员失效时间
*/ */
private LocalDateTime vipEndTime; private LocalDateTime vipEndTime;
/**
* 用户标签列表
*/
private List<UserTagPO> userTags;
} }
...@@ -9,4 +9,5 @@ public class QueryMemberModel { ...@@ -9,4 +9,5 @@ public class QueryMemberModel {
private int pageSize = Constants.DEFAULT_PAGE_SIZE; private int pageSize = Constants.DEFAULT_PAGE_SIZE;
private String username; private String username;
private Long orgId; private Long orgId;
private Long userTagId;
} }
package com.qkdata.biz.management.vo;
import com.qkdata.common.constants.Constants;
import lombok.Data;
@Data
public class QueryUserTagModel {
private int pageIndex = Constants.DEFAULT_PAGE;
private int pageSize = Constants.DEFAULT_PAGE_SIZE;
private String name;
}
...@@ -66,7 +66,7 @@ public class SaveCourseModel { ...@@ -66,7 +66,7 @@ public class SaveCourseModel {
*/ */
private String seriesName; private String seriesName;
/** /**
* 可见范围(全部、指定企业) * 可见范围(全部、指定企业,指定用户标签
*/ */
private CourseAllowEnum allow; private CourseAllowEnum allow;
/** /**
...@@ -85,4 +85,8 @@ public class SaveCourseModel { ...@@ -85,4 +85,8 @@ public class SaveCourseModel {
* 课程附件列表 * 课程附件列表
*/ */
private List<Long> attachmenIds; private List<Long> attachmenIds;
/**
* 指定的用户标签
*/
private List<Long> userTagIds;
} }
package com.qkdata.biz.web.controller; package com.qkdata.biz.web.controller;
import cn.hutool.core.util.StrUtil;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qkdata.biz.enums.SwiperStatusEnum; import com.qkdata.biz.enums.SwiperStatusEnum;
import com.qkdata.biz.management.entity.CourseTagPO; import com.qkdata.biz.management.entity.CourseTagPO;
import com.qkdata.biz.management.entity.TeacherPO; import com.qkdata.biz.management.entity.TeacherPO;
...@@ -15,11 +18,17 @@ import com.qkdata.biz.web.vo.SearchCourseResultModel; ...@@ -15,11 +18,17 @@ import com.qkdata.biz.web.vo.SearchCourseResultModel;
import com.qkdata.common.annotation.SysLog; import com.qkdata.common.annotation.SysLog;
import com.qkdata.common.base.model.PageResult; import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.base.model.Result; import com.qkdata.common.base.model.Result;
import com.qkdata.common.jwt.JWTService;
import com.qkdata.common.oauth.AuthorizedUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List; import java.util.List;
@Api(tags = "首页数据获取-手机端") @Api(tags = "首页数据获取-手机端")
...@@ -40,6 +49,8 @@ public class MainPageController { ...@@ -40,6 +49,8 @@ public class MainPageController {
private UserCenterService userCenterService; private UserCenterService userCenterService;
@Autowired @Autowired
private TeacherService teacherService; private TeacherService teacherService;
@Autowired
private JWTService jwtService;
@ApiOperation("获取配置信息") @ApiOperation("获取配置信息")
@GetMapping("") @GetMapping("")
...@@ -56,15 +67,39 @@ public class MainPageController { ...@@ -56,15 +67,39 @@ public class MainPageController {
@ApiOperation("首页推存课程列表") @ApiOperation("首页推存课程列表")
@PostMapping("/course/recommend/list") @PostMapping("/course/recommend/list")
@SysLog("首页推存课程列表") @SysLog("首页推存课程列表")
public PageResult<SearchCourseResultModel> recommendCourseList(@RequestBody SearchCourseConditionModel model){ public PageResult<SearchCourseResultModel> recommendCourseList(@RequestBody SearchCourseConditionModel model,HttpServletRequest request) throws IOException {
return courseService.mainPageRecommendList(model); return courseService.mainPageRecommendList(model,getUserFromToken(request));
}
private AuthorizedUser getUserFromToken(HttpServletRequest request) throws IOException {
AuthorizedUser authUser = null;
String token = getRequestToken(request);
if (StrUtil.isNotBlank(token)){
DecodedJWT decodedJWT = jwtService.decode(token);
String userJson = decodedJWT.getClaim("user").asString();
ObjectMapper mapper = new ObjectMapper();
authUser = mapper.readValue(userJson,AuthorizedUser.class);
}
return authUser;
} }
/**
* 获取请求的token
*/
private String getRequestToken(HttpServletRequest httpRequest){
//从header中获取token
String token = httpRequest.getHeader(HttpHeaders.AUTHORIZATION);
//如果header中不存在token,则从参数中获取token
if(StringUtils.isEmpty(token)){
token = httpRequest.getParameter(HttpHeaders.AUTHORIZATION);
}
return token;
}
@ApiOperation("搜索课程") @ApiOperation("搜索课程")
@PostMapping("/course/search") @PostMapping("/course/search")
@SysLog("搜索课程") @SysLog("搜索课程")
public PageResult<SearchCourseResultModel> searchCourse(@RequestBody SearchCourseConditionModel model){ public PageResult<SearchCourseResultModel> searchCourse(@RequestBody SearchCourseConditionModel model,HttpServletRequest request) throws IOException {
return courseService.search(model); return courseService.search(model,getUserFromToken(request));
} }
@ApiOperation("获取全部标签") @ApiOperation("获取全部标签")
......
CREATE TABLE `user_tag` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NULL COMMENT '用户标签名称',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) COMMENT = '用户标签';
CREATE TABLE `user_tag_rel` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`user_id` bigint(0) NULL COMMENT '用户id',
`user_tag_id` bigint(0) NULL COMMENT '用户标签id',
PRIMARY KEY (`id`)
) COMMENT = '用户与标签关联表';
ALTER TABLE `course`
ADD COLUMN `user_tag_ids` varchar(4000) NULL COMMENT '用户标签,多个以逗号分隔' AFTER `is_del`;
\ No newline at end of file
...@@ -71,6 +71,13 @@ ...@@ -71,6 +71,13 @@
WHERE WHERE
c.is_del = 0 c.is_del = 0
AND c.allow = 'ALL' AND c.allow = 'ALL'
<if test="userTags != null and userTags.size > 0">
or c.allow = 'USER_TAG'
and
<foreach collection="userTags" item="item" open="(" close=")" separator="or">
FIND_IN_SET(#{item},c.user_tag_ids)
</foreach>
</if>
AND c.`status` = 'UP' AND c.`status` = 'UP'
<if test="p.courseName != null and p.courseName != ''"> <if test="p.courseName != null and p.courseName != ''">
and c.`name` like concat ('%',#{p.courseName},'%') and c.`name` like concat ('%',#{p.courseName},'%')
...@@ -94,6 +101,13 @@ ...@@ -94,6 +101,13 @@
WHERE c.is_del = 0 WHERE c.is_del = 0
and c.`status` = 'UP' and c.`status` = 'UP'
and c.allow = 'ALL' and c.allow = 'ALL'
<if test="userTags != null and userTags.size > 0">
or c.allow = 'USER_TAG'
and
<foreach collection="userTags" item="item" open="(" close=")" separator="or">
FIND_IN_SET(#{item},c.user_tag_ids)
</foreach>
</if>
ORDER BY sort_no ASC ORDER BY sort_no ASC
</select> </select>
<select id="findListByTags" resultType="com.qkdata.biz.management.entity.CoursePO"> <select id="findListByTags" resultType="com.qkdata.biz.management.entity.CoursePO">
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.management.mapper.UserTagMapper">
<select id="queryPageList" resultType="com.qkdata.biz.management.entity.UserTagPO">
select * from user_tag where 1 = 1
<if test="p.name != null and p.name != ''">
and name like concat('%',#{p.name},'%')
</if>
</select>
<select id="findTagsByUserId" resultType="com.qkdata.biz.management.entity.UserTagPO">
select u.*
from user_tag u
inner join user_tag_rel r on u.id = r.user_tag_id
where r.user_id = #{userId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.management.mapper.UserTagRelMapper">
<select id="countByUserTagId" resultType="java.lang.Integer">
select count(0)
from user_tag_rel
where user_tag_id = #{tagId}
</select>
</mapper>
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
FROM sys_user u FROM sys_user u
INNER JOIN user_ext e on u.id = e.user_id INNER JOIN user_ext e on u.id = e.user_id
LEFT JOIN organization o on e.enterprise_id = o.id LEFT JOIN organization o on e.enterprise_id = o.id
LEFT JOIN user_tag_rel r on u.id = r.user_id
WHERE u.is_del = 0 WHERE u.is_del = 0
<if test="p.username != null and p.username != ''"> <if test="p.username != null and p.username != ''">
and u.username like concat('%',#{p.username},'%') and u.username like concat('%',#{p.username},'%')
...@@ -27,6 +28,9 @@ ...@@ -27,6 +28,9 @@
<if test="p.orgId != null"> <if test="p.orgId != null">
and e.enterprise_id = #{p.orgId} and e.enterprise_id = #{p.orgId}
</if> </if>
<if test="p.userTagId != null">
and r.user_tag_id = #{p.userTagId}
</if>
ORDER BY u.last_login_time desc ORDER BY u.last_login_time desc
</select> </select>
<select id="getByUsername" resultType="com.qkdata.biz.management.vo.MemberInfoModel"> <select id="getByUsername" resultType="com.qkdata.biz.management.vo.MemberInfoModel">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment