Browse Source

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

shishaosong 1 year ago
parent
commit
9875cd540c
29 changed files with 608 additions and 289 deletions
  1. 6 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/OrderReportRpcDTO.java
  2. 6 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/UserActiveReportRpcDTO.java
  3. 10 5
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/GameCategoryEnum.java
  4. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/config/SwaggerConfig.java
  5. 23 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/AgentController.java
  6. 18 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentAddParam.java
  7. 1 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentListParam.java
  8. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GamePictureServiceImpl.java
  9. 12 7
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java
  10. 4 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserServiceImpl.java
  11. 8 7
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java
  12. 39 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java
  13. 38 57
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java
  14. 11 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Agent.java
  15. 6 0
      game-module/game-module-sdk/pom.xml
  16. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/config/SwaggerConfig.java
  17. 7 2
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/enums/LoginTypeEnum.java
  18. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/listener/OrderPaySuccessListener.java
  19. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/UserDTO.java
  20. 16 3
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IAgentService.java
  21. 20 13
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/ICallBackService.java
  22. 7 4
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IUserLoginLogService.java
  23. 100 2
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java
  24. 172 86
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java
  25. 2 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameServiceImpl.java
  26. 6 7
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java
  27. 71 78
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/LoginServiceImpl.java
  28. 17 6
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/OrderServiceImpl.java
  29. 3 4
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserLoginLogServiceImpl.java

+ 6 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/OrderReportRpcDTO.java

@@ -1,11 +1,17 @@
 package com.zanxiang.game.back.base.oceanengine.pojo.dto;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class OrderReportRpcDTO implements Serializable {
     private static final long serialVersionUID = 1L;
     /**

+ 6 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/oceanengine/pojo/dto/UserActiveReportRpcDTO.java

@@ -1,11 +1,17 @@
 package com.zanxiang.game.back.base.oceanengine.pojo.dto;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class UserActiveReportRpcDTO implements Serializable {
     private static final long serialVersionUID = 1L;
 

+ 10 - 5
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/enums/GameCategoryEnum.java → game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/GameCategoryEnum.java

@@ -1,4 +1,4 @@
-package com.zanxiang.game.module.manage.enums;
+package com.zanxiang.game.module.base.pojo.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -15,22 +15,27 @@ public enum GameCategoryEnum {
     /**
      * 微信小游戏
      */
-    CATEGORY_WX_APPLET("wx_applet", "微信小游戏"),
+    CATEGORY_WX_APPLET(1L, "wx_applet", "微信小游戏"),
 
     /**
      * 抖音小游戏
      */
-    CATEGORY_DY_APPLET("byte_applet", "抖音小游戏"),
+    CATEGORY_DY_APPLET(2L, "byte_applet", "抖音小游戏"),
 
     /**
      * h5游戏
      */
-    CATEGORY_H5("h5", "h5游戏"),
+    CATEGORY_H5(3L, "h5", "h5游戏"),
 
     /**
      * app游戏
      */
-    CATEGORY_APP("app", "app游戏");
+    CATEGORY_APP(4L, "app", "app游戏");
+
+    /**
+     * 应用id
+     */
+    private Long category;
 
     /**
      * 游戏分类key

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/config/SwaggerConfig.java

@@ -29,7 +29,7 @@ public class SwaggerConfig {
                 .apiInfo(apiInfo())
                 .select()
                 .apis(RequestHandlerSelectors
-                        .basePackage("com.zanxiang.manage"))
+                        .basePackage("com.zanxiang.game.module.manage"))
                 .paths(PathSelectors.any())
                 .build();
     }

+ 23 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/AgentController.java

@@ -2,12 +2,16 @@ package com.zanxiang.game.module.manage.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.enums.AccountTypeEnum;
 import com.zanxiang.game.module.manage.pojo.params.AgentAddParam;
 import com.zanxiang.game.module.manage.pojo.params.AgentListParam;
 import com.zanxiang.game.module.manage.pojo.vo.AgentVO;
 import com.zanxiang.game.module.manage.service.IAgentService;
+import com.zanxiang.game.module.mybatis.entity.Agent;
+import com.zanxiang.module.util.exception.BaseException;
 import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -36,6 +40,25 @@ public class AgentController {
     @PreAuthorize(permissionKey = "sdk:agent:add")
     @PostMapping
     public ResultVO<Boolean> add(AgentAddParam dto) {
+        dto.setAgentName(dto.getAgentName().trim());
+        AccountTypeEnum accountType = AccountTypeEnum.getByValue(dto.getAccountType());
+        if (accountType == null) {
+            throw new BaseException("错误的账号类型:" + dto.getAccountType());
+        }
+        if (accountType == AccountTypeEnum.TENCENT) {
+            if (dto.getUserActionSetId() == null) {
+                throw new BaseException("腾讯广告账号必须选回传的数据源");
+            }
+        } else if (accountType == AccountTypeEnum.BYTE) {
+            if (StringUtils.isBlank(dto.getReportToken()) || StringUtils.isBlank(dto.getReportUrl())) {
+                throw new BaseException("头条广告账号必须填入回传的 token 和 url");
+            }
+            dto.setReportToken(dto.getReportToken().trim());
+            dto.setReportUrl(dto.getReportUrl());
+        }
+        if (dto.getPutStatus() == null) {
+            dto.setPutStatus(Agent.PUT_STATUS_ING);
+        }
         return ResultVO.ok(agentService.add(dto));
     }
 

+ 18 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentAddParam.java

@@ -3,6 +3,9 @@ package com.zanxiang.game.module.manage.pojo.params;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * @author : lingfeng
  * @time : 2023-06-09
@@ -15,24 +18,28 @@ public class AgentAddParam {
      * 渠道名称
      */
     @ApiModelProperty(notes = "渠道名称")
+    @NotBlank(message = "渠道名称不能为空")
     private String agentName;
 
     /**
      * 推广账号类型(1:腾讯、2:头条)
      */
     @ApiModelProperty(notes = "推广账号类型(1:腾讯、2:头条)")
+    @NotNull(message = "渠道类型不能为空")
     private Integer accountType;
 
     /**
      * 账号类型
      */
-    @ApiModelProperty(notes = "账号类型")
+    @ApiModelProperty(notes = "账号Id")
+    @NotNull(message = "账号不能为空")
     private Long accountId;
 
     /**
      * 游戏id
      */
     @ApiModelProperty(notes = "游戏id")
+    @NotNull(message = "投放游戏不能为空")
     private Long gameId;
 
     /**
@@ -46,6 +53,16 @@ public class AgentAddParam {
      */
     @ApiModelProperty(notes = "回传策略 id")
     private Long backPolicyId;
+    /**
+     * 头条回传 token
+     */
+    @ApiModelProperty(notes = "头条回传 token")
+    private String reportToken;
+    /**
+     * 头条回传 url
+     */
+    @ApiModelProperty(notes = "头条回传 url")
+    private String reportUrl;
 
     /**
      * 投放状态

+ 1 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentListParam.java

@@ -5,6 +5,7 @@ import com.zanxiang.module.web.pojo.BaseListDTO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.time.LocalDate;
 
 /**

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GamePictureServiceImpl.java

@@ -3,7 +3,7 @@ package com.zanxiang.game.module.manage.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.game.module.manage.enums.GameCategoryEnum;
+import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.manage.pojo.dto.GameCategoryDTO;
 import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
 import com.zanxiang.game.module.manage.pojo.params.GamePictureParam;

+ 12 - 7
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java

@@ -98,6 +98,12 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
 
     @Override
     public IPage<GameUserRoleListVO> list(GameUserRoleListParam param) {
+        //游戏条件处理
+        Map<Long, GameDTO> gameMap = gameService.gameCondition(param.getCpId(), param.getGameId(), param.getGameCategoryId());
+        //根据条件, 匹配不到游戏
+        if (gameMap != null && gameMap.isEmpty()) {
+            return new Page<>();
+        }
         //渠道列表
         List<AgentDTO> agentDTOList = agentService.listUserAgent(null, null, param.getChannelId());
         //根据条件, 匹配渠道
@@ -106,20 +112,19 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         }
         //渠道id
         List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
+        //管理员可见自然量数据
+        if (SecurityUtil.isAdmin()) {
+            agentIdList.add(0L);
+        }
         //玩家条件处理
-        Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(), param.getNickname(), param.getRegIp());
+        Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
+                param.getNickname(), param.getRegIp());
         //根据条件, 匹配不到玩家
         if (userMap != null && userMap.isEmpty()) {
             return new Page<>();
         }
         //相关用户id
         Set<Long> userIdSet = userMap == null ? null : userMap.keySet();
-        //游戏条件处理
-        Map<Long, GameDTO> gameMap = gameService.gameCondition(param.getCpId(), param.getGameId(), param.getGameCategoryId());
-        //根据条件, 匹配不到游戏
-        if (gameMap != null && gameMap.isEmpty()) {
-            return new Page<>();
-        }
         Map<Long, CpDTO> cpMap = cpService.cpMap();
         Map<Long, GameCategoryDTO> gameCategoryMap = gameCategoryService.gameCategoryMap();
         Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));

+ 4 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserServiceImpl.java

@@ -67,6 +67,10 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
         }
         //渠道id
         List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
+        //管理员可见自然量数据
+        if (SecurityUtil.isAdmin()) {
+            agentIdList.add(0L);
+        }
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
                 param.getNickname(), null);

+ 8 - 7
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java

@@ -105,6 +105,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
         //渠道id列表
         List<Long> agentIds = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
+        //管理员可见自然量数据
+        if (SecurityUtil.isAdmin()) {
+            agentIds.add(0L);
+        }
         //查询订单列表
         IPage<OrderVO> page = page(param.toPage(), getListWrapper(param, agentIds, "*")).convert(this::orderToVo);
         if (page.getTotal() == 0) {
@@ -112,7 +116,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
         //统计:订单金额与实付金额
         Order total = super.getOne(getListWrapper(param, agentIds, "IFNULL(SUM(amount),0) amount, IFNULL(SUM(real_amount),0) realAmount"));
-        HashMap<String, BigDecimal> totalData = new HashMap<>();
+        HashMap<String, BigDecimal> totalData = new HashMap<>(2);
         if (total == null) {
             totalData.put("totalOrderAmount", new BigDecimal("0.00"));
             totalData.put("totalRealAmount", new BigDecimal("0.00"));
@@ -130,12 +134,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         //渠道
         Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
         //游戏信息
-        List<Long> gameIds = orderListVOList.stream().map(OrderVO::getGameId).collect(Collectors.toList());
-        List<Long> regGameIds = orderListVOList.stream().map(OrderVO::getRegGameId).collect(Collectors.toList());
-        Set<Long> gameIdSet = new HashSet<>();
-        gameIdSet.addAll(gameIds);
-        gameIdSet.addAll(regGameIds);
-        Map<Long, GameDTO> gameMap = gameService.gameMap(gameIdSet);
+        Map<Long, GameDTO> gameMap = gameService.gameMap(orderListVOList.stream()
+                .map(orderVO -> Arrays.asList(orderVO.getGameId(), orderVO.getRegGameId()))
+                .flatMap(List::stream).collect(Collectors.toSet()));
         //游戏分类信息
         Map<Long, GameCategoryDTO> gameCategoryMap = gameCategoryService.gameCategoryMap();
         //支付渠道列表

+ 39 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java

@@ -3,20 +3,32 @@ package com.zanxiang.game.module.manage.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
+import com.zanxiang.game.module.manage.pojo.dto.UserDTO;
 import com.zanxiang.game.module.manage.pojo.params.UserNameAuthListParam;
 import com.zanxiang.game.module.manage.pojo.vo.UserCardVO;
+import com.zanxiang.game.module.manage.service.IAgentService;
 import com.zanxiang.game.module.manage.service.IUserCardService;
+import com.zanxiang.game.module.manage.service.IUserService;
 import com.zanxiang.game.module.mybatis.entity.UserCard;
 import com.zanxiang.game.module.mybatis.mapper.UserCardMapper;
 import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author : lingfeng
@@ -27,10 +39,36 @@ import java.util.Objects;
 @Service
 public class UserCardServiceImpl extends ServiceImpl<UserCardMapper, UserCard> implements IUserCardService {
 
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private IAgentService agentService;
+
     @Override
     public IPage<UserCardVO> getUserCardList(UserNameAuthListParam param) {
+        //渠道列表
+        List<AgentDTO> agentDTOList = agentService.listUserAgent(null, null, null);
+        //根据条件, 匹配渠道
+        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isAdmin()) {
+            return new Page<>();
+        }
+        //渠道id
+        List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
+        //管理员可见自然量数据
+        if (SecurityUtil.isAdmin()) {
+            agentIdList.add(0L);
+        }
+        //玩家条件处理
+        Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
+                param.getNickname(), null);
+        //根据条件, 匹配不到玩家
+        if (userMap != null && userMap.isEmpty()) {
+            return new Page<>();
+        }
+        Set<Long> userIdSet = userMap == null ? null : userMap.keySet();
         return page(param.toPage(), new QueryWrapper<UserCard>().lambda()
-                .eq(param.getUserId() != null, UserCard::getUserId, param.getUserId())
+                .in(CollectionUtils.isNotEmpty(userIdSet), UserCard::getUserId, userIdSet)
                 .eq(Strings.isNotBlank(param.getUserName()), UserCard::getUsername, param.getUserName())
                 .eq(Strings.isNotBlank(param.getNickname()), UserCard::getNickname, param.getNickname())
                 .ge(param.getBeginDate() != null, UserCard::getRegTime, param.getBeginDate() == null ? null : LocalDateTime.of(param.getBeginDate(), LocalTime.MIN))

+ 38 - 57
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java

@@ -29,7 +29,10 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.*;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -45,9 +48,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Autowired
     private IGameService gameService;
 
-    @Autowired
-    private IUserService userService;
-
     @Autowired
     private ICpService cpService;
 
@@ -62,6 +62,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
     @Override
     public IPage<UserListVO> list(UserListParam param) {
+        //游戏条件处理
+        Map<Long, GameDTO> gameMap = gameService.gameCondition(param.getCpId(), param.getGameId(), param.getGameCategoryId());
+        //根据条件, 匹配不到游戏
+        if (gameMap != null && gameMap.isEmpty()) {
+            return new Page<>();
+        }
         //渠道列表
         List<AgentDTO> agentDTOList = agentService.listUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
         //根据条件, 匹配渠道
@@ -70,35 +76,24 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
         //渠道id列表
         List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
-        //游戏条件处理
-        Map<Long, GameDTO> gameMap = gameService.gameCondition(param.getCpId(), param.getGameId(), param.getGameCategoryId());
-        //根据条件, 匹配不到游戏
-        if (gameMap != null && gameMap.isEmpty()) {
-            return new Page<>();
+        //管理员可见自然量数据
+        if (SecurityUtil.isAdmin()) {
+            agentIdList.add(0L);
         }
-        //玩家条件处理
-        Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
-                param.getNickname(), param.getRegIp());
-        //根据条件, 匹配不到玩家
-        if (userMap != null && userMap.isEmpty()) {
-            return new Page<>();
-        }
-        //相关用户id
-        Set<Long> userIdSet = userMap == null ? null : userMap.keySet();
         Map<Long, CpDTO> cpMap = cpService.cpMap();
-        Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
         Map<Long, GameCategoryDTO> gameCategoryMap = gameCategoryService.gameCategoryMap();
+        Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
         //执行查询
         return page(param.toPage(), new QueryWrapper<User>().lambda()
                 .eq(param.getUserId() != null, User::getId, param.getUserId())
                 .like(Strings.isNotBlank(param.getUserName()), User::getUsername, param.getUserName())
                 .like(Strings.isNotBlank(param.getNickname()), User::getNickname, param.getNickname())
                 .eq(Strings.isNotBlank(param.getMobile()), User::getMobile, param.getMobile())
-                .in(CollectionUtils.isNotEmpty(userIdSet), User::getId, userIdSet)
-                .isNotNull(Objects.equals(param.getIsBindMobile(), Boolean.TRUE), User::getMobile)
-                .isNull(Objects.equals(param.getIsBindMobile(), Boolean.FALSE), User::getMobile)
+                .eq(Strings.isNotBlank(param.getRegIp()), User::getIp, param.getRegIp())
                 .eq(Objects.equals(param.getIsAuth(), Boolean.FALSE), User::getAuthentication, 0)
                 .ne(Objects.equals(param.getIsAuth(), Boolean.TRUE), User::getAuthentication, 0)
+                .isNotNull(Objects.equals(param.getIsBindMobile(), Boolean.TRUE), User::getMobile)
+                .isNull(Objects.equals(param.getIsBindMobile(), Boolean.FALSE), User::getMobile)
                 .in(CollectionUtils.isNotEmpty(gameMap), User::getGameId, CollectionUtils.isEmpty(gameMap) ? null : gameMap.keySet())
                 .ge(param.getBeginDate() != null, User::getCreateTime, param.getBeginDate() == null ? null : LocalDateTime.of(param.getBeginDate(), LocalTime.MIN))
                 .le(param.getEndDate() != null, User::getCreateTime, param.getEndDate() == null ? null : LocalDateTime.of(param.getEndDate(), LocalTime.MAX))
@@ -107,41 +102,31 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 .gt(Objects.equals(param.getIsRecharge(), Boolean.TRUE), User::getRechargeCount, 0)
                 .eq(Objects.equals(param.getIsRecharge(), Boolean.FALSE), User::getRechargeCount, 0)
                 .eq(param.getStatus() != null, User::getStatus, param.getStatus())
-                .eq(param.getChannelId() != null, User::getAgentId, param.getChannelId())
+                .in(CollectionUtils.isNotEmpty(agentIdList), User::getAgentId, agentIdList)
                 .orderByDesc(User::getCreateTime)
-        ).convert(u -> this.toVo(u, userMap, gameMap, cpMap, gameCategoryMap, agentMap));
+        ).convert(u -> this.toVo(u, gameMap, cpMap, gameCategoryMap, agentMap));
     }
 
-    private UserListVO toVo(User user, Map<Long, UserDTO> userMap, Map<Long, GameDTO> gameMap, Map<Long, CpDTO> cpMap,
-                            Map<Long, GameCategoryDTO> gameCategoryMap, Map<Long, AgentDTO> agentMap) {
+    private UserListVO toVo(User user, Map<Long, GameDTO> gameMap, Map<Long, CpDTO> cpMap, Map<Long, GameCategoryDTO> gameCategoryMap,
+                            Map<Long, AgentDTO> agentMap) {
         UserListVO userListVO = BeanUtil.copy(user, UserListVO.class);
         if (Objects.isNull(userListVO)) {
             return null;
         }
+        //手机号隐藏
         userListVO.setMobile(user.getShowPhoneNum());
-        UserDTO userDTO = CollectionUtils.isEmpty(userMap) ? null : userMap.get(userListVO.getId());
-        if (userDTO == null) {
-            userDTO = this.getById(userListVO.getId());
-        }
-        if (userDTO != null) {
-            userListVO.setRegIp(userDTO.getIp());
-            userListVO.setUsername(userDTO.getUsername());
-            userListVO.setNickname(userDTO.getNickname());
-            //渠道信息
-            userListVO.setAgentId(userDTO.getAgentId());
-            AgentDTO lastAgentDTO = agentMap.get(userDTO.getAgentId());
-            if (lastAgentDTO != null) {
-                userListVO.setAgentName(lastAgentDTO.getAgentName());
-                userListVO.setAccountId(lastAgentDTO.getId());
-                userListVO.setPitcherId(lastAgentDTO.getCreateBy());
-                userListVO.setPitcherName(lastAgentDTO.getCreateByName());
-                userListVO.setAccountType(lastAgentDTO.getAccountType());
-            }
-        }
-        GameDTO gameDTO = CollectionUtils.isEmpty(gameMap) ? null : gameMap.get(userListVO.getGameId());
-        if (gameDTO == null) {
-            gameDTO = gameService.getById(userListVO.getGameId());
-        }
+        userListVO.setRegIp(user.getIp());
+        //渠道信息
+        AgentDTO agentDTO = agentMap.get(userListVO.getAgentId());
+        if (agentDTO != null) {
+            userListVO.setAgentName(agentDTO.getAgentName());
+            userListVO.setAccountId(agentDTO.getId());
+            userListVO.setPitcherId(agentDTO.getCreateBy());
+            userListVO.setPitcherName(agentDTO.getCreateByName());
+            userListVO.setAccountType(agentDTO.getAccountType());
+        }
+        //游戏信息
+        GameDTO gameDTO = CollectionUtils.isNotEmpty(gameMap) ? gameMap.get(userListVO.getGameId()) : gameService.getById(userListVO.getGameId());
         if (gameDTO != null) {
             userListVO.setGameName(gameDTO.getName());
             userListVO.setGameCategoryId(gameDTO.getCategory());
@@ -228,11 +213,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if (CollectionUtils.isEmpty(userList)) {
             return Collections.emptyMap();
         }
-        List<UserDTO> list = userList.stream()
+        return userList.stream()
                 .map(user -> BeanUtil.copy(user, UserDTO.class))
-                .collect(Collectors.toList());
-        //构造返回
-        return list.stream().collect(Collectors.toMap(UserDTO::getId, Function.identity()));
+                .collect(Collectors.toMap(UserDTO::getId, Function.identity()));
     }
 
     @Override
@@ -245,10 +228,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if (CollectionUtils.isEmpty(userList)) {
             return Collections.emptyMap();
         }
-        List<UserDTO> list = userList.stream().map(user -> BeanUtil.copy(user, UserDTO.class))
-                .collect(Collectors.toList());
-        //构造返回
-        return list.stream().collect(Collectors.toMap(UserDTO::getId, Function.identity()));
+        return userList.stream().map(user -> BeanUtil.copy(user, UserDTO.class))
+                .collect(Collectors.toMap(UserDTO::getId, Function.identity()));
     }
 
     @Override

+ 11 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Agent.java

@@ -22,6 +22,9 @@ import java.time.LocalDateTime;
 public class Agent implements Serializable {
     private static final long serialVersionUID = 1L;
 
+    public static final Integer ACCOUNT_TYPE_TENCENT = 1;
+    public static final Integer ACCOUNT_TYPE_BYTE = 2;
+
     public static final Integer PUT_STATUS_ING = 1;
     public static final Integer PUT_STATUS_STOP = 2;
 
@@ -55,6 +58,14 @@ public class Agent implements Serializable {
      * 回传策略 id
      */
     private Long backPolicyId;
+    /**
+     * 头条回传 token
+     */
+    private String reportToken;
+    /**
+     * 头条回传 url
+     */
+    private String reportUrl;
     /**
      * 投放状态
      */

+ 6 - 0
game-module/game-module-sdk/pom.xml

@@ -113,6 +113,12 @@
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-definition-protobuf</artifactId>
         </dependency>
+        <!-- 广告回传 -->
+        <dependency>
+            <groupId>com.zanxiang.game</groupId>
+            <artifactId>game-back-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/config/SwaggerConfig.java

@@ -29,7 +29,7 @@ public class SwaggerConfig {
                 .apiInfo(apiInfo())
                 .select()
                 .apis(RequestHandlerSelectors
-                        .basePackage("com.zanxiang.sdk"))
+                        .basePackage("com.zanxiang.game.module.sdk"))
                 .paths(PathSelectors.any())
                 .build();
     }

+ 7 - 2
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/enums/LoginTypeEnum.java

@@ -12,15 +12,20 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum LoginTypeEnum {
 
+    /**
+     * 注册
+     */
+    LOGIN_REG(0, "注册"),
+
     /**
      * 登录
      */
-    LOGIN_IN(0, "登录"),
+    LOGIN_IN(1, "登录"),
 
     /**
      * 退出
      */
-    LOGIN_OUT(1, "退出");
+    LOGIN_OUT(2, "退出");
 
     /**
      * 登录类型

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/listener/OrderPaySuccessListener.java

@@ -57,7 +57,7 @@ public class OrderPaySuccessListener {
         //商户号额度统计更新
         performOrderService.payMerchantTotal(platformOrderDTO);
         //订单回传
-//        callBackService.orderCallBack(platformOrderDTO);
+        callBackService.orderCallBack(platformOrderDTO);
         log.info("订单:{} 支付成功履约监听逻辑 ------end---------", event.getOrderId());
     }
 }

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/dto/UserDTO.java

@@ -26,7 +26,7 @@ public class UserDTO {
     /**
      * 最新渠道id
      */
-    private Long lastAgentId;
+    private Long agentId;
 
     /**
      * 注册游戏id

+ 16 - 3
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IAgentService.java

@@ -2,6 +2,10 @@ package com.zanxiang.game.module.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.module.mybatis.entity.Agent;
+import com.zanxiang.game.module.mybatis.entity.User;
+import reactor.util.function.Tuple2;
+
+import java.util.Map;
 
 /**
  * @author bilingfeng
@@ -9,10 +13,19 @@ import com.zanxiang.game.module.mybatis.entity.Agent;
 public interface IAgentService extends IService<Agent> {
 
     /**
-     * 根据前端参数获取渠道信息
+     * 用户渠道更新
      *
+     * @param user    用户
      * @param channel 通道
-     * @return {@link Long}
      */
-    Long getAgentIdByChannel(String channel);
+    void userAgentUpdate(User user, String channel);
+
+    /**
+     * 根据前端参数获取渠道信息
+     *
+     * @param channel     通道
+     * @param shareUserId 分享用户id
+     * @return {@link Tuple2}<{@link Long}, {@link Map}<{@link String}, {@link String}>>
+     */
+    Tuple2<Long, Map<String, String>> getUserAgentId(String channel, Long shareUserId);
 }

+ 20 - 13
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/ICallBackService.java

@@ -1,5 +1,11 @@
 package com.zanxiang.game.module.sdk.service;
 
+import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
+import reactor.util.function.Tuple2;
+
+import java.util.Map;
+
 /**
  * @author : lingfeng
  * @time : 2022-11-10
@@ -7,17 +13,18 @@ package com.zanxiang.game.module.sdk.service;
  */
 public interface ICallBackService {
 
-//    /**
-//     * 用户回传
-//     *
-//     * @param user 用户
-//     */
-//    void userCallBack(User user);
-//
-//    /**
-//     * 订单回传
-//     *
-//     * @param orderInfo 订单信息
-//     */
-//    void orderCallBack(PlatformOrderDTO orderInfo);
+    /**
+     * 用户回传
+     *
+     * @param user   用户
+     * @param tuple2 tuple2
+     */
+    void userCallBack(User user, Tuple2<Long, Map<String, String>> tuple2);
+
+    /**
+     * 订单回传
+     *
+     * @param orderInfo 订单信息
+     */
+    void orderCallBack(PlatformOrderDTO orderInfo);
 }

+ 7 - 4
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IUserLoginLogService.java

@@ -1,6 +1,8 @@
 package com.zanxiang.game.module.sdk.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.mybatis.entity.UserLoginLog;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 
 /**
@@ -8,7 +10,7 @@ import com.zanxiang.game.module.sdk.pojo.param.UserData;
  * @time : 2022-06-13
  * @description :
  */
-public interface IUserLoginLogService {
+public interface IUserLoginLogService extends IService<UserLoginLog> {
 
     /**
      * 创建角色登录日志
@@ -24,9 +26,10 @@ public interface IUserLoginLogService {
     /**
      * 创建用户登录日志
      *
-     * @param user 用户
-     * @param type 类型
+     * @param user       用户
+     * @param type       类型
+     * @param deviceType 设备类型
      * @return {@link Boolean}
      */
-    Boolean createUserLoginLog(User user, Integer type);
+    Boolean createUserLoginLog(User user, Integer type, Integer deviceType);
 }

+ 100 - 2
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java

@@ -1,11 +1,30 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.module.mybatis.entity.Agent;
+import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.mybatis.entity.UserLoginLog;
 import com.zanxiang.game.module.mybatis.mapper.AgentMapper;
 import com.zanxiang.game.module.sdk.service.IAgentService;
+import com.zanxiang.game.module.sdk.service.ICallBackService;
+import com.zanxiang.game.module.sdk.service.IUserLoginLogService;
+import com.zanxiang.game.module.sdk.service.IUserService;
+import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
+import reactor.util.function.Tuples;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author bilingfeng
@@ -14,8 +33,87 @@ import org.springframework.stereotype.Service;
 @Service
 public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements IAgentService {
 
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private IUserLoginLogService userLoginLogService;
+
+    @Autowired
+    private ICallBackService callBackService;
+
     @Override
-    public Long getAgentIdByChannel(String channel) {
-        return null;
+    public void userAgentUpdate(User user, String channel) {
+        //渠道为空
+        if (Strings.isBlank(channel)) {
+            return;
+        }
+        log.error("接收到的渠道参数 user : {}, channel : {}", JsonUtil.toString(user), channel);
+        //判断用户是否超过30天未登录
+        List<UserLoginLog> userLoginLogList = userLoginLogService.list(new LambdaQueryWrapper<UserLoginLog>()
+                .eq(UserLoginLog::getUserId, user.getId())
+                .orderByDesc(UserLoginLog::getCreateTime)
+                .apply("limit 1"));
+        if (CollectionUtils.isEmpty(userLoginLogList)) {
+            return;
+        }
+        //最近登录时间
+        LocalDateTime lastLoginTime = userLoginLogList.get(0).getCreateTime();
+        //最近登录未超过30天
+        if (lastLoginTime.plusDays(30L).isAfter(LocalDateTime.now())) {
+            return;
+        }
+        //30天未登录, 更新渠道
+        Map<String, String> urlParamMap = this.channelTransform(channel);
+        //查询渠道
+        String state = urlParamMap.get("state");
+        Agent agent = super.getOne(new LambdaQueryWrapper<Agent>()
+                .eq(Agent::getAgentKey, state));
+        if (agent == null) {
+            return;
+        }
+        //更新用户信息
+        userService.update(new LambdaUpdateWrapper<User>()
+                .set(User::getAgentId, agent.getId())
+                .set(User::getUpdateTime, LocalDateTime.now())
+                .eq(User::getId, user.getId()));
+        //回传用户信息
+        callBackService.userCallBack(user, Tuples.of(agent.getId(), urlParamMap));
+    }
+
+    @Override
+    public Tuple2<Long, Map<String, String>> getUserAgentId(String channel, Long shareUserId) {
+        if (Strings.isBlank(channel) && shareUserId != null) {
+            User user = userService.getById(shareUserId);
+            return Tuples.of(user.getAgentId(), Collections.emptyMap());
+        }
+        if (Strings.isBlank(channel)) {
+            return Tuples.of(0L, Collections.emptyMap());
+        }
+        log.error("接收到的渠道参数 channel : {}", channel);
+        //数据解析
+        Map<String, String> urlParamMap = this.channelTransform(channel);
+        //查询渠道
+        String state = urlParamMap.get("state");
+        Agent agent = super.getOne(new LambdaQueryWrapper<Agent>()
+                .eq(Agent::getAgentKey, state));
+        if (agent == null) {
+            return Tuples.of(0L, Collections.emptyMap());
+        }
+        return Tuples.of(agent.getId(), urlParamMap);
+    }
+
+    private Map<String, String> channelTransform(String channel) {
+        Map<String, String> paramMap = new HashMap<>(11);
+        String[] params = channel.split("&");
+        for (String param : params) {
+            String[] keyValue = param.split("=");
+            if (keyValue.length > 1) {
+                String key = keyValue[0];
+                String value = keyValue[1];
+                paramMap.put(key, value);
+            }
+        }
+        return paramMap;
     }
 }

+ 172 - 86
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

@@ -1,11 +1,30 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
-import com.zanxiang.game.module.sdk.service.ICallBackService;
-import com.zanxiang.game.module.sdk.service.IOrderService;
-import com.zanxiang.game.module.sdk.service.IUserService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.zanxiang.game.back.base.ServerInfo;
+import com.zanxiang.game.back.base.oceanengine.pojo.dto.AccountReportRpcDTO;
+import com.zanxiang.game.back.base.oceanengine.pojo.dto.OrderReportRpcDTO;
+import com.zanxiang.game.back.base.oceanengine.pojo.dto.UserActiveReportRpcDTO;
+import com.zanxiang.game.back.base.oceanengine.rpc.IWechatMiniGameDataReportRpc;
+import com.zanxiang.game.back.base.tencent.pojo.dto.TencentOrderDTO;
+import com.zanxiang.game.back.base.tencent.pojo.dto.TencentUserDTO;
+import com.zanxiang.game.back.base.tencent.rpc.IGameBackTencentRpc;
+import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
+import com.zanxiang.game.module.mybatis.entity.Agent;
+import com.zanxiang.game.module.mybatis.entity.Game;
+import com.zanxiang.game.module.mybatis.entity.GameApplet;
+import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
+import com.zanxiang.game.module.sdk.service.*;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
+
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author : lingfeng
@@ -16,93 +35,160 @@ import org.springframework.stereotype.Service;
 @Service
 public class CallBackServiceImpl implements ICallBackService {
 
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IGameBackTencentRpc gameBackTencentRpc;
+
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IWechatMiniGameDataReportRpc wechatMiniGameDataReportRpc;
+
     @Autowired
-    private IUserService userService;
+    private IAgentService agentService;
+
+    @Autowired
+    private IGameService gameService;
 
     @Autowired
-    private IOrderService orderService;
+    private IGameAppletService gameAppletService;
+
+    @Autowired
+    private IUserService userService;
+
+    @Override
+    public void userCallBack(User user, Tuple2<Long, Map<String, String>> tuple2) {
+        Long agentId = tuple2.getT1();
+        Map<String, String> urlParamMap = tuple2.getT2();
+        //自然量, 或者跳转链接参数不存在, 不做回传处理
+        if (agentId == 0L || CollectionUtils.isEmpty(urlParamMap)) {
+            return;
+        }
+        //查询用户渠道信息
+        Agent agent = agentService.getById(user.getAgentId());
+        if (agent == null) {
+            log.error("用户回传不存在渠道信息, userId : {}", user.getId());
+            return;
+        }
+        //查询小游戏信息或者H5游戏相关公众号信息
+        GameApplet gameApplet = gameAppletService.getOne(new LambdaQueryWrapper<GameApplet>()
+                .eq(GameApplet::getGameId, user.getGameId()));
+        try {
+            //腾讯回传
+            if (Objects.equals(agent.getAccountType(), Agent.ACCOUNT_TYPE_TENCENT)) {
+                TencentUserDTO tencentUserDTO = this.transform(user, agent, gameApplet);
+                gameBackTencentRpc.backUser(tencentUserDTO);
+            }
+            //头条回传
+            if (CollectionUtils.isNotEmpty(urlParamMap) && Objects.equals(agent.getAccountType(), Agent.ACCOUNT_TYPE_BYTE)) {
+                Game game = gameService.getById(user.getGameId());
+                //判断是微信小游戏
+                if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getCategory())) {
+                    UserActiveReportRpcDTO activeReportRpcDTO = this.transform(user, agent, gameApplet, urlParamMap);
+                    wechatMiniGameDataReportRpc.userActiveReport(activeReportRpcDTO);
+                }
+            }
+        } catch (Exception e) {
+            log.error("用户回传异常, userId : {}, e : {}", user.getId(), e.getMessage());
+        }
+    }
+
+    @Override
+    public void orderCallBack(PlatformOrderDTO platformOrderDTO) {
+        //查询用户渠道信息
+        Agent agent = agentService.getById(platformOrderDTO.getAgentId());
+        if (agent == null) {
+            log.error("订单回传不存在渠道信息, orderId : {}", platformOrderDTO.getOrderId());
+            return;
+        }
+        User user = userService.getById(platformOrderDTO.getUserId());
+        //查询小游戏信息或者H5游戏相关公众号信息
+        GameApplet gameApplet = gameAppletService.getOne(new LambdaQueryWrapper<GameApplet>()
+                .eq(GameApplet::getGameId, user.getGameId()));
+        try {
+            //腾讯回传
+            if (Objects.equals(agent.getAccountType(), Agent.ACCOUNT_TYPE_TENCENT)) {
+                TencentOrderDTO tencentOrderDTO = this.transform(platformOrderDTO, user, agent, gameApplet);
+                gameBackTencentRpc.backOrder(tencentOrderDTO);
+            }
+            //头条回传
+            if (Objects.equals(agent.getAccountType(), Agent.ACCOUNT_TYPE_BYTE)) {
+                //判断游戏类型
+                Game game = gameService.getById(platformOrderDTO.getGameId());
+                if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getCategory())) {
+                    OrderReportRpcDTO orderReportRpcDTO = this.transform(platformOrderDTO, user.getOpenId(), agent, gameApplet);
+                    wechatMiniGameDataReportRpc.orderReport(orderReportRpcDTO);
+                }
+            }
+        } catch (Exception e) {
+            log.error("订单回传异常, orderId : {}, e : {}", platformOrderDTO.getOrderId(), e.getMessage());
+        }
+    }
+
+    private TencentUserDTO transform(User user, Agent agent, GameApplet gameApplet) {
+        return TencentUserDTO.builder()
+                .gameId(user.getGameId())
+                .adAccountId(agent.getAccountId())
+                .registerTime(user.getCreateTime())
+                .channel(agent.getAgentKey())
+                .wechatOpenid(user.getOpenId())
+                .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
+                .build();
+    }
 
+    private UserActiveReportRpcDTO transform(User user, Agent agent, GameApplet gameApplet, Map<String, String> urlParamMap) {
+        AccountReportRpcDTO accountReportRpcDTO = AccountReportRpcDTO.builder()
+                .accountId(agent.getAccountId())
+                .reportToken(agent.getReportToken())
+                .reportUrl(agent.getReportUrl())
+                .build();
+        return UserActiveReportRpcDTO.builder()
+                .gameId(user.getGameId())
+                .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
+                .wechatOpenId(user.getOpenId())
+                .accountReport(accountReportRpcDTO)
+                .agentKey(agent.getAgentKey())
+                .activeTime(user.getCreateTime())
+                .clueToken(urlParamMap.get("clue_token"))
+                .projectId(urlParamMap.get("project_id") == null ? null : Long.valueOf(urlParamMap.get("project_id")))
+                .promotionId(urlParamMap.get("promotion_id") == null ? null : Long.valueOf(urlParamMap.get("promotion_id")))
+                .advertiserId(urlParamMap.get("advertiser_id") == null ? null : Long.valueOf(urlParamMap.get("advertiser_id")))
+                .reqId(urlParamMap.get("req_id"))
+                .build();
+    }
 
-//    @DubboReference(providedBy = PlatformServer.SERVER_DUBBO_NAME)
-//    private IAppUserRpc appUserRpc;
-//
-//    @DubboReference(providedBy = PlatformServer.SERVER_DUBBO_NAME)
-//    private IAppOrderRpc appOrderRpc;
-//
-//    @Override
-//    public void userCallBack(User user) {
-//        if (user == null) {
-//            return;
-//        }
-//        log.error("用户注册回传, userId : {}", user.getId());
-//        UserRegisterRpcDTO dto = UserRegisterRpcDTO.builder()
-//                .appKey(String.valueOf(user.getGameId()))
-//                .userId(String.valueOf(user.getId()))
-//                .username(user.getUsername())
-//                .mac(user.getMac())
-//                .imei(user.getImei())
-//                .androidId(user.getAndroidId())
-//                .ip(user.getIp())
-//                .osType(OsEnum.getByName(user.getDeviceSystem()))
-//                .registerTime(user.getCreateTime())
-//                .build();
-//        //调接口
-//        ResultVO<AppReportLogRpcVO> result;
-//        try {
-//            result = appUserRpc.register(dto);
-//        } catch (Exception e) {
-//            log.error("用户注册回传上报异常, user : {}, e : {}", JsonUtil.toString(user), e.getMessage());
-//            return;
-//        }
-//        log.error("用户注册回传结果, userId : {}, result : {}", user.getId(), JsonUtil.toString(result));
-//        String adId = "AD_ID";
-//        //成功
-//        if (result.isSuccess() && result.getData() != null && result.getData().getAid() != null) {
-//            adId = result.getData().getAid().toString();
-//        }
-//        //更新数据库
-//        userService.update(new LambdaUpdateWrapper<User>().set(User::getAdId, adId).eq(User::getId, user.getId()));
-//    }
-//
-//    @Override
-//    public void orderCallBack(PlatformOrderDTO orderInfo) {
-//        if (orderInfo == null) {
-//            return;
-//        }
-//        log.error("用户注册回传, orderId : {}", orderInfo.getOrderId());
-//        AppOrderRpcDTO dto = AppOrderRpcDTO.builder()
-//                .appKey(String.valueOf(orderInfo.getGameId()))
-//                .orderId(orderInfo.getOrderId())
-//                .userId(String.valueOf(orderInfo.getUserId()))
-//                .amount(orderInfo.getAmount().multiply(new BigDecimal("100")).longValue())
-//                .realAmount(orderInfo.getRealAmount().multiply(new BigDecimal("100")).longValue())
-//                .tranNo(orderInfo.getMerchantOrderNo())
-//                .orderStatus(orderInfo.getStatus())
-//                .payType(PayTypeEnum.getByPayType(orderInfo.getPayWayId()))
-//                .payTime(orderInfo.getPayTime())
-//                .createTime(orderInfo.getCreateTime())
-//                .build();
-//        //调接口
-//        ResultVO<AppReportLogRpcVO> result;
-//        try {
-//            result = appOrderRpc.order(dto);
-//        } catch (Exception e) {
-//            log.error("订单回传上报异常, orderInfo : {}, e : {}", JsonUtil.toString(orderInfo), e.getMessage());
-//            return;
-//        }
-//        log.error("订单回传结果, orderId : {}, result : {}", orderInfo.getOrderId(), JsonUtil.toString(result));
-//        String adId = "AD_ID";
-//        Integer callBackStatus = CallBackEnum.FAIL_CALL_BACK.getCallBackStatus();
-//        //成功
-//        if (result.isSuccess() && result.getData() != null && result.getData().getAid() != null) {
-//            adId = result.getData().getAid().toString();
-//            callBackStatus = CallBackEnum.SUCCESS_CALL_BACK.getCallBackStatus();
-//        }
-//        //更新数据库
-//        orderService.update(new LambdaUpdateWrapper<Order>()
-//                .set(Order::getAdId, adId)
-//                .set(Order::getCallBackStatus, callBackStatus)
-//                .eq(Order::getOrderId, orderInfo.getOrderId()));
-//    }
+    private TencentOrderDTO transform(PlatformOrderDTO platformOrderDTO, User user, Agent agent, GameApplet gameApplet) {
+        return TencentOrderDTO.builder()
+                .backPolicyId(agent.getBackPolicyId())
+                .gameId(platformOrderDTO.getGameId())
+                .adAccountId(agent.getAccountId())
+                .registerTime(user.getCreateTime())
+                .rechargeMoney(platformOrderDTO.getAmount().longValue() * 100)
+                .rechargeTime(platformOrderDTO.getCreateTime())
+                .orderId(platformOrderDTO.getOrderId())
+                .channel(agent.getAgentKey())
+                .wechatOpenid(user.getOpenId())
+                .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
+                .orderStatus(platformOrderDTO.getStatus())
+                .payTime(platformOrderDTO.getPayTime())
+                .build();
+    }
 
+    private OrderReportRpcDTO transform(PlatformOrderDTO platformOrderDTO, String openId, Agent agent, GameApplet gameApplet) {
+        AccountReportRpcDTO accountReportRpcDTO = AccountReportRpcDTO.builder()
+                .accountId(agent.getAccountId())
+                .reportToken(agent.getReportToken())
+                .reportUrl(agent.getReportUrl())
+                .build();
+        return OrderReportRpcDTO.builder()
+                .gameId(platformOrderDTO.getGameId())
+                .accountReport(accountReportRpcDTO)
+                .wechatAppId(gameApplet == null ? null : gameApplet.getAppId())
+                .wechatOpenId(openId)
+                .orderId(platformOrderDTO.getOrderId())
+                .agentKey(agent.getAgentKey())
+                .backPolicyId(agent.getBackPolicyId())
+                .rechargeMoney(platformOrderDTO.getAmount().longValue() * 100)
+                .orderStatus(platformOrderDTO.getStatus())
+                .createTime(platformOrderDTO.getCreateTime())
+                .payTime(platformOrderDTO.getPayTime())
+                .build();
+    }
 }

+ 2 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameServiceImpl.java

@@ -8,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 /**
- * @author : xufeng
+ * @author : lingfeng
  * @time : 2022-07-13
  * @description : game管理
  */
@@ -16,4 +16,5 @@ import org.springframework.stereotype.Service;
 @Service
 public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IGameService {
 
+
 }

+ 6 - 7
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java

@@ -56,8 +56,7 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         Integer dataType = param.getDataType();
         //选择服务器
         if (Objects.equals(dataType, DataTypeEnum.TYPE_SELECT_SERVER.getDateType())) {
-            User user = userService.getById(userData.getUserId());
-            return userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_IN.getLoginType());
+            return userLoginLogService.createRoleLoginLog(userData, param.getRoleId(), param.getRoleName(), LoginTypeEnum.LOGIN_IN.getLoginType());
         }
         //创建角色
         if (Objects.equals(dataType, DataTypeEnum.TYPE_CREATE_ROLE.getDateType())) {
@@ -92,10 +91,10 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         return Boolean.FALSE;
     }
 
-    private Boolean createRoleUpdate(GameUserRoleUpdateParam param, UserData userData) {
+    private void createRoleUpdate(GameUserRoleUpdateParam param, UserData userData) {
         //上锁
         if (!distributedLockComponent.doLock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId(), 0L, 1L, TimeUnit.MINUTES)) {
-            return Boolean.FALSE;
+            return;
         }
         //查询玩家信息
         GameUser gameUser = gameUserService.getOne(new LambdaQueryWrapper<GameUser>().eq(GameUser::getGameId, userData.getGameId())
@@ -105,7 +104,9 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                 .eq(GameUserRole::getGameId, userData.getGameId())
                 .eq(GameUserRole::getRoleId, param.getRoleId()));
         if (userRole != null) {
-            return Boolean.TRUE;
+            //释放锁
+            distributedLockComponent.unlock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId());
+            return;
         }
         userRole = GameUserRole.builder()
                 .userId(userData.getUserId())
@@ -136,7 +137,5 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                 .eq(User::getId, gameUser.getUserId()));
         //释放锁
         distributedLockComponent.unlock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId());
-        //返回
-        return Boolean.TRUE;
     }
 }

+ 71 - 78
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/LoginServiceImpl.java

@@ -11,7 +11,6 @@ import com.zanxiang.game.module.mybatis.entity.UserShare;
 import com.zanxiang.game.module.sdk.enums.LoginTypeEnum;
 import com.zanxiang.game.module.sdk.enums.SmsTypeEnum;
 import com.zanxiang.game.module.sdk.pojo.dto.GameAppletDTO;
-import com.zanxiang.game.module.sdk.pojo.dto.UserDTO;
 import com.zanxiang.game.module.sdk.pojo.param.LoginMobileParam;
 import com.zanxiang.game.module.sdk.pojo.param.LoginPasswordParam;
 import com.zanxiang.game.module.sdk.pojo.param.LoginVxCodeParam;
@@ -28,6 +27,7 @@ import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import reactor.util.function.Tuple2;
 
 import java.time.LocalDateTime;
 import java.util.Map;
@@ -105,12 +105,14 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //根据openId查询用户
         User user = userService.getOne(new LambdaQueryWrapper<User>()
                 .eq(User::getGameId, userData.getGameId()).eq(User::getOpenId, openId));
-        //用户注册
+        //已注册
         if (user != null) {
             //更新用户sessionKey
             userService.update(new LambdaUpdateWrapper<User>()
                     .set(User::getSessionKey, sessionKey)
                     .eq(User::getId, user.getId()));
+            //渠道更新和回传判断
+            agentService.userAgentUpdate(user, userData.getChannel());
             //判断账号是否停用
             if (Objects.equals(BanStatusEnum.BAN_STATUS.getStatus(), user.getStatus())) {
                 return ResultVO.fail(HttpStatusEnum.ACCOUNT_HALT.getMsg());
@@ -118,37 +120,8 @@ public class LoginServiceImpl implements IRegisterLoginService {
             //返回登录信息
             return ResultVO.ok(this.createUserLoginVO(user, userData));
         }
-        //渠道标识
-        Long agentId;
-        Long fromUserId = null;
-        if (param.getShareUserId() == null) {
-            agentId = agentService.getAgentIdByChannel(userData.getChannel());
-        } else {
-            UserDTO userDTO = userService.getUserByUserId(param.getShareUserId());
-            agentId = userDTO.getLastAgentId();
-            fromUserId = userDTO.getId();
-        }
-        //构造用户信息
-        user = transform(userData, agentId, openId);
-        user.setOpenId(openId);
-        user.setSessionKey(sessionKey);
-        //创建用户信息
-        userService.save(user);
-        gameUserService.createGameUser(user);
-//        callBackService.userCallBack(user);
-        //返回登录信息
-        if (fromUserId == null) {
-            return ResultVO.ok(this.createUserLoginVO(user, userData));
-        }
-        //记录分享信息
-        UserShare userShare = UserShare.builder()
-                .gameId(userData.getGameId())
-                .fromUserId(fromUserId)
-                .toUserId(user.getId())
-                .createTime(LocalDateTime.now())
-                .updateTime(LocalDateTime.now())
-                .build();
-        userShareService.save(userShare);
+        //用户注册
+        user = userCreateSave(userData, openId, null, null, openId, sessionKey, param.getShareUserId());
         //返回登录信息
         return ResultVO.ok(this.createUserLoginVO(user, userData));
     }
@@ -175,6 +148,8 @@ public class LoginServiceImpl implements IRegisterLoginService {
                 user = userService.getOne(new LambdaQueryWrapper<User>()
                         .eq(User::getGameId, userData.getGameId()).eq(User::getUsername, username));
             }
+            //渠道更新和回传判断
+            agentService.userAgentUpdate(user, userData.getChannel());
             //用户信息不存在
             if (user == null) {
                 return ResultVO.fail(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR.getMsg());
@@ -187,20 +162,16 @@ public class LoginServiceImpl implements IRegisterLoginService {
             if (!Objects.equals(RegisterUtil.cmfPassword(password), user.getPassword())) {
                 return ResultVO.fail(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR.getMsg());
             }
-        } else {
-            //注册, 用户名密码校验
-            HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
-            if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
-                return ResultVO.fail(checkRegisterEnum.getMsg());
-            }
-            //创建用户信息
-            Long agentId = agentService.getAgentIdByChannel(userData.getChannel());
-            user = transform(userData, agentId, username);
-            user.setPassword(password);
-            userService.save(user);
-            gameUserService.createGameUser(user);
-//            callBackService.userCallBack(user);
+            //返回登录信息
+            return ResultVO.ok(this.createUserLoginVO(user, userData));
+        }
+        //用户注册, 用户名密码校验
+        HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
+        if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
+            return ResultVO.fail(checkRegisterEnum.getMsg());
         }
+        //用户注册
+        user = userCreateSave(userData, username, password, null, null, null, null);
         //返回登录信息
         return ResultVO.ok(this.createUserLoginVO(user, userData));
     }
@@ -222,29 +193,72 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //获取用户信息
         User user = userService.getOne(new LambdaQueryWrapper<User>()
                 .eq(User::getGameId, userData.getGameId()).eq(User::getMobile, mobile));
-        //用户信息不存在, 直接注册
-        if (user == null) {
-            Long agentId = agentService.getAgentIdByChannel(userData.getChannel());
-            user = transform(userData, agentId, mobile);
-            user.setMobile(mobile);
-            userService.save(user);
-            gameUserService.createGameUser(user);
-//            callBackService.userCallBack(user);
-        } else {
+        //用户信息存在
+        if (user != null) {
+            //渠道更新和回传判断
+            agentService.userAgentUpdate(user, userData.getChannel());
             //判断账号是否停用
             if (Objects.equals(BanStatusEnum.BAN_STATUS.getStatus(), user.getStatus())) {
                 return ResultVO.fail(HttpStatusEnum.ACCOUNT_HALT.getMsg());
             }
+            //返回登录信息
+            return ResultVO.ok(this.createUserLoginVO(user, userData));
         }
+        //用户注册
+        user = userCreateSave(userData, mobile, null, mobile, null, null, null);
         //返回登录信息
         return ResultVO.ok(this.createUserLoginVO(user, userData));
     }
 
+    private User userCreateSave(UserData userData, String userName, String password, String mobile, String openId,
+                                String sessionKey, Long shareUserId) {
+        Tuple2<Long, Map<String, String>> tuple2 = agentService.getUserAgentId(userData.getChannel(), shareUserId);
+        User user = transform(userData, tuple2.getT1(), userName);
+        user.setPassword(password);
+        user.setMobile(mobile);
+        user.setOpenId(openId);
+        user.setSessionKey(sessionKey);
+        userService.save(user);
+        gameUserService.createGameUser(user);
+        callBackService.userCallBack(user, tuple2);
+        //记录分享信息
+        if (shareUserId != null) {
+            userShareService.save(UserShare.builder()
+                    .gameId(userData.getGameId())
+                    .fromUserId(shareUserId)
+                    .toUserId(user.getId())
+                    .createTime(LocalDateTime.now())
+                    .updateTime(LocalDateTime.now())
+                    .build());
+        }
+        return user;
+    }
+
+    private User transform(UserData userData, Long agentId, String userName) {
+        return User.builder()
+                .regAgentId(agentId)
+                .agentId(agentId)
+                .gameId(userData.getGameId())
+                .username(userName)
+                .nickname(RegisterUtil.randomNickName(userName))
+                .deviceType(userData.getDeviceType())
+                .status(BanStatusEnum.NORMAL_STATUS.getStatus())
+                .authentication(0)
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .deviceSystem(userData.getDeviceSystem())
+                .mac(userData.getMac())
+                .imei(userData.getImei())
+                .androidId(userData.getAndroidId())
+                .ip(userData.getIp())
+                .build();
+    }
+
     private UserLoginVO createUserLoginVO(User user, UserData userData) {
         //获取token
         String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
         //插入用户登录记录
-        userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_IN.getLoginType());
+        userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_REG.getLoginType(), userData.getDeviceType());
         //查询用户实名信息
         UserCard userCard = userCardService.getOne(new LambdaQueryWrapper<UserCard>().eq(UserCard::getUserId, user.getId()));
         //查询游戏
@@ -271,7 +285,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
     public Boolean loginOut(UserData userData) {
         User user = userService.getById(userData.getUserId());
         //新增用户退出记录
-        return userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_OUT.getLoginType());
+        return userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_OUT.getLoginType(), userData.getDeviceType());
     }
 
     @Override
@@ -299,25 +313,4 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //密码验证
         return RegisterUtil.checkPassword(password);
     }
-
-    private User transform(UserData userData, Long agentId, String userName) {
-        //构造用户信息
-        return User.builder()
-                .regAgentId(agentId)
-                .agentId(agentId)
-                .gameId(userData.getGameId())
-                .username(userName)
-                .nickname(RegisterUtil.randomNickName(userName))
-                .deviceType(userData.getDeviceType())
-                .status(BanStatusEnum.NORMAL_STATUS.getStatus())
-                .authentication(0)
-                .createTime(LocalDateTime.now())
-                .updateTime(LocalDateTime.now())
-                .deviceSystem(userData.getDeviceSystem())
-                .mac(userData.getMac())
-                .imei(userData.getImei())
-                .androidId(userData.getAndroidId())
-                .ip(userData.getIp())
-                .build();
-    }
 }

+ 17 - 6
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/OrderServiceImpl.java

@@ -47,6 +47,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private IGamePayWayService gamePayWayService;
 
+    @Autowired
+    private ICallBackService callBackService;
+
     @Override
     @Transactional(rollbackFor = {Exception.class, RuntimeException.class})
     public Boolean createOrder(ProductPayParam payParam, UserData userData) {
@@ -83,7 +86,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         //生成订单id
         String orderNum = this.getOrderNum(userData.getUserId());
         //构造订单
-        super.save(Order.builder()
+        Order order = this.transform(userData, orderNum, payParam, user, gameUser, game, gameUserRole, gamePayWayDTO);
+        super.save(order);
+        //设置订单号
+        payParam.setOrderId(orderNum);
+        //订单回传
+        callBackService.orderCallBack(BeanUtil.copy(order, PlatformOrderDTO.class));
+        //返回
+        return Boolean.TRUE;
+    }
+
+    private Order transform(UserData userData, String orderNum, ProductPayParam payParam, User user, GameUser gameUser,
+                            Game game, GameUserRole gameUserRole, GamePayWayDTO gamePayWayDTO) {
+        return Order.builder()
                 .orderId(orderNum)
                 .agentId(user.getAgentId())
                 .cpId(game.getCpId())
@@ -112,11 +127,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 .callBackStatus(CallBackEnum.UN_CALL_BACK.getCallBackStatus())
                 .roleLevel(gameUserRole.getRoleLevel())
                 .roleVipLevel(gameUserRole.getRoleVipLevel())
-                .build());
-        //设置订单号
-        payParam.setOrderId(orderNum);
-        //返回
-        return Boolean.TRUE;
+                .build();
     }
 
     private String getOrderNum(Long userId) {

+ 3 - 4
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserLoginLogServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.mybatis.entity.UserLoginLog;
 import com.zanxiang.game.module.mybatis.mapper.UserLoginLogMapper;
-import com.zanxiang.game.module.sdk.enums.DeviceTypeEnum;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.IUserLoginLogService;
 import lombok.extern.slf4j.Slf4j;
@@ -31,20 +30,20 @@ public class UserLoginLogServiceImpl extends ServiceImpl<UserLoginLogMapper, Use
                 .roleName(roleName)
                 .os(userData.getDeviceSystem())
                 .ip(userData.getIp())
-                .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID.getDeviceType())
+                .deviceType(userData.getDeviceType())
                 .type(type)
                 .createTime(LocalDateTime.now())
                 .build());
     }
 
     @Override
-    public Boolean createUserLoginLog(User user, Integer type) {
+    public Boolean createUserLoginLog(User user, Integer type, Integer deviceType) {
         return super.save(UserLoginLog.builder()
                 .userId(user.getId())
                 .gameId(user.getGameId())
                 .os(user.getDeviceSystem())
                 .ip(user.getIp())
-                .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID.getDeviceType())
+                .deviceType(deviceType)
                 .type(type)
                 .createTime(LocalDateTime.now())
                 .build());