Parcourir la source

达人动态代码优化

qxy il y a 1 mois
Parent
commit
cc3d409358

+ 196 - 35
alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java

@@ -605,51 +605,212 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
     }
 
 
+//    public R countGmv(Integer dynamicsId, String finalPrice, Integer orderId, Integer expertId, Integer expertOrderId) {
+//        LambdaQueryWrapper<LifeUserExpertWorks> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        lambdaQueryWrapper.eq(LifeUserExpertWorks::getExpertId, expertId);
+//        lambdaQueryWrapper.eq(LifeUserExpertWorks::getOrderId, expertOrderId);
+//        lambdaQueryWrapper.eq(LifeUserExpertWorks::getDynamicsId, dynamicsId);
+//        lambdaQueryWrapper.eq(LifeUserExpertWorks::getDeleteFlag, 0);
+//        LifeUserExpertWorks lifeUserExpertWorks = lifeUserExpertWorksMapper.selectOne(lambdaQueryWrapper);
+//        //用户购买订单 订单金额加入达人gmv中
+//        if (lifeUserExpertWorks != null) {
+//            BigDecimal price = new BigDecimal(finalPrice);
+//            lifeUserExpertWorks.setOrderGmv(lifeUserExpertWorks.getOrderGmv().add(price));
+//            lifeUserExpertWorksMapper.updateById(lifeUserExpertWorks);
+//        }
+//
+//        LambdaQueryWrapper<LifeUserExpertOrder> lifeUserExpertOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        lifeUserExpertOrderLambdaQueryWrapper.eq(LifeUserExpertOrder::getId, expertOrderId);
+//        lifeUserExpertOrderLambdaQueryWrapper.eq(LifeUserExpertOrder::getDeleteFlag, 0);
+//        LifeUserExpertOrder lifeUserExpertOrder = lifeUserExpertOrderMapper.selectOne(lifeUserExpertOrderLambdaQueryWrapper);
+//
+//        //查询达人购买商户订单状态不是已完成
+//        //判断达人动态浏览数和gmv 是否达到达人设置的限定值
+//        if (lifeUserExpertOrder != null && lifeUserExpertOrder.getStatus() != 5) {
+//            LifeUserExpertWorks lifeUserExpertWorks1 = lifeUserExpertWorksMapper.selectOne(new LambdaQueryWrapper<LifeUserExpertWorks>()
+//                    .eq(LifeUserExpertWorks::getOrderId, expertOrderId)
+//                    .eq(LifeUserExpertWorks::getExpertId, expertId)
+//                    .eq(LifeUserExpertWorks::getDynamicsId, dynamicsId)
+//                    .eq(LifeUserExpertWorks::getDeleteFlag, 0));
+//            LifeUserDynamics lifeUserDynamics = lifeUserDynamicsMapper.selectOne(new LambdaQueryWrapper<LifeUserDynamics>()
+//                    .eq(LifeUserDynamics::getId, dynamicsId)
+//                    .eq(LifeUserDynamics::getDeleteFlag, 0));
+//            if (lifeUserDynamics != null) {
+//                if (lifeUserExpertWorks1.getOrderGmv().compareTo(lifeUserExpertOrder.getOrderGmv()) >= 0
+//                        && lifeUserDynamics.getLiulanCount() >= lifeUserExpertOrder.getOrderPlayCount()) {
+//                    lifeUserExpertOrder.setStatus(5);
+//                    lifeUserExpertOrderMapper.updateById(lifeUserExpertOrder);
+//                }
+//            }
+//        }
+//        //用户订单字段设置达人订单id 标识 该用户是从达人gmv链接进入购买订单的
+//        LambdaQueryWrapper<LifeUserOrder> userOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        userOrderLambdaQueryWrapper.eq(LifeUserOrder::getId, orderId);
+//        LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(userOrderLambdaQueryWrapper);
+//        lifeUserOrder.setExpertOrderId(expertOrderId);
+//        lifeUserOrderMapper.updateById(lifeUserOrder);
+//        return R.success("请求成功");
+//    }
+
+    /**
+     * 增加gmv金额
+     * qxy
+     * @param dynamicsId
+     * @param finalPrice
+     * @param orderId
+     * @param expertId
+     * @param expertOrderId
+     * @return
+     */
     public R countGmv(Integer dynamicsId, String finalPrice, Integer orderId, Integer expertId, Integer expertOrderId) {
-        LambdaQueryWrapper<LifeUserExpertWorks> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(LifeUserExpertWorks::getExpertId, expertId);
-        lambdaQueryWrapper.eq(LifeUserExpertWorks::getOrderId, expertOrderId);
-        lambdaQueryWrapper.eq(LifeUserExpertWorks::getDynamicsId, dynamicsId);
-        lambdaQueryWrapper.eq(LifeUserExpertWorks::getDeleteFlag, 0);
-        LifeUserExpertWorks lifeUserExpertWorks = lifeUserExpertWorksMapper.selectOne(lambdaQueryWrapper);
-        //用户购买订单 订单金额加入达人gmv中
+        // 参数校验
+        if (dynamicsId == null
+                || finalPrice == null
+                || orderId == null
+                || expertId == null
+                || expertOrderId == null) {
+            return R.fail("参数不能为空");
+        }
+
+        try {
+            // 1. 更新达人作品GMV
+            updateExpertWorksGmv(dynamicsId, finalPrice, expertId, expertOrderId);
+
+            // 2. 检查并更新达人订单状态
+            checkAndUpdateExpertOrderStatus(dynamicsId, expertId, expertOrderId);
+
+            // 3. 更新用户订单的达人订单ID标识
+            updateUserOrderExpertId(orderId, expertOrderId);
+
+            return R.success("请求成功");
+
+        } catch (Exception e) {
+            //错误日志
+            log.error("更新GMV失败,dynamicsId: {}, orderId: {}" +
+                            ", expertId: {}, expertOrderId: {}"
+                             , e);
+
+            return R.fail("更新GMV失败:" + e.getMessage());
+        }
+    }
+
+    /**
+     * 更新达人作品GMV
+     * qxy
+     * @param dynamicsId
+     * @param finalPrice
+     * @param expertId
+     * @param expertOrderId
+     */
+    private void updateExpertWorksGmv(Integer dynamicsId,
+                                      String finalPrice,
+                                      Integer expertId,
+                                      Integer expertOrderId) {
+        //查询达人作品
+        LambdaQueryWrapper<LifeUserExpertWorks> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LifeUserExpertWorks::getExpertId, expertId)
+                .eq(LifeUserExpertWorks::getOrderId, expertOrderId)
+                .eq(LifeUserExpertWorks::getDynamicsId, dynamicsId)
+                .eq(LifeUserExpertWorks::getDeleteFlag, 0);
+
+        LifeUserExpertWorks lifeUserExpertWorks = lifeUserExpertWorksMapper.selectOne(queryWrapper);
+
         if (lifeUserExpertWorks != null) {
+            //达人作品GMV字段 存入 订单金额
             BigDecimal price = new BigDecimal(finalPrice);
-            lifeUserExpertWorks.setOrderGmv(lifeUserExpertWorks.getOrderGmv().add(price));
+            BigDecimal currentGmv = lifeUserExpertWorks.getOrderGmv();
+            if (currentGmv == null) {
+                currentGmv = BigDecimal.ZERO;
+            }
+            lifeUserExpertWorks.setOrderGmv(currentGmv.add(price));
             lifeUserExpertWorksMapper.updateById(lifeUserExpertWorks);
         }
+    }
 
-        LambdaQueryWrapper<LifeUserExpertOrder> lifeUserExpertOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lifeUserExpertOrderLambdaQueryWrapper.eq(LifeUserExpertOrder::getId, expertOrderId);
-        lifeUserExpertOrderLambdaQueryWrapper.eq(LifeUserExpertOrder::getDeleteFlag, 0);
-        LifeUserExpertOrder lifeUserExpertOrder = lifeUserExpertOrderMapper.selectOne(lifeUserExpertOrderLambdaQueryWrapper);
+    /**
+     * 检查并更新达人订单状态
+     * 当GMV和浏览数达到设定值时,将订单状态更新为已完成
+     * qxy
+     * @param dynamicsId
+     * @param expertId
+     * @param expertOrderId
+     */
+    private void checkAndUpdateExpertOrderStatus(Integer dynamicsId, Integer expertId, Integer expertOrderId) {
+        // 查询达人订单
+        LambdaQueryWrapper<LifeUserExpertOrder> orderQueryWrapper = new LambdaQueryWrapper<>();
+        orderQueryWrapper.eq(LifeUserExpertOrder::getId, expertOrderId)
+                .eq(LifeUserExpertOrder::getDeleteFlag, 0);
+        LifeUserExpertOrder lifeUserExpertOrder = lifeUserExpertOrderMapper.selectOne(orderQueryWrapper);
+
+        // 如果订单不存在或已经是已完成状态,则不需要处理
+        if (lifeUserExpertOrder == null || lifeUserExpertOrder.getStatus().equals(5)) {
+            return;
+        }
 
-        //查询达人购买商户订单状态不是已完成
-        //判断达人动态浏览数和gmv 是否达到达人设置的限定值
-        if (lifeUserExpertOrder != null && lifeUserExpertOrder.getStatus() != 5) {
-            LifeUserExpertWorks lifeUserExpertWorks1 = lifeUserExpertWorksMapper.selectOne(new LambdaQueryWrapper<LifeUserExpertWorks>()
-                    .eq(LifeUserExpertWorks::getOrderId, expertOrderId)
-                    .eq(LifeUserExpertWorks::getExpertId, expertId)
-                    .eq(LifeUserExpertWorks::getDynamicsId, dynamicsId)
-                    .eq(LifeUserExpertWorks::getDeleteFlag, 0));
-            LifeUserDynamics lifeUserDynamics = lifeUserDynamicsMapper.selectOne(new LambdaQueryWrapper<LifeUserDynamics>()
-                    .eq(LifeUserDynamics::getId, dynamicsId)
-                    .eq(LifeUserDynamics::getDeleteFlag, 0));
-            if (lifeUserDynamics != null) {
-                if (lifeUserExpertWorks1.getOrderGmv().compareTo(lifeUserExpertOrder.getOrderGmv()) >= 0
-                        && lifeUserDynamics.getLiulanCount() >= lifeUserExpertOrder.getOrderPlayCount()) {
-                    lifeUserExpertOrder.setStatus(5);
-                    lifeUserExpertOrderMapper.updateById(lifeUserExpertOrder);
-                }
-            }
+        // 查询达人作品(复用查询条件,避免重复查询)
+        LambdaQueryWrapper<LifeUserExpertWorks> worksQueryWrapper = new LambdaQueryWrapper<>();
+        worksQueryWrapper.eq(LifeUserExpertWorks::getOrderId, expertOrderId)
+                .eq(LifeUserExpertWorks::getExpertId, expertId)
+                .eq(LifeUserExpertWorks::getDynamicsId, dynamicsId)
+                .eq(LifeUserExpertWorks::getDeleteFlag, 0);
+        LifeUserExpertWorks lifeUserExpertWorks = lifeUserExpertWorksMapper.selectOne(worksQueryWrapper);
+
+        if (lifeUserExpertWorks == null) {
+            return;
+        }
+
+        // 查询达人动态
+        LambdaQueryWrapper<LifeUserDynamics> dynamicsQueryWrapper = new LambdaQueryWrapper<>();
+        dynamicsQueryWrapper.eq(LifeUserDynamics::getId, dynamicsId)
+                .eq(LifeUserDynamics::getDeleteFlag, 0);
+        LifeUserDynamics lifeUserDynamics = lifeUserDynamicsMapper.selectOne(dynamicsQueryWrapper);
+
+        if (lifeUserDynamics == null) {
+            return;
+        }
+
+        // 判断是否达到完成条件:GMV达到设定值 且 浏览数达到设定值
+        //达人作品gmv (每笔订单金额累加)
+        BigDecimal currentGmv = lifeUserExpertWorks.getOrderGmv();
+
+        //达人订单gmv (设定值)
+        BigDecimal targetGmv = lifeUserExpertOrder.getOrderGmv();
+
+        //达人动态正常浏览量
+        Integer currentViewCount = lifeUserDynamics.getLiulanCount();
+
+        //达人订单浏览量 (设定值)
+        Integer targetViewCount = lifeUserExpertOrder.getOrderPlayCount();
+
+        if (currentGmv != null && targetGmv != null
+                && currentGmv.compareTo(targetGmv) >= 0
+                && currentViewCount != null && targetViewCount != null
+                && currentViewCount >= targetViewCount) {
+            lifeUserExpertOrder.setStatus(5);
+            lifeUserExpertOrderMapper.updateById(lifeUserExpertOrder);
+        }
+    }
+
+    /**
+     * 更新用户订单的达人订单ID标识
+     * 标识该用户是从达人GMV链接进入购买订单的
+     * qxy
+     * @param orderId
+     * @param expertOrderId
+     */
+    private void updateUserOrderExpertId(Integer orderId, Integer expertOrderId) {
+
+        LambdaQueryWrapper<LifeUserOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LifeUserOrder::getId, orderId);
+        LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(queryWrapper);
+
+        if (lifeUserOrder == null) {
+            log.warn("用户订单不存在,orderId: {}" + orderId);
+            return;
         }
-        //用户订单字段设置达人订单id 标识 该用户是从达人gmv链接进入购买订单的
-        LambdaQueryWrapper<LifeUserOrder> userOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        userOrderLambdaQueryWrapper.eq(LifeUserOrder::getId, orderId);
-        LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(userOrderLambdaQueryWrapper);
+
         lifeUserOrder.setExpertOrderId(expertOrderId);
         lifeUserOrderMapper.updateById(lifeUserOrder);
-        return R.success("请求成功");
     }
 
     public boolean addUserStoreBrowseNumber(LifeBrowseRecord lifeBrowseRecord) {