「小程序JAVA实战」小程序的举报功能开发(68)

news/2024/7/1 5:41:10

转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/

通过点击举报按钮,跳转到举报页面完成举报操作。

后台开发

获取发布人的userId,videoId,创建者的Id

 

  • controller

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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import com.idig8.pojo.Users;
import com.idig8.pojo.UsersReport;
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{@Autowiredprivate 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, String fanId) {if (StringUtils.isBlank(userId)) {return JSONResult.errorMsg("用户id不能为空...");}Users user = userService.queryUserId(userId);UsersVO usersVO= new UsersVO();BeanUtils.copyProperties(user, usersVO);usersVO.setFollow(userService.queryIfFollow(userId, fanId));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);}@PostMapping("/beyourfans")public JSONResult beyourfans(String userId, String fanId) throws Exception {if (StringUtils.isBlank(userId) || StringUtils.isBlank(fanId)) {return JSONResult.errorMsg("");}userService.saveUserFanRelation(userId, fanId);return JSONResult.ok("关注成功...");}@PostMapping("/dontbeyourfans")public JSONResult dontbeyourfans(String userId, String fanId) throws Exception {if (StringUtils.isBlank(userId) || StringUtils.isBlank(fanId)) {return JSONResult.errorMsg("");}userService.deleteUserFanRelation(userId, fanId);return JSONResult.ok("取消关注成功...");}@PostMapping("/reportUser")public JSONResult reportUser(@RequestBody UsersReport usersReport) throws Exception {// 保存举报信息userService.reportUser(usersReport);return JSONResult.errorMsg("举报成功...有你平台变得更美好...");}}···* service
UserService.java
``` java
package com.idig8.service;import com.idig8.pojo.Users;
import com.idig8.pojo.UsersReport;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);/*** @Description: 增加用户和粉丝的关系*/public void saveUserFanRelation(String userId, String fanId);/*** @Description: 删除用户和粉丝的关系*/public void deleteUserFanRelation(String userId, String fanId);/*** @Description: 查询用户是否关注*/public boolean queryIfFollow(String userId, String fanId);/*** @Description: 举报用户*/public void reportUser(UsersReport userReport);}
  • service
    UserServiceImpl.java
package com.idig8.service.Impl;import java.util.Date;
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.UsersFansMapper;
import com.idig8.mapper.UsersLikeVideosMapper;
import com.idig8.mapper.UsersMapper;
import com.idig8.mapper.UsersReportMapper;
import com.idig8.pojo.Users;
import com.idig8.pojo.UsersFans;
import com.idig8.pojo.UsersLikeVideos;
import com.idig8.pojo.UsersReport;
import com.idig8.service.UserService;
import com.idig8.utils.MD5Utils;import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UsersMapper usersMapper;@Autowiredprivate UsersLikeVideosMapper usersLikeVideosMapper;@Autowiredprivate UsersMapper userMapper;@Autowiredprivate Sid sid;@Autowiredprivate UsersFansMapper usersFansMapper;@Autowiredprivate UsersReportMapper usersReportMapper;@Transactional(propagation =Propagation.SUPPORTS)@Overridepublic 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)@Overridepublic void saveUser(Users user) {String userId =sid.nextShort();user.setId(userId);usersMapper.insert(user);}@Transactional(propagation =Propagation.SUPPORTS)@Overridepublic 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 blocke.printStackTrace();}Users userOne =  usersMapper.selectOneByExample(queryExample);return userOne;}@Transactional(propagation =Propagation.REQUIRED)@Overridepublic 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)@Overridepublic 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)@Overridepublic 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)@Overridepublic 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);List<UsersLikeVideos> list = usersLikeVideosMapper.selectByExample(example);if (list != null && list.size() >0) {return true;}return false;}@Transactional(propagation = Propagation.REQUIRED)@Overridepublic void saveUserFanRelation(String userId, String fanId) {String relId = sid.nextShort();UsersFans userFan = new UsersFans();userFan.setId(relId);userFan.setUserId(userId);userFan.setFanId(fanId);usersFansMapper.insert(userFan);userMapper.addFansCount(userId);userMapper.addFollersCount(fanId);}@Transactional(propagation = Propagation.REQUIRED)@Overridepublic void deleteUserFanRelation(String userId, String fanId) {Example example = new Example(UsersFans.class);Criteria criteria = example.createCriteria();criteria.andEqualTo("userId", userId);criteria.andEqualTo("fanId", fanId);usersFansMapper.deleteByExample(example);userMapper.reduceFansCount(userId);userMapper.reduceFollersCount(fanId);}@Overridepublic boolean queryIfFollow(String userId, String fanId) {Example example = new Example(UsersFans.class);Criteria criteria = example.createCriteria();criteria.andEqualTo("userId", userId);criteria.andEqualTo("fanId", fanId);List<UsersFans> list = usersFansMapper.selectByExample(example);if (list != null && !list.isEmpty() && list.size() > 0) {return true;}return false;}@Transactional(propagation = Propagation.REQUIRED)@Overridepublic void reportUser(UsersReport userReport) {String urId = sid.nextShort();userReport.setId(urId);userReport.setCreateDate(new Date());usersReportMapper.insert(userReport);}}

小程序开发

  • videoInfo
    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.parseif (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,})}})}},showPublisher:function(){var me = this;var userInfo = app.getGlobalUserInfo();var videoInfo = me.data.videoInfo;var realUrl = '../mine/mine#publisherId@' + videoInfo.userId;if (userInfo.id == '' || userInfo.id == undefined) {wx.navigateTo({url: '../userLogin/userLogin?realUrl=' + realUrl,})} else {wx.navigateTo({url: '../mine/mine?publisherId=' + videoInfo.userId,})}},shareMe:function(){var me = this;var user = app.getGlobalUserInfo();wx.showActionSheet({itemList: ["下载到本地","举报用户","分享到好友"],success:function(res){if (res.tapIndex==0){} else if (res.tapIndex==1){// 举报var videoInfo = JSON.stringify(me.data.videoInfo);var realUrl = '../videoInfo/videoInfo#videoInfo@' + videoInfo;if (user == null || user == undefined || user == '') {wx.navigateTo({url: '../userLogin/userLogin?realUrl=' + realUrl,})} else {var publishUserId = me.data.videoInfo.userId;var videoId = me.data.videoInfo.id;var currentUserId = user.id;wx.navigateTo({url: '../report/report?videoId=' + videoId + "&publishUserId=" + publishUserId})}} else{}}})}
})
  • report
const app = getApp()Page({data: {reasonType: "请选择原因",reportReasonArray: app.reportReasonArray,publishUserId:"",videoId:""},onLoad:function(params) {var me = this;var videoId = params.videoId;var publishUserId = params.publishUserId;me.setData({publishUserId: publishUserId,videoId: videoId});},changeMe:function(e) {var me = this;var index = e.detail.value;var reasonType = app.reportReasonArray[index];me.setData({reasonType: reasonType});},submitReport:function(e) {var me = this;var reasonIndex = e.detail.value.reasonIndex;var reasonContent = e.detail.value.reasonContent;var user = app.getGlobalUserInfo();var currentUserId = user.id;if (reasonIndex == null || reasonIndex == '' || reasonIndex == undefined) {wx.showToast({title: '选择举报理由',icon: "none"})return;}var serverUrl = app.serverUrl;wx.request({url: serverUrl + '/user/reportUser',method: 'POST',data: {dealUserId: me.data.publishUserId,dealVideoId: me.data.videoId,title: app.reportReasonArray[reasonIndex],content:reasonContent,userid: currentUserId},header: {'content-type': 'application/json', // 默认值'headerUserId': user.id,'headerUserToken': user.userToken},success:function(res) {wx.showToast({title: res.data.msg,duration: 2000,icon: 'none',success: function() {wx.navigateBack();}})}})}})
<view><form bindsubmit='submitReport'><view class='container-reason'><label class='label'>举报理由:</label><picker name="reasonIndex" value="{{index}}" range="{{reportReasonArray}}" bindchange="changeMe"><view class="picker">{{reasonType}}</view></picker></view><view class='container-content'><label class='label'>举报描述(选填):</label><textarea name="reasonContent" class='content' placeholder='请详细说明举报原因...'></textarea></view><view class='container-tips'><image src='../../resource/images/report_face.png' class='report-face'></image>收到举报后,我们会在12小时内处理,感谢您的举报,互联网环境因你更美好!~~</view><view><button class="submitBtn" type="" form-type='submit'>提  交</button></view></form>
</view>
page {background-color: #0e0f1a;/* background-color: red; */
}.container-reason {display: flex;color: whitesmoke;padding: 15px;background-color: #161823;
}.label {/* margin-left: 15px; */margin-right: 15px;color: white;
}.container-content {margin-top: 10px;color: whitesmoke;padding: 15px;background-color: #161823;
}.content {margin-top: 10px;padding: 10px;color: white;background-color: #242630;width: 95%;
}.container-tips{padding: 25px;color: #56575e;font-size: 15px;
}.report-face{width:12px;height:13px;
}.submitBtn {width: 80%;margin-top: 10px;background-color: #fe2c55;color: white;
}
  • app.js
//app.js
App({serverUrl:"http://127.0.0.1:8081/",userInfo:null,setGlobalUserInfo:function(user){wx.setStorageSync("userInfo", user);},getGlobalUserInfo: function () {return wx.getStorageSync("userInfo");},reportReasonArray: ["色情低俗","政治敏感","涉嫌诈骗","辱骂谩骂","广告垃圾","诱导分享","引人不适","过于暴力","违法违纪","其它原因"]
})

PS:举报功能已经开发完毕,后面这几次很少语言描述,基本的业务逻辑想下就通了。

转载于:https://www.cnblogs.com/sharpest/p/10316629.html


http://lihuaxi.xjx100.cn/news/236302.html

相关文章

base64格式的图片数据如何转成图片

base64格式的图片数据如何转成图片 一、总结 一句话总结&#xff1a;不仅要去掉前面的格式串&#xff0c;还需要base64_decode&#xff08;&#xff09;解码才行。 1 // $base_img是获取到前端传递的值2 $base_img str_replace(data:image/jpg;base64,, , $base_img);3 // 设…

自动化运维—saltstack

2019独角兽企业重金招聘Python工程师标准>>> 自动化运维——saltstack 、ansible 一、自动化运维介绍 传统运维&#xff1a;传统运维效率低&#xff0c;大多工作需要人工完成&#xff0c;工作繁琐&#xff0c;容易出错&#xff0c;每日重复做相同的事情&#xff0c;…

java简单的ID生成器

2019独角兽企业重金招聘Python工程师标准>>> https://www.cnblogs.com/hongdada/p/9324473.html https://github.com/apache/incubator-shardingsphere 转载于:https://my.oschina.net/u/3005325/blog/3006311

linux进行主机发现,linux – 网络上所有计算机的主机名发现

SSH不关心是否给出了要连接的主机名或IP地址(当有特定于主机的配置时,不确定是否适用).大多数MPI实现也不关心,例如在Open MPI连接中,URI地址都是数字,因此具有IP的主机文件可以正常使用.另一方面,HTTP服务器关心的是虚拟主机事件,其中许多不同站点解析为相同的IP地址,但服务器…

网站基于vs,复选框,单选款

前端代码&#xff1a; <% Page Language"C#" AutoEventWireup"true" CodeFile"Default2.aspx.cs" Inherits"Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or…

如何让你的回调更具Kotlin风味

简述: 这应该是2019年的第一篇文章了&#xff0c;临近过年回家一个月需求是真的很多&#xff0c;正如康少说的那样&#xff0c;一年的需求几乎都在最后一两月写完了。所以写文章也搁置了很久&#xff0c;当然再忙每天都会刷掘金。很久就一直在使用Kotlin写项目&#xff0c;说实…

linux blfs安装桌面,【Linux】Ubuntu14.04安装bridge-utils安装brctl

1、下载bridge-utils http://www.linuxfromscratch.org/blfs/view/svn/basicnet/bridge-utils.html2、放到/usr/src 目录下输入&#xff1a;su以root运行输入&#xff1a;cp /home/joanna/桌面/bridge-utils-1.5.tar.gz /usr/src/bridge-utils-1.5.tar.gzbridge-utils拷贝到/…

bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)

传送门 首先&#xff0c;对于每一块墓地&#xff0c;如果上下左右各有$a,b,c,d$棵树&#xff0c;那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散&#xff0c;然后按$x$为第一关键字&#xff0c;$y$为第二关键字&#xff0c;那么同一横坐标的一定在…