ソースを参照

头条APP回传列表接口提交

huyuxi 9 ヶ月 前
コミット
cd34fdecb2
12 ファイル変更583 行追加2 行削除
  1. 50 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/OceanengineAppController.java
  2. 82 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineAppOrderLogDTO.java
  3. 60 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineAppUserLogDTO.java
  4. 100 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineAppOrderLogVO.java
  5. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineAppOrderSplitLogVO.java
  6. 63 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineAppUserLogVO.java
  7. 5 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppOrderLogService.java
  8. 5 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppOrderSplitLogService.java
  9. 5 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppUserLogService.java
  10. 84 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppOrderLogServiceImpl.java
  11. 34 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppOrderSplitLogServiceImpl.java
  12. 62 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppUserLogServiceImpl.java

+ 50 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/OceanengineAppController.java

@@ -0,0 +1,50 @@
+package com.zanxiang.game.back.serve.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppOrderLogDTO;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppUserLogDTO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderSplitLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppUserLogVO;
+import com.zanxiang.game.back.serve.service.*;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collections;
+import java.util.List;
+
+@RestController
+@RequestMapping("/oceanengineApp")
+@Api("头条APP回传策略")
+public class OceanengineAppController {
+    @Autowired
+    private IGameOceanengineAppUserLogService gameOceanengineAppUserLogService;
+    @Autowired
+    private IGameOceanengineAppOrderLogService gameOceanengineAppOrderLogService;
+    @Autowired
+    private IGameOceanengineAppOrderSplitLogService gameOceanengineAppOrderSplitLogService;
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengineApp:orderLogs")
+    @PostMapping("/orderLogs")
+    @ApiOperation(value = "头条订单回传日志列表")
+    public ResultVO<IPage<GameOceanengineAppOrderLogVO>> oceanengineAppOrderLogList(@RequestBody GameOceanengineAppOrderLogDTO dto) {
+        return ResultVO.ok(gameOceanengineAppOrderLogService.oceanengineAppOrderLogList(dto));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengineApp:orderLogs")
+    @GetMapping("/orderSplitList/{orderId}")
+    public ResultVO<List<GameOceanengineAppOrderSplitLogVO>> orderSplitList(@PathVariable("orderId") String orderId) {
+        return ResultVO.ok(gameOceanengineAppOrderSplitLogService.listByOrderNo(Collections.singletonList(orderId)));
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengineApp:userLogs")
+    @PostMapping("/userLogs")
+    @ApiOperation(value = "头条用户回传日志列表")
+    public ResultVO<IPage<GameOceanengineAppUserLogVO>> oceanengineAppUserLogList(@RequestBody GameOceanengineAppUserLogDTO dto) {
+        return ResultVO.ok(gameOceanengineAppUserLogService.oceanengineAppUserLogList(dto));
+    }
+}

+ 82 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineAppOrderLogDTO.java

@@ -0,0 +1,82 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderSplitLogVO;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineAppOrderLogDTO extends BaseListDTO<GameOceanengineAppOrderLog> {
+    @ApiModelProperty("用户ID")
+    private String userId;
+
+    @ApiModelProperty("用户设备mac地址")
+    private String mac;
+
+    @ApiModelProperty("设备唯一编号IMEI")
+    private String imei;
+
+    @ApiModelProperty("设备OAID")
+    private String oaid;
+
+    @ApiModelProperty("安卓id, (仅安卓设备才有值)")
+    private String androidId;
+
+    @ApiModelProperty("IOS设备IDFA")
+    private String idfa;
+
+    @ApiModelProperty("IOS设备CAID")
+    private String caid;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消")
+    private Integer orderStatus;
+
+    @ApiModelProperty("注册时间")
+    private LocalDate regTimeBegin;
+
+    @ApiModelProperty("注册时间")
+    private LocalDate regTimeEnd;
+
+    @ApiModelProperty("回传状态 -1:回传失败;0:未回传;1:回传")
+    private Integer backStatus;
+
+    @ApiModelProperty("角色名")
+    private String roleName;
+
+    @ApiModelProperty("充值到支付的间隔时间(分)")
+    private Long regPayIntervalTimeMin;
+
+    @ApiModelProperty("充值到支付的间隔时间(分)")
+    private Long regPayIntervalTimeMax;
+
+    @ApiModelProperty("是否是首单")
+    private Boolean isFirstOrder;
+
+}

+ 60 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameOceanengineAppUserLogDTO.java

@@ -0,0 +1,60 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppUserLog;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineAppUserLogDTO extends BaseListDTO<GameOceanengineAppUserLog> {
+    @ApiModelProperty("用户ID")
+    private String userId;
+
+    @ApiModelProperty("用户设备mac地址")
+    private String mac;
+
+    @ApiModelProperty("设备唯一编号IMEI")
+    private String imei;
+
+    @ApiModelProperty("设备OAID")
+    private String oaid;
+
+    @ApiModelProperty("安卓id, (仅安卓设备才有值)")
+    private String androidId;
+
+    @ApiModelProperty("IOS设备IDFA")
+    private String idfa;
+
+    @ApiModelProperty("IOS设备CAID")
+    private String caid;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("回传状态")
+    private Integer backStatus;
+
+    @ApiModelProperty("注册时间")
+    private LocalDate activeTimeBegin;
+
+    @ApiModelProperty("注册时间")
+    private LocalDate activeTimeEnd;
+}

+ 100 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineAppOrderLogVO.java

@@ -0,0 +1,100 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineAppOrderLogVO {
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("用户ID")
+    private String userId;
+
+    @ApiModelProperty("用户设备mac地址")
+    private String mac;
+
+    @ApiModelProperty("设备唯一编号IMEI")
+    private String imei;
+
+    @ApiModelProperty("设备OAID")
+    private String oaid;
+
+    @ApiModelProperty("安卓id, (仅安卓设备才有值)")
+    private String androidId;
+
+    @ApiModelProperty("IOS设备IDFA")
+    private String idfa;
+
+    @ApiModelProperty("IOS设备CAID")
+    private String caid;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("回传策略ID")
+    private Long backPolicyId;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("渠道名称")
+    private String agentName;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("订单金额(分)")
+    private Long amount;
+
+    @ApiModelProperty("支付状态,0 : 预下单, 1 : 待支付,2 : 支付成功,-1 : 已取消")
+    private Integer orderStatus;
+
+    @ApiModelProperty("下单时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("支付时间")
+    private LocalDateTime payTime;
+
+    @ApiModelProperty("注册时间")
+    private LocalDateTime regTime;
+
+    @ApiModelProperty("回传状态 -1:回传失败;0:未回传;1:回传")
+    private Integer backStatus;
+
+    @ApiModelProperty("角色ID")
+    private String roleId;
+
+    @ApiModelProperty("角色名")
+    private String roleName;
+
+    @ApiModelProperty("注册到付费的间隔时间")
+    private String regPayIntervalTime;
+
+    @ApiModelProperty("是否是首单")
+    private Boolean isFirstOrder;
+
+    @ApiModelProperty("回传金额")
+    private Long backMoney;
+
+    @ApiModelProperty("回传日志")
+    private String backMsg;
+
+    @ApiModelProperty("回传拆分订单")
+    private List<GameOceanengineAppOrderSplitLogVO> splitOrderList;
+}

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineAppOrderSplitLogVO.java

@@ -0,0 +1,33 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+public class GameOceanengineAppOrderSplitLogVO {
+
+    private Long id;
+
+    private LocalDate backDay;
+
+    private String orderNo;
+
+    private Integer backIndex;
+
+    private Integer backCount;
+
+    private BigDecimal splitMoney;
+
+    private LocalDateTime backTime;
+
+    private LocalDateTime executeTime;
+
+    private Integer backStatus;
+
+    private String backErrorMsg;
+
+    private LocalDateTime createTime;
+}

+ 63 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineAppUserLogVO.java

@@ -0,0 +1,63 @@
+package com.zanxiang.game.back.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 头条订单上报日志
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameOceanengineAppUserLogVO {
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("用户ID")
+    private String userId;
+
+    @ApiModelProperty("用户设备mac地址")
+    private String mac;
+
+    @ApiModelProperty("设备唯一编号IMEI")
+    private String imei;
+
+    @ApiModelProperty("设备OAID")
+    private String oaid;
+
+    @ApiModelProperty("安卓id, (仅安卓设备才有值)")
+    private String androidId;
+
+    @ApiModelProperty("IOS设备IDFA")
+    private String idfa;
+
+    @ApiModelProperty("IOS设备CAID")
+    private String caid;
+
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty("广告账号ID")
+    private Long accountId;
+
+    @ApiModelProperty("渠道标识")
+    private String agentKey;
+
+    @ApiModelProperty("渠道名称")
+    private String agentName;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("注册/激活时间")
+    private LocalDateTime activeTime;
+
+    @ApiModelProperty("回传状态")
+    private Integer backStatus;
+}

+ 5 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppOrderLogService.java

@@ -1,9 +1,12 @@
 package com.zanxiang.game.back.serve.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.sd4324530.jtuple.Tuple2;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppOrderLogDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderLog;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderLogVO;
 
 import java.time.LocalDateTime;
 
@@ -12,4 +15,6 @@ public interface IGameOceanengineAppOrderLogService extends IService<GameOceanen
     boolean callback(GameOceanengineAppOrderLog orderLog);
 
     Tuple2<BackStatusEnum, String> doCallback(GameOceanengineAppOrderLog orderLog, LocalDateTime backTime, Long backMoney);
+
+    IPage<GameOceanengineAppOrderLogVO> oceanengineAppOrderLogList(GameOceanengineAppOrderLogDTO dto);
 }

+ 5 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppOrderSplitLogService.java

@@ -2,6 +2,11 @@ package com.zanxiang.game.back.serve.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderSplitLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderSplitLogVO;
+
+import java.util.Collection;
+import java.util.List;
 
 public interface IGameOceanengineAppOrderSplitLogService extends IService<GameOceanengineAppOrderSplitLog> {
+    List<GameOceanengineAppOrderSplitLogVO> listByOrderNo(Collection<String> orderNos);
 }

+ 5 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppUserLogService.java

@@ -1,9 +1,14 @@
 package com.zanxiang.game.back.serve.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppUserLogDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppUserLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppUserLogVO;
 
 public interface IGameOceanengineAppUserLogService extends IService<GameOceanengineAppUserLog> {
 
     boolean callback(GameOceanengineAppUserLog userLog, boolean mustBack);
+
+    IPage<GameOceanengineAppUserLogVO> oceanengineAppUserLogList(GameOceanengineAppUserLogDTO dto);
 }

+ 84 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppOrderLogServiceImpl.java

@@ -3,30 +3,46 @@ package com.zanxiang.game.back.serve.service.impl;
 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.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.sd4324530.jtuple.Tuple2;
 import com.github.sd4324530.jtuple.Tuple3;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppOrderLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppOrderLogDTO;
 import com.zanxiang.game.back.serve.pojo.entity.*;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackUnitEnum;
+import com.zanxiang.game.back.serve.pojo.vo.*;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderLogVO;
 import com.zanxiang.game.back.serve.service.*;
 import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
+import com.zanxiang.game.back.serve.utils.OrderUtil;
+import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.pojo.vo.AgentRpcVO;
+import com.zanxiang.game.module.base.rpc.IAgentRpc;
+import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
 public class GameOceanengineAppOrderLogServiceImpl extends ServiceImpl<GameOceanengineAppOrderLogMapper, GameOceanengineAppOrderLog>
-implements IGameOceanengineAppOrderLogService {
+        implements IGameOceanengineAppOrderLogService {
 
     @Autowired
     private IGameBackPolicyService gameBackPolicyService;
@@ -36,6 +52,8 @@ implements IGameOceanengineAppOrderLogService {
     private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
     @Autowired
     private IGameOceanengineAppOrderSplitLogService gameOceanengineAppOrderSplitLogService;
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IAgentRpc agentRpc;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -164,6 +182,71 @@ implements IGameOceanengineAppOrderLogService {
         return Tuple2.with(backStatus, errMsg);
     }
 
+    @Override
+    public IPage<GameOceanengineAppOrderLogVO> oceanengineAppOrderLogList(GameOceanengineAppOrderLogDTO dto) {
+        IPage<GameOceanengineAppOrderLog> page = page(dto.toPage(), new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
+                .eq(StringUtils.isNotBlank(dto.getUserId()), GameOceanengineAppOrderLog::getUserId, dto.getUserId())
+                .eq(StringUtils.isNotBlank(dto.getMac()), GameOceanengineAppOrderLog::getMac, dto.getMac())
+                .eq(StringUtils.isNotBlank(dto.getImei()), GameOceanengineAppOrderLog::getImei, dto.getImei())
+                .eq(StringUtils.isNotBlank(dto.getOaid()), GameOceanengineAppOrderLog::getOaid, dto.getOaid())
+                .eq(StringUtils.isNotBlank(dto.getAndroidId()), GameOceanengineAppOrderLog::getAndroidId, dto.getAndroidId())
+                .eq(StringUtils.isNotBlank(dto.getIdfa()), GameOceanengineAppOrderLog::getIdfa, dto.getIdfa())
+                .eq(StringUtils.isNotBlank(dto.getCaid()), GameOceanengineAppOrderLog::getCaid, dto.getCaid())
+                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameOceanengineAppOrderLog::getAgentKey, dto.getAgentKey())
+                .ge(dto.getRegTimeBegin() != null, GameOceanengineAppOrderLog::getRegTime, dto.getRegTimeBegin() == null ? null : LocalDateTime.of(dto.getRegTimeBegin(), LocalTime.MIDNIGHT))
+                .le(dto.getRegTimeEnd() != null, GameOceanengineAppOrderLog::getRegTime, dto.getRegTimeEnd() == null ? null : LocalDateTime.of(dto.getRegTimeEnd(), LocalTime.MAX))
+                .eq(null != dto.getGameId(), GameOceanengineAppOrderLog::getGameId, dto.getGameId())
+                .eq(null != dto.getAccountId(), GameOceanengineAppOrderLog::getAccountId, dto.getAccountId())
+                .eq(StringUtils.isNotBlank(dto.getOrderNo()), GameOceanengineAppOrderLog::getOrderNo, dto.getOrderNo())
+                .eq(null != dto.getBackStatus(), GameOceanengineAppOrderLog::getBackStatus, dto.getBackStatus())
+                .eq(dto.getIsFirstOrder() != null, GameOceanengineAppOrderLog::getIsFirstOrder, dto.getIsFirstOrder())
+                .eq(null != dto.getOrderStatus(), GameOceanengineAppOrderLog::getOrderStatus, dto.getOrderStatus())
+                .like(StringUtils.isNotBlank(dto.getRoleName()), GameOceanengineAppOrderLog::getRoleName, dto.getRoleName())
+                .apply(dto.getRegPayIntervalTimeMin() != null, "if(pay_time is not null, TIMESTAMPDIFF(minute, reg_time, pay_time), null) >= {0}", dto.getRegPayIntervalTimeMin())
+                .apply(dto.getRegPayIntervalTimeMax() != null, "if(pay_time is not null, TIMESTAMPDIFF(minute, reg_time, pay_time), null) <= {0}", dto.getRegPayIntervalTimeMax())
+                .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
+        );
+        IPage<GameOceanengineAppOrderLogVO> result = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        if (CollectionUtils.isEmpty(page.getRecords())) {
+            return result;
+        }
+        result.setRecords(toVOBatch(page.getRecords()));
+        return result;
+    }
+
+    private List<GameOceanengineAppOrderLogVO> toVOBatch(List<GameOceanengineAppOrderLog> logList) {
+        if (CollectionUtils.isEmpty(logList)) {
+            return Collections.emptyList();
+        }
+        List<GameOceanengineAppOrderSplitLogVO> orderSplitList = gameOceanengineAppOrderSplitLogService.listByOrderNo(logList.stream().map(GameOceanengineAppOrderLog::getOrderNo).collect(Collectors.toSet()));
+        Set<String> agentKeys = logList.stream().map(GameOceanengineAppOrderLog::getAgentKey).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
+        Map<String, AgentRpcVO> agentMap = CollectionUtils.isEmpty(agentKeys) ? Collections.emptyMap() : agentRpc.getByAgentKeys(new ArrayList<>(agentKeys))
+                .getData().stream().collect(Collectors.toMap(AgentRpcVO::getAgentKey, Function.identity()));
+        return logList.stream().map(log -> {
+            GameOceanengineAppOrderLogVO vo = toVOSimple(log);
+            if (StringUtils.isNotBlank(log.getAgentKey())) {
+                AgentRpcVO agent = agentMap.get(log.getAgentKey());
+                if (agent != null) {
+                    vo.setAgentName(agent.getAgentName());
+                }
+
+            }
+            List<GameOceanengineAppOrderSplitLogVO> splitList = orderSplitList.stream().filter(obj -> obj.getOrderNo().equals(log.getOrderNo())).collect(Collectors.toList());
+            vo.setSplitOrderList(splitList);
+            return vo;
+        }).collect(Collectors.toList());
+
+    }
+
+    private GameOceanengineAppOrderLogVO toVOSimple(GameOceanengineAppOrderLog log) {
+        if (log == null) {
+            return null;
+        }
+        GameOceanengineAppOrderLogVO vo = BeanUtil.copy(log, GameOceanengineAppOrderLogVO.class);
+        vo.setRegPayIntervalTime(OrderUtil.regPayIntervalTime(log.getPayTime(), log.getRegTime()));
+        return vo;
+    }
+
     private GameOceanengineAppUserLog userLog(GameOceanengineAppOrderLog orderLog) {
         return gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
                 .eq(GameOceanengineAppUserLog::getGameId, orderLog.getGameId())

+ 34 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppOrderSplitLogServiceImpl.java

@@ -1,14 +1,48 @@
 package com.zanxiang.game.back.serve.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppOrderSplitLogMapper;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderSplitLog;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppOrderSplitLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderSplitLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderSplitLogVO;
 import com.zanxiang.game.back.serve.service.IGameOceanengineAppOrderSplitLogService;
+import com.zanxiang.module.util.NumberUtil;
+import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Slf4j
 @Service
 public class GameOceanengineAppOrderSplitLogServiceImpl extends ServiceImpl<GameOceanengineAppOrderSplitLogMapper, GameOceanengineAppOrderSplitLog>
 implements IGameOceanengineAppOrderSplitLogService {
+    @Override
+    public List<GameOceanengineAppOrderSplitLogVO> listByOrderNo(Collection<String> orderNos) {
+        if (CollectionUtils.isEmpty(orderNos)) {
+            return Collections.emptyList();
+        }
+        return list(new LambdaQueryWrapper<GameOceanengineAppOrderSplitLog>()
+                .in(GameOceanengineAppOrderSplitLog::getOrderNo, orderNos)
+                .orderByAsc(GameOceanengineAppOrderSplitLog::getBackIndex)
+        ).stream().map(this::toVOSimple).collect(Collectors.toList());
+    }
+
+    private GameOceanengineAppOrderSplitLogVO toVOSimple(GameOceanengineAppOrderSplitLog log) {
+        if (log == null) {
+            return null;
+        }
+        GameOceanengineAppOrderSplitLogVO vo = BeanUtil.copy(log, GameOceanengineAppOrderSplitLogVO.class);
+        if (log.getSplitMoney() != null) {
+            vo.setSplitMoney(NumberUtil.divide100(new BigDecimal(log.getSplitMoney())));
+        }
+        return vo;
+    }
 }

+ 62 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppUserLogServiceImpl.java

@@ -2,23 +2,38 @@ package com.zanxiang.game.back.serve.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppUserLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppBackLog;
+import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppUserLogDTO;
+import com.zanxiang.game.back.serve.pojo.entity.*;
+import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppUserLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppUserLog;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppUserLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppUserLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppUserLogVO;
 import com.zanxiang.game.back.serve.service.IGameOceanengineAppBackLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineAppUserLogService;
 import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.pojo.vo.AgentRpcVO;
 import com.zanxiang.game.module.base.rpc.IAgentRpc;
+import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -40,6 +55,52 @@ implements IGameOceanengineAppUserLogService {
         );
     }
 
+    @Override
+    public IPage<GameOceanengineAppUserLogVO> oceanengineAppUserLogList(GameOceanengineAppUserLogDTO dto) {
+        IPage<GameOceanengineAppUserLog> page = page(dto.toPage(), new LambdaQueryWrapper<GameOceanengineAppUserLog>()
+                .eq(StringUtils.isNotBlank(dto.getUserId()), GameOceanengineAppUserLog::getUserId, dto.getUserId())
+                .eq(StringUtils.isNotBlank(dto.getMac()), GameOceanengineAppUserLog::getMac, dto.getMac())
+                .eq(StringUtils.isNotBlank(dto.getImei()), GameOceanengineAppUserLog::getImei, dto.getImei())
+                .eq(StringUtils.isNotBlank(dto.getOaid()), GameOceanengineAppUserLog::getOaid, dto.getOaid())
+                .eq(StringUtils.isNotBlank(dto.getAndroidId()), GameOceanengineAppUserLog::getAndroidId, dto.getAndroidId())
+                .eq(StringUtils.isNotBlank(dto.getIdfa()), GameOceanengineAppUserLog::getIdfa, dto.getIdfa())
+                .eq(StringUtils.isNotBlank(dto.getCaid()), GameOceanengineAppUserLog::getCaid, dto.getCaid())
+                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameOceanengineAppUserLog::getAgentKey, dto.getAgentKey())
+                .ge(dto.getActiveTimeBegin() != null, GameOceanengineAppUserLog::getActiveTime, dto.getActiveTimeBegin() == null ? null : LocalDateTime.of(dto.getActiveTimeBegin(), LocalTime.MIDNIGHT))
+                .le(dto.getActiveTimeEnd() != null, GameOceanengineAppUserLog::getActiveTime, dto.getActiveTimeEnd() == null ? null : LocalDateTime.of(dto.getActiveTimeEnd(), LocalTime.MAX))
+                .eq(null != dto.getGameId(), GameOceanengineAppUserLog::getGameId, dto.getGameId())
+                .eq(null != dto.getAccountId(), GameOceanengineAppUserLog::getAccountId, dto.getAccountId())
+                .eq(null != dto.getBackStatus(), GameOceanengineAppUserLog::getBackStatus, dto.getBackStatus())
+                .orderByDesc(GameOceanengineAppUserLog::getCreateTime)
+        );
+        IPage<GameOceanengineAppUserLogVO> result = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        if (CollectionUtils.isEmpty(page.getRecords())) {
+            return result;
+        }
+        result.setRecords(toVOBatch(page.getRecords()));
+        return result;
+    }
+
+    private List<GameOceanengineAppUserLogVO> toVOBatch(List<GameOceanengineAppUserLog> logList) {
+        if (CollectionUtils.isEmpty(logList)) {
+            return Collections.emptyList();
+        }
+        Set<String> agentKeys = logList.stream().map(GameOceanengineAppUserLog::getAgentKey).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
+        Map<String, AgentRpcVO> agentMap = CollectionUtils.isEmpty(agentKeys) ? Collections.emptyMap() : agentRpc.getByAgentKeys(new ArrayList<>(agentKeys))
+                .getData().stream().collect(Collectors.toMap(AgentRpcVO::getAgentKey, Function.identity()));
+        return logList.stream().map(log -> {
+            GameOceanengineAppUserLogVO vo = BeanUtil.copy(log, GameOceanengineAppUserLogVO.class);
+            if (StringUtils.isNotBlank(log.getAgentKey())) {
+                AgentRpcVO agent = agentMap.get(log.getAgentKey());
+                if (agent != null) {
+                    vo.setAgentName(agent.getAgentName());
+                }
+            }
+            return vo;
+        }).collect(Collectors.toList());
+
+    }
+
     private BackStatusEnum doCallback(GameOceanengineAppUserLog userLog, boolean mustBack) {
         // 是否已经回传过
         if (!mustBack && gameOceanengineAppBackLogService.count(new LambdaQueryWrapper<GameOceanengineAppBackLog>()