转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeshipinzhanshiyemianchushihua62/
进入列表详情,展示点赞状态用户的名称,头像名称。源码:https://github.com/limingios/wxProgram.git 中No.15和springboot
后台开发
拦截器,不拦截获取视频初始化信息。游客可以直接观看。通过用户id,视频id,视频创建id获取是否点赞视频,并获取创建者的信息。
- 拦截器
package com.idig8;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import com.idig8.controller.interceptor.MiniInterceptor;@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter { @Value("${server.file.path}") private String fileSpace; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //资源的路径.swagger2的资源.所在的目录, registry.addResourceHandler("/**") .addResourceLocations("classpath:/META-INF/resources/") .addResourceLocations("file:"+fileSpace); } @Bean public MiniInterceptor miniInterceptor() { return new MiniInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(miniInterceptor()).addPathPatterns("/user/**") .addPathPatterns("/video/upload", "/video/uploadCover","/video/userLike","/video/userUnLike") .addPathPatterns("/bgm/**") .excludePathPatterns("/user/queryPublisher"); super.addInterceptors(registry); }}
UserController.java
package com.idig8.controller;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.BeanUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import com.idig8.pojo.Users;import com.idig8.pojo.vo.PublisherVideo;import com.idig8.pojo.vo.UsersVO;import com.idig8.service.UserService;import com.idig8.utils.JSONResult;import com.idig8.utils.file.FileUtil;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import io.swagger.annotations.ApiParam;@RestController@Api(value="用户接口",tags={"用户的controller"})@RequestMapping(value = "/user")public class UserController extends BasicController{ @Autowired private UserService userService; @Value("${server.file.path}") private String fileSpace; @ApiOperation(value="用户上传头像",notes="用户上传头像的接口") @ApiImplicitParams({ @ApiImplicitParam(name="userId",value="用户id",required=true,dataType="String",paramType="query"), }) @PostMapping(value="/uploadFace",headers="content-type=multipart/form-data") public JSONResult uploadFace(String userId,@ApiParam(value="图片",required=true) MultipartFile file) { if (StringUtils.isBlank(userId)) { return JSONResult.errorMsg("用户id不能为空..."); } // 文件保存的命名空间 String fileName = file.getOriginalFilename(); // 保存到数据库中的相对路径 String path = ""; try { path = FileUtil.uploadFile(file.getBytes(), fileSpace, fileName); } catch (Exception e) { e.getStackTrace(); return JSONResult.errorMsg(e.getMessage()); } Users user = new Users(); user.setId(userId); user.setFaceImage(path); userService.updateUser(user); return JSONResult.ok(path); } @ApiOperation(value="通过用户Id获取用户信息",notes="通过用户Id获取用户信息的接口") @ApiImplicitParam(name="userId",value="用户id",required=true,dataType="String",paramType="query") @PostMapping("/queryByUserId") public JSONResult queryByUserId(String userId) { if (StringUtils.isBlank(userId)) { return JSONResult.errorMsg("用户id不能为空..."); } Users user = userService.queryUserId(userId); UsersVO usersVO= new UsersVO(); BeanUtils.copyProperties(user, usersVO); return JSONResult.ok(usersVO); } @PostMapping("/queryPublisher") public JSONResult queryPublisher(String loginUserId, String videoId, String publishUserId) throws Exception { if (StringUtils.isBlank(publishUserId)) { return JSONResult.errorMsg(""); } // 1. 查询视频发布者的信息 Users userInfo = userService.queryUserInfo(publishUserId); UsersVO publisher = new UsersVO(); BeanUtils.copyProperties(userInfo, publisher); // 2. 查询当前登录者和视频的点赞关系 boolean userLikeVideo = userService.isUserLikeVideo(loginUserId, videoId); PublisherVideo bean = new PublisherVideo(); bean.setPublisher(publisher); bean.setUserLikeVideo(userLikeVideo); return JSONResult.ok(bean); }}
- service 和 serviceImp
package com.idig8.service;import com.idig8.pojo.Users;public interface UserService { /** * 判断用户名是否存在 * @param username * @return */ public boolean queryUsernameIsExist(String username); /** * 保存用户 * @param user * @return */ public void saveUser(Users user); /** * 查询用户对象 * @param username * @return */ public Users queryUserIsExist(Users user); /** * 更新对象 * @param username * @return */ public void updateUser(Users user); /** * userId查询用户对象 * @param username * @return */ public Users queryUserId(String userId); /** * 查询用户信息 */ public Users queryUserInfo(String userId); /** * 查询用户是否喜欢点赞视频 */ public boolean isUserLikeVideo(String userId, String videoId);}
package com.idig8.service.Impl;import java.util.List;import org.apache.commons.lang3.StringUtils;import org.n3r.idworker.Sid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.idig8.mapper.UsersLikeVideosMapper;import com.idig8.mapper.UsersMapper;import com.idig8.pojo.Users;import com.idig8.pojo.UsersLikeVideos;import com.idig8.service.UserService;import com.idig8.utils.MD5Utils;import tk.mybatis.mapper.entity.Example;import tk.mybatis.mapper.entity.Example.Criteria;@Servicepublic class UserServiceImpl implements UserService { @Autowired private UsersMapper usersMapper; @Autowired private UsersLikeVideosMapper usersLikeVideosMapper; @Autowired private UsersMapper userMapper; @Autowired private Sid sid; @Transactional(propagation =Propagation.SUPPORTS) @Override public boolean queryUsernameIsExist(String username) { Users user = new Users(); user.setUsername(username); Users result = usersMapper.selectOne(user); return result==null? false:true; } @Transactional(propagation =Propagation.REQUIRED) @Override public void saveUser(Users user) { String userId =sid.nextShort(); user.setId(userId); usersMapper.insert(user); } @Transactional(propagation =Propagation.SUPPORTS) @Override public Users queryUserIsExist(Users user) { Example queryExample = new Example(Users.class); Criteria criteria = queryExample.createCriteria(); criteria.andEqualTo("username",user.getUsername()); try { criteria.andEqualTo("password",MD5Utils.getMD5Str(user.getPassword())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Users userOne = usersMapper.selectOneByExample(queryExample); return userOne; } @Transactional(propagation =Propagation.REQUIRED) @Override public void updateUser(Users user) { Example userExample = new Example(Users.class); Criteria criteria = userExample.createCriteria(); criteria.andEqualTo("id", user.getId()); usersMapper.updateByExampleSelective(user, userExample); } @Transactional(propagation =Propagation.SUPPORTS) @Override public Users queryUserId(String userId){ Example queryExample = new Example(Users.class); Criteria criteria = queryExample.createCriteria(); criteria.andEqualTo("id",userId); Users userOne = usersMapper.selectOneByExample(queryExample); return userOne; } @Transactional(propagation = Propagation.SUPPORTS) @Override public Users queryUserInfo(String userId) { Example userExample = new Example(Users.class); Criteria criteria = userExample.createCriteria(); criteria.andEqualTo("id", userId); Users user = userMapper.selectOneByExample(userExample); return user; } @Transactional(propagation = Propagation.SUPPORTS) @Override public boolean isUserLikeVideo(String userId, String videoId) { if (StringUtils.isBlank(userId) || StringUtils.isBlank(videoId)) { return false; } Example example = new Example(UsersLikeVideos.class); Criteria criteria = example.createCriteria(); criteria.andEqualTo("userId", userId); criteria.andEqualTo("videoId", videoId); Listlist = usersLikeVideosMapper.selectByExample(example); if (list != null && list.size() >0) { return true; } return false; }}
小程序修改
- videoInfo.js
var videoUtils = require('../../utils/videoUtils.js')const app = getApp()Page({ data: { cover:'cover', videoContext:"", videoInfo:{}, videId:'', src:'', userLikeVideo:false, serverUrl:'', publisher:[] }, showSearch:function(){ wx.navigateTo({ url: '../videoSearch/videoSearch', }) }, onLoad:function(params){ var me = this; me.videoContext = wx.createVideoContext('myVideo', me); var videoInfo = JSON.parse(params.videoInfo); var videoWidth = videoInfo.videoWidth; var videoHeight = videoInfo.videoHeight; var cover = 'cover'; if (videoWidth > videoHeight){ cover = ''; } me.setData({ videId: videoInfo.id, src: app.serverUrl + videoInfo.videoPath, videoInfo: videoInfo, cover: cover }) var serverUrl = app.serverUrl; var user = app.getGlobalUserInfo(); var loginUserId = ""; if (user != null && user != undefined && user != '') { loginUserId = user.id; } wx.request({ url: serverUrl + '/user/queryPublisher?loginUserId=' + loginUserId + "&videoId=" + videoInfo.id + "&publishUserId=" + videoInfo.userId, method: 'POST', success: function (res) { console.log(res.data); var publisher = res.data.data.publisher; var userLikeVideo = res.data.data.userLikeVideo; me.setData({ serverUrl: serverUrl, publisher: publisher, userLikeVideo: userLikeVideo }); } }) }, showIndex:function(){ wx.redirectTo({ url: '../index/index', }) }, onShow:function(){ var me = this; me.videoContext.play(); }, onHide:function(){ var me = this; me.videoContext.pause(); }, upload:function(){ var me = this; var userInfo = app.getGlobalUserInfo(); var videoInfo = JSON.stringify(me.data.videoInfo); var realUrl = '../videoInfo/videoInfo#videoInfo@' + videoInfo; if (userInfo.id == '' || userInfo.id == undefined) { wx.navigateTo({ url: '../userLogin/userLogin?realUrl=' + realUrl, }) } else { videoUtils.uploadVideo(); } }, showMine: function () { var me = this; var userInfo = app.getGlobalUserInfo(); var videoInfo = JSON.parse if (userInfo.id == '' || userInfo.id == undefined){ wx.navigateTo({ url: '../userLogin/userLogin', }) }else{ wx.navigateTo({ url: '../mine/mine', }) } }, likeVideoOrNot: function () { var me = this; var userInfo = app.getGlobalUserInfo(); var videoInfoStr = JSON.stringify(me.data.videoInfo); var realUrl = '../videoInfo/videoInfo#videoInfo@' + videoInfoStr; if (userInfo.id == '' || userInfo.id == undefined) { wx.navigateTo({ url: '../userLogin/userLogin?realUrl=' + realUrl, }) } else { var videoInfo = me.data.videoInfo; var userLikeVideo = me.data.userLikeVideo; var url = "/video/userLike?userId=" + userInfo.id + "&videoId=" + videoInfo.id + "&videoCreaterId=" + userLikeVideo.userId; if (userLikeVideo){ var url = "/video/userUnLike?userId=" + userInfo.id + "&videoId=" + videoInfo.id + "&videoCreaterId=" + userLikeVideo.userId; } wx.showLoading({ title: '....', }) wx.request({ url: app.serverUrl + url, method: "POST", header: { 'content-type': 'application/json', // 默认值 'headerUserId': userInfo.id, 'headerUserToken': userInfo.userToken }, success: function (res) { wx.hideLoading(); me.setData({ userLikeVideo: !userLikeVideo, }) } }) } }})
PS:拦截器excludePathPatterns可以不拦截,分析业务,那些需要登录后才可以获得,那些不需要登录就可以看到。