Переглянути джерело

feat : Cp联调支付修改

bilingfeng 2 роки тому
батько
коміт
575812d2f3
17 змінених файлів з 358 додано та 183 видалено
  1. 39 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/MediaType.java
  2. 34 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/ProviderEnum.java
  3. 2 2
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/TestController.java
  4. 2 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/LogPayCp.java
  5. 19 4
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java
  6. 2 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java
  7. 10 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/LoginController.java
  8. 22 3
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/bo/PlatformOrderBO.java
  9. 45 22
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/PlatformOrderDTO.java
  10. 23 9
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderPayServiceImpl.java
  11. 147 104
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java
  12. 4 21
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PlatformOrderServiceImpl.java
  13. 2 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PerformOrderService.java
  14. 0 8
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PlatformOrderService.java
  15. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/AliPayService.java
  16. 5 6
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/PayBaseService.java
  17. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/WxPayService.java

+ 39 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/MediaType.java

@@ -0,0 +1,39 @@
+package com.zanxiang.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-10-26
+ * @description : 推广媒体
+ */
+@Getter
+@AllArgsConstructor
+public enum MediaType {
+
+    /**
+     * 社交
+     */
+    SOCIAL_CONTACT("社交"),
+
+    /**
+     * 短视频
+     */
+    SHORT_VIDEO("短视频"),
+
+    /**
+     * 视频
+     */
+    VIDEO("视频"),
+
+    /**
+     * 资讯
+     */
+    NEWS_INFO("资讯");
+
+    /**
+     * 推广媒体
+     */
+    private String mediaType;
+}

+ 34 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/ProviderEnum.java

@@ -0,0 +1,34 @@
+package com.zanxiang.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-10-26
+ * @description : 服务商
+ */
+@Getter
+@AllArgsConstructor
+public enum ProviderEnum {
+
+    /**
+     * 巨网
+     */
+    JU_GU("巨网"),
+
+    /**
+     * 广联
+     */
+    GUANG_LIAN("短视频"),
+
+    /**
+     * 太古
+     */
+    TAI_GU("太古");
+
+    /**
+     * 推广媒体
+     */
+    private String provider;
+}

+ 2 - 2
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/TestController.java

@@ -26,8 +26,8 @@ public class TestController {
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功")})
 
     public String index() {
-        Order order = orderMapper.selectByPrimaryKey(1L);
-        System.out.println(order);
+
+
         return "game-manage service" + new Time();
     }
 }

+ 2 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/LogPayCp.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -78,5 +79,5 @@ public class LogPayCp implements Serializable {
     /**
      * 创建时间
      */
-    private Date createTime;
+    private LocalDateTime createTime;
 }

+ 19 - 4
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java

@@ -31,7 +31,7 @@ public class Order {
     /**
      * cpId
      */
-    private String cpId;
+    private Long cpId;
 
     /**
      * CP订单号
@@ -41,18 +41,33 @@ public class Order {
     /**
      * 充值用户
      */
-    private String userId;
+    private Long userId;
 
     /**
      * 游戏玩家ID
      */
-    private String mgUserId;
+    private Long mgUserId;
 
     /**
-     * 角色
+     * 角色id
      */
     private String roleId;
 
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 游戏服务器id,默认为0
+     */
+    private String serverId;
+
+    /**
+     * 所在服务器名称
+     */
+    private String serverName;
+
     /**
      * 游戏ID
      */

+ 2 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java

@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -51,7 +52,7 @@ public class OrderComplete implements Serializable {
     /**
      * 订单下单日期(不含时分秒)
      */
-    private Date orderDate;
+    private LocalDateTime orderDate;
 
     /**
      * cp订单号

+ 10 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/LoginController.java

@@ -7,6 +7,7 @@ import com.zanxiang.sdk.domain.params.LoginMobileParam;
 import com.zanxiang.sdk.domain.params.LoginPasswordParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
+import com.zanxiang.sdk.service.PerformOrderService;
 import com.zanxiang.sdk.service.RegisterLoginService;
 import com.zanxiang.sdk.service.UserTokenService;
 import io.swagger.annotations.Api;
@@ -33,6 +34,15 @@ public class LoginController {
     @Autowired
     private UserTokenService userTokenService;
 
+    @Autowired
+    private PerformOrderService performOrderService;
+
+    @UnSignCheck
+    @GetMapping("test")
+    public void test() {
+        performOrderService.test();
+    }
+
     @UnSignCheck
     @ApiOperation(value = "登录凭证验证")
     @GetMapping("/token/check")

+ 22 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/bo/PlatformOrderBO.java

@@ -3,6 +3,7 @@ package com.zanxiang.sdk.domain.bo;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 @Data
@@ -35,6 +36,26 @@ public class PlatformOrderBO {
      */
     private Long gameId;
 
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 游戏服务器id,默认为0
+     */
+    private String serverId;
+
+    /**
+     * 所在服务器名称
+     */
+    private String serverName;
+
     /**
      * 货物总价
      */
@@ -53,13 +74,11 @@ public class PlatformOrderBO {
     /**
      * 游戏商品数量
      */
-//    @NonNull
     private Integer productCnt;
 
     /**
      * 游戏商品名称
      */
-//    @NonNull
     private String productName;
 
     /**
@@ -110,7 +129,7 @@ public class PlatformOrderBO {
     /**
      * 支付时间
      */
-    private Date payTime;
+    private LocalDateTime payTime;
 
     /**
      * 通知次数

+ 45 - 22
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/PlatformOrderDTO.java

@@ -1,22 +1,23 @@
 package com.zanxiang.sdk.domain.dto;
 
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
-import java.util.Date;
+import java.time.LocalDateTime;
 
 @Data
 public class PlatformOrderDTO implements Serializable {
 
+    /**
+     * id
+     */
     private String id;
 
     /**
      * cpId
      */
-    private String cpId;
+    private Long cpId;
 
     /**
      * CP订单号
@@ -26,17 +27,36 @@ public class PlatformOrderDTO implements Serializable {
     /**
      * 充值用户
      */
-    private String userId;
+    private Long userId;
 
     /**
      * 游戏玩家ID
      */
-    private String mgUserId;
+    private Long mgUserId;
+
+    /**
+     * 角色id
+     */
+    private String roleId;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 游戏服务器id,默认为0
+     */
+    private String serverId;
+
+    /**
+     * 所在服务器名称
+     */
+    private String serverName;
 
     /**
      * 游戏ID
      */
-    @JsonSerialize(using = ToStringSerializer.class)
     private Long gameId;
 
     /**
@@ -112,7 +132,7 @@ public class PlatformOrderDTO implements Serializable {
     /**
      * 支付时间
      */
-    private Date payTime;
+    private LocalDateTime payTime;
 
     /**
      * 通知次数
@@ -122,7 +142,7 @@ public class PlatformOrderDTO implements Serializable {
     /**
      * 最近通知时间
      */
-    private Date lastCpNotifyTime;
+    private LocalDateTime lastCpNotifyTime;
 
     /**
      * 客服处理: 2正常; 1纠纷
@@ -135,14 +155,14 @@ public class PlatformOrderDTO implements Serializable {
     private Integer isDistribute;
 
     /**
-     * CP通知状态,1为待处理,2为成功,-1为失败
+     * 是否切量  0 否 1 是
      */
-    private Integer cpStatus;
+    private Boolean isSwitch;
 
     /**
-     * 是否切量  0 否 1 是
+     * CP通知状态,1为待处理,2为成功,-1为失败
      */
-    private Integer isSwitch;
+    private Integer cpStatus;
 
     /**
      * CP附加参数
@@ -175,29 +195,32 @@ public class PlatformOrderDTO implements Serializable {
     private String endTime;
 
     /**
-     * 操作系统
+     * 0正常 1删除
      */
-    private String fromDevice;
+    private Integer isDelete;
 
     /**
-     * 0正常 1删除
+     * 是否首充 0 否 1 是
      */
-    private Integer isDelete;
+    private Integer isFirstRecharge;
 
-    private String payDevice;
+    /**
+     * 操作系统
+     */
+    private String fromDevice;
 
     /**
-     * 角色id
+     * 支付类型, 1:PC, 2: h5支付, 3: App支付, 4: 小程序支付, 5: 米大师支付
      */
-    private String roleId;
+    private Integer payDevice;
 
     /**
      * 创建时间
      */
-    private Date createTime;
+    private LocalDateTime createTime;
 
     /**
      * 更新时间
      */
-    private Date updateTime;
+    private LocalDateTime updateTime;
 }

+ 23 - 9
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderPayServiceImpl.java

@@ -1,20 +1,19 @@
 package com.zanxiang.sdk.service.Impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.common.domain.ResultMap;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.SpringUtils;
 import com.zanxiang.mybatis.entity.Game;
+import com.zanxiang.mybatis.entity.GameUser;
 import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
 import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
 import com.zanxiang.sdk.domain.params.ProductPayParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.enums.PayTypeEnum;
-import com.zanxiang.sdk.service.GamePayWayService;
-import com.zanxiang.sdk.service.GameService;
-import com.zanxiang.sdk.service.OrderPayService;
-import com.zanxiang.sdk.service.PlatformOrderService;
+import com.zanxiang.sdk.service.*;
 import com.zanxiang.sdk.service.pay.PayBaseService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +22,7 @@ import org.springframework.stereotype.Service;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.time.LocalDateTime;
 import java.util.Objects;
 
 /**
@@ -43,6 +43,9 @@ public class OrderPayServiceImpl implements OrderPayService {
     @Autowired
     private GameService gameService;
 
+    @Autowired
+    private GameUserService gameUserService;
+
     @Override
     public ResultMap payCreate(ProductPayParam product, UserData userData) {
         Long userId = userData.getUserId();
@@ -50,18 +53,29 @@ public class OrderPayServiceImpl implements OrderPayService {
         if (game == null) {
             throw new BaseException("参数错误, 游戏信息不存在");
         }
+        GameUser gameUser = gameUserService.getOne(new LambdaQueryWrapper<GameUser>()
+                .eq(GameUser::getUserId, userData.getUserId()));
+        if (gameUser == null) {
+            throw new BaseException("参数错误, 玩家信息不存在");
+        }
         //创建订单
         PlatformOrderBO orderBO = new PlatformOrderBO();
-        orderBO.setAmount(product.getAmount());
-        orderBO.setProductName(product.getProductName());
-        orderBO.setProductId(product.getProductId());
-        orderBO.setMgUserId(userData.getUserId());
+        orderBO.setCpId(game.getCpId());
         orderBO.setUserId(userData.getUserId());
+        orderBO.setMgUserId(gameUser.getId());
+        orderBO.setRoleId(product.getRoleId());
+        orderBO.setRoleName(product.getRoleName());
+        orderBO.setServerId(product.getServerId());
+        orderBO.setServerName(product.getServerName());
         orderBO.setGameId(userData.getGameId());
-        orderBO.setCpId(game.getCpId());
+        orderBO.setAmount(product.getAmount());
+        orderBO.setProductId(product.getProductId());
+        orderBO.setProductName(product.getProductName());
         orderBO.setCpOrderId(product.getOrderId());
         orderBO.setFromDevice(userData.getDeviceSystem());
         orderBO.setPayDevice(userData.getDeviceType());
+        orderBO.setExt(product.getExtension());
+        orderBO.setPayTime(LocalDateTime.now());
         String orderId = platformOrderService.create(orderBO);
         product.setOrderId(orderId);
         //创建支付参数

+ 147 - 104
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java

@@ -1,33 +1,35 @@
 package com.zanxiang.sdk.service.Impl;
 
-import com.alipay.easysdk.kernel.util.Signer;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.zanxiang.common.constant.Constants;
 import com.zanxiang.common.enums.CpStatusEnum;
 import com.zanxiang.common.enums.OrderStateEnum;
-import com.zanxiang.common.enums.ResEnum;
+import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.DateUtils;
-import com.zanxiang.common.utils.MD5Util;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.module.util.JsonUtil;
+import com.zanxiang.module.web.util.URIUtil;
 import com.zanxiang.mybatis.entity.*;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
 import com.zanxiang.sdk.domain.mapper.OrderCompleteCreateMapper;
 import com.zanxiang.sdk.service.*;
-import com.zanxiang.sdk.util.HttpUtil;
+import com.zanxiang.sdk.util.SignUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * 订单履约逻辑
@@ -41,8 +43,6 @@ import java.util.*;
 @Transactional(rollbackFor = {RuntimeException.class, Exception.class})
 public class PerformOrderServiceImpl implements PerformOrderService {
 
-    protected final Logger logger = LoggerFactory.getLogger(PlatformOrderServiceImpl.class);
-
     @Autowired
     private PlatformOrderService platformOrderService;
 
@@ -73,92 +73,135 @@ public class PerformOrderServiceImpl implements PerformOrderService {
     @Autowired
     private PayMerchantService payMerchantService;
 
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private GameExtService gameExtService;
+
     @Override
     public Boolean pushCp(PlatformOrderDTO orderInfo) {
-        logger.info("订单:{} 充值成功推送cp方回调 ----------start---------", orderInfo.getId());
-
-
-
-        logger.error("推送CP方---------------------> " + JsonUtil.toString(orderInfo));
-
-//        if (orderInfo.getCpStatus() == CpStatusEnum.SUCCESS.getCode()) {
-//            return true;
-//        }
-//        //订单id
-//        String orderId = orderInfo.getCpOrderId();
-//        //获取游戏中的app_key与app_key信息
-//        Game gameInfo = gameService.getById(orderInfo.getGameId());
-//
-//        String appKey = gameInfo.getAppKey();
-//        String cpPaybackUrl = gameInfo.getCpPaybackUrl();
-//        if (StringUtils.isEmpty(gameInfo.getAppKey()) || StringUtils.isEmpty(gameInfo.getCpPaybackUrl())) {
-//            logger.error("订单:{} 充值成功推送cp方回调失败,订单中GameId:{} 的游戏信息中,AppKey:{} 或 CpPaybackUrl:{} 为空", orderInfo.getId(), orderInfo.getGameId(), appKey, cpPaybackUrl);
-//            return false;
-//        }
-//        HashMap<String, String> map = new HashMap<>();
-//        map.put("app_id", String.valueOf(orderInfo.getGameId()));
-//        map.put("cp_order_id", orderInfo.getCpOrderId());
-//        map.put("mem_id", orderInfo.getMgUserId());
-//        map.put("order_status", String.valueOf(orderInfo.getStatus()));
-//        map.put("pay_time", String.valueOf(orderInfo.getPayTime()));
-//        map.put("product_id", orderInfo.getProductId());
-//        map.put("product_price", String.valueOf(orderInfo.getAmount()));
-//        map.put("ext", orderInfo.getExt());
-//        map.put("app_key", appKey);
-//        TreeMap<String, String> keySort = new TreeMap<>(map);
-//        //拼接字符串
-//        String param = Signer.getSignCheckContent(keySort);
-//        //拼接app_key
-//        param += "&app_key=" + appKey;
-//        //生成sign
-//        String sign = MD5Util.MD5Encode(param, Constants.UTF8);
-//        map.remove("app_key");
-//        map.put("sign", sign);
-//        //拼接sign请求
-//        param += "&sign=" + sign;
-//        try {
-//            Integer i = orderInfo.getCpNotifyCnt() + 1;
-//            String s = HttpUtil.postData(cpPaybackUrl, param);
-//            boolean pushSuccess = s.trim().toLowerCase(Locale.ROOT).equals(ResEnum.SUCCESS.getMsg());
-//            //更新订单状态
-//            Order order = new Order();
-//            order.setId(orderId);
-//            order.setCpNotifyCnt(i);
-//            order.setLastCpNotifyTime(LocalDateTime.now());
-//            order.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
-//            platformOrderService.updateById(order);
-//            LogPayCp logPayCp = new LogPayCp();
-//            logPayCp.setOrderId(orderId);
-//            logPayCp.setCpOrderId(orderInfo.getCpOrderId());
-//            logPayCp.setStatus(orderInfo.getStatus());
-//            logPayCp.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
-//            logPayCp.setCpPaybackUrl(cpPaybackUrl);
-//            logPayCp.setParams(param);
-//            logPayCp.setExt(orderInfo.getExt());
-//            logPayCp.setNotifyCnt(i);
-//            logPayCpService.save(logPayCp);
-//            logger.info("订单:{} 充值成功推送cp方回调 ----------end---------", orderInfo.getId());
-//            return true;
-//        } catch (Exception e) {
-//            logger.error("订单:{} 充值成功推送cp方回调 失败 e:{}", orderId, e);
-//        }
-        return true;
+        log.info("订单:{} 充值成功推送cp方回调 ----------start---------", orderInfo.getId());
+        if (orderInfo.getCpStatus() == CpStatusEnum.SUCCESS.getCode()) {
+            return true;
+        }
+        Game gameInfo = gameService.getById(orderInfo.getGameId());
+        String cpPaybackUrl = gameInfo.getCpPaybackUrl();
+        if (StringUtils.isEmpty(gameInfo.getCpPaybackUrl())) {
+            log.error("订单充值成功推送cp方回调失败, CP回调地址为空, orderInfo : {}, gameInfo : {}",
+                    JsonUtil.toString(orderInfo), JsonUtil.toString(gameInfo));
+            return false;
+        }
+        //回调CP
+        Map<String, String> map = new HashMap<>(9);
+        map.put("userId", String.valueOf(orderInfo.getUserId()));
+        map.put("money", orderInfo.getAmount().stripTrailingZeros().toPlainString());
+        map.put("time", String.valueOf(System.currentTimeMillis()));
+        map.put("serverId", orderInfo.getServerId());
+        map.put("roleId", orderInfo.getRoleId());
+        map.put("roleName", orderInfo.getRoleName());
+        map.put("orderId", orderInfo.getCpOrderId());
+        map.put("ext", URIUtil.encodeURIComponent(orderInfo.getExt()));
+        map.put("sign", this.paySign(orderInfo.getGameId(), map));
+        //url
+        String url = URIUtil.fillUrlParams(cpPaybackUrl, map, false);
+        log.error("回调Cp的请求地址, url : {}", url);
+        String resultStr = null;
+        try {
+            resultStr = restTemplate.getForObject(url, String.class);
+        } catch (Exception e) {
+            System.out.println("异常" + e.getMessage());
+        }
+        Map<String, String> resultMap = JsonUtil.toMap(resultStr, Map.class, String.class, String.class);
+        boolean pushSuccess = Objects.equals(resultMap.get("result"), "200");
+        //更新订单信息
+        platformOrderService.update(new LambdaUpdateWrapper<Order>()
+                .set(Order::getCpNotifyCnt, orderInfo.getCpNotifyCnt() + 1)
+                .set(Order::getLastCpNotifyTime, LocalDateTime.now())
+                .set(Order::getCpStatus, pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode())
+                .eq(Order::getId, orderInfo.getId())
+        );
+        //更新回调记录
+        LogPayCp logPayCp = new LogPayCp();
+        logPayCp.setOrderId(orderInfo.getId());
+        logPayCp.setCpOrderId(orderInfo.getCpOrderId());
+        logPayCp.setStatus(orderInfo.getStatus());
+        logPayCp.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
+        logPayCp.setCpPaybackUrl(cpPaybackUrl);
+        logPayCp.setParams(JsonUtil.toString(map));
+        logPayCp.setExt(orderInfo.getExt());
+        logPayCp.setNotifyCnt(orderInfo.getCpNotifyCnt() + 1);
+        logPayCpService.save(logPayCp);
+        log.info("订单:{} 充值成功推送cp方回调 ----------end---------", orderInfo.getId());
+        return pushSuccess;
+    }
+
+    private String paySign(Long gameId, Map<String, String> map) {
+        //查询游戏
+        GameExt gameExt = gameExtService.getByGameId(gameId);
+        if (Strings.isBlank(gameExt.getPayKey())) {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("payKey=").append(gameExt.getPayKey());
+        sb.append("&userId=").append(map.get("userId"));
+        sb.append("&money=").append(map.get("money"));
+        sb.append("&time=").append(map.get("time"));
+        sb.append("&serverId=").append(map.get("serverId"));
+        sb.append("&orderId=").append(map.get("orderId"));
+
+        log.error("支付回调参与加密参数, str : {}", sb.toString());
+
+        //加密
+        String sign;
+        try {
+            sign = SignUtil.MD5(sb.toString()).toUpperCase();
+        } catch (Exception e) {
+            throw new BaseException("支付加密异常");
+        }
+        return sign;
     }
 
-    public void test(){
+    @Override
+    public void test() {
         String url = "https://api.vmicro.cn/pm/notify/ly.php?channel_id=61";
+        long time = System.currentTimeMillis();
         HashMap<String, String> map = new HashMap<>();
+        String ext = "{\"appid\":\"328\",\"mtype\":\"61\",\"agent_id\":\"445\",\"site_id\":\"3956\",\"order_id\":\"Y202210271116296076030\"}";
         map.put("userId", "83");
-        map.put("money", "10");
-        map.put("time", String.valueOf(System.currentTimeMillis()));
+        map.put("money", "10.0");
+        map.put("time", String.valueOf(time));
         map.put("serverId", "60076");
         map.put("roleId", "635788e11100264a56573114");
         map.put("roleName", "付晓亦");
+        map.put("orderId", "Y202210271116296076030");
+        map.put("ext", URIUtil.encodeURIComponent(ext));
+
+        String str = "payKey=payKey789&userId=83&money=10.0&time=" + time + "&serverId=60076&orderId=Y202210271116296076030";
+        try {
+            String s = SignUtil.MD5(str).toUpperCase();
+            map.put("sign", s);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        String uri = URIUtil.fillUrlParams(url, map, false);
+
+        log.error("模拟请求支付成功, url : {}", uri);
+
+
+        String object = null;
+
+        try {
+            object = restTemplate.getForObject(uri, String.class);
+        } catch (Exception e) {
+            System.out.println("异常" + e.getMessage());
+        }
+        System.out.println(JsonUtil.toString(object));
     }
 
     @Override
     public Boolean createOrderComplete(PlatformOrderDTO orderInfo) {
-        logger.info("订单:{} 创建订单宽表 ----------start---------", orderInfo.getId());
+        log.info("订单:{} 创建订单宽表 ----------start---------", orderInfo.getId());
         try {
             OrderComplete orderComplete = orderCompleteMapper.info(orderInfo.getId());
             orderComplete.setOrderDate(orderInfo.getCreateTime());
@@ -175,23 +218,23 @@ public class PerformOrderServiceImpl implements PerformOrderService {
             OrderComplete complete = orderCompleteService.getOne(new LambdaQueryWrapper<OrderComplete>().eq(OrderComplete::getOrderId, orderInfo.getId()));
             if (Objects.isNull(complete)) {
                 orderCompleteMapper.insert(orderComplete);
-                logger.info("订单:{} 生成宽表数据成功", orderInfo.getId());
+                log.info("订单:{} 生成宽表数据成功", orderInfo.getId());
             } else {
                 OrderComplete pa = new OrderComplete();
                 pa.setOrderId(complete.getOrderId());
                 orderCompleteService.update(pa, new UpdateWrapper<OrderComplete>().setEntity(orderComplete));
-                logger.info("订单:{} 宽表数据更新成功", orderInfo.getId());
+                log.info("订单:{} 宽表数据更新成功", orderInfo.getId());
             }
             return true;
         } catch (Exception e) {
-            logger.error("订单:{} 生成宽表数据失败 e:{}", orderInfo.getId(), e);
+            log.error("订单:{} 生成宽表数据失败 e:{}", orderInfo.getId(), e);
         }
         return false;
     }
 
     @Override
     public Boolean checkIsFirstRecharge(PlatformOrderDTO orderInfo) {
-        logger.info("订单:{} 检查更新用户是否为首充 ----------start---------", orderInfo.getId());
+        log.info("订单:{} 检查更新用户是否为首充 ----------start---------", orderInfo.getId());
         try {
             Order one = platformOrderService.getOne(new QueryWrapper<Order>().lambda()
                     .eq(Order::getUserId, orderInfo.getUserId())
@@ -202,18 +245,18 @@ public class PerformOrderServiceImpl implements PerformOrderService {
                 order.setId(order.getId());
                 order.setIsFirstRecharge(1);
                 platformOrderService.updateById(order);
-                logger.info("订单:{} 验证订单是否为首充成功", orderInfo.getId());
+                log.info("订单:{} 验证订单是否为首充成功", orderInfo.getId());
                 return true;
             }
         } catch (Exception e) {
-            logger.error("订单:{} 验证订单是否为首充失败 e:{}", orderInfo.getId(), e);
+            log.error("订单:{} 验证订单是否为首充失败 e:{}", orderInfo.getId(), e);
         }
         return true;
     }
 
     @Override
     public Boolean userRechargeTotal(PlatformOrderDTO orderInfo) {
-        logger.info("订单:{} 更新用户充值统计 ----------start---------", orderInfo.getId());
+        log.info("订单:{} 更新用户充值统计 ----------start---------", orderInfo.getId());
         try {
             //订单取消情况 做减法
             float amount = orderInfo.getAmount().floatValue();
@@ -233,12 +276,12 @@ public class PerformOrderServiceImpl implements PerformOrderService {
                         .setEntity(gameUserRole)
                 );
             } else {
-                logger.info("订单:{} 用户玩家角色RoleId为空,不进行gameUserRole充值统计汇总", orderInfo.getId());
+                log.info("订单:{} 用户玩家角色RoleId为空,不进行gameUserRole充值统计汇总", orderInfo.getId());
             }
             //游戏用户统计更新
-            if (StringUtils.isNotEmpty(orderInfo.getMgUserId()) && !"0".equals(orderInfo.getMgUserId())) {
+            if (orderInfo.getMgUserId() != null) {
                 GameUser gameUser = new GameUser();
-                gameUser.setId(Long.valueOf(orderInfo.getMgUserId()));
+                gameUser.setId(orderInfo.getMgUserId());
                 gameUserService.update(gameUser, new UpdateWrapper<GameUser>().lambda()
                         .set(GameUser::getLastRechargeTime, orderInfo.getPayTime())
                         .setSql("recharge_count=recharge_count+" + num)
@@ -246,12 +289,12 @@ public class PerformOrderServiceImpl implements PerformOrderService {
                         .setEntity(gameUser)
                 );
             } else {
-                logger.info("订单:{} 用户玩家MgUserId为空,不进行gameUser充值统计汇总", orderInfo.getId());
+                log.info("订单:{} 用户玩家MgUserId为空,不进行gameUser充值统计汇总", orderInfo.getId());
             }
             //用户统计更新
-            if (StringUtils.isNotEmpty(orderInfo.getUserId()) && !"0".equals(orderInfo.getUserId())) {
+            if (orderInfo.getUserId() != null) {
                 User user = new User();
-                user.setId(Long.valueOf(orderInfo.getUserId()));
+                user.setId(orderInfo.getUserId());
                 userService.update(user, new UpdateWrapper<User>().lambda()
                         .set(User::getLastRechargeTime, orderInfo.getPayTime())
                         .setSql("recharge_count=recharge_count+" + num)
@@ -259,35 +302,35 @@ public class PerformOrderServiceImpl implements PerformOrderService {
                         .setEntity(user)
                 );
             } else {
-                logger.info("订单:{} 用户UserId为空,不进行User充值统计汇总", orderInfo.getId());
+                log.info("订单:{} 用户UserId为空,不进行User充值统计汇总", orderInfo.getId());
             }
             return true;
         } catch (Exception e) {
-            logger.error("订单:{} 用户充值统计逻辑操作失败 e:{}", orderInfo.getId(), e);
+            log.error("订单:{} 用户充值统计逻辑操作失败 e:{}", orderInfo.getId(), e);
         }
         return false;
     }
 
     @Override
     public Boolean payMerchantTotal(PlatformOrderDTO orderInfo) {
-        logger.info("订单:{} 更新商户号统计 ----------start---------", orderInfo.getId());
+        log.info("订单:{} 更新商户号统计 ----------start---------", orderInfo.getId());
         try {
             if (StringUtils.isEmpty(orderInfo.getGamePaywayId())) {
-                logger.error("订单:{} 更新商户号统计时,该订单GamePaywayId为空", orderInfo.getId());
+                log.error("订单:{} 更新商户号统计时,该订单GamePaywayId为空", orderInfo.getId());
                 return false;
             }
             GamePayWay gamePayWayInfo = gamePayWayService.getInfo(orderInfo.getGamePaywayId());
             if (Objects.isNull(gamePayWayInfo)) {
-                logger.error("订单:{} 更新商户号统计时,获取GamePayway表id:{}信息为空", orderInfo.getId(), orderInfo.getGamePaywayId());
+                log.error("订单:{} 更新商户号统计时,获取GamePayway表id:{}信息为空", orderInfo.getId(), orderInfo.getGamePaywayId());
                 return false;
             }
             if (gamePayWayInfo.getPayMerchantId() <= 0) {
-                logger.error("订单:{} 更新商户号统计时,获取GamePayway表id:{}信息中PayMerchantId为空", orderInfo.getId(), orderInfo.getGamePaywayId());
+                log.error("订单:{} 更新商户号统计时,获取GamePayway表id:{}信息中PayMerchantId为空", orderInfo.getId(), orderInfo.getGamePaywayId());
                 return false;
             }
             PayMerchant payMerchantInfo = payMerchantService.getById(gamePayWayInfo.getPayMerchantId());
             if (Objects.isNull(payMerchantInfo)) {
-                logger.error("订单:{} 更新商户号统计时,获取PayMerchant表id:{}信息为空", orderInfo.getId(), gamePayWayInfo.getPayMerchantId());
+                log.error("订单:{} 更新商户号统计时,获取PayMerchant表id:{}信息为空", orderInfo.getId(), gamePayWayInfo.getPayMerchantId());
                 return false;
             }
             BigDecimal amount = orderInfo.getAmount();
@@ -321,10 +364,10 @@ public class PerformOrderServiceImpl implements PerformOrderService {
                     .setSql(dayPayAmount)
                     .setEntity(payMerchantInfo)
             );
-            logger.info("订单:{} 更新商户号统计 ----------end---------", orderInfo.getId());
+            log.info("订单:{} 更新商户号统计 ----------end---------", orderInfo.getId());
             return true;
         } catch (Exception e) {
-            logger.error("订单:{} 更新商户号统计失败 e:{}", orderInfo.getId(), e);
+            log.error("订单:{} 更新商户号统计失败 e:{}", orderInfo.getId(), e);
         }
         return false;
     }

+ 4 - 21
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PlatformOrderServiceImpl.java

@@ -10,6 +10,8 @@ import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.mybatis.mapper.OrderMapper;
 import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
+import com.zanxiang.sdk.domain.params.ProductPayParam;
+import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.listener.OrderPaySuccessEvent;
 import com.zanxiang.sdk.service.PlatformOrderService;
 import lombok.extern.slf4j.Slf4j;
@@ -19,6 +21,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -66,7 +69,7 @@ public class PlatformOrderServiceImpl extends ServiceImpl<OrderMapper, Order> im
             if (!order.getStatus().equals(OrderStateEnum.NO_PAY.getCode())) {
                 throw new BaseException("订单状态非待支付");
             }
-            platformOrderBO.setPayTime(new Date());
+            platformOrderBO.setPayTime(LocalDateTime.now());
             log.info("订单支付提交数据 data:{}", platformOrderBO);
             boolean result = updateById(BeanUtils.copy(platformOrderBO, Order.class));
             if (result) {
@@ -81,26 +84,6 @@ public class PlatformOrderServiceImpl extends ServiceImpl<OrderMapper, Order> im
         }
     }
 
-    @Override
-    public Boolean cancel(PlatformOrderBO platformOrderBO) {
-        log.info("订单支付取消请求参数 platformOrderBO:{}", platformOrderBO);
-        try {
-            Order order = new Order();
-            order.setId(platformOrderBO.getId());
-            order.setStatus(OrderStateEnum.CANCEL.getCode());
-            order.setAdminNote(StringUtils.isEmpty(platformOrderBO.getAdminNote()) ? null : platformOrderBO.getAdminNote());
-            order.setRemark(StringUtils.isEmpty(platformOrderBO.getRemark()) ? null : platformOrderBO.getRemark());
-            log.info("订单取消提交数据 data:{}", order);
-            boolean result = updateById(order);
-            OrderPaySuccessEvent orderPaySuccessEvent = new OrderPaySuccessEvent(this, platformOrderBO.getId());
-            applicationContext.publishEvent(orderPaySuccessEvent);
-            return result;
-        } catch (Exception e) {
-            log.error("订单取消失败 platformOrderBO:{}, error:{}", platformOrderBO, e);
-            return false;
-        }
-    }
-
     @Override
     public PlatformOrderDTO info(String id) {
         Order order = getOne(new LambdaQueryWrapper<Order>().eq(Order::getId, id));

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

@@ -10,6 +10,8 @@ import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
  */
 public interface PerformOrderService {
 
+    void test();
+
     /**
      * cp方履约推送
      *

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

@@ -30,14 +30,6 @@ public interface PlatformOrderService extends IService<Order> {
      */
     Boolean pay(PlatformOrderBO platformOrderBO);
 
-    /**
-     * 订单取消
-     *
-     * @param platformOrderBO
-     * @return true/false
-     */
-    Boolean cancel(PlatformOrderBO platformOrderBO);
-
     /**
      * 单一订单详情获取
      *

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/AliPayService.java

@@ -69,7 +69,7 @@ public class AliPayService extends PayBaseService {
     @Override
     public ResultMap create(ProductPayParamBO product) {
         this.attach = product.getAttach();
-        this.configInit(getPayConfig(product.getGameId(), product.getPayWay(), product.getPayWay()));
+        this.configInit(getPayConfig(product.getGameId(), product.getPayWay()));
         //回调地址中拼接游戏具体支付方式
         returnUrl += "?" + "gamePayWayId=" + attach.getGamePayWayId();
         notifyUrl += "?" + "gamePayWayId=" + attach.getGamePayWayId();

+ 5 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/PayBaseService.java

@@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.math.BigDecimal;
-import java.util.Date;
+import java.time.LocalDateTime;
 
 /**
  * @author : lingfeng
@@ -96,18 +96,17 @@ public abstract class PayBaseService {
         bo.setMerchantOrderNo(merchantOrderNo);
         bo.setStatus(OrderStateEnum.SUCCESS.getCode());
         bo.setGamePaywayId(gamePayWayId);
-        bo.setPayTime(new Date());
+        bo.setPayTime(LocalDateTime.now());
         return platformOrderService.pay(bo);
     }
 
     /**
      * 获取支付配置
      *
-     * @param gameId    游戏id
-     * @param payWay    支付方式
-     * @param payDerive 支付设备
+     * @param gameId 游戏id
+     * @param payWay 支付方式
      */
-    public String getPayConfig(String gameId, Integer payWay, Integer payDerive) {
+    public String getPayConfig(String gameId, Integer payWay) {
         GamePayWay payInfo = gamePayWayService.getPayWayToOrderPay(gameId, payWay);
         this.attach.setGamePayWayId(payInfo.getId());
         return payInfo.getPayConfig();

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/pay/WxPayService.java

@@ -78,7 +78,7 @@ public class WxPayService extends PayBaseService {
     public ResultMap create(ProductPayParamBO product) {
         this.attach = product.getAttach();
         //初始化配置
-        this.configInit(getPayConfig(product.getGameId(), product.getPayWay(), product.getPayDevice()));
+        this.configInit(getPayConfig(product.getGameId(), product.getPayWay()));
         //不同的支付途径
         switch (product.getPayDevice()) {
             case 1: