Explorar el Código

Accept Merge Request #44: (dev-小程序端增加商户手机号查询 -> dev-minio)

Merge Request: 上线提交

Created By: @万新亮
Accepted By: @万新亮
URL: https://chuanghaikeji.coding.net/p/moxuanyunshangwaimai/d/backend/git/merge/44
万新亮 hace 1 año
padre
commit
c9097cf09f

+ 12 - 0
src/main/java/com/sqx/modules/app/controller/UserController.java

@@ -1,5 +1,6 @@
 package com.sqx.modules.app.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.app.entity.UserEntity;
@@ -9,6 +10,8 @@ import com.sqx.modules.app.response.UserMessageResponse;
 import com.sqx.modules.app.service.UserMoneyDetailsService;
 import com.sqx.modules.app.service.UserMoneyService;
 import com.sqx.modules.app.service.UserService;
+import com.sqx.modules.goods.entity.GoodsShop;
+import com.sqx.modules.goods.service.GoodsShopService;
 import com.sqx.modules.pay.service.PayDetailsService;
 import icu.xuyijie.secureapi.annotation.DecryptParam;
 import io.swagger.annotations.Api;
@@ -46,6 +49,8 @@ public class UserController {
     private UserMoneyService userMoneyService;
     @Autowired
     private PayDetailsService payDetailsService;
+    @Autowired
+    private GoodsShopService goodsShopService;
 
     @RequestMapping(value = "/{userId}", method = RequestMethod.GET)
     @ApiOperation("获取用户详细信息")
@@ -216,5 +221,12 @@ public class UserController {
         return Result.error("用户不存在!");
     }
 
+    @RequestMapping(value = "/selectShopPhoneByShopId", method = RequestMethod.POST)
+    @ApiOperation("商家端查询店铺手机号")
+    @ResponseBody
+    public Result selectShopPhoneByUserId(Long shopId) {
+        GoodsShop goodsShop=goodsShopService.getById(shopId);
+        return Result.success().put("data", goodsShop.getPhone());
+    }
 
 }

+ 38 - 22
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -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) {

+ 1 - 1
src/main/resources/mapper/dataCentre/dataCenterMapper.xml

@@ -178,7 +178,7 @@
         i.user_province as userProvince, i.user_city as userCity, i.user_district as userDistrict,rs.station_name as stationName
         FROM tb_indent i left join tb_user u on i.rider_user_id = u.user_id
         left join rider_station rs on u.rider_station_id=rs.id
-        WHERE i.rider_user_id IS NOT NULL
+        WHERE i.rider_user_id IS NOT NULL and i.indent_state = 6
         <if test="address!=null and address!=''">
                 and (i.user_province like concat('%',#{address},'%') or i.user_city like concat('%',#{address},'%') or
                 i.user_district like concat('%',#{address},'%'))