Ver código fonte

逻辑开发

xufeng 2 anos atrás
pai
commit
d1c016e432
20 arquivos alterados com 930 adições e 0 exclusões
  1. 24 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/CpStatusEnum.java
  2. 21 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/PayBoxController.java
  3. 128 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/bo/PayMerchantListBO.java
  4. 19 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/bo/PayWayExtBO.java
  5. 94 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayApplicationListParam.java
  6. 56 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxListParam.java
  7. 7 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxParam.java
  8. 66 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayBoxListVO.java
  9. 162 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayMerchantListVO.java
  10. 71 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/LogPayCp.java
  11. 15 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/LogPayCpMapper.java
  12. 20 0
      game-module/game-mybatis/src/main/resources/mapper/LogPayCpMapper.xml
  13. 22 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/listener/OrderPaySuccessEvent.java
  14. 33 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/listener/OrderPaySuccessListener.java
  15. 12 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/CpService.java
  16. 20 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/CpServiceImpl.java
  17. 21 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LogPayCpServiceImpl.java
  18. 110 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java
  19. 12 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/LogPayCpService.java
  20. 17 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PerformOrderService.java

+ 24 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/CpStatusEnum.java

@@ -0,0 +1,24 @@
+package com.zanxiang.common.enums;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author xufeng
+ * @date 2022/6/27 14:31
+ */
+@Getter
+@NoArgsConstructor
+public enum CpStatusEnum {
+    FAILLE(-1, "失败"),
+    READY(1, "待同步"),
+    SUCCESS(2, "同步成功");
+
+    private int code;
+    private String msg;
+
+    CpStatusEnum(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+}

+ 21 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/PayBoxController.java

@@ -1,6 +1,17 @@
 package com.zanxiang.manage.controller;
 package com.zanxiang.manage.controller;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.manage.domain.bo.PayMerchantBO;
+import com.zanxiang.manage.domain.params.PayMerchantListParam;
+import com.zanxiang.manage.domain.params.PayMerchantParam;
+import com.zanxiang.manage.domain.vo.PayMerchantVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
@@ -14,5 +25,15 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RestController
 @RequestMapping("/pay-box")
 @RequestMapping("/pay-box")
 public class PayBoxController {
 public class PayBoxController {
+    @ApiOperation(value = "支付盒子-新增/修改/删除")
+    @PostMapping(value = "/save")
+    public ResultVo<Boolean> save(@Validated @RequestBody PayMerchantParam param) {
+        return null;
+    }
 
 
+    @ApiOperation(value = "商户号-列表")
+    @PostMapping(value = "/list")
+    public ResultVo<IPage<PayMerchantVO>> list(@Validated @RequestBody PayMerchantListParam param) {
+        return null;
+    }
 }
 }

+ 128 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/bo/PayMerchantListBO.java

@@ -0,0 +1,128 @@
+package com.zanxiang.manage.domain.bo;
+
+import com.zanxiang.common.base.BasePage;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author xufeng
+ * @date 2022/6/16 19:14
+ */
+@Data
+@NoArgsConstructor
+public class PayMerchantListBO extends BasePage<PayMerchantListBO> {
+
+    private Long id;
+
+    /**
+     * 支付方式id
+     */
+    private Integer payWayId;
+
+    /**
+     * 商户号
+     */
+    private String merchantNo;
+
+    /**
+     * 商户名称
+     */
+    private String merchantName;
+
+    /**
+     * 支持支付方式(pc/h5/app/)
+     */
+    private String payDevice;
+
+    /**
+     * 商户号登录账号
+     */
+    private String loginName;
+
+    /**
+     * 商户号登录密码
+     */
+    private String loginPassword;
+
+    /**
+     * 管理员
+     */
+    private String managePerson;
+
+    /**
+     * 绑定手机号
+     */
+    private String mobile;
+
+    /**
+     * 绑定邮箱
+     */
+    private String email;
+
+    /**
+     * 状态 1 不可用 2 可用
+     */
+    private Integer status;
+
+    /**
+     * 支付配置json (存储根据payway设置后,配置的具体商户号信息)
+     */
+    private String payConfig;
+
+    /**
+     * 最大支付额度锁 0 正常 1 锁定
+     */
+    private Integer maxPayLock;
+
+    /**
+     * 最大支付额度
+     */
+    private BigDecimal maxPayAmount;
+
+    /**
+     * 月已用支付额度
+     */
+    private BigDecimal mouthPayAmount;
+
+    /**
+     * 月更新日期
+     */
+    private Date mouthUpdateDate;
+
+    /**
+     * 周已用额度
+     */
+    private BigDecimal weakerPayAmount;
+
+    /**
+     * 周更新日期
+     */
+    private Date weakerUpdateDate;
+
+    /**
+     * 日已用额度
+     */
+    private BigDecimal dayPayAmount;
+
+    /**
+     * 日更新日期
+     */
+    private Date dayUpdateDate;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 是否已删除 1 已删除 2 正常
+     */
+    private Integer isDelete;
+    /**
+     * 删除时间
+     */
+    private Date deleteTime;
+}

+ 19 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/bo/PayWayExtBO.java

@@ -0,0 +1,19 @@
+package com.zanxiang.manage.domain.bo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 支付配置
+ *
+ * @author xufeng
+ * @date 2022/6/29 10:56
+ */
+@Data
+public class PayWayExtBO {
+
+    private Map<String, String> payDevice;
+
+    private Object config;
+}

+ 94 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayApplicationListParam.java

@@ -0,0 +1,94 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.PayApplication;
+import com.zanxiang.mybatis.entity.PayMerchant;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 注释游戏应用表
+ *
+ * @author xufeng
+ * @date 2022-06-20 15:16
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayApplicationListParam extends BasePage<PayApplication> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 应用名称
+     */
+    @ApiModelProperty(notes = "应用名称")
+    private String name;
+
+    /**
+     * 类型 1 微信小程序
+     */
+    @ApiModelProperty(notes = "类型 1 微信小程序")
+    private Integer type;
+
+    /**
+     * 应用appid
+     */
+    @ApiModelProperty(notes = "应用appid")
+    private String appId;
+
+    /**
+     * 应用原始id
+     */
+    @ApiModelProperty(notes = "应用原始id")
+    private String primevalId;
+
+    /**
+     * 应用主体
+     */
+    @ApiModelProperty(notes = "应用主体")
+    private String company;
+
+    /**
+     * 登录账号
+     */
+    @ApiModelProperty(notes = "登录账号")
+    private String loginName;
+
+    /**
+     * 登录密码
+     */
+    @ApiModelProperty(notes = "登录密码")
+    private String loginPassword;
+
+    /**
+     * 管理员
+     */
+    @ApiModelProperty(notes = "管理员")
+    private String managePerson;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(notes = "备注")
+    private String remark;
+
+    /**
+     * 状态 1 不可用 2 可用
+     */
+    @ApiModelProperty(notes = "状态 1 不可用 2 可用")
+    private Integer status;
+
+    /**
+     * 是否已删除 1 已删除 2 正常
+     */
+    @ApiModelProperty(notes = "是否已删除 1 已删除 2 正常")
+    private Integer isDelete;
+
+}

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

@@ -0,0 +1,56 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.PayBox;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author xufeng
+ * @date 2022/6/16 19:14
+ */
+@Data
+@NoArgsConstructor
+public class PayBoxListParam extends BasePage<PayBox> implements Serializable {
+
+    private Integer id;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty(notes = "名称")
+    private String name;
+
+    /**
+     * 支付名称
+     */
+    @ApiModelProperty(notes = "支付名称")
+    private String payName;
+
+    /**
+     * 应用id
+     */
+    @ApiModelProperty(notes = "应用id")
+    private Integer payApplicationId;
+
+    /**
+     * 商户号id(多个逗号分割,id,)
+     */
+    @ApiModelProperty(notes = "商户号id(多个逗号分割,id,)")
+    private String payMerchantId;
+
+    /**
+     * 盒子类型 1、金币 2、红包
+     */
+    @ApiModelProperty(notes = "盒子类型 1、金币 2、红包")
+    private Integer type;
+
+    /**
+     * 描述
+     */
+    @ApiModelProperty(notes = "描述")
+    private String desc;
+}

+ 7 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxParam.java

@@ -1,5 +1,6 @@
 package com.zanxiang.manage.domain.params;
 package com.zanxiang.manage.domain.params;
 
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
@@ -18,30 +19,36 @@ public class PayBoxParam implements Serializable {
     /**
     /**
      * 名称
      * 名称
      */
      */
+    @ApiModelProperty(notes = "名称")
     private String name;
     private String name;
 
 
     /**
     /**
      * 支付名称
      * 支付名称
      */
      */
+    @ApiModelProperty(notes = "支付名称")
     private String payName;
     private String payName;
 
 
     /**
     /**
      * 应用id
      * 应用id
      */
      */
+    @ApiModelProperty(notes = "应用id")
     private Integer payApplicationId;
     private Integer payApplicationId;
 
 
     /**
     /**
      * 商户号id(多个逗号分割,id,)
      * 商户号id(多个逗号分割,id,)
      */
      */
+    @ApiModelProperty(notes = "商户号id(多个逗号分割,id,)")
     private String payMerchantId;
     private String payMerchantId;
 
 
     /**
     /**
      * 盒子类型 1、金币 2、红包
      * 盒子类型 1、金币 2、红包
      */
      */
+    @ApiModelProperty(notes = "盒子类型 1、金币 2、红包")
     private Integer type;
     private Integer type;
 
 
     /**
     /**
      * 描述
      * 描述
      */
      */
+    @ApiModelProperty(notes = "描述")
     private String desc;
     private String desc;
 }
 }

+ 66 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayBoxListVO.java

@@ -0,0 +1,66 @@
+package com.zanxiang.manage.domain.vo;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.PayBox;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 支付盒子
+ *
+ * @author xufeng
+ * @date 2022-06-22 15:26
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayBoxListVO extends BasePage<PayBox> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 支付名称
+     */
+    private String payName;
+
+    /**
+     * 应用id
+     */
+    private Integer payApplicationId;
+
+    /**
+     * 商户号id(多个逗号分割,id,)
+     */
+    private String payMerchantId;
+
+    /**
+     * 盒子类型 1、金币 2、红包
+     */
+    private Integer type;
+
+    /**
+     * 描述
+     */
+    private String desc;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 162 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayMerchantListVO.java

@@ -0,0 +1,162 @@
+package com.zanxiang.manage.domain.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author xufeng
+ * @date 2022/6/16 19:14
+ */
+@Data
+@NoArgsConstructor
+@ApiModel
+public class PayMerchantListVO implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+
+    private Long id;
+    /**
+     * 支付方式id
+     */
+    @ApiModelProperty(notes = "支付方式id")
+    private Integer payWayId;
+
+    @ApiModelProperty(notes = "支付方式")
+    private String payWayName;
+
+    /**
+     * 商户号
+     */
+    @ApiModelProperty(notes = "商户号")
+    private String merchantNo;
+
+    /**
+     * 商户名称
+     */
+    @ApiModelProperty(notes = "商户名称")
+    private String merchantName;
+
+    /**
+     * 支持支付方式(pc/h5/app/)
+     */
+    @ApiModelProperty(notes = "商户类型")
+    private String payDevice;
+
+    /**
+     * 支持支付方式(pc/h5/app/)
+     */
+    @ApiModelProperty(notes = "商户名称")
+    private String payDeviceName;
+
+    /**
+     * 商户号登录账号
+     */
+    @ApiModelProperty(notes = "商户名称")
+    private String loginName;
+
+    /**
+     * 商户号登录密码
+     */
+    @ApiModelProperty(notes = "商户号登录密码")
+    private String loginPassword;
+
+    /**
+     * 管理员
+     */
+    @ApiModelProperty(notes = "管理员")
+    private String managePerson;
+
+    /**
+     * 绑定手机号
+     */
+    @ApiModelProperty(notes = "绑定手机号")
+    private String mobile;
+
+    /**
+     * 绑定邮箱
+     */
+    @ApiModelProperty(notes = "绑定邮箱")
+    private String email;
+
+    @ApiModelProperty(notes = "状态 1 不可用 2 可用")
+    private Integer status;
+
+    /**
+     * 支付配置json (存储根据payway设置后,配置的具体商户号信息)
+     */
+    @ApiModelProperty(notes = "支付配置json")
+    private String payConfig;
+
+    /**
+     * 最大支付额度锁 0 正常 1 锁定
+     */
+    @ApiModelProperty(notes = "最大支付额度锁 0 正常 1 锁定")
+    private Integer maxPayLock;
+
+    /**
+     * 最大支付额度
+     */
+    @ApiModelProperty(notes = "最大支付额度")
+    private BigDecimal maxPayAmount;
+
+    @ApiModelProperty(notes = "总支付金额")
+    private BigDecimal totalPayAmount;
+
+    /**
+     * 月已用支付额度
+     */
+    @ApiModelProperty(notes = "月已用支付额度")
+    private BigDecimal mouthPayAmount;
+
+    /**
+     * 月更新日期
+     */
+    @ApiModelProperty(notes = "月更新日期")
+    private Date mouthUpdateDate;
+
+    /**
+     * 周已用额度
+     */
+    @ApiModelProperty(notes = "周已用额度")
+    private BigDecimal weakerPayAmount;
+
+    /**
+     * 周更新日期
+     */
+    private Date weakerUpdateDate;
+
+    /**
+     * 日已用额度
+     */
+    private BigDecimal dayPayAmount;
+
+    /**
+     * 日更新日期
+     */
+    private Date dayUpdateDate;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(notes = "备注")
+    private String remark;
+
+    /**
+     * 是否已删除 1 已删除 2 正常
+     */
+    @ApiModelProperty(notes = "是否已删除 1 已删除 2 正常")
+    private Integer isDelete;
+    /**
+     * 删除时间
+     */
+    @ApiModelProperty(notes = "删除时间")
+    private Date deleteTime;
+}

+ 71 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/LogPayCp.java

@@ -0,0 +1,71 @@
+package com.zanxiang.mybatis.entity;
+
+import java.io.Serializable;
+
+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;
+
+/**
+ * 注释通知CP记录表
+ *
+ * @author xufeng
+ * @date 2022-06-27 14:07
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("h_log_pay_cp")
+public class LogPayCp implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    private String orderId;
+
+    /**
+     * CP订单号
+     */
+    private String cpOrderId;
+
+    /**
+     * 充值成功标志,1为待处理,2为成功,3为失败
+     */
+    private Integer status;
+
+    /**
+     * 充值回调标志,1为待处理,2为成功,3为失败
+     */
+    private Integer cpStatus;
+
+    /**
+     * CP回调地址
+     */
+    private String cpPaybackUrl;
+
+    /**
+     * CP回调参数
+     */
+    private String params;
+
+    /**
+     * CP附加参数
+     */
+    private String ext;
+
+    /**
+     * 通知次数
+     */
+    private Integer notifyCnt;
+}

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

@@ -0,0 +1,15 @@
+package com.zanxiang.mybatis.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import com.zanxiang.mybatis.entity.LogPayCp;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 注释通知CP记录表 Mapper
+ *
+ * @author xufeng
+ * @date 2022-06-27 14:07
+ */
+@Mapper
+public interface LogPayCpMapper extends BaseMapper<LogPayCp> {
+}

+ 20 - 0
game-module/game-mybatis/src/main/resources/mapper/LogPayCpMapper.xml

@@ -0,0 +1,20 @@
+<?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.LogPayCpMapper">
+    <resultMap id="BaseResultMap" type="com.zanxiang.mybatis.entity.LogPayCp">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <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"/>
+    </resultMap>
+    <sql id="Base_Column_List">
+        id
+        , order_id, cp_order_id, status, cp_status, cp_payback_url,
+	params, ext, notify_cnt
+    </sql>
+</mapper>

+ 22 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/listener/OrderPaySuccessEvent.java

@@ -0,0 +1,22 @@
+package com.zanxiang.sdk.common.listener;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 订单支付完成事件
+ *
+ * @author xufeng
+ * @date 2022/6/27 10:27
+ */
+@Getter
+public class OrderPaySuccessEvent extends ApplicationEvent {
+
+    private final String orderId;
+
+    public OrderPaySuccessEvent(Object source, String orderId) {
+        super(source);
+        this.orderId = orderId;
+
+    }
+}

+ 33 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/listener/OrderPaySuccessListener.java

@@ -0,0 +1,33 @@
+package com.zanxiang.sdk.common.listener;
+
+import com.zanxiang.sdk.service.PerformOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 订单支付完成事件监听
+ *
+ * @author xufeng
+ * @date 2022/6/27 10:22
+ */
+@Configuration
+@Component
+public class OrderPaySuccessListener {
+
+    @Resource
+    private PerformOrderService performOrderService;
+
+    @EventListener
+    @Async
+    public void onApplicationEvent(OrderPaySuccessEvent event) {
+        System.out.println("OrderPaySuccessListener success!");
+        System.out.println(event.getOrderId());
+        //cp推送
+        performOrderService.pushCp(event.getOrderId());
+    }
+}

+ 12 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/CpService.java

@@ -0,0 +1,12 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.Cp;
+
+/**
+ * @author : xufeng
+ * @time : 2022-06-27
+ * @description : cp管理
+ */
+public interface CpService extends IService<Cp> {
+}

+ 20 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/CpServiceImpl.java

@@ -0,0 +1,20 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.mybatis.entity.Cp;
+import com.zanxiang.mybatis.mapper.CpMapper;
+import com.zanxiang.sdk.service.CpService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : xufeng
+ * @time : 2022-06-27
+ * @description : cp管理
+ */
+@Slf4j
+@Service
+public class CpServiceImpl extends ServiceImpl<CpMapper, Cp> implements CpService {
+
+}

+ 21 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LogPayCpServiceImpl.java

@@ -0,0 +1,21 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.mybatis.entity.Cp;
+import com.zanxiang.mybatis.entity.LogPayCp;
+import com.zanxiang.mybatis.mapper.CpMapper;
+import com.zanxiang.mybatis.mapper.LogPayCpMapper;
+import com.zanxiang.sdk.service.LogPayCpService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * cp通知履约逻辑
+ *
+ * @author xufeng
+ * @date 2022/6/28 10:36
+ */
+@Slf4j
+@Service
+public class LogPayCpServiceImpl extends ServiceImpl<LogPayCpMapper, LogPayCp> implements LogPayCpService {
+}

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

@@ -0,0 +1,110 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.alipay.easysdk.kernel.util.Signer;
+import com.zanxiang.common.enums.CpStatusEnum;
+import com.zanxiang.common.enums.ResEnum;
+import com.zanxiang.mybatis.entity.LogPayCp;
+import com.zanxiang.mybatis.entity.Order;
+import com.zanxiang.sdk.common.util.HttpUtil;
+import com.zanxiang.sdk.common.util.MD5Util;
+import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
+import com.zanxiang.sdk.service.LogPayCpService;
+import com.zanxiang.sdk.service.PerformOrderService;
+import com.zanxiang.sdk.service.PlatformOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.TreeMap;
+
+/**
+ * 订单履约逻辑
+ *
+ * @author xufeng
+ * @date 2022/6/27 11:17
+ */
+@Component
+@Slf4j
+@Service
+@Transactional
+public class PerformOrderServiceImpl implements PerformOrderService {
+    protected final Logger logger = LoggerFactory.getLogger(PlatformOrderServiceImpl.class);
+
+    @Autowired
+    private PlatformOrderService platformOrderService;
+
+    @Autowired
+    private LogPayCpService logPayCpService;
+
+    public Boolean pushCp(String orderId) {
+        PlatformOrderDTO info = platformOrderService.info(orderId);
+        if (info == null) {
+            logger.error("orderId:{} 订单不存在", orderId);
+            return false;
+        }
+        if (info.getCpStatus() == CpStatusEnum.SUCCESS.getCode()) {
+            return true;
+        }
+        //todo 待完善
+        String app_key = "111";
+        String cpPaybackUrl = "https://baidu.com";
+
+        HashMap<String, String> map = new HashMap<>();
+        map.put("app_id", info.getGameId());
+        map.put("cp_order_id", info.getCpOrderId());
+        map.put("mem_id", info.getMgUserId());
+        map.put("order_status", String.valueOf(info.getStatus()));
+        map.put("pay_time", String.valueOf(info.getPayTime()));
+        map.put("product_id", info.getProductId());
+        map.put("product_price", String.valueOf(info.getAmount()));
+        map.put("ext", info.getExt());
+        map.put("app_key", app_key);
+        TreeMap<String, String> keySort = new TreeMap<>(map);
+        //拼接字符串
+        String param = Signer.getSignCheckContent(keySort);
+        //拼接app_key
+        param += "&app_key=" + app_key;
+        //生成sign
+        String sign = MD5Util.MD5Encode(param, "UTF-8");
+        map.remove("app_key");
+        map.put("sign", sign);
+        //拼接sign请求
+        param += "&sign=" + sign;
+        try {
+            Integer i = info.getCpNotifyCnt() + 1;
+            String s = HttpUtil.postData(cpPaybackUrl, param);
+            Boolean pushSuccess = false;
+            if (s.trim().toLowerCase(Locale.ROOT).equals(ResEnum.SUCCESS.getMsg())) {
+                pushSuccess = true;
+                //更新订单状态
+                Order order = new Order();
+                order.setId(orderId);
+                order.setCpNotifyCnt(i);
+                order.setLastCpNotifyTime(new Date());
+                order.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
+                platformOrderService.updateById(order);
+            }
+            LogPayCp logPayCp = new LogPayCp();
+            logPayCp.setOrderId(orderId);
+            logPayCp.setCpOrderId(info.getCpOrderId());
+            logPayCp.setStatus(info.getStatus());
+            logPayCp.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
+            logPayCp.setCpPaybackUrl(cpPaybackUrl);
+            logPayCp.setParams(param);
+            logPayCp.setExt(info.getExt());
+            logPayCp.setNotifyCnt(i);
+            logPayCpService.save(logPayCp);
+        } catch (Exception e) {
+            logger.error("订单:{} 通知cp方失败 e:{}", orderId, e);
+            e.printStackTrace();
+        }
+        return false;
+    }
+}

+ 12 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/LogPayCpService.java

@@ -0,0 +1,12 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.Cp;
+import com.zanxiang.mybatis.entity.LogPayCp;
+
+/**
+ * @author xufeng
+ * @date 2022/6/28 10:35
+ */
+public interface LogPayCpService extends IService<LogPayCp> {
+}

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

@@ -0,0 +1,17 @@
+package com.zanxiang.sdk.service;
+
+/**
+ * 订单履约逻辑
+ *
+ * @author xufeng
+ * @date 2022/6/27 11:14
+ */
+public interface PerformOrderService {
+
+    /**
+     * cp方履约推送
+     *
+     * @param orderId
+     */
+    public Boolean pushCp(String orderId);
+}