扫码时扫一次码,后台运行了两次,是什么问题呢
来源:15-17 前端展示系统补强之消费记录二维码的生成以及消费记录的添加
杰哥大大
2018-03-04
2018-03-04 13:59:24.608[http-nio-8080-exec-1]DEBUGc.h.w.dao.Dao_UserProductMap.insertUserProductMap-==> Parameters: 1(Long), 34(Long), 1(Long), 5(Long), 2018-03-04 13:59:24.543(Timestamp), 1(Integer)
2018-03-04 13:59:24.618[http-nio-8080-exec-3]DEBUGc.h.w.dao.Dao_UserProductMap.insertUserProductMap-==> Parameters: 1(Long), 34(Long), 1(Long), 5(Long), 2018-03-04 13:59:24.54(Timestamp), 1(Integer)
2018-03-04 13:59:24.648[http-nio-8080-exec-1]DEBUGc.h.w.dao.Dao_UserProductMap.insertUserProductMap-<== Updates: 1
2018-03-04 13:59:24.648[http-nio-8080-exec-3]DEBUGc.h.w.dao.Dao_UserProductMap.insertUserProductMap-<== Updates: 1
5回答
-
同学这个去重有很多种方法 只要奏效即可 学到这个章节希望同学能锻炼出举一反三的能力,主观题自由作答,同学可以多理解上面利用session去重或者别的去重方案去解决,去重的核心就是何为重,怎么确定操作来自同一个请求转发两次 我们有什么属性能证明其唯一(userid awardid):)
052018-03-05 -
杰哥大大
提问者
2018-03-04
按照那个调了一下还是不太懂,时间戳也不太懂的用。。。应该如何修改?
/** * 添加消费记录 */ @Override @Transactional public UserProductMapExecution addUserProductMap(UserProductMap userProductMap) throws UserProductMapOperationException { // 空值判断,主要确保顾客Id,店铺Id以及操作员Id非空 if (userProductMap != null && userProductMap.getUser().getUserId() != null && userProductMap.getShop().getShopId() != null && userProductMap.getOperator().getUserId() != null) { // 设定默认值 userProductMap.setCreateTime(new Date()); try { // 添加消费记录 int effectedNum = userProductMapDao.insertUserProductMap(userProductMap); if (effectedNum <= 0) { throw new UserProductMapOperationException("添加消费记录失败"); } // 若本次消费能够积分 if (userProductMap.getPoint() != null && userProductMap.getPoint() > 0) { // 查询该顾客是否在店铺消费过 UserShopMap userShopMap = userShopMapDao.queryUserShopMap(userProductMap.getUser().getUserId(), userProductMap.getShop().getShopId()); if (userShopMap != null && userShopMap.getUserShopId() != null) { // 若之前消费过,即有过积分记录,则进行总积分的更新操作 userShopMap.setPoint(userShopMap.getPoint() + userProductMap.getPoint()); effectedNum = userShopMapDao.updateUserShopMapPoint(userShopMap); if (effectedNum <= 0) { throw new UserProductMapOperationException("更新积分信息失败"); } } else { // 在店铺没有过消费记录,添加一条店铺积分信息(就跟初始化会员一样) userShopMap = compactUserShopMap4Add(userProductMap.getUser().getUserId(), userProductMap.getShop().getShopId(), userProductMap.getPoint()); effectedNum = userShopMapDao.insertUserShopMap(userShopMap); if (effectedNum <= 0) { throw new UserProductMapOperationException("积分信息创建失败"); } } } return new UserProductMapExecution(UserProductMapStateEnum.SUCCESS, userProductMap); } catch (Exception e) { throw new UserProductMapOperationException("添加授权失败:" + e.toString()); } } else { return new UserProductMapExecution(UserProductMapStateEnum.NULL_USERPRODUCT_INFO); } }
00 -
翔仔
2018-03-04
还有一个思路可以在session里用key记录一个用户id,value是访问微信链接回传的时间戳,然后每次回传回来的时候如果是同一个用户,则取出value与当前时间戳判断,如果小于一秒,则认为是重复访问,则丢弃本次操作并更新该key的value为现在时间。这样就能避免两次重复操作。不知道同学能否理解
022018-03-04 -
翔仔
2018-03-04
用IP的对吗 两次不影响就没事 我这边就没影响 确实有时候会有两次
042018-03-04 -
翔仔
2018-03-04
是公网ip还是域名 ip可能由于验证什么的会有两次回发 这是微信本身的问题 不影响使用
012018-03-04
相似问题