业务需求:A、B两个用户的关注/取消关注接口

1.接口文档如下

2.数据库设计如下

3.数据库数据存放如下

由数据库设计文档和数据库存放关系可知,

数据 1000000004 既可以在数据库的A位置,也可以在数据库的B位置。

3.该接口的webservice思路如下

关注/取消关注 用户的思路

参数:用户A、用户B、关注/取消关注flag

A和B的关系,假设A在数据库的A位置

00 A关注B

01 B关注A

02 A、B相互关注

备注:A在数据库的B位置时,如上关系为01、00、02

思路如下:

0.去数据库查询A、B这两个用户有没有关系(00/01/02)

1.点击关注 --说明A和B的关系:1>没有关系;2>B关注A

1-1.判断A和B的关系

1-2.如果没有关系,则添加一条数据

1-3.如果有关系,则将关系改为相互关注(这个要结合实际,如果A已经关注了B,则A不能在关注B了,即进来

的肯定是B点击了关注A)

2.点击取消关注 --说明A和B的关系:1>A关注B;2>A、B相互关注

2-1.判断A和B的关系

2-2.如果是关注(结合实际,只有相互关注和关注两种关系),则取消关注,即删除这条数据

2-3.如果是相互关注,则需要判断A和B的位置

2-3-1 如果A在数据库的A位置,则修改A和B的关系为被关注--即关系为01

2-3-2 如果A在数据库的B位置,则修改A和B的关系为被关注--即关系为00

4.该接口的java代码如下

@Service

public class UserFollowServiceImpl implements UserFollowService {

@Autowired

private UserFollowMapper userFollowMapper;

/**

* 关注(取消关注)用户

*

* @param userIdB

*            被关注者id

* @param userId

*            用户Id

* @param flag

*            0:关注 1:取消关注

*/

@Override

public ResultObject updateOrInsertUserFocus(UserFollowVO userFollowVO)

throws DataAccessException {

boolean needBreak = false;

String userId = userFollowVO.getUserId();

String userIdB = userFollowVO.getUserIdB();

String flag = userFollowVO.getFlag();

ResultObject ro = new ResultObject();

ro.setResultCode(ResultCode.FAILED);

if (StringUtils.isBlank(userIdB) || StringUtils.isBlank(userId)

|| StringUtils.isBlank(flag)) {

ro.setResultCode(ResultCode.FAILED);

ro.setResultMsg(ResultMsg.MSG_PARAM_ERROR);

needBreak = true;

}

if (!needBreak) {

// 当前时间

String timeNow = Utils.getSysTime();

// 查找双方关系

UserFollow userFollow = userFollowMapper.updateOrInsertUserFocus(

userId, userIdB);

// 点击需要关注

if (flag.equals(Constant.FOLLOW)) {

if (userFollow != null) {

// 已经存在关注关系,改为相互关注

userFollowMapper.updUserFocus(userId, userIdB,

Constant.A_BOTH_B, timeNow);

int temp = userFollowMapper.selectCount(userIdB);

ro.setData(temp);

HashMap map = new HashMap<>();

map.put("focusNums", temp);

ro.setData(map);

ro.setResultCode(ResultCode.SUCCESS);

} else {

// 不存在关注关系,改为单方面关注

userFollowMapper.insertUserFocus(userId, userIdB,

Constant.A_FOLLOW_B, timeNow);

int temp = userFollowMapper.selectCount(userIdB);

ro.setData(temp);

HashMap map = new HashMap<>();

map.put("focusNums", temp);

ro.setData(map);

ro.setResultCode(ResultCode.SUCCESS);

}

ro.setResultMsg(ResultMsg.MSG_FOLLOW_SUCCESS);

} else {

// 取消关注

if (userFollow != null) {

// 相互关注

if (userFollow.getFollowFlag().equals(Constant.A_BOTH_B)) {

// 判断操作用户是否在A位置

int count = userFollowMapper.getUserIdPosition(userId,

userIdB);

// 如果关注者在A位置,被关注这在B位置,改为'01'

if (count > 0) {

userFollowMapper.updUserFocus(userId, userIdB,

Constant.B_FOLLOW_A, timeNow);

int temp = userFollowMapper.selectCount(userIdB);

HashMap map = new HashMap<>();

map.put("focusNums", temp);

ro.setData(map);

ro.setResultCode(ResultCode.SUCCESS);

} else {

// 如果关注者在B位置,被关注这在A位置,改为'00'

userFollowMapper.updUserFocus(userId, userIdB,

Constant.A_FOLLOW_B, timeNow);

int temp = userFollowMapper.selectCount(userIdB);

HashMap map = new HashMap<>();

map.put("focusNums", temp);

ro.setData(map);

ro.setResultCode(ResultCode.SUCCESS);

}

} else {

// 单方面关注,删除关系

userFollowMapper.deleteUserFocus(userId, userIdB);

int temp = userFollowMapper.selectCount(userIdB);

HashMap map = new HashMap<>();

map.put("focusNums", temp);

ro.setData(map);

ro.setResultCode(ResultCode.SUCCESS);

}

ro.setResultMsg(ResultMsg.MSG_CANCLE_FOLLOW_SUCCESS);

}

}

}

return ro;

}

}

Java相互关注_java --关注/取消关注相关推荐

  1. 微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)

    前言: 事件处理是非常重要的,这一章讲讲常见的事件处理 1.关注/取消关注 2.菜单点击 事件类型介绍: 在微信中有事件请求是消息请求中的一种.请求类型为:event 而event事件类型又分多种事件 ...

  2. 微信小程序实现关注与取消关注功能

    一.数据库设计(3张) users_fans users表 mapper.xml设计: //增加粉丝数目<update id="addFansCount" parameter ...

  3. 菜单点击/关注/取消关注

    事件处理是非常重要的,这一章讲讲常见的事件处理 1.关注/取消关注 2.菜单点击 事件类型介绍: 在微信中有事件请求是消息请求中的一种.请求类型为:event 而event事件类型又分多种事件类型,具 ...

  4. php 取消关注,用户关注、取消关注接口实现

    交互原理 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL.方便开发者给用户下发欢迎消息或者做帐号的解绑. 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次 ...

  5. (仿牛客社区项目)Java开发笔记4.4:实现关注、取消关注功能

    实现关注.取消关注功能 1.util包 RedisKeyUtil类中添加getFollowerKey方法. package com.gerrard.community.util;public clas ...

  6. Java 微信关注/取消关注事件

    Java 微信关注/取消关注事件 一.需求.思路 二.文档.配置 配置步骤1 配置步骤2 三.代码 1.引入依赖包 2.controller 3.封装消息对象 4.service.解密 5.工具包 一 ...

  7. java 微信接入 关注和取消关注

    //最基础的servlet 进行接收 package com.cq.wechat;import java.io.IOException; import java.io.PrintWriter; imp ...

  8. 微信公众号关注/取消关注事件推送开发记录

    一.奉上官方文档 关注/取消关注事件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/doc/offiaccount/Message_Managem ...

  9. 4-5:关注,取消关注

    需求 开发关注.取消关注功能. 统计用户的关注数.粉丝数. 关键 若A关注了B,则A是B的Follower (粉丝),B是A的Followee (目标). 关注的目标可以是用户.帖子.题目等,在实现时 ...

  10. Spring项目接入微信关注/取消关注事件监控(含代码demo,自动回复图文)

    微信官方文档地址:关注/取消关注事件 | 微信开放文档 以上,文档提到:用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL,接下来我们就来看看这个URL怎么配置. [配置步骤]: ...

最新文章

  1. centos下axel安装与使用
  2. 各种flash的不同
  3. 35岁以后,不要成为程序员中的钻石
  4. 多变异位自适应遗传算法(MMAdapGA)的算法原理、算法步骤和matlab实现
  5. 【云栖大会】探索云时代下的游戏开发模式
  6. linux下解压.tar.bz2文件
  7. linux系统中如何查看日志 (常用命令2)
  8. Django-ORM数据库操作
  9. 最简单 NDK 样例
  10. Microsoft Deployment Toolkit 2008部署操作系统系列(一)
  11. wps个人免费版支持宏操作
  12. dhl:搜狗五笔输入法
  13. 三种时空模式下的全脑功能组织
  14. OpenCV识别图形以及常用函数处理
  15. php太平洋时间转成北京时间,太平洋时间和北京时间换算(太平洋时间现在几点)...
  16. 使用 matplotlib 绘制文氏图(venn)
  17. Leslie cheung's Speech
  18. MySQL主从复制以及会出现的幺蛾子问题、解决方法
  19. React基础(壹)———脚手架项目初始化
  20. c语言void结尾,C语言中void*详解及应用

热门文章

  1. PHP学习笔记(二)——行云博客
  2. 遭遇XP-664129A8.EXE
  3. 【SEED Labs 2.0】TCP Attacks Lab
  4. 【网络攻防技术】实验九——嗅探与欺骗实验
  5. shell中用grep查找并且不输出_grep无法查找shell传过来的变量?先注意一下文本格式吧!...
  6. 快播将关闭QVOD服务器 清理低俗内容与涉盗版内容
  7. Pale Moon 15.3 - Firefox“苍月”优化版发布
  8. 车载syu一android密码,教务系统找回密码
  9. golang 隐藏启动其他程序,包含cmd窗口(黑窗口)程序,GUI程序隐藏
  10. Glide4 设置默认图片和错误图片,即设置占位图