Bläddra i källkod

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

Letianhua 1 år sedan
förälder
incheckning
2748fefe8b

+ 5 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/BackPolicyController.java

@@ -88,6 +88,11 @@ public class BackPolicyController {
                 throw new BaseException("首充的大额金额必须大于小额金额");
                 throw new BaseException("首充的大额金额必须大于小额金额");
             }
             }
         }
         }
+        if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+            if (dto.getLargeAmount() == null || dto.getLargeAmount().compareTo(BigDecimal.ZERO) <= 0) {
+                throw new BaseException("大额判定金额错误!!!");
+            }
+        }
         checkDownLevel(dto.getFirstDownLevel());
         checkDownLevel(dto.getFirstDownLevel());
         checkDownLevel(dto.getRechargeDownLevel());
         checkDownLevel(dto.getRechargeDownLevel());
         checkDownLevel(dto.getMarkUpDownLevel());
         checkDownLevel(dto.getMarkUpDownLevel());

+ 12 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameBackPolicyDTO.java

@@ -244,5 +244,17 @@ public class GameBackPolicyDTO implements Serializable {
     @ApiModelProperty("补单-按用户订单数卡单")
     @ApiModelProperty("补单-按用户订单数卡单")
     private Integer markUpBackCountOfUser;
     private Integer markUpBackCountOfUser;
 
 
+    /**
+     * backUnit == 大额、小额时生效
+     * 大额判断金额
+     */
+    private BigDecimal largeAmount;
+
+    /**
+     * backUnit == 大额、小额时生效
+     * 超小额判断金额(小于等于改值不回传)
+     */
+    private BigDecimal supperSmallAmount;
+
 
 
 }
 }

+ 14 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameBackPolicy.java

@@ -42,6 +42,7 @@ public class GameBackPolicy implements Serializable {
 
 
     /**
     /**
      * 首充/日-小额判定金额(小于等于)
      * 首充/日-小额判定金额(小于等于)
+     * 大额/小额-累充判定金额(小于等于)
      */
      */
     private Long firstMinMoney;
     private Long firstMinMoney;
 
 
@@ -151,7 +152,7 @@ public class GameBackPolicy implements Serializable {
     private Long regPayIntervalTime;
     private Long regPayIntervalTime;
 
 
     /**
     /**
-     * 回传类型(1:首单、次单、2:首日、次日)
+     * BackUnitEnum
      */
      */
     private Integer backUnit;
     private Integer backUnit;
 
 
@@ -209,5 +210,17 @@ public class GameBackPolicy implements Serializable {
      */
      */
     private Integer markUpBackCountOfUser;
     private Integer markUpBackCountOfUser;
 
 
+    /**
+     * backUnit == 大额、小额时生效
+     * 大额判断金额
+     */
+    private Long largeAmount;
+
+    /**
+     * backUnit == 大额、小额时生效
+     * 超小额判断金额(小于等于改值不回传)
+     */
+    private Long supperSmallAmount;
+
 
 
 }
 }

+ 5 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/enums/BackUnitEnum.java

@@ -21,7 +21,11 @@ public enum BackUnitEnum {
     /**
     /**
      * 48、其它时间
      * 48、其它时间
      */
      */
-    UNIT_TIME_2DAY(4);
+    UNIT_TIME_2DAY(4),
+    /**
+     * 小额、大额累充回传方式
+     */
+    LARGE_AMOUNT(5);
 
 
     private final Integer value;
     private final Integer value;
 
 

+ 12 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameBackPolicyVO.java

@@ -230,6 +230,18 @@ public class GameBackPolicyVO implements Serializable {
     @ApiModelProperty("补单-按用户订单数卡单")
     @ApiModelProperty("补单-按用户订单数卡单")
     private Integer markUpBackCountOfUser;
     private Integer markUpBackCountOfUser;
 
 
+    /**
+     * backUnit == 大额、小额时生效
+     * 大额判断金额
+     */
+    private BigDecimal largeAmount;
+
+    /**
+     * backUnit == 大额、小额时生效
+     * 超小额判断金额(小于等于改值不回传)
+     */
+    private BigDecimal supperSmallAmount;
+
     @Data
     @Data
     @NoArgsConstructor
     @NoArgsConstructor
     @AllArgsConstructor
     @AllArgsConstructor

+ 6 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java

@@ -119,6 +119,8 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .markUpOrderOtherMoneyRate(dto.getMarkUpOrderOtherMoneyRate())
                 .markUpOrderOtherMoneyRate(dto.getMarkUpOrderOtherMoneyRate())
                 .markUpDownLevel(downLevelToString(dto.getMarkUpDownLevel()))
                 .markUpDownLevel(downLevelToString(dto.getMarkUpDownLevel()))
                 .markUpBackCountOfUser(dto.getMarkUpBackCountOfUser())
                 .markUpBackCountOfUser(dto.getMarkUpBackCountOfUser())
+                .largeAmount(dto.getLargeAmount() == null ? null : NumberUtil.multiply100(dto.getLargeAmount()).longValue())
+                .supperSmallAmount(dto.getSupperSmallAmount() == null ? null : NumberUtil.multiply100(dto.getSupperSmallAmount()).longValue())
                 .build();
                 .build();
         return gameBackPolicyService.save(backPolicy);
         return gameBackPolicyService.save(backPolicy);
     }
     }
@@ -169,6 +171,8 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .markUpOrderOtherMoneyRate(dto.getMarkUpOrderOtherMoneyRate())
                 .markUpOrderOtherMoneyRate(dto.getMarkUpOrderOtherMoneyRate())
                 .markUpDownLevel(downLevelToString(dto.getMarkUpDownLevel()))
                 .markUpDownLevel(downLevelToString(dto.getMarkUpDownLevel()))
                 .markUpBackCountOfUser(dto.getMarkUpBackCountOfUser())
                 .markUpBackCountOfUser(dto.getMarkUpBackCountOfUser())
+                .largeAmount(dto.getLargeAmount() == null ? null : NumberUtil.multiply100(dto.getLargeAmount()).longValue())
+                .supperSmallAmount(dto.getSupperSmallAmount() == null ? null : NumberUtil.multiply100(dto.getSupperSmallAmount()).longValue())
                 .build();
                 .build();
 
 
         return gameBackPolicyService.updateById(backPolicy);
         return gameBackPolicyService.updateById(backPolicy);
@@ -192,6 +196,8 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
             return null;
             return null;
         }
         }
         GameBackPolicyVO vo = BeanUtil.copy(gameBackPolicy, GameBackPolicyVO.class);
         GameBackPolicyVO vo = BeanUtil.copy(gameBackPolicy, GameBackPolicyVO.class);
+        vo.setLargeAmount(gameBackPolicy.getLargeAmount() == null ? null : NumberUtil.divide100(new BigDecimal(gameBackPolicy.getLargeAmount())));
+        vo.setSupperSmallAmount(gameBackPolicy.getSupperSmallAmount() == null ? null : NumberUtil.divide100(new BigDecimal(gameBackPolicy.getSupperSmallAmount())));
         vo.setFirstMinMoney(NumberUtil.divide100(new BigDecimal(gameBackPolicy.getFirstMinMoney())));
         vo.setFirstMinMoney(NumberUtil.divide100(new BigDecimal(gameBackPolicy.getFirstMinMoney())));
         vo.setFirstMaxMoney(NumberUtil.divide100(new BigDecimal(gameBackPolicy.getFirstMaxMoney())));
         vo.setFirstMaxMoney(NumberUtil.divide100(new BigDecimal(gameBackPolicy.getFirstMaxMoney())));
         vo.setRechargeMinMoney(NumberUtil.divide100(new BigDecimal(gameBackPolicy.getRechargeMinMoney())));
         vo.setRechargeMinMoney(NumberUtil.divide100(new BigDecimal(gameBackPolicy.getRechargeMinMoney())));

+ 37 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.back.serve.service.impl;
 package com.zanxiang.game.back.serve.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -139,6 +140,17 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                                         .orderByDesc(GameOceanengineOrderLog::getCreateTime)
                                         .orderByDesc(GameOceanengineOrderLog::getCreateTime)
                                         .last("limit " + numberOfRound)
                                         .last("limit " + numberOfRound)
                                 ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
                                 ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+                            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                                return list(new LambdaQueryWrapper<GameOceanengineOrderLog>()
+                                        .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
+                                        .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
+                                        .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
+                                        .eq(GameOceanengineOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
+                                        .orderByDesc(GameOceanengineOrderLog::getCreateTime)
+                                        .last("limit " + numberOfRound)
+                                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
                             } else {
                             } else {
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                             }
                             }
@@ -201,6 +213,17 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                                         .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 48")
                                         .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 48")
                                         .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
                                         .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
                                 );
                                 );
+                            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                                return count(new LambdaQueryWrapper<GameOceanengineOrderLog>()
+                                        .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
+                                        .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
+                                        .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
+                                        .eq(GameOceanengineOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .eq(GameOceanengineOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                                        .eq(GameOceanengineOrderLog::getOpenId, userId)
+                                        .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
+                                );
                             } else {
                             } else {
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                             }
                             }
@@ -236,6 +259,20 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                                     .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
                                     .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
                             );
                             );
                         }
                         }
+
+                        @Override
+                        public Long totalRechargeAmount() {
+                            return getOne(new QueryWrapper<GameOceanengineOrderLog>()
+                                    .select("ifnull(sum(amount), 0) as amount").lambda()
+                                    .eq(GameOceanengineOrderLog::getGameId, orderLog.getGameId())
+                                    .eq(GameOceanengineOrderLog::getAppId, orderLog.getAppId())
+                                    .eq(GameOceanengineOrderLog::getAccountId, orderLog.getAccountId())
+                                    .eq(GameOceanengineOrderLog::getBackPolicyId, gameBackPolicy.getId())
+                                    .eq(GameOceanengineOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                    .eq(GameOceanengineOrderLog::getOpenId, orderLog.getOpenId())
+                                    .ne(GameOceanengineOrderLog::getOrderNo, orderLog.getOrderNo())
+                            ).getAmount();
+                        }
                     });
                     });
             doBack = backInfo.first;
             doBack = backInfo.first;
             backMoney = backInfo.second;
             backMoney = backInfo.second;

+ 36 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java

@@ -145,6 +145,17 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                                         .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
                                         .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
                                         .last("limit " + numberOfRound)
                                         .last("limit " + numberOfRound)
                                 ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
                                 ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+                            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                                return list(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                                        .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
+                                        .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
+                                        .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
+                                        .eq(GameTencentMiniGameOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
+                                        .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
+                                        .last("limit " + numberOfRound)
+                                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
                             } else {
                             } else {
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                             }
                             }
@@ -207,6 +218,17 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                                         .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
                                         .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
                                         .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
                                         .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
                                 );
                                 );
+                            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                                return count(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                                        .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
+                                        .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
+                                        .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
+                                        .eq(GameTencentMiniGameOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .eq(GameTencentMiniGameOrder::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                                        .eq(GameTencentMiniGameOrder::getWechatOpenid, userId)
+                                        .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
+                                );
                             } else {
                             } else {
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                             }
                             }
@@ -242,6 +264,20 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                                     .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
                                     .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
                             );
                             );
                         }
                         }
+
+                        @Override
+                        public Long totalRechargeAmount() {
+                            return getOne(new QueryWrapper<GameTencentMiniGameOrder>()
+                                    .select("ifnull(sum(recharge_money), 0) as recharge_money").lambda()
+                                    .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
+                                    .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
+                                    .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
+                                    .eq(GameTencentMiniGameOrder::getBackPolicyId, gameBackPolicy.getId())
+                                    .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                    .eq(GameTencentMiniGameOrder::getWechatOpenid, orderLog.getWechatOpenid())
+                                    .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
+                            ).getRechargeMoney();
+                        }
                     });
                     });
             doBack = backInfo.first;
             doBack = backInfo.first;
             backMoney = backInfo.second;
             backMoney = backInfo.second;

+ 37 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.back.serve.service.impl;
 package com.zanxiang.game.back.serve.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -149,6 +150,17 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
                                         .orderByDesc(GameTencentOrder::getCreateTime)
                                         .orderByDesc(GameTencentOrder::getCreateTime)
                                         .last("limit " + numberOfRound)
                                         .last("limit " + numberOfRound)
                                 ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
                                 ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
+                            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                                return list(new LambdaQueryWrapper<GameTencentOrder>()
+                                        .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                                        .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                                        .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                                        .eq(GameTencentOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
+                                        .orderByDesc(GameTencentOrder::getCreateTime)
+                                        .last("limit " + numberOfRound)
+                                ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
                             } else {
                             } else {
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                             }
                             }
@@ -211,6 +223,17 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
                                         .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
                                         .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
                                         .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
                                         .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
                                 );
                                 );
+                            } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+                                return count(new LambdaQueryWrapper<GameTencentOrder>()
+                                        .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                                        .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                                        .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                                        .eq(GameTencentOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
+                                        .eq(GameTencentOrder::getWechatOpenid, userId)
+                                        .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
+                                );
                             } else {
                             } else {
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                                 throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
                             }
                             }
@@ -246,6 +269,20 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
                                     .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
                                     .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
                             );
                             );
                         }
                         }
+
+                        @Override
+                        public Long totalRechargeAmount() {
+                            return count(new QueryWrapper<GameTencentOrder>()
+                                    .select("ifnull(sum(recharge_money), 0) as recharge_money").lambda()
+                                    .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                                    .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                                    .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                                    .eq(GameTencentOrder::getBackPolicyId, gameBackPolicy.getId())
+                                    .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                    .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
+                                    .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
+                            );
+                        }
                     });
                     });
             doBack = backInfo.first;
             doBack = backInfo.first;
             backMoney = backInfo.second;
             backMoney = backInfo.second;

+ 29 - 33
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/utils/BackPolicyUtil.java

@@ -42,7 +42,16 @@ public class BackPolicyUtil {
             log.error("订单 id[{}]找不到回传策略,默认回传", orderId);
             log.error("订单 id[{}]找不到回传策略,默认回传", orderId);
             return Tuples.tuple(Boolean.TRUE, rechargeMoney, "没有回传策略");
             return Tuples.tuple(Boolean.TRUE, rechargeMoney, "没有回传策略");
         }
         }
+        if (gameBackPolicy.getSupperSmallAmount() != null && gameBackPolicy.getSupperSmallAmount() >= rechargeMoney) {
+            log.error("订单 id[{}]被判定为超小额订单({}),默认不回传", orderId, gameBackPolicy.getSupperSmallAmount());
+            return Tuples.tuple(Boolean.TRUE, rechargeMoney, "超小额订单(<=" + gameBackPolicy.getSupperSmallAmount() + "),不回传");
+        }
         BackUnitEnum backUnit = gameBackPolicy.getBackUnit() == null ? BackUnitEnum.UNIT_ONCE : BackUnitEnum.getByValue(gameBackPolicy.getBackUnit());
         BackUnitEnum backUnit = gameBackPolicy.getBackUnit() == null ? BackUnitEnum.UNIT_ONCE : BackUnitEnum.getByValue(gameBackPolicy.getBackUnit());
+        Long totalRechargeAmount = null;
+        if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+            Long totalAmount = backPolicyCheck.totalRechargeAmount();
+            totalAmount = totalAmount == null ? rechargeMoney : totalAmount + rechargeMoney;
+        }
 
 
         Boolean firstPolicy = null;
         Boolean firstPolicy = null;
         Long markUpTime = null;
         Long markUpTime = null;
@@ -51,14 +60,15 @@ public class BackPolicyUtil {
         if (gameBackPolicy.getRegPayIntervalTime() != null
         if (gameBackPolicy.getRegPayIntervalTime() != null
                 && ((DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60) > gameBackPolicy.getRegPayIntervalTime()) {
                 && ((DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60) > gameBackPolicy.getRegPayIntervalTime()) {
             // 补单
             // 补单
-            log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,走补单逻辑 {}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime());
+            log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,走补单逻辑 {}, money: {}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime(), totalRechargeAmount);
             if (gameBackPolicy.getMarkUpOrder() != null && gameBackPolicy.getMarkUpOrder()) {
             if (gameBackPolicy.getMarkUpOrder() != null && gameBackPolicy.getMarkUpOrder()) {
+                long money = backUnit == BackUnitEnum.LARGE_AMOUNT ? totalRechargeAmount : rechargeMoney;
                 markUpTime = gameBackPolicy.getRegPayIntervalTime();
                 markUpTime = gameBackPolicy.getRegPayIntervalTime();
-                if (rechargeMoney <= gameBackPolicy.getMarkUpOrderMinMoney()) {
+                if (money <= gameBackPolicy.getMarkUpOrderMinMoney()) {
                     // 小额
                     // 小额
                     backType = gameBackPolicy.getMarkUpOrderMinMoneyType();
                     backType = gameBackPolicy.getMarkUpOrderMinMoneyType();
                     backRate = gameBackPolicy.getMarkUpOrderMinMoneyRate();
                     backRate = gameBackPolicy.getMarkUpOrderMinMoneyRate();
-                } else if (rechargeMoney >= gameBackPolicy.getMarkUpOrderMaxMoney()) {
+                } else if (money >= gameBackPolicy.getMarkUpOrderMaxMoney()) {
                     // 大额
                     // 大额
                     backType = gameBackPolicy.getMarkUpOrderMaxMoneyType();
                     backType = gameBackPolicy.getMarkUpOrderMaxMoneyType();
                     backRate = gameBackPolicy.getMarkUpOrderMaxMoneyRate();
                     backRate = gameBackPolicy.getMarkUpOrderMaxMoneyRate();
@@ -123,15 +133,19 @@ public class BackPolicyUtil {
         } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
         } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
             long intervalHours = DateUtil.intervalOfHour(regTime, payTime);
             long intervalHours = DateUtil.intervalOfHour(regTime, payTime);
             firstPolicy = intervalHours < 48;
             firstPolicy = intervalHours < 48;
+        } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
+            // 是否是小额订单
+            firstPolicy = rechargeMoney < gameBackPolicy.getLargeAmount();
         } else {
         } else {
             throw new RuntimeException("未知的回传单位:" + backUnit);
             throw new RuntimeException("未知的回传单位:" + backUnit);
         }
         }
         if (firstPolicy) {
         if (firstPolicy) {
-            if (rechargeMoney <= gameBackPolicy.getFirstMinMoney()) {
+            long money = backUnit == BackUnitEnum.LARGE_AMOUNT ? totalRechargeAmount : rechargeMoney;
+            if (money <= gameBackPolicy.getFirstMinMoney()) {
                 // 小额
                 // 小额
                 backType = gameBackPolicy.getFirstMinMoneyType();
                 backType = gameBackPolicy.getFirstMinMoneyType();
                 backRate = gameBackPolicy.getFirstMinMoneyRate();
                 backRate = gameBackPolicy.getFirstMinMoneyRate();
-            } else if (rechargeMoney >= gameBackPolicy.getFirstMaxMoney()) {
+            } else if (money >= gameBackPolicy.getFirstMaxMoney()) {
                 // 大额
                 // 大额
                 backType = gameBackPolicy.getFirstMaxMoneyType();
                 backType = gameBackPolicy.getFirstMaxMoneyType();
                 backRate = gameBackPolicy.getFirstMaxMoneyRate();
                 backRate = gameBackPolicy.getFirstMaxMoneyRate();
@@ -139,13 +153,14 @@ public class BackPolicyUtil {
                 backType = gameBackPolicy.getFirstOtherMoneyType();
                 backType = gameBackPolicy.getFirstOtherMoneyType();
                 backRate = gameBackPolicy.getFirstOtherMoneyRate();
                 backRate = gameBackPolicy.getFirstOtherMoneyRate();
             }
             }
-            log.error("订单 id[{}]通过回传策略[{}]判断后走首日逻辑:backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), backType, backRate);
+            log.error("订单 id[{}]通过回传策略[{}]判断后走首日逻辑:backType: {}, backRate: {}, money: {}", orderId, gameBackPolicy.getId(), backType, backRate, money);
         } else {
         } else {
-            if (rechargeMoney <= gameBackPolicy.getRechargeMinMoney()) {
+            long money = backUnit == BackUnitEnum.LARGE_AMOUNT ? totalRechargeAmount : rechargeMoney;
+            if (money <= gameBackPolicy.getRechargeMinMoney()) {
                 // 小额
                 // 小额
                 backType = gameBackPolicy.getRechargeMinMoneyType();
                 backType = gameBackPolicy.getRechargeMinMoneyType();
                 backRate = gameBackPolicy.getRechargeMinMoneyRate();
                 backRate = gameBackPolicy.getRechargeMinMoneyRate();
-            } else if (rechargeMoney >= gameBackPolicy.getRechargeMaxMoney()) {
+            } else if (money >= gameBackPolicy.getRechargeMaxMoney()) {
                 // 大额
                 // 大额
                 backType = gameBackPolicy.getRechargeMaxMoneyType();
                 backType = gameBackPolicy.getRechargeMaxMoneyType();
                 backRate = gameBackPolicy.getRechargeMaxMoneyRate();
                 backRate = gameBackPolicy.getRechargeMaxMoneyRate();
@@ -153,7 +168,7 @@ public class BackPolicyUtil {
                 backType = gameBackPolicy.getRechargeOtherMoneyType();
                 backType = gameBackPolicy.getRechargeOtherMoneyType();
                 backRate = gameBackPolicy.getRechargeOtherMoneyRate();
                 backRate = gameBackPolicy.getRechargeOtherMoneyRate();
             }
             }
-            log.error("订单 id[{}]通过回传策略[{}]判断后走次日逻辑, backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), backType, backRate);
+            log.error("订单 id[{}]通过回传策略[{}]判断后走次日逻辑, backType: {}, backRate: {}, money: {}", orderId, gameBackPolicy.getId(), backType, backRate, money);
         }
         }
         Integer maxBackCountOfUser = firstPolicy ? gameBackPolicy.getFirstBackCountOfUser() : gameBackPolicy.getRechargeBackCountOfUser();
         Integer maxBackCountOfUser = firstPolicy ? gameBackPolicy.getFirstBackCountOfUser() : gameBackPolicy.getRechargeBackCountOfUser();
         String backMsg = firstPolicy ? "首-" : "次-";
         String backMsg = firstPolicy ? "首-" : "次-";
@@ -199,30 +214,6 @@ public class BackPolicyUtil {
         backMsg = backMsg + ",单用户最大回传 " + maxBackCountOfUser + "笔,当前已回传 " + userBackCount + "笔";
         backMsg = backMsg + ",单用户最大回传 " + maxBackCountOfUser + "笔,当前已回传 " + userBackCount + "笔";
         log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{},原因:{}", orderId, gameBackPolicy.getId(), userBackCount < maxBackCountOfUser, backMsg);
         log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{},原因:{}", orderId, gameBackPolicy.getId(), userBackCount < maxBackCountOfUser, backMsg);
         return Tuples.tuple(userBackCount < maxBackCountOfUser, downLevel(rechargeMoney, downLevelString), backMsg);
         return Tuples.tuple(userBackCount < maxBackCountOfUser, downLevel(rechargeMoney, downLevelString), backMsg);
-        /*if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_FIXED_RATE)) {
-            // 固定比例回传
-            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 Tuples.tuple(Boolean.FALSE, rechargeMoney, "按比例回传,回传比例为 0,全部不回传");
-            }
-            if (ignoreCount == 0) {
-                log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), true);
-                return Tuples.tuple(Boolean.TRUE, rechargeMoney, "按比例回传,忽略比例为 0,全部回传");
-            }
-            int isBackCount = lastBackFunction.getLastBackCount(backCount + ignoreCount - 1, firstPolicy, firstDay, markUpTime);
-            log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), (isBackCount < backCount));
-            return isBackCount < backCount;
-        } else if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_RANDOM_RATE)) {
-            // 随机概率回传
-            boolean isBack = RandomUtils.nextInt(0, 100) < NumberUtil.multiply100(new BigDecimal(backRate)).intValue();
-            log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), isBack);
-            return Tuples.tuple(isBack, rechargeMoney, "按概率 " + backRate + "判断");
-        } else {
-            throw new RuntimeException("回传策略[" + gameBackPolicy.getId() + "]配置错误,未知的回传类型:" + backType);
-        }*/
     }
     }
 
 
     private static Long downLevel(Long rechargeMoney, String downLevelStr) {
     private static Long downLevel(Long rechargeMoney, String downLevelStr) {
@@ -299,5 +290,10 @@ public class BackPolicyUtil {
          * 补单,单个用户已回传订单数
          * 补单,单个用户已回传订单数
          */
          */
         long markUpForUser(String userId, Long markUpTime);
         long markUpForUser(String userId, Long markUpTime);
+
+        /**
+         * 获取用户的累充金额
+         */
+        Long totalRechargeAmount();
     }
     }
 }
 }