From 91e9c006a2ce431a5916b137974bd004622eb9fa Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期三, 09 四月 2025 20:15:45 +0800 Subject: [PATCH] 用户端代码调整测试 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 189 +++++++++++++++++++++++++++-------------------- 1 files changed, 109 insertions(+), 80 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 73c5254..501d173 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -318,9 +318,6 @@ /** * 小程序取消订单 - * - * @param orderId - * @return */ @Override public R cancel(Long orderId) { @@ -339,14 +336,9 @@ 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; } @@ -379,71 +371,82 @@ /** - * 返回订单支付金额和回退积分和会员等级 - * - * @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 */ @@ -664,7 +667,6 @@ /** * 订单支付 - * todo 用户积分流水情况 */ @Override public R orderPayment(OrderPayment orderPayment) { @@ -712,7 +714,7 @@ return R.fail("支付方式不正确"); } - //现金支付的订单总金额 + //订单总金额 BigDecimal orderMoney = BigDecimal.ZERO; //积分支付的订单积分 Integer orderPoint = 0; @@ -793,28 +795,27 @@ //判断积分是否为零,积分支付 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 @@ -842,10 +843,12 @@ //商品销量增加 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); @@ -858,7 +861,7 @@ 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()); @@ -879,7 +882,7 @@ 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); @@ -895,11 +898,14 @@ 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); @@ -912,7 +918,7 @@ 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()); @@ -924,7 +930,6 @@ /** * 定时任务关闭订单 - * todo 关闭订单前,检查是否先支付过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水,门店余额流水的删除 */ @Override public void closeOrder() { @@ -946,6 +951,30 @@ 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); + } } } -- Gitblit v1.7.1