crmeb / CRMEB

🔥CRMEB开源商城免费开源多语言商城系统,Tp6框架商城,系统可商用;包含小程序商城、H5商城、公众号商城、PC商城、App,支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面DIY,前后端分离,方便二开,更有详细使用文档、接口文档、数据字典、二开文档/视频教程,欢迎大家提出宝贵意见和建议
http://www.crmeb.com
Apache License 2.0
5.99k stars 1.5k forks source link

后端对事务控制的部分是不是有点问题 #93

Open qw19696 opened 2 hours ago

qw19696 commented 2 hours ago
    Boolean execute = transactionTemplate.execute(e -> {
        updateById(storeOrder);
        if (storeOrder.getPayType().equals(Constants.PAY_TYPE_YUE)) {
            //新增日志
            request.setOrderId(storeOrder.getId());
            userBillService.saveRefundBill(request, user);

            // 更新用户金额
            userService.operationNowMoney(user.getUid(), request.getAmount(), user.getNowMoney(), "add");

            // 退款task
            redisUtil.lPush(Constants.ORDER_TASK_REDIS_KEY_AFTER_REFUND_BY_USER, storeOrder.getId());
        }
        if (storeOrder.getPayType().equals(Constants.PAY_TYPE_WE_CHAT) && request.getAmount().compareTo(BigDecimal.ZERO) == 0) {
            //新增日志
            userBillService.saveRefundBill(request, user);

            // 退款task
            redisUtil.lPush(Constants.ORDER_TASK_REDIS_KEY_AFTER_REFUND_BY_USER, storeOrder.getId());
        }
        return Boolean.TRUE;
    });
    if (!execute) {
        storeOrderStatusService.saveRefund(storeOrder.getId(), request.getAmount(), "失败");
        throw new CrmebException("订单更新失败");
    }

    比如这里,如果execute方法里面执行抛出了异常,这里也没有捕获,整个方法直接就被返回了 
    下面整个记录报错的部分根本就没机会进去
    if (!execute) {
        storeOrderStatusService.saveRefund(storeOrder.getId(), request.getAmount(), "失败");
        throw new CrmebException("订单更新失败");
    }
pk2993635720 commented 2 hours ago

这是来自QQ邮箱的假期自动回复邮件。你好,我最近正在休假中,无法亲自回复你的邮件。我将在假期结束后,尽快给你回复。