Jelajahi Sumber

Merge remote-tracking branch 'origin/package' into package

bilingfeng 1 tahun lalu
induk
melakukan
d90a344105

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineUserLog.java

@@ -81,4 +81,6 @@ public class GameOceanengineUserLog implements Serializable {
      */
     private Integer backStatus;
 
+    private LocalDateTime createTime;
+
 }

+ 3 - 3
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java

@@ -12,7 +12,8 @@ import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
 
 @Slf4j
 @DubboService
@@ -23,7 +24,6 @@ public class TtMiniGameBackRpcImpl implements ITtMiniGameBackRpc {
     private IGameOceanengineOrderLogService gameOceanengineOrderLogService;
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public ResultVO<Boolean> userActiveReport(TtUserActiveRpcDTO dto) {
         GameOceanengineUserLog userLog = GameOceanengineUserLog.builder()
                 .appId(dto.getWechatAppId())
@@ -40,13 +40,13 @@ public class TtMiniGameBackRpcImpl implements ITtMiniGameBackRpc {
                 .reqId(dto.getReqId())
                 .activeTime(dto.getActiveTime())
                 .backStatus(BackStatusEnum.NO.getBackStatus())
+                .createTime(LocalDateTime.now())
                 .build();
         gameOceanengineUserLogService.save(userLog);
         return ResultVO.ok(gameOceanengineUserLogService.callback(userLog, false));
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public ResultVO<Boolean> orderReport(TtOrderRpcDTO dto) {
         GameOceanengineOrderLog orderLog = GameOceanengineOrderLog.builder()
                 .appId(dto.getWechatAppId())

+ 2 - 4
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java

@@ -62,7 +62,7 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                 doBack = true;
             } else {
                 GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
-                doBack = BackPolicyUtil.backOrder(gameBackPolicy, orderLog.getAmount(),
+                doBack = BackPolicyUtil.backOrder(orderLog.getOrderNo(), gameBackPolicy, orderLog.getAmount(),
                         () -> {
                             return count(new LambdaQueryWrapper<GameOceanengineOrderLog>()
                                     .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
@@ -115,9 +115,7 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
 
     @Override
     public boolean oceanengineOrderReport(List<Long> ids) {
-        listByIds(ids).stream()
-                .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(orderLog -> callback(orderLog, true));
+        listByIds(ids).forEach(orderLog -> callback(orderLog, true));
         return true;
     }
 

+ 2 - 3
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineUserLogServiceImpl.java

@@ -58,14 +58,13 @@ public class GameOceanengineUserLogServiceImpl extends ServiceImpl<GameOceanengi
                 .eq(null != dto.getBackStatus(), GameOceanengineUserLog::getBackStatus, dto.getBackStatus())
                 .eq(null != dto.getProjectId(), GameOceanengineUserLog::getProjectId, dto.getProjectId())
                 .eq(null != dto.getPromotionId(), GameOceanengineUserLog::getPromotionId, dto.getPromotionId())
+                .orderByDesc(GameOceanengineUserLog::getCreateTime)
         ).convert(item -> BeanUtil.copy(item, GameOceanengineUserLogVO.class));
     }
 
     @Override
     public boolean oceanengineUserReport(List<Long> ids) {
-        baseMapper.selectBatchIds(ids).stream()
-                .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(oceanengineUserLog -> callback(oceanengineUserLog,true));
+        listByIds(ids).forEach(userLog -> callback(userLog, true));
         return true;
     }
 

+ 3 - 2
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java

@@ -11,6 +11,7 @@ import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
 import com.zanxiang.module.util.DateUtil;
+import com.zanxiang.module.util.JsonUtil;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -93,13 +94,13 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
                         .build()))
                 .build();
         try {
-            ResponseEntity<String> response = restTemplate.postForEntity("http://tracking.e.qq.com/conv", request, String.class);
+            ResponseEntity<Map> response = restTemplate.postForEntity("http://tracking.e.qq.com/conv", request, Map.class);
             if (response.getStatusCode().is2xxSuccessful()) {
                 backLog.setBackStatus(BackStatusEnum.SUCCESS.getBackStatus());
                 return;
             }
             backLog.setBackStatus(BackStatusEnum.FAILED.getBackStatus());
-            backLog.setErrMsg(response.getBody());
+            backLog.setErrMsg(JsonUtil.toString(response.getBody()));
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             backLog.setBackStatus(BackStatusEnum.FAILED.getBackStatus());

+ 8 - 4
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java

@@ -62,7 +62,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
             doBack = true;
         } else {
             GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
-            doBack = BackPolicyUtil.backOrder(gameBackPolicy, orderLog.getRechargeMoney(),
+            doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
                     () -> count(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
                             .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
                             .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
@@ -109,9 +109,13 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
 
     @Override
     public boolean doReport(List<Long> orderLogIds) {
-        listByIds(orderLogIds).stream()
-                .filter(item -> !item.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(orderLog -> gameTencentMiniGameBackLogService.orderBack(orderLog));
+        listByIds(orderLogIds).forEach(orderLog -> {
+                    BackStatusEnum backStatus = gameTencentMiniGameBackLogService.orderBack(orderLog);
+                    update(new LambdaUpdateWrapper<GameTencentMiniGameOrder>()
+                            .set(GameTencentMiniGameOrder::getBackStatus, backStatus.getBackStatus())
+                            .eq(GameTencentMiniGameOrder::getId, orderLog.getId())
+                    );
+                });
         return true;
     }
 

+ 7 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.java

@@ -64,7 +64,13 @@ public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentM
 
     @Override
     public boolean doReport(List<Long> userLogIds) {
-        listByIds(userLogIds).forEach(userLog -> doCallback(userLog, true));
+        listByIds(userLogIds).forEach(userLog -> {
+            BackStatusEnum backStatus = doCallback(userLog, true);
+            update(new LambdaUpdateWrapper<GameTencentMiniGameUser>()
+                    .set(GameTencentMiniGameUser::getBackStatus, backStatus.getBackStatus())
+                    .eq(GameTencentMiniGameUser::getId, userLog.getId())
+            );
+        });
         return true;
     }
 

+ 10 - 7
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java

@@ -65,9 +65,8 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
         if (mustBack) {
             doBack = true;
         } else {
-            if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue()) &&
-                    !Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
-                // 只要回传 下单、支付行为
+            if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
+                // 只要回传 支付行为
                 return false;
             }
         }
@@ -76,7 +75,7 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
             doBack = true;
         } else {
             GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
-            doBack = BackPolicyUtil.backOrder(gameBackPolicy, orderLog.getRechargeMoney(),
+            doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
                     () -> count(new LambdaQueryWrapper<GameTencentOrder>()
                             .eq(GameTencentOrder::getGameId, orderLog.getGameId())
                             .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
@@ -127,9 +126,13 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
 
     @Override
     public boolean tencentOrderReport(List<Long> ids) {
-        listByIds(ids).stream()
-                .filter(item -> !item.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(this::doCallback);
+        listByIds(ids).forEach(orderLog -> {
+            BackStatusEnum backStatus = doCallback(orderLog);
+            update(new LambdaUpdateWrapper<GameTencentOrder>()
+                    .set(GameTencentOrder::getIsBack, backStatus.getBackStatus())
+                    .eq(GameTencentOrder::getId, orderLog.getId())
+            );
+        });
         return true;
     }
 

+ 7 - 3
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentUserServiceImpl.java

@@ -82,9 +82,13 @@ public class GameTencentUserServiceImpl extends ServiceImpl<GameTencentUserMappe
 
     @Override
     public boolean tencentUserReport(List<Long> ids) {
-        listByIds(ids).stream()
-                .filter(item -> !item.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus()))
-                .forEach(gameTencentUser -> doCallback(gameTencentUser, true));
+        listByIds(ids).forEach(userLog -> {
+            BackStatusEnum backStatus = doCallback(userLog, true);
+            update(new LambdaUpdateWrapper<GameTencentUser>()
+                    .set(GameTencentUser::getIsBack, backStatus.getBackStatus())
+                    .eq(GameTencentUser::getId, userLog.getId())
+            );
+        });
         return true;
     }
 

+ 15 - 2
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/utils/BackPolicyUtil.java

@@ -3,12 +3,16 @@ package com.zanxiang.game.back.serve.utils;
 import com.github.sd4324530.jtuple.Tuple2;
 import com.github.sd4324530.jtuple.Tuples;
 import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
+import com.zanxiang.module.util.NumberUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.RandomUtils;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Objects;
 import java.util.function.Function;
 
+@Slf4j
 public class BackPolicyUtil {
     private static final long[] RECHARGE_LEVEL = {12 * 100L, 30 * 100L, 50 * 100L, 98 * 100L, 198 * 100L, 328 * 100L, 649 * 100L, 998 * 100L, 2998 * 100L};
 
@@ -24,8 +28,9 @@ public class BackPolicyUtil {
      * @param lastBackFunction 在指定最近订单数量内是否有订单回传过
      * @return <是否回传, 回传金额>
      */
-    public static boolean backOrder(GameBackPolicy gameBackPolicy, long rechargeMoney, FirstOrder firstOrder, Function<Integer, Integer> lastBackFunction) {
+    public static boolean backOrder(String orderId, GameBackPolicy gameBackPolicy, long rechargeMoney, FirstOrder firstOrder, Function<Integer, Integer> lastBackFunction) {
         if (null == gameBackPolicy) {
+            log.error("订单 id[{}]通过回传策略[null]判断后,是否回传:{}.", orderId, true);
             return true;
         }
         Integer firstType;
@@ -73,14 +78,22 @@ public class BackPolicyUtil {
             String[] temp = backRate.split(":");
             int backCount = Integer.parseInt(temp[0]);
             int ignoreCount = Integer.parseInt(temp[1]);
+            if (backCount == 0) {
+                log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), false);
+                return false;
+            }
             if (ignoreCount == 0) {
+                log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), true);
                 return true;
             }
             int isBackCount = lastBackFunction.apply(backCount + ignoreCount - 1);
+            log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), (isBackCount < backCount));
             return isBackCount < backCount;
         } else if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_RANDOM_RATE)) {
             // 随机概率回传
-            return RandomUtils.nextInt(0, 100) <= Integer.parseInt(backRate);
+            boolean isBack = RandomUtils.nextInt(0, 100) <= NumberUtil.multiply100(new BigDecimal(backRate)).intValue();
+            log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), isBack);
+            return isBack;
         } else {
             throw new RuntimeException("回传策略[" + gameBackPolicy.getId() + "]配置错误,未知的回传类型:" + backType);
         }