业务需求:A、B两个用户的关注/取消关注接口
1.接口文档如下
2.数据库设计如下
3.数据库数据存放如下
由数据库设计文档和数据库存放关系可知,
数据 1000000004 既可以在数据库的A位置,也可以在数据库的B位置。
3.该接口的webservice思路如下
关注/取消关注 用户的思路参数:用户A、用户B、关注/取消关注flagA和B的关系,假设A在数据库的A位置00 A关注B01 B关注A02 A、B相互关注备注:A在数据库的B位置时,如上关系为01、00、02思路如下:0.去数据库查询A、B这两个用户有没有关系(00/01/02)1.点击关注 --说明A和B的关系:1>没有关系;2>B关注A1-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的关系为被关注--即关系为012-3-2 如果A在数据库的B位置,则修改A和B的关系为被关注--即关系为00
4.该接口的java代码如下
@Servicepublic 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); HashMapmap = 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; }}