Kaynağa Gözat

回传策略更新,支持拆单回传

wcc 1 yıl önce
ebeveyn
işleme
1d975c8b70
22 değiştirilmiş dosya ile 505 ekleme ve 54 silme
  1. 31 3
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/OceanengineLogController.java
  2. 31 3
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/TencentLogController.java
  3. 31 3
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/TencentMiniGameLogController.java
  4. 21 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/OrderReportDTO.java
  5. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderLogVO.java
  6. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderSplitLogVO.java
  7. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameOrderVO.java
  8. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniOrderSplitLogVO.java
  9. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderSplitLogVO.java
  10. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderVO.java
  11. 2 2
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineOrderLogService.java
  12. 6 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineOrderSplitLogService.java
  13. 2 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameOrderService.java
  14. 6 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameOrderSplitLogService.java
  15. 2 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentOrderService.java
  16. 6 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentOrderSplitLogService.java
  17. 55 14
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java
  18. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderSplitLogServiceImpl.java
  19. 51 13
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java
  20. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderSplitLogServiceImpl.java
  21. 51 14
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java
  22. 33 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderSplitLogServiceImpl.java

+ 31 - 3
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/OceanengineLogController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineOrderLogDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineUserLogDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderLogVO;
 import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineUserLogVO;
 import com.zanxiang.game.back.serve.service.IGameOceanengineOrderLogService;
@@ -13,7 +14,9 @@ import com.zanxiang.module.util.exception.BaseException;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -43,10 +46,35 @@ public class OceanengineLogController {
     @PostMapping("/orderReport/{ids}/{backMoney}")
     @ApiOperation(value = "头条订单手动上报")
     public ResultVO<Boolean> oceanengineOrderReport(@PathVariable("ids") List<Long> ids, @PathVariable("backMoney") BigDecimal backMoney) {
-        if (backMoney.compareTo(BigDecimal.ZERO) <= 0) {
-            throw new BaseException("回传金额错误!");
+        OrderReportDTO dto = new OrderReportDTO();
+        dto.setOrderIds(ids);
+        dto.setSplitOrder(false);
+        dto.setBackMoney(backMoney);
+        return oceanengineOrderReport(dto);
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:oceanengine:orderReport")
+    @PostMapping("/orderReport")
+    @ApiOperation(value = "头条订单手动上报")
+    public ResultVO<Boolean> oceanengineOrderReport(@Validated @RequestBody OrderReportDTO dto) {
+        if (CollectionUtils.isEmpty(dto.getOrderIds())) {
+            throw new BaseException("参数错误!");
+        }
+        if (dto.getSplitOrder()) {
+            if (CollectionUtils.isEmpty(dto.getSplitMoney())) {
+                throw new BaseException("回传金额错误!");
+            }
+            dto.getSplitMoney().forEach(backMoney -> {
+                if (backMoney.compareTo(BigDecimal.ZERO) <= 0) {
+                    throw new BaseException("回传金额错误!");
+                }
+            });
+        } else {
+            if (dto.getBackMoney().compareTo(BigDecimal.ZERO) <= 0) {
+                throw new BaseException("回传金额错误!");
+            }
         }
-        return ResultVO.ok(oceanengineOrderLogService.oceanengineOrderReport(ids, NumberUtil.multiply100(backMoney).longValue()));
+        return ResultVO.ok(oceanengineOrderLogService.oceanengineOrderReport(dto));
     }
 
     @PreAuthorize(permissionKey = "gameBack:oceanengine:userLogs")

+ 31 - 3
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/TencentLogController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentOrderDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentUserDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderVO;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentUserVO;
 import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
@@ -13,7 +14,9 @@ import com.zanxiang.module.util.exception.BaseException;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -43,10 +46,35 @@ public class TencentLogController {
     @PostMapping("/orderReport/{ids}/{backMoney}")
     @ApiOperation(value = "腾讯订单手动上报")
     public ResultVO<Boolean> tencentOrderReport(@PathVariable("ids") List<Long> ids, @PathVariable("backMoney") BigDecimal backMoney) {
-        if(backMoney.compareTo(BigDecimal.ZERO) <= 0) {
-            throw new BaseException("回传金额错误!");
+        OrderReportDTO dto = new OrderReportDTO();
+        dto.setOrderIds(ids);
+        dto.setSplitOrder(false);
+        dto.setBackMoney(backMoney);
+        return tencentOrderReport(dto);
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencent:orderReport")
+    @PostMapping("/orderReport")
+    @ApiOperation(value = "腾讯订单手动上报")
+    public ResultVO<Boolean> tencentOrderReport(@Validated @RequestBody OrderReportDTO dto) {
+        if (CollectionUtils.isEmpty(dto.getOrderIds())) {
+            throw new BaseException("参数错误!");
+        }
+        if (dto.getSplitOrder()) {
+            if (CollectionUtils.isEmpty(dto.getSplitMoney())) {
+                throw new BaseException("回传金额错误!");
+            }
+            dto.getSplitMoney().forEach(backMoney -> {
+                if (backMoney.compareTo(BigDecimal.ZERO) <= 0) {
+                    throw new BaseException("回传金额错误!");
+                }
+            });
+        } else {
+            if (dto.getBackMoney().compareTo(BigDecimal.ZERO) <= 0) {
+                throw new BaseException("回传金额错误!");
+            }
         }
-        return ResultVO.ok(tencentOrderService.tencentOrderReport(ids, NumberUtil.multiply100(backMoney).longValue()));
+        return ResultVO.ok(tencentOrderService.tencentOrderReport(dto));
     }
 
     @PreAuthorize(permissionKey = "gameBack:tencent:userLogs")

+ 31 - 3
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/controller/TencentMiniGameLogController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameOrderDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameUserDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameOrderVO;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameUserVO;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderService;
@@ -13,7 +14,9 @@ import com.zanxiang.module.util.exception.BaseException;
 import com.zanxiang.module.util.pojo.ResultVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -43,10 +46,35 @@ public class TencentMiniGameLogController {
     @PostMapping("/orderReport/{ids}/{backMoney}")
     @ApiOperation(value = "腾讯订单手动上报")
     public ResultVO<Boolean> tencentOrderReport(@PathVariable("ids") List<Long> ids, @PathVariable("backMoney") BigDecimal backMoney) {
-        if (backMoney.compareTo(BigDecimal.ZERO) <= 0) {
-            throw new BaseException("回传金额错误!");
+        OrderReportDTO dto = new OrderReportDTO();
+        dto.setOrderIds(ids);
+        dto.setSplitOrder(false);
+        dto.setBackMoney(backMoney);
+        return tencentOrderReport(dto);
+    }
+
+    @PreAuthorize(permissionKey = "gameBack:tencentMiniGame:orderReport")
+    @PostMapping("/orderReport")
+    @ApiOperation(value = "腾讯订单手动上报")
+    public ResultVO<Boolean> tencentOrderReport(@Validated @RequestBody OrderReportDTO dto) {
+        if (CollectionUtils.isEmpty(dto.getOrderIds())) {
+            throw new BaseException("参数错误!");
+        }
+        if (dto.getSplitOrder()) {
+            if (CollectionUtils.isEmpty(dto.getSplitMoney())) {
+                throw new BaseException("回传金额错误!");
+            }
+            dto.getSplitMoney().forEach(backMoney -> {
+                if (backMoney.compareTo(BigDecimal.ZERO) <= 0) {
+                    throw new BaseException("回传金额错误!");
+                }
+            });
+        } else {
+            if (dto.getBackMoney().compareTo(BigDecimal.ZERO) <= 0) {
+                throw new BaseException("回传金额错误!");
+            }
         }
-        return ResultVO.ok(gameTencentMiniGameOrderService.doReport(ids, NumberUtil.multiply100(backMoney).longValue()));
+        return ResultVO.ok(gameTencentMiniGameOrderService.doReport(dto));
     }
 
     @PreAuthorize(permissionKey = "gameBack:tencentMiniGame:userLogs")

+ 21 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/OrderReportDTO.java

@@ -0,0 +1,21 @@
+package com.zanxiang.game.back.serve.pojo.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class OrderReportDTO {
+
+    @NotNull(message = "订单列表不能为空")
+    private List<Long> orderIds;
+
+    @NotNull(message = "参数错误!")
+    private Boolean splitOrder;
+
+    private BigDecimal backMoney;
+
+    private List<BigDecimal> splitMoney;
+}

+ 4 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderLogVO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 头条订单上报日志
@@ -78,4 +79,7 @@ public class GameOceanengineOrderLogVO {
 
     @ApiModelProperty("回传日志")
     private String backMsg;
+
+    @ApiModelProperty("回传拆分订单")
+    private List<GameOceanengineOrderSplitLogVO> splitOrderList;
 }

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameOceanengineOrderSplitLogVO.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 GameOceanengineOrderSplitLogVO {
+
+    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;
+}

+ 4 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniGameOrderVO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -118,4 +119,7 @@ public class GameTencentMiniGameOrderVO {
 
     @ApiModelProperty("回传日志")
     private String backMsg;
+
+    @ApiModelProperty("回传拆分订单")
+    private List<GameTencentMiniOrderSplitLogVO> splitOrderList;
 }

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentMiniOrderSplitLogVO.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 GameTencentMiniOrderSplitLogVO {
+    
+    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;
+}

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderSplitLogVO.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 GameTencentOrderSplitLogVO {
+    
+    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;
+}

+ 4 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameTencentOrderVO.java

@@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -134,4 +135,7 @@ public class GameTencentOrderVO {
 
     @ApiModelProperty("回传日志")
     private String backMsg;
+
+    @ApiModelProperty("回传拆分订单")
+    private List<GameTencentOrderSplitLogVO> splitOrderList;
 }

+ 2 - 2
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineOrderLogService.java

@@ -4,6 +4,7 @@ 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.GameOceanengineOrderLogDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderLogVO;
@@ -15,8 +16,7 @@ public interface IGameOceanengineOrderLogService extends IService<GameOceanengin
     boolean callback(GameOceanengineOrderLog orderLog);
 
     IPage<GameOceanengineOrderLogVO> oceanengineOrderLogList(GameOceanengineOrderLogDTO dto);
-
-    boolean oceanengineOrderReport(List<Long> ids, Long backMoney);
+    boolean oceanengineOrderReport(OrderReportDTO dto);
 
     Tuple2<BackStatusEnum, String> doCallback(GameOceanengineOrderLog orderLog, Long backMoney);
 }

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

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

+ 2 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameOrderService.java

@@ -3,6 +3,7 @@ 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.GameTencentMiniGameOrderDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameOrderVO;
 
@@ -14,5 +15,5 @@ public interface IGameTencentMiniGameOrderService extends IService<GameTencentMi
 
     IPage<GameTencentMiniGameOrderVO> listOfPage(GameTencentMiniGameOrderDTO dto);
 
-    boolean doReport(List<Long> orderLogIds, Long backMoney);
+    boolean doReport(OrderReportDTO dto);
 }

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

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

+ 2 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentOrderService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.back.serve.pojo.dto.GameBackPolicyListDTO;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentOrderDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
@@ -25,7 +26,7 @@ public interface IGameTencentOrderService extends IService<GameTencentOrder> {
 
     IPage<GameTencentOrderVO> tencentOrderLogList(GameTencentOrderDTO dto);
 
-    boolean tencentOrderReport(List<Long> ids, Long backMoney);
+    boolean tencentOrderReport(OrderReportDTO dto);
 
     Tuple2<BackStatusEnum, String> doCallback(GameTencentOrder orderLog, Long backMoney);
 }

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

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

+ 55 - 14
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderLogServiceImpl.java

@@ -15,10 +15,12 @@ import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineOrderLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.oceanengine.OceanengineCallbackException;
 import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineOrderLogDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 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.GameOceanengineOrderLogVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderSplitLogVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineBackLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineOrderLogService;
@@ -29,15 +31,19 @@ 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.JsonUtil;
+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.apache.commons.lang3.RandomUtils;
 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.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.ArrayList;
@@ -177,23 +183,54 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
     }
 
     @Override
-    public boolean oceanengineOrderReport(List<Long> ids, Long backMoney) {
-        listByIds(ids).stream()
+    public boolean oceanengineOrderReport(OrderReportDTO dto) {
+        listByIds(dto.getOrderIds()).stream()
                 .filter(order -> !Objects.equals(order.getBackStatus(), BackStatusEnum.SUCCESS.getBackStatus()))
                 .forEach(orderLog -> {
-                    log.error("手动回传:{}-{}", orderLog.getId(), backMoney);
-                    orderLog.setBackMoney(backMoney);
-                    Tuple2<BackStatusEnum, String> backResult = doCallback(orderLog, backMoney);
-                    String backMsg = "手动触发回传";
-                    if (StringUtils.isNotBlank(backResult.second)) {
-                        backMsg += ("回传失败:" + backResult.second);
+                    if (dto.getSplitOrder()) {
+                        log.error("手动拆单回传:{}-{}", orderLog.getId(), StringUtils.join(dto.getSplitMoney(), ","));
+                        List<GameOceanengineOrderSplitLog> splitOrderLogList = new ArrayList<>(dto.getSplitMoney().size());
+                        LocalDateTime beginTime = LocalDateTime.now();
+                        long backMoneyTotal = 0L;
+                        for (int i = 0; i < dto.getSplitMoney().size(); i++) {
+                            long backMoney = NumberUtil.multiply100(dto.getSplitMoney().get(i)).longValue();
+                            backMoneyTotal += backMoney;
+                            LocalDateTime backTime = beginTime;
+                            splitOrderLogList.add(GameOceanengineOrderSplitLog.builder()
+                                    .backDay(backTime.toLocalDate())
+                                    .orderNo(orderLog.getOrderNo())
+                                    .backIndex(i + 1)
+                                    .backCount(dto.getSplitMoney().size())
+                                    .splitMoney(backMoney)
+                                    .backTime(backTime)
+                                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                                    .createTime(LocalDateTime.now())
+                                    .build()
+                            );
+                            beginTime = beginTime.plusMinutes(RandomUtils.nextInt(3, 10));
+                        }
+                        gameOceanengineOrderSplitLogService.saveBatch(splitOrderLogList);
+                        update(new LambdaUpdateWrapper<GameOceanengineOrderLog>()
+                                .set(GameOceanengineOrderLog::getBackStatus, BackStatusEnum.NO.getBackStatus())
+                                .set(GameOceanengineOrderLog::getBackMoney, backMoneyTotal)
+                                .set(GameOceanengineOrderLog::getBackMsg, "手动触发回传(拆单回传)")
+                                .eq(GameOceanengineOrderLog::getId, orderLog.getId())
+                        );
+                    } else {
+                        log.error("手动直接回传:{}-{}", orderLog.getId(), dto.getBackMoney());
+                        long backMoney = NumberUtil.multiply100(dto.getBackMoney()).longValue();
+                        Tuple2<BackStatusEnum, String> backResult = doCallback(orderLog, backMoney);
+                        String backMsg = "手动触发回传";
+                        if (StringUtils.isNotBlank(backResult.second)) {
+                            backMsg += ("回传失败:" + backResult.second);
+                        }
+                        update(new LambdaUpdateWrapper<GameOceanengineOrderLog>()
+                                .set(GameOceanengineOrderLog::getBackStatus, backResult.first.getBackStatus())
+                                .set(GameOceanengineOrderLog::getBackMoney, backMoney)
+                                .set(GameOceanengineOrderLog::getBackMsg, backMsg)
+                                .eq(GameOceanengineOrderLog::getId, orderLog.getId())
+                        );
                     }
-                    update(new LambdaUpdateWrapper<GameOceanengineOrderLog>()
-                            .set(GameOceanengineOrderLog::getBackStatus, backResult.first.getBackStatus())
-                            .set(GameOceanengineOrderLog::getBackMoney, backMoney)
-                            .set(GameOceanengineOrderLog::getBackMsg, backMsg)
-                            .eq(GameOceanengineOrderLog::getId, orderLog.getId())
-                    );
                 });
         return true;
     }
@@ -261,6 +298,7 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
         if (CollectionUtils.isEmpty(logList)) {
             return Collections.emptyList();
         }
+        List<GameOceanengineOrderSplitLogVO> orderSplitList = gameOceanengineOrderSplitLogService.listByOrderNo(logList.stream().map(GameOceanengineOrderLog::getOrderNo).collect(Collectors.toSet()));
         Set<String> agentKeys = logList.stream().map(GameOceanengineOrderLog::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()));
@@ -271,7 +309,10 @@ public class GameOceanengineOrderLogServiceImpl extends ServiceImpl<GameOceaneng
                 if (agent != null) {
                     vo.setAgentName(agent.getAgentName());
                 }
+
             }
+            List<GameOceanengineOrderSplitLogVO> splitList = orderSplitList.stream().filter(obj -> obj.getOrderNo().equals(log.getOrderNo())).collect(Collectors.toList());
+            vo.setSplitOrderList(splitList);
             return vo;
         }).collect(Collectors.toList());
 

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineOrderSplitLogServiceImpl.java

@@ -1,14 +1,47 @@
 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.GameOceanengineOrderSplitLogMapper;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderSplitLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineOrderSplitLogVO;
 import com.zanxiang.game.back.serve.service.IGameOceanengineOrderSplitLogService;
+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 GameOceanengineOrderSplitLogServiceImpl extends ServiceImpl<GameOceanengineOrderSplitLogMapper, GameOceanengineOrderSplitLog>
         implements IGameOceanengineOrderSplitLogService {
+
+    @Override
+    public List<GameOceanengineOrderSplitLogVO> listByOrderNo(Collection<String> orderNos) {
+        if (CollectionUtils.isEmpty(orderNos)) {
+            return Collections.emptyList();
+        }
+        return list(new LambdaQueryWrapper<GameOceanengineOrderSplitLog>()
+                .eq(GameOceanengineOrderSplitLog::getOrderNo, orderNos)
+                .orderByAsc(GameOceanengineOrderSplitLog::getBackIndex)
+        ).stream().map(this::toVOSimple).collect(Collectors.toList());
+    }
+
+    private GameOceanengineOrderSplitLogVO toVOSimple(GameOceanengineOrderSplitLog log) {
+        if (log == null) {
+            return null;
+        }
+        GameOceanengineOrderSplitLogVO vo = BeanUtil.copy(log, GameOceanengineOrderSplitLogVO.class);
+        if (log.getSplitMoney() != null) {
+            vo.setSplitMoney(NumberUtil.divide100(new BigDecimal(log.getSplitMoney())));
+        }
+        return vo;
+    }
 }

+ 51 - 13
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java

@@ -15,6 +15,7 @@ import com.zanxiang.erp.base.rpc.ISysUserRpc;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameOrderMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameOrderDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrderSplitLog;
@@ -23,6 +24,7 @@ import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrderSplitLog;
 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.GameTencentMiniGameOrderVO;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniOrderSplitLogVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderService;
@@ -33,9 +35,11 @@ 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.NumberUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.RandomUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -189,22 +193,53 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
     }
 
     @Override
-    public boolean doReport(List<Long> orderLogIds, Long backMoney) {
-        listByIds(orderLogIds).stream()
+    public boolean doReport(OrderReportDTO dto) {
+        listByIds(dto.getOrderIds()).stream()
                 .filter(order -> !Objects.equals(order.getBackStatus(), BackStatusEnum.SUCCESS.getBackStatus()))
                 .forEach(orderLog -> {
-                    log.error("手动回传:{}-{}", orderLog.getId(), backMoney);
-                    Tuple2<BackStatusEnum, String> backResult = gameTencentMiniGameBackLogService.orderBack(orderLog, backMoney);
-                    String backMsg = "手动触发回传!";
-                    if (StringUtils.isNotBlank(backResult.second)) {
-                        backMsg += ("回传失败:" + backResult.second);
+                    if (dto.getSplitOrder()) {
+                        log.error("手动拆单回传:{}-{}", orderLog.getId(), StringUtils.join(dto.getSplitMoney(), ","));
+                        List<GameTencentMiniGameOrderSplitLog> splitOrderLogList = new ArrayList<>(dto.getSplitMoney().size());
+                        LocalDateTime beginTime = LocalDateTime.now();
+                        long backMoneyTotal = 0L;
+                        for (int i = 0; i < dto.getSplitMoney().size(); i++) {
+                            long backMoney = NumberUtil.multiply100(dto.getSplitMoney().get(i)).longValue();
+                            LocalDateTime backTime = beginTime;
+                            backMoneyTotal += backMoney;
+                            splitOrderLogList.add(GameTencentMiniGameOrderSplitLog.builder()
+                                    .backDay(backTime.toLocalDate())
+                                    .orderNo(orderLog.getOrderId())
+                                    .backIndex(i + 1)
+                                    .backCount(dto.getSplitMoney().size())
+                                    .splitMoney(backMoney)
+                                    .backTime(backTime)
+                                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                                    .createTime(LocalDateTime.now())
+                                    .build());
+                            beginTime = beginTime.plusMinutes(RandomUtils.nextInt(3, 10));
+                        }
+                        gameTencentMiniGameOrderSplitLogService.saveBatch(splitOrderLogList);
+                        update(new LambdaUpdateWrapper<GameTencentMiniGameOrder>()
+                                .set(GameTencentMiniGameOrder::getBackStatus, BackStatusEnum.NO.getBackStatus())
+                                .set(GameTencentMiniGameOrder::getBackMoney, backMoneyTotal)
+                                .set(GameTencentMiniGameOrder::getBackMsg, "手动触发回传(拆单回传)")
+                                .eq(GameTencentMiniGameOrder::getId, orderLog.getId())
+                        );
+                    } else {
+                        log.error("手动直接回传:{}-{}", orderLog.getId(), dto.getBackMoney());
+                        long backMoney = NumberUtil.multiply100(dto.getBackMoney()).longValue();
+                        Tuple2<BackStatusEnum, String> backResult = gameTencentMiniGameBackLogService.orderBack(orderLog, backMoney);
+                        String backMsg = "手动触发回传!";
+                        if (StringUtils.isNotBlank(backResult.second)) {
+                            backMsg += ("回传失败:" + backResult.second);
+                        }
+                        update(new LambdaUpdateWrapper<GameTencentMiniGameOrder>()
+                                .set(GameTencentMiniGameOrder::getBackStatus, backResult.first.getBackStatus())
+                                .set(GameTencentMiniGameOrder::getBackMoney, backMoney)
+                                .set(GameTencentMiniGameOrder::getBackMsg, backMsg)
+                                .eq(GameTencentMiniGameOrder::getId, orderLog.getId())
+                        );
                     }
-                    update(new LambdaUpdateWrapper<GameTencentMiniGameOrder>()
-                            .set(GameTencentMiniGameOrder::getBackStatus, backResult.first.getBackStatus())
-                            .set(GameTencentMiniGameOrder::getBackMoney, backMoney)
-                            .set(GameTencentMiniGameOrder::getBackMsg, backMsg)
-                            .eq(GameTencentMiniGameOrder::getId, orderLog.getId())
-                    );
                 });
         return true;
     }
@@ -213,6 +248,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
         if (CollectionUtils.isEmpty(logList)) {
             return Collections.emptyList();
         }
+        List<GameTencentMiniOrderSplitLogVO> orderSplitList = gameTencentMiniGameOrderSplitLogService.listByOrderNo(logList.stream().map(GameTencentMiniGameOrder::getOrderId).collect(Collectors.toList()));
         Set<String> agentKeys = logList.stream().map(GameTencentMiniGameOrder::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()));
@@ -224,6 +260,8 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                     vo.setAgentName(agent.getAgentName());
                 }
             }
+            List<GameTencentMiniOrderSplitLogVO> splitList = orderSplitList.stream().filter(obj -> obj.getOrderNo().equals(log.getOrderId())).collect(Collectors.toList());
+            vo.setSplitOrderList(splitList);
             return vo;
         }).collect(Collectors.toList());
     }

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderSplitLogServiceImpl.java

@@ -1,14 +1,47 @@
 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.GameTencentMiniGameOrderSplitLogMapper;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrderSplitLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniOrderSplitLogVO;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderSplitLogService;
+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 GameTencentMiniGameOrderSplitLogServiceImpl extends ServiceImpl<GameTencentMiniGameOrderSplitLogMapper, GameTencentMiniGameOrderSplitLog>
         implements IGameTencentMiniGameOrderSplitLogService {
+
+    @Override
+    public List<GameTencentMiniOrderSplitLogVO> listByOrderNo(Collection<String> orderNos) {
+        if (CollectionUtils.isEmpty(orderNos)) {
+            return Collections.emptyList();
+        }
+        return list(new LambdaQueryWrapper<GameTencentMiniGameOrderSplitLog>()
+                .eq(GameTencentMiniGameOrderSplitLog::getOrderNo, orderNos)
+                .orderByAsc(GameTencentMiniGameOrderSplitLog::getBackIndex)
+        ).stream().map(this::toVOSimple).collect(Collectors.toList());
+    }
+
+    private GameTencentMiniOrderSplitLogVO toVOSimple(GameTencentMiniGameOrderSplitLog log) {
+        if (log == null) {
+            return null;
+        }
+        GameTencentMiniOrderSplitLogVO vo = BeanUtil.copy(log, GameTencentMiniOrderSplitLogVO.class);
+        if (log.getSplitMoney() != null) {
+            vo.setSplitMoney(NumberUtil.divide100(new BigDecimal(log.getSplitMoney())));
+        }
+        return vo;
+    }
 }

+ 51 - 14
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderServiceImpl.java

@@ -15,6 +15,7 @@ import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentOrderDTO;
+import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
@@ -25,6 +26,7 @@ import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
 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.GameTencentOrderSplitLogVO;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
@@ -37,10 +39,12 @@ 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.NumberUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.RandomUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -200,6 +204,7 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
         if (CollectionUtils.isEmpty(logList)) {
             return Collections.emptyList();
         }
+        List<GameTencentOrderSplitLogVO> orderSplitList = gameTencentOrderSplitLogService.listByOrderNo(logList.stream().map(GameTencentOrder::getOrderId).collect(Collectors.toList()));
         Set<String> agentKeys = logList.stream().map(GameTencentOrder::getChannel).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()));
@@ -211,6 +216,8 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
                     vo.setAgentName(agent.getAgentName());
                 }
             }
+            List<GameTencentOrderSplitLogVO> splitList = orderSplitList.stream().filter(obj -> obj.getOrderNo().equals(log.getOrderId())).collect(Collectors.toList());
+            vo.setSplitOrderList(splitList);
             return vo;
         }).collect(Collectors.toList());
     }
@@ -225,23 +232,53 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
     }
 
     @Override
-    public boolean tencentOrderReport(List<Long> ids, Long backMoney) {
-        listByIds(ids).stream()
+    public boolean tencentOrderReport(OrderReportDTO dto) {
+        listByIds(dto.getOrderIds()).stream()
                 .filter(order -> !Objects.equals(order.getIsBack(), BackStatusEnum.SUCCESS.getBackStatus()))
                 .forEach(orderLog -> {
-                    log.error("手动回传:{}-{}", orderLog.getId(), backMoney);
-
-                    Tuple2<BackStatusEnum, String> backResult = doCallback(orderLog, backMoney);
-                    String backMsg = "手动触发回传!";
-                    if (StringUtils.isNotBlank(backResult.second)) {
-                        backMsg += ("回传失败:" + backResult.second);
+                    if (dto.getSplitOrder()) {
+                        log.error("手动拆单回传:{}-{}", orderLog.getId(), StringUtils.join(dto.getSplitMoney(), ","));
+                        List<GameTencentOrderSplitLog> splitOrderLogList = new ArrayList<>(dto.getSplitMoney().size());
+                        LocalDateTime beginTime = LocalDateTime.now();
+                        long backMoneyTotal = 0L;
+                        for (int i = 0; i < dto.getSplitMoney().size(); i++) {
+                            long backMoney = NumberUtil.multiply100(dto.getSplitMoney().get(i)).longValue();
+                            LocalDateTime backTime = beginTime;
+                            backMoneyTotal += backMoney;
+                            splitOrderLogList.add(GameTencentOrderSplitLog.builder()
+                                    .backDay(backTime.toLocalDate())
+                                    .orderNo(orderLog.getOrderId())
+                                    .backIndex(i + 1)
+                                    .backCount(dto.getSplitMoney().size())
+                                    .splitMoney(backMoney)
+                                    .backTime(backTime)
+                                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                                    .createTime(LocalDateTime.now())
+                                    .build());
+                            beginTime = beginTime.plusMinutes(RandomUtils.nextInt(3, 10));
+                        }
+                        gameTencentOrderSplitLogService.saveBatch(splitOrderLogList);
+                        update(new LambdaUpdateWrapper<GameTencentOrder>()
+                                .set(GameTencentOrder::getIsBack, BackStatusEnum.NO.getBackStatus())
+                                .set(GameTencentOrder::getBackMoney, backMoneyTotal)
+                                .set(GameTencentOrder::getBackMsg, "手动触发回传(拆单回传)")
+                                .eq(GameTencentOrder::getId, orderLog.getId())
+                        );
+                    } else {
+                        log.error("手动直接回传:{}-{}", orderLog.getId(), dto.getBackMoney());
+                        long backMoney = NumberUtil.multiply100(dto.getBackMoney()).longValue();
+                        Tuple2<BackStatusEnum, String> backResult = doCallback(orderLog, backMoney);
+                        String backMsg = "手动触发回传!";
+                        if (StringUtils.isNotBlank(backResult.second)) {
+                            backMsg += ("回传失败:" + backResult.second);
+                        }
+                        update(new LambdaUpdateWrapper<GameTencentOrder>()
+                                .set(GameTencentOrder::getIsBack, backResult.first.getBackStatus())
+                                .set(GameTencentOrder::getBackMoney, backMoney)
+                                .set(GameTencentOrder::getBackMsg, backMsg)
+                                .eq(GameTencentOrder::getId, orderLog.getId())
+                        );
                     }
-                    update(new LambdaUpdateWrapper<GameTencentOrder>()
-                            .set(GameTencentOrder::getIsBack, backResult.first.getBackStatus())
-                            .set(GameTencentOrder::getBackMoney, backMoney)
-                            .set(GameTencentOrder::getBackMsg, backMsg)
-                            .eq(GameTencentOrder::getId, orderLog.getId())
-                    );
                 });
         return true;
     }

+ 33 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentOrderSplitLogServiceImpl.java

@@ -1,14 +1,47 @@
 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.GameTencentOrderSplitLogMapper;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrderSplitLog;
+import com.zanxiang.game.back.serve.pojo.vo.GameTencentOrderSplitLogVO;
 import com.zanxiang.game.back.serve.service.IGameTencentOrderSplitLogService;
+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 GameTencentOrderSplitLogServiceImpl extends ServiceImpl<GameTencentOrderSplitLogMapper, GameTencentOrderSplitLog>
         implements IGameTencentOrderSplitLogService {
+
+    @Override
+    public List<GameTencentOrderSplitLogVO> listByOrderNo(Collection<String> orderNos) {
+        if (CollectionUtils.isEmpty(orderNos)) {
+            return Collections.emptyList();
+        }
+        return list(new LambdaQueryWrapper<GameTencentOrderSplitLog>()
+                .eq(GameTencentOrderSplitLog::getOrderNo, orderNos)
+                .orderByAsc(GameTencentOrderSplitLog::getBackIndex)
+        ).stream().map(this::toVOSimple).collect(Collectors.toList());
+    }
+
+    private GameTencentOrderSplitLogVO toVOSimple(GameTencentOrderSplitLog log) {
+        if (log == null) {
+            return null;
+        }
+        GameTencentOrderSplitLogVO vo = BeanUtil.copy(log, GameTencentOrderSplitLogVO.class);
+        if (log.getSplitMoney() != null) {
+            vo.setSplitMoney(NumberUtil.divide100(new BigDecimal(log.getSplitMoney())));
+        }
+        return vo;
+    }
 }