|
@@ -230,110 +230,110 @@ public class FsIntegralCartServiceImpl extends ServiceImpl<FsIntegralCartMapper,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// /**
|
|
|
|
|
-// * 从购物车生成订单,兑换按钮(走的以前逻辑,没有重新设计)
|
|
|
|
|
-// *
|
|
|
|
|
-// * @param param
|
|
|
|
|
-// * @param userId
|
|
|
|
|
-// * @return
|
|
|
|
|
-// */
|
|
|
|
|
-// @Override
|
|
|
|
|
-// public R createOrderFromCart(CreateOrderFromCartParm param, Long userId) {
|
|
|
|
|
-// RedissonClient redissonClient = SpringUtils.getBean(RedissonClient.class);
|
|
|
|
|
-// String lockKey = "fsIntegralCartOrderCreate:" + userId;
|
|
|
|
|
-// RLock lock = redissonClient.getLock(lockKey);
|
|
|
|
|
-// try {
|
|
|
|
|
-// // 尝试获取锁,最多等待3秒,持有锁时间最多30秒
|
|
|
|
|
-// boolean isLocked = lock.tryLock(3, 10, TimeUnit.SECONDS);
|
|
|
|
|
-// if (!isLocked) {
|
|
|
|
|
-// return R.error("系统繁忙,请稍后再试");
|
|
|
|
|
-// }
|
|
|
|
|
-// FsUser user = userMapper.selectFsUserByUserId(userId);
|
|
|
|
|
-// FsUserAddress address = fsUserAddressMapper.selectFsUserAddressByAddressId(param.getAddressId());
|
|
|
|
|
-// List<FsIntegralGoodsVo> fsIntegralGoods = fsIntegralGoodsMapper.selectAllByGoodsIds(new HashSet<>(param.getGoodsId()));
|
|
|
|
|
-// List<FsIntegralCart> existingCart = baseMapper.selectList(Wrappers.<FsIntegralCart>lambdaQuery().eq(FsIntegralCart::getUserId, userId).in(FsIntegralCart::getGoodsId, param.getGoodsId()));
|
|
|
|
|
-// Map<Long, Integer> collect = existingCart.stream().collect(Collectors.groupingBy(FsIntegralCart::getGoodsId, Collectors.summingInt(FsIntegralCart::getCartNum)));
|
|
|
|
|
-// StringBuilder quantity = new StringBuilder();
|
|
|
|
|
-// for (FsIntegralGoodsVo fsIntegralGood : fsIntegralGoods) {
|
|
|
|
|
-// Integer integer = collect.get(fsIntegralGood.getGoodsId());
|
|
|
|
|
-// if (fsIntegralGood.getStock() < integer) {
|
|
|
|
|
-// throw new ServiceException(String.format("%d库存不足,兑换失败", fsIntegralGood.getGoodsName()));
|
|
|
|
|
-// }
|
|
|
|
|
-// if (fsIntegralGood.getStatus() != 1) {
|
|
|
|
|
-// this.remove(Wrappers.<FsIntegralCart>lambdaQuery().eq(FsIntegralCart::getUserId, userId).eq(FsIntegralCart::getGoodsId, fsIntegralGood.getGoodsId()));
|
|
|
|
|
-// log.info("清除下架商品,userId:{}, goodsId:{}", userId, fsIntegralGood.getGoodsId());
|
|
|
|
|
-// throw new ServiceException(String.format("商品[名称:%d]已下架,兑换失败", fsIntegralGood.getGoodsName()));
|
|
|
|
|
-// }
|
|
|
|
|
-// fsIntegralGood.setIntegralByNum(integer * fsIntegralGood.getIntegral());
|
|
|
|
|
-// fsIntegralGood.setQuantity(integer);
|
|
|
|
|
-// if (quantity.length() > 0) {
|
|
|
|
|
-// quantity.append(",");
|
|
|
|
|
-// }
|
|
|
|
|
-// quantity.append(ObjectUtils.isNotEmpty(integer) ? integer : "0");
|
|
|
|
|
-// }
|
|
|
|
|
-// // 商品总的积分
|
|
|
|
|
-// Long goodsIntegral = fsIntegralGoods.stream().filter(n -> ObjectUtils.isNotEmpty(n.getIntegralByNum())).mapToLong(FsIntegralGoodsVo::getIntegralByNum).sum();
|
|
|
|
|
-// if (user.getIntegral() < goodsIntegral) {
|
|
|
|
|
-// throw new ServiceException("用户积分不足,兑换失败");
|
|
|
|
|
-// }
|
|
|
|
|
-// String barCode = fsIntegralGoods.stream().map(FsIntegralGoodsVo::getBarCode).collect(Collectors.joining(","));
|
|
|
|
|
-// String Integral = fsIntegralGoods.stream().map(m -> m.getIntegral().toString()).collect(Collectors.joining(","));
|
|
|
|
|
-// String orderSn = OrderCodeUtils.getOrderSn();
|
|
|
|
|
-// if (StringUtils.isEmpty(orderSn)) {
|
|
|
|
|
-// throw new ServiceException("订单生成失败,请重试");
|
|
|
|
|
-// }
|
|
|
|
|
-// FsIntegralOrder order = new FsIntegralOrder();
|
|
|
|
|
-// order.setOrderCode(orderSn);
|
|
|
|
|
-// order.setUserId(user.getUserId());
|
|
|
|
|
-// order.setStatus(1);
|
|
|
|
|
-// order.setBarCodeCart(barCode);
|
|
|
|
|
-// order.setIntegral(goodsIntegral.toString());
|
|
|
|
|
-// order.setIntegralByCart(Integral);
|
|
|
|
|
-// order.setItemCartJson(ObjectUtils.isNotEmpty(fsIntegralGoods) ? JSONUtil.toJsonStr(fsIntegralGoods) : null);
|
|
|
|
|
-// order.setUserName(address.getRealName());
|
|
|
|
|
-// order.setUserAddress(address.getProvince() + address.getCity() + address.getDistrict() + address.getDetail());
|
|
|
|
|
-// order.setUserPhone(address.getPhone());
|
|
|
|
|
-// order.setCreateTime(new Date());
|
|
|
|
|
-// order.setQuantityCart(quantity.toString());
|
|
|
|
|
-// if (fsIntegralOrderMapper.insertFsIntegralOrder(order) > 0) {
|
|
|
|
|
-// //写入日志
|
|
|
|
|
-// FsUser userMap = new FsUser();
|
|
|
|
|
-// userMap.setUserId(user.getUserId());
|
|
|
|
|
-// // 可消费积分
|
|
|
|
|
-// long consumer = user.getIntegral() - user.getWithdrawIntegral();
|
|
|
|
|
-// if (consumer < goodsIntegral) {
|
|
|
|
|
-// // 扣除完可消费积分后,剩余的积分
|
|
|
|
|
-// long extra = goodsIntegral - consumer;
|
|
|
|
|
-// // 可提现积分扣除 剩余积分
|
|
|
|
|
-// Long withdrawIntegral = user.getWithdrawIntegral() - extra;
|
|
|
|
|
-// userMap.setIntegral(withdrawIntegral);
|
|
|
|
|
-// userMap.setWithdrawIntegral(withdrawIntegral);
|
|
|
|
|
-// } else {
|
|
|
|
|
-// userMap.setIntegral(user.getIntegral() - goodsIntegral);
|
|
|
|
|
-// }
|
|
|
|
|
-// userMapper.updateFsUser(userMap);
|
|
|
|
|
-// FsUserIntegralLogs logs = new FsUserIntegralLogs();
|
|
|
|
|
-// logs.setIntegral(-goodsIntegral);
|
|
|
|
|
-// logs.setUserId(order.getUserId());
|
|
|
|
|
-// logs.setBalance(userMap.getIntegral());
|
|
|
|
|
-// logs.setLogType(5);
|
|
|
|
|
-// logs.setBusinessId(order.getOrderId().toString());
|
|
|
|
|
-// logs.setCreateTime(new Date());
|
|
|
|
|
-// logs.setNickName(user.getNickName());
|
|
|
|
|
-// logs.setPhone(user.getPhone());
|
|
|
|
|
-// integralLogsService.insertFsUserIntegralLogs(logs);
|
|
|
|
|
-// //清空购物车对应商品
|
|
|
|
|
-// this.remove(Wrappers.<FsIntegralCart>lambdaQuery().eq(FsIntegralCart::getUserId, userId).in(FsIntegralCart::getGoodsId, param.getGoodsId()));
|
|
|
|
|
-// return R.ok("兑换成功").put("order", order);
|
|
|
|
|
-// } else {
|
|
|
|
|
-// return R.error("订单创建失败");
|
|
|
|
|
-// }
|
|
|
|
|
-// } catch (Exception e) {
|
|
|
|
|
-// return R.error(e.getMessage());
|
|
|
|
|
-// } finally {
|
|
|
|
|
-// if (lock.isHeldByCurrentThread()) {
|
|
|
|
|
-// lock.unlock();
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 从购物车生成订单,兑换按钮(走的以前逻辑,没有重新设计)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param param
|
|
|
|
|
+ * @param userId
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R createOrderFromCart(CreateOrderFromCartParm param, Long userId) {
|
|
|
|
|
+ RedissonClient redissonClient = SpringUtils.getBean(RedissonClient.class);
|
|
|
|
|
+ String lockKey = "fsIntegralCartOrderCreate:" + userId;
|
|
|
|
|
+ RLock lock = redissonClient.getLock(lockKey);
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 尝试获取锁,最多等待3秒,持有锁时间最多30秒
|
|
|
|
|
+ boolean isLocked = lock.tryLock(3, 10, TimeUnit.SECONDS);
|
|
|
|
|
+ if (!isLocked) {
|
|
|
|
|
+ return R.error("系统繁忙,请稍后再试");
|
|
|
|
|
+ }
|
|
|
|
|
+ FsUser user = userMapper.selectFsUserByUserId(userId);
|
|
|
|
|
+ FsUserAddress address = fsUserAddressMapper.selectFsUserAddressByAddressId(param.getAddressId());
|
|
|
|
|
+ List<FsIntegralGoodsVo> fsIntegralGoods = fsIntegralGoodsMapper.selectAllByGoodsIds(new HashSet<>(param.getGoodsId()));
|
|
|
|
|
+ List<FsIntegralCart> existingCart = baseMapper.selectList(Wrappers.<FsIntegralCart>lambdaQuery().eq(FsIntegralCart::getUserId, userId).in(FsIntegralCart::getGoodsId, param.getGoodsId()));
|
|
|
|
|
+ Map<Long, Integer> collect = existingCart.stream().collect(Collectors.groupingBy(FsIntegralCart::getGoodsId, Collectors.summingInt(FsIntegralCart::getCartNum)));
|
|
|
|
|
+ StringBuilder quantity = new StringBuilder();
|
|
|
|
|
+ for (FsIntegralGoodsVo fsIntegralGood : fsIntegralGoods) {
|
|
|
|
|
+ Integer integer = collect.get(fsIntegralGood.getGoodsId());
|
|
|
|
|
+ if (fsIntegralGood.getStock() < integer) {
|
|
|
|
|
+ throw new ServiceException(String.format("%d库存不足,兑换失败", fsIntegralGood.getGoodsName()));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (fsIntegralGood.getStatus() != 1) {
|
|
|
|
|
+ this.remove(Wrappers.<FsIntegralCart>lambdaQuery().eq(FsIntegralCart::getUserId, userId).eq(FsIntegralCart::getGoodsId, fsIntegralGood.getGoodsId()));
|
|
|
|
|
+ log.info("清除下架商品,userId:{}, goodsId:{}", userId, fsIntegralGood.getGoodsId());
|
|
|
|
|
+ throw new ServiceException(String.format("商品[名称:%d]已下架,兑换失败", fsIntegralGood.getGoodsName()));
|
|
|
|
|
+ }
|
|
|
|
|
+ fsIntegralGood.setIntegralByNum(integer * fsIntegralGood.getIntegral());
|
|
|
|
|
+ fsIntegralGood.setQuantity(integer);
|
|
|
|
|
+ if (quantity.length() > 0) {
|
|
|
|
|
+ quantity.append(",");
|
|
|
|
|
+ }
|
|
|
|
|
+ quantity.append(ObjectUtils.isNotEmpty(integer) ? integer : "0");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 商品总的积分
|
|
|
|
|
+ Long goodsIntegral = fsIntegralGoods.stream().filter(n -> ObjectUtils.isNotEmpty(n.getIntegralByNum())).mapToLong(FsIntegralGoodsVo::getIntegralByNum).sum();
|
|
|
|
|
+ if (user.getIntegral() < goodsIntegral) {
|
|
|
|
|
+ throw new ServiceException("用户积分不足,兑换失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ String barCode = fsIntegralGoods.stream().map(FsIntegralGoodsVo::getBarCode).collect(Collectors.joining(","));
|
|
|
|
|
+ String Integral = fsIntegralGoods.stream().map(m -> m.getIntegral().toString()).collect(Collectors.joining(","));
|
|
|
|
|
+ String orderSn = OrderCodeUtils.getOrderSn();
|
|
|
|
|
+ if (StringUtils.isEmpty(orderSn)) {
|
|
|
|
|
+ throw new ServiceException("订单生成失败,请重试");
|
|
|
|
|
+ }
|
|
|
|
|
+ FsIntegralOrder order = new FsIntegralOrder();
|
|
|
|
|
+ order.setOrderCode(orderSn);
|
|
|
|
|
+ order.setUserId(user.getUserId());
|
|
|
|
|
+ order.setStatus(1);
|
|
|
|
|
+ order.setBarCodeCart(barCode);
|
|
|
|
|
+ order.setIntegral(goodsIntegral.toString());
|
|
|
|
|
+ order.setIntegralByCart(Integral);
|
|
|
|
|
+ order.setItemCartJson(ObjectUtils.isNotEmpty(fsIntegralGoods) ? JSONUtil.toJsonStr(fsIntegralGoods) : null);
|
|
|
|
|
+ order.setUserName(address.getRealName());
|
|
|
|
|
+ order.setUserAddress(address.getProvince() + address.getCity() + address.getDistrict() + address.getDetail());
|
|
|
|
|
+ order.setUserPhone(address.getPhone());
|
|
|
|
|
+ order.setCreateTime(new Date());
|
|
|
|
|
+ order.setQuantityCart(quantity.toString());
|
|
|
|
|
+ if (fsIntegralOrderMapper.insertFsIntegralOrder(order) > 0) {
|
|
|
|
|
+ //写入日志
|
|
|
|
|
+ FsUser userMap = new FsUser();
|
|
|
|
|
+ userMap.setUserId(user.getUserId());
|
|
|
|
|
+ // 可消费积分
|
|
|
|
|
+ long consumer = user.getIntegral() - user.getWithdrawIntegral();
|
|
|
|
|
+ if (consumer < goodsIntegral) {
|
|
|
|
|
+ // 扣除完可消费积分后,剩余的积分
|
|
|
|
|
+ long extra = goodsIntegral - consumer;
|
|
|
|
|
+ // 可提现积分扣除 剩余积分
|
|
|
|
|
+ Long withdrawIntegral = user.getWithdrawIntegral() - extra;
|
|
|
|
|
+ userMap.setIntegral(withdrawIntegral);
|
|
|
|
|
+ userMap.setWithdrawIntegral(withdrawIntegral);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ userMap.setIntegral(user.getIntegral() - goodsIntegral);
|
|
|
|
|
+ }
|
|
|
|
|
+ userMapper.updateFsUser(userMap);
|
|
|
|
|
+ FsUserIntegralLogs logs = new FsUserIntegralLogs();
|
|
|
|
|
+ logs.setIntegral(-goodsIntegral);
|
|
|
|
|
+ logs.setUserId(order.getUserId());
|
|
|
|
|
+ logs.setBalance(userMap.getIntegral());
|
|
|
|
|
+ logs.setLogType(5);
|
|
|
|
|
+ logs.setBusinessId(order.getOrderId().toString());
|
|
|
|
|
+ logs.setCreateTime(new Date());
|
|
|
|
|
+ logs.setNickName(user.getNickName());
|
|
|
|
|
+ logs.setPhone(user.getPhone());
|
|
|
|
|
+ integralLogsService.insertFsUserIntegralLogs(logs);
|
|
|
|
|
+ //清空购物车对应商品
|
|
|
|
|
+ this.remove(Wrappers.<FsIntegralCart>lambdaQuery().eq(FsIntegralCart::getUserId, userId).in(FsIntegralCart::getGoodsId, param.getGoodsId()));
|
|
|
|
|
+ return R.ok("兑换成功").put("order", order);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.error("订单创建失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ return R.error(e.getMessage());
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ if (lock.isHeldByCurrentThread()) {
|
|
|
|
|
+ lock.unlock();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|