Procházet zdrojové kódy

后台逻辑开发

xufeng před 2 roky
rodič
revize
6baa0cacef
37 změnil soubory, kde provedl 1662 přidání a 9 odebrání
  1. 31 0
      game-module/game-common/src/main/java/com/zanxiang/common/domain/gameStrategy/Order.java
  2. 49 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/GameStrategyController.java
  3. 41 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/LogPayCpController.java
  4. 38 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/OrderCompleteController.java
  5. 58 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/mapper/GameStrategyListMapper.java
  6. 41 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameStrategyListParam.java
  7. 18 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameStrategyOrderParam.java
  8. 42 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameStrategyParam.java
  9. 51 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/LogPayCpParam.java
  10. 166 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/OrderCompleteParam.java
  11. 0 2
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxListParam.java
  12. 63 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/GameStrategyListVO.java
  13. 45 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/LogPayCpVO.java
  14. 36 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/OrderCompleteListVO.java
  15. 153 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/OrderCompleteVO.java
  16. 24 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/GameStrategyService.java
  17. 113 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/GameStrategyServiceImpl.java
  18. 39 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/LogPayCpServiceImpl.java
  19. 132 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/OrderCompleteServiceImpl.java
  20. 1 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PayBoxServiceImpl.java
  21. 17 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/LogPayCpService.java
  22. 16 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/OrderCompleteService.java
  23. 4 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/PayBoxService.java
  24. 1 0
      game-module/game-manage/src/main/resources/bootstrap.yml
  25. 79 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameStrategy.java
  26. 253 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java
  27. 15 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/GameStrategyMapper.java
  28. 15 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/OrderCompleteMapper.java
  29. 26 0
      game-module/game-mybatis/src/main/resources/mapper/GameStrategyMapper.xml
  30. 0 0
      game-module/game-mybatis/src/main/resources/mapper/GameStrategyService.xml
  31. 22 0
      game-module/game-mybatis/src/main/resources/mapper/HLogPayCpMapper.xml
  32. 56 0
      game-module/game-mybatis/src/main/resources/mapper/OrderCompleteMapper.xml
  33. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/PayCommonUtil.java
  34. 5 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java
  35. 1 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/PayService.java
  36. 2 6
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/WxpayServiceImpl.java
  37. 8 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PerformOrderService.java

+ 31 - 0
game-module/game-common/src/main/java/com/zanxiang/common/domain/gameStrategy/Order.java

@@ -0,0 +1,31 @@
+package com.zanxiang.common.domain.gameStrategy;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 游戏支付策略-订单切量配置
+ *
+ * @author xufeng
+ * @date 2022/7/1 11:47
+ */
+@Data
+public class Order implements Serializable {
+
+    @ApiModelProperty(notes = "日总金额")
+    private BigDecimal dayAmount;
+
+    @ApiModelProperty(notes = "周总金额")
+    private BigDecimal weekAmount;
+
+    @ApiModelProperty(notes = "月总金额")
+    private BigDecimal monthAmount;
+
+    @ApiModelProperty(notes = "总金额")
+    private BigDecimal totalAmount;
+
+
+}

+ 49 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/GameStrategyController.java

@@ -0,0 +1,49 @@
+package com.zanxiang.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.manage.domain.params.GamePayWayListParam;
+import com.zanxiang.manage.domain.params.GamePayWayParam;
+import com.zanxiang.manage.domain.params.GameStrategyListParam;
+import com.zanxiang.manage.domain.params.GameStrategyParam;
+import com.zanxiang.manage.domain.vo.GamePayWayListVO;
+import com.zanxiang.manage.domain.vo.GameStrategyListVO;
+import com.zanxiang.manage.service.GameStrategyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 游戏策略 前端控制器
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Api(tags = "游戏策略")
+@RestController
+@RequestMapping("/game-strategy")
+public class GameStrategyController {
+
+    @Autowired
+    private GameStrategyService gameStrategyService;
+
+    @ApiOperation(value = "新增/编辑/删除")
+    @PostMapping(value = "/save")
+    public ResultVo<Boolean> save(@Validated @RequestBody GameStrategyParam param) {
+        return ResultVo.ok(gameStrategyService.saveOrUpdate(param));
+    }
+
+    @ApiOperation(value = "列表")
+    @PostMapping(value = "/list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameStrategyListVO.class, responseContainer = "list")})
+    public ResultVo<IPage<GameStrategyListVO>> list(@Validated @RequestBody GameStrategyListParam param) {
+        return ResultVo.ok(gameStrategyService.list(param));
+    }
+}

+ 41 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/LogPayCpController.java

@@ -0,0 +1,41 @@
+package com.zanxiang.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.manage.domain.params.GameStrategyListParam;
+import com.zanxiang.manage.domain.params.LogPayCpParam;
+import com.zanxiang.manage.domain.vo.GameStrategyListVO;
+import com.zanxiang.manage.domain.vo.LogPayCpVO;
+import com.zanxiang.manage.service.LogPayCpService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 通知CP记录表
+ *
+ * @author xufeng
+ * @date 2022-07-05 13:53
+ */
+@Api(tags = "通知CP记录")
+@RestController
+@RequestMapping("/log-pay-cp")
+public class LogPayCpController {
+
+    @Autowired
+    private LogPayCpService logPayCpService;
+
+    @ApiOperation(value = "列表")
+    @PostMapping(value = "/list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = LogPayCpVO.class, responseContainer = "list")})
+    public ResultVo<IPage<LogPayCpVO>> list(@Validated @RequestBody LogPayCpParam param) {
+        return ResultVo.ok(logPayCpService.list(param));
+    }
+}

+ 38 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/OrderCompleteController.java

@@ -0,0 +1,38 @@
+package com.zanxiang.manage.controller;
+
+import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.manage.domain.params.OrderCompleteParam;
+import com.zanxiang.manage.domain.vo.OrderCompleteListVO;
+import com.zanxiang.manage.service.OrderCompleteService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 游戏订单全量宽表
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+@Api(tags = "游戏订单全量宽表")
+@RestController
+@RequestMapping("/order-complete")
+public class OrderCompleteController {
+
+    @Autowired
+    private OrderCompleteService orderCompleteService;
+
+    @ApiOperation(value = "列表")
+    @PostMapping(value = "/list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = OrderCompleteListVO.class, responseContainer = "list")})
+    public ResultVo<OrderCompleteListVO> list(@Validated @RequestBody OrderCompleteParam param) {
+        return ResultVo.ok(orderCompleteService.list(param));
+    }
+}

+ 58 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/mapper/GameStrategyListMapper.java

@@ -0,0 +1,58 @@
+package com.zanxiang.manage.domain.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zanxiang.manage.domain.vo.GameStrategyListVO;
+import com.zanxiang.mybatis.entity.GameStrategy;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * @author xufeng
+ * @date 2022/6/29 16:32
+ */
+public interface GameStrategyListMapper extends BaseMapper<GameStrategy> {
+
+    @Select("<script> SELECT s.*,g.`name` AS gameName,p.pay_box_id,c.`name` AS gameType,b.`name` AS payBoxName,b.pay_merchant_id AS payMerchant,a.`name` AS applicationName " +
+            "FROM h_game_strategy s " +
+            "LEFT JOIN h_game g ON s.game_id=g.id AND g.is_delete=0 AND g.`status`=0 " +
+            "LEFT JOIN h_game_category c ON g.category=c.id AND c.is_delete=0 " +
+            "LEFT JOIN h_game_pay_way p ON p.game_id=s.game_id AND p.pay_way_id=3 AND p.is_delete=0 " +
+            "LEFT JOIN h_pay_box b ON p.pay_box_id=b.id AND b.is_delete=0 AND b.`status`=0 " +
+            "LEFT JOIN h_pay_application a ON a.id=b.pay_application_id AND a.is_delete=0 AND a.`status`=0 " +
+            "where s.is_delete=0 " +
+            "<when test='name != null'> and s.`name` like CONCAT('%', #{name}, '%') </when>" +
+            "<when test='type != null'> and s.type = #{type} </when>" +
+            "<when test='status != null'> and s.status = #{status} </when>" +
+            "<when test='gameId != null'> and s.gameId = #{gameId} </when>" +
+            " </script>")
+    IPage<GameStrategyListVO> List(Page<GameStrategy> page, @Param("name") String name, @Param("type") Integer type, @Param("status") Integer status, @Param("gameId") Long gameId);
+
+
+//    SELECT
+//    s.*,
+//    g.`name` AS gameName,
+//    p.pay_box_id,
+//    c.`name` AS gameType,
+//    b.`name` AS payBoxName,
+//    b.pay_merchant_id AS payMerchant,
+//    a.`name` AS applicationName
+//    FROM
+//    h_game_strategy s
+//    LEFT JOIN h_game g ON s.game_id = g.id
+//    AND g.is_delete = 0
+//    AND g.`status` = 0
+//    LEFT JOIN h_game_category c ON g.category = c.id
+//    AND c.is_delete = 0
+//    LEFT JOIN h_game_pay_way p ON p.game_id = s.game_id
+//    AND p.pay_way_id = 3
+//    AND p.is_delete = 0
+//    LEFT JOIN h_pay_box b ON p.pay_box_id = b.id
+//    AND b.is_delete = 0
+//    AND b.`status` = 0
+//    LEFT JOIN h_pay_application a ON a.id = b.pay_application_id
+//    AND a.is_delete = 0
+//    AND a.`status` = 0
+
+}

+ 41 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameStrategyListParam.java

@@ -0,0 +1,41 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.GameStrategy;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 注释游戏策略
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Data
+public class GameStrategyListParam extends BasePage<GameStrategy> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(notes = "ID")
+    private Long id;
+
+    @ApiModelProperty(notes = "策略名称")
+    private String name;
+
+    @ApiModelProperty(notes = "策略类型 1:订单起量切换规则")
+    private Integer type;
+
+    @ApiModelProperty(notes = "关联游戏id")
+    private Long gameId;
+
+    @ApiModelProperty(notes = "删除状态 0正常 1删除")
+    private Integer isDelete;
+
+    @ApiModelProperty(notes = "状态 0正常 1不可用")
+    private Integer status;
+
+    @ApiModelProperty(notes = "渠道")
+    private Long channel;
+}

+ 18 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameStrategyOrderParam.java

@@ -0,0 +1,18 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.domain.gameStrategy.Order;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 注释游戏策略
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Data
+public class GameStrategyOrderParam extends Order implements Serializable {
+
+}

+ 42 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/GameStrategyParam.java

@@ -0,0 +1,42 @@
+package com.zanxiang.manage.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 注释游戏策略
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Data
+public class GameStrategyParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(notes = "ID")
+    private Long id;
+
+    @ApiModelProperty(notes = "策略名称")
+    private String name;
+
+    @ApiModelProperty(notes = "策略类型 1:订单起量切换规则")
+    private Integer type;
+
+    @ApiModelProperty(notes = "关联游戏id")
+    private Long gameId;
+
+    @ApiModelProperty(notes = "删除状态 0正常 1删除")
+    private Integer isDelete;
+
+    @ApiModelProperty(notes = "状态 0正常 1不可用")
+    private Integer status;
+
+    @ApiModelProperty(notes = "订单切量")
+    private GameStrategyOrderParam orderConfig;
+
+    @ApiModelProperty(notes = "渠道")
+    private Long channel;
+}

+ 51 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/LogPayCpParam.java

@@ -0,0 +1,51 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.LogPayCp;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 注释通知CP记录表
+ *
+ * @author xufeng
+ * @date 2022-06-27 14:07
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class LogPayCpParam extends BasePage<LogPayCp> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(notes = "自增ID")
+    private Long id;
+
+    @ApiModelProperty(notes = "订单号")
+    private String orderId;
+
+    @ApiModelProperty(notes = "CP订单号")
+    private String cpOrderId;
+
+    @ApiModelProperty(notes = "充值成功标志,1为待处理,2为成功,3为失败")
+    private Integer status;
+
+    @ApiModelProperty(notes = "充值回调标志,1为待处理,2为成功,3为失败")
+    private Integer cpStatus;
+
+    @ApiModelProperty(notes = "CP回调地址")
+    private String cpPaybackUrl;
+
+    @ApiModelProperty(notes = "CP回调参数")
+    private String params;
+
+    @ApiModelProperty(notes = "CP附加参数")
+    private String ext;
+
+    @ApiModelProperty(notes = "通知次数")
+    private Integer notifyCnt;
+}

+ 166 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/OrderCompleteParam.java

@@ -0,0 +1,166 @@
+package com.zanxiang.manage.domain.params;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.OrderComplete;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 注释游戏订单全量宽表
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+@Data
+public class OrderCompleteParam extends BasePage<OrderComplete> implements Serializable {
+
+    @ApiModelProperty(notes = "订单ID:订单号")
+    private String orderId;
+
+    @ApiModelProperty(notes = "cp订单号")
+    private String cpOrderId;
+
+    @ApiModelProperty(notes = "第三方支付订单号")
+    private String merchantOrderNo;
+
+    @ApiModelProperty(notes = "玩家id")
+    private String userId;
+
+    @ApiModelProperty(notes = "玩家账号")
+    private String userAccount;
+
+    @ApiModelProperty(notes = "充值游戏id")
+    private String gameId;
+
+    @ApiModelProperty(notes = "是否删除:0正常 1删除")
+    private Integer isDelete;
+
+    @ApiModelProperty(notes = "订单下单日期(不含时分秒)")
+    private Date orderDate;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(notes = "玩家注册时间-起")
+    private LocalDate userRegisterTimeStart;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(notes = "玩家注册时间-止")
+    private LocalDate userRegisterTimeEnd;
+
+    @ApiModelProperty(notes = "cp id")
+    private String cpId;
+
+    @ApiModelProperty(notes = "注册游戏id")
+    private String userRegisterGameId;
+
+    @ApiModelProperty(notes = "注册游戏")
+    private String userRegisterGame;
+
+    @ApiModelProperty(notes = "注册游戏分类")
+    private String userRegisterGameCategory;
+
+    @ApiModelProperty(notes = "玩家注册渠道")
+    private String userRegisterChannel;
+
+
+    @ApiModelProperty(notes = "投放人")
+    private String agentId;
+
+    @ApiModelProperty(notes = "推广账号")
+    private String agentAccount;
+
+    @ApiModelProperty(notes = "推广媒体")
+    private String agentMedia;
+
+    @ApiModelProperty(notes = "推广广告")
+    private String agentAdvert;
+
+    @ApiModelProperty(notes = "产品名称")
+    private String productName;
+
+    @ApiModelProperty(notes = "订单金额")
+    private BigDecimal orderAmount;
+
+    @ApiModelProperty(notes = "订单实付金额")
+    private BigDecimal realAmount;
+
+    @ApiModelProperty(notes = "支付方式Id")
+    private String payWayId;
+
+    @ApiModelProperty(notes = "支付方式")
+    private String payWay;
+
+    @ApiModelProperty(notes = "支付场景")
+    private String payDevice;
+
+    @ApiModelProperty(notes = "收款商户号")
+    private String merchantNo;
+
+    @ApiModelProperty(notes = "收款商户名称")
+    private String merchantName;
+
+    @ApiModelProperty(notes = "游戏区服")
+    private String gameRegional;
+
+    @ApiModelProperty(notes = "游戏角色")
+    private String gameRole;
+
+    @ApiModelProperty(notes = "游戏等级")
+    private String gameLevel;
+
+    @ApiModelProperty(notes = "游戏角色vip")
+    private String gameVip;
+
+    @ApiModelProperty(notes = "操作系统")
+    private String fromDevice;
+
+    @ApiModelProperty(notes = "是否切量  0 否 1 是")
+    private Integer isSwitch;
+
+    @ApiModelProperty(notes = "支付时间")
+    private Date payTime;
+
+    @ApiModelProperty(notes = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(notes = "cp最后通知时间")
+    private Date lastCpNotifyTime;
+
+    @ApiModelProperty(notes = "支付状态,1待支付,2 支付成功,-1 已取消")
+    private Integer status;
+
+    @ApiModelProperty(notes = "CP通知状态,1为待处理,2为成功,-1为失败")
+    private Integer cpStatus;
+
+    @ApiModelProperty(notes = "是否首充 0 否 1 是")
+    private Integer isFirstRecharge;
+
+
+    @ApiModelProperty(notes = "广告上报状态")
+    private Integer advertNotifyStatus;
+
+    @ApiModelProperty(notes = "广告上报方式 0 系统 1 人工")
+    private Integer advertNotifyType;
+
+    @ApiModelProperty(notes = "渠道")
+    private Long channel;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(notes = "创建时间-开始")
+    private LocalDate createTimeStart;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(notes = "创建时间-结束")
+    private LocalDate createTimeEnd;
+}

+ 0 - 2
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxListParam.java

@@ -6,8 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.io.Serializable;
-
 /**
  * @author xufeng
  * @date 2022/6/16 19:14

+ 63 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/GameStrategyListVO.java

@@ -0,0 +1,63 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 注释游戏策略
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Data
+public class GameStrategyListVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(notes = "ID")
+    private Long id;
+
+    @ApiModelProperty(notes = "策略名称")
+    private String name;
+
+    @ApiModelProperty(notes = "策略类型 1:订单起量切换规则")
+    private Integer type;
+
+    @ApiModelProperty(notes = "关联游戏id")
+    private Long gameId;
+
+    @ApiModelProperty(notes = "关联游戏名称")
+    private String gameName;
+
+    @ApiModelProperty(notes = "关联游戏类型")
+    private String gameType;
+
+    @ApiModelProperty(notes = "支付方式")
+    private String gamePayWay;
+
+    @ApiModelProperty(notes = "支付盒子")
+    private String gamePayBox;
+
+    @ApiModelProperty(notes = "支付商户号")
+    private String payMerchant;
+
+    @ApiModelProperty(notes = "关联应用名称")
+    private String applicationName;
+
+    @ApiModelProperty(notes = "关联商户号_商户主体")
+    private String applicationMerchant;
+
+    @ApiModelProperty(notes = "删除状态 0正常 1删除")
+    private Integer isDelete;
+
+    @ApiModelProperty(notes = "状态 0正常 1不可用")
+    private Integer status;
+
+    @ApiModelProperty(notes = "配置")
+    private String config;
+
+    @ApiModelProperty(notes = "渠道")
+    private Long channel;
+}

+ 45 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/LogPayCpVO.java

@@ -0,0 +1,45 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 注释通知CP记录表
+ *
+ * @author xufeng
+ * @date 2022-06-27 14:07
+ */
+@Data
+public class LogPayCpVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(notes = "自增ID")
+    private Long id;
+
+    @ApiModelProperty(notes = "订单号")
+    private String orderId;
+
+    @ApiModelProperty(notes = "CP订单号")
+    private String cpOrderId;
+
+    @ApiModelProperty(notes = "充值成功标志,1为待处理,2为成功,3为失败")
+    private Integer status;
+
+    @ApiModelProperty(notes = "充值回调标志,1为待处理,2为成功,3为失败")
+    private Integer cpStatus;
+
+    @ApiModelProperty(notes = "CP回调地址")
+    private String cpPaybackUrl;
+
+    @ApiModelProperty(notes = "CP回调参数")
+    private String params;
+
+    @ApiModelProperty(notes = "CP附加参数")
+    private String ext;
+
+    @ApiModelProperty(notes = "通知次数")
+    private Integer notifyCnt;
+}

+ 36 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/OrderCompleteListVO.java

@@ -0,0 +1,36 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author xufeng
+ * @date 2022/7/4 16:25
+ */
+@Data
+public class OrderCompleteListVO implements Serializable {
+    @ApiModelProperty(notes = "订单列表数据")
+    private List<OrderCompleteVO> data;
+
+    @ApiModelProperty(notes = "订单统计数据")
+    private Map<String, BigDecimal> totalData;
+
+    @ApiModelProperty(notes = "总数据")
+    private Long total;
+
+    @ApiModelProperty(notes = "每页显示条数")
+    private Long size;
+
+    @ApiModelProperty(notes = "当前页")
+    private Long current;
+
+    @ApiModelProperty(notes = "分页总页数")
+    private Long pages;
+
+
+}

+ 153 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/OrderCompleteVO.java

@@ -0,0 +1,153 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 注释游戏订单全量宽表
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+@Data
+public class OrderCompleteVO implements Serializable {
+
+    @ApiModelProperty(notes = "订单ID:订单号")
+    private Long id;
+
+    @ApiModelProperty(notes = "订单ID:订单号")
+    private Long orderId;
+
+    @ApiModelProperty(notes = "充值游戏id")
+    private Long gameId;
+
+    @ApiModelProperty(notes = "充值游戏名称")
+    private String gameName;
+
+    @ApiModelProperty(notes = "充值游戏类型")
+    private String gameCategory;
+
+    @ApiModelProperty(notes = "是否删除:0正常 1删除")
+    private Integer isDelete;
+
+    @ApiModelProperty(notes = "订单下单日期(不含时分秒)")
+    private Date orderDate;
+
+    @ApiModelProperty(notes = "cp订单号")
+    private String cpOrderId;
+
+    @ApiModelProperty(notes = "第三方支付订单号")
+    private String merchantOrderNo;
+
+    @ApiModelProperty(notes = "玩家id")
+    private Long userId;
+
+    @ApiModelProperty(notes = "玩家账号")
+    private String userAccount;
+
+    @ApiModelProperty(notes = "玩家注册时间")
+    private Date userRegisterTime;
+
+    @ApiModelProperty(notes = "注册游戏")
+    private String userRegisterGame;
+
+    @ApiModelProperty(notes = "注册游戏分类")
+    private String userRegisterGameCategory;
+
+    @ApiModelProperty(notes = "玩家注册渠道")
+    private String userRegisterChannel;
+
+    @ApiModelProperty(notes = "cp id")
+    private Long cpId;
+
+    @ApiModelProperty(notes = "cp名称")
+    private String cpName;
+
+    @ApiModelProperty(notes = "投放人")
+    private String agentId;
+
+    @ApiModelProperty(notes = "推广账号")
+    private String agentAccount;
+
+    @ApiModelProperty(notes = "推广媒体")
+    private String agentMedia;
+
+    @ApiModelProperty(notes = "推广广告")
+    private String agentAdvert;
+
+    @ApiModelProperty(notes = "产品名称")
+    private String productName;
+
+    @ApiModelProperty(notes = "订单金额")
+    private BigDecimal orderAmount;
+
+    @ApiModelProperty(notes = "订单实付金额")
+    private BigDecimal realAmount;
+
+    @ApiModelProperty(notes = "支付方式")
+    private String payWay;
+
+    @ApiModelProperty(notes = "支付场景")
+    private String payDevice;
+
+    @ApiModelProperty(notes = "收款商户号")
+    private String merchantNo;
+
+    @ApiModelProperty(notes = "收款商户名称")
+    private String merchantName;
+
+    @ApiModelProperty(notes = "游戏区服")
+    private String gameRegional;
+
+    @ApiModelProperty(notes = "游戏角色")
+    private String gameRole;
+
+    @ApiModelProperty(notes = "游戏等级")
+    private String gameLevel;
+
+    @ApiModelProperty(notes = "游戏角色vip")
+    private String gameVip;
+
+    @ApiModelProperty(notes = "操作系统")
+    private String fromDevice;
+
+    @ApiModelProperty(notes = "是否切量  0 否 1 是")
+    private Integer isSwitch;
+
+    @ApiModelProperty(notes = "支付时间")
+    private Date payTime;
+
+    @ApiModelProperty(notes = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(notes = "cp最后通知时间")
+    private Date lastCpNotifyTime;
+
+    @ApiModelProperty(notes = "支付状态,1待支付,2 支付成功,-1 已取消")
+    private Integer status;
+
+    @ApiModelProperty(notes = "CP通知状态,1为待处理,2为成功,-1为失败")
+    private Integer cpStatus;
+
+    @ApiModelProperty(notes = "是否首充 0 否 1 是")
+    private Integer isFirstRecharge;
+
+    @ApiModelProperty(notes = "广告上报状态")
+    private Integer advertNotifyStatus;
+
+    @ApiModelProperty(notes = "广告上报方式 0 系统 1 人工")
+    private Integer advertNotifyType;
+
+    @ApiModelProperty(notes = "渠道")
+    private Long channel;
+
+    @ApiModelProperty(notes = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(notes = "更新时间")
+    private Date updateTime;
+}

+ 24 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/GameStrategyService.java

@@ -0,0 +1,24 @@
+package com.zanxiang.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.manage.domain.bo.PayMerchantBO;
+import com.zanxiang.manage.domain.params.GamePayWayListParam;
+import com.zanxiang.manage.domain.params.GameStrategyListParam;
+import com.zanxiang.manage.domain.params.GameStrategyParam;
+import com.zanxiang.manage.domain.params.PayMerchantListParam;
+import com.zanxiang.manage.domain.vo.GameStrategyListVO;
+import com.zanxiang.manage.domain.vo.PayMerchantListVO;
+import com.zanxiang.mybatis.entity.GameStrategy;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 游戏策略 服务类接口
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+public interface GameStrategyService extends IService<GameStrategy> {
+    Boolean saveOrUpdate(GameStrategyParam bo);
+
+    IPage<GameStrategyListVO> list(GameStrategyListParam bo);
+}

+ 113 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/GameStrategyServiceImpl.java

@@ -0,0 +1,113 @@
+package com.zanxiang.manage.service.Impl;
+
+import com.alibaba.nacos.common.utils.CollectionUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zanxiang.common.enums.DeleteEnum;
+import com.zanxiang.common.exception.ParamNullException;
+import com.zanxiang.common.utils.JsonUtil;
+import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.manage.domain.bo.PayMerchantBO;
+import com.zanxiang.manage.domain.mapper.GameStrategyListMapper;
+import com.zanxiang.manage.domain.params.GamePayWayListParam;
+import com.zanxiang.manage.domain.params.GameStrategyListParam;
+import com.zanxiang.manage.domain.params.GameStrategyParam;
+import com.zanxiang.manage.domain.params.PayMerchantListParam;
+import com.zanxiang.manage.domain.vo.GameStrategyListVO;
+import com.zanxiang.manage.domain.vo.PayApplicationVO;
+import com.zanxiang.manage.domain.vo.PayMerchantListVO;
+import com.zanxiang.manage.service.*;
+import com.zanxiang.mybatis.entity.*;
+import com.zanxiang.mybatis.mapper.GameStrategyMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 游戏策略 服务实现类
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Service
+public class GameStrategyServiceImpl extends ServiceImpl<GameStrategyMapper, GameStrategy> implements GameStrategyService {
+
+    @Autowired
+    private GameService gameService;
+
+    @Autowired
+    private GameCategoryService gameCategoryService;
+
+    @Autowired
+    private GamePayWayService gamePayWayService;
+
+    @Autowired
+    private PayMerchantService payMerchantService;
+
+    @Autowired
+    private GameStrategyListMapper gameStrategyListMapper;
+
+    @Autowired
+    private PayBoxService payBoxService;
+
+    @Override
+    public Boolean saveOrUpdate(GameStrategyParam bo) {
+        if (bo.getIsDelete() != null && bo.getIsDelete() == DeleteEnum.YES.getCode()) {
+            if (bo.getId() == null) {
+                throw new ParamNullException("Id");
+            }
+            return removeById(bo.getId());
+        }
+        GameStrategy gameStrategy = BeanUtils.copy(bo, GameStrategy.class);
+        if (bo.getOrderConfig() != null && !bo.getOrderConfig().equals("")) {
+            gameStrategy.setConfig(JsonUtil.toString(bo.getOrderConfig()));
+        }
+        return saveOrUpdate(gameStrategy);
+    }
+
+    @Override
+    public IPage<GameStrategyListVO> list(GameStrategyListParam bo) {
+
+        Page<GameStrategy> gameStrategyPage = new Page<>(bo.getPageNum(), bo.getPageSize());
+        IPage<GameStrategyListVO> list = gameStrategyListMapper.List(gameStrategyPage, bo.getName(), bo.getType(), bo.getStatus(), bo.getGameId());
+        if (list.getTotal() == 0) {
+            return null;
+        }
+        List<GameStrategyListVO> data = list.getRecords();
+
+        HashMap<Long, String> gamePayWayMap = new HashMap<>();
+
+        //获取商户号列表
+        List<PayMerchant> payMerchantList = payMerchantService.list();
+        Map<String, PayMerchant> payMerchantData = payMerchantList.stream().collect(Collectors.toMap(PayMerchant::getMerchantNo, PayMerchant -> PayMerchant));
+
+        data.stream().forEach(t -> {
+            //支付方式 -   避免重复查询,已获取则缓存
+            if (gamePayWayMap.get(t.getGameId()) == null) {
+                List<GamePayWay> gamePayWayList = gamePayWayService.list(new QueryWrapper<GamePayWay>().lambda().eq(GamePayWay::getGameId, t.getGameId()));
+                if (CollectionUtils.isNotEmpty(gamePayWayList)) {
+                    String payWayName = gamePayWayList.stream().map(b -> b.getPayWayName()).collect(Collectors.joining(","));
+                    t.setGamePayWay(payWayName);
+                }
+                gamePayWayMap.put(t.getGameId(), t.getGamePayWay());
+                if (StringUtils.isNotEmpty(t.getPayMerchant())) {
+                    t.setApplicationMerchant(payBoxService.getMerchantDetail(payMerchantData, t.getPayMerchant()));
+                }
+            }
+
+        });
+        return list;
+    }
+
+    private GameStrategyListVO toVo(GameStrategy gameStrategy) {
+        if (Objects.isNull(gameStrategy)) {
+            return null;
+        }
+        return BeanUtils.copy(gameStrategy, GameStrategyListVO.class);
+    }
+}

+ 39 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/LogPayCpServiceImpl.java

@@ -0,0 +1,39 @@
+package com.zanxiang.manage.service.Impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.manage.domain.params.LogPayCpParam;
+import com.zanxiang.manage.domain.vo.LogPayCpVO;
+import com.zanxiang.manage.service.LogPayCpService;
+import com.zanxiang.mybatis.entity.LogPayCp;
+import com.zanxiang.mybatis.mapper.LogPayCpMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * 通知CP记录表 服务实现类
+ *
+ * @author xufeng
+ * @date 2022-07-05 13:53
+ */
+@Service
+public class LogPayCpServiceImpl extends ServiceImpl<LogPayCpMapper, LogPayCp> implements LogPayCpService {
+
+    @Override
+    public IPage<LogPayCpVO> list(LogPayCpParam param) {
+        LogPayCp data = BeanUtils.copy(param, LogPayCp.class);
+        return page(param.toPage(), new QueryWrapper<LogPayCp>().setEntity(data)).convert(this::toVo);
+    }
+
+
+    private LogPayCpVO toVo(LogPayCp logPayCp) {
+        if (Objects.isNull(logPayCp)) {
+            return null;
+        }
+        return BeanUtils.copy(logPayCp, LogPayCpVO.class);
+    }
+
+}

+ 132 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/OrderCompleteServiceImpl.java

@@ -0,0 +1,132 @@
+package com.zanxiang.manage.service.Impl;
+
+import com.alibaba.nacos.common.utils.CollectionUtils;
+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.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.manage.domain.params.OrderCompleteParam;
+import com.zanxiang.manage.domain.vo.OrderCompleteListVO;
+import com.zanxiang.manage.domain.vo.OrderCompleteVO;
+import com.zanxiang.manage.service.CpService;
+import com.zanxiang.manage.service.OrderCompleteService;
+import com.zanxiang.mybatis.entity.Cp;
+import com.zanxiang.mybatis.entity.OrderComplete;
+import com.zanxiang.mybatis.entity.User;
+import com.zanxiang.mybatis.entity.UserExt;
+import com.zanxiang.mybatis.mapper.OrderCompleteMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 游戏订单全量宽表 服务实现类
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+@Service
+public class OrderCompleteServiceImpl extends ServiceImpl<OrderCompleteMapper, OrderComplete> implements OrderCompleteService {
+
+    @Autowired
+    private CpService cpService;
+
+    @Override
+    public OrderCompleteListVO list(OrderCompleteParam param) {
+
+        IPage<OrderCompleteVO> page = page(param.toPage(), getListWrapper(param, "*")).convert(this::toVo);
+        if (page.getTotal() == 0) {
+            return null;
+        }
+
+        //统计:订单金额与实付金额
+        OrderComplete total = super.getOne(getListWrapper(param, "IFNULL(SUM(order_amount),0) orderAmount, IFNULL(SUM(real_amount),0) realAmount"));
+        HashMap<String, BigDecimal> totalData = new HashMap<>();
+        if (total == null) {
+            totalData.put("totalOrderAmount", new BigDecimal("0.00"));
+            totalData.put("totalRealAmount", new BigDecimal("0.00"));
+        } else {
+            totalData.put("totalOrderAmount", total.getOrderAmount());
+            totalData.put("totalRealAmount", total.getRealAmount());
+        }
+
+        //批量获取cp信息
+        Map<Long, String> cpMap = null;
+        List<Long> cpIdList = page.getRecords().stream().filter(t -> t.getCpId() != null).map(t -> t.getCpId()).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(cpIdList)) {
+            List<Cp> cpList = cpService.list(new QueryWrapper<Cp>().lambda().in(Cp::getId, cpIdList));
+            if (CollectionUtils.isNotEmpty(cpList)) {
+                cpMap = cpList.stream().collect(Collectors.toMap(Cp::getId, Cp::getCpName));
+            }
+        }
+
+
+        Map<Long, String> finalCpMap = cpMap;
+        page.getRecords().stream().forEach(t -> {
+            t.setId(t.getOrderId());
+            if (finalCpMap != null) {
+                if (StringUtils.isNotEmpty(finalCpMap.get(t.getCpId()))) {
+                    t.setCpName(finalCpMap.get(t.getCpId()));
+                }
+            }
+        });
+
+
+        OrderCompleteListVO orderCompleteListVO = new OrderCompleteListVO();
+        orderCompleteListVO.setTotal(page.getTotal());
+        orderCompleteListVO.setSize(page.getSize());
+        orderCompleteListVO.setCurrent(page.getCurrent());
+        orderCompleteListVO.setPages(page.getPages());
+        orderCompleteListVO.setData(page.getRecords());
+        orderCompleteListVO.setTotalData(totalData);
+        return orderCompleteListVO;
+
+    }
+
+    private LambdaQueryWrapper<OrderComplete> getListWrapper(OrderCompleteParam param, String select) {
+        LambdaQueryWrapper<OrderComplete> wrapper = new QueryWrapper<OrderComplete>().select(select).lambda()
+                .like(Strings.isNotBlank(param.getCpOrderId()), OrderComplete::getCpOrderId, param.getCpOrderId())
+                .like(Strings.isNotBlank(param.getOrderId()), OrderComplete::getOrderId, param.getOrderId())
+                .like(Strings.isNotBlank(param.getCpOrderId()), OrderComplete::getCpOrderId, param.getCpOrderId())
+                .like(Strings.isNotBlank(param.getUserId()), OrderComplete::getUserId, param.getUserId())
+                .like(Strings.isNotBlank(param.getUserAccount()), OrderComplete::getUserAccount, param.getUserAccount())
+                .like(Strings.isNotBlank(param.getGameRole()), OrderComplete::getGameRole, param.getGameRole())
+                .like(Strings.isNotBlank(param.getCpId()), OrderComplete::getCpId, param.getCpId())
+                .like(Strings.isNotBlank(param.getUserRegisterGameId()), OrderComplete::getUserRegisterGameId, param.getUserRegisterGameId())
+                .like(Strings.isNotBlank(param.getUserRegisterGame()), OrderComplete::getUserRegisterGame, param.getUserRegisterGame())
+                .like(Strings.isNotBlank(param.getGameId()), OrderComplete::getGameId, param.getGameId())
+                .ge(param.getUserRegisterTimeStart() != null, OrderComplete::getUserRegisterTime, param.getUserRegisterTimeStart() == null ? null : LocalDateTime.of(param.getUserRegisterTimeStart(), LocalTime.MIN))
+                .le(param.getUserRegisterTimeEnd() != null, OrderComplete::getUserRegisterTime, param.getUserRegisterTimeEnd() == null ? null : LocalDateTime.of(param.getUserRegisterTimeEnd(), LocalTime.MAX))
+                .like(Strings.isNotBlank(param.getAgentAccount()), OrderComplete::getAgentAccount, param.getAgentAccount())
+                .like(Strings.isNotBlank(param.getAgentId()), OrderComplete::getAgentId, param.getAgentId())
+                .eq(Strings.isNotBlank(param.getFromDevice()), OrderComplete::getFromDevice, param.getFromDevice())
+                .eq(param.getIsSwitch() != null, OrderComplete::getIsSwitch, param.getIsSwitch())
+                .like(Strings.isNotBlank(param.getProductName()), OrderComplete::getProductName, param.getProductName())
+                .like(Strings.isNotBlank(param.getPayWayId()), OrderComplete::getPayWayId, param.getPayWayId())
+                .eq(Strings.isNotBlank(param.getMerchantNo()), OrderComplete::getMerchantNo, param.getMerchantNo())
+                .eq(param.getStatus() != null, OrderComplete::getStatus, param.getStatus())
+                .eq(param.getCpStatus() != null, OrderComplete::getCpStatus, param.getCpStatus())
+                .eq(param.getIsFirstRecharge() != null, OrderComplete::getIsFirstRecharge, param.getIsFirstRecharge())
+                .orderByDesc(OrderComplete::getOrderId);
+        return wrapper;
+    }
+
+
+    private OrderCompleteVO toVo(OrderComplete orderComplete) {
+        if (Objects.isNull(orderComplete)) {
+            return null;
+        }
+        return BeanUtils.copy(orderComplete, OrderCompleteVO.class);
+    }
+}

+ 1 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PayBoxServiceImpl.java

@@ -80,6 +80,7 @@ public class PayBoxServiceImpl extends ServiceImpl<PayBoxMapper, PayBox> impleme
      * @param ids
      * @return
      */
+    @Override
     public String getMerchantDetail(Map<String, PayMerchant> payMerchant, String ids) {
         if (StringUtils.isEmpty(ids) || payMerchant.isEmpty()) {
             return "";

+ 17 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/LogPayCpService.java

@@ -0,0 +1,17 @@
+package com.zanxiang.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.manage.domain.params.LogPayCpParam;
+import com.zanxiang.manage.domain.vo.LogPayCpVO;
+import com.zanxiang.mybatis.entity.LogPayCp;
+
+/**
+ * 通知CP记录表 服务类接口
+ *
+ * @author xufeng
+ * @date 2022-07-05 13:53
+ */
+public interface LogPayCpService extends IService<LogPayCp> {
+    IPage<LogPayCpVO> list(LogPayCpParam param);
+}

+ 16 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/OrderCompleteService.java

@@ -0,0 +1,16 @@
+package com.zanxiang.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.manage.domain.params.OrderCompleteParam;
+import com.zanxiang.manage.domain.vo.OrderCompleteListVO;
+import com.zanxiang.mybatis.entity.OrderComplete;
+
+/**
+ * 游戏订单全量宽表 服务类接口
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+public interface OrderCompleteService extends IService<OrderComplete> {
+    OrderCompleteListVO list(OrderCompleteParam param);
+}

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

@@ -8,8 +8,10 @@ import com.zanxiang.manage.domain.params.PayBoxListParam;
 import com.zanxiang.manage.domain.params.PayBoxParam;
 import com.zanxiang.manage.domain.vo.PayBoxListVO;
 import com.zanxiang.mybatis.entity.PayBox;
+import com.zanxiang.mybatis.entity.PayMerchant;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 支付盒子 服务类接口
@@ -22,4 +24,6 @@ public interface PayBoxService extends IService<PayBox> {
     Boolean saveOrUpdate(PayBoxParam bo);
 
     IPage<PayBoxListVO> list(PayBoxListParam param);
+
+    String getMerchantDetail(Map<String, PayMerchant> payMerchant, String ids);
 }

+ 1 - 0
game-module/game-manage/src/main/resources/bootstrap.yml

@@ -41,5 +41,6 @@ logging:
     root: warn
     com.zanxiang.manage: warn
     com.zanxiang.mybatis.mapper: debug
+    com.zanxiang.manager.domain.mapper: debug
 
 

+ 79 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameStrategy.java

@@ -0,0 +1,79 @@
+package com.zanxiang.mybatis.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 注释游戏策略
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("h_game_strategy")
+public class GameStrategy implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 策略名称
+     */
+    private String name;
+
+    /**
+     * 策略类型 1:订单起量切换规则
+     */
+    private Integer type;
+
+    /**
+     * 关联游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 0正常 1删除
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 状态 0正常 1不可用
+     */
+    private Integer status;
+
+    /**
+     * 配置
+     */
+    private String config;
+
+    /**
+     * 渠道
+     */
+    private Long channel;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 253 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java

@@ -0,0 +1,253 @@
+package com.zanxiang.mybatis.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 注释游戏订单全量宽表
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("h_order_complete")
+public class OrderComplete implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 订单ID
+     */
+    @TableId(value = "order_id", type = IdType.AUTO)
+    private Long orderId;
+
+    /**
+     * 充值游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 充值游戏名称
+     */
+    private String gameName;
+
+    /**
+     * 充值游戏类型
+     */
+    private String gameCategory;
+
+    /**
+     * 0正常 1删除
+     */
+    private Integer isDelete;
+
+    /**
+     * 订单下单日期(不含时分秒)
+     */
+    private Date orderDate;
+
+    /**
+     * cp订单号
+     */
+    private String cpOrderId;
+
+    /**
+     * 第三方支付订单号
+     */
+    private String merchantOrderNo;
+
+    /**
+     * 玩家id
+     */
+    private Long userId;
+
+    /**
+     * 玩家账号
+     */
+    private String userAccount;
+
+    /**
+     * 玩家注册时间
+     */
+    private Date userRegisterTime;
+
+    /**
+     * 注册游戏id
+     */
+    private Long userRegisterGameId;
+
+    /**
+     * 注册游戏
+     */
+    private String userRegisterGame;
+
+    /**
+     * 注册游戏分类
+     */
+    private String userRegisterGameCategory;
+
+    /**
+     * 玩家注册渠道
+     */
+    private String userRegisterChannel;
+
+    /**
+     * cp
+     */
+    private Long cpId;
+
+    /**
+     * 投放人
+     */
+    private String agentId;
+
+    /**
+     * 推广账号
+     */
+    private String agentAccount;
+
+    /**
+     * 推广媒体
+     */
+    private String agentMedia;
+
+    /**
+     * 推广广告
+     */
+    private String agentAdvert;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal orderAmount;
+
+    /**
+     * 订单实付金额
+     */
+    private BigDecimal realAmount;
+
+    /**
+     * 支付方式 id
+     */
+    private String payWayId;
+
+    /**
+     * 支付方式
+     */
+    private String payWay;
+
+    /**
+     * 支付场景
+     */
+    private String payDevice;
+
+    /**
+     * 收款商户号
+     */
+    private String merchantNo;
+
+    /**
+     * 收款商户名称
+     */
+    private String merchantName;
+
+    /**
+     * 游戏区服
+     */
+    private String gameRegional;
+
+    /**
+     * 游戏角色
+     */
+    private String gameRole;
+
+    /**
+     * 游戏等级
+     */
+    private String gameLevel;
+
+    /**
+     * 游戏角色vip
+     */
+    private String gameVip;
+
+    /**
+     * 操作系统
+     */
+    private String fromDevice;
+
+    /**
+     * 是否切量  0 否 1 是
+     */
+    private Integer isSwitch;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+    /**
+     * cp最后通知时间
+     */
+    private Date lastCpNotifyTime;
+
+    /**
+     * 支付状态,1待支付,2 支付成功,-1 已取消
+     */
+    private Integer status;
+
+    /**
+     * CP通知状态,1为待处理,2为成功,-1为失败
+     */
+    private Integer cpStatus;
+
+    /**
+     * 是否首充 0 否 1 是
+     */
+    private Integer isFirstRecharge;
+
+    /**
+     * 广告上报状态
+     */
+    private Integer advertNotifyStatus;
+
+    /**
+     * 广告上报方式 0 系统 1 人工
+     */
+    private Integer advertNotifyType;
+
+    /**
+     * 渠道
+     */
+    private Long channel;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 15 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/GameStrategyMapper.java

@@ -0,0 +1,15 @@
+package com.zanxiang.mybatis.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import com.zanxiang.mybatis.entity.GameStrategy;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 注释游戏策略 Mapper
+ *
+ * @author xufeng
+ * @date 2022-07-01 11:38
+ */
+@Mapper
+public interface GameStrategyMapper extends BaseMapper<GameStrategy> {
+}

+ 15 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/OrderCompleteMapper.java

@@ -0,0 +1,15 @@
+package com.zanxiang.mybatis.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import com.zanxiang.mybatis.entity.OrderComplete;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* 注释游戏订单全量宽表 Mapper
+*
+* @author xufeng
+* @date 2022-07-04 11:45
+*/
+@Mapper
+public interface OrderCompleteMapper extends BaseMapper<OrderComplete> {
+}

+ 26 - 0
game-module/game-mybatis/src/main/resources/mapper/GameStrategyMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.zanxiang.mybatis.mapper.GameStrategyMapper">
+    <resultMap id="BaseResultMap" type="com.zanxiang.mybatis.entity.GameStrategy">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="name" jdbcType="VARCHAR" property="name"/>
+        <result column="type" jdbcType="TINYINT" property="type"/>
+        <result column="game_id" jdbcType="BIGINT" property="gameId"/>
+        <result column="is_delete" jdbcType="TINYINT" property="isDelete"/>
+        <result column="status" jdbcType="TINYINT" property="status"/>
+        <result column="channel" jdbcType="BIGINT" property="channel"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+    </resultMap>
+    <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.zanxiang.mybatis.entity.GameStrategy">
+        <result column="config" jdbcType="LONGVARCHAR" property="config"/>
+    </resultMap>
+    <sql id="Base_Column_List">
+        id
+        , name, type, game_id, is_delete, status, channel,
+	create_time, update_time
+    </sql>
+    <sql id="Blob_Column_List">
+        config
+    </sql>
+</mapper>

+ 0 - 0
game-module/game-mybatis/src/main/resources/mapper/UserOauthMapper.xml → game-module/game-mybatis/src/main/resources/mapper/GameStrategyService.xml


+ 22 - 0
game-module/game-mybatis/src/main/resources/mapper/HLogPayCpMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.zanxiang.mybatis.mapper.HLogPayCpMapper">
+    <resultMap id="BaseResultMap" type="com.zanxiang.mybatis.entity.LogPayCpEntity">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="pay_id" jdbcType="INTEGER" property="payId"/>
+        <result column="order_id" jdbcType="VARCHAR" property="orderId"/>
+        <result column="cp_order_id" jdbcType="VARCHAR" property="cpOrderId"/>
+        <result column="status" jdbcType="TINYINT" property="status"/>
+        <result column="cp_status" jdbcType="TINYINT" property="cpStatus"/>
+        <result column="cp_payback_url" jdbcType="VARCHAR" property="cpPaybackUrl"/>
+        <result column="params" jdbcType="VARCHAR" property="params"/>
+        <result column="ext" jdbcType="VARCHAR" property="ext"/>
+        <result column="notify_cnt" jdbcType="INTEGER" property="notifyCnt"/>
+        <result column="create_time" jdbcType="BIGINT" property="createTime"/>
+    </resultMap>
+    <sql id="Base_Column_List">
+        id
+        , pay_id, order_id, cp_order_id, status, cp_status, cp_payback_url,
+	params, ext, notify_cnt, create_time
+    </sql>
+</mapper>

+ 56 - 0
game-module/game-mybatis/src/main/resources/mapper/OrderCompleteMapper.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.zanxiang.mybatis.mapper.OrderCompleteMapper">
+
+  <resultMap id="BaseResultMap" type="com.zanxiang.mybatis.entity.OrderComplete">
+    <id column="order_id" jdbcType="BIGINT" property="orderId"/>
+    <result column="game_id" jdbcType="BIGINT" property="gameId"/>
+    <result column="is_delete" jdbcType="TINYINT" property="isDelete"/>
+    <result column="order_date" jdbcType="DATE" property="orderDate"/>
+    <result column="cp_order_id" jdbcType="VARCHAR" property="cpOrderId"/>
+    <result column="merchant_order_no" jdbcType="VARCHAR" property="merchantOrderNo"/>
+    <result column="user_id" jdbcType="BIGINT" property="userId"/>
+    <result column="user_account" jdbcType="VARCHAR" property="userAccount"/>
+    <result column="user_register_time" jdbcType="TIMESTAMP" property="userRegisterTime"/>
+    <result column="user_register_game" jdbcType="VARCHAR" property="userRegisterGame"/>
+    <result column="user_register_game_ classify" jdbcType="BIGINT" property="userRegisterGame classify"/>
+    <result column="user_register_channel" jdbcType="VARCHAR" property="userRegisterChannel"/>
+    <result column="cp_id" jdbcType="BIGINT" property="cpId"/>
+    <result column="agent_id" jdbcType="VARCHAR" property="agentId"/>
+    <result column="agent_account" jdbcType="VARCHAR" property="agentAccount"/>
+    <result column="agent_media" jdbcType="VARCHAR" property="agentMedia"/>
+    <result column="agent_advert" jdbcType="VARCHAR" property="agentAdvert"/>
+    <result column="product_name" jdbcType="VARCHAR" property="productName"/>
+    <result column="order_amount" jdbcType="DECIMAL" property="orderAmount"/>
+    <result column="real_amount" jdbcType="DECIMAL" property="realAmount"/>
+    <result column="pay_way" jdbcType="VARCHAR" property="payWay"/>
+    <result column="pay_device" jdbcType="VARCHAR" property="payDevice"/>
+    <result column="merchant_no" jdbcType="VARCHAR" property="merchantNo"/>
+    <result column="merchant_name" jdbcType="VARCHAR" property="merchantName"/>
+    <result column="game_regional" jdbcType="VARCHAR" property="gameRegional"/>
+    <result column="game_role" jdbcType="VARCHAR" property="gameRole"/>
+    <result column="game_level" jdbcType="VARCHAR" property="gameLevel"/>
+    <result column="game_vip" jdbcType="VARCHAR" property="gameVip"/>
+    <result column="from_device" jdbcType="VARCHAR" property="fromDevice"/>
+    <result column="is_switch" jdbcType="TINYINT" property="isSwitch"/>
+    <result column="pay_time" jdbcType="TIMESTAMP" property="payTime"/>
+    <result column="end_time" jdbcType="VARCHAR" property="endTime"/>
+    <result column="last_cp_notify_time" jdbcType="TIMESTAMP" property="lastCpNotifyTime"/>
+    <result column="status" jdbcType="TINYINT" property="status"/>
+    <result column="cp_status" jdbcType="TINYINT" property="cpStatus"/>
+    <result column="is_first_recharge" jdbcType="TINYINT" property="isFirstRecharge"/>
+    <result column="advert_notify_status" jdbcType="TINYINT" property="advertNotifyStatus"/>
+    <result column="advert_notify_type" jdbcType="TINYINT" property="advertNotifyType"/>
+    <result column="channel" jdbcType="BIGINT" property="channel"/>
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+  </resultMap>
+  <sql id="Base_Column_List">
+    order_id, game_id, is_delete, order_date, cp_order_id, merchant_order_no, user_id, 
+	user_account, user_register_time, user_register_game, user_register_game_ classify, user_register_channel, cp_id, agent_id, 
+	agent_account, agent_media, agent_advert, product_name, order_amount, real_amount, pay_way, 
+	pay_device, merchant_no, merchant_name, game_regional, game_role, game_level, game_vip, 
+	from_device, is_switch, pay_time, end_time, last_cp_notify_time, status, cp_status, 
+	is_first_recharge, advert_notify_status, advert_notify_type, channel, create_time, update_time
+  </sql>
+</mapper>

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/PayCommonUtil.java

@@ -47,7 +47,7 @@ public class PayCommonUtil {
         while (it.hasNext()) {
             Map.Entry entry = (Map.Entry) it.next();
             String k = (String) entry.getKey();
-            String v = (String) entry.getValue();
+            String v = entry.getValue() == null ? "" : (String) entry.getValue();
             if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                 sb.append(k + "=" + v + "&");
             }

+ 5 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java

@@ -107,4 +107,9 @@ public class PerformOrderServiceImpl implements PerformOrderService {
         }
         return false;
     }
+
+    @Override
+    public Boolean createOrderComplete(String orderId) {
+        return null;
+    }
 }

+ 1 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/PayService.java

@@ -84,6 +84,7 @@ public class PayService {
             attachBO.setPayWay(product.getPayWay());
             attachBO.setGamePayWayId(payInfo.getId());
             product.setAttach(attachBO);
+            this.attach = attachBO;
             String payCode = PayWayEnum.getCodeByNum(product.getPayWay());
             OrderPayService device = getDevice(payCode);
             ResultMap result = device.create(product);

+ 2 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/WxpayServiceImpl.java

@@ -52,11 +52,6 @@ public class WxpayServiceImpl extends PayService implements OrderPayService {
     private String totalFee;
     private String outTradeNo;
 
-    /**
-     * 自定义参数
-     */
-    private ProductPayAttachParamBO attach;
-
 
     /**
      * 支付调起
@@ -81,7 +76,8 @@ public class WxpayServiceImpl extends PayService implements OrderPayService {
                 return this.mobile(product, "NATIVE");
             case 2:
             case 3:
-                return this.mobile(product, "MWEB");
+//                return this.mobile(product, "MWEB");
+                return this.pc(product);
             case 4:
                 return this.mp(product);
             default:

+ 8 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PerformOrderService.java

@@ -14,4 +14,12 @@ public interface PerformOrderService {
      * @param orderId
      */
     public Boolean pushCp(String orderId);
+
+    /**
+     * 生成订单宽表
+     *
+     * @param orderId
+     * @return
+     */
+    public Boolean createOrderComplete(String orderId);
 }