|
|
@@ -5,7 +5,6 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
@@ -96,7 +95,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.io.Serializable;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
@@ -577,7 +575,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Transactional(propagation = Propagation.SUPPORTS)
|
|
|
@Override
|
|
|
public void updateOrderAfterPaySuccess(TbOrder order) {
|
|
|
String currentTimeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
|
|
@@ -594,15 +591,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
// 用户信息
|
|
|
UserEntity userEntity = userDao.selectById(order.getUserId());
|
|
|
|
|
|
- // 添加消息记录并且进行推送
|
|
|
- MyGlobalThreadPool.execute(() -> {
|
|
|
- try {
|
|
|
- addOrderMessageAndPush(order, goodsShop, mpPushConfig, userEntity);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("订单:{},订单支付成功通知发送失败,失败原因:{}", order.getOrderId(), e);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
// 是否自动接单
|
|
|
boolean autoAccept = goodsShop.getAutoAcceptOrder() != null && goodsShop.getAutoAcceptOrder() == 0;
|
|
|
// 是否预约订单
|
|
|
@@ -618,20 +606,48 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
|
|
|
order.setStatus(7);
|
|
|
}
|
|
|
|
|
|
- // 计算订单顺序号
|
|
|
- order.setOrderSequence(String.format("%04d", selectCurrentOrderSequenceByShopId(order, order.getShopId())));
|
|
|
+ RLock lock = redissonClient.getLock(String.format(RedisKey.UPDATE_ORDER_LOCK, order.getOrderId()));
|
|
|
+ lock.lock();
|
|
|
+ TransactionStatus status = null;
|
|
|
+ try {
|
|
|
+ // 开启编程式事务
|
|
|
+ status = transactionManager.getTransaction(new DefaultTransactionDefinition());
|
|
|
|
|
|
- // 更新订单状态
|
|
|
- updateById(order);
|
|
|
+ // 计算订单顺序号
|
|
|
+ order.setOrderSequence(String.format("%04d", selectCurrentOrderSequenceByShopId(order, order.getShopId())));
|
|
|
+
|
|
|
+ // 更新订单状态
|
|
|
+ updateById(order);
|
|
|
+
|
|
|
+ // 扣减库存
|
|
|
+ this.subStock(order);
|
|
|
|
|
|
- // 扣减库存
|
|
|
- this.subStock(order);
|
|
|
+ // 优惠券变成已使用状态
|
|
|
+ updateCouponState(order);
|
|
|
|
|
|
- // 优惠券变成已使用状态
|
|
|
- updateCouponState(order);
|
|
|
+ // 如果是支付宝或者微信支付,用户钱包新增消费记录
|
|
|
+ addConsumeRecordInUserMoneyDetail(order);
|
|
|
|
|
|
- // 如果是支付宝或者微信支付,用户钱包新增消费记录
|
|
|
- addConsumeRecordInUserMoneyDetail(order);
|
|
|
+ // 在锁中提交事务
|
|
|
+ transactionManager.commit(status);
|
|
|
+ } catch (Exception e) {
|
|
|
+ if (ObjectUtil.isNotNull(status)) {
|
|
|
+ transactionManager.rollback(status);
|
|
|
+ }
|
|
|
+ log.error("订单【{}】支付成功状态修改失败,异常信息【{}】", order.getOrderId(), e.getMessage());
|
|
|
+ throw new SqxException("订单状态修改失败," + e);
|
|
|
+ } finally {
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加消息记录并且进行推送
|
|
|
+ MyGlobalThreadPool.execute(() -> {
|
|
|
+ try {
|
|
|
+ addOrderMessageAndPush(order, goodsShop, mpPushConfig, userEntity);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("订单:{},订单支付成功通知发送失败,失败原因:{}", order.getOrderId(), e);
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
// 已接单状态的订单生成跑腿订单
|
|
|
if (order.getStatus() == 6) {
|