| | |
| | | |
| | | /** |
| | | * 小程序取消订单 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R cancel(Long orderId) { |
| | |
| | | return R.fail("订单取消失败"); |
| | | } |
| | | order.setOrderStatus(5); |
| | | //todo 商品销售数量 |
| | | R r = refundPayMoney(order); |
| | | if (200 == r.getCode()) { |
| | | this.updateById(order); |
| | | } |
| | | R r2 = userPointClient.deleteUserPointCopy(orderId, Arrays.asList(8));//门店业绩 |
| | | if (200 != r2.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致 |
| | | throw new RuntimeException("订单取消失败"); |
| | | } |
| | | return r; |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 返回订单支付金额和回退积分和会员等级 |
| | | * |
| | | * @param order |
| | | * 回退积分和返回订单支付金额 |
| | | */ |
| | | public R refundPayMoney(Order order) { |
| | | //开始退款 |
| | | //先回退积分 |
| | | AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); |
| | | if (order.getPoint()>0) { |
| | | //返回订单抵扣积分 |
| | | Integer historicalPoint = appUser.getAvailablePoint(); |
| | | Integer availablePoint = appUser.getAvailablePoint() + order.getPoint();//可用积分 |
| | | Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分 |
| | | |
| | | appUser.setAvailablePoint(availablePoint); |
| | | appUser.setCancelPoint(cancelPoint); |
| | | appUserClient.editAppUserById(appUser); |
| | | //构建积分流水 |
| | | UserPoint userPoint = new UserPoint(); |
| | | userPoint.setType(16);//取消订单 |
| | | userPoint.setHistoricalPoint(historicalPoint); |
| | | userPoint.setVariablePoint(order.getPoint()); |
| | | userPoint.setBalance(availablePoint); |
| | | userPoint.setCreateTime(LocalDateTime.now()); |
| | | userPoint.setAppUserId(order.getAppUserId()); |
| | | userPoint.setObjectId(order.getId()); |
| | | userPointClient.saveUserPoint(userPoint); |
| | | } |
| | | |
| | | BigDecimal paymentAmount = order.getPaymentAmount(); |
| | | AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); |
| | | |
| | | if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0 |
| | | //微信退款 |
| | | RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); |
| | | if ("100".equals(refund.getRa_Status())) { |
| | | order.setRefundStatus(1); |
| | | return R.ok(); |
| | | } else { |
| | | return R.fail(refund.getRc_CodeMsg()); |
| | | if (!"100".equals(refund.getRa_Status())) { |
| | | return R.fail(refund.getRc_CodeMsg());//退款失败 |
| | | } |
| | | } |
| | | |
| | | if (0 != order.getPoint()) {//使用的积分是否为0 |
| | | Integer lavePoint = appUser.getAvailablePoint(); |
| | | //积分退款 |
| | | appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint()); |
| | | appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint()); |
| | | UserPoint userPoint1 = new UserPoint(); |
| | | userPoint1.setType(11); |
| | | userPoint1.setObjectId(order.getId()); |
| | | List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();//用户积分流水 |
| | | Integer transferablePoint = order.getPoint(); |
| | | if (data.size() > 0) { |
| | | UserPoint userPoint = data.get(0); |
| | | transferablePoint = Integer.valueOf(userPoint.getExtention()); |
| | | } |
| | | |
| | | //构建积分流水明细 |
| | | if (order.getPoint() > 0) { |
| | | UserPoint userPoint = new UserPoint(); |
| | | userPoint.setType(11); |
| | | userPoint.setHistoricalPoint(lavePoint); |
| | | userPoint.setVariablePoint(order.getPoint()); |
| | | userPoint.setBalance(appUser.getAvailablePoint()); |
| | | userPoint.setCreateTime(LocalDateTime.now()); |
| | | userPoint.setAppUserId(order.getAppUserId()); |
| | | userPoint.setObjectId(order.getId()); |
| | | userPointClient.saveUserPoint(userPoint); |
| | | } |
| | | appUserClient.editAppUserById(appUser); |
| | | } |
| | | |
| | | order.setRefundStatus(2); |
| | | order.setRefundTime(LocalDateTime.now()); |
| | | orderMapper.updateById(order); |
| | | //todo 退款后店铺积分流水以及退款前店铺积分流水 |
| | | /* shopPointClient.deleteShopPointCopy(order.getId(), Arrays.asList(1,2,3)); |
| | | shopBalanceStatementClient.deleteShopBalanceStatementCopy(order.getId(), Arrays.asList(1,2,3)); |
| | | appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(order.getId()); |
| | | shopGiveawayTemporaryClient.delShopGiveawayTemporary(order.getId());*/ |
| | | |
| | | //商品销售数量 |
| | | OrderGood orderGood = orderGoodService.getOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId())); |
| | | goodsClient.editGoodsNum(orderGood.getGoodsId(), -1); |
| | | //获取商品json |
| | | Goods good = JSON.parseObject(orderGood.getGoodJson(), Goods.class); |
| | | |
| | | //门店减少冻结资金 即减少余额, 冻结资金=余额-可用资金 |
| | | Shop shop = shopClient.getShopById(order.getShopId()).getData(); |
| | | |
| | | BigDecimal historicalBalance=shop.getBalance();//历史余额 |
| | | BigDecimal variableAmount=good.getSellingPrice();//变动金额 |
| | | BigDecimal balance=shop.getBalance().subtract(good.getSellingPrice());//变动后余额 |
| | | |
| | | shop.setBalance(balance); |
| | | shopClient.updateShop(shop); |
| | | |
| | | //门店余额流水记录 |
| | | ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); |
| | | shopBalanceStatement.setShopId(shop.getId()); |
| | | shopBalanceStatement.setShopName(shop.getName()); |
| | | shopBalanceStatement.setShopManagerName(shop.getShopManager()); |
| | | shopBalanceStatement.setPhone(shop.getPhone()); |
| | | shopBalanceStatement.setType(6);//变更类型,订单退款 |
| | | shopBalanceStatement.setHistoricalBalance(historicalBalance); |
| | | shopBalanceStatement.setVariableAmount(variableAmount); |
| | | shopBalanceStatement.setCreateTime(LocalDateTime.now()); |
| | | shopBalanceStatement.setBalance(balance); |
| | | shopBalanceStatement.setCreateUserId(appUser.getId()); |
| | | shopBalanceStatement.setObjectId(order.getId()); |
| | | shopBalanceStatementClient.saveShopBalanceStatement(shopBalanceStatement); |
| | | |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 取消订单后回调处理 |
| | | * 退款后后回调处理 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 订单支付 |
| | | * todo 用户积分流水情况 |
| | | */ |
| | | @Override |
| | | public R orderPayment(OrderPayment orderPayment) { |
| | |
| | | return R.fail("支付方式不正确"); |
| | | } |
| | | |
| | | //现金支付的订单总金额 |
| | | //订单总金额 |
| | | BigDecimal orderMoney = BigDecimal.ZERO; |
| | | //积分支付的订单积分 |
| | | Integer orderPoint = 0; |
| | |
| | | //判断积分是否为零,积分支付 |
| | | if (0 != order.getPoint()){ |
| | | //积分支付 |
| | | Integer lavePoint = appUser.getAvailablePoint(); |
| | | Integer historicalPoint = appUser.getAvailablePoint();//历史积分 |
| | | Integer availablePoint = historicalPoint - orderPoint;//可用积分 |
| | | Integer exchangePoint = appUser.getExchangePoint() + orderPoint;//兑换商品消费积分 |
| | | //扣减订单支付积分 |
| | | appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);//剩余积分 |
| | | appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);//可用积分 |
| | | |
| | | appUser.setAvailablePoint(availablePoint); |
| | | appUser.setExchangePoint(exchangePoint ); |
| | | //构建积分流水记录 |
| | | if(orderPoint > 0){ |
| | | UserPoint userPoint = new UserPoint(); |
| | | userPoint.setType(11); |
| | | userPoint.setHistoricalPoint(lavePoint); |
| | | userPoint.setVariablePoint(orderPoint); |
| | | userPoint.setBalance(appUser.getAvailablePoint()); |
| | | userPoint.setCreateTime(LocalDateTime.now()); |
| | | userPoint.setAppUserId(appUser.getId()); |
| | | userPoint.setObjectId(order.getId()); |
| | | userPointClient.saveUserPoint(userPoint); |
| | | } |
| | | UserPoint userPoint = new UserPoint(); |
| | | userPoint.setType(4);//兑换商品 |
| | | userPoint.setHistoricalPoint(historicalPoint); |
| | | userPoint.setVariablePoint(orderPoint); |
| | | userPoint.setBalance(availablePoint); |
| | | userPoint.setCreateTime(LocalDateTime.now()); |
| | | userPoint.setAppUserId(appUser.getId()); |
| | | userPoint.setObjectId(order.getId()); |
| | | userPointClient.saveUserPoint(userPoint); |
| | | |
| | | //用户积分变动 |
| | | appUser.setLastShopTime(LocalDateTime.now()); |
| | | appUserClient.editAppUserById(appUser); |
| | | /* //变更等级 |
| | | applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));*/ |
| | | |
| | | |
| | | } |
| | | //判断需要支付的金额是否大于0 |
| | |
| | | //商品销量增加 |
| | | goodsClient.editGoodsNum(orderGood.getGoodsId(), 1); |
| | | |
| | | //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金 |
| | | //门店增加冻结资金 即增加余额, 冻结资金=余额-可用资金 |
| | | Shop shop = shopClient.getShopById(order.getShopId()).getData(); |
| | | BigDecimal historicalBalance=shop.getBalance();//历史余额 |
| | | BigDecimal variableAmount=goods.getSellingPrice();//变动金额 |
| | | BigDecimal balance=shop.getBalance().add(goods.getSellingPrice());//变动后余额 |
| | | |
| | | shop.setBalance(balance); |
| | | shop.setOrderNumber(shop.getOrderNumber()+1); |
| | | shopClient.updateShop(shop); |
| | |
| | | shopBalanceStatement.setPhone(shop.getPhone()); |
| | | shopBalanceStatement.setType(5);//变更类型,订单收入 |
| | | shopBalanceStatement.setHistoricalBalance(historicalBalance); |
| | | shopBalanceStatement.setVariableAmount(goods.getSellingPrice()); |
| | | shopBalanceStatement.setVariableAmount(variableAmount); |
| | | shopBalanceStatement.setCreateTime(LocalDateTime.now()); |
| | | shopBalanceStatement.setBalance(balance); |
| | | shopBalanceStatement.setCreateUserId(appUser.getId()); |
| | |
| | | |
| | | AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); |
| | | BigDecimal paymentMoney = order.getPaymentAmount(); |
| | | //构建积分流水记录 |
| | | //增加用户消费总金额(微信支付金额) |
| | | appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));//消费总金额 |
| | | appUser.setLastShopTime(LocalDateTime.now()); |
| | | appUserClient.editAppUserById(appUser); |
| | |
| | | OrderGood orderGood = orderGoodService.getOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId())); |
| | | //商品销量增加 |
| | | goodsClient.editGoodsNum(orderGood.getGoodsId(), 1); |
| | | Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class); |
| | | |
| | | //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金 |
| | | Shop shop = shopClient.getShopById(order.getShopId()).getData(); |
| | | BigDecimal historicalBalance=shop.getBalance();//历史余额 |
| | | BigDecimal balance=shop.getBalance().add(order.getTotalAmount());//变动后余额 |
| | | BigDecimal variableAmount=goods.getSellingPrice();//变动余额 |
| | | BigDecimal balance=shop.getBalance().add(variableAmount);//变动后余额 |
| | | |
| | | shop.setBalance(balance); |
| | | shop.setOrderNumber(shop.getOrderNumber()+1); |
| | | shopClient.updateShop(shop); |
| | |
| | | shopBalanceStatement.setPhone(shop.getPhone()); |
| | | shopBalanceStatement.setType(5);//变更类型,订单收入 |
| | | shopBalanceStatement.setHistoricalBalance(historicalBalance); |
| | | shopBalanceStatement.setVariableAmount(order.getTotalAmount()); |
| | | shopBalanceStatement.setVariableAmount(variableAmount); |
| | | shopBalanceStatement.setCreateTime(LocalDateTime.now()); |
| | | shopBalanceStatement.setBalance(balance); |
| | | shopBalanceStatement.setCreateUserId(appUser.getId()); |
| | |
| | | |
| | | /** |
| | | * 定时任务关闭订单 |
| | | * todo 关闭订单前,检查是否先支付过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水,门店余额流水的删除 |
| | | */ |
| | | @Override |
| | | public void closeOrder() { |
| | |
| | | log.error("关闭订单失败:{}---->{}", order.getOrderNumber(), JSON.toJSONString(closeOrderResult)); |
| | | } |
| | | redisTemplate.opsForZSet().remove("OrderPayment", order.getOrderNumber()); |
| | | //关闭订单后,检查是否先有过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水的删除 |
| | | if (order.getPoint()>0) { |
| | | //返回订单抵扣积分 |
| | | AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); |
| | | Integer availablePoint = appUser.getAvailablePoint();//可用积分 |
| | | Integer variablePoint = order.getPoint();//变动积分 |
| | | Integer balance = appUser.getAvailablePoint() + order.getPoint();//变动后积分 |
| | | Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分 |
| | | appUser.setAvailablePoint(availablePoint); |
| | | appUser.setCancelPoint(cancelPoint); |
| | | |
| | | //构建积分流水记录 |
| | | UserPoint userPoint = new UserPoint(); |
| | | userPoint.setType(16);//取消订单 |
| | | userPoint.setHistoricalPoint(availablePoint); |
| | | userPoint.setVariablePoint(variablePoint); |
| | | userPoint.setBalance(balance); |
| | | userPoint.setCreateTime(LocalDateTime.now()); |
| | | userPoint.setAppUserId(appUser.getId()); |
| | | userPoint.setObjectId(order.getId()); |
| | | userPointClient.saveUserPoint(userPoint); |
| | | |
| | | appUserClient.editAppUserById(appUser); |
| | | } |
| | | } |
| | | } |
| | | |